如何拿下面試官?2019的一些面試實戰小結告訴你!

今日頭條屏幕適配的原理?

1:首先計算出 density,計算公式:當前設備屏幕總寬度(單位爲像素)/ 設計圖總寬度(單位爲 dp) = densitydensity 的意思就是 1 dp 佔當前設備多少像素計算density 的原因:在佈局文件中填寫的是什麼單位,最後都會被轉化爲 px,系統就是通過上面的方法,將你在項目中任何地方填寫的單位都轉換爲 px

但是,今日頭條適配方案默認項目中只能以高或寬中的一個作爲基準,來進行適配

簡述Android中的加固和使用平臺?

加固:防止代碼反編譯,提高代碼安全性

加固三方平臺,梆梆安全,360加固,愛加密等
區別:梆梆安全,360加固看不到項目中的類,愛加密看的到Java類,單看不到裏面的方法實現體,效果比前面差一點點

加固的底層原理:第三方加固的應用會生成一個Apk,然後把你的APK讀取出來,在封裝到這個第三方應用的APK裏面.

如何對APK瘦身?

簡述多渠道打包及原理和常用操作?

針對每一個渠道(應用市場)都生成一個帶有渠道標識的apk文件

原理:用戶下載啓動應用,獲取渠道標識,和設備的唯一標識,並上傳到服務器裏面,服務器這裏就 會根據獲取的記錄,根據渠道號然後判斷是否存在該服務器的表裏面.(打標記,取標記,上傳標記)

1)友盟多渠道打包:在清單文件中定義一個佔位符,在gradle腳本中替換佔位符(會使用到Python)

2)美團打包,在meta-data中創建一個空的文件,以文件名標識渠道,做一個解壓與壓縮的操作,速度會比較快

3)新一代多渠道打包,將渠道標識添加到.apk文件的末尾,並不會對源文件損壞

Android下的數據存儲方式有那些?

Android開發下如何有效進行屏幕適配?

兩種序列化相關

既然Google推薦Parcelable這種序列化,在這裏,推薦一鍵生成序列化的插件,

在Android Studio裏面搜索插件,如下圖,寫起序列化(根本不用你寫)那就是一個美滋滋吶~

OkHttp相關?

ButterKnife相關?

Rxjava概念,常用操作符及拓展?

簡介:

一款優雅的異步框架,代替之前的AsyncTask / Handler / XXX / …

其強大的操作符和鏈式寫法,線程切換等有助於提高開發效率和快速定位Bug

與Retrofit搭配使用更是有意想不到的效果,

底層原理:觀察者模式

等一些相應的博客

缺點:

1:操作符太多會增加學習成本時間

2:使用不好,容易導致內存泄露(解決方式,推薦Rxlifecycle結合Rxjava,規避內存泄漏風險)

ANR相關

ANR全名Application Not Responding, 也就是」應用無響應」. 當操作在一段時間內系統無法處理時, 系統層面會彈出上圖那樣的ANR對話框.

在Android裏, App的響應能力是由Activity Manager和Window Manager系統服務來監控的. 通常在如下兩種情況下會彈出ANR對話框:

A) 5s內無法響應用戶輸入事件(例如鍵盤輸入, 觸摸屏幕等).

B) BroadcastReceiver在10s內無法結束.

造成以上兩種情況的首要原因就是在主線程(UI線程)裏面做了太多的阻塞耗時操作, 例如文件讀寫, 數據庫讀寫, 網絡查詢等等.

如何分析ANR?

ANR產生時, 系統會生成一個traces.txt的文件放在/data/anr/下. 開發人員可通過adb命令將其導出到本地 ($adb pull data/anr/traces.txt .)通過分析,我們可以根據具體的日誌查看Anr原因( 如: 普通阻塞,CPU滿負荷,內存泄露 )

Android中那些場景是執行在主線程的?

三級緩存:

內存泄漏:

如何進行內存泄露分析?

A: 通過Android Studio 窗口進行分析,查看內存分配情況,如果操作應用是內存一直往上漲說明存在內存泄露

B: 定位內存泄露分析的工具—-MAT(Memory Analyzer tool)

C: 使用開源庫LeakCanary快速定位內存泄露

Android中的四大組件相關?

Activity:

Activity是一個應用程序組件,提供一個屏幕(狹義的理解就是當前APP的界面),用戶可以用來交互爲了完成某項任務。(點擊,登錄,跳轉頁面)

Activity中所有操作都與用戶密切相關,是一個負責與用戶交互的組件,可以通過setContentView(View)來顯示指定控件(設置佈局文件)。

在一個android應用中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽並處理用戶的事件做出響應。

Activity四種啓動模式?

簡述System.exit(0) 、onDestory()、Activity.finish()三者的區別

1)System.exit(0) 是你正常結束程序,kill 掉當前進程,針對的是整個Application

2)onDestory()方法是Activity生命週期的最後一步,資源空間等就被回收了。當重新進入此Activity的時候,必須重新創建,執行onCreate()方法.

3)Activity.finish()當你調用此方法的時候,系統只是將最上面的Activity移出了棧,並沒有及時的調用onDestory()方法,也就是佔用的資源沒有被及時釋放。

圖片優化,以及圖片加載框架的使用,如Picasso、 Fresco、Glide等?

Handle相關:

拓展

先簡單介紹下你自己?

分析:除了向面試官做簡單的基本自我介紹之外,還需向面試官展現自身對該職業所必須具備的一些自身特質,

比如,面試程序員職業需要間接的向面試官表示自己思維嚴謹,對細節的處理,理性思維,假設論證等等;面試產品等職業,需要向面試官通過自己的一些故事間接展現對產品的看法以及獨特的思維個性等等

切入點:自身特質能否符合該職位的預期需求

對自己的期望和規劃?

分析:職業發展規劃表面上看是在考察你(求職者)、職位、公司三者之間長期的契合程度,但實際上,這麼大的一個問題完全不是三眼兩語間能夠表達清楚的。面試官(無論HR還是專業部門的)主要是看你回答問題時的思路是否清晰,回答中表現出的工作態度如何,順便看看你是否對公司和職位有足夠的瞭解。所以不管答案如何,最關鍵的就是不能茫然。

切入點:依舊自身特點,對未來期望和規劃需表述清晰,思維敏捷

談談自己的優點和缺點?

先談缺點:

技術行業面試基本是由該崗位未來同事和上司進行。這種面試技術性強,行爲問題主要考察就是你是否真心想做這個工作(而不是當跳板或者聽說高薪體面而來)和你性格與文化是否相符。所有答案都應該圍繞這兩點組織(即每個經歷都應迴歸到你通過這個經歷學到什麼,該職位所需關鍵技巧,這些經歷爲何讓你想做這個工作,和該經歷體現出你什麼樣的個人風格)。對這個問題因爲好的回答而留下好印象很難,

關鍵是避免留下壞印象。

要點以下:

1)避免避重就輕,不要談一個算不得缺點的缺點。比如熬夜會困,或者(待人接物)太客氣等等。

2)避免談非職業缺點,比如有感情潔癖,挑食,不擅長陪女友逛街,做飯經常不懂會煮糊。

3)避免談到無法改善的弱點,比如我算數必須用計算器,我腦子不好用看書不理解。

4)避免談到致命弱點,比如脾氣怪異,不喜歡合作,遲到早退等。

那談什麼最好呢?我認爲要點有三:

1)談已經在改正的缺點/有明確計劃來改正的缺點。尤其是你能夠充分論證在近期就可以解決的缺點。

2)談一個利用你的優點改正的缺點,順便帶出一個優點。(這是較高效的溝通技巧)

相對較好的回答:

1)喜歡追求細節導致項目/作業未能按期完成。通過時間管理能力改變工作方式,先完成框架再改善細節得以解決;

2)不知如何拒絕,同事要求幫忙一概攬下,影響自身工作進度。通過多任務處理能力設定優先順序,以該優先順序表向求助同事展示自己手上工作,並給其一個自己在何時可以給予幫助的時間估計,讓求助人自行決定是否求助,問題解決

3)對處理同一問題的解決辦法上,由於組員自己的技術偏好和技術構成不一樣容易造成溝通障礙及影響項目計劃,所以,應學會高效和有效溝通方式及工作技巧

最後

暫且分享這些,由於部分答案過長影響閱讀,我已經整理成了一個PDF文檔,關注+點贊,可以私信我【總結答案】,領取vx:xx13414521

當然,這段時間大家學習的時間比較多,看完文章後也可以學習我收集的這份1612頁的面試指南,滿滿的都是乾貨,希望對大家有幫助!