1、用C語言實現一個revert函數,它的功能是將輸入的字符串在原串上倒序后返回。
2、用C語言實現函數void * memmove(void *dest, const void *src, size_t n)。memmove
函數的功能是拷貝src所指的內存內容前n個字節到dest所指的地址上。
分析:由于可以把任何類型的指針賦給void類型的指針,這個函數主要是實現各種數據類型的拷貝。
3、有一根27厘米的細木桿,在第3厘米、7厘米、11厘米、17厘米、23厘米這五個位置上各有一只螞蟻。
木桿很細,不能同時通過一只螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會后退。
當任意兩只螞蟻碰頭時,兩只螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘米的距離。
編寫程序,求所有螞蟻都離開木桿的最小時間和最大時間。
4、給定一個存放整數的數組,重新排列數組使得數組左邊為奇數,右邊為偶數。
要求:空間復雜度O(1),時間復雜度為O(n)。
5、在一維坐標軸上有n個區間段,求重合區間最長的兩個區間段。
6、系統有很多任務,任務之間有依賴,比如B依賴于A,則A執行完后B才能執行
(1)不考慮系統并行性,設計一個函數(Task *Ptask,int Task_num)不考慮并行度,最快的方法完成所有任務。
(2)考慮并行度,怎么設計
typedefstruct{intID;int*child;intchild_num;}Task;
提供的函數:
bool doTask(int taskID);無阻塞的運行一個任務;
int waitTask(int timeout);返回運行完成的任務id,如果沒有則返回-1;
bool killTask(int taskID);殺死進程
7、解釋下面ptr含義和不同
double* ptr = &value;
//ptr是一個指向double類型的指針,ptr的值可以改變,ptr所指向的value的值也可以改變
const double* ptr = &value
//ptr是一個指向const double類型的指針,ptr的值可以改變,ptr所指向的value的值不可以改變
double* const ptr=&value
//ptr是一個指向double類型的指針,ptr的值不可以改變,ptr所指向的value的值可以改變
const double* const ptr=&value
//ptr是一個指向const double類型的指針,ptr的值不可以改變,ptr所指向的value的值也不可以改變
8、去掉const屬性,例: ?const double value = 0.0f; ?double* ptr = NULL;怎么才能讓ptr指向value?
強制類型轉換,去掉const屬性,如ptr = (&value);
http://topic.csdn.net/u/201109 ... 09169
9、一個數組保存了N個結構,每個結構保存了一個坐標,結構間的坐標都不相同,請問如何找到指定坐標的結構(除了遍歷整個數組,是否有更好的辦法)?(要么預先排序,二分查找。要么哈希。hash的話,坐標(x,y)你可以當做一個2位數,寫一個哈希函數,把(x,y)直接轉成“(x,y)”作為key,默認用string比較。或如Edward Lee所說,將坐標(x, y)作為 Hash 中的 key。例如(m, n),通過 (m,n) 和 (n, m) 兩次查找看是否在 HashMap 中。也可以在保存時就規定 (x, y) , x < y ,在插入之前做個判斷。)
10、百度最新面試題:現在有1千萬個隨機數,隨機數的范圍在1到1億之間。現在要求寫出一種算法,將1到1億之間沒有在隨機數中的數求出來。
(編程珠璣上有此類似的一題,如果有足夠的內存的話可以用位圖法,即開一個1億位的bitset,內存為100m/8== 12.5m, 然后如果一個數有出現,對應的bitset上標記為1,最后統計bitset上為0的即可。)
11、linux/unix遠程登陸都用到了ssh服務,當網絡出現錯誤時服務會中斷,linux/unix端的程序會停止。為什么會這樣?說下ssh的原理,解釋中斷的原理。
12、利用互斥量和條件變量設計一個消息隊列,具有以下功能:
1). 創建消息隊列(消息中所含的元素)
2). 消息隊列中插入消息
3). 取出一個消息(阻塞方式)
4). 取出第一消息(非阻塞方式)
13、對已排好序的數組A,一般來說可用二分查找可以很快找到。現有一特殊數組A[],它是循環遞增的,如A[]={ 17 19 20 25 1 4 7 9},試在這樣的數組中找一元素x,看看是否存在。
請寫出你的算法,必要時可寫偽代碼,并分析其空間、時間復雜度。
14、動態鏈接庫與靜態鏈接庫的區別
靜態鏈接庫是.lib格式的文件,一般在工程的設置界面加入工程中,程序編譯時會把lib文件的代碼加入你的程序中因此會增加代碼大小,你的程序一運行lib代碼強制被裝入你程序的運行空間,不能手動移除lib代碼。
動態鏈接庫是程序運行時動態裝入內存的模塊,格式*.dll,在程序運行時可以隨意加載和移除,節省內存空間。
在大型的軟件項目中一般要實現很多功能,如果把所有單獨的功能寫成一個個lib文件的話,程序運行的時候要占用很大的內存空間,導致運行緩慢;但是如果將功能寫成dll文件,就可以在用到該功能的時候調用功能對應的dll文件,不用這個功能時將dll文件移除內存,這樣可以節省內存空間。)
15、指針與引用的區別
相同點:1. 都是地址的概念;
指針指向一塊內存,它的內容是所指內存的地址;引用是某塊內存的別名。
區別:
1). 指針是一個實體,而引用僅是個別名;
2). 引用使用時無需解引用(*),指針需要解引用;
3). 引用只能在定義時被初始化一次,之后不可變;指針可變;
4). 引用沒有 const,指針有 const;
5). 引用不能為空,指針可以為空;
6). “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
7). 指針和引用的自增(++)運算意義不一樣;
8).從內存分配上看:程序為指針變量分配內存區域,而引用不需要分配內存區域。)
16、進程與線程的區別
①從概念上:
進程:一個程序對一個數據集的動態執行過程,是分配資源的基本單位。
線程:一個進程內的基本調度單位。
線程的劃分尺度小于進程,一個進程包含一個或者更多的線程。
②從執行過程中來看:
進程:擁有獨立的內存單元,而多個線程共享內存,從而提高了應用程序的運行效率。
線程:每一個獨立的線程,都有一個程序運行的入口、順序執行序列、和程序的出口。但是線程不能夠獨立的執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
③從邏輯角度來看:(重要區別)
多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但是,操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理及資源分配。)
17、函數調用入棧出棧的過程。
18、c++對象模型與虛表。
19、海量數據處理,以及如何解決Hash沖突等問題。
20、系統設計,概率算法。
21、判斷一個數的所有因數的個數是偶數還是奇數(只需要你判斷因數的個數是偶數個還是奇數個,那么可以這么做@濱湖&&土豆:那只在計算質因數的過程中統計一下當前質因數出現的次數,如果出現奇數次則結果為偶,然后可以立即返回;如果每個質因數的次數都是偶數,那么結果為奇。如果該數是平方數 結果就為奇? 否則就為偶了)。
22、寫一個C的函數,輸入整數N,輸出整數M,M滿足:M是2的n次方,且是不大于N中最大的2的n次方。例如,輸入4,5,6,7,都是輸出4 。
23、C++中虛擬函數的實現機制。
24、寫出選擇排序的代碼及快速排序的算法。
25、你認為什么排序算法最好?
26、tcp/ip的那幾層協議,IP是否是可靠的?為什么?
27、進程和線程的區別和聯系,什么情況下用多線程,什么時候用多進程?
28、指針數組和數組指針的區別。
29、查找單鏈表的中間結點。
30、最近在實驗室課題研究或工作中遇到的技術難點,怎么解決的?
31、sizeof和strlen的區別。
32、malloc-free和new-delete的區別
33、大數據量中找中位數。
34、堆和棧的區別。
35、描述函數調用的整個過程。
36、在一個兩維平面上有三個不在一條直線上的點。請問能夠作出幾條與這些點距離相同的線?
37、假設有一臺迷你計算機,1KB的內存,1MHZ的cpu,已知該計算機執行的程序可出現確定性終止(非死循環),問如何求得這臺計算機上程序運行的最長時間,可以做出任何大膽的假設。
38、C++ STL里面的vector的實現機制,
1).當調用push_back成員函數時,怎么實現?
(粗略的說@owen,內存足則直接 placement new構造對象,否則擴充內存,轉移對象,新對象placement new上去。具體的參見此文:http://blog.csdn.net/v_july_v/ ... 81522)
2).當調用clear成員函數時,做什么操作,如果要釋放內存該怎么做。
(調用析構函數,內存不釋放。 clear沒有釋放內存,只是將數組中的元素置為空了,釋放內存需要delete。)
39、函數foo找錯,該函數的作用是將一個字符串中的a-z的字母的頻數找出來
voidfoo(chara[100],intcnt[256]){memset(cnt,0,sizeof(cnt));while(*a!='\0'){++cnt[*a];++a;}for(charc='a';c<='z';++c){printf("%c:%d\n",c,cnt[c]);}}intmain(){chara[100]="百度abc";intcnt[256];foo(a,cnt);return0;}
40、設子數組A[0:k]和A[k+1:N-1]已排好序(0≤K≤N-1)。試設計一個合并這2個子數組為排好序的數組A[0:N-1]的算法。要求算法在最壞情況下所用的計算時間為O(N),只用到O(1)的輔助空間。
41、一個單詞如果交換其所含字母順序,得到的單詞稱為兄弟單詞,例如mary和army是兄弟單詞,即所含字母是一樣的,只是字母順序不同,用戶輸入一個單詞,要求在一個字典中找出該單詞的所有兄弟單詞,并輸出。給出相應的數據結構及算法。要求時間和空間復雜度盡可能低
目前思想:
struct{chardata;intn};
根據數學定理:任何一個大于1的自然數N,都可以唯一分解成有限個質數的乘積 N=(P_1^a1)*(P_2^a2)......(P_n^an) , 這里P_1
例如
a=2 b=3 c=5 d=7 e=11...
f(abcd)=2*3*5*7=210
然后字典里找乘積210的位數相同的一定是這5個字母組合的單詞就是兄弟單詞?。
42、設rand(s,t)返回[s,t]之間的隨機小數,利用該函數在一個半徑為R的圓內找隨機n個點,并給出時間復雜度分析。
43、為分析用戶行為,系統常需存儲用戶的一些query,但因query非常多,故系統不能全存,設系統每天只存m個query,現設計一個算法,對用戶請求的query進行隨機選擇m個,請給一個方案,使得每個query被抽中的概率相等,并分析之,注意:不到最后一刻,并不知用戶的總請求量。
44、C++ STL中vector的相關問題:
(1)、調用push_back時,其內部的內存分配是如何進行的?
(2)、調用clear時,內部是如何具體實現的?若想將其內存釋放,該如何操作?
45、正常用戶端每分鐘最多發一個請求至服務端,服務端需做一個異常客戶端行為的過濾系統,設服務器在某一刻收到客戶端A的一個請求,則1分鐘內的客戶端任何其它請求都需要被過濾,現知每一客戶端都有一個IPv6地址可作為其ID,客戶端個數太多,以至于無法全部放到單臺服務器的內存hash表中,現需簡單設計一個系統,使用支持高效的過濾,可使用多臺機器,但要求使用的機器越少越好,請將關鍵的設計和思想用圖表和代碼表現出來。
46、如p([1,2,3])輸出:
[123]、[132]、[213]、[231]、[321]、[323]
求一個組合函數
如p([1,2,3])輸出:
[1]、[2]、[3]、[1,2]、[2,3]、[1,3]、[1,2,3]
這兩問可以用偽代碼。
47、如何快速訪問ipv6地址呢?ipv6地址如何存放?
48、正常用戶端每分鐘最多發一個請求至服務端,服務端需做一個異常客戶端行為的過濾系統,設服務器在某一刻收到客戶端A的一個請求,則1分鐘內的客戶端任何其它請求都需要被過濾,現知每一客戶端都有一個IPv6地址可作為其ID,客戶端個數太多,以至于無法全部放到單臺服務器的內存hash表中,現需簡單設計一個系統,使用支持高效的過濾,可使用多臺機器,但要求使用的機器越少越好,請將關鍵的設計和思想用圖表和代碼表現出來。
49、一個單詞單詞字母交換,可得另一個單詞,如army->mary,成為兄弟單詞。提供一個單詞,在字典中找到它的兄弟。描述數據結構和查詢過程。
評點:同去年9月份的一道題,見此文第3題:http://blog.csdn.net/v_july_v/ ... 03368。
50、線程和進程區別和聯系。什么是“線程安全”
51、C和C++怎樣分配和釋放內存,區別是什么
52、一個url指向的頁面里面有另一個url,最終有一個url指向之前出現過的url或空,這兩種情形都定義為null。這樣構成一個單鏈表。給兩條這樣單鏈表,判斷里面是否存在同樣的url。url以億級計,資源不足以hash。
53、數組al[0,mid-1] 和 al[mid,num-1],都分別有序。將其merge成有序數組al[0,num-1],要求空間復雜度O(1)。
54、百度搜索框的suggestion,比如輸入“北京”,搜索框下面會以北京為前綴,展示“北京愛情故事”、“北京公交”、“北京醫院”等等搜索詞,輸入“結構之”,會提示“結構之法”,“結構之法 算法之道”等搜索詞。
請問,如何設計此系統,使得空間和時間復雜度盡量低。
評點:①直接上Trie樹「Trie樹的介紹見:從Trie樹(字典樹)談到后綴樹」 + ?TOP K「hashmap+堆,hashmap+堆 統計出如10個近似的熱詞,也就是說,只存與關鍵詞近似的比如10個熱詞,詳細方法可參看此文第2個題的講解:http://blog.csdn.net/v_july_v/ ... 82693」?
②or Double-array trie tree?同時,StackOverflow上也有兩個討論帖子:http://stackoverflow.com/quest ... plete,http://stackoverflow.com/quest ... e-c-c。
③此外,這里有一篇關于“拼寫錯誤檢查”問題的介紹,或許對你有所啟示:http://blog.afterthedeadline.c ... ions/。。
55、不使用隨機數的洗牌算法,詳情:http://topic.csdn.net/u/201208 ... .html。
56、公司組織一次羽毛球比賽,采用淘汰制,假設公司共有1001人,如果要評出“公司羽毛球第一高手”的稱號,至少需要進行多少場比賽?請簡述設計過程,并編寫代碼模擬比賽過程(語言不限,可以使用偽代碼)。
57、一百個燈泡排成一排,第一輪將所有燈泡打開,第二輪每隔一個燈泡關掉一個,即排在偶數的燈泡都被關掉,第三輪每隔兩個燈泡,將開著的燈泡關掉,關掉的燈泡打開,以此類推,第100輪結束的時候,還有幾盞燈泡亮著?
58、假定有20個有序數組,每個數組中有500個數字,數字類型32位uint數值,降序排列,現在需要取出這10000個數字中最大的500個,怎么做?
59、手機上通常采用九鍵鍵盤輸入,即:1—9個數字鍵分別對應一定的英文字母(如:2對應ABC,3對應DEF,……,9對應WXYZ)。因此,用戶可以方便的輸入中文內容,比如,用戶輸入“926”,可以對應“WXYZ”,“ABC”和“MNO”的一系列組合“WAN”,“YAN”,“ZAO”等,這些對應“萬”,“嚴”,“早”等漢字的中文拼音。
要求:
現在我們把這樣的輸入方式應用在我們的手機聯系人查找功能上,有一個聯系人列表UserList,記錄了(姓名,手機號)這樣的組合,通過輸入的數組字符串NumStr,按照下面的規則把對應的聯系人查找出來,返回一個ResultList。
規則:
1).手機號能連續部分匹配輸入的數字字符串NumStr,如:輸入NumStr=926,則手機號為13926811111會被查找出來。
2).聯系人姓名中的漢字轉化成拼音后能夠連續匹配輸入數字字符串NumStr對應的英文字母組合,如:輸入NumStr=926,則聯系人“王二”,“萬事通”,“李艷”會被查找出來,因為“王二”的“王”的拼音“WANG”中含有“WAN”,和“926”能匹配。
輸入:聯系人列表UserList;漢字拼音映射表Dict;數字字符串NumStr。
輸出:符合規則的聯系人列表ResultList。
60、10億個int型整數,如何找出重復出現的數字。
61、有2G的一個文本文檔,文件每行存儲的是一個句子,每個單詞是用空格隔開的。問:輸入一個句子,如何找到和它最相似的前10個句子。(提示:可用倒排文檔)。
62、一個處理器最多能處理m個任務。現在有n個任務需要完成,每個任務都有自己完成所需的時間。此外每個任務之間有依賴性,比如任務A開始執行的前提是任務B必須完成。設計一個調度算法,使得這n這任務的完成時間最小。
63、有一個排序二叉樹,數據類型是int型,如何找出中間大的元素。
64、一個N個元素的整形數組,如何找出前K個最大的元素。
65、給定一個凸四邊形,如何判斷一個點在這個平面上。
點評:本題的討論及參考答案請見這:http://www.51nod.com/question/ ... 3D669。
66、堆和棧的區別。
67、問如何數出自己頭上的頭發。
68、給定一數組,輸出滿足2a=b(a,b代表數組中的數)的數對,要求時間復雜度盡量低。
69、搜索引擎多線程中每個線程占用多少內存?如果搜索引擎存儲網頁內存占用太大怎么解決?
70、有很多url,例如*.baidu.com,*.sina.com ......
現在給你一個sports.sina.com 快速匹配出是*.sina.com。點評:老題,此前blog內曾整理過。
71、找出字符串的編輯距離,即把一個字符串s1最少經過多少步操作變成編程字符串s2,操作有三種,添加一個字符,刪除一個字符,修改一個字符(只要聽過編輯距離,知道往動態規劃上想,很快就可以找到解法)。
點評:請看鏈接:http://blog.csdn.net/Lost_Pain ... 57334。
72、編程實現memcopy,注意考慮目標內存空間和源空間重疊的時候。
73、實現簡單的一個查找二叉樹的深度的函數。
74、進程和線程的區別。
75、一個有序數組(從小到大排列),數組中的數據有正有負,求這個數組中的最小絕對值。
76、鏈表倒數第n個元素。
77、有一個函數fun能返回0和1兩個值,返回0和1的概率都是1/2,問怎么利用這個函數得到另一個函數fun2,使fun2也只能返回0和1,且返回0的概率為1/4,返回1的概率為3/4。(如果返回0的概率為0.3而返回1的概率為0.7呢)。
78、有8個球,其中有7個球的質量相同,另一個與其他球的質量不同(且不知道是比其他球重還是輕),請問在最壞的情況下,最少需要多少次就能找出這個不同質量的球。
79、有一個數組a,設有一個值n。在數組中找到兩個元素a[i]和a[j],使得a[i]+a[j]等于n,求出所有滿足以上條件的i和j。
80、1萬個元素的數組,90%的元素都是1到100的數,10%的元素是101--10000的數,如何高效排序。
81、用簡單語句描述數據庫操作的步驟?。
82、寫出TCP/IP的四層結構。
83、什么是MVC結構,并描述各層結構的作用?。
84、字母a-z,數字0-9,現需要其中任意3個作為密碼,請輸出所有可能組合。(偽碼\C\C++\JAVA)
點評:如本文評論下第198樓所述,即從26+10=36個不同字符中選取3個字符的組合,用遞歸及非遞歸兩種方法,可以參照以下鏈接:
http://blog.csdn.net/wumuzi520 ... 87501(從n個數中選取m個數的組合數)。
85、實現字符串反轉函數。
86、給定字符函數a、插入 b、刪除 c、替換
例如字符串A=acegf,字符串B=adef,最少需要2步操作將A轉換為B,
即第一步將c替換為d,第二步將g刪除;
1).請問將字符串A=gumbo轉換為字符串B=gambol,最少需要幾步操作,列出如何操作
2).任意字符串A和字符串B,如何計算最小操作次數,計算思路,并給出遞歸公式
3).實現代碼(注意代碼風格與效率)
87、RSA SecurID安全系統
應用場景:這是一種用戶登錄驗證手段,例如銀行登錄系統,這個設備顯示6位數字,每60秒變一次,再經過服務器認證,通過則允許登錄。問How to design this system?
1).系統設計思路?服務器端為何能有效認證動態密碼的正確性?
2).如果是千萬量級永固,給出系統設計圖示或說明,要求子功能模塊劃分清晰,給出關鍵的數據結構或數據庫表結構。
考慮用戶量級的影響和擴展性,用戶密碼的隨機性等,如果設計系統以支持這幾個因素.
3).系統算法升級時,服務器端和設備端可能都要有所修改,如何設計系統,能夠使得升級過程(包括可能的設備替換或重設)盡量平滑?
88、什么是RISC。
89、通過后序、中序求前序?。
90、重寫與重載的區別?。
91、判斷兩個數組中是否有相同的數字?。
92、1000瓶水中找 出有毒的那瓶,毒性一周后發作,一周內最少需要多少只老鼠?。
93、系統設計 email客戶端,支持多賬戶和pop3等協議
1). 請寫出可能的至少5個用例;
2). 使用sqlite存儲帳戶、已收信息、已發信息、附件、草稿,請設計合理的表結構
3). pop3等協議等接口已完成,請給出email客戶端的模塊設計圖。
94、百度地圖里的路線查詢:給定兩個站點,如果沒有直達的路線,如何找到換乘次數最少的路線?
點評:螞蟻算法?還是廣搜,或A*算法?
95、有一箱蘋果,3個一包還剩2個,5個一包還剩3個,7個一包還剩2個,求N個滿足以上條件的蘋果個數。
96、用遞歸算法寫一個函數,求字符串最長連續字符的長度,比如aaaabbcc的長度為4,aabb的長度為2,ab的長度為1。
97、假設一個大小為100億個數據的數組,該數組是從小到大排好序的,現在該數組分成若干段,每個段的數據長度小于20「也就是說:題目并沒有說每段數據的size 相同,只是說每個段的 size < 20 而已」,然后將每段的數據進行亂序(即:段內數據亂序),形成一個新數組。請寫一個算法,將所有數據從小到大進行排序,并說明時間復雜度。
點評:
思路一、如@四萬萬網友所說:維護一個20個元素大小的小根堆,然后排序,每次pop取出小根堆上最小的一個元素(log20),然后繼續遍歷原始數組后續的(N-20)個元素,總共pop?(N-20)次20個元素小根堆的log20的調整操作。
思路二@飄零蝦、如果原數組是a[],那么a[i+20]>=a[i]恒成立(因為每段亂序區間都是小于20的,那么向后取20,必然是更大的區間的元素)。
第一個數組:取第0、20、40、60、80...
第二個數組:取第1、21、41、61、81...
...
第20個數組:取第19、39、59、79... ? ? (上述每個數組100億/20 個元素)
共計20個數組,每個數組100億/20 個元素「注:這5億個元素已經有序,不需要再排序」,且這20個數組都是有序的,然后對這20個數組進行歸并,每次歸并20個元素。時間復雜度跟上述思路一一樣,也是N*logK(N=100億,K=20)。
此外,讀者@木葉漂舟直接按每組20個排序,將排好的20個與前20個調整拼接,調整兩端接頭處的元素,寫了個簡單地demo:http://t.cn/zlELAzs。不過,復雜度有點高,目前來說中規中矩的思路還是如上文中@四萬萬網友 所說思路一「@張瑋-marihees按照思路一:http://weibo.com/1580904460/z1v5jxJ9P,寫了一份代碼:http://codepad.org/T5jIUFPG,歡迎查看」。
98、一在線推送服務,同時為10萬個用戶提供服務,對于每個用戶服務從10萬首歌的曲庫中為他們隨機選擇一首,同一用戶不能推送重復的,設計方案,內存盡可能小,寫出數據結構與算法。
99、來自《編程之美》的概率題:一個桶里面有白球、黑球各100個,現在按下述規則取球:的
i 、每次從通里面拿出來兩個球;
ii、如果取出的是兩個同色的求,就再放入一個黑球;
ii、如果取出的是兩個異色的求,就再放入一個白球。
問:最后桶里面只剩下一個黑球的概率是多少?
100、給你一個自然數N,求[6,N]之內的所有素數中,兩兩之和為偶數的那些偶數。
101、相似度計算用于衡量對象之間的相似程度,在數據挖掘,自然語言處理中是一個基礎性計算,在廣告檢索服務中往往也會判斷網民檢索Query和Adword的主題相似度,假設Query或者Adword的主題屬性定義為一個長度為10000的浮點數組Pr[10000](稱之為主題概率數組),其中Pr[i]表示Query或者Adword屬于主題ID為I的概率,而Query和Adword的相似度簡化定義為兩者主題概率數組的內積:即sim(Query,Adword)=sum(QueryPr[i]*AdwordPri,在實際應用場景中,由于大多數主題的概率都為0,所以主題概率數組往往比較稀疏,在實現時會以一個緊湊型數組topic_info_t[]的方式保存,其中100<=數組大小<=1000,并按照topic_id遞增排列,0<=topic_id<10000,0
Structtopic_info_t{Inttopic_id;Floattopic_pr;};
現在給出Query的topic_info_t數組和N(N>=5000)個Adwords的topic_info_t數組,現要求出Query與Adwords的相似度最大值,即max(sim(Query,Adword[i]))(0<=i
Float max_sim(comst vector&query_topic_info,
Const vectoradwords_topic_info[],
Int adwords_number);
102、動態鏈接庫和靜態鏈接庫分別有什么優缺點?
103、輪詢任務調度與搶占式任務調度的區別?
104、待更新。
105、待更新。
106、長度為N(N很大)的字符串,求這個字符串里的最長回文子串。
107、數軸上從左到右有n個點a[0],a[1]...a[n-1],給定一根長度為L的繩子,求繩子最多能覆蓋其中的幾個點。
108、三色球排序的問題,相同的球放到一起,讓你按順序輸出紅白藍三種顏色的球,可以用012來表示,要求只能掃描一次數組。
點評:荷蘭國旗問題,參見此文第8小節:http://blog.csdn.net/v_july_v/ ... 11155。
109、實現C的strstr
點評:手寫字符串處理相關函數是面試中極為常見的一類題型。
功能:從字符串str1中查找是否有字符串str2,
-如果有,從str1中的str2位置起,返回str1中str2起始位置的指針,如果沒有,返回null。
C++參考代碼:
//copyright@caopengcs?2013/10月classSolution{public:char*strStr(char*haystack,char*needle){//?Start?typing?your?C/C++?solution?below//?DO?NOT?write?int?main()?functioninti,j;for(i=j=0;haystack[i]&&needle[j];){if(haystack[i]==needle[j]){++i;++j;}else{i=i-j+1;j=0;}}returnneedle[j]?0:(haystack+i-j);}};
110、寫一個memmove的函數
點評:手寫常見字符串處理函數是面試官很喜歡考的一類題型。
111、JAVA里面的線程同步機制、異常處理機制、集合類、簡單的設計模式、hashmap和hashtable的區別,及HashMap和ConcurrentHashMap的區別。
112、給出數組A={a_0,a_1,a_2,...,a_n}(n是可變的),打印出所有元素的組合
113、數組A中任意兩個相鄰元素大小相差1,現給定這樣的數組A和目標整數t,找出t在數組A中的位置。
114、求二叉樹的面積(高乘寬),高為二叉樹根到葉子節點的最大距離,寬慰二叉樹最多的節點數。
115、給了一個百度地圖的截圖,對于地圖上的某一點,需要在地圖上標注該點的信息,將信息抽象成一個矩形,可以在該點的左邊標記,也可以在該點右邊標記。但是任意兩點標記后的矩形是不能有覆蓋的,否則刪除其中一個點
問題1,現給一固定區域,有n個點,設計一個算法,要求標記足夠多的點
問題2,當點足夠多時候,算法會遇到性能瓶頸,需要對算法重新優化。
更多題目請參見:http://blog.csdn.net/xyanghome ... 87771。
116、深度神經網絡目前有哪些成功的應用?簡述原因。
117、列舉不同進程共享數據的方式(至少三種)。
118、對于N個樣本,每個樣本為D維向量,采用歐式距離使用KNN做類預測。
1).給出預測時間復雜度。
2).當N很大時,有哪些方法可以降低復雜度?
3).k取值的大小對預測方差和偏差有何影響?
119、給出一個數據A=a_0, a_1, a-2, ... a_n,打印出該數值元素的所有組合。
120、有這樣一個數組A,大小為n,相鄰元素差的絕對值都是1,如A={4,5,6,5,6,7,8,9,10,9}。現在給定數組A和目標整數t,請找到t在數組中的位置。
121、在平面上有一組間距為d的平行線,將一根長度為l(l
122、關于K-means聚類算法,請回答以下問題:
1).寫出將N個樣本X=(x1, ... xN)聚類成k類的k_means聚類算法的優化目標;
2).描述K-means終止的常用條件;
3).以Kmeans算法為例,描述Expectation-Maximization(EM)算法的基本原理與步驟。
4).用偽代碼給出基于MPI或者HADOOP的Kmeans并行算法。
題目來源:http://blog.csdn.net/luoweifu/ ... 85169。
123、簡述計算機的存儲系統分為哪幾個層次,為什么這樣的分層能夠提高程序的執行效率。
124、浮點數在計算中如何表示,如何對浮點數判等。
125、簡述TCP與UDP協議的差別,兩者與HTTP的關系。并列舉HTTP的方法,以及常見的返回狀態碼。
126、設計一個反轉字符串的函數 char *reverse_str(char *str),不使用系統函數。
127、給定一個字符串,(1,(2,3),(4,(5,6),7)),使它變為(1,2,3,4,5,6,7),設計一個算法消除其中嵌套的括號。(c/c++)
128、使用C語言實現htonl(將long性轉為網絡字節碼),不使用系統自帶函數。
129、面向對象是一種思想,使用C語言來實現下列問題。
1). 如何定義一個類?
2). 如何創建以及銷毀對象?
3). 如何實現類的繼承?
題目來源:http://blog.csdn.net/cocoarann ... 91025。
130、數組A中任意兩個相鄰元素大小相差1,在其中查找某個數。
數組A中任意兩個相鄰元素大小相差1,現給定這樣的數組A和目標整數t,找出t在數組A中的位置。
如數組:[1,2,3,4,3,4,5,6,5],找到4在數組中的位置。
這道題目最差時間復雜度也是O(N),所以重點在于能不能找到一種盡可能減少比較次數的方法。@jefflee 的方法就很不錯,但感覺應該還可以繼續優化?
131、給定n個元素,打印出全排列
比如輸入1 2 3,打印出6種排列情況
132、有兩個不同的數在1-30之間(不包括1和30),甲知道兩數之和,乙知道兩數之積。乙問甲知道是那兩個數嗎?甲說不知道。甲同樣反問乙,乙也說不知道。然后乙說我知道了,再然后甲說我知道了。請問是哪兩個數?
解析:前提是甲不能能通過兩數之和確定具體哪兩個數,乙也不能通過兩數之積判斷出具體哪兩個數。
然后當乙知道甲也不能確定的時候,乙卻可以快速判斷出來說明甲心里已經有了幾個選項,然后根據甲不確定就可以排除掉不正確的。然后甲也是如此。
來源:http://ask.julyedu.com/question/261
133、子query統計和重要子query識別
問題定義:
當query A切詞后的term集是query B切詞后的term集的真子集時,稱query A為query B的子query,例如:
“劉德華”的切詞結果為“劉德華”;
“劉德華電影”的切詞結果為“劉德華 電影”;
“劉德華最新電影”的切詞結果為“劉德華 最新 電影”;
“劉德華電影下載”的切詞結果為“劉德華 電影 下載”;
根據以上切詞結果,劉德華”是“劉德華電影”,“劉德華最新電影”, “劉德華電影下載”的子query;
“劉德華電影”是“劉德華最新電影”, “劉德華電影下載”的子query;
但是,“劉德華電影下載”和“劉德華最新電影”互相不是對方的子query。
現有億級的用戶query,并且知道每個query的查詢次數,要求:
(1)列出一個query的全部子query,寫出C語言實現。
(2) query中的不同term對這個query的重要性不同的,例如“劉德華 電影 下載”中“劉德華”和“電影”的重要性比“下載”重要,因為:“劉德華 電影“所表達的查詢需求,與”劉德華 下載“或者”電影 下載“相比,更接近原query的需求。根據(1)中的統計的子query數據,請給出一種思路,來計算一個query中的所有子query的重要性排序。
如果認為子query數據的信息不夠充分,請給出還需要哪些信息,以及獲得這些信息的途徑,給出算法思路描述,必要的符號和推理公式即可。
134、給定多個集合,求他們的笛卡爾積。
比如給定{a, b}, {1,2,3},結果為{a, 1}, {a, 2}, {a, 3}, {b,1}, {b, 2}, {b, 3};
要求時間和空間復雜度盡可能低,不要使用遞歸,不要使用類似樹的非遞歸實現。
135、一個單詞單詞字母交換,可得另一個單詞,如army->mary,成為兄弟單詞。提供一個單詞,在字典中找到它的兄弟。描述數據結構和查詢過程。
136、假設張三的mp3里有1000首歌,現在希望設計一種隨機算法來隨機播放。與普通隨機模式不同的是,張三希望每首歌被隨機到的改了吧是與一首歌的豆瓣評分(0~10分)成正比的,如樸樹的《平凡之路》評分為8.9分,逃跑計劃的《夜空中最亮的星》評分為9.5分,則希望聽《平凡之路》的概率與《夜空中最亮的星》的概率比為89:95,。現在我們已知這1000首歌的豆瓣評分:
1).請設計一種隨機算法來滿足張三的需求。
2).請寫代碼實現自己的算法。
社區討論地址:http://ask.julyedu.com/question/127。
137、給定任意一個正整數,求比這個數大且最小的“不重復數”,“不重復數”的含義是相鄰兩位不相同,例如1101是重復數,而1201是不重復數。
138[6,N]之內的所有素數中,兩兩之和為偶數的那些偶數
RT
其中N是個自然數,請給出算法描述,代碼與時間復雜度分析。
139在由N個正整數的集合S中,找出最大元素C,滿足C=A + B
RT
其中A,B都是集合S中元素,請給出算法描述,代碼與時間復雜度分析。
140、請列舉出你熟悉的知名論壇/社區的名稱、URL、優勢以及原因。
141、如何提高老年人和兒童使用手機百度的頻率?
142、百度衛士新推出看片保護(觀看視頻時防止病毒侵害)功能, 請針對該功能設計一個具體的運營規劃。
143、Cookie、sessionStorage、localStorage的區別
144、javascript中call()方法和apply()方法的區別。
145、什么是 “use strict”? 使用它的好處和壞處是什么?
146、寫一段簡單的正則表達式,匹配并取出字符串”https://www.baidu.com/s?cl=3”中的域名部分(注:域名部分非固定)
147、用原生javascript編寫程序:創建一個ul無序列表元素添加到body中,ul下包含5個li元素,每個li元素包含一個text類型元素,text元素內容可自定義。
148、假設有一個基礎對象叫“動物”,擁有以下屬性:腿的數量、是否有尾巴,有另外一個對象叫“貓”,擁有“動物”對象的屬性,并增加一個屬性為:動物名稱,再增加一個方法,返回動物名稱+腿的數量+是否有尾巴的描述,請使用javascript原型鏈繼承來創建以上2個對象。
149、請解釋tcp連接建立過程,如果可能,請結合相應系統調用函數解釋交互過程。
150、給定一個整數的數組,相鄰的數不能同時選,求從該數組選取若干整數,使得他們的和最大,要求只能使用o(1)的空間復雜度。要求給出偽碼。
151、二分查找是常用的編程方法,請用完整代碼實現該函數(不許調用庫函數)
void *bsearch(const void *key, const void *base, size_t nel, size_t width, int (*compar) (const void *, const void *));
152、對于Edit控件,你如何抓防止密碼框內容被抓取?
153、DNS欺騙的方式有哪些?
154、列舉兩種應用層中簡單的跨進程DLL注入的方法。
155、假設有如下所示的一個數字金字塔,現在,要求寫一個程序來查找從頂點到底部任意處結束的路徑,使路徑經過的數字的和最大,并輸出該路徑的最大和。比如以下金字塔的和最大路徑的和為7+3+8+7+5=30。
7
3 2
8 1 0
2 7 4 4
4 5 2 6 5
156、假設有如下字符串: (234453)[234]{2324} 現在,要求編程分析其括號配對是否正確。請自行選擇下列兩種方案之一實現該程序:
方案一:不考慮括號優先級,只考慮配對正確性;方案二:考慮括號優先級,比如{1[2(3)4]5} 是正確的。但是[1{2}3]是不正確的。
157、百度是一個大型網站,內部含有多個產品線,比如廣為人知的貼吧、知道、空間等應用。然而設計這些應用的統一登錄平臺卻是一件非常艱巨的挑戰。需要考慮到通用性和安全性。
1). 對于一個Web應用程序,主要的身份驗證和憑證保持的方法主要有cookie和session兩種。他們又是如何起作用的?各有哪些優缺點?
2). 影響到cookie值作用范圍的因素有哪些?請一一說明。
3)?.從安全角度來考慮,一個大型網站的單點登錄可能會引入哪些安全問題?如何設計安全的在線單點登錄系統?
158、HTML的Doctype作用??嚴格模式與混雜模式如何區分?它們有何意義?
159、請用CSS實現如下圖的樣式,相關尺寸如圖示,其中dom結構為:
160、簡述document.write和 innerHTML的區別。
161、你知道的,javascript語言的執行環境是"單線程模式",這種模式的好處是實現起來比較簡單,執行環境相對單純;壞處是只要有一個任務耗時很長,后面的任務都必須排隊等著,會拖延整個程序的執行,因此很多時候需要進行“異步模式”,請列舉js異步編程的方法。
162、用戶從手機的瀏覽器訪問www.baidu.com,看到的可能跟桌面PC電腦,是不太一樣的網頁效果,會更適合移動設備使用。請簡要分析一下,實現這種網頁區分顯示的原因及技術原理。
163、Flappy Bird是風靡一時的手機游戲,玩家要操作一只小鳥穿過無窮無盡的由鋼管組成的障礙。如果要你在HTML前端開發這個游戲,為了保證游戲的流暢運行,并長時間運行也不會崩潰,請列舉開發要注意的性能問題和解決的方法。
164、如下圖,請實現表格信息的排序功能,當點擊表頭的屬性區域,將表格信息進行排序切換功能,即第一次點擊為降序排序,再一次點擊進行升序排序。
165、C++有哪些數據類型?為什么long和int都是4字節?
166、JAVA和C++的區別是什么?分別用在什么情景比較好?
167、給定一個文件每一行是字符串,找出所有的逆序對,比如abc和cba是逆序的對。
168、給定一個奇數n,比如n=3,生成1到n平方的數,如1到9,填入九宮格,使得橫豎斜的和都相等。
169、C和C++有什么區別,能用C實現C++所有功能嗎?C能實現多態嗎?
170、25匹馬,5條賽道,一匹馬一個賽道,比賽只能得到5匹馬之間的快慢程度,而不是速度,求決勝1,2,3名至少多少場。
171、請用c++ 實現stl中的string類,實現構造,拷貝構造,析構,賦值,比較,字符串相加,獲取長度及子串等功能。