30分鐘輕松入門flutter,高級Android程序員必會

mb612648928888e 2021-09-18 17:26:51 阅读数:106

flutter android 程序

1面 - 基礎面

  1. 你們 Android 開發的時候,對於 UI 稿的 px 是如何適配的?

Android 目前穩定高效的UI適配方案、今日頭條屏幕適配方案 AndroidAutoSize、今日頭條-通過反射修正系統的 density 值

  • dpi:屏幕像素密度,指的是在系統軟件上指定的單比特尺寸的像素數量,它往往是寫在系統出廠配置文件的一個固定值;
  • ppi:也是屏幕像素密度,但這個是物理上的概念,它是客觀存在的不會改變。dpi是軟件參考了物理像素密度後,人為指定的一個值,這樣保證了某一個區間內的物理像素密度在軟件上都使用同一個值;
  • dp加上自適應布局和weight比例布局能解决90%的適配問題。因為並不是所有的1080P的手機dpi都是480,比如Google 的Pixel2(1920*1080)的dpi是420;
  • 寬高限定符適配:窮舉市面上所有的Android手機的寬高像素值,設定一個基准的分辨率,其他分辨率都根據這個基准分辨率來計算,在不同的尺寸文件夾內部,根據該尺寸編寫對應的dimens文件。但其有一個致命的缺陷,那就是需要精准命中才能適配,App包體積也會變大
  1. 兩個值相等的 Integer 對象,== 比較,判斷是否相等?

  2. Activity A 跳轉Activity B,Activity B再按back鍵回退,兩個過程各自的生命周期

  3. 子線程是否可以 context.startActivity() (如ApplicationContext), 會不會有什麼問題?

寫 demo 試了下是可以的。但會有什麼問題還沒弄清楚…

  1. Handler機制整體流程;Looper.loop()為什麼不會阻塞主線程;IdHandler(閑時機制);postDelay()的具體實現;post()與sendMessage()區別;使用Handler需要注意什麼問題,怎麼解决的?

問題很細,能准備多詳細就准備多詳細。人家自己封裝了一套 Handler 來避免內存泄漏問題

  1. Native、H5、RN頁面混合跳轉時,頁面清棧的橋如何實現的?

自己做的一個項目,原理講清楚就行,講不清就畫圖

  1. 怎麼計算一個View在屏幕可見部分的百分比?

  2. ClassLoader 的雙親委派機制 -

  3. 簡單介紹下 Https 的原理

  4. 什麼情况會導致內存泄漏,如何修複?

  5. 下載一張很大的圖,如何保證不 oom? -

  6. 有沒有做過UI方面的優化,做過哪些?

  • 調試GPU過度繪制,將Overdraw降低到合理範圍內;
  • 减少嵌套層次及控件個數,保持view的樹形結構盡量扁平(使用Hierarchy Viewer可以方便的查看),同時移除所有不需要渲染的view;
  • 使用GPU配置渲染工具,定比特出問題發生在具體哪個步驟,使用TraceView精准定比特代碼;
  • 使用標簽,merge减少嵌套層次、viewStub延遲初始化、include布局重用 (與merge配合使用)
  1. WebView 與 JS 交互方式,shouldOverrideUrlLoading、onJsPrompt使用有啥區別 -

  2. Flutter、Kotlin接觸使用過沒有

  3. 其他項目相關問題

  4. 算法 - 二叉樹輸出第 k 層節點元素

2面 - 項目專項

  1. Native、H5、RN頁面混合跳轉時,頁面清棧的橋實現

  2. 頁面混編框架的設計與難點

  3. RN 通用容器的設計

  4. 用戶行為監控方案設計

  5. JS 錯誤治理方案

  6. RN 頁面對用戶行為的監控與JS錯誤治理,在問題發現有什麼收獲、優化點

  7. 美團 RN 相對於原生 RN 的有什麼優勢

3面 - 基礎加深

  1. 你們公司 Picasso 有使用過沒,介紹下

  2. Picasso 單引擎,在多 Bundle 的情况下怎麼保證數據隔離的?

  3. 美團 RN 與 Picasso 的區別

4.省略若幹項目相關問題…

  1. RN 的頁面追踪埋點如何實現的

  2. 美團首頁是否是 RN 頁面,MTFlexBox 原理

  3. synchronized 修飾 static 方法、普通方法、類、方法塊區別

  4. synchronized 底層實現原理

  5. volatile 的作用和原理

  6. 一個 int 變量用 volatile 修飾,多線程去操作 i++,是否線程安全?如何保證 i++ 線程安全?AtomicInteger 的底層實現原理?

使用 AtomicInteger 可以使 i++ 線程安全

  1. 說下對線程池的理解,以及創建線程池的幾個關鍵參數

  2. Handler 機制又問了一遍…

  3. 介紹下 Binder 機制,與內存共享機制有什麼區別?

  4. Java 集合,介紹下ArrayList 和 HashMap 的使用場景,底層實現原理

  5. ArrayList 與 LinkedList 的區別

  6. 算法 - 兩個有序的鏈錶的合並

  7. 算法 - 輸入一個字符串(不含*和.)、正則(字母、*和.任意組合),判斷字符串是否合法

  8. 簡單介紹下,項目中遇到的一些技術難點

4面 - 交叉面

  1. 下面的代碼, str 值最終為多少?換成 Integer 值又為多少,是否會被改變?
  • 考點:Java 值傳遞 (第 2 題相同)。編寫代碼測試,在 changeValue() 方法中修改入參,並不會改變之前的值;
  • 原理?:Java 程序設計語言總是采用按值調用,方法得到的是所有參數值的一個拷貝,即方法不能修改傳遞給它的任何參數變量的內容。基本類型參數傳遞的是參數副本,對象類型參數傳遞的是對象地址的副本;
  • 題解:在 changeValue() 中,對於對象類型參數,直接修改的是對象地址副本的值,所以之前變量的地址並未被修改!若修改的是對象實例裏面的某個值,之前變量則會被修改

最後

我見過很多技術leader在面試的時候,遇到處於迷茫期的大齡程序員,比面試官年齡都大。這些人有一些共同特征:可能工作了7、8年,還是每天重複給業務部門寫代碼,工作內容的重複性比較高,沒有什麼技術含量的工作。問到這些人的職業規劃時,他們也沒有太多想法。

其實30歲到40歲是一個人職業發展的黃金階段,一定要在業務範圍內的擴張,技術廣度和深度提昇上有自己的計劃,才有助於在職業發展上有持續的發展路徑,而不至於停滯不前。

不斷奔跑,你就知道學習的意義所在!

 CodeChina開源項目:《Android學習筆記總結+移動架構視頻+大廠面試真題+項目實戰源碼》

版权声明:本文为[mb612648928888e]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210918172651369x.html