2017 年初、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集(更新篇)...
歡迎Follow我的GitHub, 關注我的CSDN. 其余參考Android目錄.已同步微信公眾號:猛戳這里
本文在我的微信公眾號:原創 楊守樂 首發。
轉載請標明出處謝謝:
http://blog.csdn.net/xiaole03...;
本文由:【吧主的博客】分享
推薦閱讀:
如果你喜歡上了一個程序員小伙,獻給所有的程序員女友
2017 年初、阿里、騰訊、百度、華為、京東、搜狗和滴滴面試題匯集(更新篇)
學習資料(干貨匯集)不斷更新【更新于2017-2-25】
Android Studio 2.3 正式起航(玩爆Android Studio 2.3必備)
是什么讓你決定離開一家公司?
同時收到多家公司offer,怎樣選擇?
前言:
前一段時間和大牛們交流了一下,據反饋現在Android崗位也沒有以前那么多了,沒這么好找了,面臨2016年寒冬季節,大量公司模仿O2O模式導致死掉企業的很多,在加之培訓機構大量的培訓人,導致供大于求,當然這不意味著飽和,只是市場更趨于合理一些(只要技術好不用怕的)。最近結合一些面試的同學和大牛們(張旭童)反饋,前幾天聽童哥去阿里面試順便整理了下一些面試題目。希望對大家有所幫助,后期會不斷更新添加新的面試題。可以幫大家查漏不缺。以下是(2016、2017 、阿里、騰訊、百度、華為、京東、搜狗和滴滴面試題匯集)
就算寫出答案也沒必要(我寫了部分面試答案),因為開發與實際答案會有所不同,再者怕誤導大家,所以這些面試題答案還是自己去理解吧!切記:不要背答案,多理解。
最新整理
簡述synchronized?Object;Monitor機制;
簡述happen-before規則;
JUC和Object;Monitor機制區別是什么;簡述AQS原理;
簡述DCL失效原因,解決方法;
簡述nio原理;
jvm運行時數據區域有哪幾部分組成,各自作用;
gc算法有哪些;gc收集器有哪些;
簡述class加載各階段過程;class;loader有哪些模型;
簡述常用的JDK命令行工具;
簡述字節碼文件組成;
講講你平常是如何針對具體的SQL做優化;
mysql的存儲引擎有哪些,區別;
gc:內存模型;
gc:垃圾回收;
多線程:如何實現一個定時調度和循環調度的工具類。但提交任務處理不過來的時候,拒絕機制應該如何處理;線程池默認有哪幾種拒絕機制;
多線程:如何實現一個ThreadLocal;
說說你了解的一個線程安全隊列;
Atomic包的實現原理是什么;
CAS又是怎么保證原子性的;
string分析1000次循環subString用了多少內存;
Android基礎
什么是ANR 如何避免它?答:在Android 上,如果你的應用程序有一段時間響應不夠靈敏,系統會向用戶顯示一個對話框,這個對話框稱作應用程序無響應(ANR:Application Not Responding)對話框。用戶可以選擇讓程序繼續運行,但是,他們在使用你的應用程序時,并不希望每次都要處理這個對話框。因此,在程序里對響應性能的設計很重要,這樣,系統不會顯示ANR 給用戶。不同的組件發生ANR 的時間不一樣,主線程(Activity、Service)是5 秒,BroadCastReceiver 是10 秒。解決方案:將所有耗時操作,比如訪問網絡,Socket 通信,查詢大量SQL 語句,復雜邏輯計算等都放在子線程中去,然后通過handler.sendMessage、runonUITread、AsyncTask 等方式更新UI。無論如何都要確保用戶界面操作的流暢度。如果耗時操作需要讓用戶等待,那么可以在界面上顯示進度條。
View的繪制流程;自定義View如何考慮機型適配;自定義View的事件分發機制;View和ViewGroup分別有哪些事件分發相關的回調方法;自定義View如何提供獲取View屬性的接口;
Art和Dalvik對比;虛擬機原理,如何自己設計一個虛擬機(內存管理,類加載,雙親委派);JVM內存模型及類加載機制;內存對象的循環引用及避免;
ddms 和 traceView的區別;
內存回收機制與GC算法(各種算法的優缺點以及應用場景);GC原理時機以及GC對象;內存泄露場景及解決方法;
四大組件及生命周期;ContentProvider的權限管理(讀寫分離,權限控制-精確到表級,URL控制);Activity的四種啟動模式對比;Activity狀態保存于恢復;
什么是AIDL 以及如何使用;
請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系;
Fragment生命周期;Fragment狀態保存;
startActivityForResult是哪個類的方法,在什么情況下使用,如果在Adapter中使用應該如何解耦;
AsyncTask原理及不足;ntentService原理;
Activity 怎么和Service 綁定,怎么在Activity 中啟動自己對應的Service;
請描述一下Service 的生命周期;
AstncTask+HttpClient與AsyncHttpClient有什么區別;
如何保證一個后臺服務不被殺死;比較省電的方式是什么;
如何通過廣播攔截和abort一條短信;廣播是否可以請求網絡;廣播引起anr的時間限制;
進程間通信,AIDL;
事件分發中的onTouch 和onTouchEvent 有什么區別,又該如何使用?
說說ContentProvider、ContentResolver、ContentObserver 之間的關系;
請介紹下ContentProvider 是如何實現數據共享的;
Handler機制及底層實現;
Binder機制及底層實現;
ListView 中圖片錯位的問題是如何產生的;
在manifest 和代碼中如何注冊和使用BroadcastReceiver;
說說Activity、Intent、Service 是什么關系;
ApplicationContext和ActivityContext的區別;
一張Bitmap所占內存以及內存占用的計算;
Serializable 和Parcelable 的區別;
請描述一下BroadcastReceiver;
請描述一下Android 的事件分發機制;
請介紹一下NDK;
什么是NDK庫,如何在jni中注冊native函數,有幾種注冊方式;
AsyncTask 如何使用;
對于應用更新這塊是如何做的?(灰度,強制更新,分區域更新);
混合開發,RN,weex,H5,小程序(做Android的了解一些前端js等還是很有好處的);
什么情況下會導致內存泄露;
如何對Android 應用進行性能分析以及優化;
說一款你認為當前比較火的應用并設計(直播APP);
OOM的避免異常及解決方法;
屏幕適配的處理技巧都有哪些;
兩個Activity 之間跳轉時必然會執行的是哪幾個方法?答:一般情況下比如說有兩個activity,分別叫A,B,當在A 里面激活B 組件的時候, A 會調用onPause()方法,然后B 調用onCreate() ,onStart(), onResume()。這個時候B 覆蓋了窗體, A 會調用onStop()方法. 如果B 是個透明的,或者是對話框的樣式, 就不會調用A 的onStop()方法。
Java基礎
集合類以及集合框架;HashMap與HashTable實現原理,線程安全性,hash沖突及處理算法;ConcurrentHashMap;
進程和線程的區別;
Java的并發、多線程、線程模型;
什么是線程池,如何使用? 答:線程池就是事先將多個線程對象放到一個容器中,當使用的時候就不用new 線程而是直接去池中拿線程即可,節省了開辟子線程的時間,提高的代碼執行效率。
數據一致性如何保證;Synchronized關鍵字,類鎖,方法鎖,重入鎖;
Java中實現多態的機制是什么;
如何將一個Java對象序列化到文件里;
說說你對Java反射的理解; 答:Java 中的反射首先是能夠獲取到Java 中要反射類的字節碼, 獲取字節碼有三種方法,1.Class.forName(className) 2.類名.class 3.this.getClass()。然后將字節碼中的方法,變量,構造函數等映射成相應的Method、Filed、Constructor 等類,這些類提供了豐富的方法可以被我們所使用。
同步的方法;多進程開發以及多進程應用場景;
在Java中wait和seelp方法的不同;答:最大的不同是在等待時wait 會釋放鎖,而sleep 一直持有鎖。wait 通常被用于線程間交互,sleep 通常被用于暫停執行。
synchronized 和volatile 關鍵字的作用;答:1)保證了不同線程對這個變量進行操作時的可見性,即一個線程修改了某個變量的值,這新值對其他線程來說是立即可見的。2)禁止進行指令重排序。
volatile 本質是在告訴jvm 當前變量在寄存器(工作內存)中的值是不確定的,需要從主存中讀取;synchronized 則是鎖定當前變量,只有當前線程可以訪問該變量,其他線程被阻塞住。1.volatile 僅能使用在變量級別;synchronized 則可以使用在變量、方法、和類級別的2.volatile 僅能實現變量的修改可見性,并不能保證原子性;synchronized 則可以保證變量的修改可見性和原子性3.volatile 不會造成線程的阻塞;synchronized 可能會造成線程的阻塞。4.volatile 標記的變量不會被編譯器優化;synchronized 標記的變量可以被編譯器優化
服務器只提供數據接收接口,在多線程或多進程條件下,如何保證數據的有序到達;
ThreadLocal原理,實現及如何保證Local屬性;
String StringBuilder StringBuffer對比;
你所知道的設計模式有哪些; 答:Java 中一般認為有23 種設計模式,我們不需要所有的都會,但是其中常用的幾種設計模式應該去掌握。下面列出了所有的設計模式。需要掌握的設計模式我單獨列出來了,當然能掌握的越多越好。總體來說設計模式分為三大類:創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。
Java如何調用c、c++語言;
接口與回調;回調的原理;寫一個回調demo;
泛型原理,舉例說明;解析與分派;
抽象類與接口的區別;應用場景;抽象類是否可以沒有方法和屬性;
靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?
修改對象A的equals方法的簽名,那么使用HashMap存放這個對象實例的時候,會調用哪個equals方法;
說說你對泛型的了解;
Java的異常體系;
如何控制某個方法允許并發訪問線程的個數;
動態代理的區別,什么場景使用;
數據結構與算法
堆和棧在內存中的區別是什么(數據結構方面以及實際實現方面);
最快的排序算法是哪個?給阿里2萬多名員工按年齡排序應該選擇哪個算法?堆和樹的區別;寫出快排代碼;鏈表逆序代碼;
求1000以內的水仙花數以及40億以內的水仙花數;
子串包含問題(KMP 算法)寫代碼實現;
萬億級別的兩個URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分組->多文件讀寫效率->磁盤尋址以及應用層面對尋址的優化)
蟻群算法與蒙特卡洛算法;
寫出你所知道的排序算法及時空復雜度,穩定性;
百度POI中如何試下查找最近的商家功能(坐標鏡像+R樹)。
其他
死鎖的四個必要條件;
常見編碼方式;utf-8編碼中的中文占幾個字節;int型幾個字節;
實現一個Json解析器(可以通過正則提高速度);
MVC MVP MVVM; 常見的設計模式;寫出觀察者模式的代碼;
TCP的3次握手和四次揮手;TCP與UDP的區別;
HTTP協議;HTTP1.0與2.0的區別;HTTP報文結構;
HTTP與HTTPS的區別以及如何實現安全性;
都使用過哪些框架、平臺;
都使用過哪些自定義控件;
介紹你做過的哪些項目;
非技術問題匯總
研究比較深入的領域有哪些;
對業內信息的關注渠道有哪些;
最近都讀哪些書;
自己最擅長的技術點,最感興趣的技術領域和技術點;
項目中用了哪些開源庫,如何避免因為引入開源庫而導致的安全性和穩定性問題;
實習過程中做了什么,有什么產出;
5枚硬幣,2正3反如何劃分為兩堆然后通過翻轉讓兩堆中正面向上的硬幣和反面向上的硬幣個數相同;
時針走一圈,時針分針重合幾次;
N * N的方格紙,里面有多少個正方形;
現在下載速度很慢,試從網絡協議的角度分析原因,并優化(網絡的5層都可以涉及)。
HR問題匯總
您在前一家公司的離職原因是什么?
講一件你印象最深的一件事情;
介紹一個你影響最深的項目;
介紹你最熱愛最擅長的專業領域;
公司實習最大的收獲是什么;
與上級意見不一致時,你將怎么辦;
自己的優點和缺點是什么?并舉例說明?
你的學習方法是什么樣的?實習過程中如何學習?實習項目中遇到的最大困難是什么以及如何解決的;
說一件最能證明你能力的事情;
針對你你申請的這個職位,你認為你還欠缺什么;
如果通過這次面試我們單位錄用了你,但工作一段時間卻發現你根本不適合這個職位,你怎么辦;
項目中遇到最大的困難是什么?如何解決的;
你的職業規劃以及個人目標;未來發展路線及求職定位;
如果你在這次面試中沒有被錄用,你怎么打算;
評價下自己,評價下自己的技術水平,個人代碼量如何;
通過哪些渠道了解的招聘信息,其他同學都投了哪些公司;
業余都有哪些愛好;
你做過的哪件事最令自己感到驕傲;
假如你晚上要去送一個出國的同學去機場,可單位臨時有事非你辦不可,你怎么辦;
就你申請的這個職位,你認為你還欠缺什么;
當前的offer狀況;如果BATH都給了offer該如何選;
你對一份工作更看重哪些方面?平臺,技術,氛圍,城市,money;
理想薪資范圍;杭州崗和北京崗選哪個;
理想中的工作環境是什么;
談談你對跳槽的看法;
說說你對行業、技術發展趨勢的看法;
實習過程中周圍同事/同學有哪些值得學習的地方;
家人對你的工作期望及自己的工作期望;
如果你的工作出現失誤,給本公司造成經濟損失,你認為該怎么辦;
若上司在公開會議上誤會你了,該如何解決;
是否可以實習,可以實習多久;
在五年的時間內,你的職業規劃;
你看中公司的什么?或者公司的那些方面最吸引你。
大家可以加群和大牛們(徐宜生、張濤等)一起學習:由于群已滿
如果進群,可以加我的微信,我拉你進群,我的微信二維碼:
看完本文有收獲?請轉發分享給更多人
關注「楊守樂」,提升編程技能
推薦文章
1、Android面試經驗大解密
2、Android的viewHolder模式解剖
3、Android中必須學習的八大開源項目(開發項目必看)
4、如何自學Android, 教大家玩爆Android(成為大神必看)
5、2016 Google hosts 持續更新【更新 于:2016-08-27】(免費翻墻必備)
6、Android面試經驗總結(面試成功必備)
7、Android Studio 個性化設置(裝逼必備)
8、Android Studio 2.2 正式起航(玩爆Android Studio 2.2必備)
9、Android Studio 2.3 正式起航(玩爆Android Studio 2.3必備)
AndroidStudio 2.2 新功能實例代碼:
Android Studio 2.2新功能實例源碼(玩爆Android Studio 2.2必備)
AndroidStudio 2.2新功能介紹:
What's new in Android development tools - Google I/O 2016(YouTube視頻需要自備梯子)
【GitHub】https://github.com/xiaole0310
【csdn博客】http://blog.csdn.net/xiaole0313
【新浪微博】http://weibo.com/u/5439466748
【知乎】http://www.zhihu.com/people/y...
【簡書】http://www.jianshu.com/users/...
【技術群】279126311 [滿]
【技術群】484572225 [未]
【Email】ysle0313@gmail.com
如果你有好的文章想和大家分享,歡迎投稿,直接向我郵箱投稿:1733563441@qq.com 即可。
歡迎掃描關注我們的微信公眾號(ysle_0313),不要錯過每一篇干貨~
一鍵關注我們微信公眾號ID:ysle_0313
總結
以上是生活随笔為你收集整理的2017 年初、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集(更新篇)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R-ArcGIS探秘(1)安装以及Sam
- 下一篇: MVC概述