一、計算表達式x6+4x4+2x3+x+1最少須要作()次乘法ios
A、3 B、4 C、5 D、6web
第一次乘法:x^2,第二次乘法:x^4=x^2 * x^2,第三次乘法:原式=x^2 * (x^4+4x^2+2x)+x+1,每一項的係數可使用加法來實現。。面試
二、給定3個int類型的正整數x,y,z,對以下4組表達式判斷正確的選項()算法
Int a1=x+y-z; int b1=x*y/z;數據庫
Int a2=x-z+y; int b2=x/z*y;設計模式
Int c1=x<<y>>z; int d1=x&y|z;數組
Int c2=x>>z<<y; int d2=x|z&y;網絡
A、a1必定等於a2app
B、b1必定定於b2函數
C、c1必定等於c2
D、d1必定等於d2
三、程序的完整編譯過程分爲是:預處理,編譯,彙編等,以下關於編譯階段的編譯優化的說法中不正確的是()
A、死代碼刪除指的是編譯過程直接拋棄掉被註釋的代碼;
B、函數內聯能夠避免函數調用中壓棧和退棧的開銷
C、For循環的循環控制變量一般很適合調度到寄存器訪問
D、強度削弱是指執行時間較短的指令等價的替代執行時間較長的指令
四、 以下關於進程的描述不正確的是()
A、進程在退出時會自動關閉本身打開的全部文件
B、進程在退出時會自動關閉本身打開的網絡連接
C、進程在退出時會自動銷燬本身建立的全部線程
D、進程在退出時會自動銷燬本身打開的共享內存
五、 在以下8*6的矩陣中,請計算從A移動到B一共有多少種走法?要求每次只能向上揮着向右移動一格,而且不能通過P;
A、492
B、494
C、496
D、498
六、SQL語言中刪除一個表的指令是()
A、DROP TABLE
B、DELETE TABLE
C、DESTROY TABLE
D、REMOVE TABLE
七、某產品團隊由美術組、產品組、client程序組和server程序組4個小組構成,每次構建一套完整的版本時,須要各個組發佈以下資源。美術組想客戶端提供圖像資源(須要10分鐘),產品組向client組合server提供文字內容資源(同時進行,10分鐘),server和client源代碼放置在不一樣工做站上,其完整編譯時間均爲10分鐘切編譯過程不依賴於任何資源,client程序(不包含任何資源)在編譯完畢後還須要完成對程序的統一加密過程(10分鐘)。能夠請問,從要完成一次版本構建(client與server的版本代碼與資源齊備),至少須要多少時間()
A、60分鐘
B、40分鐘
C、30分鐘
D、20分鐘
8、以下關於編譯連接的說法錯誤的是()
A、編譯優化會使得編譯速度變慢
B、預編譯頭文件能夠優化程序的性能
C、靜態連接會使得可執行文件偏大
D、動態連接庫會使進程啓動速度偏慢
9、以下關於連接的說法錯誤的是()
A、一個靜態庫中不能包含兩個同名全局函數的定義
B、一個動態庫中不能包含兩個同名全局函數的定義
C、若是兩個靜態庫都包含一個同名全局函數,他們不能同時被連接
D、若是兩個動態庫都包含一個同名全局函數,他們不能同時被連接
10、排序算法的穩定是指,關鍵碼相同的記錄排序先後相對位置不發生改變,下面哪一種排序算法是不穩定的()
A、插入排序
B、冒泡排序
C、快速排序
D、歸併排序
十一、下列說法中錯誤的是:()
A、插入排序某些狀況下複雜度爲O(n)
B、排序二叉樹元素查找的複雜度可能爲O(n)
C、對於有序列表的排序最快的是快速排序
D、在有序列表中經過二分查找的複雜度必定是O(n log2n)
十二、在程序設計中,要對兩個16K×16K的多精度浮點數二維數組進行矩陣求和時,行優先讀取和列優先讀取的區別是()
A、沒區別
B、行優先快
C、列優先快
D、2種讀取方式速度爲隨機值,沒法判斷
1三、字符串www.qq.com全部非空子串(兩個子串若是內容相同則只算一個)個數是()
A、1024
B、1018
C、55
D、50
1四、TCP的關閉過程,說法正確的是()
A、TIME_WAIT狀態稱爲MSL(Maximum Segment Lifetime)等待狀態
B、對一個established狀態的TCP鏈接,在調用shutdown函數以前調用close接口,可讓主動調用的一方進入半關閉狀態
C、主動發送FIN消息的鏈接端,收到對方迴應ack以前不能發只能收,在收到對方回覆ack以後不能發也不能收,進入CLOSING狀態
D、在已經成功創建鏈接的TCP鏈接上,若是一端收到RST消息可讓TCP的連潔端繞過半關閉狀態並容許丟失數據。
15、操做系統的一些特別端口要爲特定的服務作預留,必需要root權限才能打開的端口描述正確的是()
A、端口號在64512-65535之間的端口
B、全部小於1024的每一個端口
C、RFC標準文檔中已經聲明特定服務的相關端口,例如http服務的80端口,8080端口等
D、全部端口均可以不授權限限制打開
1六、圖書館有6人排隊,其中3人要還同一本書,書名爲《面試寶典》,另外3人要借。問求能保證另外3人借到的種類。
Catalan數 C(2n , n)/( n+1 ) C(6,3)/4 = 5
5*3!*3! = 180
1七、ack(3 , 3)的執行結果是多少?
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_1 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
int ack(int m,int n)
{
if(m == 0)
return n + 1;
else if(n == 0)
return ack(m-1,1);
else
return ack(m - 1 , ack(m , n-1));
}
這個題目能夠找規律的。。
1八、以下SQL語句是須要列出一個論壇版面第一頁(每頁顯示20個)的帖子(post)標題(title),並按照發布(create_time)降序排列:
SELECT title FROM post( )create_time DESC( )0,20 order by limit
1九、爲了某項目須要,咱們準備構造了一種面向對象的腳本語言,例如,對全部的整數,咱們都經過Integer類型的對象來描述。在計算「1+2」時,這裏的「1」,「2」和結果「3」分別爲一個Integer對象。爲了下降設計複雜度,咱們決定讓Integer對象都是隻讀對象,也即在計算a=a+b後,對象a引用的是一個新的對象,而非改a所指對象的值。考慮到性能問題,咱們又引入兩種優化方案:(1)對於數值相等的Integer對象,咱們不會重複建立。例如,計算「1+1」,這裏兩個「1」的引用的是同一個對象——這種設計模式叫作();(2)腳本語言解析器啓動時,默認建立數值範圍[1,32]的32個Integer對象。如今,假設咱們要計算表達式「1+2+3+…+40」,在計算過程須要建立的Integer對象個數是()。
享元模式
20、甲、乙兩我的在玩猜數字遊戲,甲隨機寫了一個數字,在[1,100]區間以內,將這個數字寫在了一張紙上,而後乙來猜。
若是乙猜的數字偏小的話,甲會提示:「數字偏小」
一旦乙猜的數字偏大的話,甲之後就不再會提示了,只會回答「猜對 或 猜錯」
問: 乙至少猜 多少次 猜能夠準確猜出這個數字,在這種策略下, 乙猜的第一個數字是多少???
答案:猜想序列是14,、2七、3九、50、60、6九、7七、8四、90、9五、99
由於不管第幾回猜大了,最終的總次數老是14。 這個題目相似於一道Google面試題 : 扔玻璃球求最高樓層。。
一道關於動態規劃的面試題——Google面試題:扔玻璃珠
某幢大樓有100層。你手裏有兩顆如出一轍的玻璃珠。當你拿着玻璃珠在某一層往下扔的時候,必定會有兩個結果,玻璃珠碎了或者沒碎。這幢大樓有個臨界樓層。低於它的樓層,往下扔玻璃珠,玻璃珠不會碎,等於或高於它的樓層,扔下玻璃珠,玻璃珠必定會碎。玻璃珠碎了就不能再扔。如今讓你設計一種方式,使得在該方式下,最壞的狀況扔的次數比其餘任何方式最壞的次數都少。也就是設計一種最有效的方式。
首先,爲了保存下一顆玻璃珠本身玩,就採用最笨的辦法吧:從第一層開始試,每次增長一層,當哪一層扔下玻璃珠後碎掉了,也就知道了。不過最壞的狀況扔的次數可能爲100。
固然,爲了這一顆玻璃珠代價也高了點,仍是採起另一種辦法吧。隨便挑一層,假如爲N層,扔下去後,若是碎了,那就只能從第一層開始試了,最壞的狀況可能爲N。假如沒碎,就一次增長一層繼續扔吧,這時最壞的狀況爲100-N。也就是說,採用這種辦法,最壞的狀況爲max{N, 100-N+1}。之因此要加一,是由於第一次是從第N層開始扔。
不過仍是以爲不夠好,運氣好的話,挑到的N可能恰好是臨界樓層,運氣很差的話,要扔的次數仍是不少。不過回過頭看看第二種方式,有沒有什麼發現。假如沒摔的話,不如不要一次增長一層繼續扔吧,而是採起另一種方式:把問題轉換爲100-N,在這裏面找臨界樓層,這樣不就把問題轉換成用遞歸的方式來解決嗎?看下面:
假如結果都保存在F[101]這個數組裏面,那麼:
F[N]=100-N,
F[100]=min(max(1,1+F[N-1]),max(2,1+F[N-2]),……,max(N-1,1+F[1]));
看出來了沒有,其實最終就是利用動態規劃來解決這個問題。
下面是本身隨便寫的C++代碼:
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_2 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
#include<iostream>
using namespace std;
int dp[101] = { 0 };
void solve()
{
int i , j , k;
for(i = 2 ; i < 101 ; ++i)
{
dp[i] = i;
for(j = 1 ; j < i ; ++j)
{
k = (j>=(1 + dp[i-j])) ? j : (1 + dp[i-j]);
if(dp[i] > k)
dp[i] = k;
}
}
}
int main(void)
{
dp[0] = 0 , dp[1] = 1;
solve();
printf("%d\n",dp[100]);
return 0;
}
輸出結果爲14。也就是說,最好的方式只要試14次就可以得出結果了。
答案是先從14樓開始拋第一次;若是沒碎,再從27樓拋第二次;若是還沒碎,再從39樓拋第三次;若是還沒碎,再從50樓拋第四次;如此,每次間隔的樓層少一層。這樣,任何一次拋棋子碎時,都能確保最多拋14次能夠找出臨界樓層。
證實以下:
一、第一次拋棋子的樓層:最優的選擇必然是間隔最大的樓層。好比,第一次若是在m層拋下棋子,之後再拋棋子時兩次樓層的間隔必然不大於m層(你們能夠本身用反證法簡單證實)
二、從第二次拋棋子的間隔樓層最優的選擇必然比第一次間隔少一層,第三次的樓層間隔比第二次間隔少一層,如此,之後每次拋棋子樓層間隔比上一次間隔少一層。(你們不妨本身證實一下)
三、因此,設n是第一次拋棋子的最佳樓層,則n即爲知足下列不等式的最小天然數:
不等式以下: 1+2+3+...+(n-1)+n >= 100
由上式可得出n=14
即最優的策略是先從第14層拋下,最多拋14次確定能找出臨界樓層。
2一、給定一個數組a[N],咱們但願構造數組b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。在構造過程:
不容許使用除法;
要求O(1)空間複雜度和O(n)時間複雜度;
除遍歷計數器與a[N] b[N]外,不可以使用新的變量(包括棧臨時變量、對空間和全局靜態變量等);
請用程序實現並簡單描述。
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_3 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
/*
思路:進行3趟掃描
第一趟從左到右對A進行累乘,結果保存在B數組中,b[i] = b[i-1]*a[i-1];
第二趟從右到左對A進行累乘,結果寫入A中,a[i]=a[i+1]*a[i];
第三趟從左到右,而後B數組對應位置的元素等於其前一個位置的元素與A中其後一個位置的元素的乘積。b[i] = a[i+1] * b[i-1]
*/
void makeArray(int a[],int b[],int len)
{
int i;
b[0] = 1;
for(i = 1 ; i < len ; ++i)
b[i] = b[i-1] * a[i-1]; // b[0] = 1 , b[i] = a[0]*a[1]*...*a[i-1]
a[len - 1] = a[len - 1]^a[len - 2]; //不使用中間變量,經過位運算來交換兩個變量
a[len - 2] = a[len - 1]^a[len - 2];
a[len - 1] = a[len - 1]^a[len - 2];
for(i = len - 3 ; i >= 0 ; --i)
{
a[len - 1] = a[i + 1] * a[len - 1];
a[i] = a[i]^a[len - 1]; //交換兩個變量
a[len - 1] = a[i]^a[len - 1];
a[i] = a[i]^a[len - 1];
}
a[len - 1 ] = 1; //a[len - 1 ] = 1 , a[i] = a[i+1]*a[i+2]*...*a[len-1]
for(i = 0 ; i < len ; ++i)
b[i] = a[i] * b[i];
}
方法二:
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_4 name=ZeroClipboardMovie_4 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=4&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
//方法二,保持a數組不變
void makeArray(int a[],int b[],int len)
{
int i;
b[0] = 1;
for(i = 1 ; i < len ; ++i)
{
b[0] *= a[i-1];
b[i] = b[0]; // b[i] = a[0]*a[1]*...*a[i-1]
}
b[0] = 1;
for(i = len - 2 ; i > 0 ; --i)
{
b[0] *= a[i+1]; // b[0] = a[i+1]*a[i+2]...*a[len-1]
b[i] *= b[0]; // b[i] = a[0]*a[1]*...*a[i-1]*a[i+1]*...*a[len-1]
}
b[0] *= a[1];
}
方法三:
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_5 name=ZeroClipboardMovie_5 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer height=18 width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=5&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
void makeArray(int a[],int b[],int len)
{
int i;
b[0] = 1;
for(i = 1 ; i < len ; ++i)
{
b[i] = b[i-1] * a[i-1]; // b[i] = a[0]*a[1]*...*a[i-1]
}
b[0] = a[len - 1];
for(i = len - 2 ; i > 0 ; --i)
{
b[i] *= b[0]; // b[i] = a[0]*a[1]*...*a[i-1]*a[i+1]*...*a[len-1]
b[0] *= a[i]; // b[0] = a[i+1]*a[i+2]...*a[len-1]
}
}
2二、20世紀60年代,美國心理學家米爾格蘭姆設計了一個連鎖信件實驗。米爾格蘭姆把信隨即發送給住在美國各城市的一部分居民,信中寫有一個波士頓股票經紀人的名字,並要求每名收信人把這封信寄給本身認爲是比較接近這名股票經紀人的朋友。這位朋友收到信後再把信寄給他認爲更接近這名股票經紀人的朋友。最終,大部分信件都寄到了這名股票經紀人手中,每封信平均經受6.2詞到達。因而,米爾格蘭姆提出六度分割理論,認爲世界上任意兩我的之間創建聯繫最多隻須要6我的。
假設QQ號大概有10億個註冊用戶,存儲在一千臺機器上的關係數據庫中,每臺機器存儲一百萬個用戶及其的好友信息,假設用戶的平均好友個數大約爲25人左右。
第一問:請你設計一個方案,儘量快的計算存儲任意兩個QQ號之間是否六度(好友是1度)可達,並得出這兩位用戶六度可達的話,最短是幾度可達。
第二問:咱們但願獲得平均每一個用戶的n度好友個數,以增長對用戶更多的瞭解,如今若是每臺機器一秒鐘能夠返回一千條查詢結果,那麼在10天的時間內,利用給出的硬件條件,能夠統計出用戶的最多幾度好友個數?若是但願獲得更高的平均n度好友個數,能夠怎樣改進方案?
2三、段頁式虛擬存儲管理方案的特色。答:空間浪費小、存儲共享容易、存儲保護容易、能動態鏈接。 段頁式管理是段式管理和頁式管理結合而成,兼有段式和頁式管理的優勢,每一段分紅若干頁,再按頁式管理,頁間不要求連續(能動態鏈接);用分段方法分配管理做業,用分頁方法分配管理內存(空間浪費小)。 段頁式管理採用二維地址空間,如段號(S)、頁號(P)和頁內單元號(D);系統建兩張表格每一做業一張段表,每一段創建一張頁表,段表指出該段的頁表在內存中的位置;地址變換機構相似頁式機制,只是前面增長一項段號。因此存儲共享容易、存儲保護容易。