前言
面試主要分為三個部分,第一部分是基礎知識問答,第二部分是coding,第三部分是工程經驗,從面試的內容我們也可以知道如果你現在敲代碼的水平不是特別牛逼,但是通過充分面試準備還是很有可能彎道超車,率先拿下offer,
后來我也就加入了找作業大軍,在各種平臺學習如何制作簡歷,學習各種面試技巧,自信滿滿的往各種一線大廠或者大型二線大廠海投,郵箱卻是安靜如雞,我會放棄嗎?必不可能,自學編程都堅持了,這些怎么可能打擊德了我,想了想,我還是對這個行業不夠了解,靠自己搜集資訊還是不夠靠譜,不知道那些HR們真正想從我的簡歷里得到什么資訊,
一 面 1h 多
1.演算法題 兩個堆疊實作佇列
2.演算法題 輸入一個陣列,想一種方法讓這個陣列盡可能的亂序,保證功能能實作的情況下時間復雜度和空間復雜度盡可能的小,可使用亂數函式,(面試官最后說了 O(n)的時間復雜度能實作)
3.寫一個單例(自己寫一種就行)
4.ActivityA -> Activity B -> Activity A
Activity A 啟動模式為 singleTask
Activity B 啟動模式為常規模式
問A 啟動 B,B 又啟動 A 的生命周期呼叫順序?
5.你剛才提到 onsaveinstancestate() ,說一下呼叫時機,它用來干什么的,
6.onsaveinstancestate() 保存的那個引數叫什么?Bundle 里面都放一些什么東西?怎么實作序列化?Parcelable 和 Serializable有什么區別?
Bundle ,
7.陣列和鏈表的區別
8.HashMap 的結構以及原理
9.我看你簡歷上寫了 retrofit,你能說一下它是做什么的,如果知道基本框架也說一下
10.了解 View 的繪制機制嗎,能說一下嗎
11.我看你專案里用的 Fragment 能說一下 Fragment A 啟動了 Fragment B,Fragment B 中按下回傳鍵只退出 Fragment B 怎么實作,
12.你還有什么要問的嗎?
二 面 1h 多
(具體多了多少分鐘也忘了,加起來 2.5 小時的樣子)
1.演算法題 一個字串,求最長沒有重復字符的字串長度
2.string stringbuffer 和 stringbuilder 區別
3.final finally finalize區別
4.陣列和鏈表的區別
5.HashMap 了解過嗎
6.Tcp 三次握手四次揮手
7.get 與 post 的區別
8.synchronized 的作用
9.你知道哪些設計模式
10.Android 行程通信的方法
11.那你能說一下 Intent 是怎么行程通信的
12.記憶體泄漏有哪幾種情況
13.有什么要問
三面(電話面試,40分鐘)
- 自我介紹
- 聊專案,mvc、mvp和mvvm架構各自的特點;在專案中最具有挑戰的是什么?專案識訓到了什么?
- 演算法題:給兩個字符陣列,舉例:{h,e,l,l,o, ,w,o,r,l,d}和{e,o},如果第一個陣列中存在第二個陣列中的元素則去掉,后面的元素往前順移,結果為:{h,l,l, ,w, r,l,d},要求時間復雜度為O(n),空間復雜度為O(1),
- 你認為什么樣的人可以稱之為技術大佬?如果只有30分鐘,你會依據什么來判斷一個人是不是大佬?你認為自己身邊最厲害的技術大佬是誰?他為什么會成為大佬?如果讓你在半年之內達到他的水平,你的學習規劃是什么?你會不會向他請教學習方法?
- 反問:
(1)大廠對新技術的態度是怎樣的?
(2)鴻蒙會不會取代Android?Android的前景怎樣?面試官先問了我的觀點,后來說了自己的觀點:不會,
為什么不會?這個要自己查找最近幾年出現的智能手機系統,它們為什么沒有Android和iOS成功,從中找答案,
HR面(視頻面試,20分鐘)
- 自我介紹,開了共享螢屏現場給HR展示了之前的一個專案
- 你的專案UI界面是自己設計的嗎?
- 你對未來的規劃是什么?
- 有沒有投別的大廠?
- 大廠有很多,為什么要投阿里?為什么要投釘釘部門?
- 你對互聯網行業加班現狀怎么看?你對加班的態度怎樣?
- 你不是計算機科班出身,有沒有信心做好這個作業?你對Android開發感興趣嗎?

高薪需要具備幾個條件
- 你的作業無法被替代
- 你能給公司直接創造價值
- 技能的稀缺性
高薪需要具備的技能
1.優秀的debug能力,debug能力往往比編碼本身更重要
2.寫代碼前先畫好類結構圖和代碼時序圖,這樣會讓編碼能力迅速進步
3.定期重構代碼真的是好習慣
4.寫檔案的能力非常重要,看看Spring,hibernate,Struts等最流行的開源軟體的檔案就知道,他們tutorial,他們的getstarted,他們的reference檔案寫的多么的易懂,
5.模仿造輪子是學習編碼很好的方法,但熟練后就別瘋狂造了
6.形成自己的變數命名規則,否則取名字就耗費不少時間
7.演算法能力很重要,要苦練演算法基本功
8.做好封裝,始終牢記高內聚、低耦合
9.把感覺不靠譜的需求放到最后做,可能到時候需求就變了
10.認真對待代碼中的warning,它們雖然不致命,但卻是精益求精的好機會
- 對標阿里P7年薪60w+的學習思維腦圖(精簡版)

11.單元測驗很重要,它至少有這幾個好處:方便后期重構、優化代碼設計、檔案記錄(單元測驗本身即是檔案)、具備回歸性(隨時隨地測驗)
12.學會閱讀開源代碼,最好能運行起來玩一玩,這會讓你的編碼能力突飛猛進
13.學會看性能指標、學會性能調優,它是區隔程式員的最好方式之一
14.千萬記得要做資料備份,不然運氣不好,死的賊慘
15.不要懷疑基礎常識,比如編譯不過懷疑是編譯器的問題
16.學會模擬用戶環境,它在關鍵時刻會幫你大忙
17.不要盲目使用新技術,要先理解透,且了解其他人的使用情況,吃螃蟹這件事不總是好事,也可能會被螃蟹腿卡脖子
18.不要低估了一個好的版本控制系統的威力,記住一點就夠了:git是最好的,簡單可依賴還免費
19.常學習,IT行業日新月異,不要做過時的程式員
20.用好Google,能力大增

21.編碼的時候只思考同一個思維層次的邏輯,在這層完成之后再思考下一層,層層拆解方能完美解決問題,一旦越層可能把自己都搞暈了
22.要懂演算法,要懂資料結構,編碼時使用合適的資料結構和演算法(如果需要)
23.交付代碼之前反復自測
24.如果經常delay,可能是任務還沒有拆得足夠細
25.遇到代碼問題解決后做個小筆記,好記性不如爛筆頭
26.千萬別直接拷貝網上的代碼,要先理解然后自己寫出來
27.盡量主動推進專案進度,這是你迅速脫穎而出的好方法
28.主動改Bug,不管是不是你的,當然,不是你的改完要想辦法讓老板知道
29.Log要盡可能規范,比如要寫時間和分類,要能重定向輸出
30.多看官方檔案,它們真代表權威和完美細節,看完很多問題自然就不存在了
31.多學英語,無論是Google還是stackoverflow,又或者各種官方檔案,流利的英文閱讀,和習慣性英文搜索,能幫你超越90%的程式員32.編碼1小時,必須站起來走幾步,動動脖子,不然過不了多久你就需要一本書:《頸椎病康復指南》
對于要想在計算機行業卷的朋友來說,夯實計算機體系基礎非常重要,包括:演算法、資料結構、計算機網路、計算機組成原理、作業系統、資料庫等等, 尤其是演算法,重中之重,在這里也送大家一本幫助不少人拿到BAT 等一線大廠 offer 的演算法筆記,是一位阿里大神寫的,對于演算法薄榷訓者需要提高的同學都十分受用,演算法一定是計算機學習的重中之重:

-
自行下載直達領取鏈接:【點擊我,即可獲得!】
-
以上進階BATJ大廠學習資料可以免費分享給大家,需要完整版的朋友,【點這里可以看到全部內容】,
Android面試題(部分展示)

資料結構與演算法面試題(部分展示)




尾聲
這幾年來,IT這個行業涌入太多的急功近利的求職者,培一批一批又一批,
上班這幾年,伴隨著對程式員的了解越來越深,我對以下幾點有了深刻的感悟:
第一:每個行業都有各自的辛苦,只是你不知道,總覺得別人的就是最好的,
第二:我們需要控制欲望,做正確的事情,就不累
第三:好的程式員并不累,他們樂此不疲,因為他們能從中獲取成就感,
第四:如果你覺得很累,那就要回到原點問問自己為什么要做程式員:)
第五:一個人每天的創造力是有時限的,在這個時限外,他不再是一個優秀的創造者,而是一個笨蛋,程式員也需要不斷提升自己的技術水平,我覺得既然選擇了這行,就不要怕辛苦
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275750.html
標籤:其他
