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

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

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

美圖面試C++工程師的經(jīng)歷

工程師人生 ? 來源:工程師吳畏 ? 2019-06-26 16:55 ? 次閱讀

上周去美圖公司面試C++工程師 有兩位面試官

一位面試官問了一些數(shù)據(jù)結(jié)構(gòu)相關(guān)的問題 另一位面試官則問了一些項(xiàng)目相關(guān)的問題

交流比較順暢 和他們的交流也反饋給我一些信息 原來工作中有些地方可以做的更好

比如代碼的耗時(shí)點(diǎn)的評(píng)估

問到數(shù)據(jù)結(jié)構(gòu)時(shí) 面試官問了我這樣一個(gè)問題

1. 求兩個(gè)二叉樹的子節(jié)點(diǎn)的最低公共父節(jié)點(diǎn)?

這個(gè)問題當(dāng)時(shí)我是這樣回答的:遞歸向上尋找父節(jié)點(diǎn) 每一個(gè)父節(jié)點(diǎn)又各自向下遞歸尋找另一個(gè)要尋找的子節(jié)點(diǎn)。 這個(gè)做法無疑是低效的。面試官教我這樣一種方法:兩個(gè)子節(jié)點(diǎn)都向上遞歸到根節(jié)點(diǎn) 然后逐個(gè)驗(yàn)證兩條路徑中的每個(gè)節(jié)點(diǎn)是否是公有節(jié)點(diǎn) 直到尋找到最低節(jié)點(diǎn)。

這個(gè)方法明顯比我的要聰明不少,另外我查了些資料 其實(shí)這個(gè)問題還有其他解法

1. 中序遍歷

2. 后序遍歷

為什么可以用這兩種方法呢?

因?yàn)閮蓚€(gè)子節(jié)點(diǎn)的公共父節(jié)點(diǎn)必定在他們的中間!這是個(gè)容易得出的規(guī)律。

中序遍歷時(shí) 按順序遍歷 左 根 右節(jié)點(diǎn)

后序則是 左 右 根節(jié)點(diǎn)

按照這種方法可以大概圈定出公共節(jié)點(diǎn)的范圍 再采用遞歸尋找會(huì)快些。

2. 求最小的k個(gè)數(shù)

這個(gè)問題我是這樣答的:建立小頂堆 然后拿走堆頂節(jié)點(diǎn)后再調(diào)整堆為小頂堆

這樣的話開銷在于 第一次小頂堆的建立

后序每次小頂堆的重調(diào)整(開銷不像第一次建立那么大)

這一題面試官似乎不是很滿意答案 但是我回來想了下 網(wǎng)上能查到的還有用快排實(shí)現(xiàn)的

實(shí)際上也是用的遞歸快排 開銷也不低 這個(gè)問題可能還得再想想。

工程相關(guān)的問題:

1. 關(guān)于框架的跨平臺(tái)

這個(gè)問題主要也就是回答了下怎么把C++的框架代碼應(yīng)用到Androidios

關(guān)于Android方面的我熟悉一些 簡單講了下C調(diào)用Java,Java調(diào)用C的方法。

以及對(duì)應(yīng)的C++接口阻塞/非阻塞 Java監(jiān)聽C代碼的回調(diào)這些

ios就簡單介紹了下自己用過的Object-C/C++混合編程

2. 關(guān)于代碼的耗時(shí)點(diǎn)

這和我原來的想法有點(diǎn)不一樣

原來我認(rèn)為的優(yōu)化是通過在代碼里替換高IO代碼為arm匯編來提高效率

但實(shí)際上好像沒有這樣做

另外面試官還提到了用工具來分析代碼性能 我查了一下有不少開源實(shí)現(xiàn)

這個(gè)要關(guān)注一下。 原來的分段式分析耗時(shí)的方法還是比較落后 效率比較低一些。

總結(jié)

美圖的技術(shù)實(shí)力還是過硬的 原先參加過的面試 基本只問些項(xiàng)目相關(guān)的邏輯實(shí)現(xiàn)

這次面試問了不少基礎(chǔ)相關(guān)的問題 不少基礎(chǔ)沒打扎實(shí) 要研究清楚來。

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

    關(guān)注

    59

    文章

    1561

    瀏覽量

    68304
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73301
  • 美圖
    +關(guān)注

    關(guān)注

    0

    文章

    77

    瀏覽量

    8038
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    正是拼的年紀(jì)|65歲電子工程師上班VLOG #65歲退休 #電子工程師 #搞笑 #上班vlog

    電子工程師
    安泰小課堂
    發(fā)布于 :2024年07月25日 11:31:02

    用二創(chuàng),1:1復(fù)刻工程師的職場現(xiàn)狀

    工程師
    揚(yáng)興科技
    發(fā)布于 :2024年07月19日 18:30:07

    嵌入式軟件工程師和硬件工程師的區(qū)別?

    。他們之間的緊密合作對(duì)于成功開發(fā)出高效的嵌入式系統(tǒng)至關(guān)重要。 嵌入式軟件工程師和嵌入式硬件工程師在工作中有著不同的技能要求和專業(yè)知識(shí)。嵌入式軟件工程師需要具備扎實(shí)的編程基礎(chǔ),熟練掌握C
    發(fā)表于 05-16 11:00

    大廠電子工程師常見面試題#電子工程師 #硬件工程師 #電路知識(shí) #面試

    電子工程師電路
    安泰小課堂
    發(fā)布于 :2024年04月30日 17:33:15

    一位硬件工程師的歷練之路:從入門學(xué)習(xí)理論到... #搞笑 #硬件工程師 #電子工程師 #揚(yáng)興科技

    硬件工程師揚(yáng)興科技
    揚(yáng)興科技
    發(fā)布于 :2024年03月13日 17:50:21

    企業(yè)老工程師和高校老師有啥區(qū)別

    電子工程師硬件
    電子發(fā)燒友網(wǎng)官方
    發(fā)布于 :2024年02月28日 17:50:00

    C++簡史:C++是如何開始的

    MISRA C++:2023,MISRA? C++ 標(biāo)準(zhǔn)的下一個(gè)版本,來了!為了幫助您做好準(zhǔn)備,我們介紹了 Perforce 首席技術(shù)支持工程師 Frank van den Beuken 博士撰寫
    的頭像 發(fā)表于 01-11 09:00 ?426次閱讀
    <b class='flag-5'>C++</b>簡史:<b class='flag-5'>C++</b>是如何開始的

    硬件工程師面試時(shí)最常被問到的8個(gè)問題,看看你能答對(duì)幾個(gè)

    晶振硬件工程師
    揚(yáng)興科技
    發(fā)布于 :2023年12月08日 18:21:15

    硬件工程師經(jīng)典面試題詳解

    硬件工程師經(jīng)典面試題詳解
    的頭像 發(fā)表于 11-20 15:08 ?1162次閱讀
    硬件<b class='flag-5'>工程師</b>經(jīng)典<b class='flag-5'>面試</b>題詳解

    FPGA工程師需要具備哪些技能?

    各種通信協(xié)議的概念、協(xié)作流程、幀結(jié)構(gòu)等。常見的通信協(xié)議包括UART、SPI、I2C、USB、PCIe、以太網(wǎng)等。 FPGA工程師還需要了解如何使用各種協(xié)議的開源庫和硬件IP核,這些可以在互聯(lián)網(wǎng)
    發(fā)表于 11-09 11:03