1. 誰有程序員的面試題,例如東軟公司,或其他公司的程序員面試題
程序員面試一直是社區樂於討論的熱門話題。
這篇文章是站在面試官角度對於程序員面試問題的一個階段性反思和經驗總結。
【目標】
相信和不少朋友一樣,有了幾年工作經驗成為Senior後就開始了面試別人的經歷。作者在最初這個階段只是按照自己的想像把」找到基礎好的程序員「,」找到演算法能力優秀的程序員「,」找到有Android開發經驗的程序員「等作為面試的目標。但是,實際的經歷告訴作者,尤其是按「基礎好」,「演算法好」這些目標招到的人最終效果並不好。比如,有的面試者基礎知識和演算法掌握情況不錯,進程、線程、內存等概念清晰,基本的Hash,二叉樹,快速排序等數據結構和演算法也比較熟悉,但是進公司後在實際工作中表現得很糟糕。後來,作者才發現原來是作者的面試目標出了問題,作者原先的面試方法更像是大學的演算法或操作系統期末考試,按照這種方法讓許多並不合適的人通過了面試,同時也可能錯過了許多合適的人。
後來,作者的反思是,從公司的角度講,面試的根本目的是找到"能夠干好工作"的人,而「高學歷」,「演算法好」,「基礎好」,「有經驗」這些都是表象而不是根本,它們並不能直接和「工作好」劃等號。
【方法】
目標明確了,但接下來的問題是假設面試者是一個黑盒系統,「工作好」不是直接可觀測變數,你所能直接觀測的變數是基礎、演算法、經驗、學歷、性格、談吐、年齡等等。所以,實際上,你只能從「基礎好」,「演算法好」等可以直接觀測的量去推測「工作好」的概率,這就是一個在「X好「條件下"工作好「的條件概率問題:P(工作好 | X好)。
根據這個模型,面試所應該考察哪些方面就很明顯了,那就是選擇那種最具有區分性的方面來考察。比如,考察面試者的體型特徵沒有太大意義,因為P(工作好|高),P(工作好|矮),P(工作好|胖),P(工作好|瘦)的概率都差不多;所以,體型特徵不具有區分性,這不是面試所應該關注的內容。
面試官應當結合職位的要求明確哪些因素具有比較好的區分性。比如,如果要招一名技術門檻比較高的3D游戲引擎開發工程師,面試者A具有3D游戲引擎開發的經驗,但是在基礎知識和演算法面試方面表現一般;面試者B相反,基礎知識和演算法面試表現很好,但沒有游戲開發經驗,而你只能選擇其一。你選誰呢?其實,這就是兩個條件概率問題P(工作好|經驗好,基礎一般,演算法一般)和P(工作好|沒經驗,基礎好,演算法好)。這個問題就留給面試官來判斷了,就作者個人而言,對於技術門檻較高需要技術積累的職位,經驗更加說明問題,因此,作者更傾向於面試者A。
下面,作者再結合自己的經驗談談對面試中常見方面的看法。
【演算法】
演算法是Google和MS等大公司面試所重點考察的內容。作者個人很喜歡演算法,曾經參加ACM/ICPC拿過北京賽區的13名。但是,就個人經驗來看,作者所接觸過的絕大多數開發職位而言,演算法都不適合作為考察面試者優劣的主要因素。對於普通的非演算法性開發職位,考察面試者的演算法就相當於考察他打乒乓球好不好一樣,與目標「工作好」的相關性太低。就作者個人的經驗來看,差不多P(工作好|演算法好)=50%,也就是演算法面試沒有太大的區分性。
甚至,還有一種很不好的情況特別多地出現在演算法好的面試者身上,作者稱之為「只磨刀,不砍柴」。什麼意思呢?有類人只對什麼A*演算法,非同步編程,JVM類載入機制這種純技術問題感興趣,對實現用戶需求毫無興趣。這類人看起來有一定的技術能力,但是對公司來講貢獻十分有限,甚至不如技術一般但認真負責的人。所以,一旦遇到面試者演算法好,作者就特別留意考察會不會是這種「只磨刀,不砍柴」的人。
另外,雖然作者個人不了解Google和MS,但作者對於其特別重視考察演算法能力的面試策略是持懷疑態度的。即使在這樣的世界級大公司,演算法雖然重要,但可以想像在項目實施過程所遇到的各種各樣問題中,演算法問題絕大多數時候不會是主要瓶頸,沒有到那種需要每個人都是演算法高手的情況。實際上,絕大多數項目真正難點並不是一兩個演算法瓶頸,甚至也不是單點的技術瓶頸,而是系統性的組織、協調、設計、開發問題,有大量的看起來不是那麼有技術含量的臟活累活,也有許多問題是由於信息不足,並不是技術能力強就能克服這些困難。一個團隊最好優勢互補,有人演算法強,有人業務分析能力強,有人擅長後端服務,有人擅長前端界面,有人聰明,有人踏實,這是最好的。如果按照「演算法好」的單一標准選材,必定會把許多優秀的人才拒之門外。
補充:在更多地了解了Google和Facebook等一流公司的面試細節之後,作者對這個問題的認識有了一定的改變,實際上這些公司在面試過程中並不完全強調技巧性很強的演算法,而是更加註重編碼(Coding)能力,只是在進行編碼測試的過程中往往是通過一些簡單演算法題來進行的。作者對於這種面試方法越來越欣賞,並且也作為了作者們公司面試過程中的重點環節,因為編碼能力的測試是十分必要的,它有著知識性問題無法取代的作用,如果一個面試者連「判斷一個字元串是否是另一個字元串的子串」這樣的題目都無法正確並快速地實現,那麼基本上可以直接排除了。作者這里所強調的是不必考察高難度的演算法問題,並非不重視編碼能力測試,請讀者不要誤解
【基礎】
基礎面試是指考察諸如指針使用、進程線程概念等基礎知識的面試,十分類似於大學期末考試題。作者曾經以為基礎面試十分重要,但是現在不這么看了。在工作中基礎的確是重要的,但是在面試過程中,它必須具有區分性才有意義,也就是說P(工作好|基礎好)的概率要高,那麼考察指針使用,進程線程區別這樣的基礎題目才有它的意義。作者的實際經驗是,基礎面試並不具有很好的區分性,和演算法一樣, 差不多P(工作好|基礎好) = 50%。同時,基礎面試是最容易准備的,中國人有長期的應試教育經驗,要准備幾個把玩指針題目太容易了。
作者曾經遇到過這樣的面試者,他的C語言基礎和編譯、鏈接等原理掌握得非常好,給作者留下了深刻的印象,作者給的面試結論是:知識面不寬,只會C語言,但基礎很扎實,建議錄用。後來的事情證明了那個結論的前半部分是對的,但是」建議錄用「錯了。他在實際工作中表現得一塌糊塗,不理解需求,不理解整體架構;同時,上班時間不是花在項目上,而是花在閱讀諸如《程序員的自作者修養》之類的書籍上。最後,這位同事由於長期「不出活」離開了公司。
基礎不是不重要,而是「基礎好」不足以說明面試者能幹好工作,因為基礎是屬於局部性知識,而實際工作需要綜合性能力,二者有天壤之別。C語言、操作系統能考高分,但是不會寫程序的人在大學作者們還見得少嗎? 軟體開發就像蓋房子,綜合能力是設計和搭骨架,基礎知識是碼磚。張小龍原先Foxmail是Delphi開發的,他它不懂C#,你如果要招聘一個開發.NET Email客戶端的人,你考察他對CLR掌握得好不好有意義嗎? 讓張小龍來開發一個C#版的Foxmail真的會有困難嗎? 你招一個精通C#但沒有Email客戶端開發經驗的人來真的比張小龍靠譜嗎?
作者說基礎知識不重要,和古人說的「不積窪步無以至千里」是不是矛盾呢?不矛盾!「窪步」與「千里」是一種可累加關系,但再多的「基礎知識」都累加不成「綜合能力」。學習軟體開發要像持續集成一樣,一開始就是一個完整的系統,雖然規模不大,問題很多,但它麻雀雖小五臟俱全,從小系統到大系統,從簡單系統到復雜系統逐步演化。
所以,基礎好本身不足以說明太多的問題,必須進一步考察綜合能力。對於基礎面試表現不好的面試者,如果時間允許也要進一步考察,有的面試者其實是有能力的,只是沒有進行充分的准備。最理想的狀態當然是基礎和綜合能力俱佳,若不能兼顧,應當綜合能力優先。
【經驗】
這里所說的經驗不是通過工作了多少年來衡量的,而主要是指面試者的經歷,比如,是否完整地實現過一個軟體,或作為主要開發者完成過一個項目。經驗的重要性在於它能說明一個人的綜合能力。從項目的性質、規模和難度,面試官就可以大致判斷出面試者的綜合能力。如果一個面試者一直在大公司負責一個小模塊的開發維護,那麼基本可以判斷他不具備獨立或作為主要開發者承擔一個項目的能力,只適合在另一家大公司做類似的事情。對於門檻較高需要長期技術積累的職位,相關經驗更顯得尤為重要,比如,Linux內核開發,JVM開發,游戲引擎開發,資料庫實現,高級UX等。對於這類職位,沒有經驗的面試者即使綜合素質不錯也是需要長時間的學習和積累才能勝任。所以,基本上如果確定了你的職位屬於此類,那麼相關經驗毫無疑問應該成為首選因素,換句話說,P(工作好 | 相關經驗好)的概率是非常高的。
通過項目經驗判斷面試者的優劣比通過基礎和演算法測試更加靠譜,所以,面試過程中面試官應該花比較多的時間聽面試者介紹項目經驗,並進行深入地探討交流,了解面試者的知識面、思維能力、表達能力等。同時,可以結合項目提一些基礎知識和演算法的問題,比如,如果面試者做過C++相關的項目,那就可以問他如何進行內存管理?是否熟悉智能指針?如果面試者的回答不能令人滿意,那麼就基本上可以判斷他的項目做得不是很好。
要注意的是,經驗也是一個多維度的事物。比如,C++股票交易中間件系統,這就涉及(C++,中間件,股票) 3個維度。假如面試者A做過C++股票交易客戶端,面試者B做過C的股票交易中間件。從語言角度看,A最匹配,從項目性質看,B最匹配,你如何選擇?這就是在多個維度中,哪個維度更重要的問題,就這個例子而言,作者個人更傾向於B,因為作者認為中間件開發經驗是主要矛盾,而從C切換到C++並不是問題。所以,面試官需要判斷哪一種經驗是主要的,而哪一種經驗是次要的。比如,作者們招聘Android應用開發,這個職位的Android技術門檻並不高,它的真正難點在於做出好的用戶體驗(UX)。所以,如果一個面試者沒有Android的經驗作者們是可以接受的,但是作者希望他在UX方面有經驗,至少做過其他平台的移動應用開發。
【性格】
現在,作者來談作者認為最重要的因素:性格。這可能是許多初為面試官的朋友所難以想像的,怎麼會是性格最重要呢?說實話,當作者意識到這一點時,作者自己也很驚訝!說白了,還是 P(工作好|性格好)的概率最高啊。作者的實際經驗是,如果一個人的性格好,他能把工作做好的可能性是最高的,性格好遠比基礎好、演算法好要靠譜。
一個人如果技術上有缺陷,經驗上有不足,但性格好,在團隊中是很容易由其他人來補位的,他自己也很容易逐漸補起來;相反,如果一個人的性格不好,所有的技術優勢經驗優勢都發揮不出來,甚至還會起到負作用,而且性格缺點很難改變。作者一直談到實際工作所需要的是綜合性的能力,這種綜合能力的發揮中性格是至關重要的。項目中不止會遇到技術問題,要涉及溝通、協調,不同的人不同的部門既有合作又有磨擦,如何處理這些事情都需要一個良好的性格。可以說,在開發團隊里讓你與眾不同的不是你從哪個學校畢業,也不是你過去的經驗,而是你的性格
當然,性格是一個復雜的東西,它包含了很多的方面,並非所有方面都是程序員面試所需要關注的。作者的經驗是可以重點考察這些方面:
1) 態度積極還是消極。有的面試者在談吐中就會自然給你一種積極上進的感覺,或者你可以在他的經歷中發現他積極的因素,這些都不是太難看出來的。相反,有的面試者你能明顯感覺到他的消極情緒。積極性在工作中是十分重要的,積極的人能給團隊帶來朝氣,也更易於合作。基本上,如果確定面試者屬於態度積極的,他通過作者這一關的可能性就會大大增加;相反,如果確定屬於態度消極的,即使技術能力不錯作者也會十分謹慎。
2) IQ。作者的經驗是,總體來看,聰明的人在工作中的表現更為優秀。在面試中要考察一個人是否聰明並不一定要像Google和MS那樣找些專門測試IQ的智力題,其實,你只需要看他討論問題是不是很有邏輯性,思考和說話是不是反應敏捷就可以做出大致的判斷。另外,眼睛是人心靈的窗戶,一個人聰明與否,眼睛是會說話的。不過,聰明也不完全是優點,比如,當公司或項目遇到困難時,往往是聰明人先跑掉了,堅守的往往是IQ一般的人。
3) 語言表達能力。語言表達能力也是程序員十分重要的一項素質,它關繫到項目中的溝通是否順暢。面試官可以看看面試者能否用簡明的語言介紹清楚曾經做過的項目,能否抓住要點,能否考慮到聽者的相關背景。一般來講,語言表達能力強的人綜合能力都不會太差。(面試網 www.mian4.net)
4) 是否具有用戶意識。有人說程序員是做研發的,哪來什麼用戶?只有銷售、市場人員才會和用戶打交道。其實,這是完完全全的錯誤認識。你寫一個模塊,甚至一個API,只要有別人用,他就是你的用戶。有的程序員設計一個模塊或是一個軟體總是習慣於從使用者的角度來考慮,盡量地方便使用者,這就是一種良好的用戶意識。具有良好的用戶意識的人更能考慮別人的感受和整體的需要,而不是單純地從自己和局部來思考問題。當面試者談及過去的項目經驗時,面試官可以常常站在用戶的角度對其進行提問,從這個過程中觀察其是否具有良好的用戶意識。
5) 如何應對質疑和壓力。面試官應該對面試者的回答以及以往項目進行合理的質疑,看看他如何應對。曾經有一位面試者談到做游戲登錄伺服器的經歷,作者就問:「如果登錄伺服器掛了,怎麼辦呢」?他說原先雖然沒有考慮這個問題,但是可以怎麼怎麼改進。其實,大家都理解項目中有各種不完美,這裡面原因很多,只要面對質疑和壓力能從容應對努力往好的方向思考解決就可以了,不需要掩飾缺陷,更不應該有情緒。作者遇到過有的面試者,一旦你對其項目提出質疑,他馬上產生反抗情緒,或不高興,或不承認有問題,這很容易一下子看出來他在工作中容不得質疑和批評,這種人要想合作就很困難。
6) 個性特點。許多面試者喜歡在簡歷上寫「精通C++/Linux「,這些字眼看得人麻木,如果有人寫」喜歡C++/Linux「,作者就會有一種眼前一亮的感覺。「精通」是沒有感情色彩的敘述,而「喜歡」包含了面試者的個性,作者更願意看到面試者的個性。作者相信對某樣東西真正的熱情遠比你當前對它的掌握程度更為重要。其實,N年的經歷告訴作者們,同一個班的同學,同一個項目組的同事,雖然每天所學的知識,所接觸的工作都是相同的,但其實每個人的成績和表現差異是十分明顯的。那麼,到底本質的差異是什麼呢?其實,就是每個人的個性。是個性使得有的人業余時間去打球,有的人業余時間去看書,有的人喜歡Linux,有的人喜歡Mac。一個人在團隊中扮演的角色也和他的個性有很大的關系。面試官應該引導面試者展現自己的個性,並判斷其是否有益於團隊。
【總結】
最後總結起來,作者的經驗是:
1) 面試官的目標是找到」工作好「的人,一定要圍繞這個目標來進行面試,如果把面試當成了演算法或操作系統期末考試這就走入了誤區;
2) 面試過程是通過學歷、性格、基礎、經驗、演算法等可以測試的因素去綜合判斷面試者「工作好」的概率;
3) 在各種因素中,性格 > 經驗 > 基礎 > 演算法。性格是最重要的,如果性格不好,所有技術能力都會大打折扣,而且技術缺陷容易彌補,性格缺陷很難改變;經驗體現了一個人的綜合能力,你可以從面試者過去的經歷中判斷他能從事哪種工作,不能從事哪種工作;基礎和演算法則主要起到輔助參考的作用,基礎好的程序員一般適應性比較強,學新技術更快,但是切忌單純從基礎來判斷一個人的能力。
更多程序員面試問題請登陸楚湘人才網
2. Google的瘋狂面試題,請大家解答!
此題公認的標准答案是:1號海盜分給3號1枚金幣,4號或5號2枚金幣,自己則獨得97枚金幣,即分配方案為(97,0,1,2,0)或(97,0,1,0,2)。現來看如下各人的理性分析:
首先從5號海盜開始,因為他是最安全的,沒有被扔下大海的風險,因此他的策略也最為簡單,即最好前面的人全都死光光,那麼他就可以獨得這100枚金幣了。
接下來看4號,他的生存機會完全取決於前面還有人存活著,因為如果1號到3號的海盜全都餵了鯊魚,那麼在只剩4號與5號的情況下,不管4號提出怎樣的分配方案,5號一定都會投反對票來讓4號去喂鯊魚,以獨吞全部的金幣。哪怕4號為了保命而討好5號,提出(0,100)這樣的方案讓5號獨占金幣,但是5號還有可能覺得留著4號有危險,而投票反對以讓其喂鯊魚。因此理性的4號是不應該冒這樣的風險,把存活的希望寄託在5號的隨機選擇上的,他惟有支持3號才能絕對保證自身的性命。
再來看3號,他經過上述的邏輯推理之後,就會提出(100,0,0)這樣的分配方案,因為他知道4號哪怕一無所獲,也還是會無條件的支持他而投贊成票的,那麼再加上自己的1票就可以使他穩獲這100金幣了。
但是,2號也經過推理得知了3號的分配方案,那麼他就會提出(98,0,1,1)的方案。因為這個方案相對於3號的分配方案,4號和5號至少可以獲得1枚金幣,理性的4號和5號自然會覺得此方案對他們來說更有利而支持2號,不希望2號出局而由3號來進行分配。這樣,2號就可以屁顛屁顛的拿走98枚金幣了。
不幸的是,1號海盜更不是省油的燈,經過一番推理之後也洞悉了2號的分配方案。他將採取的策略是放棄2號,而給3號1枚金幣,同時給4號或5號2枚金幣,即提出(97,0,1,2,0)或(97,0,1,0,2)的分配方案。由於1號的分配方案對於3號與4號或5號來說,相比2號的方案可以獲得更多的利益,那麼他們將會投票支持1號,再加上1號自身的1票,97枚金幣就可輕松落入1號的腰包了。
3. Google 的瘋狂面試題,你能答出幾道
17題 他可以用錢疏通兩或三個個人 這樣就可以按自己的計劃行事了
16題 隨便找出6個球 分兩組 一稱 如果平衡,就稱一下另兩個;如果第一步 不平衡,就在兩組中重的一組中,任選兩個在一稱,不就出來結果了
15題 答案是 i don't know ,it's hard to say
14題 這很難說 ,如果他事先已經預謀好,那自己就肯定虧了;如果他事先不知道這些人的生日,按概率(期望)來說是可以接受的。
12題 因該是6°
11題 猜測是1/3*0.95
10題
8題 丟掉 或者 賣掉自己不喜歡的 或者不再打算穿的
7題 使用Google地圖(你可以答Bai地圖試試,嘿嘿)
6題 這是個老題 以前做過 不過忘了 挺麻煩的 就不算了
5題 放玩具的倉庫 不過要有技術才能取出來
4題 太專業 我還沒有學到
3題 按低價收取,主要是獲取廣告效益 不能只做一次生意
2題 既然是按比例縮小,那就從攪拌器中跨出來
1題 試一下就知道了
都是拙見 胡說的
4. 15個變態的谷歌面試問題的答案
十二題可是初三上學期的物理題啊,關於天平的!
答案是:把八個硬幣其中3個放左盤,在選另外3個放右盤,其餘兩個先不管,如果兩個盤一樣重,則重的硬幣在剩下的兩個硬幣中,在稱這兩個硬幣,ok.若其中一個盤較重,就把這個盤的三個硬幣,其中一個放左盤,另一個放右盤再測,如果相等,則重的是剩下的1個硬幣,如果天平不平衡,則重的硬幣在較重的盤上.
第五題則是關於數學幾何圖形,大概是初二初三接觸過的,要知道井蓋在路上,肯定是有東西在井蓋的邊緣托住他,井蓋才不會掉下去,而這個邊緣是很小的.那麼井蓋是圓的話,半徑相等,如果井蓋因某種原因而打側放的話由於直徑比邊緣要長,不至於令井蓋掉下去.如果井蓋是矩形的話,一打側他就會掉下去了,因為矩形由兩個直角三角形組成,而直角三角形的斜邊較長.如果照這樣說等邊三角形也應該可以啊,一些不規則圖形也可以,可能也有美觀這一因素在吧,又或者是井蓋作者先想到圓井蓋,後來全世界都圓井蓋了,就沒人在意去計較為什麼不用等邊三角形井蓋了...由於所學知識有限,當時我問老師為什麼不能用等邊三角形,老師沒答我.不能給你證明,抱歉.
第七題,首先思考一下,每一秒分針時針都在轉動,那麼在重合的時候的下一秒,時針分針會不會再重合一次?想深一層,我覺得應從圓的度數方面考慮,通過計算得知,分針每走一小格(一分鍾),走了6度,而時針走了0.5度.那麼,假如現在是十二點,時針分針都指在了"12"上,這時重合了一次,但每走一秒,分針都有微妙的轉動,而時針也是,那麼一秒分針轉動了6/60=0.1度,時針轉動了0.5/60=0.008333度,即是說,在重合時的下一秒,分針就已經超越了時針,所以一小時只重合一次!(個人認為,本人僅是初三學生,這可能不是正確答案).我覺得,一天24小時,自然是24次.
第十一題屬於推理題目,我不知道(呵呵),不過在網上有類似這道題的:海盜分金幣,有五個海盜,一號首先開始分金幣,如果他的分配方法得不到半數的同意就處死並讓下一位去分,這題已有詳細答案(很久前就看過了),答案是:逆向思維。
假設每一個海盜都是絕頂聰明而理性,他們都能夠進行嚴密的邏輯推理,並能很理智的判斷自身的得失,即能夠在保住性命的前提下得到最多的金幣。同時還假設每一輪表決後的結果都能順利得到執行,那麼抽到1號的海盜應該提出怎樣的分配方案才能使自己既不被扔進海里,又可以得到更多的金幣呢?
此題公認的標准答案是:1號海盜分給3號1枚金幣,4號或5號2枚金幣,自己則獨得97枚金幣,即分配方案為(97,0,1,2,0)或(97,0,1,0,2)。現來看如下各人的理性分析:
首先從5號海盜開始,因為他是最安全的,沒有被扔下大海的風險,因此他的策略也最為簡單,即最好前面的人全都死光光,那麼他就可以獨得這100枚金幣了。
接下來看4號,他的生存機會完全取決於前面還有人存活著,因為如果1號到3號的海盜全都餵了鯊魚,那麼在只剩4號與5號的情況下,不管4號提出怎樣的分配方案,5號一定都會投反對票來讓4號去喂鯊魚,以獨吞全部的金幣。哪怕4號為了保命而討好5號,提出(0,100)這樣的方案讓5號獨占金幣,但是5號還有可能覺得留著4號有危險,而投票反對以讓其喂鯊魚。因此理性的4號是不應該冒這樣的風險,把存活的希望寄託在5號的隨機選擇上的,他惟有支持3號才能絕對保證自身的性命。
再來看3號,他經過上述的邏輯推理之後,就會提出(100,0,0)這樣的分配方案,因為他知道4號哪怕一無所獲,也還是會無條件的支持他而投贊成票的,那麼再加上自己的1票就可以使他穩獲這100金幣了。
但是,2號也經過推理得知了3號的分配方案,那麼他就會提出(98,0,1,1)的方案。因為這個方案相對於3號的分配方案,4號和5號至少可以獲得1枚金幣,理性的4號和5號自然會覺得此方案對他們來說更有利而支持2號,不希望2號出局而由3號來進行分配。這樣,2號就可以屁顛屁顛的拿走98枚金幣了。
不幸的是,1號海盜更不是省油的燈,經過一番推理之後也洞悉了2號的分配方案。他將採取的策略是放棄2號,而給3號1枚金幣,同時給4號或5號2枚金幣,即提出(97,0,1,2,0)或(97,0,1,0,2)的分配方案。由於1號的分配方案對於3號與4號或5號來說,相比2號的方案可以獲得更多的利益,那麼他們將會投票支持1號,再加上1號自身的1票,97枚金幣就可輕松落入1號的腰包了 .但是google的這道題無明確條件,只說如果得不到同意就死,沒其他的了,如果船員不管三七二十一全讓你死,那你怎麼辦?或許這題不應用邏輯分析,而是從社會現實角度,例如巴結好熟人之類的呵呵~~
第十題好像在某本書上看過,不過沒有寫答案,我是這樣想的,既然要讓他不知道號碼,就不能夠在紙上寫,那麼就只能夠用手機確認了:讓鮑伯撥打我的手機號碼.
第十五題,我想出的答案有很多,這種腦筋急轉彎式的題在大家眼中有無數答案,但出題人只看他手中的正確答案,所以我把我最雷的一個給你參考吧:如果只有硬幣這么小,從平面看攪拌器一般成接近四邊形五邊形的形狀,攪拌刀片轉動時是圓,嗎么就直接站在攪拌刀片切不到你的死角位置不就ok了?
第三題,生物學解釋,生男生女比例1比1,因為概率問題只是大概估算,並無准確答案,考方只想看你的解題思路罷了,我是這樣解的:既然是一比1,那麼就是要麼先生男,要麼先生女,由於是大概估算,那麼看作每生兩次就有一男一女(現實是不可能),即是:先生男的話就不再生,如果生女的話就會在生一個男,把他認作只有這兩種情況,且概率都是一比一,就是說兩男一女,所以比例就是二比一.
第八題,我不會,不過網上有網友的見解:對於一個軟體工程師來說,是要盡量避免在軟體中「死牛肉」出現。它不但對軟體本身沒有好處,還會給整個軟體帶來破壞。死牛肉不但不能吃還會引來許多倉蠅之類的害蟲。
其他題大多屬於主觀題,沒絕對答案,出題人只想看你的思路.不過我已經把能說的都給你說了,只看答案沒有用關鍵是分析,希望我用了1小時的長篇大論對你有幫助
參考資料: 網路大神,老師的諄諄教導
5. 程序員的面試問題(希望全面點)
很多用這個. 1. 問:怎樣用 Win95 的記事本 (Notepad) 來編輯 java源程序? 答:記得存檔時擴展名要加上".java",文件類型改成:「所有的文件(*.*)」。 2. 問:到底 Java 是如何傳遞參數的?是by value或by reference? 答:All parameters (values of primitive types, and values that are references to objects) are passed by value [JLS sect 8.4.1]。根據以上 Java規格文件的說法, 所有參數應該都是傳值的(by value)。但實際上, 實際經驗卻告訴我們所有 Java 的對象都是傳址的(by reference)。因此我們可以這樣解釋: 基本類型(如int, float, char等)是by value,而所謂「對象」(Object)則是by value of reference to object。 3. 問:String這個類型的class為何定義成final? 答: 主要是為了「效率」 和 「安全性」 的緣故。若 String允許被繼承, 由於它的高度被使用率, 可能會降低程序的性能,所以String被定義成final。 4. 問:finalizers和C++ 的 destructors有何差異? 答:Java內部具有「內存使用回收」 的機制, 雖然它也提供了類似 (C++ 的) destructors的 finalize(),每個對象都可以使用這個方法 method,但必須冒著破壞原先回收機制的危險。所以建議盡量避免使用finalize(),不妨考慮多使用 null 及 dispose() 來釋出資源會好一些。 5. 問:繼承了一個class叫做 Frotz,編譯器卻給我「No constuctor Frotz() in the class」這樣的錯誤提示,為什麼呢? 答:記住每當您定義了一個 class的constructor,除非您一開始就去call 這個constructor,否則 Java 會自動引入superclass原先不含參數的 constructor, 如果superclass的 constructor都是有參數的,那麼問題中的錯誤提示便出現了。 解決的方法很簡單, 找一找 API文件,加上正確的參數就得了。 6. 問:怎樣讓char類型的東西轉換成int類型? 答: char c = 'A'; int i = c; //反過來只要作強制類型轉換就行了 c = (char) I; 7. 問:我的applet原先好好的, 一放到web server就會有問題,為什麼? 答:一般來說,從以下方向試試: 確定class文件的格式沒錯——已經編譯過,也沒有損壞的情形; 確定所有用到的class文件放到web server上,少一個都不行; 確定所有的文件名和class名稱一致,特別檢查大小寫有無差錯; 如果程序中用到package,web server上的目錄就要當心了。譬如您在class中宣告了一個叫COM.foo.util的package,那麼web server的applet codebase目錄底下就非得有 COM/foo/util這個子目錄不可。(注意目錄名稱也有大小寫之分); web server上的文件檔案應該事先設定好。(尤其是search,read和execute許可權) 8. 問:怎樣在 Applet中用某個圖形塗滿整個背景? 答:在背景建立 Panel 或 Canvas, 然後用圖形填滿它。 9. 問:怎樣在 Applet 中建立自己的菜單(MenuBar/Menu)? 答:首先在Applet的init() 方法中建立Frame instance, 然後將Menus, Menubar都加上去即可。 (setMenuBar() 是 Frame下的方法)或者,找到Applet上層的Frame後依法炮製。 Container parent = getParent(); while (! (parent instanceof Frame) ) parent = parent.getParent(); Frame theFrame = (Frame) parent; 注意:第二個方法在Mac或某些browsers上並不可行。 如果您使用的是JDK 1.1,也可以考慮使用popup menu,這樣就不必理會Frame的問題了。 10. 怎樣比較兩個類型為String的字元串? 答:在兩個對象之間使用 "==",會將「兩個對象是否有同一reference」的結果傳回。也就是說, 這等同於「兩個對象是否擁有同一地址 (address)」,或者「兩個對象物件是否為同一對象」。如果您的意思是判斷兩個字元串的內容是否相同,那麼應該使用以下的方法才對: if (s1.equals(s2) ) or if (s1.equalsIgnoreCase(s2) ) or if (s1.startsWith(s2) ) or if (s1.endsWith(s2) ) or if (s1.regionMatches(s1_offset, s2, s2_offset, length) ) or if (s1.compareTo(s2) <0) 11. 怎樣將浮點數(float)相加 ? Float 好像沒有辦法? 答:我猜想您的程式大概寫成這樣: Float One; Float Two; Float Hard = One + Two; 請注意 float 和 Float 是不同的,前者是 Java 基本類型之一, 而後者卻是class。您應該將源代碼改為: float One; float Two; float Hard = One + Two; 或 Float One = new Float(1.0); Float Two = new Float(2.0); Float Hard = new Float(One.floatValue() + Two.floatValue());
6. google面試題
幾星期前,一個朋友接受了Google公司的面試,他透露了面試中的一些問題。順便,我把從其他幾個曾經面試過的人那裡聽來的內容也整理在一起。最大的互聯網公司Google的一份面試題集,看看你是否能夠回答出來。其中很多問題都是開放式的,正確的解答有許多種,所以在這里就不提供答案了。
一輛學校班車裡面能裝多少個高爾夫球?
你被縮小到只有硬幣厚度那麼點高(不是壓扁,是按比例縮小),然後被扔到一個空的玻璃攪拌器中,攪拌刀片一分鍾後就開始轉動。你怎麼辦?
要是讓你清洗整個西雅圖的所有窗子,你會收取多少費用?
怎麼才能識別出電腦的內存堆棧是向上溢出還是向下溢出?
你要向你8歲的侄子解釋什麼是資料庫,請用三句話完成。
時鍾的指針一天內會重合幾次?
你需要從A地去B地,但你不知道能不能到,這時該怎麼辦?
好比你有一個衣櫥,裡面塞滿了各種襯衫,你會怎麼整理這些襯衫,好讓你以後找襯衫的時候容易些?
有個小鎮有100對夫婦,每個丈夫都在欺騙他的妻子。妻子們都無法識破自己丈夫的謊言,但是她們卻能知道其他任何一個男人是否在撒謊。鎮上的法律規定不準通姦,妻子一旦證明丈夫不忠就應該立刻殺死他,鎮上所有婦女都必須嚴格遵守這項法律。有一天,鎮上的女王宣布,至少有一個丈夫是不忠的。這是怎麼發生的呢?
在一個重男輕女的國家裡,每個家庭都想生男孩,如果他們生的孩子是女孩,就再生一個,直到生下的是男孩為止。這樣的國家,男女比例會是多少?
如果在高速公路上30分鍾內到一輛車開過的幾率是0.95,那麼在10分鍾內看到一輛車開過的幾率是多少 (假設為常概率條件下)
如果你看到鍾的時間是3:15,那一刻時針和分針的夾角是多少?(肯定不是0度!)
4個人晚上要穿過一座索橋回到他們的營地。可惜他們手上只有一支只能再堅持17分鍾的手電筒。通過索橋必須要拿著手電筒,而且索橋每次只能撐得起兩個人的份量。這四個人過索橋的速度都不一樣,第一個走過索橋需要1分鍾,第二個2分鍾,第三個5分鍾,最慢的那個要10分鍾。他們怎樣才能在17分鍾內全部走過索橋?
你和朋友參加聚會,包括你們兩人在內一共有10個人在場。你朋友想跟你打賭,說這里每有一個人生日和你相同,你就給他1元,每有一個人生日和你不同,他給你2元。你會接受么?
全世界有多少個鋼琴調音師?
你有8個一樣大小的球,其中7個的重量是一樣的,另一個比較重。怎樣能夠用天平僅稱兩次將那個重一些的球找出來。
有5個海盜,按照等級從5到1排列。最大的海盜有權提議他們如何分享100枚金幣。但其他人要對此表決,如果多數反對,那他就會被殺死。他應該提出怎樣的方案,既讓自己拿到盡可能多的金幣又不會被殺死?(提示:有一個海盜能拿到98%的金幣)
你覺得自己有把握去Google工作了么?
7. Google面試題
只能回答16題:先稱6個兩等分稱,如果天平平衡,則餘下的兩個再稱即可得到;若6個不平衡再把輕那一份的其中的兩個放在天平上稱,若平衡,餘下的那個就是;若不平衡輕的一側就是!
15:它和鋼琴生產廠家呈正比!
14:看情況,如果是大家的生日聚會,不賭是傻子;如果是普通聚會,傻子才賭!
13:應該考慮到電筒的照明距離:讓10和5先過,5分鍾後電筒返照2跟上,同理,1再跟上!
12:360/12=30 結果為30/4
09:那個男的和女皇通姦
08:按適用場合分
07:打的,只要有錢條條大路通羅馬
03:關我PI
02:死抓刀片不放
隨便答一下 不知對錯拉!
8. Google面試題——有趣的腦筋急轉彎……非常有意思 :)
1.一輛校車的高爾夫球
2.沉底
3.沒有見識回答不了
4.用軟體
5.儲存記數的地方 看不見摸不著 記得了
6.連起點的話25次 不連24次
7.那就肯定去咯 看地圖 問人
8.經常穿的放前面 剩下的由小到大 顏色由淺到深 顏色排列 黑 紅 橙 黃 綠 青 藍 紫
9.女王下來體恤民情…… 法律又是她定的 她不說沒人懂
10.1:1
11.0.3166無限循環
12.7.5度
13.對 就是不成立 要不就是題不夠詳細
14.不賭
15.不懂 確實
16.3跟3 一樣的話 稱其2得知 不一樣的話 3個輕的那邊抽2個來稱 一不一樣都得知
17.其他人能死嗎 能的話先分兩人比較多點那兩人死了剩3個 我和一個強盜個分50 有個強盜不同意我也不同意 然後又死個 再隨便怎麼分都行 我說了算(這題答得有點不像樣)
9. 程序員面試的時候考官一般問什麼問題(比較流行的)
給你提供點參考信息,希望能幫助到你:
1、使用相同的工具和時間限制模擬面試訓練
Google和微軟都會讓應聘者在白板上手工解答編程問題,但通常大部分的應聘者都是習慣於在電腦上利用編程工具系統編寫程序。因此面試的時候,某些應聘者離開了熟悉的電腦游標,站在白板前感覺手足無措不知該如何起行。又或者他們不習慣在編程之時旁邊有人觀看,這會讓他們感到緊張而無法正常思考。
在現實生活中,如果你想要橫渡英吉利海峽,自然不能總是在室內游泳池練習。你必須投身於大海在波濤之中訓練,在准備面試的時候也是如此。
在面試開始之前你最好向招聘單位詢問面試形式和面試問題。如果招聘單位讓你在某個房間考試且僅提供沒有匯編程序的編輯器,那麼就應該在家中按照這種情景進行練習。如果招聘公司單位讓你在白板上回答問題並會安排考官在旁監督,那麼你就要找一位軟體工程師來扮演考官配合你練習。即使找來的考官經驗不如你也沒有關系,他們依然能幫助你消除在他人面前出錯所帶來的緊張感,這樣可以讓你適應有人在旁邊盯著看的面試氛圍。
如果你恰巧認識我並希望由我來幫你聯系,那我的條件就是必須請我吃飯:如果你已經工作了就吃日本壽司大餐;如果你還是學生,那麼吃比薩餅也可以。
2、在面試過程中不要對細小錯誤耿耿於懷
我曾不止一次的在面試過程中碰到這種情況:當應聘者知道編程問題後,他馬上就想到了最佳的方案、確定了邊界條件,然後開始編寫程序。但在編寫過程中,應聘者犯了諸如首先檢查是不是操作順序錯誤或忘記設定某變數等無關大局的小錯誤,當我指出其錯誤之後,應聘者立刻變得十分緊張,這種焦慮情緒影響了他在後面環節的正常發揮。
其實這種恐懼心理完全不必要。一名優秀的程序員在編程過程中出現錯誤也是很正常的,就像是小提琴手在演奏高難度的巴赫交響樂時也會偶爾失誤。音樂會的聽眾可能會覺察到這些錯誤,但是聽眾絕對不會因為這種細小失誤就把出色的小提琴手看作是門外漢。
即便應聘者徹底搞砸了某個編程問題,面試考官也可能會提出不同的問題並會容忍應聘者在某個問題上的失誤。再退一步說,就算某次面試徹底失敗,你也有機會在其它面試上補救。
我的一位同事(一個項目的技術負責人)最近面試了一個人,在開始面試時他覺得面試者的交流方式存在問題,因此開始表現的相當不友好。但經過了整個面試過程後,面試者證明了自身的能力,而我的那位同事也成了那位面試者最堅定的支持者。在過去的一年中,我從未見過這位同事如此強烈的支持哪位面試者。
所以,因此就算面試進展不順,也務必堅持到底不要放棄。