精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

技術大牛分享快手面試面經

小林coding ? 來源:小林coding ? 2023-04-15 15:39 ? 次閱讀

這段時間分享了很多校招的面經,有很多讀者說想看社招的,其實社招面試是基于你的工作項目來展開問的,比如你項目用了 xxx 技術,那么面試就會追問你項目是怎么用 xxx 技術的,遇到什么難點和挑戰,然后再考察一下這個 xxx 技術的原理。

今天就分享一位快手社招面經,崗位是后端開發,問題都是基于項目涉及的技術棧去展開聊的,同時最后也會有算法題。

項目

  • 自我介紹+項目介紹
  • 就你負責比較多的項目詳細說說,項目背景,data模型,流程,難點和挑戰
  • 講講項目后端用到的技術棧,比如mq,rpc,緩存啥的
  • 消息隊列用過嗎,業務場景?
  • 怎么保證消息的有序性?

Redis

Redis有哪些數據類型

回答:String,list,map,set,Zset,stream,hyperloglog。。。

(打斷)追問:map怎么擴容,擴容時會影響緩存嗎

回答:底層有兩個dict,一個dict負責請求,到達負載比例進行擴容,漸進式擴容,一部分一部分轉移到新的dict

追問:擴容時訪問key怎么處理?

回答:先從舊dict獲取key,查不到的話,然后從新的dict獲取key

小林補充:

進行 rehash 的時候,需要用上 2 個哈希表了。

798bf1f2-db5a-11ed-bfe3-dac502259ad0.pngimg

在正常服務請求階段,插入的數據,都會寫入到「哈希表 1」,此時的「哈希表 2 」 并沒有被分配空間。

隨著數據逐步增多,觸發了 rehash 操作,這個過程分為三步:

  • 給「哈希表 2」 分配空間,一般會比「哈希表 1」 大 2 倍;
  • 將「哈希表 1 」的數據遷移到「哈希表 2」 中;
  • 遷移完成后,「哈希表 1 」的空間會被釋放,并把「哈希表 2」 設置為「哈希表 1」,然后在「哈希表 2」 新創建一個空白的哈希表,為下次 rehash 做準備。

為了方便你理解,我把 rehash 這三個過程畫在了下面這張圖:

79b89450-db5a-11ed-bfe3-dac502259ad0.pngimg

這個過程看起來簡單,但是其實第二步很有問題,如果「哈希表 1 」的數據量非常大,那么在遷移至「哈希表 2 」的時候,因為會涉及大量的數據拷貝,此時可能會對 Redis 造成阻塞,無法服務其他請求

為了避免 rehash 在數據遷移過程中,因拷貝數據的耗時,影響 Redis 性能的情況,所以 Redis 采用了漸進式 rehash,也就是將數據的遷移的工作不再是一次性遷移完成,而是分多次遷移。

漸進式 rehash 步驟如下:

  • 給「哈希表 2」 分配空間;
  • 在 rehash 進行期間,每次哈希表元素進行新增、刪除、查找或者更新操作時,Redis 除了會執行對應的操作之外,還會順序將「哈希表 1 」中索引位置上的所有 key-value 遷移到「哈希表 2」 上
  • 隨著處理客戶端發起的哈希表操作請求數量越多,最終在某個時間點會把「哈希表 1 」的所有 key-value 遷移到「哈希表 2」,從而完成 rehash 操作。

這樣就巧妙地把一次性大量數據遷移工作的開銷,分攤到了多次處理請求的過程中,避免了一次性 rehash 的耗時操作。

在進行漸進式 rehash 的過程中,會有兩個哈希表,所以在漸進式 rehash 進行期間,哈希表元素的刪除、查找、更新等操作都會在這兩個哈希表進行。比如,查找一個 key 的值的話,先會在「哈希表 1」 里面進行查找,如果沒找到,就會繼續到哈希表 2 里面進行找到。

另外,在漸進式 rehash 進行期間,新增一個 key-value 時,會被保存到「哈希表 2 」里面,而「哈希表 1」 則不再進行任何添加操作,這樣保證了「哈希表 1 」的 key-value 數量只會減少,隨著 rehash 操作的完成,最終「哈希表 1 」就會變成空表。

跳表結構了解嗎

回答:第一層是雙向鏈表,會有多層來作為鏈表的索引

追問:和二叉樹有什么區別,從時間復雜度和空間復雜度分析

回答:二叉查找樹的時間復雜度是O(logn),空間復雜度是O(n);跳表的時間復雜度是O(log_{k}n),k為跳表索引步長,空間復雜度是O(n)

MySQL

MySQL事務用過嗎,應用場景是什么

自己學習的demo里用過,場景:銀行轉賬

追問:假如是跨行轉賬怎么解決事務

回答:我想一想。。。

小林補充:用分布式事務

(打斷)追問:跨行先不說,先說不跨行,先說說單庫事務,事務的4個基本特性

回答:原子性,一致性,隔離性,持久性

追問:一致性指的是什么

回答:一致性指的是事務提交前后數據庫狀態一致,是原子性,隔離性和持久性的整合

追問:隔離級別有哪幾種

回答:讀未提交,讀已提交,可重復讀,序列化

追問:可重復讀是是什么意思,怎么實現的

同一個事務中多次讀取結果一致。通過Read View + MVCC實現,在事務開始時創建一個Read View,之后都用這個Read View。

追問:可重復讀具體實現細節

回答:Read View的結構包含(1)當前事務id,(2)active事務id列表,(3)最小active事務id記為min_txn_id,(4)next事務id記為max_txn_id。如果record對應的事務id,小于最小active事務id,直接讀;否則讀取最小active事務id之前版本的數據(這塊的邏輯答得有問題,用語言表達時有點混亂,可以私下多練習練習表達)

小林補充:

我們需要了解兩個知識:

  • Read View 中四個字段作用;
  • 聚簇索引記錄中兩個跟事務有關的隱藏列;

那 Read View 到底是個什么東西?

79df94a6-db5a-11ed-bfe3-dac502259ad0.pngimg

Read View 有四個重要的字段:

  • m_ids :指的是在創建 Read View 時,當前數據庫中「活躍事務」的事務 id 列表,注意是一個列表,“活躍事務”指的就是,啟動了但還沒提交的事務
  • min_trx_id :指的是在創建 Read View 時,當前數據庫中「活躍事務」中事務 id 最小的事務,也就是 m_ids 的最小值。
  • max_trx_id :這個并不是 m_ids 的最大值,而是創建 Read View 時當前數據庫中應該給下一個事務的 id 值,也就是全局事務中最大的事務 id 值 + 1;
  • creator_trx_id :指的是創建該 Read View 的事務的事務 id

知道了 Read View 的字段,我們還需要了解聚簇索引記錄中的兩個隱藏列。

假設在賬戶余額表插入一條小林余額為 100 萬的記錄,然后我把這兩個隱藏列也畫出來,該記錄的整個示意圖如下:

79f36a76-db5a-11ed-bfe3-dac502259ad0.png圖片

對于使用 InnoDB 存儲引擎的數據庫表,它的聚簇索引記錄中都包含下面兩個隱藏列:

  • trx_id,當一個事務對某條聚簇索引記錄進行改動時,就會把該事務的事務 id 記錄在 trx_id 隱藏列里
  • roll_pointer,每次對某條聚簇索引記錄進行改動時,都會把舊版本的記錄寫入到 undo 日志中,然后這個隱藏列是個指針,指向每一個舊版本記錄,于是就可以通過它找到修改前的記錄。

在創建 Read View 后,我們可以將記錄中的 trx_id 劃分這三種情況:

7a1748d8-db5a-11ed-bfe3-dac502259ad0.pngimg

一個事務去訪問記錄的時候,除了自己的更新記錄總是可見之外,還有這幾種情況:

  • 如果記錄的 trx_id 值小于 Read View 中的 min_trx_id 值,表示這個版本的記錄是在創建 Read View 已經提交的事務生成的,所以該版本的記錄對當前事務可見

  • 如果記錄的 trx_id 值大于等于 Read View 中的 max_trx_id 值,表示這個版本的記錄是在創建 Read View 才啟動的事務生成的,所以該版本的記錄對當前事務不可見

  • 如果記錄的 trx_id 值在 Read View 的

    min_trx_id
    

    max_trx_id
    

    之間,需要判斷 trx_id 是否在 m_ids 列表中:

    • 如果記錄的 trx_id m_ids 列表中,表示生成該版本記錄的活躍事務依然活躍著(還沒提交事務),所以該版本的記錄對當前事務不可見
    • 如果記錄的 trx_id 不在 m_ids列表中,表示生成該版本記錄的活躍事務已經被提交,所以該版本的記錄對當前事務可見

MySQL binlog,redolog和undolog的區別

回答:從這三種log的功能進行分析,undolog用來做事務回滾;redolog用來處理mysql宕機(或進程掛掉)時的數據恢復;binlog記錄所有的數據修改操作,可以用來做全量的數據恢復,主從復制(后一點當時沒答出來)。

小林補充:

  1. binlog(二進制日志):記錄所有對MySQL數據庫的修改操作,包括插入、更新和刪除等。binlog主要用于數據恢復到指定時間點或者指定事務。可以使用mysqlbinlog命令將binlog文件解析成SQL語句,從而恢復MySQL數據庫的狀態。

  2. redolog(重做日志):記錄所有對MySQL數據庫的修改操作,但是只記錄了物理操作,比如頁的修改。redolog主要用于MySQL的崩潰恢復,即在MySQL崩潰后,通過重做日志,將數據庫恢復到最近一次提交的狀態。可以使用 Forcing InnoDB Recovery 來進行崩潰恢復。

  3. undolog(回滾日志):用于記錄事務的回滾操作,即在事務執行過程中,如果發生了回滾,會將回滾操作記錄到undolog中。undolog主要用于 MySQL 的回滾操作,比如使用ROLLBACK語句回滾事務。undolog是InnoDB存儲引擎的特有日志,不同于其他存儲引擎。

追問:binlog和redolog做數據恢復的區別

回答:redolog有大小限制,數據可能被覆蓋,用來處理緊急數據庫故障;binlog是全量操作日志,可以進行做全量的數據恢復。

小林補充:

binlog和redolog都是用于MySQL數據庫的日志。它們都可以用于數據恢復,但是它們的使用場景和恢復方法有所不同。

binlog是MySQL的二進制日志,它記錄了所有對MySQL數據庫的修改操作,包括插入、更新和刪除等。binlog可以用于恢復MySQL數據庫到指定的時間點或者指定的事務。具體來說,可以使用mysqlbinlog命令將binlog文件解析成SQL語句,然后再執行這些SQL語句,從而恢復MySQL數據庫的狀態。

redolog是MySQL的重做日志,它記錄了所有對MySQL數據庫的修改操作,但是只記錄了物理操作,比如頁的修改。redolog可以用于恢復MySQL數據庫的崩潰恢復,即在MySQL崩潰后,通過重做日志,將數據庫恢復到最近一次提交的狀態。具體來說,可以使用innodb_recovery命令來進行崩潰恢復,該命令會根據重做日志來恢復數據庫。

因此,binlog和redolog都可以用于數據恢復,但是它們的使用場景和恢復方法有所不同。binlog主要用于數據恢復到指定時間點或者指定事務,而redolog主要用于MySQL的崩潰恢復。

算法

  • 合并兩個有序數組

面試總結

感覺

基礎知識答得還行,編程拉了

不足之處

有些地方的表達邏輯不夠清晰,代碼得多寫。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4599

    瀏覽量

    92643
  • 數據庫
    +關注

    關注

    7

    文章

    3765

    瀏覽量

    64276
  • 代碼
    +關注

    關注

    30

    文章

    4748

    瀏覽量

    68353
  • MySQL
    +關注

    關注

    1

    文章

    802

    瀏覽量

    26444
  • Redis
    +關注

    關注

    0

    文章

    371

    瀏覽量

    10846

原文標題:快手面試,一直追著問我。。。

文章出處:【微信號:小林coding,微信公眾號:小林coding】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    面試通關技巧樣板

    ,新技術崗位會隨之產生,迅速把握行業發展、瞄準某項新技術的發展前景,是成功跳槽的第一步。記者發現,很多技術人才一方擔憂自己的職業前景,另一方
    發表于 08-07 19:38

    單片機程序員面試求教

    各位前輩好: 小弟后天的要去面試單片機程序員實習,請問有什么較好的,求教,萬分跪謝!
    發表于 10-17 16:41

    【CANNON試用體驗】面試

    今天不說技術,說面試。上一周一直在深圳面試,沒有弄小鋼炮。那么就說點面試心得吧。給大家一點點參考意見。這幾天,深有體會。[fly]而不死者
    發表于 03-09 14:31

    華為面試改革,你怎么看?

    那些把背得滾瓜爛熟,但是設計和編碼能力不行的人,沒有硬實力是通不過面試的。現在大家都說:面試造航母,工作擰螺絲, 面試中的知識點在工作中
    發表于 05-06 11:00

    軟件開發實習 精選資料分享

    某二線城市金融領域小公司軟件開發實習視頻分享(面試官沒開視頻,所以無法眼神交流。。。。。。)前一天HR電話溝通:說看了我的簡歷,問了我得專業,因為不是計算機專業,就有點懷疑我是否能勝任軟件開發
    發表于 07-30 08:14

    CVTE嵌入式面試相關資料分享

    遠程面試過程:先是電話突襲面試,相當于筆試,問進程線程,TCP,UDP協議;再是牛客網,在線視頻代碼編寫, 詢問算法,比較基礎。現場面試過程:一主要問基礎,***
    發表于 10-27 06:14

    快手刷粉絲,深度的講解下快手漲粉技巧的方法

    方法和教程 快手刷粉絲專家,教大家快手如何怎么漲粉絲的幾種方法,以強大的技術與豐富的資源為各大快手提供一站式貼心服務,專業打造快手代刷服務,
    發表于 01-25 15:44 ?9w次閱讀

    快手刷評論的作用是什么?

    ? ? ? ?快手上發布短視頻的小伙伴每天苦思冥想,絞盡腦汁的給出創意,給出段子,有的是為了單純的記錄生活的點點滴滴,而有的是為了能夠吸引更多的粉絲,成為網紅。在一些快手熱門短視頻的評論區,也聚集著
    發表于 03-13 11:26 ?9852次閱讀

    深信服算法工程師面試經歷

    深信服面的算法工程師,深信服的面試很專業,不愧是重技術的公司,經歷了三,雖然掛了難免失落,但是還是很慶幸有這次的經歷。掛的原因是自己沒有準備充分,完全是去裸面的。感覺自己掛在了二
    的頭像 發表于 03-22 14:38 ?3678次閱讀

    工程師技術面試應該準備什么

    亞馬遜這樣的公司有 14 項領導原則 。他們不想僅僅雇傭一個數據科學家或軟件工程師。對于許多只進行一次或兩次面試面試者來說,這可能沒有那么明顯,因為你太專注于回答面試技術部分。但是
    的頭像 發表于 09-23 16:41 ?4025次閱讀

    CVTE嵌入式面試匯總

    遠程面試過程:先是電話突襲面試,相當于筆試,問進程線程,TCP,UDP協議;再是牛客網,在線視頻代碼編寫, 詢問算法,比較基礎。現場面試過程:一主要問基礎,一對一
    發表于 10-19 17:53 ?3次下載
    CVTE嵌入式<b class='flag-5'>面試</b>匯總

    【嵌入式工程師】海康威視面試經驗 | 內涵紫光展銳、瑞芯微等公司嵌入式

    寫在前面的話本文是自己在應聘嵌入式工程師時遇到的一些面試問題總結,大部分的面試都是根據項目發問,希望這份可以給你幫助,加油????。文章目錄寫在前面的話
    發表于 10-19 18:33 ?7次下載
    【嵌入式工程師】海康威視<b class='flag-5'>面試</b>經驗 | 內涵紫光展銳、瑞芯微等公司嵌入式<b class='flag-5'>面</b><b class='flag-5'>經</b>

    面試 | 2021大疆嵌入式軟件工程師筆試題B卷

    最近都在忙著復習期末考試,這奇葩學校,非要提前開學考試搞的跟秋招面試都撞上了,就不吐槽了。剛剛做完大疆嵌入式軟件工程師筆試題B卷,趁還記得一些,記錄下來,供小伙伴們參考。考前看了一些,都說大疆
    發表于 10-21 10:21 ?17次下載
    <b class='flag-5'>面試</b><b class='flag-5'>面</b><b class='flag-5'>經</b> | 2021大疆嵌入式軟件工程師筆試題B卷

    嵌入式軟件工程師筆試面試指南-C/C++

    哈嘍,大家好。最近幾天,我把去年秋招總結的筆試面試的一些內容,又進行了重新規劃分類。詳細分成了簡歷書寫,面試技巧,總結,筆...
    發表于 01-25 18:22 ?3次下載
    嵌入式軟件工程師筆試<b class='flag-5'>面試</b>指南-C/C++

    985碩士騰訊分享 騰訊面試比之前的要難

    大家好,我是小林。 今天又來分享了,這次騰訊春招實習的,崗位是 java 后端開發。 讀者的背景是985碩,根據讀者的面試感受說是,
    的頭像 發表于 04-11 16:07 ?1243次閱讀