㈠ IT面試經驗:程序員面試什麼最重要
程序員面試一直是社區樂於討論的熱門話題。我自己從06年實習以來,先後經歷了4家軟體公司,全部是外企,其中有世界500強的通信企業,有從事期權期貨交易的歐洲中等規模的金融公司,也有為大型汽車製造商開發Android智能汽車的新興公司。跨入IT行業以來,我在求職過程中經歷過多次面試,最近兩年也有過多次面試別人的經驗。我感覺現在到了對這個問題發表自己看法的時候,這篇文章是我站在面試官角度對於程序員面試問題的一個階段性反思和經驗總結。
目標
相信和不少朋友一樣,有了幾年工作經驗成為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,但我對於其特別重視考察演算法能力的面試策略是持懷疑態度的。即使在這樣的世界級大公司,演算法雖然重要,但可以想像在項目實施過程所遇到的各種各樣問題中,演算法問題絕大多數時候不會是主要瓶頸,沒有到那種需要每個人都是演算法高手的情況。實際上,絕大多數項目真正難點並不是一兩個演算法瓶頸,甚至也不是單點的技術瓶頸,而是系統性的組織、協調、設計、開發問題,有大量的看起來不是那麼有技術含量的臟活累活,也有許多問題是由於信息不足,並不是技術能力強就能克服這些困難。一個團隊最好優勢互補,有人演算法強,有人業務分析能力強,有人擅長後端服務,有人擅長前端界面,有人聰明,有人踏實,這是最好的。如果按照「演算法好」的單一標准選材,必定會把許多優秀的人才拒之門外。
基礎
基礎面試是指考察諸如指針使用、進程線程概念等基礎知識的面試,十分類似於大學期末考試題。我曾經以為基礎面試十分重要,但是現在不這么看了。在工作中基礎的確是重要的,但是在面試過程中,它必須具有區分性才有意義,也就是說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) 語言表達能力。語言表達能力也是程序員十分重要的一項素質,它關繫到項目中的溝通是否順暢。面試官可以看看面試者能否用簡明的語言介紹清楚曾經做過的項目,能否抓住要點,能否考慮到聽者的相關背景。一般來講,語言表達能力強的人綜合能力都不會太差。
4) 是否具有用戶意識。有人說程序員是做研發的,哪來什麼用戶?只有銷售、市場人員才會和用戶打交道。其實,這是完完全全的錯誤認識。你寫一個模塊,甚至一個API,只要有別人用,他就是你的用戶。有的程序員設計一個模塊或是一個軟體總是習慣於從使用者的角度來考慮,盡量地方便使用者,這就是一種良好的用戶意識。具有良好的用戶意識的人更能考慮別人的感受和整體的需要,而不是單純地從自己和局部來思考問題。當面試者談及過去的項目經驗時,面試官可以常常站在用戶的角度對其進行提問,從這個過程中觀察其是否具有良好的用戶意識。
5) 如何應對質疑和壓力。面試官應該對面試者的回答以及以往項目進行合理的質疑,看看他如何應對。曾經有一位面試者談到做游戲登錄伺服器的經歷,我就問:「如果登錄伺服器掛了,怎麼辦呢」?他說原先雖然沒有考慮這個問題,但是可以怎麼怎麼改進。其實,大家都理解項目中有各種不完美,這裡面原因很多,只要面對質疑和壓力能從容應對努力往好的方向思考解決就可以了,不需要掩飾缺陷,更不應該有情緒。我遇到過有的面試者,一旦你對其項目提出質疑,他馬上產生反抗情緒,或不高興,或不承認有問題,這很容易一下子看出來他在工作中容不得質疑和批評,這種人要想合作就很困難。
6) 個性特點。許多面試者喜歡在簡歷上寫「精通C++/Linux「,這些字眼看得人麻木,如果有人寫」喜歡C++/Linux「,我就會有一種眼前一亮的感覺。「精通」是沒有感情色彩的敘述,而「喜歡」包含了面試者的個性,我更願意看到面試者的個性。我相信對某樣東西真正的熱情遠比你當前對它的掌握程度更為重要。其實,N年的經歷告訴我們,同一個班的同學,同一個項目組的同事,雖然每天所學的知識,所接觸的工作都是相同的,但其實每個人的成績和表現差異是十分明顯的。那麼,到底本質的差異是什麼呢?其實,就是每個人的個性。是個性使得有的人業余時間去打球,有的人業余時間去看書,有的人喜歡Linux,有的人喜歡Mac。一個人在團隊中扮演的角色也和他的個性有很大的關系。面試官應該引導面試者展現自己的個性,並判斷其是否有益於團隊。
總結
最後總結起來,我的經驗是: 1) 面試官的目標是找到」工作好「的人,一定要圍繞這個目標來進行面試,如果把面試當成了演算法或操作系統期末考試這就走入了誤區;2) 面試過程是通過學歷、性格、基礎、經驗、演算法等可以測試的因素去綜合判斷面試者「工作好」的概率;3) 在各種因素中,性格 > 經驗 > 基礎 > 演算法。性格是最重要的,如果性格不好,所有技術能力都會大打折扣,而且技術缺陷容易彌補,性格缺陷很難改變;經驗體現了一個人的綜合能力,你可以從面試者過去的經歷中判斷他能從事哪種工作,不能從事哪種工作;基礎和演算法則主要起到輔助參考的作用,基礎好的程序員一般適應性比較強,學新技術更快,但是切忌單純從基礎來判斷一個人的能力。
㈡ it服裝面試一般會問什麼問題
IT技術崗位面試常見問題包括以下幾類問題及回答技巧:
Q1:挑一個應聘者覺得做的最好的項目講一下。
最好事先把簡歷上面寫的項目或者課程設計過一篇,拿張紙寫一寫,盡量把以前做這個項目的時候承擔的任務、角色、遇到的問題用最簡練的語言說出來。同時,處理這個問題時不同的企業可以選擇不同的項目來回答。如果你沒有項目經驗,可以把以前自己做過的作品或實驗拿出來講。要思路清晰,然後重點突出對項目的貢獻以及其它方面的能力。
Q2:應聘者在項目中遇到的最有挑戰性的問題是什麼?
要把之前碰到過的有挑戰性的問題以及如何解決的回想一下,首先精簡的描述問題,然後重點在你是如何處理這個問題的。
Q3:從項目中得到的最大收獲是什麼?
這個問題比較好回答,答案也可以很發散,比如:技術水平有了很大的提高;通過解決項目中出現的各種bug,解決問題的能力有了很大的提升;通過幾個人協同完成一個項目,增強了團隊合作精神等等。
Q4:挑一個寫程序中遇到的bug以及如何解決的講一下。
這個問題和Q2有點像,但是限制性小了一點。其實程序中遇到的bug肯定很多很多,但是在沒准備的情況加上面試的緊張下,可能會大腦空白,思路混亂。所以需要事先准備一下。
Q5:項目中用的最多的語言是什麼?或者最擅長的語言是什麼?
這個問題出現的概率也是相當之高,回答也要謹慎,要根據應聘的職位靈活回答。假如申請的職位要求C/C++,那千萬不能只說C,如果你確實對C++不是很熟悉,那麼可以換一個說法,比如C++也用,但是用的少,然後舉幾個例子證明你的學習能力確實強。總之不要謙虛也不要撒謊。
Q6:如果遇到不同意見,如何處理?
這個問題面試官也非常喜歡問,主要考察你的團隊合作精神,是否有包容心接納不同的意見,以及如何處理與他人的沖突。
㈢ IT面試技巧:面試常見的幾個問題
IT技術崗位面試常見問題包括以下幾類問題及回答技巧:
Q1: 挑一個應聘者覺得做的最好的項目講一下。
最好事先把簡歷上面寫的項目或者課程設計過一篇,拿張紙寫一寫,盡量把以前做這個項目的時候承擔的任務、角色、遇到的問題用最簡練的語言說出來。同時,處理這個問題時不同的企業可以選擇不同的項目來回答。如果你沒有項目經驗,可以把以前自己做過的作品或實驗拿出來講。要思路清晰,然後重點突出對項目的貢獻以及其它方面的能力。
Q2:應聘者在項目中遇到的最有挑戰性的問題是什麼?
要把之前碰到過的有挑戰性的問題以及如何解決的回想一下,首先精簡的描述問題,然後重點在你是如何處理這個問題的。
Q3:從項目中得到的最大收獲是什麼?
這個問題比較好回答,答案也可以很發散,比如:技術水平有了很大的提高;通過解決項目中出現的各種bug,解決問題的能力有了很大的提升;通過幾個人協同完成一個項目,增強了團隊合作精神等等。
Q4:挑一個寫程序中遇到的bug以及如何解決的講一下。
這個問題和Q2有點像,但是限制性小了一點。其實程序中遇到的bug肯定很多很多,但是在沒准備的情況加上面試的緊張下,可能會大腦空白,思路混亂。所以需要事先准備一下。
Q5:項目中用的最多的語言是什麼? 或者最擅長的語言是什麼?
這個問題出現的概率也是相當之高,回答也要謹慎,要根據應聘的職位靈活回答。假如申請的職位要求C/C++,那千萬不能只說C,如果你確實對C++不是很熟悉,那麼可以換一個說法,比如C++也用,但是用的少,然後舉幾個例子證明你的學習能力確實強。總之不要謙虛也不要撒謊。
Q6:如果遇到不同意見,如何處理?
這個問題面試官也非常喜歡問,主要考察你的團隊合作精神,是否有包容心接納不同的意見,以及如何處理與他人的沖突。
㈣ IT技術支持崗位面試常見問題
IT技術崗位面試常見問題包括以下幾類問題及回答技巧:
Q1: 挑一個應聘者覺得做的最好的項目講一下。
最好事先把簡歷上面寫的項目或者課程設計過一篇,拿張紙寫一寫,盡量把以前做這個項目的時候承擔的任務、角色、遇到的問題用最簡練的語言說出來。同時,處理這個問題時不同的企業可以選擇不同的項目來回答。如果你沒有項目經驗,可以把以前自己做過的作品或實驗拿出來講。要思路清晰,然後重點突出對項目的貢獻以及其它方面的能力。
Q2:應聘者在項目中遇到的最有挑戰性的問題是什麼?
要把之前碰到過的有挑戰性的問題以及如何解決的回想一下,首先精簡的描述問題,然後重點在你是如何處理這個問題的。
Q3:從項目中得到的最大收獲是什麼?
這個問題比較好回答,答案也可以很發散,比如:技術水平有了很大的提高;通過解決項目中出現的各種bug,解決問題的能力有了很大的提升;通過幾個人協同完成一個項目,增強了團隊合作精神等等。
Q4:挑一個寫程序中遇到的bug以及如何解決的講一下。
這個問題和Q2有點像,但是限制性小了一點。其實程序中遇到的bug肯定很多很多,但是在沒准備的情況加上面試的緊張下,可能會大腦空白,思路混亂。所以需要事先准備一下。
Q5:項目中用的最多的語言是什麼? 或者最擅長的語言是什麼?
這個問題出現的概率也是相當之高,回答也要謹慎,要根據應聘的職位靈活回答。假如申請的職位要求C/C++,那千萬不能只說C,如果你確實對C++不是很熟悉,那麼可以換一個說法,比如C++也用,但是用的少,然後舉幾個例子證明你的學習能力確實強。總之不要謙虛也不要撒謊。
Q6:如果遇到不同意見,如何處理?
這個問題面試官也非常喜歡問,主要考察你的團隊合作精神,是否有包容心接納不同的意見,以及如何處理與他人的沖突。
㈤ 求網路工程師、運維工程師、IT工程師、系統集成工程師常見面試題
做IT運維工程師,你會實際的操作否,現在都用運維管理系統去實現應用管理的標准化,如果你能熟練運用WeADMIN ITOSS估計你做運維沒有問題,中移動南方基地,電信愛音樂基地都用這個去運維的,那麼你在自己學習中,這個是不需要付費的軟體,只是針對定製的企業需要,所以中小微企業來說,零成本可以使用,也希望你運用嫻熟後應用於企業。
㈥ 面試IT,面試官會問哪些問題
1.你自我介紹一下吧?
2.如果要用一句話(一個詞)描述你自己,你會怎麼說?
3.你的學習成績怎麼樣?
4.你看中了我們公司的什麼?
5.你從哪些途徑了解到我們公司?
6.你認為自己有哪些優勢可以勝任這個崗位?
7.你有什麼興趣愛好?
8.你的家庭情況如何?
9.你還有什麼問題要問嗎?
有經驗的面試官,對上述每一個問題都會變著花樣衍生出不同的提法。
㈦ IT類應屆畢業生面試常見問題
IT類應屆畢業生面試常見問題
這次因為發展需要和政府支持決定招收12名左右應屆大學畢業生,本次招聘會是隨DL市高新園區企業招聘團前往某還算不錯的師范院校。
我提問最多的問題:
1、請寫一個SQL語句:查詢A表中全部數據(約10人中有2人答對....)
2、對java比較熟的,讓他說幾個常用包名,對C#熟的讓他說幾個常用控制項名,能說出3個的一隻手都數的.過來。(每種都有幾十個,常用的至少也有10多個)
3、敢寫“精通數據結構“的,讓他說幾種常用的數據結構,能說出兩個的一上午沒有發現,更別說後續的問題了。
4、專業是“軟體工程“的,讓簡單介紹下軟體開發的大致步驟,能說出3步的寥寥無幾(根據不同分法,會有8步左右)
5、學java的誰簡歷上寫用ssh框架做過項目的,我就讓說說默認的配置文件名字,3人中1人說對。
6、某校(非這所師范院校的)幾乎所有學生都有一個IB_ 頒發的UML什麼建模證書,開始以為還不錯,讓他們簡單說說UML,知道什麼說什麼,連一個能說出3句話的都沒有,甚至連縮寫是什麼意思都不知道。
諸如此類,我的問題都是只要你對簡歷上寫的名詞稍有一點了解,在范圍內隨意說點什麼都可以,全都停留在只要你課沒逃很多,就一定知道的1+1級別的問題上,結果仍然很讓人失望。我的要求不高,只要態度認真肯學,我帶你提高,但我真的沒有信心讓一個在校從不學習的學生會老實的跟著我學!
更多 面試筆試 請繼續訪問應屆畢業生 求職指南 ;
㈧ 面試JAVA程序員最基本的面試題有哪些
java異常機制的原理與應用
答:每當程序出現異常之後,如果程序沒有進行相應的處理,則程序會出現中斷現象。
實際上,產生了異常之後,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常類型進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標准應用:try-catch-finally-throw-throws一起使用。
2. 垃圾回收機制的優點
答:釋放無用的對象所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調用Runtime.getRuntime().gc()
3. Error與Exception區別
答:Error是jvm進行處理,是jvm出錯
exception是可以由程序處理的,可以用try-catch捕獲的
4. final,finally,finallize
答:final定義的變數的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承
finally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的
5. Anonymous Inner Class是否可以extends,是否可以implements Interface
答:允許繼承和實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的
6. Static Nested Class 與Inner Class的區別
答:使用Static定義的Class就是外部類,可以通過外部類. 內部類直接訪問
而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內部類實例。
7. HashMap and HashTable?
答:HashMap:1) released in jdk 1.2,new Class 2)採用非同步處理方式,性能較高,是非線程安全的 3)允許null
HashTable:1)released in jdk 1.0 ,old Class 2)採用同步處理方式,性能低,是線程安全的3)不允許null
8. assert代表什麼?
答:asserts是jdk 1.4之後發布的新關鍵字,表示斷言,即程序執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea參數
9. gc是什麼?
答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放
10. String s = new String("xyz")產生了幾個對象?
答:一個匿名對象xyz,在棧空間內。一個new實例化的對象,在堆空間內。
11. sleep() and wait()?
答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒
wait()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源
12. java中存在goto,但不能使用
13.數組有沒有length(),String有沒有length()?
答:數組有length屬性,String有length()
14. Overload與Override的區別
答:Overload:重載
|- 在一個類中定義的若干方法
|- 所有的方法名相同,但參數類型或個數不同
|- 只有參數有關,與返回類型無關
Override:覆寫
|- 在繼承的關系中
|- 子類定義了父類同名的方法,參數類型或個數最好完全一樣。
|- 訪問許可權不能更嚴格
15. Set里的元素不能重復,用什麼方法區分?==與equals()方法的區別
答:set里的元素是不能重復的,用iterator()方法來區分重復與否,==屬於地址比較,
==用於比較引用和比較基本數據類型時具有不同的功能:
比較基本數據類型,如果兩個值相同,則結果為true
而在比較引用時,如果引用指向內存中的同一對象,結果為true
16. 列出常見的 runtime exception
答:NumberFormatException/ArrayOutIndexofBoundException/NullPointerException/ClassCastException
17. abstract class 和 interface有什麼區別?
答:抽象類:
|-由抽象方法和常量、變數、全局常量、構造方法、普通方法組成
|-使用abstract聲明
|-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-存在單繼承的局限
|-抽象類可以實現若干個介面
介面:
|-由抽象方法和全局常量組成
|-使用interface關鍵字
|-子類要通過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-一個子類可以實現多個介面
|-介面不能繼承一個抽象類,但允許繼承多個介面
18. 啟動一個線程要用start(),因為要通知jvm進行cpu資源的分配
19. try{}裡面有一個return,問finally{}裡面的代碼是否執行,在什麼時機執行?
答:finally{}裡面的代碼執行,在return之前。
20. 寫一個singleton
答:singleton的核心就是構造方法私有化,Class,Runtime都採用單例
package com.leongod.demo;
public class Singleton(){
private static final sin = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return sin;
}
}
21. 程序設計:輸入一組數字,然後排序輸出
答:package com.leongod.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class IO {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("請輸入一組數字,中間用空格分割:");
String str = buf.readLine();
Set<Integer> set = new TreeSet<Integer>();
String[] arr = str.split(" ");
for(String s : arr) {
if (s.matches("\\d+")) {
set.add(Integer.parseInt(s));
}
}
Iterator<Integer> it = set.iterator();
System.out.println("排序後的結果:");
while (it.hasNext()) {
System.out.print(it.next() + ",");
}
}
}
22.列出目錄內的文件
package com.leongod.demo;
import java.io.File;
import com.sun.org.apache.xpath.internal.functions.FuncBoolean;
public class FileDemo {
public static void main(String[] args) {
?? File file = new File("D:" + File.separator + "kongkong");
?? fun(file);
}
public static void fun(File file) {
if (file.isDirectory()) {
File[] lf = file.listFiles();
if (lf != null) {
for(File f : lf) {
fun(f);
}
}
}else {
System.out.println(file.toString());
}
}
}
23. char可以存一個中文漢字嗎?
答:可以,使用了unicode編碼
24.多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:兩種多線程方法,繼承Thread類,實現Runnable介面
|-Thread類是Runnable介面的子類
|-使用Runnable介面可以實現資源共享的目的
|-所有線程操作都必須通過Thread類的start()方法啟動
兩種實現同步的方法:
|-同步代碼塊:Synchronized(this)
|-同步方法
25.f=3.4是不對的,3.4默認是double類型的
26.String and StringBuffer?
答:String 不可以修改,StringBuffer可以修改
27.Class.forname向容器中載入驅動程序
28.int與Integer有什麼區別?
答:int是基本數據類型,Integer是包裝類
在jdk1.5以後,可以實現自動裝箱和拆箱
29.2*8有效的方法是移位操作:2<<3
30.請說出類集框架的完整結構
答:類級框架的最大介面:Collection、Map、Iterator、Enumeration
Collection:存放單值
|-List:允許有重復內容
|-ArrayList:非同步處理,新的操作類,非線程安全
|-Vector:同步處理,舊的操作類,線程安全,支持Enumeration
|-Set:不允許有重復的內容,依靠hashCode()和equals()進行重復的驗證
|-HashSet:無序存放
|-TreeSet:有序存放,按Comparable排序
|-Map:存放一對值
|-HashMap:新的類,非同步處理,非線程安全,允許有null
|-HashTable:舊的類,同步處理,線程安全,不允許有null
|-TreeMap:有序排列,按key配需
|-Iterator:迭代輸出,依靠collection介面中的iterator方法輸出,是新的輸出標准
31.是否可以繼承String類?答:不可以,因為使用了final關鍵字
㈨ it面試問什麼問題
it面試問什麼問題
it面試會問什麼問題,大家有了解過嗎?以下是我為大家整理的關於it面試問什麼問題,希望大家喜歡!
問題1.主動性
問 題:
「你是否曾經付出額外的努力,以幫助某一項工作繼續進行下去,你是如何做的,結果如何?」
「你工作上最大的成就是什麼,你採取了哪些行動?」
「在過去的六個月當中,你是否向上司提出過新的建議,哪些被接受了,你是如何做到的﹖」
「你受過何種獎勵,你是如何贏得這些獎勵的,同時還有多少人也得到了這些獎勵?」
「在你的職責范圍內,你實行過哪些改革,你如何確保它們得以執行?」
「為了改進工作或生產流程,你提出過哪些建議?」
問題2. 克服困難的精神
問 題:
「你是否曾經與他人競爭,並失敗了,請舉例。」
「對於你的上級或同事的批評,你的反映如何?」
「沒有哪位銷售人員可以每次都做成生意,你失去了一筆大訂單之後,你會怎麼做?對於一些銷售人員來說,有時他們會懷疑:銷售對他們而言,是否是一項合適的職業,你是否也有過這種感受?為什麼?你是怎麼做的。」
「請說說你曾經從一位客戶手中失去一筆訂單的經歷。」
「你的客戶有時會對你表現出不感興趣或不友好,對此你是怎麼做的,請舉出一個實例。」
問題3. 毅 力
問 題:
「事情並不總是按照我們的想法進行的,你是否經歷過作出最大努力,但最終失敗了,請舉例。」
「你沒有做成功的最大的一筆生意是什麼?你是怎麼做的?」
「對於妨礙你完成工作的阻力,你是如何克服的?請舉例。」
「請舉出一個實例,你堅持意見,以證明產品或服務是如何能夠滿足客戶要求的。」
「請舉出一個實例,你堅持某一立場或行動計劃,直到達至期望的目標,或該目標已不再可能達到。」
問題4. 忍耐力
問 題:
「你工作中壓力最大的是哪一方面,為什麼?你的反應如何?」
「你的工作中是否經歷過某些沖突,你的反應如何?」
「你是否曾經因為工作職責的重負而感到失去信心?請給出一個實例。」
「工作中你和客戶、下屬或同事之間壓力最大的是哪些方面的問題?請給一個實例,說明你的行動或反應。」
「工作中你是否面對過道德觀或價值觀的沖突,你的反應如何?請給出一個實例。」
「當你處於一個新的或不熟悉的工作環境,你的'反應如何?請給出一個實例。」
「你是否曾經面對過要求特別急的某種情況,例如:對體力或期限的要求,你的反應如何?請給出一個實例。」
問題5.廉政
問 題:
「有時組織嚴格的規定,會使得工作難以進行下去,你是否曾經想過違反某一條規定,以便於更有效地進行工作。」
「你是否曾經被要求做某些你認為是錯誤的事情?你是怎麼做的?」
「我們並不總是和那些我們認為是誠實的人一塊工作,你是否曾經見到其它同事的工作方法對你而言是不恰當的,你怎麼做?」
「為了完成一筆大生意,有時我們會向客戶提供某種額外服務。你是否有過這種經歷?」
「你是否曾經說服某一客戶購買比他最初想法要貴得多的產品?請舉例。」
「有時很容易混淆保密資料和公開資料之間的界限,你是否經歷過這種事情?你是怎麼做的?」
「你是否曾經把工作帶回家去做?對這種行為,你是如何看待的?」
;