位元組跳動一面(涼)

2022-09-13 10:09:10 字數 1411 閱讀 2772

public

int findkthnumber(int n, int

k)

if(step<=k)

else

}return

cur;

}

然後是j**a的一些問答題

map的實現方式有哪些,分別是怎麼實現的?

常見的實現主要有hashmap(最常見的,內部無序的)、treemap(排過序的)及weakmap(這個用於記憶體自動釋放的);

關於hashmap,簡單說是乙個線性的陣列結構,其中每個元素儲存的是煉表頭結點,具體示意圖如下(圖直接在網上找的,比較形象):

hashmap裡實現了乙個靜態的內部類entry,重要的屬性有key,value,next,hash。map中的資料就儲存在entry中,每次我們put資料時,通過該key的hashcode,得到該key在entry中的索引,然後以e.next遍歷,如果存在對應value,返回value,不存在就將其新增到entry。

1.put(key,value)時,如果entry的size超過threshold,則進行擴容,即table.length*2。

2.get(key) 時先定位到該陣列元素,再遍歷該元素處的鍊錶。

如果我們再次放入同樣的key會怎樣呢?邏輯上,它應該替換老的value。事實上,它確實是這麼做的。在迭代的過程中,會呼叫equals()方法來檢查key的相等性(key.equals(k)),如果這個方法返回true,它就會用當前entry的value來替換之前的value。

**自:

更詳細的可以參考:

關於treemap:

(01) treemap實現繼承於abstractmap,並且實現了n**igablemap介面。

(02) treemap的本質是r-b tree(紅黑樹),它包含幾個重要的成員變數: root, size, comparator。

root 是紅黑數的根節點。它是entry型別,entry是紅黑數的節點,它包含了紅黑數的6個基本組成成分:key(鍵)、value(值)、left(左孩子)、right(右孩子)、parent(父節點)、color(顏色)。entry節點根據key進行排序,entry節點包含的內容為value。 

紅黑數排序時,根據entry中的key進行排序;entry中的key比較大小是根據比較器comparator來進行判斷的。

size是紅黑數中節點的個數。

實現原理參考:

j**a**機制是什麼樣的,如何判斷乙個物件是否應該被**?

參見:

位元組跳動一面

最後面試官你好,我叫 9x年2x周歲,xx大學18屆畢業生 目前在公司研發部任職前端開發工程師,從事前端研發工作有2年了 我們公司的主要業務是關於企業融資和企業貸款這方面的 我目前主要負責公司官網的研發和維護,主要使用的技術棧是 vue 在公司官網開發中具體負責專案的管理,頁面結構的搭建,企業管理,...

位元組一面涼經

畢設初稿差不多完成了,就想著要不投投簡歷,萬一能得到更好的機會呢?想象很美好.現實有點骨感。前段時間牛客網上投了位元組,約今天面試。昨天畢設初稿才交稿,然後就沒多少時間去看一些知識點,講真好多東西我都忘了.先讓我介紹一下學校的專案經歷和實習經歷。然後三道演算法題。1.能不能用棧來實現佇列 我不知道我...

位元組跳動 後端 一面

自我介紹 虛擬記憶體和物理記憶體的區別 聽我說資料庫自學的,就問了問聯合索引相關的,然後就開始問mvcc相關的知識 都答上來了 看你簡歷寫了redis,聊聊它的6個底層資料結構,6個我都說了一點,主要說了雜湊表 解決雜湊衝突,漸進rehash 平常用redis來幹什麼 看過書,沒怎麼用過 介紹ato...