基礎問題相關(問題答案在下文):
1附井、接口的意義-百度
2、抽象類的意義-百度
3想邦、內部類的作用-樂視
4裤纹、Java 虛擬機的特性-百度-樂視
5、哪些情況下的對象會被垃圾回收機制處理掉-美團-小米
6丧没、進程和線程的區(qū)別-獵豹-美團
7鹰椒、java中==和equals和hashCode的區(qū)別-樂視
8、HashMap的實現原理-美團
9呕童、string-stringbuffer-stringbuilder區(qū)別-小米-樂視-百度
10吹零、什么導致線程阻塞-58-美團
11、多線程同步機制-獵豹
12拉庵、ArrayMap對比HashMap
13灿椅、hashmap和hashtable的區(qū)別-樂視-小米-360
14、容器類之間的區(qū)別-樂視-美團
15钞支、抽象類接口區(qū)別-360
Android 方面(問題答案在下文)
16茫蛹、如何導入外部數據庫?
17烁挟、本地廣播和全局廣播有什么差別婴洼?
18、intentService作用是什么,AIDL解決了什么問題-小米
19撼嗓、Ubuntu編譯安卓系統(tǒng)-百度
20、LaunchMode應用場景-百度-小米-樂視
21且警、Touch事件傳遞流程-小米
22粉捻、View繪制流程-百度
23、多線程-360
24斑芜、Handler,Thread和HandlerThread的差別-小米
25肩刃、線程同步-百度
26、什么情況導致內存泄漏-美團
27、ANR定位和修正
28盈包、什么情況導致oom-樂視-美團
29沸呐、Service與Activity之間通信的幾種方式
30、如何保證service在后臺不被Kill
31呢燥、Requestlayout,onlayout,onDraw,DrawChild區(qū)別與聯系-獵豹
32崭添、Android動畫框架實現原理
33、Android為每個應用程序分配的內存大小是多少-美團
34叛氨、優(yōu)化自定義view百度-樂視-小米
36呼渣、volley-美團-樂視
37、Glide源碼解析
38力试、Android設計模式
39、Android屬性動畫特性-樂視-小米
40排嫌、Activity Window View三者的差別,fragment的特點-360
41畸裳、invalidate和postInvalidate的區(qū)別及使用-百度
42、LinearLayout和RelativeLayout性能對比-百度
43淳地、View刷新機制-百度-美團
44怖糊、架構設計-搜狐
騰訊公司面試題精選
45、2000萬個整數奶栖,找出第五十大的數字恭应?
46抛杨、從網絡加載一個10M的圖片,說下注意事項
47扰魂、自定義View注意事項
48、項目中常用的設計模式
49蕴茴、JVM的理解
阿里面試題精選
50劝评、進程間通信方式
51、什么是協程
52倦淀、內存泄露是怎么回事
53蒋畜、程序計數器,引到了邏輯地址(虛地址)和物理地址及其映射關系
54撞叽、數組和鏈表的區(qū)別
55姻成、二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷的具體實現
56、堆的結構
57愿棋、bitmap對象的理解
58科展、什么是深拷貝和淺拷
59、對象鎖和類鎖是否會互相影響
60糠雨、looper架構
61辛润、自定義控件原理
62、自定義控件原理
63、ActivityThread砂竖,Ams真椿,Wms的工作原理
64、Java中final乎澄,finally突硝,finalize的區(qū)別
65、一個文件中有100萬個整數置济,由空格分開解恰,在程序中判斷用戶輸入的整數是否在此文件中。說出最優(yōu)的方法
66浙于、兩個進程同時要求寫或者讀护盈,能不能實現?如何防止進程的同步羞酗?
67腐宋、volatile 的意義?
68檀轨、燒一根不均勻的繩胸竞,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子参萄,問如何用燒繩的方法來計時一個小時十五分鐘呢卫枝?
以下為上述問題的答案:
基礎問題相關:
1、接口的意義-百度
答:接口的意義用三個詞就可以概括:規(guī)范,擴展,回調.
2讹挎、抽象類的意義-百度
答:抽象類的意義可以用三句話來概括:
- 為其他子類提供一個公共的類型
- 封裝子類中重復定義的內容
- 定義抽象方法,子類雖然有不同的實現,但是定義時一致的
3校赤、內部類的作用-樂視
答:1. 內部類可以用多個實例,每個實例都有自己的狀態(tài)信息筒溃,并且與其他外圍對象的信息相互獨立痒谴。
- 在單個外圍類中,可以讓多個內部類以不同的方式實現同一個接口铡羡,或者繼承同一個類积蔚。
- 創(chuàng)建內部類對象的時刻并不依賴于外圍類對象的創(chuàng)建。
- 內部類并沒有令人迷惑的“is-a”關系烦周,他就是一個獨立的實體尽爆。
- 內部類提供了更好的封裝,除了該外圍類读慎,其他類都不能訪問
4漱贱、Java 虛擬機的特性-百度-樂視
答:Java 語言的一個非常重要的特點就是與平臺的無關性。而使用Java 虛擬機是實現這一特點的關鍵夭委。一般的高級語言如果要在不同的平臺上運行幅狮,至少需要編譯成不同的目標代碼。而引入 Java 語言虛擬機后,Java 語言在不同平臺上運行時不需要重新編譯崇摄。Java 語言使用模式 Java 虛擬機屏蔽了與具體平臺相關的信息擎值,使得 Java 語言編譯程序只需生成在 Java 虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行逐抑。Java 虛擬機在執(zhí)行字節(jié)碼時鸠儿,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。
5厕氨、哪些情況下的對象會被垃圾回收機制處理掉-美團-小米
答:Java 垃圾回收機制最基本的做法是分代回收进每。內存中的區(qū)域被劃分成不同的世代,對象根據其存活的時間被保存在對應世代的區(qū)域中命斧。一般的實現是劃分成3個世代:年輕田晚、年老和永久。內存的分配是發(fā)生在年輕世代中的国葬。當一個對象存活時間足夠長的時候贤徒,它就會被復制到年老世代中。對于不同的世代可以使用不同的垃圾回收算法胃惜。進行世代劃分的出發(fā)點是對應用中對象存活時間進行研究之后得出的統(tǒng)計規(guī)律泞莉。一般來說哪雕,一個應用中的大部分對象的存活時間都很短船殉。比如局部變量的存活時間就只在方法的執(zhí)行過程中∷购浚基于這一點利虫,對于年輕世代的垃圾回收算法就可以很有針對性。
6堡僻、進程和線程的區(qū)別-獵豹-美團
答:簡而言之,一個程序至少有一個進程,一個進程至少有一個線程糠惫。
線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高钉疫。
另外硼讽,進程在執(zhí)行過程中擁有獨立的內存單元,而多個線程共享內存牲阁,從而極大地提高了程序的運行效率固阁。
線程在執(zhí)行過程中與進程還是有區(qū)別的。每個獨立的線程有一個程序運行的入口城菊、順序執(zhí)行序列和程序的出口备燃。但是線程不能夠獨立執(zhí)行,必須依存在應用程序中凌唬,由應用程序提供多個線程執(zhí)行控制并齐。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執(zhí)行部分可以同時執(zhí)行况褪。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應用撕贞,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區(qū)別窝剖。
進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行.
進程和線程的主要差別在于它們是不同的操作系統(tǒng)資源管理方式麻掸。進程有獨立的地址空間,一個進程崩潰后赐纱,在保護模式下不會對其它進程產生影響脊奋,而線程只是一個進程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量疙描,但線程之間沒有單獨的地址空間诚隙,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯起胰,但在進程切換時久又,耗費資源較大,效率要差一些效五。但對于一些要求同時進行并且又要共享某些變量的并發(fā)操作地消,只能用線程,不能用進程畏妖。如果有興趣深入的話脉执,我建議你們看看《現代操作系統(tǒng)》或者《操作系統(tǒng)的設計與實現》。對就個問題說得比較清楚戒劫。
7半夷、java中==和equals和hashCode的區(qū)別-樂視
答:==是運算符,用于比較兩個變量是否相等迅细。equals巫橄,是Objec類的方法,用于比較兩個對象是否相等茵典。
8湘换、HashMap的實現原理-美團
答:
HashMap概述: HashMap是基于哈希表的Map接口的非同步實現。此實現提供所有可選的映射操作统阿,并允許使用null值和null鍵彩倚。此類不保證映射的順序,特別是它不保證該順序恒久不變砂吞。
HashMap的數據結構: 在java編程語言中署恍,最基本的結構就是兩種,一個是數組蜻直,另外一個是模擬指針(引用)盯质,所有的數據結構都可以用這兩個基本結構來構造的袁串,HashMap也不例外。HashMap實際上是一個“鏈表散列”的數據結構呼巷,即數組和鏈表的結合體囱修。
9、string-stringbuffer-stringbuilder區(qū)別-小米-樂視-百度
答:
String 字符串常量
StringBuffer 字符串變量(線程安全)
StringBuilder 字符串變量(非線程安全)
簡要的說王悍, String 類型和 StringBuffer 類型的主要性能區(qū)別其實在于 String 是不可變的對象, 因此在每次對 String 類型進行改變的時候其實都等同于生成了一個新的 String 對象破镰,然后將指針指向新的 String 對象,所以經常改變內容的字符串最好不要用String 压储,因為每次生成對象都會對系統(tǒng)性能產生影響鲜漩,特別當內存中無引用對象多了以后,JVM 的 GC 就會開始工作,那速度是一定會相當慢的集惋。
而如果是使用 StringBuffer 類則結果就不一樣了孕似,每次結果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象刮刑,再改變對象引用喉祭。所以在一般情況下我們推薦使用 StringBuffer ,特別是字符串對象經常改變的情況下雷绢。而在某些特別情況下泛烙, String 對象的字符串拼接其實是被 JVM 解釋成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度并不會比 StringBuffer 對象慢翘紊,而特別是以下的字符串對象生成中蔽氨, String 效率是遠要比 StringBuffer 快的:
String S1 = "This is only a" + "simple" + " test";
StringBuffer Sb = new StringBuffer("This is only a").append("simple").append("test");
你會很驚訝的發(fā)現,生成 String S1 對象的速度簡直太快了霞溪,而這個時候 StringBuffer 居然速度上根本一點都不占優(yōu)勢孵滞。其實這是 JVM 的一個把戲中捆,在 JVM 眼里鸯匹,這個 String S1 = “This is only a” + “ simple” + “test”; 其實就是: String S1 = “This is only a simple test”; 所以當然不需要太多的時間了。但大家這里要注意的是泄伪,如果你的字符串是來自另外的 String 對象的話殴蓬,速度就沒那么快了,譬如: String S2 = “This is only a”; String S3 = “ simple”; String S4 = “ test”; String S1 = S2 +S3 + S4; 這時候 JVM 會規(guī)規(guī)矩矩的按照原來的方式去做
在大部分情況下 StringBuffer > String
StringBuffer
Java.lang.StringBuffer線程安全的可變字符序列蟋滴。一個類似于 String 的字符串緩沖區(qū)染厅,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列津函,但通過某些方法調用可以改變該序列的長度和內容肖粮。
可將字符串緩沖區(qū)安全地用于多個線程《啵可以在必要時對這些方法進行同步涩馆,因此任意特定實例上的所有操作就好像是以串行順序發(fā)生的行施,該順序與所涉及的每個線程進行的方法調用順序一致。
StringBuffer 上的主要操作是 append 和 insert 方法魂那,可重載這些方法蛾号,以接受任意類型的數據。每個方法都能有效地將給定的數據轉換成字符串涯雅,然后將該字符串的字符追加或插入到字符串緩沖區(qū)中鲜结。append 方法始終將這些字符添加到緩沖區(qū)的末端;而 insert 方法則在指定的點添加字符活逆。
例如精刷,如果 z 引用一個當前內容是“start”的字符串緩沖區(qū)對象,則此方法調用 z.append("le") 會使字符串緩沖區(qū)包含“startle”蔗候,而 z.insert(4, "le") 將更改字符串緩沖區(qū)贬养,使之包含“starlet”。
在大部分情況下 StringBuilder > StringBuffer
java.lang.StringBuilder
java.lang.StringBuilder一個可變的字符序列是5.0新增的琴庵。此類提供一個與 StringBuffer 兼容的 API误算,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換迷殿,用在字符串緩沖區(qū)被單個線程使用的時候(這種情況很普遍)儿礼。如果可能,建議優(yōu)先采用該類庆寺,因為在大多數實現中蚊夫,它比 StringBuffer 要快。兩者的方法基本相同懦尝。
10知纷、什么導致線程阻塞-58-美團
線程的阻塞
為了解決對共享存儲區(qū)的訪問沖突,Java 引入了同步機制陵霉,現在讓我們來考察多個線程對共享資源的訪問琅轧,顯然同步機制已經不夠了,因為在任意時刻所要求的資源不一定已經準備好了被訪問踊挠,反過來乍桂,同一時刻準備好了的資源也可能不止一個。為了解決這種情況下的訪問控制問題效床,Java 引入了對阻塞機制的支持.
阻塞指的是暫停一個線程的執(zhí)行以等待某個條件發(fā)生(如某資源就緒)睹酌,學過操作系統(tǒng)的同學對它一定已經很熟悉了。Java 提供了大量方法來支持阻塞剩檀,下面讓我們逐一分析憋沿。
sleep() 方法:sleep() 允許 指定以毫秒為單位的一段時間作為參數,它使得線程在指定的時間內進入阻塞狀態(tài)沪猴,不能得到CPU 時間辐啄,指定的時間一過甥绿,線程重新進入可執(zhí)行狀態(tài)。 典型地则披,sleep() 被用在等待某個資源就緒的情形:測試發(fā)現條件不滿足后共缕,讓線程阻塞一段時間后重新測試,直到條件滿足為止士复。
suspend() 和 resume() 方法:兩個方法配套使用图谷,suspend()使得線程進入阻塞狀態(tài),并且不會自動恢復阱洪,必須其對應的resume() 被調用便贵,才能使得線程重新進入可執(zhí)行狀態(tài)。典型地冗荸,suspend() 和 resume() 被用在等待另一個線程產生的結果的情形:測試發(fā)現結果還沒有產生后承璃,讓線程阻塞,另一個線程產生了結果后蚌本,調用 resume() 使其恢復盔粹。
yield() 方法:yield() 使得線程放棄當前分得的 CPU 時間,但是不使線程阻塞程癌,即線程仍處于可執(zhí)行狀態(tài)舷嗡,隨時可能再次分得 CPU 時間。調用 yield() 的效果等價于調度程序認為該線程已執(zhí)行了足夠的時間從而轉到另一個線程.
wait() 和 notify() 方法:兩個方法配套使用嵌莉,wait() 使得線程進入阻塞狀態(tài)进萄,它有兩種形式,一種允許 指定以毫秒為單位的一段時間作為參數锐峭,另一種沒有參數中鼠,前者當對應的 notify() 被調用或者超出指定時間時線程重新進入可執(zhí)行狀態(tài),后者則必須對應的 notify() 被調用.
初看起來它們與 suspend() 和 resume() 方法對沒有什么分別沿癞,但是事實上它們是截然不同的援雇。區(qū)別的核心在于,前面敘述的所有方法抛寝,阻塞時都不會釋放占用的鎖(如果占用了的話)熊杨,而這一對方法則相反曙旭。
上述的核心區(qū)別導致了一系列的細節(jié)上的區(qū)別盗舰。
首先,前面敘述的所有方法都隸屬于 Thread 類桂躏,但是這一對卻直接隸屬于 Object 類钻趋,也就是說,所有對象都擁有這一對方法剂习。初看起來這十分不可思議蛮位,但是實際上卻是很自然的较沪,因為這一對方法阻塞時要釋放占用的鎖,而鎖是任何對象都具有的失仁,調用任意對象的 wait() 方法導致線程阻塞尸曼,并且該對象上的鎖被釋放。而調用 任意對象的notify()方法則導致因調用該對象的 wait() 方法而阻塞的線程中隨機選擇的一個解除阻塞(但要等到獲得鎖后才真正可執(zhí)行)萄焦。
其次控轿,前面敘述的所有方法都可在任何位置調用,但是這一對方法卻必須在 synchronized 方法或塊中調用拂封,理由也很簡單茬射,只有在synchronized 方法或塊中當前線程才占有鎖,才有鎖可以釋放冒签。同樣的道理在抛,調用這一對方法的對象上的鎖必須為當前線程所擁有,這樣才有鎖可以釋放萧恕。因此刚梭,這一對方法調用必須放置在這樣的 synchronized 方法或塊中,該方法或塊的上鎖對象就是調用這一對方法的對象票唆。若不滿足這一條件望浩,則程序雖然仍能編譯,但在運行時會出現IllegalMonitorStateException 異常惰说。
wait() 和 notify() 方法的上述特性決定了它們經常和synchronized 方法或塊一起使用磨德,將它們和操作系統(tǒng)的進程間通信機制作一個比較就會發(fā)現它們的相似性:synchronized方法或塊提供了類似于操作系統(tǒng)原語的功能,它們的執(zhí)行不會受到多線程機制的干擾吆视,而這一對方法則相當于 block 和wakeup 原語(這一對方法均聲明為 synchronized)典挑。它們的結合使得我們可以實現操作系統(tǒng)上一系列精妙的進程間通信的算法(如信號量算法),并用于解決各種復雜的線程間通信問題啦吧。
關于 wait() 和 notify() 方法最后再說明兩點:
第一:調用 notify() 方法導致解除阻塞的線程是從因調用該對象的 wait() 方法而阻塞的線程中隨機選取的您觉,我們無法預料哪一個線程將會被選擇,所以編程時要特別小心授滓,避免因這種不確定性而產生問題琳水。
第二:除了 notify(),還有一個方法 notifyAll() 也可起到類似作用般堆,唯一的區(qū)別在于在孝,調用 notifyAll() 方法將把因調用該對象的 wait() 方法而阻塞的所有線程一次性全部解除阻塞。當然淮摔,只有獲得鎖的那一個線程才能進入可執(zhí)行狀態(tài)私沮。
談到阻塞,就不能不談一談死鎖和橙,略一分析就能發(fā)現仔燕,suspend() 方法和不指定超時期限的 wait() 方法的調用都可能產生死鎖造垛。遺憾的是,Java 并不在語言級別上支持死鎖的避免晰搀,我們在編程中必須小心地避免死鎖五辽。
以上我們對 Java 中實現線程阻塞的各種方法作了一番分析,我們重點分析了 wait() 和 notify() 方法外恕,因為它們的功能最強大奔脐,使用也最靈活,但是這也導致了它們的效率較低吁讨,較容易出錯髓迎。實際使用中我們應該靈活使用各種方法,以便更好地達到我們的目的建丧。
11排龄、多線程同步機制-獵豹
線程狀態(tài):
一張圖讓你看懂JAVA線程間的狀態(tài)轉換
鎖:
鎖機制:synchronized、Lock翎朱、Condition
Java 中的鎖
并發(fā)編程:
Java并發(fā)編程:Thread類的使用
Java多線程編程總結
Java并發(fā)編程的總結與思考
Java并發(fā)編程實戰(zhàn)-----synchronized
12橄维、ArrayMap對比HashMap
13、hashmap和hashtable的區(qū)別-樂視-小米-360
14拴曲、容器類之間的區(qū)別-樂視-美團
15争舞、抽象類接口區(qū)別-360
默認的方法實現
抽象類可以有默認的方法實現完全是抽象的。接口根本不存在方法的實現
實現
子類使用extends關鍵字來繼承抽象類澈灼。如果子類不是抽象類的話竞川,它需要提供抽象類中所有聲明的方法的實現。
子類使用關鍵字implements來實現接口叁熔。它需要提供接口中所有聲明的方法的實現
構造器
抽象類可以有構造器
接口不能有構造器
與正常Java類的區(qū)別
除了你不能實例化抽象類之外委乌,它和普通Java類沒有任何區(qū)
接口是完全不同的類型
訪問修飾符
抽象方法可以有public、protected和default這些修飾符
接口方法默認修飾符是public荣回。你不可以使用其它修飾符遭贸。
main方法
抽象方法可以有main方法并且我們可以運行它
接口沒有main方法,因此我們不能運行它心软。
多繼承
抽象類在java語言中所表示的是一種繼承關系壕吹,一個子類只能存在一個父類,但是可以存在多個接口删铃。
速度
它比接口速度要快
接口是稍微有點慢的耳贬,因為它需要時間去尋找在類中實現的方法。
添加新方法
如果你往抽象類中添加新的方法泳姐,你可以給它提供默認的實現效拭。因此你不需要改變你現在的代碼。
如果你往接口中添加方法胖秒,那么你必須改變實現該接口的類缎患。
Android 方面
16、如何導入外部數據庫阎肝?
17挤渔、本地廣播和全局廣播有什么差別?
18风题、intentService作用是什么,AIDL解決了什么問題-小米
19判导、Ubuntu編譯安卓系統(tǒng)-百度
20、LaunchMode應用場景-百度-小米-樂視
21沛硅、Touch事件傳遞流程-小米
22眼刃、View繪制流程-百度
23、多線程-360
24摇肌、Handler,Thread和HandlerThread的差別-小米
25擂红、線程同步-百度
26、什么情況導致內存泄漏-美團
27围小、ANR定位和修正
28昵骤、什么情況導致oom-樂視-美團
29、Service與Activity之間通信的幾種方式
30肯适、如何保證service在后臺不被Kill
31变秦、Requestlayout,onlayout,onDraw,DrawChild區(qū)別與聯系-獵豹
32、Android動畫框架實現原理
33框舔、Android為每個應用程序分配的內存大小是多少-美團
34蹦玫、優(yōu)化自定義view百度-樂視-小米
36、volley-美團-樂視
37刘绣、Glide源碼解析
38钳垮、Android設計模式
39、Android屬性動畫特性-樂視-小米
40额港、Activity Window View三者的差別,fragment的特點-360
41饺窿、invalidate和postInvalidate的區(qū)別及使用-百度
42、LinearLayout和RelativeLayout性能對比-百度
43移斩、View刷新機制-百度-美團
44肚医、架構設計-搜狐
騰訊公司面試題精選
45、2000萬個整數向瓷,找出第五十大的數字肠套?
46、從網絡加載一個10M的圖片猖任,說下注意事項
47你稚、自定義View注意事項
48、項目中常用的設計模式
49、JVM的理解
阿里面試題精選
50刁赖、進程間通信方式
51搁痛、什么是協程
52、內存泄露是怎么回事
53宇弛、程序計數器鸡典,引到了邏輯地址(虛地址)和物理地址及其映射關系
54骏全、數組和鏈表的區(qū)別
55顾瞪、二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷的具體實現
56、堆的結構
57晰赞、bitmap對象的理解
58舅踪、什么是深拷貝和淺拷
59纽甘、對象鎖和類鎖是否會互相影響
60、looper架構
61抽碌、自定義控件原理
62悍赢、自定義控件原理
63、ActivityThread咬展,Ams泽裳,Wms的工作原理
64、Java中final破婆,finally涮总,finalize的區(qū)別
65、一個文件中有100萬個整數祷舀,由空格分開瀑梗,在程序中判斷用戶輸入的整數是否在此文件中。說出最優(yōu)的方法
66裳扯、兩個進程同時要求寫或者讀抛丽,能不能實現?如何防止進程的同步饰豺?
67亿鲜、volatile 的意義?
68冤吨、燒一根不均勻的繩蒿柳,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子漩蟆,問如何用燒繩的方法來計時一個小時十五分鐘呢垒探?
更多面試題整理正在路上,稍后補充
經驗分享
我也算是一線公司都踩過點的碼農了怠李,Facebook也踩過一次圾叼,現在就說說我自己的一些感受蛤克。
在樂視的時候我作為面試官接觸過幾十個面試者,能左右我是不是通過這個人的夷蚊,主要因素還是這個人對技術的熱愛程度构挤。因為有這種極客精神,做任何技術上的事情都是時間上的問題撬码,所以面試過程中要盡可能表現出對技術的熱愛儿倒。
那除了這種因素外版保,我們怎么做才能更大概率的進入一線公司呢呜笑?
還有一個比較重要的因素就是知識的深度。我認為深度優(yōu)于廣度彻犁,廣度通過看各種文章都能了解叫胁,但一旦碰到實際問題,這時候往往靠的是自己的知識深度汞幢。比如驼鹅,Java程序猿都知道Java是跨平臺的,因為會編譯成和平臺無關的字節(jié)碼森篷,但是有多少人會知道是怎么編譯的输钩?如果不知道虛擬機運行原理,就不可能做出手淘的Atlas容器框架仲智。再比如买乃,很多人知道四大組件職責都是什么,還會些性能優(yōu)化钓辆,但是如果不知道Framework層系統(tǒng)服務原理剪验,就做不出插件化框架。
因為一線公司業(yè)務的復雜度也決定了業(yè)務的深度前联,如果沒有較好的深度探究能力功戚,是很難勝任的,所以知識的深度也很重要似嗤。
極客精神加上某一領域知識的深度能力啸臀,就可以達到一線公司標準了。面試中非理性因素也有較大比重烁落,但是這種東西是我們沒辦法掌控的乘粒,如果因為這種因素失敗了,也沒必要氣餒顽馋。我認為能力是和回報成正比的谓厘,就算此刻沒發(fā)生,下一刻也會出現寸谜,只要掌握了我們該掌握的能力竟稳,總有一天會進入我們理想的公司。