拼多多、餓了麼、螞蟻金服Java面試題大集合
自己當初找工作時參加過眾多一線網際網路公司的Java研發面試,這段時間處於寒冬,然而前幾天跳槽找工作,兩天面了3家,已經拿了兩個offer,覺得可以和大家分享下:
下面為拼多多、餓了麼、螞蟻金服、哈囉出行等公司給我留下較深印象的一些java面試題
- private修飾的方法可以通過反射訪問,那麼private的意義是什麼
- Java類初始化順序
- 對方法區和永久區的理解以及它們之間的關係
- 一個java檔案有3個類,編譯後有幾個class檔案
- 區域性變數使用前需要顯式地賦值,否則編譯通過不了,為什麼這麼設計
- ReadWriteLock讀寫之間互斥嗎
- Semaphore拿到執行權的執行緒之間是否互斥
- 寫一個你認為最好的單例模式
- B樹和B+樹是解決什麼樣的問題的,怎樣演化過來,之間區別
- 寫一個生產者消費者模式
- 寫一個死鎖
- cpu 100%怎樣定位
- String a = "ab"; String b = "a" + "b"; a == b 是否相等,為什麼
- int a = 1; 是原子性操作嗎
- 可以用for迴圈直接刪除ArrayList的特定元素嗎?可能會出現什麼問題?怎樣解決
- 新的任務提交到執行緒池,執行緒池是怎樣處理
- AQS和CAS原理
- synchronized底層實現原理
- volatile作用,指令重排相關
- AOP和IOC原理
- Spring怎樣解決迴圈依賴的問題
- dispatchServlet怎樣分發任務的
- mysql給離散度低的欄位建立索引會出現什麼問題,具體說下原因
其它經常問的HashMap底層實現原理,常規的多執行緒問題考的太多了,沒什麼新意就不寫了
平時不能光抱著應用Java的目的去學習,要深入瞭解每個知識點背後底層實現原理,為什麼這麼設計,比如問爛的HashMap 既然有hash進行排位還需要equals()作用是什麼?就這個問題照樣能問倒一些人,所以一定要摳細節,真的把每個知識點搞懂
寫在前面的話:
1.面試主要分為兩塊:一塊是考查工程師對基礎知識(包括了技術廣度、深度、對技術的熱情度等)的掌握程度,因為基礎知識決定了一個技術人員發展的上限;另一塊是考察工程師的工程能力,比如:做過哪些專案?遇到最難的問題怎樣解決的?說說最有成就感的一項任務?工程能力是考察工程師當下能為公司帶來的利益。其它考核方面:抗壓性、合作能力...暫且不說。
2.Java只是一門語言,即使是Java工程師也不能侷限於Java,要從面嚮物件語言本身,甚至從整個計算機體系,從工程實際出發看Java。
3.很多知識在一般公司的開發中是用不到的,常有人戲稱:“面試造火箭,工作擰螺絲”,但這只是通常情況下公司對程式設計師的標準——迅速產出,完成任務。個人觀點:工程師為了自己職業的發展不能侷限於公司對自己的要求,不能停留在應用層面,要能夠很好地掌握基礎知識,要多看原始碼,自己多實踐,學成記得產出,比如多為開源社群貢獻程式碼,幫助初學者指路等。
有沒有發現一個有意思的事情:“面試造火箭,工作擰螺絲”的背後其實是考察者內心深處普遍都認可基礎知識的重要性(這一點僅為個人觀點,不展開講哈)。
--以下為解答大綱,部分作了擴充套件
1. 這題是一道思想題目,天天會碰到private,有沒有想過這個問題?談談對java設計的認識程度,主要抓住兩點:1.java的private修飾符並不是為了絕對安全性設計的,更多是對使用者常規使用java的一種約束;2.從外部對物件進行常規呼叫時,能夠看到清晰的類結構。
2. 先說結論: 基類靜態程式碼塊,基類靜態成員欄位(並列優先順序,按照程式碼中出現的先後順序執行,且只有第一次載入時執行)——>派生類靜態程式碼塊,派生類靜態成員欄位(並列優先順序,按照程式碼中出現的先後順序執行,且只有第一次載入時執行)——>基類普通程式碼塊,基類普通成員欄位(並列優點級,按程式碼中出現先後順序執行)——>基類建構函式——>派生類普通程式碼塊,派生類普通成員欄位(並列優點級,按程式碼中出現先後順序執行)——>派生類建構函式
程式碼驗證:
class Log { public static String initLog(String log) { System.out.println(log);return null; } } /** * 基類 */ class Base { static { System.out.println("Base Static Block 1"); } private static String staticValue = Log.initLog("Base Static Fiels"); static { System.out.println("Base Static Block 2"); } { System.out.println("Base Normal Block 1"); } private String value = Log.initLog("Base Normal Field"); { System.out.println("Base Normal Block 2"); } Base() { System.out.println("Base Constructor"); } } /** * 派生類 */ public class Derived extends Base { static { System.out.println("Static Block 1"); } private static String staticValue = Log.initLog("Static Fiels"); static { System.out.println("Static Block 2"); } { System.out.println("Normal Block 1"); } private String value = Log.initLog("Normal Field"); { System.out.println("Normal Block 2"); } Derived() { System.out.println("Derived Constructor"); } /** * 主執行緒 */ public static void main(String[] args) { Derived derived = new Derived(); }
控制檯結果輸出:
Base Static Block 1 Base Static Fiels Base Static Block 2 Static Block 1 Static Fiels Static Block 2 Base Normal Block 1 Base Normal Field Base Normal Block 2 Base Constructor Normal Block 1 Normal Field Normal Block 2 Derived Constructor
3. 方法區是jvm規範裡要求的,永久區是Hotspot虛擬機器對方法區的具體實現,前者是規範,後者是實現方式。jdk1.8作了改變。本題看看對方在思想層面對jvm的理解程度,很基礎的一個題目。
4. 檔案中有幾個類編譯後就有幾個class檔案。
5. 成員變數是可以不經初始化的,在類載入過程的準備階段即可給它賦予預設值,但區域性變數使用前需要顯式賦予初始值,javac不是推斷不出不可以這樣做,而是沒有這樣做,對於成員變數而言,其賦值和取值訪問的先後順序具有不確定性,對於成員變數可以在一個方法呼叫前賦值,也可以在方法呼叫後進行,這是執行時發生的,編譯器確定不了,交給jvm去做比較合適。而對於區域性變數而言,其賦值和取值訪問順序是確定的。這樣設計是一種約束,盡最大程度減少使用者犯錯的可能(假使區域性變數可以使用預設值,可能總會無意間忘記賦值,進而導致不可預期的情況出現)。
6. ReadWriteRock 讀寫鎖,使用場景可分為讀/讀、讀/寫、寫/寫,除了讀和讀之間是共享的,其它都是互斥的,接著會討論下怎樣實現互斥鎖和同步鎖的, 想了解對方對AQS,CAS的掌握程度,技術學習的深度。
7. Semaphore拿到執行權的執行緒之間是否互斥,Semaphore、CountDownLatch、CyclicBarrier、Exchanger 為java併發程式設計的4個輔助類,面試中常問的 CountDownLatch CyclicBarrier之間的區別,面試者肯定是經常碰到的, 所以問起來意義不大,Semaphore問的相對少一些,有些知識點如果沒有使用過還是會忽略,Semaphore可有多把鎖,可允許多個執行緒同時擁有執行權,這些有執行權的執行緒如併發訪問同一物件,會產生執行緒安全問題。
8. 寫一個你認為最好的單例模式, 這題面試者都可能遇到過,也算是工作中最常遇到的設計模式之一,想考察面試者對經常碰到的題目的理解深度,單例一共有幾種實現方式:餓漢、懶漢、靜態內部類、列舉、雙檢鎖,要是寫了簡單的懶漢式可能就會問:要是多執行緒情況下怎樣保證執行緒安全呢,面試者可能說雙檢鎖,那麼聊聊為什麼要兩次校驗,接著會問光是雙檢鎖還會有什麼問題,這時候基礎好的面試者就會說了:物件在定義的時候加上volatile關鍵字,接下來會繼續引申討論下原子性和可見性、java記憶體模型、類的載入過程。
其實沒有最好,列舉方式、靜態內部類、雙檢鎖都是可以的,就想聽下對不同的單例寫法認識程度,寫個雙檢鎖的方式吧:
public class Singleton { private Singleton() { } private volatile static Singleton instance; public static Singleton getInstance() { if (null == instance) { synchronized (Singleton.class) { if (null == instance) { instance = new Singleton(); } } } return instance; } }
9. B樹和B+樹,這題既問mysql索引的實現原理,也問資料結構基礎,首先從二叉樹說起,因為會產生退化現象,提出了平衡二叉樹,再提出怎樣讓每一層放的節點多一些來減少遍歷高度,引申出m叉樹,m叉搜尋樹同樣會有退化現象,引出m叉平衡樹,也就是B樹,這時候每個節點既放了key也放了value,怎樣使每個節點放盡可能多的key值,以減少遍歷高度呢(訪問磁碟次數),可以將每個節點只放key值,將value值放在葉子結點,在葉子結點的value值增加指向相鄰節點指標,這就是優化後的B+樹。然後談談資料庫索引失效的情況,為什麼給離散度低的欄位(如性別)建立索引是不可取的,查詢資料反而更慢,如果將離散度高的欄位和性別建立聯合索引會怎樣,有什麼需要注意的?
10. 生產者消費者模式,synchronized鎖住一個LinkedList,一個生產者,只要佇列不滿,生產後往裡放,一個消費者只要佇列不空,向外取,兩者通過wait()和notify()進行協調,寫好了會問怎樣提高效率,最後會聊一聊訊息佇列設計精要思想及其使用。
11. 寫一個死鎖,覺得這個問題真的很不錯,經常說的死鎖四個條件,背都能背上,那寫一個看看,思想為:定義兩個ArrayList,將他們都加上鎖A,B,執行緒1,2,1拿住了鎖A ,請求鎖B,2拿住了鎖B請求鎖A,在等待對方釋放鎖的過程中誰也不讓出已獲得的鎖。
public class DeadLock { public static void main(String[] args) { final List<Integer> list1 = Arrays.asList(1, 2, 3); final List<Integer> list2 = Arrays.asList(4, 5, 6); new Thread(new Runnable() { @Override public void run() { synchronized (list1) { for (Integer i : list1) { System.out.println(i); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (list2) { for (Integer i : list2) { System.out.println(i); } } } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (list2) { for (Integer i : list2) { System.out.println(i); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (list1) { for (Integer i : list1) { System.out.println(i); } } } } }).start(); } }
12. cpu 100%怎樣定位,這題是一個應用性題目,網上搜一下即可,比較常見,說實話,把這題放進來有點後悔。
13. String a = "ab"; String b = "a" + "b"; a ,b 是相等的(各位要寫程式碼驗證一下,我看到有人寫了錯誤答案)。常規的問法是new一個物件賦給變數,問:這行表示式建立了幾個物件,但這樣的題目太常見。
14. int a = 1; 是原子性操作。
15. for迴圈直接刪除ArrayList中的特定元素是錯的,不同的for迴圈會發生不同的錯誤,泛型for會丟擲 ConcurrentModificationException,普通的for想要刪除集合中重複且連續的元素,只能刪除第一個。
錯誤原因:開啟JDK的ArrayList原始碼,看下ArrayList中的remove方法(注意ArrayList中的remove有兩個同名方法,只是入參不同,這裡看的是入參為Object的remove方法)是怎麼實現的,一般情況下程式的執行路徑會走到else路徑下最終呼叫faseRemove方法,會執行System.arraycopy方法,導致刪除元素時涉及到陣列元素的移動。針對普通for迴圈的錯誤寫法,在遍歷第一個字串b時因為符合刪除條件,所以將該元素從陣列中刪除,並且將後一個元素移動(也就是第二個字串b)至當前位置,導致下一次迴圈遍歷時後一個字串b並沒有遍歷到,所以無法刪除。針對這種情況可以倒序刪除的方式來避免
解決方案:用 Iterator。
List<String> list = new ArrayList(Arrays.asList("a", "b", "b" , "c", "d")); Iterator<String> iterator = list.iterator(); while(iterator.hasNext()) { String element = iterator.next(); if(element.equals("b")) { iterator.remove(); }
將本問題擴充套件一下,下面的程式碼可能會出現什麼問題?
ArrayList<String> array = new ArrayList<String>(); array.add(1,"hello world");
16. 第一步 :執行緒池判斷核心執行緒池裡的執行緒是否都在執行任務。如果不是,則建立一個新的工作執行緒來執行任務。如果核心執行緒池裡的執行緒都在執行任務,則執行第二步。
第二步 :執行緒池判斷工作佇列是否已經滿。如果工作佇列沒有滿,則將新提交的任務儲存在這個工作佇列裡進行等待。如果工作佇列滿了,則執行第三步。
第三步 :執行緒池判斷執行緒池的執行緒是否都處於工作狀態。如果沒有,則建立一個新的工作執行緒來執行任務。如果已經滿了,則交給飽和策略來處理這個任務。
17. 抽象佇列同步器AQS(AbstractQueuedSychronizer),如果說java.util.concurrent的基礎是CAS的話,那麼AQS就是整個Java併發包的核心了,ReentrantLock、CountDownLatch、Semaphore等都用到了它。AQS實際上以雙向佇列的形式連線所有的Entry,比方說ReentrantLock,所有等待的執行緒都被放在一個Entry中並連成雙向佇列,前面一個執行緒使用ReentrantLock好了,則雙向佇列實際上的第一個Entry開始執行。AQS定義了對雙向佇列所有的操作,而只開放了tryLock和tryRelease方法給開發者使用,開發者可以根據自己的實現重寫tryLock和tryRelease方法,以實現自己的併發功能。
比較並替換CAS(Compare and Swap),假設有三個運算元:記憶體值V、舊的預期值A、要修改的值B,當且僅當預期值A和記憶體值V相同時,才會將記憶體值修改為B並返回true,否則什麼都不做並返回false,整個比較並替換的操作是一個原子操作。CAS一定要volatile變數配合,這樣才能保證每次拿到的變數是主記憶體中最新的相應值,否則舊的預期值A對某條執行緒來說,永遠是一個不會變的值A,只要某次CAS操作失敗,下面永遠都不可能成功。
CAS雖然比較高效的解決了原子操作問題,但仍存在三大問題。
- 迴圈時間長開銷很大。
- 只能保證一個共享變數的原子操作。
- ABA問題。
18. synchronized (this)原理:涉及兩條指令:monitorenter,monitorexit;再說同步方法,從同步方法反編譯的結果來看,方法的同步並沒有通過指令monitorenter和monitorexit來實現,相對於普通方法,其常量池中多了ACC_SYNCHRONIZED標示符。
JVM就是根據該標示符來實現方法的同步的:當方法被呼叫時,呼叫指令將會檢查方法的 ACC_SYNCHRONIZED 訪問標誌是否被設定,如果設定了,執行執行緒將先獲取monitor,獲取成功之後才能執行方法體,方法執行完後再釋放monitor。在方法執行期間,其他任何執行緒都無法再獲得同一個monitor物件。
這個問題會接著追問:java物件頭資訊,偏向鎖,輕量鎖,重量級鎖及其他們相互間轉化。
19. 理解volatile關鍵字的作用的前提是要理解Java記憶體模型,volatile關鍵字的作用主要有兩點:
- 多執行緒主要圍繞可見性和原子性兩個特性而展開,使用volatile關鍵字修飾的變數,保證了其在多執行緒之間的可見性,即每次讀取到volatile變數,一定是最新的資料
- 程式碼底層執行不像我們看到的高階語言—-Java程式這麼簡單,它的執行是Java程式碼–>位元組碼–>根據位元組碼執行對應的C/C++程式碼–>C/C++程式碼被編譯成組合語言–>和硬體電路互動,現實中,為了獲取更好的效能JVM可能會對指令進行重排序,多執行緒下可能會出現一些意想不到的問題。使用volatile則會對禁止語義重排序,當然這也一定程度上降低了程式碼執行效率
從實踐角度而言,volatile的一個重要作用就是和CAS結合,保證了原子性,詳細的可以參見java.util.concurrent.atomic包下的類,比如AtomicInteger。
20. AOP 和 IOC是Spring精華部分,AOP可以看做是對OOP的補充,對程式碼進行橫向的擴充套件,通過代理模式實現,代理模式有靜態代理,動態代理,Spring利用的是動態代理,在程式執行過程中將增強程式碼織入原始碼中。IOC是控制反轉,將物件的控制權交給Spring框架,使用者需要使用物件無需建立,直接使用即可。AOP和IOC最可貴的是它們的思想。
21. 什麼是迴圈依賴,怎樣檢測出迴圈依賴,Spring迴圈依賴有幾種方式,使用基於setter屬性的迴圈依賴為什麼不會出現問題,接下來會問:Bean的生命週期。
22. 上一張圖,從這張圖去理解
<img src="https://pic3.zhimg.com/v2-976a59b61d42ddbf93ceb26aa3ba44e6_b.jpg" data-caption="" data-size="normal" data-rawwidth="860" data-rawheight="406" data-default-watermark-src="https://pic2.zhimg.com/v2-78a7d1f6188d0f2e45c45cd9d7ca5e01_b.jpg" class="origin_image zh-lightbox-thumb" width="860" data-original="https://pic3.zhimg.com/v2-976a59b61d42ddbf93ceb26aa3ba44e6_r.jpg">
23. 先上結論:重複性較強的欄位,不適合新增索引。mysql給離散度低的欄位,比如性別設定索引,再以性別作為條件進行查詢反而會更慢。
一個表可能會涉及兩個資料結構(檔案),一個是表本身,存放表中的資料,另一個是索引。索引是什麼?它就是把一個或幾個欄位(組合索引)按規律排列起來,再附上該欄位所在行資料的實體地址(位於表中)。比如我們有個欄位是年齡,如果要選取某個年齡段的所有行,那麼一般情況下可能需要進行一次全表掃描。但如果以這個年齡段建個索引,那麼索引中會按年齡值根據特定資料結構建一個排列,這樣在索引中就能迅速定位,不需要進行全表掃描。為什麼性別不適合建索引呢?因為訪問索引需要付出額外的IO開銷,從索引中拿到的只是地址,要想真正訪問到資料還是要對錶進行一次IO。假如你要從表的100萬行資料中取幾個資料,那麼利用索引迅速定位,訪問索引的這IO開銷就非常值了。但如果是從100萬行資料中取50萬行資料,就比如性別欄位,那你相對需要訪問50萬次索引,再訪問50萬次表,加起來的開銷並不會比直接對錶進行一次完整掃描小。
當然如果把性別欄位設為表的聚集索引,那麼就肯定能加快大約一半該欄位的查詢速度了。聚集索引指的是表本身資料按哪個欄位的值來進行排序。因此,聚集索引只能有一個,而且使用聚集索引不會付出額外IO開銷。當然你得能捨得把聚集索引這麼寶貴資源用到性別欄位上。
可以根據業務場景需要,將性別和其它欄位建立聯合索引,比如時間戳,但是建立索引記得把時間戳欄位放在性別前面。
後加
- jvm gc 複製演算法是怎樣實現的
- 註解的原理
- 程序間通訊的方式有哪些
- ReentrantLock 是可重入鎖,什麼是可重入鎖
- 執行緒執行過程中遇到異常會發生什麼,怎樣處理
- HashMap put()元素產生衝突,為什麼用LinkedList(拉鍊法)而不用ArrayList解決,產生衝突時key值不等,新元素怎樣加入連結串列,為什麼這麼設計(jdk1.8之前)
- 雙檢鎖寫一個單例模式,為什麼要用volatile修飾物件,Object object = new Object(); object為null嗎?為什麼
- Object object = new Object(); 初始化的順序是什麼在jvm各區域做了什麼
小編特地精心準備了一些關於面試的資料分享給大家,
歡迎工作一到五年的 Java 的工程師朋友們加入的 Java 架構開發:705-127-209
本群提供免費的學習指導架構資料以及免費的解答
不懂得問題都可以在本群提出來之後還會有職業生涯規劃以及面試指導
相關推薦
拼多多、餓了麼、螞蟻金服Java面試題大集合
開發十年,就只剩下這套架構體系了! >>>
螞蟻金服java面試題
螞蟻金服 電話一面 1、自我介紹、自己做的專案和技術領域 2、專案中的監控:那個監控指標常見的有哪些? 3、微服務涉及到的技術以及需要注意的問題有哪些? 4、註冊中心你瞭解了哪些? 5、consul 的可靠性你瞭解嗎? 6、consul 的機制你有沒有具體深入過?有沒有和
2018面試總結(阿里巴巴螞蟻金服、餓了麼、人人車等)
前言 今年跳槽換工作,一共面試了8家公司,拿到了6個offer,其中包括阿里巴巴螞蟻金服(外派杭州)、餓了麼、人人車等公司,總體來說還算是順利,因為也沒面的特別多,想把今年的面試情況總結一下,給自己做一個記錄,也希望給其他人一點幫助。 面試記錄 星雲鏈
Java面試題-阿里、餓了麼、鏈家、攜程
一、J2SE部分 1、Java基礎 ==與equals()方法的區別? 1. ==在比較基本資料型別時比較的是值,比較兩個物件時比較的是地址值; 2. equals()方法存在於Object類中,Object類中equals()方法底層依賴的是==操作, 在所有沒
資料庫索引(58,、蓋婭互娛、餓了麼、百度、貝殼金控、)
資料庫索引(58,、蓋婭互娛、餓了麼、百度、貝殼金控、) 樓主要好好研究資料庫的索引,太多的面試都問道了 具體操作: 1.建立索引:新增聚集唯一索引 set nocount off create unique clustered index employedID(索引的名
喜茶、餓了麼迴應網友喝出套裝異物:與我無關;樂視網:法院裁定查封、扣押或者凍結公司等 9002 萬元 | 極客早知道
喜茶、餓了麼迴應網友喝出套裝異物:與我無關 12 月 3 日晚間,微博網友 @vermix 發文稱:「你們興業太古匯店的外賣製作也太可怕了吧…今天喝到最後居然喝出來一個套套?」該網友晒出的圖片顯示,其訂購的奶茶中出現了套裝異物。據悉,該訂單由餓了麼跑腿代購買。鑑於喜茶的熱度,訊息曝光立即
如何看待知乎、餓了麼後端的招聘紛紛由 Python 漸漸轉向 Java?
一開始會覺得php很快,python很靈活,Ruby很拽,c很高深,nodejs很裝逼,JAVA又笨重又麻煩又嚴格又死板。 維護三到五年的大型專案之後才會懂得JAVA的好啊。 還有人說我專案小的時候無所謂,大了之後重新開發一遍都來得及,說這種話的基本上都是不懂
Android 仿美團選擇城市、微信通訊錄、餓了麼點餐列表的導航懸停分組索引列表
SuspensionIndexBar簡介:快速實現分組懸停、右側索引導航聯動 列表。如 美團選擇城市介面,微信通訊錄介面、餓了麼點餐介面等。SuspensionIndexBar相關博文:喜歡隨手點個star 多謝在哪裡找到我:我的github:我的CSDN部落格:我的稀土掘金
外賣產品(餓了麼、美團外賣、百度外賣)競品分析
餓了麼 a.雖然三款App都可以訂早餐,但餓了麼的早餐是在首頁顯示的,而美團外賣和百度外賣是線上下推廣,使用者在線上輸入早餐搜尋,不是很方便,有些線上下沒有看到的使用者不知道有早餐這個功能。這是餓了麼的一個特色,可以提前預訂,滿足使用者不想起早,上班上學沒時間做早餐,但又
最近一次螞蟻金服Java面試經歷!穩妥了!
電話一面 1、自我介紹、自己做的專案和技術領域 2、專案中的監控:那個監控指標常見的哪些? 3、微服務涉及到的技術以及需要注意的問題有哪些? 4、註冊中心你瞭解了哪些? 5、consul 的可靠性你瞭解嗎? 6、consul 的機制你有沒有具體深入過?有沒有和其他的註冊
速來圍觀老田的螞蟻金服Java面試經歷!
電話一面 1、自我介紹、自己做的專案和技術領域 2、專案中的監控:那個監控指標常見的哪些? 3、微服務涉及到的技術以及需要注意的問題有哪些? 4、註冊中心你瞭解了哪些? 5、consul 的可靠性你瞭解嗎? 6、consul 的機制你有沒有具體深入過?有沒有和其他的註冊中心對
螞蟻金服 java三面:metaQ訊息中介軟體 + GC演算法 + MySQL資料同步
一面: JVM資料儲存模型,新生代、年老代的構造? java GC演算法,什麼時候會觸發minor gc,什麼時候會觸發full gc? GC 可達性分析中哪些算是GC ROOT? 你熟悉的JVM調優引數,使用過哪些調優工具? Java 有什麼鎖型別?
剛剛,螞蟻金服榮膺“中國金融大資料領軍企業”稱號
小螞蟻說: 2018中國軟體和資訊服務領域十大領軍企業、人物及產業園區評選活動是業界最權威和最受關注的評選之一。12月20日,在北京舉行的“2018中國軟體大會”正式宣佈螞蟻金服成為“2018中國大資料金融領軍企業”。 螞蟻金服運營專家吳鍇領取“中國金融大資料領軍企業”獎牌 2018年12月20日
「面試必備」常見Java面試題大綜合 馬雲見了都點贊
一、Java基礎 1、Arrays.sort實現原理和Collections.sort實現原理 答:Collections.sort方法底層會呼叫Arrays.sort方法,底層實現都是TimeSort實現的。TimSort演算法就是找到已經排好序資料的子序列,然後對剩餘部分排序,然後合併起來. 2、f
五面螞蟻金服Java研發崗:資料結構+Redis+分散式+微服務
面試問題如下: 一面(主要看基礎):
2019最新螞蟻金服Java 4面真題
下週開始正式進入金三銀四,找好工作的黃金時間。很多同學私信留言
金三銀四:螞蟻金服JAVA開發面試題及答案之一面(持續更新)
開發十年,就只剩下這套架構體系了! >>>
金三銀四:螞蟻金服JAVA後端面試題及答案之二面
開發十年,就只剩下這套架構體系了! >>>
面試完還唄、拼多多、螞蟻金服、趣頭條、京東到家之後,我知道了這些
最近一個朋友,在謀求架構師崗位的工作,經歷了魔都的一批網際網路公司的洗禮,讓他把面試經歷整理了一下,給大家一些經驗吧,希望各位後面去這些公司面試的時候,能有些心理準備。 還唄 地點:2號線金科路地鐵站(長泰廣場A座) 環境:環境還不錯,裝修偏簡約風,工位是網際網路公司那種排排坐。 投遞方式:拉勾網 面試流
vue仿餓了麼商店詳情頁面(列表左右聯動、兩側滾動條互不影響)
商店詳情頁面中要求頁面劃上去之後到達某一位置時,嘴上的tabs標籤固定在最上邊,下邊的兩個選單列表可以滾動,且兩個滾動互不影響;點選左側的某一類別,右側跳轉到相對應部分。 HTML <body> <div class="header"