面試中遇到的一些問題
Q1:ListView和RecyclerView的使用,就問我它們有什麼區別?
Q2:既然RecyclerView在很多方面能取代ListView,Google為什麼沒把ListView劃上一條過時的橫線?
Q3:你用過MVP,那你知道Dagger2吧,介紹下吧?
Q4:HashMap的內部實現原理?
Q5:Activity生命週期,有哪些啟動模式,以及應用場景?
Q6:你用過AsyncTask,那你跟我說說AsyncTask的內部實現原理?
Q7:AsyncTask內部維護了一個執行緒池,是序列還是並行,怎麼維護的?
Q8:那你說說執行緒池的四種初始化吧?
Q9:你用過MD,你知道怎麼定義一個Behavior嗎?
Q10:RecyclerView的拖拽怎麼實現的?
Q11:寫一個SingTop,有哪三個條件?
Q12:一個按升序排列好的陣列int[] arry = {-5,-1,0,5,9,11,13,15,22,35,46},輸入一個x,int x = 31,在資料中找出和為x的兩個數,例如 9 + 22 = 31,要求演算法的時間複雜度為O(n);
Q13:如何向一個資料庫具有int型別A,B,C,D四列的表中隨機插入10000條資料?如何按升序取出A列中前10個數?
Q14:service兩種啟動方式有什麼區別?
Q15:說說三級快取、Handler機制 ?
如果您有多餘的時間,可以聆聽下我的故事
從畢業到現在面試也就那麼幾家公司,單前幾次都比較順利,在面到第三家時都給到了我offer!前面兩次找工作,沒考慮到以後需要什麼,自己的對未來的規劃是什麼,只要有份工作,工資符合自己的要求就行!所以在智聯招聘上選好工資範圍,就一頓海投,做等面試電話!
做兩快三年的Android開發,工作的任務也就是一些介面的編寫,RecyclerView的簡單使用,網路框架也是別人封裝好的直接用,再就是整合些第三方的分享、支付什麼的!技術上的提升可以說根本沒有,和工作一年左右的人,比起來就多幾個專案優勢!所以這次出來找工作還期望15K,說起來心裡很慌!有哪些原因呢?
1、小公司要求不高,自己也抱著只要能做出功能的態度
2、對行業趨勢把握不準,沒有未來規劃(所謂混吃等死)
3、對自己的工作不感興趣,上班有空閒時間也不會去深入學習
再來說說這次找工作面試的一些經歷和感想!這次面試大大小小面試了十多家!依我自己在簡歷上寫的幾個商城類APP的工作經驗,在智聯和拉鉤上也只有小公司能叫我去面試!(所以說技術深度很重要)
前面兩次的由於面試沒怎麼準備,直接over肯定是沒問題的!第一家一個小姐姐把我問得n臉懵逼(一個屌絲程式猴和妹子聊天就緊張,心跳加速,口乾舌燥,說話結巴)!她首先讓我自我介紹一下,可腦袋一下像短路了一樣!就說:“你知道的程式設計師表達能力差,嗯。。。嗯。。。你看簡歷吧!”她直接一臉無語!
接著她就看到我簡歷有 (Q1)ListView和RecyclerView的使用,就問我它們有什麼區別? 我也就只能簡單的答答RecyclerView怎麼使用ListView怎麼使用!然後她又問我 (Q2)既然RecyclerView在很多方面能取代ListView,Google為什麼沒把ListView劃上一條過時的橫線?我當然是不知道怎麼回答,然後就請教她,然後她就告訴我ListView採用的是RecyclerBin的回收機制在一些輕量級的List顯示時效率更高!頓時我就服氣了!
後來又問我(Q3)你用過MVP,那你知道Dagger2吧,介紹下吧?我又是一臉懵逼!這次面試就這樣被個妹子給幹趴了!從這回去我就開始回去看ListView和RecyclerView的區別、快取機制、Android MVP+Retrofit+dagger2+RxAndroid框架等等!
第二天又去一家小公司,這次是我用***“不知道”回答的最多的一次!(但我從容面對這樣的結果,因為自己真的很菜)面試一上來也是讓我做自我介紹,由於這次做了準備,回答起來沒那麼難!後來他開始問我技術問題(Q4)HashMap的內部實現原理?我想了下只能說“不知道”!接下來就問我(Q5)Activity生命週期,有哪些啟動模式,以及應用場景?這個還是難不倒我的!問到(Q6)你用過AsyncTask,那你跟我說說AsyncTask的內部實現原理?因為我昨晚看了下,就開始跟他說首先我說說它的出現是為了解決在子執行緒中做了耗時操作後需要回到UI執行緒去更新這樣一種情景,然後就開始準備說它的四個方法(doInBackground(Params...) 、publishProgress(Progress...)、onProgressUpdate(Progress...)、onPostExecute(Result)),他立刻就打斷我了,說我問的是內部原理,(Q7)內部維護了一個執行緒池,是序列還是並行,怎麼維護的?這一問,我又是一臉懵逼,只能說“不知道”!他也很無奈,又問(Q8)那你說說執行緒池的四種初始化吧?我的第一反應是看都沒看過,一句“不知道”又讓他無語了!此時的我死豬已經不怕開水燙了!(Q9)你用過MD,你知道怎麼定義一個Behavior嗎?“不知道”!(Q10)RecyclerView的拖拽怎麼實現的?“不知道”*!最後一曲涼涼送給自己!
接下來的幾家公司都是創業型的小公司,面試的人都是一些不懂Android開發的或者是會一點點!首先上來就是自我介紹,這我都說了好多遍了,我15年畢業於哪裡哪裡,從畢業一直到現在從事的是Android開發的工作,做過什麼什麼型別的專案!大學學的是軟體工程,學過Android、計算機網路、嵌入式、資料庫、C#等等!(一頓操作猛如虎,哈哈。。。)但是這些創業型的小公司都要求你有能獨立完成APP的能力,然後就跟你說什麼公司背景有多牛呀,有期權股份呀,我們團隊怎麼優秀,這個平臺能提升你很多能力呀,但是我們剛開始呀不會給你開太高的工資,但我們年終業績好的話可以給你發4~6個月薪資給你做獎金!可能在這期間要加加班呀什麼的!
在這些中有一家都面試到了和專案經理談了,自我感覺和技術總結聊得很不錯,和專案經理也談了自己未來的規劃,先從Android入手技術深入,然後再自學H5前端,再像java後臺靠攏做一個全棧工程師!專案經理也說你過來我們這有很好java後臺資源,而且Android會交給一個人來做,未來業務發展也會加入H5,我們這能給你提供這樣的一個平臺!最後在某些方面我們的目標達成一致了,行先這樣,我們再商量下,你回去等通知吧!結果我回去了,加了技術總監的微信,傻傻等了一天,啥也沒等來!(忠告:基本叫你回去等通知的都是沒戲!)
當然這些公司中也有向我丟擲橄欖枝的,有一家給我試用8k(不交社保),轉正10K,大小周!一不交社保,二是大小周,三是那沒我想要的,我思來想去,輾轉反側,以不能把自己賤賣為由,我果斷謝絕了!
比起套路,我更喜歡那些能直白告訴我結果的人!在去一家稍微大點的公司,首輪就是筆試!我筆試有一道演算法題和資料庫的題做不出,當時就知道這次沒戲了!但很感謝面試我的那哥們,和我一樣15年畢業的,但很牛逼!他拿著我的筆試答卷,*(Q11)首先是寫一個SingTop,那哥們就問我,單例要注意些什麼?我首先回答的到的同步問題,再說構造方法私有,可我忘了一點靜態呼叫!那哥們就給我一條條理出來1、建構函式私有 2、含有一個該類的靜態私有物件 3、有一個靜態的公有的函式用於建立或獲取它本身的靜態私有物件 4、其次才是考慮執行緒同步!(Q12)*一個按升序排列好的陣列int[] arry = {-5,-1,0,5,9,11,13,15,22,35,46},輸入一個x,int x = 31,在資料中找出和為x的兩個數,例如 9 + 22 = 31,要求演算法的時間複雜度為O(n);
我給出的答案是:
-
1、先用二分法排除比x大的數,得到pos
-
2、再從0到pos 通過兩層for迴圈通過一個數與剩下的所有數來相加,等於x的時候break迴圈
那哥們就開始給我分析,首先第1點想法就是錯的,應為給出的陣列中有負數,負數+正數有可能得到中間的那個數,再則它這靠得是一個雙向逼近的演算法!
接下來是一個資料庫題目*(Q13)*如何向一個資料庫具有int型別A,B,C,D四列的表中隨機插入10000條資料?如何按升序取出A列中前10個數?這道題我沒答,我以為考的是資料庫操作的基本語法!後來那哥們慢慢跟我分析這道題的考點在哪?他說:“這些語法我也不記得,但是像我們這樣具有兩年多工作經驗的人百度一下也是能做得出的,但是這裡考的不是基本語法,資料庫其實也就是一個檔案,一個具有固定封裝特定語法操作的檔案,既然是檔案讀寫就要考慮到效率問題!在資料庫中提高效率用到什麼,是事務!如果一條條插入,其實每次插入都會維持一個事務,也就相當於檔案的開啟和關閉,10000次的開啟和關閉是很消耗效能的,所以要在插入前使用BEGIN TRANSACTION開啟事務,再10000條資料插入完成時用END TRANSACTION結束事務,這樣就相對於檔案只開啟了一次,10000條批量操作完後,再關閉檔案!”
下面一題是*(Q14)*service兩種啟動方式有什麼區別?我回答得很簡單!他就直接說“面試這筆試也是很重要的一部分,簡歷大家可以隨便寫,但是一些技術水平在筆試這是有所體現的,所以在我這筆試這關是沒有通過的!”這個時候我挺服氣的,畢竟是自己準備不好。後來那哥們就跟我說:“這面試題該背的該記得還是要記,花個兩三天或者一週去準備,對自己多要一兩K也是很值得的,所以該辛苦的還是要辛苦下!”我挺感謝這位哥們的,也挺喜歡和這樣率直隨意的人打交道!
最後經過兩個星期的面試,找了一家符合自己發展方向做智慧硬體的公司!經過這段時間的面試,懂得了技術深度的重要性,還有職業規劃的重要性!目前個人認為純App開發很容易被取代,我個人的職業規劃
1、以Android技術為基礎深入,再學前端,再擴充套件到Java後臺,做到一個全棧工程師
2、向Android智慧硬體,NDK開發轉型,因為我大學搞過嵌入式,有些基礎,這一行門檻稍微高些不容易被取代!目前來說自己是打算朝著第二點去發展了!
連結:https://www.jianshu.com/p/189e07bf9f68
更多
微信公眾號:終端研發部