首頁>技術>

最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓原始碼,演算法,以及資料結構為主,有一些中小型公司也會問到混合開發的知識,至於我為什麼傾向於混合開發,我的一句話就是"走上程式設計之路,將來你要學不僅僅是這些,豐富自己方能與世接軌",做好全棧的裝備。

金三銀四,很多同學心裡大概都準備著年後找工作或者跳槽。最近有很多同學都在交流群裡求大廠面試題。正好我電腦裡面有這方面的整理,於是就發上來分享給大家。

一、網路面試題

1、HTTP 協議2、TCP/IP 協議3、TCP 的三次握手與四次揮手理解及面試題4、網頁中輸入 url,到渲染整個介面的整個過程,以及中間用 了什麼協議?5、TCP 和 UDP 的區別?6、HTTP 的幾種請求方法具體介紹7、HTTP 請求和響應報文的格式,以及常用狀態碼8、一個 TCP 連線上面能發多少個 HTTP 請求

二、資料結構與演算法面試題

1、常用的資料結構有哪些?2、陣列3、連結串列4、佇列&堆疊5、二叉樹6、HashMap7、圖8、排序演算法有哪些?9、查詢演算法10、串11、其他演算法(對稱加密演算法,陣列雜湊)

三、Java 面試題

1、HashMap2、ArrayList3、LinkedList4、Hashset 原始碼分析5、記憶體模型6、垃圾回收演算法(JVM)7、垃圾回收機制和呼叫 System.gc()的區別?8、類載入過程9、反射10、多執行緒和執行緒池11、建立多執行緒方式、執行緒池工作原理12、設計模式(六大基本原則、專案中常用的設計模式、手寫單例等)13、斷點續傳14、Java 四大引用15、Java 的泛型16、final、finally、finalize 的區別17、介面、抽象類的區別18、從 java 容器類的設計討論抽象類和介面的應用19、synchronized 和 lock 的區別

四、Android 面試題

1、Activity 啟動模式2、Activity 的啟動過程3 、程序通訊4、Android Binder 之應用層總結與分析5、程序保活方法6、從原始碼瞭解 handler looper ,messageQueue 思路7、handler 如何實現延時發訊息 postdelay()8、Android 中為什麼主執行緒不會因為 Looper.loop()裡的死循 環卡死?9、RxJava 原理及如何封裝使用10、okhttp 原始碼分析11、retrofit 原始碼分析12、LeakCanary 核心原理原始碼淺析13、LruCache 使用及原理14、ARouter 原理15、註解框架實現原理16、Android 如何編寫基於編譯時註解的專案17、RxJava2+Retrofit2+OkHttp3 的基礎、封裝和專案中的使用18、Rxjava2.0+Retrofit+Okhttp(封裝使用)+MVP 框架搭建19、Android 外掛化和熱修復知識梳理20、Android 開發中比較常見的記憶體洩漏問題及解決辦法21、如何檢測和定位 Android 記憶體洩漏22、圖片佔據的記憶體演算法23、為什麼圖片需要用軟引用,MVP 模式中的 view 介面用弱 引用24、基於 DataBinding 與 LiveData 的 MVVM 實踐25、App 穩定性最佳化26、App 啟動速度最佳化27、App 記憶體最佳化28、App 繪製最佳化29、App 瘦身30、網路最佳化31、App 電量最佳化32、安卓的安全最佳化33、為什麼 WebView 載入會慢呢?34、如何最佳化自定義 View

給大家3個走心的面試建議

經常會有朋友粉絲私聊我幫他看下簡歷,發現了一些共性問題;除此以外,我偶爾面試一些人,有一些個人的感受分享給大家。

簡歷資訊要直觀

簡歷首先要經過 HR 這一關,HR一般情況下是第一個決定你簡歷是否能往下投遞的人。

所以,我們首先需要站在他們的立場,思考他想看到什麼就行了。

對於基本資訊:畢業院校,畢業時間,聯絡方式這些核心資訊我們就不贅述了。

我見過一個簡歷上面的專案經歷,專案名大概是這樣的

2016-2017 BBV線上專案2017-2018 功夫線上專案

掃了一眼,完全不知道是什麼專案。

你不能預期HR去花時間讀你簡歷中的專案介紹,去推斷你這個專案的型別...

於是我諮詢後發現,BBV是個區塊鏈app,功夫是個餐飲類app。

那麼你不如就修改為下面的寫法,更加直觀:

2016-2017 區塊鏈app (BBV)2017-2018 餐飲類app (功夫)

知名專案除外,不要參考這一條。

簡歷上表達出專業技能

1. 方便 HR 檢視技能匹配度

任何面試崗位都有要求,部分 HR 也會關注簡歷與釋出崗位的匹配度的。

這裡也有個小技巧:你可以靈活的匹配這個崗位的要求(但不要把不會的寫上去)。

面試官,主要透過交流、提問,來確定你的技術深度、廣度,以及對該崗位的匹配程度。

那麼,提問問題哪來呢?

當然是從你的簡歷內容中來。

所以你簡歷中要明確表現出專業技能的掌握情況:

例如這樣:

專業技能

熟悉Android熱修復、外掛化、dex,arsc等相關技術熟悉Android 常規的事件分發、自定義控制元件、動效等相關熟悉面向物件,在意封裝、繼承,和介面設計熟悉Android效能最佳化常規手段,有一定的實戰經歷熟悉Android 四大元件相關framework程式碼熟悉編寫gradle plugin,有一定的實戰經歷熟悉Https在Android上的適配、以及應用防破解相關知識瞭解NDK開發,有過一點JNI開發經驗

如果你專案比較出彩,也可以將專業技能拆分到專案介紹中去。

這樣你可能會遇到一個很 nice 的面試過程:

A:看你做過XXX,說說怎麼實踐的。B:我在專案中這麼實踐的,而且遇到過以下幾個問題,是這麼解決的。A:我也遇到過,我是這樣解決的,不過感覺你的方案好像也不錯。AB: 開心的深入交流下去。...

但是,如果你沒有寫專業技能。

那麼遇到好點的面試官,可能會跟你交流專案,從你的陳述中去確定你用到哪些技術才能進行發問。

當然,很多時候面試還挺緊張,一問一答,專案介紹也很簡單就過去了。

面試官就很鬱悶了,問啥呢?

那隻能問他比較熟悉的東西了,可能面試官主要是做外掛化相關的,而你主要是做元件化相關的,這種情況就可以能造成你倆不在一個頻道了,非常吃虧。

很可能面試流程就變成了:

A:你有沒有做過 XXX。B:沒做過。A:那你有沒有做過 XXX。B:沒做過。A:(內心)這B到底做了哪些事...B:(內心)問的什麼屌問題......

當然,千萬不要寫自己沒有深入瞭解過的技能,凡是你列出來的,會預設你對此有掌握有一定的深度,而不是被提問時,回答:

這個我就用了一下...這是我同事接進來的...原始碼我還沒來得及看...

對於第三庫原理回答要有針對性

對於回答問題,在回答出問題的同時,儘可能關聯到自己所經歷的具體的專案場景

下面我說一個真實的體驗,關於第三方庫原理,基本上面試都會被問到。

比如問你圖片載入框架 freso 的原理:

有的同學回答是這樣的:

首先根據 url,看看有沒有快取,有快取從快取中取,沒有 build 一個 request,放到執行緒池執行。

乍一聽好像也沒錯,但是,任何一個完備的圖片載入框架不都有這個流程麼。

所以,問你一個開源庫,除了回答基本原理流程,你心裡要明確知道這個庫的核心架構與特點,設計的比較好的地方,可以擴充套件的地方。

如果專案中還針對做過最佳化、監控等就更好了。

比如剛才問到的 fresco:

你可以說說他的整體設計架構;你可以說說他的圖片記憶體管理機制,在不同的版本手機上,然後深入下去;你可以說說他的Producer/Consumer 機制,以及如何利用這個機制去做擴充套件,專案中的定製;你可以說說根據自己業務情況做了哪些最佳化;甚至說一些它的缺點;...

所以,對於第三庫的原理,希望你能掌握:

基本原理流程;整體的架構設計;做的比較好的地方,以及這些地方設計與原理;結合專案的定製、最佳化、擴充套件;

其實這個建議,也能反推出另一個問題:

如何學習開源專案原始碼?

很多同學學習一個開源庫原始碼,花費了非常大的力氣去梳理程式碼執行流程,然後終於銜接起來,長舒一口氣就結束了,那麼就有點可惜了。

根據上面建議的回答可以看出來,梳理清楚執行流程只是第一件事。

你要去深入發現:

核心的架構設計是什麼樣子的?和其他類似開源庫相比有什麼優勢?這些優勢是如何做到的?哪些部分可以定製,方便我們日後進行擴充套件?

最後,雖然有很多優秀的簡歷模板,各種面試技巧,但是千萬不要捨本求末,始終要牢記個人履歷才是關鍵,希望大家隨著工作年限的增長,履歷也越來越豐富。

最後分享一個面試系統複習路線

有時候,選擇比努力更加重要,機遇比奮鬥更加重要。但是,機會只留給有準備的人。我們只有時刻準備著,才能在機會到來的時候,去抓住它。

這裡給大家分享一下我的面試複習路線,有需要的朋友可以參考一下:

1、看影片進行系統學習

前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因為Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以透過影片來學習,效果更好,也更全面。關於影片學習,個人可以推薦去B站進行學習,B站上有很多學習影片,唯一的缺點就是免費的容易過時。

2、進行系統梳理知識,提升儲備

客戶端開發的知識點就那麼多,面試問來問去還是那麼點東西。所以面試沒有其他的訣竅,只看你對這些知識點準備的充分程度。so,出去面試時先看看自己複習到了哪個階段就好。

系統學習方向:

架構師築基必備技能:深入Java泛型+註解深入淺出+併發程式設計+資料傳輸與序列化+Java虛擬機器原理+反射與類載入+動態代理+高效IOAndroid高階UI與FrameWork原始碼:高階UI晉升+Framework核心解析+Android元件核心+資料持久化360°全方面效能調優:設計思想與程式碼質量最佳化+程式效能最佳化+開發效率最佳化解讀開源框架設計思想:熱修復設計+外掛化框架解讀+元件化框架設計+圖片載入框架+網路訪問框架設計+RXJava響應式程式設計框架設計+IOC架構設計+Android架構元件JetpackNDK模組開發:NDK基礎知識體系+底層圖片處理+音影片開發微信小程式:小程式介紹+UI開發+API操作+微信對接Hybrid 開發與Flutter:Html5專案實戰+Flutter進階

知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。

3、讀原始碼,看實戰筆記,學習大神思路

“程式語言是程式設計師的表達的方式,而架構是程式設計師對世界的認知”。所以,程式設計師要想快速認知並學習架構,讀原始碼是必不可少的。閱讀原始碼,是解決問題 + 理解事物,更重要的:看到原始碼背後的想法;程式設計師說:讀萬行原始碼,行萬種實踐。

4、面試前夕,刷題衝刺

面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,演算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。

關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:

17
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • EffectiveJava-8-異常