前言
今年能明顯感受到各行各業(yè)的不景氣,互聯(lián)網(wǎng)行業(yè)也是首當(dāng)其沖。最近,大家反饋面試越來越難了,面試八股文也考察的越來越細(xì),越來越底層,面試機(jī)會(huì)也肉眼可見的變少。
這里,給大家總結(jié)一下面試小技巧!面試沒準(zhǔn)備好,不要隨便面試,一些大廠都會(huì)有面試評(píng)價(jià)記錄,太多差評(píng)影響以后的面試,同時(shí)面完之后要多總結(jié),復(fù)盤,整理知識(shí)點(diǎn),查漏補(bǔ)缺。
面試前需要準(zhǔn)備
Android八股文:了解常考的題型和回答思路;
算法:刷100-200 道題,記住刷題最重要的是要理解其思想,不要死記硬背,碰上原題很難,但大多數(shù)的解題思路是相通的。
項(xiàng)目:主要準(zhǔn)備最近一家公司所負(fù)責(zé)的業(yè)務(wù)和項(xiàng)目:
項(xiàng)目的背景,為啥要做這個(gè)項(xiàng)目;
系統(tǒng)的演進(jìn)之路,有哪幾個(gè)階段,每個(gè)階段主要做了什么;
項(xiàng)目中的技術(shù)選型,在項(xiàng)目中使用一些工具和框架時(shí)的調(diào)研,為啥選這個(gè)
項(xiàng)目的亮點(diǎn):就是你在項(xiàng)目中做過最牛逼的事,復(fù)雜的需求方案設(shè)計(jì)、性能優(yōu)化、線上問題處理、項(xiàng)目重構(gòu)等等;項(xiàng)目管理:主要是在主導(dǎo)跨團(tuán)隊(duì)的項(xiàng)目時(shí),如何高效的協(xié)調(diào)好各個(gè)團(tuán)隊(duì)的工作,使用哪些方法來保障項(xiàng)目的按時(shí)交付。在項(xiàng)目遇到困難時(shí),作為項(xiàng)目負(fù)責(zé)人如何應(yīng)對(duì)等等。跟架構(gòu)設(shè)計(jì)一樣,這塊也是隨著經(jīng)驗(yàn)的增加越來越重要。
通用問題:幾個(gè)比較容易被問到的問題是:
1)為什么離職;
2)在上家公司哪些能力得到了成長(zhǎng);
3)平時(shí)怎么學(xué)習(xí)的?問面試官:每次面試最后面試官一般會(huì)問有沒有什么想問的,如果不知道問什么,可以問下團(tuán)隊(duì)當(dāng)前負(fù)責(zé)的業(yè)務(wù)是什么?主要面臨的挑戰(zhàn)是什么?
小編也整理了一下今年的字節(jié)、阿里、騰訊、網(wǎng)易等大廠的Android開發(fā)面試真題,由于內(nèi)容比較多,以下僅展示部分面試題。
Java方面
Java基礎(chǔ)部分
- 抽象類與接口的區(qū)別?
- 分別講講 final,static,synchronized
- 請(qǐng)簡(jiǎn)述一下String、StringBuffer和
- “equals”與“==”、“hashCode”的區(qū)別和使用場(chǎng)景?
- Java 中深拷貝與淺拷貝的區(qū)別?
- 談?wù)凟rror和Exception的區(qū)別?
- 什么是反射機(jī)制?反射機(jī)制的應(yīng)用場(chǎng)景有哪些?
- 談?wù)勅绾沃貙慹quals()方法?為什么還要重寫hashCode()?
- 談?wù)勀銓?duì)Java泛型中類型擦除的理解,并說說其局限性?
-String為什么要設(shè)計(jì)成不可變的? - 說說你對(duì)Java注解的理解?
Java集合
- 談?wù)凩ist,Set,Map的區(qū)別?
- 談?wù)凙rrayList和LinkedList的區(qū)別?
- 請(qǐng)說一下HashMap與HashTable的區(qū)別
- 談一談ArrayList的擴(kuò)容機(jī)制?
- HashMap 的實(shí)現(xiàn)原理?
- 請(qǐng)簡(jiǎn)述 LinkedHashMap 的工作原理和使用方式?
- 談?wù)剬?duì)于ConcurrentHashMap的理解?
Java多線程
- Java 中使用多線程的方式有哪些?
- 說一下線程的幾種狀態(tài)?
- 如何實(shí)現(xiàn)多線程中的同步?
- 談?wù)劸€程死鎖,如何有效的避免線程死鎖?
- 談?wù)劸€程阻塞的原因?
- 請(qǐng)談?wù)?Thread 中 run() 與 start() 的區(qū)別?
- synchronized和volatile關(guān)鍵字的區(qū)別?
- 如何保證線程安全?
- 談?wù)凾hreadLocal用法和原理?
- java線程中notify 和 notifyAll有什么區(qū)別?
- 什么是線程池?如何創(chuàng)建一個(gè)線程池?
- 談一談java線程常見的幾種鎖?
- 談一談線程sleep()和wait()的區(qū)別?
Java虛擬機(jī)
- 談一談JAVA垃圾回收機(jī)制?
- 回答一下什么是強(qiáng)、軟、弱、虛引用以及它們之間的區(qū)別?
- 簡(jiǎn)述JVM中類的加載機(jī)制與加載過程?
- JVM、Dalvik、ART三者的原理和區(qū)別?
- 請(qǐng)談?wù)凧ava的內(nèi)存回收機(jī)制?
- JMM是什么?它存在哪些問題?該如何解決?
Android方面
四大組件
- Activity 與 Fragment 之間常見的幾種通信方式?
- LaunchMode 的應(yīng)用場(chǎng)景?
- 對(duì)于 Context,你了解多少?
- IntentFilter是什么?有哪些使用場(chǎng)景?
- 談一談startService和bindService的區(qū)別,生命周期以及使用場(chǎng)景?
- Service如何進(jìn)行保活?
- 簡(jiǎn)單介紹下ContentProvider是如何實(shí)現(xiàn)數(shù)據(jù)共享的?
- 說下切換橫豎屏?xí)rActivity的生命周期?
- Intent傳輸數(shù)據(jù)的大小有限制嗎?如何解決?
Android 異步任務(wù)和消息機(jī)制
- HandlerThread 的使用場(chǎng)景和用法?
- IntentService 的應(yīng)用場(chǎng)景和使用姿勢(shì)?
- AsyncTask的優(yōu)點(diǎn)和缺點(diǎn)?
- 談?wù)勀銓?duì) Activity.runOnUiThread 的理解?
- 子線程能否更新UI?為什么?
- 談?wù)?Handler 機(jī)制和原理?
- 為什么在子線程中創(chuàng)建Handler會(huì)拋異常?
- Handler中有Loop死循環(huán),為什么沒有阻塞主線程,原理是什么?
數(shù)據(jù)結(jié)構(gòu)
- 什么是冒泡排序?如何優(yōu)化?
- 請(qǐng)用 Java 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的單鏈表?
- 如何反轉(zhuǎn)一個(gè)單鏈表?
- 談?wù)勀銓?duì)時(shí)間復(fù)雜度和空間復(fù)雜度的理解?
- 談一談如何判斷一個(gè)鏈表成環(huán)?
- 什么是紅黑樹?為什么要用紅黑樹?
- 什么是快速排序?如何優(yōu)化?
- 說說循環(huán)隊(duì)列?
- 如何判斷單鏈表交叉
Android Framework
Binder
- Binder有什么優(yōu)勢(shì)
- Binder是如何做到一次拷貝的
- MMAP的內(nèi)存映射原理了解嗎
- Binder機(jī)制是如何跨進(jìn)程的
- 說說四大組件的通信機(jī)制
- 為什么Intent不能傳遞大數(shù)據(jù)
Handler
- HandlerThread是什么?為什么它會(huì)存在?
- 簡(jiǎn)述下 Handler 機(jī)制的總體原理?
- Looper 存在哪?如何可以保證線程獨(dú)有?
- 如何理解 ThreadLocal 的作用?
- 主線程 Main Looper 和一般 Looper 的異同?
- Handler 或者說 Looper 如何切換線程?
- Looper 的 loop() 死循環(huán)為什么不卡死?
- Looper 的等待是如何能夠準(zhǔn)確喚醒的?
- Message 如何獲取?為什么這么設(shè)計(jì)?
AMS
- ActivityManagerService是什么?什么時(shí)候初始化的?有什么作用?
- ActivityThread是什么?ApplicationThread是什么?他們的區(qū)別
- Instrumentation是什么?和ActivityThread是什么關(guān)系?
- ActivityManagerService和zygote進(jìn)程通信是如何實(shí)現(xiàn)的。
- ActivityRecord、TaskRecord、ActivityStack,Activi
- ActivityManager、ActivityManagerService、Activit
- 手寫實(shí)現(xiàn)簡(jiǎn)化版AMS
算法方面
- 如何運(yùn)??分查找算法
- 如何?效解決接??問題
- ?分查找?效判定?序列
- 如何去除有序數(shù)組的重復(fù)元素
- 如何尋找最?回??串
- 如何?效進(jìn)?模冪運(yùn)算
- 如何運(yùn)用貪心思想廣域玩跳躍游戲
- 如何?效判斷回?鏈表
- 如何在無(wú)線序列中隨機(jī)抽取元素
- 如何判定括號(hào)合法性
- 如何尋找缺失和重復(fù)的元素
- 請(qǐng)說一說HashMap,SparseArrary原理,SparseArrary相比HashMap的優(yōu)點(diǎn)、ConcurrentHashMap如何實(shí)現(xiàn)線程安全?
- 請(qǐng)說一說HashMap原理,存取過程,為什么用紅黑樹,紅黑樹與完全二叉樹對(duì)比,HashTab、concurrentHashMap,concurrent包里有啥?
- 請(qǐng)說一說hashmap put()底層原理,發(fā)生沖突時(shí),如何去添加(順著鏈表去遍歷,挨個(gè)比較key值是否一致,如果一致,就覆蓋替換,不一致遍歷結(jié)束后,插入該位置) ?
Kotlin方面
- 請(qǐng)簡(jiǎn)述一下什么是 Kotlin?它有哪些特性?
- Kotlin中實(shí)現(xiàn)單例的幾種常見方式?
- 在Kotlin中,什么是內(nèi)聯(lián)函數(shù)?有什么作用?
- 請(qǐng)談?wù)凨otlin中的Coroutines,它與線程有什么區(qū)別?有哪些優(yōu)點(diǎn)?
- 說說Kotlin中的Any與Java中的Object 有何異同?
- Kotlin中的數(shù)據(jù)類型有隱式轉(zhuǎn)換嗎?為什么?
- Kotlin中集合遍歷有哪幾種方式
- Kotlin內(nèi)置標(biāo)準(zhǔn)函數(shù)let的原理是什么?
- Kotlin語(yǔ)言的run高階函數(shù)的原理是什么?
音視頻方面
- 怎么做到直播秒開優(yōu)化?
- 數(shù)字圖像濾波有哪些方法?
- 圖像可以提取的特征有哪些?
- FFMPEG:圖片如何合成視頻
- 常見的音視頻格式有哪些?
- 請(qǐng)敘述MPEG視頻基本碼流結(jié)構(gòu)?
- 說一說ffffmpeg的數(shù)據(jù)結(jié)構(gòu)?
- 如何降低延遲?如何保證流暢性?如何解決卡頓?解決網(wǎng)絡(luò)抖動(dòng)?
- 平時(shí)說的軟解和硬解,具體是什么?
Flutter方面
- Dart 語(yǔ)言的特性?
- Dart 多任務(wù)如何并行的?
- dart是值傳遞還是引用傳遞?
- Flutter 特性有哪些?
- Widget 和 element 和 RenderObject 之間的關(guān)系?
- 使用mixins的條件是什么?
- Stream 兩種訂閱模式?
- Flutter中的Widget、State、Context 的核心概念?是為了解決什么問題?
- 說一下Hot Reload,Hot Restart,熱更新三者的區(qū)別和原理
- Flutter 如何與 Android iOS 通信?
- 說一下什么是狀態(tài)管理,為什么需要它?