1. 程式人生 > >2018年終總結:阿里、騰訊、百度、華為、京東、搜狗和滴滴面試題彙集

2018年終總結:阿里、騰訊、百度、華為、京東、搜狗和滴滴面試題彙集

最新整理

  • 簡述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基礎

大家可以點選加入群:【Java高階架構進階群】:854180697 裡面有Java高階大牛直播講解知識點
走的就是高階路線,(如果你想跳槽換工作 但是技術又不夠 或者工作上遇到了瓶頸 ,我這裡有一個JAVA的免費直播課程
,講的是高階的知識點基礎不好的誤入喲,只要你有1-5年的開發經驗可以加群找我要課堂連結 注意:是免費的 沒有開發經驗誤入哦)

  • 集合類以及集合框架;HashMap與HashTable實現原理,執行緒安全性,hash衝突及處理演算法;ConcurrentHashMap;

  • 程序和執行緒的區別;

  • Java的併發、多執行緒、 執行緒模型;

  • 什麼是執行緒池,如何使用? 答:執行緒池就是事先將多個執行緒物件放到一個容器中,當使用的時候就不用new 執行緒而是直接去池中拿執行緒即可,節

  • 資料一致性如何保證;Synchronized關鍵字,類鎖,方法鎖,重入鎖;

  • Java中實現多型的機制是什麼;

  • 如何將一個Java物件序列化到檔案裡;

  • 說說你對Java反射的理解; 答:Java 中的反射首先是能夠獲取到Java 中要反射類的位元組碼, 獲取位元組碼有三種方法,

  • 同步的方法;多程序開發以及多程序應用場景;

  • 在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;
  • 理想薪資範圍;杭州崗和北京崗選哪個;
  • 理想中的工作環境是什麼;
  • 談談你對跳槽的看法;
  • 說說你對行業、技術發展趨勢的看法;
  • 實習過程中周圍同事/同學有哪些值得學習的地方;
  • 家人對你的工作期望及自己的工作期望;
  • 如果你的工作出現失誤,給本公司造成經濟損失,你認為該怎麼辦;
  • 若上司在公開會議上誤會你了,該如何解決;
  • 是否可以實習,可以實習多久;
  • 在五年的時間內,你的職業規劃;
  • 你看中公司的什麼?或者公司的那些方面最吸引你

如果你剛好是程式設計師,如果你剛好又是Java程式設計師,如果剛好你的技術又遇到了瓶頸但是你又拒絕平庸,期待蛻變,想進入一線網際網路公司或者給自己漲薪
我這裡剛好有一套自己儲存的Java進階學習資料。包含了Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服務、Dubbo框架、Redis快取、RabbitMq訊息、JVM調優、Tomcat容器、MySQL資料庫
之前的兩千人群滿了 這個是新群Java高階進階群:963944895,免費傳送的喲