天天看點

Android多線程實作方式及并發與同步,Android校招面試指南前言本文思維導圖

前言

成為一名優秀的Android開發,需要一份完備的知識體系,在這裡,讓我們一起成長為自己所想的那樣。

本文思維導圖

Android多線程實作方式及并發與同步,Android校招面試指南前言本文思維導圖

看到還有很多程式員連面試流程都沒有徹底弄清楚,今天,我們以阿裡為例,來聊聊網際網路大廠的面試流程和過程!

本篇主要還是聊聊社招的面試過程!阿裡以及其他的網際網路大廠的技術類社招面試,通常情況是 4 個輪次。第一、第二面是技術面,第三面是主管面試,第四面是 HR 面試。對于目标級别在 P6+ 的候選人,我們會增加至少一輪的跨團隊 Review 面試,因為涉及招聘委員會(Hire Committee)的定級流程,是以要複雜一些。接下來的内容,主要針對通常情況下 P5~P6 的面試來介紹,大神請直接忽略。

01 技術面

1. 個人介紹和基礎知識考查

這部分算是必備技能。我個人倒是傾向于弱化基礎知識的考查,畢竟每個候選人的背景不同,應該更看重聰明程度、學習能力、溝通了解力等,基礎知識隻能證明他不是一個優秀的工程師,卻無法證明他是一個優秀的工程師。

2. 項目經曆考查

從這個階段開始就格外重要了,因為面試官之前并不一定完整浏覽候選人的履歷,是以聆聽候選人對項目的介紹是了解候選人的最主要途徑。在這個過程中,面試官試圖刨根問底,這跟各公司内部的技術評審很相似。幾個關鍵點,希望你格外注意:

  1. 對項目背景的了解程度,講不清楚需求從哪裡來是非常可怕的,這說明你更多隻是一個執行者,不是負責人,且缺少對于項目整體的思考。
  2. 對需求的合理性進行分析,一味聽從 PM,不能把控需求的研發是很可怕的。
  3. 對技術方案設計的調研和選型,我們更希望看到你的方案是經過充分思考、調研、對比、論證的,通過這個過程,可以看到候選人的系統設計功底,是否對業界技術有足夠了解,對開源技術的掌握情況,是否願意應用開源技術。哪怕你的項目隻是一個簡單的業務系統,那麼仍然應該有很多亮點可尋,否則這段項目經曆可能會減分。
  4. 取得的成效。很多工程師隻看重過程,不看重結果,這是不可取的。

3. 程式設計技術考查

在我的團隊中,我要求每一輪技術面,都至少要有 1 道程式設計題目。一方面,我們非常看重侯選人的代碼風格、優雅程度,還有對邊界條件的考慮,這些都是好的程式員必須具備的素質。對于代碼混亂、邊界考慮不清的人,我們會認為他沒有足夠的程式設計素養和追求,在邏輯思維層面,也有所欠缺。**這樣的候選人進入團隊,短期可能造成 Bug 多、項目品質差等影響,長遠來看,不利于合作開發、項目傳承等。**另一方面,**我們非常看重資料結構、算法等的高效實作。能夠快速設計出高效的程式,這展現了候選人日常的深厚積累,還有對程式設計的極緻追求。**前不久就有一個典型案例,我們的運維同學發現一個後端子產品上線後處理性能隻有幾十 QPS,很不了解為什麼性能這麼差。直到我們重新 review 代碼後,才發現是個“經典”問題,即 for 循環裡調用 sort(雖然是隔了幾次函數調用),簡單優化後,性能就可以提升 1~2 個數量級。優秀的工程師,一定會盡可能規避這類問題,幾行代碼的優化,就能提升使用者體驗、降低伺服器成本、友善代碼維護、減少兄弟們的工作量。

4. 邏輯題目或數學題目

這類題目的核心不在于它有多複雜,需要多少經驗背景,而在于,隻要邏輯清晰,認真思考,大多能得出結果,雖然不一定是最優解。我舉幾個例子:

  1. 一個六位數字,逆時針旋轉 180 度後與之前完全相等的機率是多少?
  2. 邊數是 3*4 的網格,從左下角的 A 點走到右上角的 B 點,一共有多少種不同的走法?

這類題目其實很簡單,可以用程式設計的思路解決,比如遞歸(當然還有很多其他方式),也可以用機率論、組合數學的方式解決,甚至一個一個“數”也是能得到答案的。在思考問題的過程中,可以看出候選人的思維習慣,也可以看出候選人的邏輯能力。另外,這類題目其實有很多變化,如果候選人很輕松完成了回答,面試官就可以适當加大難度,比如 3*4 的網格有一個點不能經過,那麼會是什麼結果?這類題目看似簡單,實則分辨率很高,可以充分挖掘候選人的潛力。除去上面的介紹外,候選人還應該對行業情況有所了解,包括競品、開源項目等,這可以展現一個人的眼界和行業洞察能力,也可以看出一個人的學習态度,他是否在持續更新自己的知識儲備。

02  主管面

相對于技術面而言,主管面試不會過多考查基礎知識、資料結構及算法,但因為技術主管大多具備很強的技術背景,是以仍然會針對技術面過程中的一些遺漏點(可能是面試官沒有考查到,也可能是候選人的回答不夠完善),着重補充考查。除此之外,主管面的核心就是判斷候選人除了技術能力外的其他次元,是否與團隊相比對。第一類次元,軟素質能力。軟素質的次元很豐富,每一次面試過程不會面面俱到地考查,但一些重要的次元一定會被照顧到。

1. 邏輯思維。

與技術面的邏輯題目類似,團隊可以接受不足夠聰明的人,但無法接受邏輯不清晰的人。在這個環節,可以提出一些進階的題目,比如給候選人一個很複雜的問題,希望候選人可以嘗試分析、分解,讓看起來一團亂麻的問題變得清晰可實作。或者,讓候選人闡述一個經曆過最有挑戰的問題,是如何定義問題并分析解決的。當然這類問題,一般初入職場的同學都很難回答完美;不過對于工作 2 年 + 的同學,我覺得問題的分析、分解、設定目标、規劃、執行都是必備素質。這個能力很難在工作中迅速培養,它更多是通過候選人過去一二十年的學習和工作經曆,一點一滴積累的,是以對于社招而言,希望候選人已經具備很好的邏輯思維能力。

2. 溝通能力。

不能有效且高效地溝通,對于團隊項目是場災難。在日常工作中,經常會看到幾個同學針對一個問題争論得不可開膠,但其實他們往往沒有了解對方所講的主旨是什麼,甚至對于一些名詞和概念的了解都不一緻,就更不要說同理心了,這種無效溝通是導緻會議冗長的最主要因素。這類的面試考查,一般會依附于項目介紹或者設計題目等。

如果候選人已經具備不錯的溝通能力,我們一般還會考查進階能力:說服和影響。這是成為技術 / 項目負責人的必備能力。面試官可能會和候選人進行一個簡短的虛拟溝通或辯論環節,希望候選人可以說服面試官接受某個觀點或技術方案。當然,在這個過程中,面試官扮演的反派可能會用一些偏激的詞彙和行為,這一方面是看候選人的溝通說服和影響他人的能力,另一方面也是壓力測試,看看候選人在受到刁難時的反應,是否足夠職業。創新能力。

在過去的項目中,請講述一次發現傳統方法的不足,嘗試新的解決問題的方法,并獲得成功的經曆。這類題目非常開放,但遺憾的是,在我面試過的候選人中,近半數都是在思索一會兒後回答“沒有什麼”。

當然,一方面可能候選人很謙虛,另一方面,則很可能是候選人确實沒有嘗試做過什麼創新。

網際網路行業,創新是一切之源,如果真的“沒有什麼”,如何給 Offer 呢?

第二類次元,文化價值觀。

工程師文化是務實、自驅、Follow Through(跟進到底,有始有終)。一個浮誇,不思進取,凡事不願承擔責任,不能将項目跟進到底的候選人,很難成為我們的夥伴。這類次元,其實沒有太多經驗可談,每個公司都有它的文化基因,而候選人是否與之比對,是基因和環境使然。我隻說下從我個人角度,最為看重的内容,否則我會一票否決。樂觀積極。不得不承認,每個人都有積極的一面和消極的一面,職業化的思維在于将積極的一面展現出來,盡量弱化消除消極一面的影響。

在日常工作中,每個人都不希望遇到一群愁眉苦臉、滿腹牢騷的同僚。善于合作。一位同學加入到我們的團隊,他不僅需要具備優秀的個人能力,同時也需要能和其他人協同合作,起到 1+1>2 的效果。我們會考查候選人在過去的經曆中,對待合作的态度,有沒有接觸過比較複雜、跨越多個角色或團隊的合作,遇到過的協作困難是什麼,遇到這類困難是如何解決的。有些候選人經常會無意識地表達出,在項目研發過程中,多人寫代碼,還要同步需求、設計、協商接口、聯合調試,而且有 Bug 修複推動也很麻煩,如果我一個人開發早就解決了。這種思維雖然無可厚非,但希望每個人可以看得更遠,大型項目是一個人完成不了的,在多人合作的背景下,如何提升合作的效率和品質才是重點,而不是過多地看到負面。追求極緻。這一條很難。在我發過的這麼多 Offer 中,具備這個素質的候選人也是鳳毛麟角,但隻要具備這個素質,我幾乎一定會給 Offer。當然,追求極緻不等于鑽牛角尖。

面試複習筆記

這份資料我從春招開始,就會将各部落格、論壇。網站上等優質的Android開發中進階面試題收集起來,然後全網尋找最優的解答方案。每一道面試題都是百分百的大廠面經真題+最優解答。包知識脈絡 + 諸多細節。

節省大家在網上搜尋資料的時間來學習,也可以分享給身邊好友一起學習。

給文章留個小贊,就可以免費領取啦~

戳我領取:Android對線暴打面試指南、超硬核Android面試知識筆記、3000頁Android開發者架構師核心知識筆記

《960頁Android開發筆記》

Android多線程實作方式及并發與同步,Android校招面試指南前言本文思維導圖

《1307頁Android開發面試寶典》

包含了騰訊、百度、小米、阿裡、樂視、美團、58、獵豹、360、新浪、搜狐等一線網際網路公司面試被問到的題目。熟悉本文中列出的知識點會大大增加通過前兩輪技術面試的幾率。

Android多線程實作方式及并發與同步,Android校招面試指南前言本文思維導圖

《507頁Android開發相關源碼解析》

隻要是程式員,不管是Java還是Android,如果不去閱讀源碼,隻看API文檔,那就隻是停留于皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛煉能力的便是直接去閱讀源碼,不僅限于閱讀各大系統源碼,還包括各種優秀的開源庫。

Android多線程實作方式及并發與同步,Android校招面試指南前言本文思維導圖

真正最能鍛煉能力的便是直接去閱讀源碼,不僅限于閱讀各大系統源碼,還包括各種優秀的開源庫。

[外鍊圖檔轉存中…(img-wXfzwe38-1621856784367)]