前言
有一個朋友剛進入這個行業半年,想到以後肯定會跳槽,所以來問我現在去面試的話,對於一年開發經驗的程式設計師面試官都會問些什麼問題,他之後也好準備準備。
因為這個問題問得太泛,不同的公司對1年左右經驗的開發人員要求不一樣,所以我這裡就以我現在公司的標準或者說我個人的標準來回答。
希望對有同樣疑問的朋友能有點幫助。
一年Android開發經驗需要具備什麼簡單來說,最重要的是有成長潛力。
一般三年以上經驗的員工,我更看重他之前的工作經驗能否能讓他快速獨立負責某一塊工作,是否能將他之前的經驗轉化團隊的戰鬥力,不同公司業務與經歷差別很多,這樣的人可能帶來不一樣的技術經驗與視角,這也是為什麼常說外來的和尚會念經,其實是一個經驗互補、避免既有團隊老化陳腐的一個方法。
三年以內經驗的員工,更多的是看他的成長潛力,而成長潛力最主要的是基本功。只有基本功紮實的員工,才能快速學習掌握新技能,在之後的業務變化中,就能快速適應,滿足團隊要求。
Android發展起來只有短短几年,我畢業那會都是Windows開發的天下,包括手機也都是WinCE, Windows Mobile系列,哪能想到如今這般景象。現在做Android/iOS是挺好,沒準哪天就都是Web開發的天下了,我始終認為“一次開發、到處執行” 既然是所有IT人努力與嚮往的場景,那麼這一天遲早是要到來的。正如現在的開發語言越來越簡潔越來越注重開發效率一樣,趨勢是不可阻擋的。
那麼我個人的建議是:仔細想想自己學校裡學的東西是否都學紮實了?(如果你是計算機相關專業的話)如果沒有,優先要做的就是再把那些東西好好溫習下。
面試流程及面試問題一般寫完簡歷就可以投遞了,可以找朋友內推或拉鉤網、Boss直聘直接投遞,這樣比較快一些。
一般的面試安排都是3輪技術面和1輪HR面,部分公司可能會有增減。
技術面試一般會先做個自我介紹,然後問問你做的專案,考察一下基礎,之後再寫個演算法,最後可能問問你有什麼想問的麼。
自我介紹自我介紹一般主要說一下你在哪就職,目前的工作情況,工作經驗有多久,都做過哪些東西,尤其要突出一下你的亮點。這個大家提前準備一下就好。
專案經歷自我介紹完之後,面試官就會看你的工作經歷,挑一些問你,或者直接讓你介紹做過的最好的東西。
大家寫到工作經歷的東西,負責的部分一定要特別熟,經得起面試官的拷問,如果只是參與的,也要儘量弄熟,否則就不要往上寫。
每個人的經歷不同,做過的東西都不一樣,所以我就不給大家整理了。
基礎問完專案,就該考察考察候選人的基礎了,一般包括Android基礎、Java基礎、Android常用的開源框架、設計模式和網路基礎等等。下面我來列舉一下常見的考察點:
Java相關Java基礎
HashMap1.7和1.8的實現原理final關鍵字,為什麼匿名內部類使用區域性引用要用finalJava多執行緒
執行緒池的使用和原理鎖機制:synchronized、Lockvolatile關鍵字ThreadLocal原理JVM
Java記憶體結構Java垃圾回收機制Java類載入過程Android相關Android基礎
Handler通訊機制跨程序通訊方式Activity啟動模式記憶體最佳化、佈局最佳化View的繪製流程Android事件分發機制動畫的分類及其原理MVC、MVP和MVVM模式SparseArray原理Android開源框架
Android網路庫:Volley、OkHttp和Retrofit的使用、原理和對比Android圖片庫:Glide和Picasso的使用、原理和對比EventBus的使用和原理RxJava的使用和原理Router的使用和原理網路基礎HTTP相關:包括HTTP2.0、HTTPS等TCP相關:三次握手、四次揮手等設計模式單例模式代理模式:靜態代理和動態代理觀察者模式這些基礎知識一方面大家可以直接閱讀原始碼,一方面可以去網上搜索相關文章去學習,我這裡也做了一些關於原始碼的整理。(文末可以檢視領取)
畢竟只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。
真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。
另外,騰訊面試真的很喜歡問原理,而且問得比較細,所以還是需要加強對原理的研究。
演算法問完基礎就可以寫演算法了,透過我的面試經歷來看,演算法的難度不是很大,基本刷過《劍指Offer》就足以應對面試了。
大家刷《劍指Offer》的時候,每道題一定要自己先做一遍,這些題基本牛客網上都有,大家可以直接在那上面敲程式碼。做完之後看看書上的解題思路,如果發現自己的方法不是很好,可以按照書上的思路自己實現一遍,再和書上的程式碼對比一下,這樣印象才深刻。
記住,我們刷《劍指Offer》並不是去記每道題,而是記每種解題的思路,自己有個總結,這樣以後在遇到沒見過的題目時,才會應對自如。
我在準備的過程中已經把《劍指Offer》所有的題目都用Java實現了一遍,可以參考劍指Offer Java版官方題解彙總。
其它除了上面以外,面試官也可能會問問跳槽原因,我一般還是以個人技術成長的角度回答的,具體我就不詳述了。
最後,面試官還可能會問問你有什麼要問的,一般我們要問問技術、專案相關的東西,比如你們使用的技術棧是怎樣的、團隊的規模怎麼樣、我來了之後會做些什麼工作等等。
關於HR面如果你能進到HR面,那麼恭喜你拿offer就很有希望了。
一般HR會問你生活的方方面面,大家如實回答就好。當HR問我們對薪資的訴求時,我一般還是以現公司總包的基礎上漲30%要求薪資,這樣起碼也會給你到20%-30%。當然有些公司比較例外,比如快手可能給的會高一些。
最後HR會再問問你有什麼要問的,這時候可以問問公司的薪資待遇等情況,比如有多少年終獎、評級制度怎樣的、多久晉升和普調一次、普調的幅度多少、有哪些福利待遇、有多少年假等等。
另外,一定要問問後續還有什麼流程,是否要做背調、什麼時候做背調。之前在脈脈上看到說有的公司早早做了背調,導致候選人還沒提離職,同事就全知道了。也是好可怕。所以大家一定要求HR在你提完離職之後再做背調。
這裡給大家提供一個方向,進行體系化的學習:
1、看影片進行系統學習
前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因為Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以透過影片來學習,效果更好,也更全面。關於影片學習,個人可以推薦去B站進行學習,B站上有很多學習影片,唯一的缺點就是免費的容易過時。
另外,我自己也珍藏了好幾套影片,有需要的我也可以分享給你。
2、進行系統梳理知識,提升儲備
客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。
系統學習方向:
架構師築基必備技能:深入Java泛型+註解深入淺出+併發程式設計+資料傳輸與序列化+Java虛擬機器原理+反射與類載入+動態代理+高效IOAndroid高階UI與FrameWork原始碼:高階UI晉升+Framework核心解析+Android元件核心+資料持久化360°全方面效能調優:設計思想與程式碼質量最佳化+程式效能最佳化+開發效率最佳化解讀開源框架設計思想:熱修復設計+外掛化框架解讀+元件化框架設計+圖片載入框架+網路訪問框架設計+RXJava響應式程式設計框架設計+IOC架構設計+Android架構元件JetpackNDK模組開發:NDK基礎知識體系+底層圖片處理+音影片開發微信小程式:小程式介紹+UI開發+API操作+微信對接Hybrid 開發與Flutter:Html5專案實戰+Flutter進階知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。
3、讀原始碼,看實戰筆記,學習大神思路
“程式語言是程式設計師的表達的方式,而架構是程式設計師對世界的認知”。所以,程式設計師要想快速認知並學習架構,讀原始碼是必不可少的。閱讀原始碼,是解決問題 + 理解事物,更重要的:看到原始碼背後的想法;程式設計師說:讀萬行原始碼,行萬種實踐。
4、面試前夕,刷題衝刺
面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,演算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。
關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:
總結改變人生,沒有什麼捷徑可言,這條路需要自己親自去走一走,只有深入思考,不斷反思總結,保持學習的熱情,一步一步構建自己完整的知識體系,才是最終的制勝之道,也是程式設計師應該承擔的使命。