雜記


一騰訊(2011 4月):(所報職位:後臺開發工程師 – 深圳)
騰訊是我一直準備的公司,因此對筆試的知識點及面試側重點有必定的瞭解。
@筆試
一份2個小時卷子,挺基礎的,具體什麼題記不清楚了。涉及網絡原理c/c++語言基礎及高級機制基礎數據結構及算法數據庫linux基礎linux下可執行文件組織機制(內存佈局,.text,.bss,.data組織方式等)。
由於一直在準備,因此這份卷子答起來,相對比較順利。成績有80+,這個爲經過實習面試起決定性做用。
今天筆試卷子能夠勾選bussinessunit(BU),果斷勾選B3(互動娛樂)。
@一面

  c++ 問了多態實現機制(這個問題多次被面試官問),直接把insightc++ object models書裏面的內存佈局圖搬上去,面試官很是滿意。
  tcp/ip原理,問了TCP狀態變遷圖TCP/IP接受發送緩衝區相關概念。
  對Unix環境編程、網絡編程問的較多,不過都是Apue,Unp上面的,從容應答。
  linux kernel,問了一些內核源碼相關的概念,問得廣而淺,不難回答。html

幾個綜合問題:node

1 QQ飛車新用戶註冊時,如何判斷新註冊名字是否已存在?(數量級:幾億)
2 編寫高效服務器程序,需考慮的因素?
3 Epoll機制相關概念(Epoll與Select機制區別),這個概念許多面試官都會問起
一面答得不錯,加上筆試成績不錯。面試官當場說了一些表揚的話,並把他QQ留給我,說之後什麼事直接諮詢他。我知道本身確定過了,後面面試走流程吧。^_^。
@二面
一個和善的大叔,35-45歲,一直在笑。從簡歷開始,介紹技能,介紹項目經驗,對筆試時的系統設計題作改進優化,隨便說了下本身想法。
@HR面
隨便聊天。
拿到騰訊實習Offer,並在騰訊暑期實習兩個月。mysql

 


2、百度(2011/10) (所報職位:軟件研發工程師 –深圳)

面度的筆試卷子,因部門而異。我報的軟件研發,RD-3的卷子。
@筆試
筆試題回憶版
一簡答題(30分)
1 對遠程linux/unix系統進行遠程操做,一般的途徑是採用終端軟件經過ssh登錄遠程系統進行操做,可是在網絡發生中斷時,Linux/unix端運行的程序將會中斷。
請闡述這種問題發生的原理、經過何種路徑能夠避免這種問題、以及闡述可避免這種問題發生途徑的原理
2 最小堆插入,刪除編程實現。
3 不知所云。
二算法與程序設計(40分)(算法能夠使用僞代碼描述)
4 給定一個數字編碼N,大多數狀況下能夠找到一個數字編碼M,其位數與N相同,各位數字之和與N的各位數字之和相同。而且M是大於N的數值中最小的一個,也可能M不存在。
如:N=134,則M=143.如N=020,則M=101。形式化表述爲F(N)=M。若是M不存在,則F(N)=-1。
要求給定算法計算F(N)序列。
5 給定序列s={a1,a2,…,an};1)構造算法求全排列。2)構造算法求全部組合。
三系統設計題(40分)
這個有時間再慢慢回憶吧。
這個筆試能夠用超爛來形容,勉強40分(後面面試時,卷子上見到)。筆試當天是星期日,當晚手機沒電,充電開機後有兩個未接020-*。由於其餘童鞋都是短信通知,因此沒太在乎,本身沒收到短信通知,很清楚筆試沒過,遂決定霸面。
星期一:霸面,霸終端研發深圳,見到面試官,但面試官一直忙於找我筆試成績,我就一直推銷本身,項目經驗如何,linux如何,內核如何,TCP/IP網絡如何,嵌入式開發如何。終於面試官問了幾個小題,寫了幾個編程之美上面的小題。答的還能夠,但由於霸面,他一直不爽我。
此次霸面很是失敗,本身也備受打擊。
失落的星期一晚上晚,無心中又收到020-*的電話,接起來,對方告知是百度公司,通知星期二去一面。
星期二:哥今天是有通知來一面,不是霸面了。NND。
一面:設計數據結構及改進。我作的很差,我坦言數據結構及算法通常,由於本身忙項目,但項目經驗及linux,網絡知識較豐富。遂轉問linux及內核源碼,tcp/ip原理及實現細節。
他拿着筆記本上網查問題,我壓力大啊。問題廣而深,幸虧linux掌握的還能夠。
記起來的問題有,linux操做系統做用,內存管理在源碼哪一個目錄(mm),說些進程調度內核實現大體機制,TCP/IP接收發送緩衝區,內存管理實現機制。又對項目提問題,要求優化。
面試快結束時,面試官直言我數據結構及算法掌握的不熟練,之後但願強化。雖然知道這可能意味被淘汰,但仍是特別感謝他,遂說了N多謝謝,但都是真心的。由於對比他和霸面的面試官。
星期二晚上一直沒通知,我等到12點就睡了。失望,絕望。雖面試時知道本身可能被淘汰,但仍不肯接受這個事實,但如今不得不接受,帶着遺憾入夢。
星期三晚上,沒有期待的時候,不經意又是百度的通知。那一刻,死裏逃生,我想尖叫。
星期四:二面:兩個算法都是編程之美的。其餘就是linux、內核,網絡、項目,高效服務器,如何預防攻擊等題目,發揮的不錯。面試官一直微笑。我知道三面有了。
星期五:三面:萬幸不問算法,問意向,項目經驗,項目細節及可否優化,linux內核等。由於項目確實是本身完成的,因此答的還不錯。
星期日:收到Offer通知。但職位是北京的研發。

3、華爲:(所報職位:操做系統工程師 –深圳)
@機試
給一個數組,求數組中比平均數大的數字個數。
這題是在考咱們的編程能力嗎?⊙﹏⊙b汗。
@一面
主要就項目問。
@二面
羣面。技術,非技術總16人,分兩組,討論曹操,劉備,孫權,諸葛亮,誰適合當總經理。這個環節,技術的一直被動。Finally,咱們組淘汰了兩個(都是技術)。
@三面
上機性格測試,104題。這個沒據說刷人的。
@四面
跟兩個「老男人」隨便聊,聊項目,聊將來方向,聊華爲操做系統發展,聊linux操做系統及實現,很廣但很淺。

4、網易遊戲面試遊戲系統架構師
@筆試 10.22
網易遊戲筆試,三個小時的題,題量仍是很是大的,設計計算機各們核心課程,操做系統原理,c/c++,基礎數據結構與算法,數學推理題,網絡等。題特別多,題特別雜,幾乎沒有童鞋作完吧。多多益善吧。經歷過考研,一些基礎課程仍是蠻紮實,前40分的題答的不錯,後面的算法題作的通常,我只會最笨重的方法。
@一面 10.24晚上通知11.1下午2點面試
最次給各位同窗提個醒,簡歷必定要多帶幾份,以備不時之需。他要求2份,我帶了5份,份份都起做用了。
通知2點面試,1:50簽到,開始作題,矩陣相乘,差很少10分鐘作完。開始等一面。
大概2:40通知一面,2個面試官。要求先自我介紹,其次問了一個項目,以後問了一句你是哪裏人?你目前拿到哪些公司offer?以後一面結束,不足10分鐘。沒問任何技術,偶是至關不淡定。
@二面 11.1晚上通知11.2下午3點面試
2點半左右到網易準備。大概3點10分,一個女人帶我進面試房間。當時緊張了,這是個人第一個女技術面試官?
進去後,2男1女。面試官先自我介紹,1個大話西遊II主程序,1個天下II主程序,靚女姐姐是HR。二面+HR面一塊兒面的。
問了不少c++高級機制,問了2道基礎算法吧。題目回憶以下:
1 構造函數能夠調用虛函數嗎?語法上經過嗎?語義上能夠經過嗎?
2 析構函數能夠拋出異常嗎?爲何不能拋出異常?除了資源泄露,還有其餘需考慮的因素嗎?
3 c++中類型轉換機制?各適用什麼環境?dynamic_cast轉換失敗時,會出現什麼狀況?(對指針,返回NULL.對引用,拋出bad_cast異常)
4 洗牌算法,如何證實算法是隨機的
5 100萬個32位整數,如何最快找到中位數。能保證每一個數是惟一的,如何實現O(N)算法?
這道題是編程之美或編程珠璣上的。
這道題使用位圖,須要空間複雜度是512M。
6問了一個他們感興趣的項目,關於gcc插件的,聊了比較久。
7 拷貝構造函數做用及用途?何時須要自定義拷貝構造函數?linux

說明:c++

當一個類含有一些數據成員,你須要在實例化類的時候就初始化這些成員,你就須要本身定義構造函數。例如Person類含有m_strName成員,你在聲明該類是就將其賦值 Person myPerson("張三")對於拷貝構造函數,爲了防止淺拷貝形成的兩個對象指向同一內存,當刪除其中一個對象後致使另外一對象指向內容爲空的時候,咱們就須要定義本身的拷貝構造函數來進行深拷貝。當你的類數據成員中使用了動態分配的內存,你就須要定義本身的析構函數來釋放這部份內存,防止內存泄露。
系統定義的默認構造函數和析構函數函數名和類名相同,如Person類:
Person()構造函數
~Person()析構函數程序員

8一些題目記不清楚了。
9聊待遇。
@簽約 11.2晚上收到經過面試通知,通知11.3下午4點簽約。
網易遊戲不一樣部門不一樣職位不一樣面試面試內容不一樣,但都注重基礎知識。還有的一面題目是BFS,這個應該特別容易了,但還有一些童鞋完成的很差。

若是各位師弟師妹,若是以爲此貼對大家有點點幫助,就祝福下我吧,幫我攢點RP吧,多謝。
關於書單,列表以下:面試

一直準備的是騰訊後臺開發,因此針對性很強,不免有偏見,望見諒。
先貼下騰訊後臺開發要求的技能,這些技能要求是我讀書的指南針。
遊戲開發類
後臺開發工程師返回>>
職位描述:
負責遊戲相關後臺系統的開發和設計。
1
職位要求:
一、有Unix/Linux操做系統下的C/C++項目的2年以上開發經驗; 
二、熟悉網絡編程;熟悉Linux下的mysql開發; 
三、精通TCP/IP協議及編程,熟悉互聯網應用協議; 
四、熟悉面向對象的大型分佈式系統設計與開發,瞭解中間件的技術以及基於中間件的開發模式;
五、全面的軟件知識結構(操做系統、軟件工程、設計模式、數據結構、數據庫系統、網絡安全);
六、具有良好的分析解決問題能力,能獨立承擔任務和有系統進度把控能力;
七、責任心強,良好的對外溝通和團隊協做能力,主動,好學。
有如下經驗者優先考慮: 
一、大型分佈式系統設計開發經驗; 
二、遊戲後臺系統開發經驗。

這其中大部分書都是研1下,研2上購買的。大部分已讀完。一部分書反覆讀3遍以上。好比apue,unp,tcp/ip v1等。
重點圈幾本推薦下:(*號書籍強烈推薦)
c/c++:
初級 c語言解惑/C和指針
專家:C專家編程 *
c++ primer/effictive c++/inside c++ *
tcp/ip書籍
tcp/ip v1(tcp/ip詳解卷I) ***,卷2/3不必買,也不必看,這本卷1主要將tcp/ip原理
unp *** 這本主要將linux socket編程API,兩本結合看,效果最佳
unp2(unix 網絡編程第2卷)這本主要講IPC,有時間能夠看看
linux書籍:
apue ***
深刻理解linux內核 *
其餘系列linux源碼書籍,適量看便可。
應試算法及智力題:
編程之美、編程珠璣
海量數據處理:
這個網上收集資料,或者有時間我傳上來。
數據結構:
數據結構與算法分析-C語言描述 Weiss *
考研數據結構1800紅色題集(這本書對於向我這種數據結構基礎薄弱的童鞋,幫助很大)
差點沒忘了2本至牛的書籍:
彙編語言程序設計(絕不誇張的說,這本書改變了我)
深刻理解計算機系統

其餘的沒什麼了,這些書都掌握了,足夠了,O了。

最後,談一談廣研和深圳騰訊的一點面試感覺。
廣研:
筆試:6小題,設計基礎數據結構:鏈表,樹,字符串。很基礎,但也很考驗C語言功底。不要說你會,要熟練,要確保你寫的代碼無誤且編程風格優美。這樣才能增長籌碼。保證你後面順利經過。
一面:講解筆試卷子解題思想,講解項目。面試過程很隨意,面試官主要側重linux,c++,網絡
二面:談一談項目,就項目問一些問題。問一些他們實際中遇到的問題,你會如何解決?也是比較隨意。
騰訊深圳:
筆試:數據結構、tcp/ip、操做系統、計算機底層機制(包括堆棧如何組織等,apue有講),20個多選,每題3分,多選少選不得分。40分大題。每空4分,10空。大題基本是送分的。
這個筆試我得了82分,42+40,  RAID磁盤陣列,b樹/b+樹,堆,幾個問題沒把握,錯了6個選擇題。
82分,一面面試官說算不錯的分數了。
一面:可能由於筆試成績不錯,因此面試過程比較順利。2頁的簡歷,他只看了第1頁的1/2,其它的都沒看。
就我簡歷所列技能問了幾個問題,tcp/ip狀態轉換,socket api,高性能遊戲服務器須要考慮哪些瓶頸,我主要就tcp/ip回答的,好比三次握手隊列,數據接受/發送緩衝區等。linux也問了幾個 proc機制及做用,我直接跟他談 ls /proc內核如何生成結果,這proc文個是件系統源碼所談,他比較滿意。你使用的IPC及比較?  epoll模型及優缺點?(這個年年必考)主要有3點,對應於select的3個缺點:1 鏈接數受限 2 查找配對速度慢 3數據由內核拷貝到用戶態。C++主要問動態如何實現。直接畫內存佈局,既inside c++所講,面試官仍是比較滿意。還問了一些大數量的問題。因爲以前準備過,因此答的還不錯。算法

一面過程當中,面試管屢次提到他對我很是滿意,我也適當的表達了實習後會留職。他把Q號留給我,說之後有什麼事,就在Q上聯繫他。那一刻,我就知,我應該能夠去實習了。呵呵
二面:比較隨意,本身講項目。講完項目,還有點時間,就着筆試附加題問了些問題。後又結合QQ相冊問了些比較難的問題,勉強答了幾個。
hr面:是我全部面試中最慘的一次,因爲以前浩哥面hr很隨意,因此我就沒準備了,由於有一些其餘事要作。中午沒睡好,4點去面,頭暈暈的。被hr問的好慘。主要是談人生。有幾個問題答的很差:你是一個什麼樣的人?你究竟是一個什麼樣的人?MD,這讓我想起另外一個極品噁心的女人,因此這2個問題沒有發揮好。sql

 

百度核心研發面試經驗shell

 

第一面

自我介紹,項目介紹。。。畢設作的是多核並行計算,問了不少細節的技術問題,包括硬件模型,內存使用,並行算法,多線程調度等等等等,大概20分鐘
技術方面:

  • memcpy代碼實現,問了各類問題,包括strcpy,區域重疊,void指針的含義,(char *)是怎麼實現的,const修飾符的含義,返回值的問題,最後還問到內存的某些東西,反正扯的小問題比較多(最後扯得有點遠,大概20分鐘)
  • 找尋二叉樹中兩個節點的公共父節點中最近的那個節點 
    要求: 
    • 每一個節點只有value,p_left和p_right指針 
    • 不能用額外的空間 
    • 不能用每一個節點的index來找尋父節點的index
      (當時的原話是這麼說的,這個大概25分鐘,最開始不限制額外空間,說了算法,而後不是面試官想要的,限制了不能用額外空間,而後又想了個說了下,貌似還不是,無奈放棄了,面試官GG不給答案,進行下一個題目)
  • 3 四個開關,對應四盞燈,進屋一次,要求判斷出這四盞燈對應的開關 要求: 額,有條件要求,可是是你來提問,面試官回答這個條件可不能夠 (這算智力題麼?還好貌似沒被這個BS,這道題目10分鐘) 向面試官提問:大概3分鐘 (p.s一面面試時間1個小時多點,問的東西仍是偏基礎一些)

第二面

自我介紹:對照着簡歷順便問了一下學過的課程和編程方面的信息。項目介紹: 介紹本身作的印象最深的項目,遇到的問題,怎麼解決的,學到了什麼,還能如何進行改善,若是你再作一次的話,會如何去作。。(大概就這麼多,感受很隨意了,這部分大概20分鐘)

技術方面:

  • 手寫程序,輸入一個N*N的矩陣,對角線輸出每一個元素,大概意思以下:  好比輸入4*4的矩陣 
    { 
       0, 1, 2, 3,
       4, 5, 6, 7,
       8, 9,10,11,
      12,13,14,15
      } 

      輸出爲 0,1,4,2,5,8,3,6,9,12…

  • 100億?(忘記具體多少了,反正很大)數據,無序,有符號,隨機,對於給定的一個數X,能不能找到數據中是否存在Y,使得X+Y = K(K給定),仍是分了幾種狀況來問的:1.不限定額外空間和內存,要求時間複雜度儘量低,設計算法實現。2 限定內存爲500M/50M,不限定額外空間,要求時間複雜度儘量低,設計算法實現。3.儘量用少的額外空間,可是要保證必定低的時間複雜度,設計算法實現。這部分總共時間大概有40分鐘左右,我的感受二面不像一面那樣問不少細節信息,面試問題主要是在算法設計方面 向面試官提問:大概3分鐘(p.s二面面試時間正好1個小時,不知道是否是面試官在看着時間,面試官人很和藹,給我倒了一杯水,還拿了幾張白紙,內牛滿面) 

第三面

5月7號(筆試是這個時間吧)到6月2號,戰線拉了有將近一個月,今天算是終面了,呼一口氣。 出了個小插曲,是一位姐姐把我領進去的,而後我還覺得最後的面試官是位女士,到了樓上才知到,原來今天是部門經理面。今天就穿的比較隨意,小慌了一下。 面試官哥哥人特別溫柔,給人很沉穩幹練的感受(這是傳說中的氣場麼?) 最後面完了面試官哥哥居然對我說了句謝謝,當時腦子一會兒就短路了,高層居然能這樣隨和,連連向對方表示感謝,在這裏衷心祝願那位哥哥工做順心順意。

自我介紹和項目介紹都省了 看到個人簡歷有百度產品設計大賽的內容,而後聊了大概有20分鐘, 我真的曾一度覺得這就是傳說中的人生面,but。。 現實就是現實,題目只有兩個:

  • 1 開放性題目:10萬個目標合做企業 ,10億個URL地址,問如何選出其中最有商業價值的1億個URL,進行廣告投放,題目信息就這麼多,而後你本身思考,須要考慮哪些因素,面試官哥哥會告訴你現實能不能知足這些條件,感受很像是工做中遇到的問題,由於是開放性問題,可能就沒有什麼答案,在這個問題上交流了20多分鐘,就像是聊天,徹底按照本身的感受來講的 。
  • 2 設計算法,給定數組,尋找和最大的子數列,要求時間複雜度最低
騰訊實習生面試總結

筆試

感受筆試挺不正規的,多是因爲參加的人太多了吧,我那個教室基本上坐滿了,並且你們互相挨着,很容易就能看到別人的答案。

題型:30道不定項選擇題,兩道程序填空題,附加題。時間爲2個小時。

 

不定項選擇題

考的內容很是普遍,包括但不限定於如下內容:計算機體系結構(32位系統和64位系統的區別)、操做系統(內存和cache)、數據結構(由二叉樹的中序和後序遍歷推出前序遍歷結果)、算法(快排第一遍的結果;哪些排序是穩定性排序)、編譯原理(操做系統,靜態數據區,程序區,堆棧區在內存中的順序)、計算機網絡(服務器收到FIN後處於什麼狀態)。

 選擇排序、快速排序、希爾排序、堆排序不是穩定的排序算法,而冒泡排序、插入排序、歸併排序和基數排序是穩定的排序算法。

程序填空題

(1) 給出一個數n,其中包含1,2,3,4這4個數字,寫一個函數,輸出n的某個變化數(從新排列n中的數字),使它可以被7整除。

(2) 刪除列表中的節點。

附加題

分C/C++,JAVA,PHP,JAVASCRIPT方向,選作,不算入總分。

  1. C/C++方向

    有N個大小爲G的存儲單元,用戶在不斷上傳數據,每次上傳數據的大小v是隨機的,請寫一個系統,把上傳的數據分配給各個存儲單元,使得每一個存儲單元的使用率和寫負責相對均衡,要考慮如下兩個初始狀態:
    (1) 每一個存儲單元的剩餘空間相同。
    (2) 每一個存儲單元的剩餘空間相差很大。

  2. JAVA方向

    (1) 模擬線程間通訊:線程A和B共用一塊空間C[] space, 模擬一次線程間的通訊:線程A生產一個C物品,並把它放入space中,線程B從space中取出該物品,並輸出它的信息。

    (2) 現有某人A與別人的QQ聊天記錄(其中不包含A本身說的話),請寫一個程序,快速找出與A聯繫得最頻繁的人B。已知B的記錄佔整個記錄的一半以上。

  3. PHP方向

    (1) 編程實現隨機取出PHP字符串中的一個字符,至少寫出兩種以上的方法。

    (2) 是PHP自己是沒有方法重載的,請編程實現方法重載。

一面

上午筆試,晚上就通知一面,騰訊效率還挺高的。

一面在皇冠酒店的宴會廳,我被安排在下午一點。參加一面的人仍是挺多的,整個宴會廳擺滿了四人桌,每桌上都有一個面試官,對面試者進行一對一面試。

個人面試官很nice,見面還問我吃了午餐沒,簡單寒暄後就開始問技術問題了。

  1. shell讀文件並把文件的內容輸出到控制檯
    1
    2
    3
    4
    
    while read line
    do
        echo $line
    done < $file
    
  2. 某文件的第二列內容爲數字,請用awk求出這些數字的和
    1
    
    awk 'BEGIN{sum = 0;} {sum += $2;} END{print sum;}' $file
    
  3. 按層次遍歷二叉樹

    要點:使用隊列

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    void layerOrder(BTree *tree) { if (tree == NULL) return; queue<BTree *> q; q.push(tree); BTree *p = NULL; while (!q.empty()) { p = q.front(); visit(p); q.pop(); if (p->lchild != NULL) q.push(p->lchild); if (p->rchild != NULL) q.push(p->rchild); } } 
  4. 統計10萬個單詞中出現頻率最高的1000個

    10萬個單詞徹底能夠內存中放下,因此能夠使用hashmap,單詞做爲key,value爲該單詞的計數,對這10萬個單詞進行統計。統計完後,用一個最小堆找出計數最多的那1000個單詞。具體可參考碼農的Top K算法詳細解析

  5. 求1000億個數中的最大1000個

    假設內存爲4G,顯然不足以把這1000億個數都存入。

    能夠把這它們劃分爲落幹個區間,對應地存儲到若干個文件中,使得每一個區間中不超過10億個數,若超過則對該區間再進行劃分。

    而後對這些區間內的數進行統計,假設前N個區間中數的總數X1,且X1<1000,而前N+1個區間中數的總數爲X2,且X2>1000,則最大1000個數爲前N個區間內的數加上第N+1個區間中的前1000-X1個數。

  6. gdb調試時如何找到出錯的地方
  7. 寫一個函數void strrev(char *str)反轉str
  8. 自定義數據結構,並寫函數刪除單向鏈表中值爲n的那個結點
  9. 在兩個有序數組中找出共有元素

    若已知同一個數組中沒有重複的元素,則能夠使用歸併排序,而後在排序後的結果查找重複元素。若同一數組中可能存在重複元素,則不能使用歸併排序。

    另外一個方法是使用bitmap,先掃描數組A,把其中出現的元素在bitmap中賦值爲1,而後掃描數組B,若某元素在bitmap中已爲1,則輸出該元素。

=========================================================

1. C++多態實現機制?
2. TCP/IP狀態變遷圖 TCP/IP 接受發送緩衝區相關概念?
3. 編高效服務器程序須要考慮的因素?
4. Epoll機制相關概念?與select 機制區別?
5. 進程調度內核實現大體機制?
6. 如何預防攻擊?
7. 構造函數能夠調用虛函數嗎?語法上經過嗎?語義上經過嗎?
8. 析構函數能夠調用拋出異常嗎?爲何不能拋出異常?除了資源泄漏還有其餘須要考慮的因素嗎?
9. C++中 類型轉換機制、各適應什麼環境?
10. 拷貝構造函數做用及用途?何時須要自定義拷貝構造函數?
11. proc機制及做用?

=========================================================

 

數據結構+算法面試100題~~~摘自CSDN,做者July

 

1.把二元查找樹轉變成排序的雙向鏈表(樹)
 題目:
輸入一棵二元查找樹,將該二元查找樹轉換成一個排序的雙向鏈表。
要求不能建立任何新的結點,只調整指針的指向。
   10
  / /
  6  14
 / / / /
4  8 12 16
 轉換成雙向鏈表
4=6=8=10=12=14=16。
 
 首先咱們定義的二元查找樹 節點的數據結構以下:
 struct BSTreeNode
{
  int m_nValue; // value of node
  BSTreeNode *m_pLeft; // left child of node
  BSTreeNode *m_pRight; // right child of node
};

 
2.設計包含min函數的棧(棧)
定義棧的數據結構,要求添加一個min函數,可以獲得棧的最小元素。
要求函數min、push以及pop的時間複雜度都是O(1)。

  
3.求子數組的最大和(數組)
題目:
輸入一個整形數組,數組裏有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每一個子數組都有一個和。
求全部子數組的和的最大值。要求時間複雜度爲O(n)。

例如輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,
所以輸出爲該子數組的和18。

 

4.在二元樹中找出和爲某一值的全部路徑(樹)

題目:輸入一個整數和一棵二元樹。
從樹的根結點開始往下訪問一直到葉結點所通過的全部結點造成一條路徑。
打印出和與輸入整數相等的全部路徑。
例如 輸入整數22和以下二元樹
  10  
  / /   
 5  12   
 /   /   
4     7
則打印出兩條路徑:10, 12和10, 5, 7。

二元樹節點的數據結構定義爲:
struct BinaryTreeNode // a node in the binary tree
{
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
};

 

5.查找最小的k個元素(數組)
題目:輸入n個整數,輸出其中最小的k個。
例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字爲1,2,3和4。

  
第6題(數組)
騰訊面試題: 
給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數 
要求下排每一個數都是先前上排那十個數在下排出現的次數。 
上排的十個數以下: 
【0,1,2,3,4,5,6,7,8,9】

舉一個例子, 
數值: 0,1,2,3,4,5,6,7,8,9 
分配: 6,2,1,0,0,0,1,0,0,0 
0在下排出現了6次,1在下排出現了2次, 
2在下排出現了1次,3在下排出現了0次.... 
以此類推..


第7題(鏈表)
微軟亞院之編程判斷倆個鏈表是否相交
給出倆個單向鏈表的頭指針,好比h1,h2,判斷這倆個鏈表是否相交。
爲了簡化問題,咱們假設倆個鏈表均不帶環。

問題擴展:
1.若是鏈表可能有環列?
2.若是須要求出倆個鏈表相交的第一個節點列?

 
第8題(算法)
此貼選一些 比較怪的題,,因爲其中題目自己與算法關係不大,僅考考思惟。特此並做一題。
1.有兩個房間,一間房裏有三盞燈,另外一間房有控制着三盞燈的三個開關,

這兩個房間是 分割開的,從一間裏不能看到另外一間的狀況。
如今要求受訓者分別進這兩房間一次,而後判斷出這三盞燈分別是由哪一個開關控制的。
有什麼辦法呢?

2.你讓一些人爲你工做了七天,你要用一根金條做爲報酬。金條被分紅七小塊,天天給出一塊。
若是你只能將金條切割兩次,你怎樣分給這些工人?

3. ★用一種算法來顛倒一個連接表的順序。如今在不用遞歸式的狀況下作一遍。
  ★用一種算法在一個循環的連接表裏插入一個節點,但不得穿越連接表。
  ★用一種算法整理一個數組。你爲何選擇這種方法?
  ★用一種算法使通用字符串相匹配。
  ★顛倒一個字符串。優化速度。優化空間。
  ★顛倒一個句子中的詞的順序,好比將「我叫克麗絲」轉換爲「克麗絲叫我」,

實現速度最快,移動最少。
  ★找到一個子字符串。優化速度。優化空間。
  ★比較兩個字符串,用O(n)時間和恆量空間。
   ★假設你有一個用1001個整數組成的數組,這些整數是任意排列的,可是你知道全部的整數都在1到1000(包括1000)之間。此外,除一個數字出現 兩次外,其餘全部數字只出現一次。假設你只能對這個數組作一次處理,用一種算法找出重複的那個數字。若是你在運算中使用了輔助的存儲方式,那麼你能找到不 用這種方式的算法嗎?
  ★不用乘法或加法增長8倍。如今用一樣的方法增長7倍。

 


第9題(樹)
判斷整數序列是否是二元查找樹的後序遍歷結果
題目:輸入一個整數數組,判斷該數組是否是某二元查找樹的後序遍歷的結果。
若是是返回true,不然返回false。

例如輸入五、七、六、九、十一、十、8,因爲這一整數序列是以下樹的後序遍歷結果:

         8
      /  /
     6    10
    / /  / /
   5  7 9  11
所以返回true。
若是輸入七、四、六、5,沒有哪棵樹的後序遍歷的結果是這個序列,所以返回false。

 

第10題(字符串)
翻轉句子中單詞的順序。
題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。

句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母同樣處理。
例如輸入「I am a student.」,則輸出「student. a am I」。

 
第11題(樹)
求二叉樹中節點的最大距離...

若是咱們把二叉樹當作一個圖,父子節點之間的連線當作是雙向的,
咱們姑且定義"距離"爲兩節點之間邊的個數。
寫一個程序,
求一棵二叉樹中相距最遠的兩個節點之間的距離。

 

第12題(語法)
題目:求1+2+…+n,
要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。

 

第13題(鏈表):
題目:輸入一個單向鏈表,輸出該鏈表中倒數第k個結點。鏈表的倒數第0個結點爲鏈表的尾指針。
鏈表結點定義以下:  
struct ListNode
{
  int m_nKey;
  ListNode* m_pNext;
};

 

第14題(數組):
題目:輸入一個已經按升序排序過的數組和一個數字,
在數組中查找兩個數,使得它們的和正好是輸入的那個數字。
要求時間複雜度是O(n)。若是有多對數字的和等於輸入的數字,輸出任意一對便可。
例如輸入數組一、二、四、七、十一、15和數字15。因爲4+11=15,所以輸出4和11。

 

第15題(樹):
題目:輸入一顆二元查找樹,將該樹轉換爲它的鏡像,
即在轉換後的二元查找樹中,左子樹的結點都大於右子樹的結點。
用遞歸和循環兩種方法完成樹的鏡像轉換。  
例如輸入:
  8
  / /
  6 10
 // //
5 7 9 11

輸出:
   8
  / /
 10 6
 // //
11 9 7 5

定義二元查找樹的結點爲:
struct BSTreeNode // a node in the binary search tree (BST)
{
  int m_nValue; // value of node
  BSTreeNode *m_pLeft; // left child of node
  BSTreeNode *m_pRight; // right child of node
};

 

第16題(樹):
題目(微軟):
輸入一顆二元樹,從上往下按層打印樹的每一個結點,同一層中按照從左往右的順序打印。  
例如輸入

   8
  / /
 6 10
/ / / /
5 7 9 11

輸出8 6 10 5 7 9 11。

 

第17題(字符串):
題目:在一個字符串中找到第一個只出現一次的字符。如輸入abaccdeff,則輸出b。  
分析:這道題是2006年google的一道筆試題。

 


第18題(數組):
題目:n個數字(0,1,…,n-1)造成一個圓圈,從數字0開始,
每次從這個圓圈中刪除第m個數字(第一個爲當前數字自己,第二個爲當前數字的下一個數字)。
當一個數字刪除後,從被刪除數字的下一個繼續刪除第m個數字。
求出在這個圓圈中剩下的最後一個數字。
July:我想,這個題目,很多人已經 見識過了。

 


第19題(數組、遞歸):
題目:定義Fibonacci數列以下:  
  / 0 n=0
f(n)= 1 n=1
  / f(n-1)+f(n-2) n=2

輸入n,用最快的方法求該數列的第n項。
分析:在不少C語言教科書中講到遞歸函數的時候,都會用Fibonacci做爲例子。
所以不少程序員對這道題的遞歸解法很是熟悉,但....呵呵,你知道的。。

 

第20題(字符串):
題目:輸入一個表示整數的字符串,把該字符串轉換成整數並輸出。
例如輸入字符串"345",則輸出整數345。

 

第21題(數組)
2010年中興面試題
編程求解:
輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數,
使其和等於 m ,要求將其中全部的可能組合列出來.

 

第22題(推理):
有4張紅色的牌和4張藍色的牌,主持人先拿任意兩張,再分別在A、B、C三人額頭上貼任意兩張牌,
A、B、C三人均可以看見其他兩人額頭上的牌,看完後讓他們猜本身額頭上是什麼顏色的牌,
A說不知道,B說不知道,C說不知道,而後A說知道了。
請教如何推理,A是怎麼知道的。
若是用程序,又怎麼實現呢?

 
第23題(算法):
用最簡單,最快速的方法計算出下面這個圓形是否和正方形相交。"  
3D座標系 原點(0.0,0.0,0.0)
圓形:
半徑r = 3.0
圓心o = (*.*, 0.0, *.*)

正方形:
4個角座標;  
1:(*.*, 0.0, *.*)
2:(*.*, 0.0, *.*)
3:(*.*, 0.0, *.*)
4:(*.*, 0.0, *.*)

 

第24題(鏈表):
鏈表操做,單鏈表就地逆置,
 

第25題(字符串):
寫一個函數,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出連續最長的數字串,並把這個串的長度返回,
並把這個最長數字串付給其中一個函數參數outputstr所指內存。
例如:"abcd12345ed125ss123456789"的首地址傳給intputstr後,函數將返回9,
outputstr所指的值爲123456789

 

26.左旋轉字符串(字符串)

題目:
定義字符串的左旋轉操做:把字符串前面的若干個字符移動到字符串的尾部。

如把字符串abcdef左旋轉2位獲得字符串cdefab。請實現字符串左旋轉的函數。
要求時間對長度爲n的字符串操做的複雜度爲O(n),輔助內存爲O(1)。

 

27.跳臺階問題(遞歸)
題目:一個臺階總共有n級,若是一次能夠跳1級,也能夠跳2級。
求總共有多少總跳法,並分析算法的時間複雜度。

這道題最近常常出現,包括MicroStrategy等比較重視算法的公司
都曾前後選用過個這道題做爲面試題或者筆試題。

 

28.整數的二進制表示中1的個數(運算)
題目:輸入一個整數,求該整數的二進制表達中有多少個1。
例如輸入10,因爲其二進制表示爲1010,有兩個1,所以輸出2。

分析:
這是一道很基本的考查位運算的面試題。
包括微軟在內的不少公司都曾採用過這道題。

 
29.棧的push、pop序列(棧)
題目:輸入兩個整數序列。其中一個序列表示棧的push順序,
判斷另外一個序列有沒有多是對應的pop順序。
爲了簡單起見,咱們假設push序列的任意兩個整數都是不相等的。 

好比輸入的push序列是一、二、三、四、5,那麼四、五、三、二、1就有多是一個pop系列。
由於能夠有以下的push和pop序列:
push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
這樣獲得的pop序列就是四、五、三、二、1。
但序列四、三、五、一、2就不多是push序列一、二、三、四、5的pop序列。

 
30.在從1到n的正數中1出現的次數(數組)
題目:輸入一個整數n,求從1到n這n個整數的十進制表示中1出現的次數。

例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。
分析:這是一道廣爲流傳的google面試題。

 

31.華爲面試題(搜索):
一相似於蜂窩的結構的圖,進行搜索最短路徑(要求5分鐘)

 

32.(數組、規劃)
有兩個序列a,b,大小都爲n,序列元素的值任意整數,無序;
要求:經過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
例如:  
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];

 
33.(字符串)
實現一個挺高級的字符匹配算法:
給一串很長字符串,要求找到符合要求的字符串,例如目的串:123
1******3***2 ,12*****3這些都要找出來
其實就是相似一些和諧系統。。。。。

 
34.(隊列)
實現一個隊列。
隊列的應用場景爲:
一個生產者線程將int類型的數入列,一個消費者線程將int類型的數出列

 
35.(矩陣)
求一個矩陣中最大的二維矩陣(元素和最大).如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是:
4 5
5 3
要求:(1)寫出算法;(2)分析時間複雜度;(3)用C寫出關鍵代碼

 
第36題-40題(有些題目蒐集於CSDN上的網友,已標明):
36.引用自網友:longzuo(運算)
谷歌筆試:
n支隊伍比賽,分別編號爲0,1,2。。。。n-1,已知它們之間的實力對比關係,
存儲在一個二維數組w[n][n]中,w[i][j] 的值表明編號爲i,j的隊伍中更強的一支。

因此w[i][j]=i 或者j,如今給出它們的出場順序,並存儲在數組order[n]中,
好比order[n] = {4,3,5,8,1......},那麼第一輪比賽就是 4對3, 5對8。.......
勝者晉級,敗者淘汰,同一輪淘汰的全部隊伍排名再也不細分,便可以隨便排,
下一輪由上一輪的勝者按照順序,再依次兩兩比,好比多是4對5,直至出現第一名

編程實現,給出二維數組w,一維數組order 和 用於輸出比賽名次的數組result[n],
求出result。

 

37.(字符串)
有n個長爲m+1的字符串,
若是某個字符串的最後m個字符與某個字符串的前m個字符匹配,則兩個字符串能夠聯接,
問這n個字符串最多能夠連成一個多長的字符串,若是出現循環,則返回錯誤。

 

38.(算法)
百度面試:
1.用天平(只能比較,不能稱重)從一堆小球中找出其中惟一一個較輕的,使用x次天平,
最多能夠從y個小球中找出較輕的那個,求y與x的關係式。

2.有一個很大很大的輸入流,大到沒有存儲器能夠將其存儲下來,
並且只輸入一次,如何從這個輸入流中隨機取得m個記錄。

3.大量的URL字符串,如何從中去除重複的,優化時間空間複雜度

 
39.(樹、圖、算法)
網易有道筆試:
(1).
求一個二叉樹中任意兩個節點間的最大距離,
兩個節點的距離的定義是 這兩個節點間邊的個數,
好比某個孩子節點和父節點間的距離是1,和相鄰兄弟節點間的距離是2,優化時間空間複雜度。

(2).
求一個有向連通圖的割點,割點的定義是,若是除去此節點和與其相關的邊,
有向圖再也不連通,描述算法。

 

40.百度研發筆試題(棧、算法)
引用自:zp155334877
1)設計一個棧結構,知足一下條件:min,push,pop操做的時間複雜度爲O(1)。

2)一串首尾相連的珠子(m個),有N種顏色(N<=10),
設計一個算法,取出其中一段,要求包含全部N中顏色,並使長度最短。
並分析時間複雜度與空間複雜度。

3)設計一個系統處理詞語搭配問題,好比說 中國 和人民能夠搭配,
則中國人民 人民中國都有效。要求:

  *系統每秒的查詢數量可能上千次;
  *詞語的數量級爲10W;
  *每一個詞至多能夠與1W個詞搭配

當用戶輸入中國人民的時候,要求返回與這個搭配詞組相關的信息。


41.求固晶機的晶元查找程序(匹配、算法)
晶元盤由數目不詳的大小同樣的晶元組成,晶元並不必定全佈滿晶元盤,

照相機每次這能匹配一個晶元,如匹配過,則拾取該晶元,
若匹配不過,照相機則按測好的晶元間距移到下一個位置。
求遍歷晶元盤的算法 求思路。

 

42.請修改append函數,利用這個函數實現(鏈表):

兩個非降序鏈表的並集,1->2->3 和 2->3->5 併爲 1->2->3->5
另外只能輸出結果,不能修改兩個鏈表的數據。

 

43.遞歸和非遞歸倆種方法實現二叉樹的前序遍歷。

 

44.騰訊面試題(算法):
1.設計一個魔方(六面)的程序。
2.有一千萬條短信,有重複,以文本文件的形式保存,一行一條,有重複。
請用5分鐘時間,找出重複出現最多的前10條。

3.收藏了1萬條url,如今給你一條url,如何找出類似的url。(面試官不解釋何爲類似)

 

45.雅虎(運算、矩陣):
1.對於一個整數矩陣,存在一種運算,對矩陣中任意元素加一時,須要其相鄰(上下左右)

某一個元素也加一,現給出一正數矩陣,判斷其是否可以由一個全零矩陣通過上述運算獲得。
2.一個整數數組,長度爲n,將其分爲m份,使各份的和相等,求m的最大值
  好比{3,2,4,3,6} 能夠分紅{3,2,4,3,6} m=1; 
  {3,6}{2,4,3} m=2
  {3,3}{2,4}{6} m=3 因此m的最大值爲3

 


46.搜狐(運算):
四對括號能夠有多少種匹配排列方式?好比兩對括號能夠有兩種:()()和(())


47.創新工場(算法):
求一個數組的最長遞減子序列 好比{9,4,3,2,5,4,3,2}的最長遞減子序列爲{9,5,4,3,2}

 

48.微軟(運算):
一個數組是由一個遞減數列左移若干位造成的,好比{4,3,2,1,6,5}
是由{6,5,4,3,2,1}左移兩位造成的,在這種數組中查找某一個數。

 

49.一道看上去很嚇人的算法面試題(排序、算法):
如何對n個數進行排序,要求時間複雜度O(n),空間複雜度O(1)

 

50.網易有道筆試(sorry,與第39題重複):
1.求一個二叉樹中任意兩個節點間的最大距離,兩個節點的距離的定義是 這兩個節點間邊的個數,
好比某個孩子節點和父節點間的距離是1,和相鄰兄弟節點間的距離是2,優化時間空間複雜度。

2.求一個有向連通圖的割點,割點的定義是,
若是除去此節點和與其相關的邊,有向圖再也不連通,描述算法。
-------------------------------------------------------------------


51.和爲n連續正數序列(數組)。
題目:輸入一個正數n,輸出全部和爲n連續正數序列。

例如輸入15,因爲1+2+3+4+5=4+5+6=7+8=15,因此輸出3個連續序列1-五、4-6和7-8。
分析:這是網易的一道面試題。

 


52.二元樹的深度(樹)。

題目:輸入一棵二元樹的根結點,求該樹的深度。

從根結點到葉結點依次通過的結點(含根、葉結點)造成樹的一條路徑,最長路徑的長度爲樹的深度。

例如:輸入二元樹:
                                            10
                                          /     /
                                        6        14
                                      /         /   /
                                    4         12     16

輸出該樹的深度3。

二元樹的結點定義以下:

struct SBinaryTreeNode // a node of the binary tree
{
      int               m_nValue; // value of node
      SBinaryTreeNode  *m_pLeft;  // left child of node
      SBinaryTreeNode  *m_pRight; // right child of node
};
分析:這道題本質上仍是考查二元樹的遍歷。

 

53.字符串的排列(字符串)。
題目:輸入一個字符串,打印出該字符串中字符的全部排列。
例如輸入字符串abc,則輸出由字符a、b、c所能排列出來的全部字符串
abc、acb、bac、bca、cab和cba。

分析:這是一道很好的考查對遞歸理解的編程題,
所以在過去一年中頻繁出如今各大公司的面試、筆試題中。

 

54.調整數組順序使奇數位於偶數前面(數組)。

題目:輸入一個整數數組,調整數組中數字的順序,使得全部奇數位於數組的前半部分,
全部偶數位於數組的後半部分。要求時間複雜度爲O(n)。

 

55.(語法)
題目:類CMyString的聲明以下:
class CMyString
{
public:
      CMyString(char* pData = NULL);
      CMyString(const CMyString& str);
      ~CMyString(void);
      CMyString& operator = (const CMyString& str);

private:
      char* m_pData;
};
請實現其賦值運算符的重載函數,要求異常安全,即當對一個對象進行賦值時發生異常,對象的狀態不能改變。

 

56.最長公共字串(算法、字符串)。

題目:若是字符串一的全部字符按其在字符串中的順序出如今另一個字符串二中,

則字符串一稱之爲字符串二的子串。

注意,並不要求子串(字符串一)的字符必須連續出如今字符串二中。
請編寫一個函數,輸入兩個字符串,求它們的最長公共子串,並打印出最長公共子串。

例如:輸入兩個字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它們的最長公共子串,
則輸出它們的長度4,並打印任意一個子串。

分析:求最長公共子串(Longest Common Subsequence, LCS)是一道很是經典的動態規劃題,

所以一些重視算法的公司像MicroStrategy都把它看成面試題。

 


57.用倆個棧實現隊列(棧、隊列)。

題目:某隊列的聲明以下:

template<typename T> class CQueue
{
public:
      CQueue() {}
      ~CQueue() {}

      void appendTail(const T& node);  // append a element to tail
      void deleteHead();               // remove a element from head

private:
     T> m_stack1;
     T> m_stack2;
};

分析:從上面的類的聲明中,咱們發如今隊列中有兩個棧。
所以這道題實質上是要求咱們用兩個棧來實現一個隊列。
相信你們對棧和隊列的基本性質都很是瞭解了:棧是一種後入先出的數據容器,
所以對隊列進行的插入和刪除操做都是在棧頂上進行;隊列是一種先入先出的數據容器,
咱們老是把新元素插入到隊列的尾部,而從隊列的頭部刪除元素。

 


58.從尾到頭輸出鏈表(鏈表)。

題目:輸入一個鏈表的頭結點,從尾到頭反過來輸出每一個結點的值。鏈表結點定義以下:
struct ListNode
{

      int       m_nKey;
      ListNode* m_pNext;
};
分析:這是一道頗有意思的面試題。
該題以及它的變體常常出如今各大公司的面試、筆試題中。

 


59.不能被繼承的類(語法)。
題目:用C++設計一個不能被繼承的類。

分析:這是Adobe公司2007年校園招聘的最新筆試題。
這道題除了考察應聘者的C++基本功底外,還能考察反應能力,是一道很好的題目。

 

 

60.在O(1)時間內刪除鏈表結點(鏈表、算法)。

題目:給定鏈表的頭指針和一個結點指針,在O(1)時間刪除該結點。鏈表結點的定義以下:

struct ListNode

{

      int        m_nKey;

      ListNode*  m_pNext;

};

函數的聲明以下:
void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);

分析:這是一道廣爲流傳的Google面試題,能有效考察咱們的編程基本功,還能考察咱們的反應速度,

更重要的是,還能考察咱們對時間複雜度的理解。
-------------------------------------------------------------------------

 

61.找出數組中兩個只出現一次的數字(數組)
題目:一個整型數組裏除了兩個數字以外,其餘的數字都出現了兩次。
請寫程序找出這兩個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。

分析:這是一道很新穎的關於位運算的面試題。

 


62.找出鏈表的第一個公共結點(鏈表)。
題目:兩個單向鏈表,找出它們的第一個公共結點。

鏈表的結點定義爲:
struct ListNode

{

      int         m_nKey;

      ListNode*   m_pNext;

};

分析:這是一道微軟的面試題。微軟很是喜歡與鏈表相關的題目,
所以在微軟的面試題中,鏈表出現的機率至關高。

 


63.在字符串中刪除特定的字符(字符串)。
題目:輸入兩個字符串,從第一字符串中刪除第二個字符串中全部的字符。

例如,輸入」They are students.」和」aeiou」,

則刪除以後的第一個字符串變成」Thy r stdnts.」。

分析:這是一道微軟面試題。在微軟的常見面試題中,與字符串相關的題目佔了很大的一部分,
由於寫程序操做字符串能很好的反映咱們的編程基本功。

 


64. 尋找醜數(運算)。
題目:咱們把只包含因子二、3和5的數稱做醜數(Ugly Number)。例如六、8都是醜數,
但14不是,由於它包含因子7。習慣上咱們把1當作是第一個醜數。
求按從小到大的順序的第1500個醜數。

分析:這是一道在網絡上廣爲流傳的面試題,聽說google曾經採用過這道題。

 


65.輸出1到最大的N位數(運算)
題目:輸入數字n,按順序輸出從1最大的n位10進制數。好比輸入3,

則輸出一、二、3一直到最大的3位數即999。
分析:這是一道頗有意思的題目。看起來很簡單,其實裏面卻有很多的玄機。

 

66.顛倒棧(棧)。
題目:用遞歸顛倒一個棧。例如輸入棧{1, 2, 3, 4, 5},1在棧頂。
顛倒以後的棧爲{5, 4, 3, 2, 1},5處在棧頂。


 

67.倆個閒玩娛樂(運算)。

1.撲克牌的順子
從撲克牌中隨機抽5張牌,判斷是否是一個順子,即這5張牌是否是連續的。
2-10爲數字自己,A爲1,J爲11,Q爲12,K爲13,而大小王能夠當作任意數字。

2.n個骰子的點數。
把n個骰子扔在地上,全部骰子朝上一面的點數之和爲S。輸入n,
打印出S的全部可能的值出現的機率。

 


68.把數組排成最小的數(數組、算法)。
題目:輸入一個正整數數組,將它們鏈接起來排成一個數,輸出能排出的全部數字中最小的一個。
例如輸入數組{32,  321},則輸出這兩個能排成的最小數字32132。
請給出解決問題的算法,並證實該算法。

分析:這是09年6月份百度的一道面試題,
從這道題咱們能夠看出百度對應聘者在算法方面有很高的要求。

 


69.旋轉數組中的最小元素(數組、算法)。
題目:把一個數組最開始的若干個元素搬到數組的末尾,咱們稱之爲數組的旋轉。輸入一個排好序的數組的一個旋轉,

輸出旋轉數組的最小元素。例如數組{3, 4, 5, 1, 2}爲{1, 2, 3, 4, 5}的一個旋轉,該數組的最小值爲1。

    分析:這道題最直觀的解法並不難。從頭至尾遍歷數組一次,就能找出最小的元素,
時間複雜度顯然是O(N)。但這個思路沒有利用輸入數組的特性,咱們應該能找到更好的解法。

 


70.給出一個函數來輸出一個字符串的全部排列(經典字符串問題)。
ANSWER 簡單的回溯就能夠實現了。固然排列的產生也有不少種算法,去看看組合數學,

還有逆序生成排列和一些不須要遞歸生成排列的方法。
印象中Knuth的<TAOCP>第一卷裏面深刻講了排列的生成。這些算法的理解須要必定的數學功底,
也須要必定的靈感,有興趣最好看看。

 


71.數值的整數次方(數字、運算)。

題目:實現函數double Power(double base, int exponent),求base的exponent次方。
不須要考慮溢出。

分析:這是一道看起來很簡單的問題。可能有很多的人在看到題目後30秒寫出以下的代碼:
double Power(double base, int exponent)
{

      double result = 1.0;
      for(int i = 1; i <= exponent; ++i)
            result *= base;
      return result;
}

 

 

72.(語法)
題目:設計一個類,咱們只能生成該類的一個實例。
分析:只能生成一個實例的類是實現了Singleton模式的類型。

 

 
73.對稱字符串的最大長度(字符串)。

題目:輸入一個字符串,輸出該字符串中對稱的子字符串的最大長度。
好比輸入字符串「google」,因爲該字符串裏最長的對稱子字符串是「goog」,所以輸出4。

分析:可能不少人都寫過判斷一個字符串是否是對稱的函數,這個題目能夠當作是該函數的增強版。

 


74.數組中超過出現次數超過一半的數字(數組)

題目:數組中有一個數字出現的次數超過了數組長度的一半,找出這個數字。

分析:這是一道廣爲流傳的面試題,包括百度、微軟和Google在內的多家公司都
曾經採用過這個題目。要幾十分鐘的時間裏很好地解答這道題,
除了較好的編程能力以外,還須要較快的反應和較強的邏輯思惟能力。

 

 

75.二叉樹兩個結點的最低共同父結點(樹)
題目:二叉樹的結點定義以下:
struct TreeNode
{

    int m_nvalue;
    TreeNode* m_pLeft;
    TreeNode* m_pRight;
};

輸入二叉樹中的兩個結點,輸出這兩個結點在數中最低的共同父結點。
分析:求數中兩個結點的最低共同結點是面試中常常出現的一個問題。這個問題至少有兩個變種。

 


76.複雜鏈表的複製(鏈表、算法)

題目:有一個複雜鏈表,其結點除了有一個m_pNext指針指向下一個結點外,
還有一個m_pSibling指向鏈表中的任一結點或者NULL。其結點的C++定義以下:
 struct ComplexNode
{
    int m_nValue;
    ComplexNode* m_pNext;
    ComplexNode* m_pSibling;
};

下圖是一個含有5個結點的該類型複雜鏈表。
圖中實線箭頭表示m_pNext指針,虛線箭頭表示m_pSibling指針。爲簡單起見,
指向NULL的指針沒有畫出。

                                 
請完成函數ComplexNode* Clone(ComplexNode* pHead),以複製一個複雜鏈表。 
分析:在常見的數據結構上稍加變化,這是一種很新穎的面試題。
要在不到一個小時的時間裏解決這種類型的題目,咱們須要較快的反應能力,
對數據結構透徹的理解以及紮實的編程功底。

 

 


77.關於鏈表問題的面試題目以下(鏈表):

1.給定單鏈表,檢測是否有環。
 使用兩個指針p1,p2從鏈表頭開始遍歷,p1每次前進一步,p2每次前進兩步。若是p2到達鏈表尾部,
說明無環,不然p一、p2必然會在某個時刻相遇(p1==p2),從而檢測到鏈表中有環。

 

2.給定兩個單鏈表(head1, head2),檢測兩個鏈表是否有交點,若是有返回第一個交點。

        若是head1==head2,那麼顯然相交,直接返回head1。
不然,分別從head1,head2開始遍歷兩個鏈表得到其長度len1與len2,假設len1>=len2,
那麼指針p1由head1開始向後移動len1-len2步,指針p2=head2,
下面p一、p2每次向後前進一步並比較p1p2是否相等,若是相等即返回該結點,
不然說明兩個鏈表沒有交點。


3.給定單鏈表(head),若是有環的話請返回從頭結點進入環的第一個節點。
        運用題一,咱們能夠檢查鏈表中是否有環。
        若是有環,那麼p1p2重合點p必然在環中。從p點斷開環,
方法爲:p1=p, p2=p->next, p->next=NULL。此時,原單鏈表能夠看做兩條單鏈表,
一條從head開始,另外一條從p2開始,因而運用題二的方法,咱們找到它們的第一個交點即爲所求。


4.只給定單鏈表中某個結點p(並不是最後一個結點,即p->next!=NULL)指針,刪除該結點。
 辦法很簡單,首先是放p中數據,而後將p->next的數據copy入p中,接下來刪除p->next便可。

5.只給定單鏈表中某個結點p(非空結點),在p前面插入一個結點。
  辦法與前者相似,首先分配一個結點q,將q插入在p後,接下來將p中的數據copy入q中,
而後再將要插入的數據記錄在p中。

 

78.鏈表和數組的區別在哪裏(鏈表、數組)?

分析:主要在基本概念上的理解。
可是最好能考慮的全面一點,如今公司招人的競爭可能就在細節上產生,
誰比較仔細,誰獲勝的機會就大。

 
79.(鏈表、字符串)
1.編寫實現鏈表排序的一種算法。說明爲何你會選擇用這樣的方法?
2.編寫實現數組排序的一種算法。說明爲何你會選擇用這樣的方法?
3.請編寫能直接實現strstr()函數功能的代碼。


 

80.阿里巴巴一道筆試題(運算、算法)

問題描述:
12個高矮不一樣的人,排成兩排,每排必須是從矮到高排列,並且第二排比對應的第一排的人高,問排列方式有多少種?
這個筆試題,很YD,由於把某個遞歸關係隱藏得很深。

 

先來幾組百度的面試題:

===================

81.第1組百度面試題
1.一個int數組,裏面數據無任何限制,要求求出全部這樣的數a[i],
其左邊的數都小於等於它,右邊的數都大於等於它。
可否只用一個額外數組和少許其它空間實現。
2.一個文件,內含一千萬行字符串,每一個字符串在1K之內,
要求找出全部相反的串對,如abc和cba。
3.STL的set用什麼實現的?爲何不用hash?

 

82.第2組百度面試題
1.給出兩個集合A和B,其中集合A={name},
集合B={age、sex、scholarship、address、...},
要求:
問題一、根據集合A中的name查詢出集合B中對應的屬性信息;
問題二、根據集合B中的屬性信息(單個屬性,如age<20等),查詢出集合A中對應的name。

2.給出一個文件,裏面包含兩個字段{url、size},
即url爲網址,size爲對應網址訪問的次數,
要求:
問題一、利用Linux Shell命令或本身設計算法,
查詢出url字符串中包含「baidu」子字符串對應的size字段值;
問題二、根據問題1的查詢結果,對其按照size由大到小的排列。
(說明:url數據量很大,100億級以上)

 

83.第3組百度面試題
1.今年百度的一道題目
百度筆試:給定一個存放整數的數組,從新排列數組使得數組左邊爲奇數,右邊爲偶數。
要求:空間複雜度O(1),時間複雜度爲O(n)。

2.百度筆試題
用C語言實現函數void * memmove(void *dest, const void *src, size_t n)。
memmove函數的功能是拷貝src所指的內存內容前n個字節到dest所指的地址上。
分析:
因爲能夠把任何類型的指針賦給void類型的指針
這個函數主要是實現各類數據類型的拷貝。

 

84.第4組百度面試題
2010年3道百度面試題[相信,你懂其中的含金量]
1.a~z包括大小寫與0~9組成的N個數
用最快的方式把其中重複的元素挑出來。
2.已知一隨機發生器,產生0的機率是p,產生1的機率是1-p,如今要你構造一個發生器,
使得它構造0和1的機率均爲1/2;構造一個發生器,使得它構造一、二、3的機率均爲1/3;...,
構造一個發生器,使得它構造一、二、三、...n的機率均爲1/n,要求複雜度最低。
3.有10個文件,每一個文件1G,
每一個文件的每一行都存放的是用戶的query,每一個文件的query均可能重複。
要求按照query的頻度排序.

 

85.又見字符串的問題
1.給出一個函數來複制兩個字符串A和B。
字符串A的後幾個字節和字符串B的前幾個字節重疊。
分析:記住,這種題目每每就是考你對邊界的考慮狀況。
2.已知一個字符串,好比asderwsde,尋找其中的一個子字符串好比sde的個數,
若是沒有返回0,有的話返回子字符串的個數。

 
86.
怎樣編寫一個程序,把一個有序整數數組放到二叉樹中?
分析:本題考察二叉搜索樹的建樹方法,簡單的遞歸結構。
關於樹的算法設計必定要聯想到遞歸,由於樹自己就是遞歸的定義。

而,學會把遞歸改稱非遞歸也是一種必要的技術。
畢竟,遞歸會形成棧溢出,關於系統底層的程序中不到非不得以最好不要用。
可是對某些數學問題,就必定要學會用遞歸去解決。

 

87.
1.大整數數相乘的問題。(這是2002年在一考研班上遇到的算法題)
2.求最大連續遞增數字串(如「ads3sl456789DF3456ld345AA」中的「456789」)
3.實現strstr功能,即在父串中尋找子串首次出現的位置。
(筆試中常讓面試者實現標準庫中的一些函數)

 


88.2005年11月金山筆試題。編碼完成下面的處理函數。
函數將字符串中的字符'*'移到串的前部分,

前面的非'*'字符後移,但不能改變非'*'字符的前後順序,函數返回串中字符'*'的數量。
如原始串爲:ab**cd**e*12,
處理後爲*****abcde12,函數並返回值爲5。(要求使用盡可能少的時間和輔助空間)

 

89.神州數碼、華爲、東軟筆試題
1.2005年11月15日華爲軟件研發筆試題。實現一單鏈表的逆轉。
2.編碼實現字符串轉整型的函數(實現函數atoi的功能),聽說是神州數碼筆試題。如將字符
串 」+123」123, 」-0123」-123, 「123CS45」123, 「123.45CS」123, 「CS123.45」0
3.快速排序(東軟喜歡考相似的算法填空題,又如堆排序的算法等)
4.刪除字符串中的數字並壓縮字符串。
如字符串」abc123de4fg56」處理後變爲」abcdefg」。注意空間和效率。
(下面的算法只須要一次遍歷,不須要開闢新空間,時間複雜度爲O(N))
5.求兩個串中的第一個最長子串(神州數碼之前試題)。
如"abractyeyt","dgdsaeactyey"的最大子串爲"actyet"。

 


90.
1.不開闢用於交換數據的臨時空間,如何完成字符串的逆序
(在技術一輪面試中,有些面試官會這樣問)。
2.刪除串中指定的字符
(作此題時,千萬不要開闢新空間,不然面試官可能認爲你不適合作嵌入式開發)
3.判斷單鏈表中是否存在環。

 

91.
1.一道著名的毒酒問題
有1000桶酒,其中1桶有毒。而一旦吃了,毒性會在1周後發做。
如今咱們用小老鼠作實驗,要在1周內找出那桶毒酒,問最少須要多少老鼠。
2.有趣的石頭問題
有一堆1萬個石頭和1萬個木頭,對於每一個石頭都有1個木頭和它重量同樣,
把配對的石頭和木頭找出來。

 

 

92.
1.多人排成一個隊列,咱們認爲從低到高是正確的序列,可是總有部分人不遵照秩序。
若是說,前面的人比後面的人高(兩人身高同樣認爲是合適的),
那麼咱們就認爲這兩我的是一對「搗亂分子」,好比說,如今存在一個序列:
176, 178, 180, 170, 171
這些搗亂分子對爲
<176, 170>, <176, 171>, <178, 170>, <178, 171>, <180, 170>, <180, 171>, 
那麼,如今給出一個整型序列,請找出這些搗亂分子對的個數(僅給出搗亂分子對的數目便可,不用具體的對)

要求:
輸入:
爲一個文件(in),文件的每一行爲一個序列。序列全爲數字,數字間用」,」分隔。
輸出:
爲一個文件(out),每行爲一個數字,表示搗亂分子的對數。

詳細說明本身的解題思路,說明本身實現的一些關鍵點。
並給出實現的代碼 ,並分析時間複雜度。
限制:
輸入每行的最大數字個數爲100000個,數字最長爲6位。程序無內存使用限制。

 

93.在一個int數組裏查找這樣的數,它大於等於左側全部數,小於等於右側全部數。
直觀想法是用兩個數組a、b。a[i]、b[i]分別保存從前到i的最大的數和從後到i的最小的數,

一個解答:這須要兩次遍歷,而後再遍歷一次原數組,
將全部data[i]>=a[i-1]&&data[i]<=b[i]的data[i]找出便可。

給出這個解答後,面試官有要求只能用一個輔助數組,且要求少遍歷一次。

 

94.微軟筆試題
求隨機數構成的數組中找到長度大於=3的最長的等差數列9 d- x' W) w9 ?" o3 b0 R
輸出等差數列由小到大: 
若是沒有符合條件的就輸出
格式:
輸入[1,3,0,5,-1,6]
輸出[-1,1,3,5]
要求時間複雜度,空間複雜度儘可能小

 

95.華爲面試題
1 判斷一字符串是否是對稱的,如:abccba
2.用遞歸的方法判斷整數組a[N]是否是升序排列

 

96.08年中興校園招聘筆試題
1.編寫strcpy 函數
已知strcpy 函數的原型是
char *strcpy(char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。不調用C++/C 的字符串庫函數,請
編寫函數 strcpy

 


最後壓軸之戲,終結此微軟等100題系列V0.1版。
那就,
連續來幾組微軟公司的面試題,讓你一次爽個夠:
======================
97.第1組微軟較簡單的算法面試題
1.編寫反轉字符串的程序,要求優化速度、優化空間。 
2.在鏈表裏如何發現循環連接?
3.編寫反轉字符串的程序,要求優化速度、優化空間。
4.給出洗牌的一個算法,並將洗好的牌存儲在一個整形數組裏。 
5.寫一個函數,檢查字符是不是整數,若是是,返回其整數值。
(或者:怎樣只用4行代碼編寫出一個從字符串到長整形的函數?)


98.第2組微軟面試題
1.給出一個函數來輸出一個字符串的全部排列。
2.請編寫實現malloc()內存分配函數功能同樣的代碼。
3.給出一個函數來複制兩個字符串A和B。字符串A的後幾個字節和字符串B的前幾個字節重疊。 
4.怎樣編寫一個程序,把一個有序整數數組放到二叉樹中? 
5.怎樣從頂部開始逐層打印二叉樹結點數據?請編程。 
6.怎樣把一個鏈表掉個順序(也就是反序,注意鏈表的邊界條件並考慮空鏈表)?


99.第3組微軟面試題
1.燒一根不均勻的繩,從頭燒到尾總共須要1個小時。
如今有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
2.你有一桶果凍,其中有黃色、綠色、紅色三種,閉上眼睛抓取同種顏色的兩個。
抓取多少個就能夠肯定你確定有兩個同一顏色的果凍?(5秒-1分鐘) 
3.若是你有無窮多的水,一個3公升的提捅,一個5公升的提捅,兩隻提捅形狀上下都不均勻,
問你如何才能準確稱出4公升的水?(40秒-3分鐘) 
一個岔路口分別通向誠實國和說謊國。
來了兩我的,已知一個是誠實國的,另外一個是說謊國的。
誠實國永遠說實話,說謊國永遠說謊言。如今你要去說謊國,
但不知道應該走哪條路,須要問這兩我的。請問應該怎麼問?(20秒-2分鐘)


100.第4組微軟面試題,挑戰思惟極限
1.12個球一個天平,現知道只有一個和其它的重量不一樣,問怎樣稱才能用三次就找到那個球。

13個呢?(注意此題並未說明那個球的重量是輕是重,因此須要仔細考慮)(5分鐘-1小時) 
2.在9個點上畫10條直線,要求每條直線上至少有三個點?(3分鐘-20分鐘) 
3.在一天的24小時之中,時鐘的時針、分針和秒針徹底重合在一塊兒的時候有幾回?
都分別是什麼時間?你怎樣算出來的?(5分鐘-15分鐘)

 

終結附加題:
微軟面試題,挑戰你的智商
==========
說明:若是你是第一次看到這種題,而且之前歷來沒有見過相似的題型,
而且可以在半個小時以內作出答案,說明你的智力超常..)
1.第一題 . 五個海盜搶到了100顆寶石,每一顆都同樣大小和價值連城。他們決定這麼分: 
抽籤決定本身的號碼(一、二、三、四、5) 
                          
首先,由1號提出分配方案,而後你們表決,當且僅當超過半數的人贊成時,
按照他的方案進行分配,不然將被扔進大海喂鯊魚 
若是1號死後,再由2號提出分配方案,而後剩下的4人進行表決,
當且僅當超過半數的人贊成時,按照他的方案進行分配,不然將被扔入大海喂鯊魚。

依此類推 
條件:每一個海盜都是很聰明的人,都能很理智地作出判斷,從而作出選擇。
問題:第一個海盜提出怎樣的分配方案才能使本身的收益最大化?

 

2.一道關於飛機加油的問題,已知: 
每一個飛機只有一個油箱,  
飛機之間能夠相互加油(注意是相互,沒有加油機)  
一箱油可供一架飛機繞地球飛半圈, 
問題:
爲使至少一架飛機繞地球一圈回到起飛時的飛機場,至少須要出動幾架飛機?
(全部飛機從同一機場起飛,並且必須安全返回機場,不容許中途降落,中間沒有飛機場) 
  //歡迎,關注另外不一樣的更精彩的100題V0.2版,和此V0.1版的答案等後續內容。

 本微軟等面試100題系列V0.1版,完。

======================

更多請參見此100題V0.2版:微軟、谷歌、百度等公司經典面試100題[第1-60題]

 

---------------------------------------------------------------------------------    

                 致各位網友

1、關於本微軟等100題系列V0.1版的鄭重聲明       
      http://blog.csdn.net/v_JULY_v/archive/2010/12/02/6050133.aspx

 

2、歡迎,但願,各位網友能更多的、更好的提出你的我的思路、算法,
     思路回覆地址:
      本微軟等100題系列V0.1版,永久維護地址
     http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html 
     謝謝。

 

3、目前前60題的答案參考早已公佈上傳,第61-100題的答案在整理中。

全部的資源下載(題目+答案)地址:  

      http://v_july_v.download.csdn.net/

 

4、然後,請你們務必尊重本人近2個月的勞動成果。不論你是引用我帖子上,博客上,
仍是各資源上的題目或答案,
      凡是以July爲名發表的博客、帖子,資源,引用都請註明做者本人July及出處。
      若私自據爲己有者,不標明出處及做者本人,必究。
      永遠,向您的厚道,致以最崇高的敬意。

 

5、目前,針對本100題系列,我已建一個100題永久討論組(後面的朋友加Algorithms_4羣,見博客公告欄內。)
      專門針對這100題各個版本中任何一道題進行討論、交流、維護、修正。
     //預計本微軟等面試100題系列V0.2版,相信,會在明年2011年與你們見面,具體待定。

 

6、一切的詳情,仍是在本博客裏。歡迎,永久關注,此博客。

      本博客致力於數據結構之法、算法優化之道 

      請參見本人博客:
     My Blog:  
     http://blog.csdn.net/v_JULY_v 
     謝謝,各位。
=====

歡迎,任何人,就以上任何內容,題目與答案思路,或其它任何問題、
回覆到上述本100題系列永久維護帖子上,或者與我聯繫:
本人郵箱:
zhoulei0907@yahoo.cn 
786165179@qq.com

=================================================

更多請參見此100題V0.2版:微軟、谷歌、百度等公司經典面試100題[第1-60題]


  

 

做者聲明:本人July對以上全部任何內容和資料享有版權,轉載請註明做者本人July及出處。向您的厚道致敬。謝謝。二零一零年十二月六日

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息