背景介紹 Kafka簡(jiǎn)介 Kafka是一種分布式的,基于發(fā)布/訂閱的消息系統(tǒng)。主要設(shè)計(jì)目標(biāo)如下: 以時(shí)間復(fù)雜度為O(1)的方式提供消息持久化能力,即使對(duì)TB級(jí)以上數(shù)據(jù)也能保證...
前言 最近感觸頗深,原諒我在開(kāi)頭寫心情日記。介意的跳過(guò)看正文。 市場(chǎng) 趨勢(shì) 近幾年,技術(shù)市場(chǎng)對(duì)新人越來(lái)越不友好,社招幾乎是三年經(jīng)驗(yàn)起步。所以很多人都說(shuō)能走校招千萬(wàn)別走社招,年...
阻塞隊(duì)列 特性 隊(duì)列是空的時(shí)候,從隊(duì)列獲取元素的操作會(huì)被阻塞 隊(duì)列是滿的時(shí)候,往隊(duì)列添加元素的操作會(huì)被阻塞 實(shí)現(xiàn) 線程池 定義 把并發(fā)任務(wù)傳遞給一個(gè)線程池,來(lái)替代為每個(gè)并發(fā)執(zhí)...
Lock和synchronized同步塊一樣,是線程的同步機(jī)制,而且鎖是由synchronized同步塊的方式進(jìn)行實(shí)現(xiàn)的。 一個(gè)簡(jiǎn)單的鎖實(shí)現(xiàn) while(isLocked)循...
場(chǎng)景介紹 lock()方法在this上同步,然后在monitorObject上同步。如果isLocked為true,調(diào)用lock()方法的線程會(huì)在wait()方法上阻塞。 如...
饑餓 如果一個(gè)線程因?yàn)镃PU時(shí)間全部被其他線程搶走而得不到CPU運(yùn)行時(shí)間,這種狀態(tài)被稱之為“饑餓”。 導(dǎo)致饑餓的原因 高優(yōu)先級(jí)線程吞噬所有的低優(yōu)先級(jí)線程的CPU時(shí)間 線程被永...
線程死鎖 死鎖是兩個(gè)或更多線程阻塞著等待其它處于死鎖狀態(tài)的線程所持有的鎖。死鎖通常發(fā)生在多個(gè)線程同時(shí)但以不同的順序請(qǐng)求同一組鎖的時(shí)候。 如果child和parent是同一個(gè)對(duì)...
Busy Wait 一個(gè)線程間相互通信的方法是使用線程間共享對(duì)象的一個(gè)變量進(jìn)行通信。 線程B等待線程A將hasDataToProcess的值設(shè)置為true,這種方法cpu利用...
Java Synchronized 塊 Synchronized塊是用來(lái)解決race condition。Synchronized塊是基于對(duì)象,作用在同一對(duì)象的同步快保證在同...
Java內(nèi)存模型指定了JVM和計(jì)算機(jī)內(nèi)存是如何進(jìn)行協(xié)作 Java內(nèi)存模型的原理 Java內(nèi)存被分為線程棧和堆棧:JVM中的每個(gè)線程擁有一個(gè)自己的線程棧,線程棧中包含當(dāng)前調(diào)用方...
多線程的優(yōu)點(diǎn) 資源利用率更好(等待IO的時(shí)間) 程序設(shè)計(jì)在某些情況下更簡(jiǎn)單(一個(gè)線程對(duì)應(yīng)一個(gè)任務(wù)) 程序相應(yīng)更快(不用實(shí)時(shí)去相應(yīng)) 多線程的代價(jià) 設(shè)計(jì)更復(fù)雜(訪問(wèn)共享數(shù)據(jù)的機(jī)...
更詳細(xì)的講解和代碼調(diào)試演示過(guò)程,請(qǐng)參看視頻如何進(jìn)入google,算法面試技能全面提升指南 有一道堆棧相關(guān)算法題,我被面試過(guò)兩次以上,看似其在算法面試中出現(xiàn)的概率很高,由此值得...
定義 散列表通過(guò)算術(shù)操作將鍵轉(zhuǎn)化為數(shù)組的索引來(lái)訪問(wèn)數(shù)組中的鍵值對(duì)。散列表的查找算法分兩步: 用散列函數(shù)將被查找的鍵轉(zhuǎn)化為一個(gè)數(shù)組的索引 處理碰撞沖突(拉鏈法和線性探測(cè)法) 優(yōu)...
平衡查找樹(shù) 定義 父節(jié)點(diǎn)的左子樹(shù)和右子樹(shù)的高度之差不能大于1 2-3查找樹(shù) 定義 2-3樹(shù)運(yùn)行每個(gè)節(jié)點(diǎn)保存1個(gè)或者兩個(gè)的值。對(duì)于普通的2節(jié)點(diǎn)(2-node),他保存1個(gè)key...