91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內(nèi)不再提示

面試經(jīng)驗分享之數(shù)據(jù)結(jié)構(gòu)、算法題

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:Blog of 太極儒 ? 作者:Frank Song ? 2022-11-30 11:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

面試 IT 企業(yè)的研發(fā)崗位,數(shù)據(jù)結(jié)構(gòu)和算法顯然是必考的項目。俺只學過普通的數(shù)據(jù)結(jié)構(gòu)課程,沒讀過 STL,也沒有過 ACM 的訓練和比賽經(jīng)歷,在一開始面對這樣類型題目的時候,心里還是十分忐忑的。大大小小幾十場面試下來,自己在這方面總算有了一定的心得積累,在此拋磚引玉,以饗讀者。

在正式介紹題目和準備方法之前,有兩點需要說明,

●Google 和 Facebook 這類對算法有很高要求的公司的在線測試我沒有參加過(不過在牛人內(nèi)推幫助下有過面試體驗……),這超出了我目前的編碼能力范圍,網(wǎng)上有不少拿到 Google、Facebook offer 的經(jīng)驗總結(jié)文章,可以移步觀賞;

●前段時間在微博上又看到有人說自己把 leetcode 刷了好幾遍,不過一些轉(zhuǎn)發(fā)評論者覺得, IT 公司面試中的算法考察沒有價值,一來工作里用不太上,二來把程序員素質(zhì)考察搞成了應試教育,他們認為更重要的是應聘者的工程能力。遇到這樣的討論,我一般喜歡和一把稀泥。若干年前, Google、微軟的面試題讓大家眼前一亮,覺得能選拔出個性十足的聰明人來,不過隨著大家對這類題目的適應,可能選拔出來的人也在趨同,至少很多人都會在面試前用心準備,據(jù)報道 Google 最近也是放棄了這類面試題目。沒有什么一勞永逸、一成不變的考查方式,畢竟面試是人和人之間的動態(tài)“較量”。不要貪戀算法的奇技淫巧,也不要因為題目篩選力度的衰減而否定考察初衷。面試不僅是考驗求職者,也同樣在考驗面試官,如果問的都是老題兒,那本山大叔肯定都會搶答了。

言歸正傳,以下分數(shù)據(jù)結(jié)構(gòu)題目、算法題目、開放題目三部分來介紹我在面試中碰到的問題。

數(shù)據(jù)結(jié)構(gòu)題目

概述

雖然課本由簡到繁、由難到易地介紹了諸多數(shù)據(jù)結(jié)構(gòu),我在面試中被問到的卻還都是基本類型,比如堆棧、隊列、鏈表、二叉樹。題目主要有兩類,數(shù)據(jù)結(jié)構(gòu)實現(xiàn)和具體情境下數(shù)據(jù)結(jié)構(gòu)的應用。

分類討論

類型一:數(shù)據(jù)結(jié)構(gòu)實現(xiàn)

1、實現(xiàn) java.util.List 中的基礎(chǔ)功能;

2、實現(xiàn)棧,使得 添加、刪除、max 操作的復雜度為 O(1)(我腳著好像是不可實現(xiàn)的,想到最好的是添加、刪除 O(log), max 是 O(1)),實現(xiàn)見 正在努力減肥的胖子 同學給出的評論,參考 leetcode 中的這道題目,慚愧;

3、選取任意數(shù)據(jù)結(jié)構(gòu)實現(xiàn)添加、刪除、隨機返回三個功能,分析復雜度;

4、用數(shù)組實現(xiàn)隊列,各操作的復雜度分析。

類型二:數(shù)據(jù)結(jié)構(gòu)應用

1、兩棵樹相加——對應位置兩棵樹都有值則相加,對應位置只有一棵樹有值則取該值;

2、用速度不同的指針可以判斷鏈表中是否有環(huán),問兩速度滿足怎樣的關(guān)系可以保證發(fā)現(xiàn)環(huán);

3、如何在語料中尋找頻繁出現(xiàn)的字串,分析復雜度(tire樹);

4、中綴表達式轉(zhuǎn)逆波蘭表達式,逆波蘭表達式求值;

5、數(shù)據(jù)解壓縮,3(a4(ab)) -> aababababaababababaabababab;

6、二叉樹的文件存儲。

準備建議

上上之選當然是看《算法導論》,書 和 公開課 都算。時間精力不足又想臨時抱佛腳,清華大學計算機系鄧俊輝老師的 教材 是好選擇,也可以看 公開課。注意熟記不同數(shù)據(jù)結(jié)構(gòu)的不同操作的不同實現(xiàn)方式(比如 哈希表的插入刪除查找)的復雜度分析,不管面試官給你出的題目是難是易,妥妥兒的會問復雜度。

算法題目

概述

有過面試經(jīng)歷的企業(yè)(BAT、小米、宜信、猿題庫、FreeWheel等)當中,還沒有誰問過我需要復雜算法(比方說 此鏈接 中的很多知識點)才能解決的問題。我遇到的算法題目大致可以分為兩類:

●經(jīng)典算法實現(xiàn)題 快速排序、歸并排序、堆排序、KMP算法等都是重點,重要的是代碼的正確性,其次是復雜度分析,當然,人家也不都是直接問你怎么實現(xiàn)這個具體算法,而是包裝到情境里;

●思維益智題 考察你分析問題的能力,大部分可以歸結(jié)到二分、動態(tài)規(guī)劃、遞歸上,重要的是思路,其次是盡量低的復雜度,再次是代碼的正確性。

下面具體介紹我遇到的兩種類型題目中的問題。

分類討論

類型一:經(jīng)典算法實現(xiàn)題

1、實現(xiàn)快速排序、歸并排序、堆排序,各排序算法復雜度分析;

2、實現(xiàn)KMP,解釋原理;

3、迷宮的深度搜索、廣度搜索;

4、寫 find 函數(shù),在目標串中匹配模式串(要考慮中文字符的情況)。

類型二:思維益智題

1、數(shù)列中找第 k 大的數(shù)字(與快排或堆排序有關(guān));

2、兩個有序數(shù)組,尋找歸并排序后數(shù)組的中位數(shù)/第 k 大數(shù)字(與二分有關(guān));

3、一維數(shù)組,swap 其中的幾對數(shù)字(每個數(shù)字只屬于一次 swap 操作),實現(xiàn)查找(與二分有關(guān));

4、一個有序數(shù)組,其中一個數(shù)字發(fā)生變異,但不知道變異后會不會影響整體序,如何實現(xiàn)查找;

5、二維數(shù)組,每行遞增,每列遞增

●實現(xiàn)查找;

●二維數(shù)組,每行遞增,每列遞增,求第 k 大的數(shù);

●任意交換其中的兩數(shù),發(fā)現(xiàn)并恢復;

6、尋找字符串中第一個只出現(xiàn)一次的字符;

7、統(tǒng)計數(shù)列中的逆序?qū)Γw并排序有關(guān));

8、最長公共子串(動態(tài)規(guī)劃有關(guān));

9、最大子序列和,允許交換一次的最大子序列和;

10、給定數(shù)組,尋找 next big(堆排序有關(guān));

11、一維有序數(shù)組,經(jīng)過循環(huán)位移后,最小的數(shù)出現(xiàn)在數(shù)列中間

●如果原數(shù)組嚴格遞增,如何找這個最小數(shù);

●如果原數(shù)組嚴格遞增或遞減,如何找這個最小數(shù);

●如果原數(shù)組非嚴格遞增或遞減,如何找這個最小數(shù);

12、數(shù)組可能是遞增、遞減、遞減后遞增、遞增后遞減四種情況,遞增遞減都是非嚴格的,如果有轉(zhuǎn)折點,返回轉(zhuǎn)折點的值,否則返回-1;

13、單向網(wǎng)絡,起點和終點唯一且連通,尋找那些一旦被刪除將導致起點終點無法連通的點;

14、有序數(shù)組尋找和為某數(shù)的一對數(shù)字;

15、墻里能裝多少水;

16、打印螺旋數(shù)組;

17、打印組合數(shù);

18、字符數(shù)組,統(tǒng)計指定區(qū)間內(nèi)的回文串個數(shù)。

準備建議

●不要糾結(jié)于是否是最佳思路,要保證能在 10-15 分鐘內(nèi)給出一個解決方案,并分析復雜度;

●基礎(chǔ)的可以讀讀 @研究者July 的這本 電子書,更深入的可以閱讀 CSDN 等博客中大牛們寫的 ACM 解題報告;

●hihocoder、topcoder、leetcode、codility、POJ 等網(wǎng)站擇一練手。

開放題目

這類開放題目讓你自主選擇數(shù)據(jù)結(jié)構(gòu),主要是考察求職者對于數(shù)據(jù)結(jié)構(gòu)的特性與使用場景的綜合理解,在面對具體應用場景時能否運用已有的數(shù)據(jù)結(jié)構(gòu)和算法知識提出合理的解決方案。一般來說在這類問題里哈希表的出場率會比較高……例題如下

1、大數(shù)據(jù)量的 url log,怎么去重且統(tǒng)計每個 url 的出現(xiàn)次數(shù),復雜度分析;

2、設計 cache 系統(tǒng)

●設計 cache 的接口;

●可以用什么數(shù)據(jù)結(jié)構(gòu)實現(xiàn);

●如何實現(xiàn)可伸縮的容量;

●cache 的空間管理策略,比如 cache 哪些條目,何時清理;

●cache 系統(tǒng)啟動時分配多大的空間,之后按照怎樣的策略增大;

3、設計爬蟲;

4、流媒體播放客戶端從多個完全相同的發(fā)送方接收視頻包,同一發(fā)送方的包會按序到達,不同發(fā)送方的包則不一定,有可能會丟包,但還是要保證播放流暢度,設計播放客戶端的算法。

總結(jié)

●數(shù)據(jù)結(jié)構(gòu)和算法的基礎(chǔ)知識還是十分重要的,大部分題目的思路來源于此;

●訓練自己算法復雜度的分析能力,有的時候?qū)碗s度的分析會反過來會幫助你找到更好的算法;

●一定量的題目積累很重要,就好像準備高考數(shù)學壓軸題一樣,見識的越多,思路來得越快,當然,前提是你能夠不斷總結(jié)反思。

審核編輯 :李倩

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

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98092
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    41607

原文標題:面試經(jīng)驗分享之數(shù)據(jù)結(jié)構(gòu)、算法題

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    面試必看!排隊自旋鎖32位變量的域劃分與核心作用

    核心數(shù)據(jù)結(jié)構(gòu)的域含義模糊不清,導致面試時錯失高分。今天這篇文章,我們就從面試視角拆解 32 位變量的域劃分、各域作用,再結(jié)合流程圖理清工作機制,幫你徹底吃透這個考點。
    的頭像 發(fā)表于 02-09 16:54 ?816次閱讀
    <b class='flag-5'>面試</b>必看!排隊自旋鎖32位變量的域劃分與核心作用

    面試必看:排隊自旋鎖MCS鎖的實現(xiàn)原理與關(guān)鍵考點

    在并發(fā)編程面試中,“鎖” 是繞不開的核心話題,而自旋鎖作為輕量級鎖的代表,其優(yōu)化方案更是高頻考點。
    的頭像 發(fā)表于 02-09 16:51 ?753次閱讀
    <b class='flag-5'>面試</b>必看:排隊自旋鎖<b class='flag-5'>之</b>MCS鎖的實現(xiàn)原理與關(guān)鍵考點

    節(jié)能降耗系統(tǒng)從“經(jīng)驗直覺”推向“精準智控”

    當全球每秒消耗的能源足以點亮數(shù)萬盞燈,當“雙碳”目標成為國家發(fā)展的清晰坐標,節(jié)能已不再是選擇,而是生存與發(fā)展的必答題。 節(jié)能降耗系統(tǒng) ,正以數(shù)據(jù)為脈、算法為腦、控制為手,將能源管理從“經(jīng)驗
    的頭像 發(fā)表于 02-04 10:39 ?220次閱讀

    typedef結(jié)構(gòu)體使用

    雖然結(jié)構(gòu)體的出現(xiàn)能夠讓我們有一個更科學的數(shù)據(jù)結(jié)構(gòu)來管理數(shù)據(jù),但是每次使用結(jié)構(gòu)體都需要struct...,未免顯得有些冗長和麻煩。有了typedef的助攻,我們就可以很輕松地給
    發(fā)表于 12-08 07:04

    SM4算法實現(xiàn)分享(一)算法原理

    SM4分組加密算法采用的是非線性迭代結(jié)構(gòu),以字為單位進行加密、解密運算,每次迭代稱為一輪變換,每輪變換包括S盒變換、非線性變換、線性變換、合成變換。加解密算法與密鑰擴展都是采用32輪非線性迭代
    發(fā)表于 10-30 08:10

    國密系列算法簡介及SM4算法原理介紹

    使用了Feistel結(jié)構(gòu)(分組密碼中的一種對稱結(jié)構(gòu)),其中密鑰擴展部分也使用了Feistel結(jié)構(gòu),所以對數(shù)據(jù)和密鑰的處理流程極為相似。下面對SM4加密過程進行闡述: 對于密鑰擴展部分
    發(fā)表于 10-24 08:25

    e203乘法運算結(jié)構(gòu)算法原理

    e203乘法部件結(jié)構(gòu) E203的乘法操作由一個17周期的乘法器實現(xiàn)。為了提升性能,該乘法器采用了基4Booth編碼,將乘數(shù)分解為17個Booth編碼,與被乘數(shù)相乘后形成的部分和再在相加,從而實現(xiàn)
    發(fā)表于 10-22 06:43

    人工智能工程師高頻面試題匯總:循環(huán)神經(jīng)網(wǎng)絡篇(題目+答案)

    ,提前準備一些面試常問的問題,比如概率論與統(tǒng)計知識、機器學習的那些算法,或者深度學習的框架,還有怎么優(yōu)化模型,循環(huán)神經(jīng)網(wǎng)絡等,這些都是加分項,能有效提高面試通過率
    的頭像 發(fā)表于 10-17 16:36 ?715次閱讀
    人工智能工程師高頻<b class='flag-5'>面試</b>題匯總:循環(huán)神經(jīng)網(wǎng)絡篇(題目+答案)

    【HZ-T536開發(fā)板免費體驗】6、使用protoc-gen-gorm生成標準化的數(shù)據(jù)結(jié)構(gòu)

    在設計espnow協(xié)議的時候,考慮到我需要在esp32,Linux設備,web上使用相同的數(shù)據(jù)結(jié)構(gòu),那就需要考慮一下,是否使用一個通用的跨平臺序列化數(shù)據(jù)結(jié)構(gòu)。這時候我想起了protobuf,這個就是
    發(fā)表于 08-26 00:32

    盤點嵌入式就業(yè)所需要的技能有哪些?

    ,把握未來的職業(yè)機遇。 1.智能汽車行業(yè): - 熟悉嵌入式編程語言,如C/C++、Python等。 - 掌握嵌入式系統(tǒng)設計與開發(fā)流程,了解汽車電子控制系統(tǒng)的基本原理。 - 具備良好的數(shù)據(jù)結(jié)構(gòu)算法
    發(fā)表于 08-11 15:43

    基于數(shù)據(jù)算法驅(qū)動的配方研發(fā)新模式

    基于數(shù)據(jù)算法驅(qū)動的配方研發(fā)新模式 隨著人工智能、大數(shù)據(jù)和機器學習技術(shù)的快速發(fā)展,傳統(tǒng)依賴經(jīng)驗和試錯的配方研發(fā)模式正逐步向數(shù)據(jù)驅(qū)動、
    的頭像 發(fā)表于 08-06 17:25 ?1166次閱讀

    【硬件方向】名企面試筆試真:大疆創(chuàng)新校園招聘筆試題

    名企面試筆試真:大疆創(chuàng)新校園招聘筆試題-硬件 是幾年前的題目,不過值得參考一下哦 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點贊、評論支持一下哦~)
    發(fā)表于 05-16 17:31

    程序設計與數(shù)據(jù)結(jié)構(gòu)

    的地址)出發(fā),采用推導的方式,深入淺出的分析了廣大C程序員學習和開發(fā)中遇到的難點。 2. 從方法論的高度對C語言在數(shù)據(jù)結(jié)構(gòu)算法方面的應用進行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開發(fā)
    發(fā)表于 05-13 16:45

    硬件工程師面試/筆試經(jīng)典 100

    分享一些常見的硬件工程師面試/筆試題。公眾號后臺回復關(guān)鍵字:100,可獲取完整的PDF。--END--免責聲明:本文轉(zhuǎn)自網(wǎng)絡,版權(quán)歸原作者所有,如涉及作品版權(quán)問題,請及時與我們聯(lián)系,謝謝!加入粉絲
    的頭像 發(fā)表于 04-30 19:34 ?1464次閱讀
    硬件工程師<b class='flag-5'>面試</b>/筆試經(jīng)典 100 <b class='flag-5'>題</b>

    C++學到什么程度可以找工作?

    管理、引用、面向?qū)ο缶幊蹋惻c對象、繼承、多態(tài))、模板和STL(標準模板庫)等。 2. **數(shù)據(jù)結(jié)構(gòu)算法**:能夠高效地實現(xiàn)并使用各種數(shù)據(jù)結(jié)構(gòu)(如數(shù)組、鏈表、棧、隊列、樹、圖等)和算法
    發(fā)表于 03-13 10:19