導航:首頁 > 程序命令 > 後端程序員面試經典題

後端程序員面試經典題

發布時間:2025-01-01 04:20:46

『壹』 2021面試網路工程師的題目

面試 的目的是確定面試者如何處理他們所選擇的研究領域的問題,以及他們如何批判性地思考問題。下面我給大家帶來2021面試網路工程師的題目參考,希望能幫助到大家!

java多線程 面試題 目

1、什麼是線程?

線程是 操作系統 能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。程序員可以通過它進行多處理器編程,你可以使用多線程對運算密集型任務提速。比如,如果一個線程完成一個任務要100毫秒,那麼用十個線程完成改任務只需10毫秒。

2、線程和進程有什麼區別?

線程是進程的子集,一個進程可以有很多線程,每條線程並行執行不同的任務。不同的進程使用不同的內存空間,而所有的線程共享一片相同的內存空間。每個線程都擁有單獨的棧內存用來存儲本地數據。

3、如何在Java中實現線程?

兩種方式:java.lang.Thread 類的實例就是一個線程但是它需要調用java.lang.Runnable介面來執行,由於線程類本身就是調用的Runnable介面所以你可以繼承java.lang.Thread 類或者直接調用Runnable介面來重寫run() 方法 實現線程。

4、Java 關鍵字volatile 與 synchronized 作用與區別?

Volatile:

它所修飾的變數不保留拷貝,直接訪問主內存中的。

在Java內存模型中,有main memory,每個線程也有自己的memory (例如寄存器)。為了性能,一個線程會在自己的memory中保持要訪問的變數的副本。這樣就會出現同一個變數在某個瞬間,在一個線程的memory中的值可能與另外一個線程memory中的值,或者main memory中的值不一致的情況。 一個變數聲明為volatile,就意味著這個變數是隨時會被其他線程修改的,因此不能將它cache在線程memory中。

synchronized:

當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多隻有一個線程執行該段代碼。

一、當兩個並發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以後才能執行該代碼塊。

二、然而,當一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。

三、尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有 其它 synchronized(this)同步代碼塊的訪問將被阻塞。

四、當一個線程訪問object的一個synchronized(this)同步代碼塊時,它就獲得了這個object的對象鎖。結果,其它線程對該object對象所有同步代碼部分的訪問都被暫時阻塞。

五、以上規則對其它對象鎖同樣適用。

5、有哪些不同的線程生命周期?

當我們在Java程序中新建一個線程時,它的狀態是New。當我們調用線程的start()方法時,狀態被改變為Runnable。線程調度器會為Runnable線程池中的線程分配CPU時間並且講它們的狀態改變為Running。其他的線程狀態還有Waiting,Blocked 和Dead。

6、你對線程優先順序的理解是什麼?

每一個線程都是有優先順序的,一般來說,高優先順序的線程在運行時會具有優先權,但這依賴於線程調度的實現,這個實現是和操作系統相關的(OS dependent)。

我們可以定義線程的優先順序,但是這並不能保證高優先順序的線程會在低優先順序的線程前執行。線程優先順序是一個int變數(從1-10),1代表最低優先順序,10代表最高優先順序。

7、什麼是死鎖(Deadlock)?如何分析和避免死鎖?

死鎖是指兩個以上的線程永遠阻塞的情況,這種情況產生至少需要兩個以上的線程和兩個以上的資源。

分析死鎖,我們需要查看Java應用程序的線程轉儲。我們需要找出那些狀態為BLOCKED的線程和他們等待的資源。每個資源都有一個唯一的id,用這個id我們可以找出哪些線程已經擁有了它的對象鎖。

避免嵌套鎖,只在需要的地方使用鎖和避免無限期等待是避免死鎖的通常辦法。

8、什麼是線程安全?Vector是一個線程安全類嗎?

如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是線程安全的。

一個線程安全的計數器類的同一個實例對象在被多個線程使用的情況下也不會出現計算失誤。很顯然你可以將集合類分成兩組,線程安全和非線程安全的。Vector 是用同步方法來實現線程安全的, 而和它相似的ArrayList不是線程安全的。

9、Java中如何停止一個線程?

Java提供了很豐富的API但沒有為停止線程提供API。JDK 1.0本來有一些像stop(), suspend()和resume()的控制方法但是由於潛在的死鎖威脅因此在後續的JDK版本中他們被棄用了,之後Java API的設計者就沒有提供一個兼容且線程安全的方法來停止一個線程。

當run()或者 call()方法執行完的時候線程會自動結束,如果要手動結束一個線程,你可以用volatile 布爾變數來退出run()方法的循環或者是取消任務來中斷線程。

10、什麼是ThreadLocal?

ThreadLocal用於創建線程的本地變數,我們知道一個對象的所有線程會共享它的全局變數,所以這些變數不是線程安全的,我們可以使用同步技術。但是當我們不想使用同步的時候,我們可以選擇ThreadLocal變數。

每個線程都會擁有他們自己的Thread變數,它們可以使用get()set()方法去獲取他們的默認值或者在線程內部改變他們的值。ThreadLocal實例通常是希望它們同線程狀態關聯起來是private static屬性。

Kubernetes面試題匯總

1、什麼是Kubernetes?

Kubernetes是一個開源容器管理工具,負責容器部署,容器擴縮容以及負載平衡。作為Google的創意之作,它提供了出色的社區,並與所有雲提供商合作。因此,我們可以說Kubernetes不是一個容器化平台,而是一個多容器管理解決方案。

2、Kubernetes與Docker有什麼關系?

眾所周知,Docker提供容器的生命周期管理,Docker鏡像構建運行時容器。但是,由於這些單獨的容器必須通信,因此使用Kubernetes。因此,我們說Docker構建容器,這些容器通過Kubernetes相互通信。因此,可以使用Kubernetes手動關聯和編排在多個主機上運行的容器。

3、什麼是Container Orchestration?

考慮一個應用程序有5-6個微服務的場景。現在,這些微服務被放在單獨的容器中,但如果沒有容器編排就無法進行通信。因此,由於編排意味著所有樂器在音樂中和諧共處,所以類似的容器編排意味著各個容器中的所有服務協同工作以滿足單個伺服器的需求。

4、Kubernetes如何簡化容器化部署?

由於典型應用程序將具有跨多個主機運行的容器集群,因此所有這些容器都需要相互通信。因此,要做到這一點,你需要一些能夠負載平衡,擴展和監控容器的東西。由於Kubernetes與雲無關並且可以在任何公共/私有提供商上運行,因此必須是您簡化容器化部署的選擇。

5、您對Kubernetes的集群了解多少?

Kubernetes背後的基礎是我們可以實施所需的狀態管理,我的意思是我們可以提供特定配置的集群服務,並且集群服務將在基礎架構中運行並運行該配置。

因此,正如您所看到的,部署文件將具有提供給集群服務所需的所有配置。現在,部署文件將被提供給API,然後由集群服務決定如何在環境中安排這些pod,並確保正確運行的pod數量。

因此,位於服務前面的API,工作節點和節點運行的Kubelet進程,共同構成了Kubernetes集群。

6、Kubernetes Architecture的不同組件有哪些?

Kubernetes Architecture主要有兩個組件 - 主節點和工作節點。如下圖所示,master和worker節點中包含許多內置組件。主節點具有kube-controller-manager,kube-apiserver,kube-scheler等。而工作節點具有在每個節點上運行的kubelet和kube-proxy。

7、您能否介紹一下Kubernetes中主節點的工作情況?

Kubernetes master控制容器存在的節點和節點內部。現在,這些單獨的容器包含在容器內部和每個容器內部,您可以根據配置和要求擁有不同數量的容器。

因此,如果必須部署pod,則可以使用用戶界面或命令行界面部署它們。然後,在節點上調度這些pod,並根據資源需求,將pod分配給這些節點。kube-apiserver確保在Kubernetes節點和主組件之間建立通信。

8、kube-apiserver和kube-scheler的作用是什麼?

kube -apiserver遵循橫向擴展架構,是主節點控制面板的前端。這將公開Kubernetes主節點組件的所有API,並負責在Kubernetes節點和Kubernetes主組件之間建立通信。

kube-scheler負責工作節點上工作負載的分配和管理。因此,它根據資源需求選擇最合適的節點來運行未調度的pod,並跟蹤資源利用率。它確保不在已滿的節點上調度工作負載。

9、你對Kubernetes的負載均衡器有什麼了解?

負載均衡器是暴露服務的最常見和標准方式之一。根據工作環境使用兩種類型的負載均衡器,即內部負載均衡器或外部負載均衡器。內部負載均衡器自動平衡負載並使用所需配置分配容器,而外部負載均衡器將流量從外部負載引導至後端容器。

10、Replica Set 和 Replication Controller之間有什麼區別?

Replica Set 和 Replication Controller幾乎完全相同。它們都確保在任何給定時間運行指定數量的pod副本。不同之處在於復制pod使用的選擇器。Replica Set使用基於集合的選擇器,而Replication Controller使用基於許可權的選擇器。

Equity-Based選擇器:這種類型的選擇器允許按標簽鍵和值進行過濾。因此,在外行術語中,基於Equity的選擇器將僅查找與標簽具有完全相同 短語 的pod。

示例:假設您的標簽鍵表示app = nginx,那麼,使用此選擇器,您只能查找標簽應用程序等於nginx的那些pod。

Selector-Based選擇器:此類型的選擇器允許根據一組值過濾鍵。因此,換句話說,基於Selector的選擇器將查找已在集合中提及其標簽的pod。

示例:假設您的標簽鍵在(nginx,NPS,Apache)中顯示應用程序。然後,使用此選擇器,如果您的應用程序等於任何nginx,NPS或Apache,則選擇器將其視為真實結果。

滲透攻擊的測試步驟

1.如果原始值為2,我們使用(1+1)或(3-1),程序作出相同回應,表明易受攻擊

2.如果單引號被過濾掉,我們可以用ASCII命令,使它返回字元的數字化代碼,如51-ASCII(1)

3.在URL編碼中,&和=用於鏈接名稱/值對,建立查詢字元串應當分別使用%26和%3d進行編碼

4.如查詢字元串不允許使用空格,使用+或%20編碼

5.分號被用於分割cookie自讀,使用%3d編碼


2021面試網路工程師的題目相關 文章 :

★ 關於網路工程師的面試題有哪些

★ 網路管理員面試題及答案大全

★ 最新的運維工程師面試題目整理

★ 網路測試工程師面試題及答案

★ 計算機網路面試題及參考答案

★ 網路工程師面試自我介紹範文五篇

★ 面試網路技術工程師的有哪些提問

★ 最新的it運維工程師面試題整理

『貳』 程序員面試的時候考官一般問什麼問題(比較流行的)

給你提供點參考信息,希望能幫助到你:

1、使用相同的工具和時間限制模擬面試訓練

Google和微軟都會讓應聘者在白板上手工解答編程問題,但通常大部分的應聘者都是習慣於在電腦上利用編程工具系統編寫程序。因此面試的時候,某些應聘者離開了熟悉的電腦游標,站在白板前感覺手足無措不知該如何起行。又或者他們不習慣在編程之時旁邊有人觀看,這會讓他們感到緊張而無法正常思考。

在現實生活中,如果你想要橫渡英吉利海峽,自然不能總是在室內游泳池練習。你必須投身於大海在波濤之中訓練,在准備面試的時候也是如此。

在面試開始之前你最好向招聘單位詢問面試形式和面試問題。如果招聘單位讓你在某個房間考試且僅提供沒有匯編程序的編輯器,那麼就應該在家中按照這種情景進行練習。如果招聘公司單位讓你在白板上回答問題並會安排考官在旁監督,那麼你就要找一位軟體工程師來扮演考官配合你練習。即使找來的考官經驗不如你也沒有關系,他們依然能幫助你消除在他人面前出錯所帶來的緊張感,這樣可以讓你適應有人在旁邊盯著看的面試氛圍。

如果你恰巧認識我並希望由我來幫你聯系,那我的條件就是必須請我吃飯:如果你已經工作了就吃日本壽司大餐;如果你還是學生,那麼吃比薩餅也可以。

2、在面試過程中不要對細小錯誤耿耿於懷

我曾不止一次的在面試過程中碰到這種情況:當應聘者知道編程問題後,他馬上就想到了最佳的方案、確定了邊界條件,然後開始編寫程序。但在編寫過程中,應聘者犯了諸如首先檢查是不是操作順序錯誤或忘記設定某變數等無關大局的小錯誤,當我指出其錯誤之後,應聘者立刻變得十分緊張,這種焦慮情緒影響了他在後面環節的正常發揮。

其實這種恐懼心理完全不必要。一名優秀的程序員在編程過程中出現錯誤也是很正常的,就像是小提琴手在演奏高難度的巴赫交響樂時也會偶爾失誤。音樂會的聽眾可能會覺察到這些錯誤,但是聽眾絕對不會因為這種細小失誤就把出色的小提琴手看作是門外漢。

即便應聘者徹底搞砸了某個編程問題,面試考官也可能會提出不同的問題並會容忍應聘者在某個問題上的失誤。再退一步說,就算某次面試徹底失敗,你也有機會在其它面試上補救。

我的一位同事(一個項目的技術負責人)最近面試了一個人,在開始面試時他覺得面試者的交流方式存在問題,因此開始表現的相當不友好。但經過了整個面試過程後,面試者證明了自身的能力,而我的那位同事也成了那位面試者最堅定的支持者。在過去的一年中,我從未見過這位同事如此強烈的支持哪位面試者。

所以,因此就算面試進展不順,也務必堅持到底不要放棄。

『叄』 誰有程序員的面試題,例如東軟公司,或其他公司的程序員面試題

程序員面試一直是社區樂於討論的熱門話題。
這篇文章是站在面試官角度對於程序員面試問題的一個階段性反思和經驗總結。
【目標】
相信和不少朋友一樣,有了幾年工作經驗成為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) 在各種因素中,性格 > 經驗 > 基礎 > 演算法。性格是最重要的,如果性格不好,所有技術能力都會大打折扣,而且技術缺陷容易彌補,性格缺陷很難改變;經驗體現了一個人的綜合能力,你可以從面試者過去的經歷中判斷他能從事哪種工作,不能從事哪種工作;基礎和演算法則主要起到輔助參考的作用,基礎好的程序員一般適應性比較強,學新技術更快,但是切忌單純從基礎來判斷一個人的能力。
更多程序員面試問題請登陸楚湘人才網

閱讀全文

與後端程序員面試經典題相關的資料

熱點內容
java實現字典 瀏覽:329
抓包分析伺服器地址 瀏覽:472
程序員節日視頻模板高級 瀏覽:205
avakinlife為什麼安卓手機不能玩 瀏覽:780
安卓軟體怎麼重新使用 瀏覽:477
mysql新建用戶命令 瀏覽:544
雲伺服器顯示拒絕連接 瀏覽:71
雲伺服器矩陣什麼意思 瀏覽:79
和程序員有關的網名 瀏覽:230
游戲雲咖如何租伺服器 瀏覽:204
程序員rpg游戲 瀏覽:197
編程範式下載 瀏覽:249
phpsocket框架對比 瀏覽:440
java字元串使用 瀏覽:581
程序員怎麼考主管 瀏覽:714
變形坦克2為什麼連不上伺服器 瀏覽:584
camera演算法 瀏覽:868
怎麼壓縮成幾個文件 瀏覽:836
阿里雲伺服器express項目 瀏覽:798
高大模板支撐下部加密 瀏覽:63