摘要:到十二月份,公司開(kāi)始第二波裁員,我決定主動(dòng)拿賠償走人。加一個(gè)小插曲上面的題是餓了嗎面試問(wèn)到的。想去的公司沒(méi)有面試好,不要?dú)怵H,繼續(xù)加油準(zhǔn)備。避免打擊自信心。
回顧一下自己這段時(shí)間的經(jīng)歷,九月份的時(shí)候,公司通知了裁員,我匆匆忙忙地出去面了幾家,但最終都沒(méi)有拿到offer,我感覺(jué)今年的寒冬有點(diǎn)冷。到十二月份,公司開(kāi)始第二波裁員,我決定主動(dòng)拿賠償走人。后續(xù)的面試過(guò)程我做了一些準(zhǔn)備,基本都能走到hr面,后面我也順利地拿到了offer,我給大家分享下我的求職體會(huì),希望能給大家一些參考。
一般Android面試分為兩部分:Java部分和Android部分,下面說(shuō)一下自己面試過(guò)程遇到的一些具體題目和一些相關(guān)知識(shí)點(diǎn)。
一 JAVA相關(guān)1.java基本數(shù)據(jù)類(lèi)型有哪些,int, long占幾個(gè)字節(jié)
2.== 和 equals有什么區(qū)別
3.hashcode 和 equals作用
4.new String創(chuàng)建了幾個(gè)對(duì)象
5.位運(yùn)算符的一些計(jì)算
6.java的拆裝箱
7.compareable 和 compartor的區(qū)別
下面列一兩個(gè)遇到的題吧
它的打印結(jié)果是什么。
類(lèi)似這種的題很多,考察的都是基礎(chǔ)知識(shí)的牢固性。所以需要自己多鞏固基礎(chǔ)。
常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)就是:數(shù)組,棧,隊(duì)列,集合,映射,鏈表,堆,二分搜索樹(shù),紅黑樹(shù)。當(dāng)然還有其他的一些,比如AVL平衡樹(shù)等一些數(shù)據(jù)結(jié)構(gòu)。
我們要做的就是了解它們的實(shí)現(xiàn)原理和各自的優(yōu)缺點(diǎn)。
數(shù)據(jù)結(jié)構(gòu)部分面試遇到最多的就是:
1.ArrayList和LinkedList的區(qū)別,優(yōu)缺點(diǎn)
2.hashmap實(shí)現(xiàn),擴(kuò)容是怎么做的,怎么處理hash沖突,hashcode算法等
3.鏈表需要知道。LinkedHashMap一般再問(wèn)LRU的時(shí)候會(huì)問(wèn)到
4.二分搜索樹(shù)的特性和原理。前中后序遍歷寫(xiě)出其中一種,當(dāng)問(wèn)到二分搜索樹(shù)的缺點(diǎn)的時(shí)候,你需要提出基于二分搜索樹(shù)的紅黑樹(shù),說(shuō)出他的特性。
5.堆的實(shí)現(xiàn),最大堆,最小堆,優(yōu)先隊(duì)列原理。
算法其實(shí)就是我們平時(shí)常見(jiàn)的一些排序:選擇排序,插入排序,冒泡排序,希爾排序,歸并排序,快速排序。以及和數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的解決部分問(wèn)題的一些計(jì)算方法。
算法面試遇到的一些題:
1.手寫(xiě)快速排序,插入排序,冒泡排序
2.翻轉(zhuǎn)一個(gè)數(shù)字
3.翻轉(zhuǎn)一個(gè)鏈表
4.O(n)復(fù)雜度找出數(shù)組中和是9的兩個(gè)數(shù)的索引
5.寫(xiě)出二分搜索樹(shù)前中后序遍歷中的其中一個(gè)
6.實(shí)現(xiàn)一個(gè)隊(duì)列,并能記錄隊(duì)列中最大的數(shù)。
算法這一塊是需要練習(xí)的推薦去Leetcode上面刷刷題,開(kāi)拓一下思維。算法也并不一定要求你能寫(xiě)出來(lái),主要考察你的思路,已經(jīng)如何優(yōu)化你的算法。
JVM虛擬機(jī)我們需要知道他們內(nèi)部組成:堆,虛擬機(jī)棧,本地方法棧,方法區(qū),計(jì)數(shù)器。每一塊都存放什么東西,以及垃圾回收的時(shí)候主要回收哪些塊的東西。GC-ROOT鏈?zhǔn)菑哪男┑胤介_(kāi)始的,垃圾回收集算法(很少遇到問(wèn)的)。
類(lèi)加載ClassLoader已經(jīng)雙親委派機(jī)制,類(lèi)加載的過(guò)程,類(lèi)加載的信息對(duì)應(yīng)在JVM的哪些塊中。
列一個(gè)遇到的類(lèi)加載的面試題:
public class TestClassLoader {
static class Father { public static final String TAG = "Father"; static { System.out.println("static Father"); } { System.out.println("unStatic Father"); } public Father() { System.out.println("constract Father"); method(); } public void method() { System.out.println("method Father"); } @Override public String toString() { return "toString Father"; } } static class Son extends Father { public static Son instance = new Son(); static { System.out.println("static Son"); } { System.out.println("unStatic Son"); } public Son() { System.out.println("constract Son"); method(); } public void method() { System.out.println("method Son"); } @Override public String toString() { return "toString Son"; } } public static void main(String[] args) { System.out.println("1.---------------------"); System.out.println(Son.TAG); Son[] sons = new Son[10]; System.out.println(sons); System.out.println("2.---------------------"); System.out.println(Son.instance); System.out.println("3.---------------------"); Son son = new Son(); Father father = son; father.method(); System.out.println(son); }
}
寫(xiě)出打印輸出。
加一個(gè)小插曲:上面的題是餓了嗎面試問(wèn)到的。面試我的人自己說(shuō)是17年北航畢業(yè)的研究生。說(shuō)自己非常注重基礎(chǔ),全程問(wèn)了很多JAVA基礎(chǔ),包括上面的類(lèi)加載的題,很自豪的說(shuō)這個(gè)題是他自己出的。還有Collections下面的子類(lèi)都有哪些,都有什么不同。但是Android相關(guān)的題目問(wèn)的水平很一般,說(shuō)這個(gè)沒(méi)有嘲諷的意思。想說(shuō)的是有些面試從一開(kāi)始就注定了你可能進(jìn)不了這個(gè)公司。面試有的時(shí)候也是要看眼緣的。不要灰心,找出自己的不足,補(bǔ)齊它,繼續(xù)前行。還有就是上面那個(gè)題,的確很不錯(cuò)。
當(dāng)多個(gè)線程訪問(wèn)一個(gè)對(duì)象的時(shí)候,如果不用考慮這些線程在運(yùn)行時(shí)環(huán)境下的調(diào)度和交替執(zhí)行,也不需要進(jìn)行額外的同步,或者在調(diào)用方進(jìn)行任何其他的協(xié)調(diào)操作,調(diào)用這個(gè)對(duì)象的行為都可以獲取正確的結(jié)果,我們就認(rèn)為這個(gè)對(duì)象時(shí)線程安全的。
線程安全就是一些多線程下載,同步,鎖,死鎖,線程池。volatile關(guān)鍵字的特性,變量的原子性。以及java.util.concurrent包下的類(lèi),也需要了解一下。
一般會(huì)問(wèn)的是手寫(xiě)單例,以及雙重鎖式單例的優(yōu)點(diǎn)。還有就是讓你自己實(shí)現(xiàn)一個(gè)多線程下載,看你怎么設(shè)計(jì)。
封裝,繼承,多態(tài),抽象,反射,注解,設(shè)計(jì)模式,設(shè)計(jì)模式的原則。
面試中一般會(huì)問(wèn)下:
1.抽象和接口有什么不一樣
2.工作中常用的設(shè)計(jì)模式,一些源碼中的設(shè)計(jì)模式
3.具體給你一個(gè)設(shè)計(jì)模式讓你說(shuō)說(shuō)你對(duì)他的了解,比如觀察者,工廠。
以上這些東西主要考察你的代碼設(shè)計(jì)能力。
1.互聯(lián)網(wǎng)的實(shí)現(xiàn)主要分為幾層,http、ftp、tcp、ip分別位于哪一層。
2.http和https的區(qū)別
3.為什么tcp要經(jīng)過(guò)三次握手,四次揮手
4.socket了解過(guò)嗎
一般http和https問(wèn)的比較多,對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密也會(huì)問(wèn)。tcp和socket偶爾遇見(jiàn)問(wèn)的。
我覺(jué)得JAVA部分大致上可以分為這幾大塊,細(xì)想一套代碼,其實(shí)就是類(lèi)和組合這些類(lèi),怎么組合其實(shí)就是設(shè)計(jì)模式。而類(lèi)里面包含的其實(shí)就是基本數(shù)據(jù)類(lèi)型和一些數(shù)據(jù)機(jī)構(gòu)來(lái)存放這些基本數(shù)據(jù)類(lèi)型或者類(lèi),然后就是JVM去怎么加載這些類(lèi)。針對(duì)上面幾個(gè)部分我推薦幾本書(shū)吧:
《JAVA編程思想》
《深入理解JAVA虛擬機(jī) 第二版》
《大話設(shè)計(jì)模式》
《HeadFirst設(shè)計(jì)模式》
《數(shù)據(jù)結(jié)構(gòu)和算法》
《圖解HTTP》
數(shù)據(jù)結(jié)構(gòu)和算法重點(diǎn)推薦:https://github.com/wangxp423/ExerciseJava 以及readme中提到的劉宇波(liuyubobobo)他開(kāi)源的代碼和文檔。他在慕課網(wǎng)錄制了四套視頻來(lái)講解數(shù)據(jù)結(jié)構(gòu)和算法。文檔通俗易懂。很適合初學(xué)者,和想系統(tǒng)了解的人。
Android部分我就不分幾大塊了。直接列舉,但是列舉到的每一項(xiàng)都是面試經(jīng)常會(huì)問(wèn)到并且會(huì)延伸問(wèn)的,所以需要深入的去研究。
1.四大組件有哪些,說(shuō)出你對(duì)他們?cè)贏ndroid系統(tǒng)中的作用和理解。
2.Activity生命周期,A啟動(dòng)B兩個(gè)頁(yè)面生命周期怎么運(yùn)行的,為什么會(huì) 這樣,生命周期為什么這么設(shè)計(jì),你有了解過(guò)嗎。
3.四種啟動(dòng)模式,內(nèi)部堆棧是怎么回事,你工作中怎么使用的。
4.Activity的啟動(dòng)過(guò)程,這個(gè)我強(qiáng)烈建議每個(gè)Android開(kāi)發(fā)人員都要清楚的知道,并且跟一下源碼,幾個(gè)核心類(lèi)的作用。你會(huì)對(duì)Android有一個(gè)更好的認(rèn)識(shí)。
5.事件分發(fā)流程,怎么處理滑動(dòng)沖突。舉例:長(zhǎng)按ListView的一個(gè)Item它變灰了。這個(gè)時(shí)候在滑動(dòng)。item恢復(fù)原來(lái)的樣子,這個(gè)時(shí)候他們內(nèi)部的事件傳遞是什么樣子。有很多種問(wèn)法,所以你一定要搞清楚。
6.自定義View,View的繪制流程。onMeasure,onLayout,onDraw都是什么作用。ViewGroup是怎么分發(fā)繪制的。onDraw里面怎么去做繪制,Canvas,Path,Paint你都需要了解。并且配合ValueAnimtor或者Scroller去實(shí)現(xiàn)動(dòng)畫(huà)。有時(shí)候面試的會(huì)突發(fā)奇想問(wèn)你ViewGroup是樹(shù)形結(jié)構(gòu),我想知道樹(shù)的深度,你怎么計(jì)算,突然就變成了一個(gè)數(shù)據(jù)結(jié)構(gòu)和算法的題。
7.Bitmap和Drawable
8.Animation和Animator
9.LinearLayout、RelativeLayout、FrameLayout三種常用布局的特性,他在布局的時(shí)候是怎么計(jì)算的。效率如何。CoordinatorLayout配合AppbarLayout的使用,以及自定義Behavior。ConstraintLayout的使用。用來(lái)減少層級(jí)。
10.Handler消息機(jī)制,推薦看一下Looper的源碼
11.進(jìn)程間通信,Binder機(jī)制
12.AsyncTask源碼看一下。
13.圖片的壓縮處理,三級(jí)緩存,Lru算法
14.分辨率和屏幕密度,以及計(jì)算一個(gè)圖片大小。mdpi,hdpi的關(guān)系和比例。
15.優(yōu)化,內(nèi)存優(yōu)化,布局優(yōu)化,啟動(dòng)優(yōu)化,性能優(yōu)化。內(nèi)存泄露,內(nèi)存溢出。怎么優(yōu)化,用了什么工具,具體怎么做的。
16.listView和RecycleView對(duì)比,以及緩存策略。
17.JNI(很少問(wèn))
18.MVC,MVP,MVVM
19.開(kāi)源框架Okhttp,Glide,EventBus,Rxjava等,以及JetPack下的開(kāi)源庫(kù),要會(huì)用,還說(shuō)說(shuō)出一些東西,推薦 Retrofit,Okhttp,Glide,EventBus這些看一下源碼。
20.RecyclerView四大塊,能實(shí)現(xiàn)什么效果,大致怎么實(shí)現(xiàn)的,心里要有數(shù)
21.DecorView,Window,WindowManager,PhoneWindow關(guān)系,以及個(gè)子的職責(zé)。
加分項(xiàng):Kotlin,Gradle,F(xiàn)lutter,組件化,插件化,熱修復(fù)。
上面的列的相關(guān)內(nèi)容,看似很短一句話,但是每一項(xiàng)都需要你深入的去研究,要了解原理,最好去看一下源碼實(shí)現(xiàn)。當(dāng)然還有一些是我沒(méi)寫(xiě)到的,可能是我寫(xiě)的時(shí)候沒(méi)有想起來(lái),并不代表他們不重要,你也需要重視,再來(lái)一波推薦:
《Android開(kāi)發(fā)藝術(shù)探索》強(qiáng)烈推薦,建議細(xì)細(xì)的讀,如果粗心大意建議讀兩到三遍,針對(duì)性的讀。
《Android進(jìn)階之光》
《高級(jí)Android開(kāi)發(fā)強(qiáng)化實(shí)戰(zhàn)》
《Android組件化架構(gòu)》
《Android熱修復(fù)技術(shù)原理》
《Android插件化開(kāi)發(fā)指南》
1.準(zhǔn)備要充分,知識(shí)面要盡量的廣,同時(shí)深度也要夠。
2.面試安排上,如果不著急,盡量給自己留多時(shí)間,兩天一家,及時(shí)做總結(jié)和補(bǔ)充。
3.心態(tài)要放平,當(dāng)做一次技術(shù)交流,面試要看一部分的運(yùn)氣,也要看一些眼緣,有的面試官一張嘴你就能感覺(jué)到你這次面試完了。想去的公司沒(méi)有面試好,不要?dú)怵H,繼續(xù)加油準(zhǔn)備。
4.簡(jiǎn)歷投遞方面,拉勾上投了很多經(jīng)常不匹配,可能是我學(xué)歷問(wèn)題(自考本),有一些打擊自信心,如果有同樣感受的,不妨換BOSS或者其他平臺(tái)。避免打擊自信心。
5.寫(xiě)簡(jiǎn)歷一定要體現(xiàn)自己的優(yōu)勢(shì),最好能體現(xiàn)類(lèi)似于,用到了什么技術(shù),解決了什么問(wèn)題。簡(jiǎn)歷上寫(xiě)到的一定要胸有成竹。
6.類(lèi)似于你的優(yōu)勢(shì)是什么,你覺(jué)得你項(xiàng)目中做的比較好的地方有哪些,你能給公司帶來(lái)什么,這種問(wèn)題心里要先想一些,免得臨場(chǎng)發(fā)揮容易緊張說(shuō)不好。
7.我所經(jīng)歷的面試,一般技術(shù)面最少是兩輪。如果一輪后讓你走了,而你還自我感覺(jué)良好,那我覺(jué)得你有必要回顧一下面試內(nèi)容,并一條一條找找該問(wèn)題的相關(guān)內(nèi)容,大部分問(wèn)題就在于你沒(méi)有答到點(diǎn)子上,可能是深度不夠,也可能是擴(kuò)展不夠。繼續(xù)加油。
現(xiàn)在外面面試問(wèn)的的確比較多,要求也挺高的,行情不好,薪資也不好要,所以心態(tài)一定要放好,找好自己的定位,心態(tài)一定要好。
面試之后要盡量做到總結(jié),從我最開(kāi)始沒(méi)什么準(zhǔn)備就出去面試,被打擊一通之后,總結(jié)了七八家面試題,會(huì)發(fā)新面試問(wèn)到的都是那些知識(shí)點(diǎn),可能角度不一樣,但是你只要深度夠,他怎么問(wèn),你基于原理來(lái)回答,基本上都沒(méi)差,從簽了賠償協(xié)議以后出來(lái)面試,連續(xù)四家公司都走到了HR面,可以說(shuō)面試的感覺(jué)上來(lái)了。前面的總結(jié)積累終究沒(méi)有白費(fèi)。
在寫(xiě)這篇文章之前,我專(zhuān)門(mén)看了下我之前收藏的別的公號(hào)上發(fā)的面試題,很全,我都有點(diǎn)不想寫(xiě)這篇文章了。但是想了下我這三個(gè)月聽(tīng)到要裁員開(kāi)始面試,到第一批沒(méi)被裁,第二批裁員遲遲不來(lái)。到第二批來(lái)的時(shí)候主動(dòng)申請(qǐng)被裁。中間面試被打擊,失落,看到新聞那那都在裁員,到現(xiàn)在面試整體感覺(jué)還不錯(cuò)。還是想分享一下自己的心里路程,想告訴大家,裁員別慌,做自己該做的,其他自己決定不了的,先放一放,心里列一個(gè)123,一條一條來(lái)。
可以看到我在上面推薦了很多書(shū)籍,而且JAVA部分時(shí)分塊來(lái)了。是因?yàn)楫?dāng)我看到很多面試題,針對(duì)題來(lái)的時(shí)候,題會(huì)很多,而且有時(shí)候你會(huì)覺(jué)得你的題都會(huì)了,但是面試的時(shí)候還是面不好,說(shuō)明你的知識(shí)并不扎實(shí)?;蛘吣阒R(shí)會(huì)了這個(gè)題,并沒(méi)有融會(huì)貫通,所以在JAVA部分我分大塊來(lái)描述,而且針對(duì)每一塊,我都有推薦一本相關(guān)的書(shū),你可能不需要都看,可以針對(duì)性的看。而Android部分時(shí)詳細(xì)的知識(shí)點(diǎn),這些知識(shí)點(diǎn)我希望的是,能夠深入研究。而推薦的書(shū)籍,書(shū)中的部分都有一些相關(guān)的知識(shí)點(diǎn),大家也可以選擇性的看,當(dāng)然論壇,博客都是知識(shí)的來(lái)源,大家做好知識(shí)點(diǎn)深度和廣度的基類(lèi)就行了。
最后,雖然裁員的很多,都在說(shuō)Android要沒(méi)落,但是,不要慌,做自己的計(jì)劃,學(xué)自己的習(xí),競(jìng)爭(zhēng)無(wú)處不在,每個(gè)行業(yè)都是如此。祝大家2019年萬(wàn)事大吉。
閱讀更多資本寒冬下的android面經(jīng)
Android自定義View——啥是佩奇?
Flutter終將逆襲!1.2版本發(fā)布,或?qū)⒔y(tǒng)一江湖
APK 的前世今生:從 Android 源碼到 apk 的編譯打包流程
如果對(duì)技術(shù)開(kāi)發(fā)比較感興趣,歡迎和我一起進(jìn)階技術(shù),技術(shù)號(hào)Id:codeGoogler
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/73781.html
摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會(huì)問(wèn)到混合開(kāi)發(fā)的知識(shí),至于我為什么傾向于混合開(kāi)發(fā),我的一句話就是走上編程之路,將來(lái)你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...
摘要:引言當(dāng)下,正面臨著近幾年來(lái)的最嚴(yán)重的互聯(lián)網(wǎng)寒冬,聽(tīng)得最多的一句話便是相見(jiàn)于江湖引言 當(dāng)下,正面臨著近幾年來(lái)的最嚴(yán)重的互聯(lián)網(wǎng)寒冬,聽(tīng)得最多的一句話便是:相見(jiàn)于江湖~
摘要:無(wú)疑是一個(gè)非常值得學(xué)習(xí)其原理的框架,它設(shè)計(jì)簡(jiǎn)單,沒(méi)有引入任何新的概念,一個(gè)組件就是一個(gè)方法或一個(gè)類(lèi)。 這是我?guī)讉€(gè)月前寫(xiě)的文章,在前端面試中原理相關(guān)的問(wèn)題是問(wèn)的最多的,所以重新推薦下這幾篇文章 深入學(xué)習(xí)一個(gè)框架最直接的方式,就是弄明白框架的原理。React無(wú)疑是一個(gè)非常值得學(xué)習(xí)其原理的框架,它設(shè)計(jì)簡(jiǎn)單,沒(méi)有引入任何新的概念,一個(gè)組件就是一個(gè)方法或一個(gè)類(lèi)。 但是要完整弄明白R(shí)eact的源碼...
閱讀 1176·2021-11-23 10:10
閱讀 1499·2021-09-30 09:47
閱讀 887·2021-09-27 14:02
閱讀 2966·2019-08-30 15:45
閱讀 3019·2019-08-30 14:11
閱讀 3609·2019-08-29 14:05
閱讀 1819·2019-08-29 13:51
閱讀 2206·2019-08-29 11:33