前言
前一段時間和大牛們交流了一下,據反饋現在Android崗位也沒有以前那麼多了,沒這麼好找了,面寒冬季節,死掉企業的很多,在加之以前培訓機構大量的培訓人,初級程序員大量入場,導致供大於求,當然這不意味著飽和,只是市場更趨於合理一些(只要技術好不用怕的)。
最近結整理了下一些面試題目,希望對大家有所幫助,後期會不斷更新添加新的面試題。可以幫大家查漏不缺。以下是(阿里、騰訊、百度、華為、京東、搜狗和滴滴面試題彙集)
就算寫出答案也沒必要(我寫了部分面試答案),因為開發與實際答案會有所不同,再者怕誤導大家,所以這些面試題答案還是自己去理解吧!切記:不要背答案,多理解。
Android基礎
1、什麼是ANR 如何避免它?如果耗時操作需要讓用戶等待,那麼可以在界面上顯示進度條。2、View的繪製流程;自定義View如何考慮機型適配;自定義View的事件3、分發機制;View和ViewGroup分別有哪些事件分發相關的回調方法;自定義View如何提供獲取View屬性的接口;4、Art和Dalvik對比;虛擬機原理,如何自己設計一個虛擬機(內存管理,類加載,雙親委派);JVM內存模型及類加載機制;內存對象的循環引用及避免;4、ddms 和 traceView;5、內存回收機制與GC算法(各種算法的優缺點以及應用場景);GC原理時機以及GC對象;內存洩露場景及解決方法;6、四大組件及生命週期;ContentProvider的權限管理(讀寫分離,權限控制-精確到表級,URL控制);Activity的四種啟動模式對比;Activity狀態保存於恢復;7、什麼是AIDL 以及如何使用;8、請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關係;9、Fragment生命週期;Fragment狀態保存startActivityForResult是哪個類的方法,在什麼情況下使用,如果在Adapter中使用應該如何解耦;10、AsyncTask原理及不足;ntentService原理;11、Activity 怎麼和Service 綁定,怎麼在Activity 中啟動自己對應的Service;12、請描述一下Service 的生命週期;13、AstncTask+HttpClient與AsyncHttpClient有什麼區別;14、如何保證一個後臺服務不被殺死;比較省電的方式是什麼;15、如何通過廣播攔截和abort一條短信;廣播是否可以請求網絡;廣播引起anr的時間限制;16、進程間通信,AIDL;17、事件分發中的onTouch 和onTouchEvent 有什麼區別,又該如何使用?18、說說ContentProvider、ContentResolver、ContentObserver 之間的關係;19“
Java基礎
1、集合類以及集合框架;HashMap與HashTable實現原理,線程安全性,hash衝突及處理算法;ConcurrentHashMap;2、進程和線程的區別;3、Java的併發、多線程、線程模型;4、什麼是線程池,如何使用?答:線程池就是事先將多個線程對象放到一個容器中,當使用的時候就不用new 線程而是直接去池中拿線程即可,節省了開闢子線程的時間,提高的代碼執行效率。5、數據一致性如何保證;Synchronized關鍵字,類鎖,方法鎖,重入鎖;6、Java中實現多態的機制是什麼;7、如何將一個Java對象序列化到文件裡;8、說說你對Java反射的理解;答:Java 中的反射首先是能夠獲取到Java 中要反射類的字節碼, 獲取字節碼有三種方法,(1).Class.forName(className)(2).類名.class(3).this.getClass()。然後將字節碼中的方法,變量,構造函數等映射成相應的Method、Filed、Constructor 等類,這些類提供了豐富的方法可以被我們所使用。9、同步的方法;多進程開發以及多進程應用場景;10、在Java中wait和seelp方法的不同;答:最大的不同是在等待時wait 會釋放鎖,而sleep 一直持有鎖。wait 通常被用於線程間交互,sleep 通常被用於暫停執行。11、synchronized 和volatile 關鍵字的作用;答:1)保證了不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量的值,這新值對其他線程來說是立即可見的。2)禁止進行指令重排序。12、volatile 本質是在告訴jvm 當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取;synchronized 則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。(1).volatile 僅能使用在變量級別;synchronized 則可以使用在變量、方法、和類級別的(2).volatile 僅能實現變量的修改可見性,並不能保證原子性;synchronized 則可以保證變量的修改可見性和原子性(3).volatile 不會造成線程的阻塞;synchronized 可能會造成線程的阻塞。(4).volatile 標記的變量不會被編譯器優化;synchronized 標記的變量可以被編譯器優化13、服務器只提供數據接收接口,在多線程或多進程條件下,如何保證數據的有序到達;14、ThreadLocal原理,實現及如何保證Local屬性;15、String StringBuilder StringBuffer對比;16、你所知道的設計模式有哪些;答:Java 中一般認為有23 種設計模式,我們不需要所有的都會,但是其中常用的幾種設計模式應該去掌握。下面列出了所有的設計模式。需要掌握的設計模式我單獨列出來了,當然能掌握的越多越好。總體來說設計模式分為三大類:創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。17、Java如何調用c、c++語言;18、接口與回調;回調的原理;寫一個回調demo;19、泛型原理,舉例說明;解析與分派;20、抽象類與接口的區別;應用場景;抽象類是否可以沒有方法和屬性;21、靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?22、修改對象A的equals方法的簽名,那麼使用HashMap存放這個對象實例的時候,會調用哪個equals方法;23、說說你對泛型的瞭解;24、Java的異常體系;25、如何控制某個方法允許併發訪問線程的個數;26、動態代理的區別,什麼場景使用;27、Dex加載過程和優化方式;28、Jvm和Gc機制;29、常用的設計模式。“
數據結構與算法
1、堆和棧在內存中的區別是什麼(數據結構方面以及實際實現方面);2、最快的排序算法是哪個?給阿里2萬多名員工按年齡排序應該選擇哪個算法?堆和樹的區別;寫出快排代碼;鏈表逆序代碼;3、求1000以內的水仙花數以及40億以內的水仙花數;4、子串包含問題(KMP 算法)寫代碼實現;5、萬億級別的兩個URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)6蟻群算法與蒙特卡洛算法;7、寫出你所知道的排序算法及時空複雜度,穩定性;8、百度POI中如何試下查找最近的商家功能(座標鏡像+R樹)。9、遍歷二叉樹10、自己集合實現一個隊列11、自己實現線程安全類12、快速排序和冒泡的排序,怎麼轉換一下。“
其它
1、死鎖的四個必要條件;2、常見編碼方式;utf-8編碼中的中文佔幾個字節;int型幾個字節;3、實現一個Json解析器(可以通過正則提高速度);4、MVC MVP MVVM; 常見的設計模式;寫出觀察者模式的代碼;5、TCP的3次握手和四次揮手;TCP與UDP的區別;6、HTTP協議;HTTP1.0與2.0的區別;HTTP報文結構;7、HTTP與HTTPS的區別以及如何實現安全性;8、都使用過哪些框架、平臺;9、都使用過哪些自定義控件;10、介紹你做過的哪些項目;“
非技術問題彙總
1、研究比較深入的領域有哪些;2、對業內信息的關注渠道有哪些;3、最近都讀哪些書;4、自己最擅長的技術點,最感興趣的技術領域和技術點;5、項目中用了哪些開源庫,如何避免因為引入開源庫而導致的安全性和穩定性問題;6、實習過程中做了什麼,有什麼產出;7、5枚硬幣,2正3反如何劃分為兩堆然後通過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同;8、時針走一圈,時針分針重合幾次;9、N * N的方格紙,裡面有多少個正方形;10、現在下載速度很慢,試從網絡協議的角度分析原因,並優化(網絡的5層都可以涉及)。“
HR問題彙總
1、您在前一家公司的離職原因是什麼?2、講一件你印象最深的一件事情;3、介紹一個你影響最深的項目;4、介紹你最熱愛最擅長的專業領域;5、公司實習最大的收穫是什麼;6、與上級意見不一致時,你將怎麼辦;7、自己的優點和缺點是什麼?並舉例說明?8、你的學習方法是什麼樣的?實習過程中如何學習?實習項目中遇到的最9、大困難是什麼以及如何解決的;10、說一件最能證明你能力的事情;11、針對你你申請的這個職位,你認為你還欠缺什麼;12、如果通過這次面試我們單位錄用了你,但工作一段時間卻發現你根本13、不適合這個職位,你怎麼辦;14、項目中遇到最大的困難是什麼?如何解決的;15、你的職業規劃以及個人目標;未來發展路線及求職定位;16、如果你在這次面試中沒有被錄用,你怎麼打算;17、評價下自己,評價下自己的技術水平,個人代碼量如何;18、通過哪些渠道瞭解的招聘信息,其他同學都投了哪些公司;19、業餘都有哪些愛好;20、你做過的哪件事最令自己感到驕傲;21、假如你晚上要去送一個出國的同學去機場,可單位臨時有事非你辦不可,你怎麼辦;22、就你申請的這個職位,你認為你還欠缺什麼;23、當前的offer狀況;如果BATH都給了offer該如何選;24、你對一份工作更看重哪些方面?平臺,技術,氛圍,城市,money;25、理想薪資範圍;杭州崗和北京崗選哪個;26、理想中的工作環境是什麼;27、談談你對跳槽的看法;28、說說你對行業、技術發展趨勢的看法;29、實習過程中周圍同事/同學有哪些值得學習的地方;30、家人對你的工作期望及自己的工作期望;31、如果你的工作出現失誤,給本公司造成經濟損失,你認為該怎麼辦;32、若上司在公開會議上誤會你了,該如何解決;32、是否可以實習,可以實習多久;33、在五年的時間內,你的職業規劃;34、你看中公司的什麼?或者公司的那些方面最吸引你。總結
學習技術是一條慢長而艱苦的道路,不能靠一時激情,也不是熬幾天幾夜就能學好的,必須養成平時努力學習的習慣。所以:貴在堅持!
我將自己手上的學習內容整理了一下,分享給大家,免費領取安卓進階學習視頻,源碼,面試資料
大牛一起交流討論技術地址:私信我【安卓】。 (包括跨平臺開發(Flutter,Weex)、java基礎與原理,自定義控件、NDK、架構設計、性能優化、完整商業項目開發等)
阿里P7系列視頻教程.
面試各大專題整理:面試指南
領取:關注+轉發,私信我【安卓】
最後有話說
放下你的浮躁,放下你的懶惰,靜下心來好好做你該做的事,該好好努力了!不論做什麼事,相信你自己,別讓別人的一句話將你擊倒。
如果你找不到一個堅持的理由,你就必須找到一個重新開始的理由。記住一句話:越努力,越幸運。