到現(xiàn)在我入職也有一段時間了,這才有空梳理一下當時的面試題。簡單說下我的情況:這是一次比較平常的跳槽,不是什么逆襲大廠的劇本,只是薪資有所漲幅。
為鹽津等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及鹽津網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站制作、鹽津網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
個人經(jīng)歷不詳說,面試題對大家來說可能更有參考性,本篇先整理小米的面試題,我前后也面了很多個大廠,有空把其他幾個大廠的面試題也總結(jié)一下。
Java基礎(chǔ)肯定是少不了要問的,這輪面試Kotlin相對來說是我這些面試中問得比較多的,所以說準備面試還是要面面俱到。
我有點佩服我的記憶力了。這部分涉及到更多的 源碼、原理和優(yōu)化 方面的問題,Android高級開發(fā)需要具備一些什么能力大家也應(yīng)該有所衡量了。
最后給大家分享一份 2246頁 的 Android大廠高頻面試題解析大全 ,基本上把我的面試內(nèi)容都涵蓋到了: Android、性能優(yōu)化、Java、Kotlin、網(wǎng)絡(luò)、插件化、熱修復(fù)、模塊化、組件化、增量更新、Gradle、圖片、Flutter等。
這份資料免費提供給大家復(fù)習(xí),文末查看領(lǐng)取方式,搞定Android面試這一份肯定夠了。
第一章 Android相關(guān) (源碼分析、性能優(yōu)化、Framework等)
第二章 性能優(yōu)化 (GC原理、布局優(yōu)化、繪制優(yōu)化、內(nèi)存優(yōu)化等)
第三章 Java相關(guān) (四種線程池、JVM、內(nèi)存管理、垃圾回收、引用等)
第四章 Kotlin相關(guān) (延遲初始化、Reified、Extension Functions、函數(shù)等)
第五章 網(wǎng)絡(luò)相關(guān) (HTTP 知識體系、HttpDns 原理、TCP,UDP,HTTP,SOCKET 之間的區(qū)別等)
第六章 插件化熱修復(fù)模塊化組件化增量更新Gradle
第七章 圖片相關(guān) (圖片庫對比、LRUCache原理、圖片加載原理、Glide等)
第八章 Flutter相關(guān) (Flutter原理、Flutter Hot Reload、Flutter 動態(tài)化 探索 、Flutter Platform Channel等)
需要這份資料的朋友私信我【面試題】就可以免費領(lǐng)取。
希望大家都可以把握住每一次自我提升的機會,把每一步都走踏實了,漲薪升職什么的都會迎你而來。
也歡迎大家和我一起交流Android方面的事情。
這兩周面試遇到的算法題,都是需要手寫實現(xiàn),本人算法相當菜,面試之前也沒刷題的概念,所以算法答的很不好,下面只簡單說下都遇到了哪些吧。
該問題被問到過三次,應(yīng)該是相當高頻的吧,第一次我只想到了下面的第一種方法,面試官很nice,引導(dǎo)著我給出了第二種解決方案
1-2-3-4 交換之后為 2-1-4-3.(基本沒有寫出來,當時面試官問我你沒刷題嗎,我實話實話沒刷過)
被問到過兩次,第一次是某公司的技術(shù)負責(zé)人,人超級好,我第一中解法用的棧實現(xiàn)的,然后就問我時間復(fù)雜度和空間復(fù)雜度是多少,還耐心給我講解這兩個的概念和如何計算,然后又讓我想第二種解法,第二種我寫的是chartAt實現(xiàn),面試官又問時間復(fù)雜度和空間復(fù)雜度是多少,然后讓我再想更優(yōu)的解法,最后在面試官的開導(dǎo)下寫了下面第三種實現(xiàn),特感謝這位面試官。
當時大體寫出來了 但是臨界值判斷錯了
當時是寫出來了,但是方法很笨,之后去看了下源碼,膜拜啊
就遇到了這五個算法,其中一個出現(xiàn)過三次,一個出現(xiàn)過兩次,覺得自己還是挺幸運的吧。希望大家在找工作前多看看算法吧,這個是面試必問的,而且是手寫實現(xiàn),最近兩天也在看算法,感覺大神們的想法真的太好了,自己是很難想到這些思路的。
頁面中的各界面元素(Widget)以樹的形式組織,即控件樹。Flutter通過控件樹中的每個控件創(chuàng)建不同類型的渲染對象,組成渲染對象樹。而渲染對象樹在Flutter的展示過程分為三個階段:布局、繪制、合成和渲染。
(一)布局
Flutter采用深度優(yōu)先機制遍歷渲染對象樹,決定渲染對象樹中各渲染對象在屏幕上的位置和尺寸。在布局過程中,渲染對象樹中的每個渲染對象都會接收父對象的布局約束參數(shù),決定自己的大小,然后父對象按照控件邏輯決定各個子對象的位置,完成布局過程。
為了防止因子節(jié)點發(fā)生變化而導(dǎo)致整個控件樹重新布局,F(xiàn)lutter加入了一個機制——布局邊界(Relayout Boundary),可以在某些節(jié)點自動或手動地設(shè)置布局邊界,當邊界內(nèi)的任何對象發(fā)生重新布局時,不會影響邊界外的對象,反之亦然。
二)繪制
布局完成后,渲染對象樹中的每個節(jié)點都有了明確的尺寸和位置。Flutter會把所有的渲染對象繪制到不同的圖層上。與布局過程一樣,繪制過程也是深度優(yōu)先遍歷,而且總是先繪制自身,再繪制子節(jié)點。
以下圖為例:節(jié)點1在繪制完自身后,會再繪制節(jié)點2,然后繪制它的子節(jié)點3、4和5,最后繪制節(jié)點6。
可以看到,由于一些其他原因(比如,視圖手動合并)導(dǎo)致2的子節(jié)點5與它的兄弟節(jié)點6處于了同一層,這樣會導(dǎo)致當節(jié)點2需要重繪的時候,與其無關(guān)的節(jié)點6也會被重繪,帶來性能損耗。
為了解決這一問題,F(xiàn)lutter提出了與布局邊界對應(yīng)的機制——重繪邊界(Repaint Boundary)。在重繪邊界內(nèi),F(xiàn)lutter會強制切換新的圖層,這樣就可以避免邊界內(nèi)外的互相影響,避免無關(guān)內(nèi)容置于同一圖層引起不必要的重繪。
重繪邊界的一個典型場景是Scrollview。ScrollView滾動的時候需要刷新視圖內(nèi)容,從而觸發(fā)內(nèi)容重繪。而當滾動內(nèi)容重繪時,一般情況下其他內(nèi)容是不需要重繪的,這時候重繪邊界就派上用場了。
(三)合成和渲染
終端設(shè)備的頁面越來越復(fù)雜,因此Flutter的渲染樹層級通常很多,直接交付給渲染引擎進行多圖層渲染,可能會出現(xiàn)大量渲染內(nèi)容的重復(fù)繪制,所以還需要先進行一次圖層合成,即將所有的圖層根據(jù)大小、層級、透明度等規(guī)則計算出最終的顯示效果,將相同的圖層歸類合并,簡化渲染樹,提高渲染效率。
合并完成后,F(xiàn)lutter會將幾何圖層數(shù)據(jù)交由Skia引擎加工成二維圖像數(shù)據(jù),最終交由GPU進行渲染,完成界面的展示。
四、總結(jié)
咱們從各種業(yè)界主流跨端方案與Flutter的對比開始,到Flutter的簡要介紹以及Flutter的運行機制,并以界面渲染過程為例,從布局、繪制、合成和渲染三個階段講述了Flutter的實現(xiàn)原理。相信大家對Flutter已經(jīng)有一個整體認知,趕快一起上手操作起來吧!
針對日常不同的需求,我們時常需要自定義 Dialog ,而小菜在嘗試過程中遇到一些小問題,簡單記錄總結(jié)一下;
小菜在自定義含有文本框的 Dialog 時,文本框獲取焦點時,軟鍵盤會部分遮擋對話框,但當小菜替換為 AlertDialog 時,文本框獲取焦點時,對話框會向上浮動,避免軟鍵盤遮擋;
對于含有文本框的自定義 Dialog ,小菜在最外層使用的是 Material 嵌套,小菜通過采用 Scaffold 來嵌套處理,默認 Scaffold 中 resizeToAvoidBottomPadding / resizeToAvoidBottomInset 為 true ,當設(shè)置為 false 時,文本框獲取焦點時,依舊會被軟鍵盤遮擋;因為在固定情景可以配合 resizeToAvoidBottomPadding 實現(xiàn)是否被軟鍵盤遮擋效果;
resizeToAvoidBottomPadding 主要用于自身 Widget 是否避免被其他窗口遮擋;其中小菜查資料介紹在 Flutter 1.1.9 之后更推薦使用 resizeToAvoidBottomInset ;
小菜自定義一個可以多選 item 的 Dialog ,但 Dialog 中并沒有狀態(tài)更新的 State ,如何進行 Dialog 中狀態(tài)更新呢?
小菜之前在 showDialog 時直接創(chuàng)建了 TypeListDialog ,此時是無狀態(tài)的,當 WidgetBuilder 創(chuàng)建一個 StatefulBuilder 有狀態(tài)的構(gòu)造器即可,可以將 state 傳遞到 Dialog 中;
小菜在自定義 Dialog 時如何在一個回調(diào)方法中傳遞多個參數(shù)?
小菜在 Dialog 的回調(diào)方法中傳遞兩個 List ,而在接收回調(diào)方法中匹配兩個參數(shù)即可;小菜簡單看作是一個函數(shù)方法;
小菜在重寫 AppBar 時,如何取消默認的返回按鈕?
取消 AppBar 前面的返回圖標有多種方式;
自定義 Dialog 案例源碼
小菜對于 Flutter 的應(yīng)用還不夠熟悉,很多常用的場景會處理的很不到位,小菜會對日常的小問題進行簡單記錄,逐步學(xué)習(xí);如有錯誤,請多多指導(dǎo)!
網(wǎng)頁題目:關(guān)于flutter面試題總結(jié)的信息
網(wǎng)站鏈接:http://m.rwnh.cn/article30/dscooso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、品牌網(wǎng)站設(shè)計、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)