記一次阿里電面經歷

昨天下午(3/19)三點多鐘,接到了一個杭州的電話,是阿里的。問我是否方便聊聊。我說我在上課,四點下課。然后他就四點多鐘的時候又打了一次過來。

項目經歷

上來就問我有無大型項目的經歷。不好意思,我說無。。

。又問我代碼量怎樣,我說之前有常常刷ACM的題目,所以代碼量還能夠。

C語言變量

問:“函數中的局部變量保存在哪里?”?

答:“棧”

問:“函數中的局部靜態變量保存在哪里?”

答:“靜態區。。”

問:“局部靜態變量和全局靜態變量有不同嗎,不同點在哪里?”

答:“。

。沒太大不同,都存在一起。。”

問:“不是問的存儲位置。其它方面呢?”

答:“哦,可視的范圍不同。全局靜態變量全局可見。局部靜態變量僅僅有函數內部可見。”

問:“全局變量和全局靜態變量有何不同”

答:“存的位置是挨著的。要說不同的話,也是可視范圍吧,全局靜態變量僅在當前文件內可見,全局變量是該項目全部文件可見。

聯合(union)?

問:“知道聯合嗎?”

答:“union”

問:“和結構體有何不同?”

答:“聯合的每一個成員的擁有共同的起始地址(共享存儲空間)。而結構體為每一個成員單獨分配空間。

問:“union這樣設計的目的是什么(union有何用途)?”

以下我就趕快頭腦風暴了一下。。

絞盡腦汁地的表達自己的拙見。該部分內容你能夠無視,我認為自己扯得也有點遠。。

? ? ? ? “這樣設計節省內存空間。有時候在某個特定的情況下。我們僅僅須要用的某種特定的類型,怎樣像結構體那樣則浪費了存儲空間。在曾經的時候Linux編程(POSIX)中IP地址的結構體(struct in_addr)就是一個聯合(也可能是結構體成員是聯合),比方成員是4個元素char數組,兩個元素的short數組,或一個int等等,這樣我們就能根據不同的網絡類型(A類、B類、C類)來自由的獲取該地址的網絡號或主機號(比方。要獲得一個網絡的網絡號。若是一個A類地址,我們就讀取char數組第一個元素。B類地址我們就讀取short的第一個元素來)”

當然了如今的struct in_addr 里面實際上僅僅是包括一個整型的結構體了。

不是聯合了。上面關于in_addr和聯合的說法是從《UNP》上看來的。

算法

大數相加的算法

問:“怎樣實現兩個數的相加(超過了long long這些的范圍了)?”

答:“用一個字符數組來存儲數字,然后依次遍歷每一個字符。通過減‘0’字符的方法轉換為數字。再逐位相加。。

這是比較經典的大數算法。

但他事實上沒等我說完就打斷我了

問:“這樣當然能夠,可是這樣的方法效率非常低。有沒有高效的方法”

答:“不會了”

問:“再想半分鐘”

答:“真的不會了(對自己也是無語。求網友告知算法)”

其它算法

問:“你還了解哪些算法”

答:“大部分是學數據結構涉及到的算法,BFS,DFS,最小生成樹。最短路徑等等。hash也算一種算法吧,還有排序算法。其它的比方像并查集這樣的數據結構也算吧。”

關于算法我沒敢多提,由于我也怕他深入地問下去,好久沒搞算法了,這次沒準備,肯定會跪。

只是他也沒深入的問下去

書籍

問:“你沒有項目經驗。那你讀過什么經典書籍嗎?”

答:“C++ primer,Think in C++也讀過一點。(事實上讀過一點的經典書籍還有非常多。。

)”

const指針

問:“聲明一個常量指針,指向一個整型。但指向的地址不可變”

哎,這個我知道是重點,也是easy混淆的知識點。前幾天我還特地整理了一下。只是,給我點時間我自己慢慢梳理一下能夠答好的。他這一問,我才發現我還是掌握不堅固。

答錯了。他又指導了我一下。

正確的答案是:const int * a(int const * a)。

int * const a 是指向的整型的值不可變,指針本身可變。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

總結一下,速記方法:關鍵的是const與星號(*)的位置。int永遠在星號左邊的。記成“反轉”即可了。

能夠忽略到int。

那么就僅僅有兩種形式

const * a和* const a。表面上const * a const在星號前面應該是修飾指針的,可是要反轉記憶一下,它是修飾變量的。

即變量是常量。

* const a表面上,cosnt在a前面應該是修飾變量的,實際上它是修飾指針的,即地址是常量不能變。


以上僅僅是速記的方法。并非C語言設計者的設計意圖。

。。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

內存對齊

問:“比方你malloc了一段內存,它的地址不是內存對齊的,怎樣實現8字節的內存對齊?”

答:“一個預處理的那個#pragma能夠實現(#pragma pack(8))”

問:“這是用編譯器來實現。有沒有軟件方式?”

接下來是在他的提示下,我大概推測了一下回答的。

答:“先推斷malloc的內存地址是不是內存對齊的”

問:“怎樣推斷?”

答:“8字節對齊。那么內存地址應該是8的倍數,能夠%8(對8求余)”

問:“這會涉及到除法運算,效率比較低。”

答:“那就用位操作,能夠按位與,前面幾位是0后面三位是1,哦,我說的是二進制(十進制7)。

然后推斷值是否為0”

問:“假設結果是沒有對齊,該怎樣對齊呢?”

接下來就全然是我的臆測了

答:“那就給這個地址指針加一下。差多少就加多少,可能還要根據指針類型進行一些轉換。

”(答的不好。只是他也沒提反對意見,就下一題了


--------------------------------------------------------------------------------------------------------------------------------------------------------------

后來我自己手動敲了一下代碼。須要注意的問題是指針是不能直接進行求余或位操作的,進行指針到int類型的強制類型轉換是失敗的。

可選方案例如以下:

假設是C++的話。使用reinterpret_cast

long pp = reinterpret_cast<long>(p); // p 是char *類型

假設pp是int型(reinterpret<int>(p))則會報錯提示丟失精度(gcc 64位)。

二面的時候面試官又問了相同的問題,只是問的細節很多其它,他說能夠用static_cast<>來轉換指針為整型。

我后來試了一下發現不能夠。。會報錯的。所以我嘗試了reinterpret_cast<>

假設是C++的話。就:

int pp = reinterpret_cast<int>(p); // p是char *類型

C語言盡管沒這個功能,但事實上要想比較指針地址是否是8的倍數,實現還是比較簡單的,指針類型是無法指針做&操作的。

可是我們能夠進行一個小轉換:

//a 是malloc的返回值。char *類型
if ((a - (char *)0) & 7)
{
....
}

當然這段代碼C++也能夠用。

要注意的是malloc的返回值最好要強制類型轉換為 char *:

// 比方分配一百的個字符的空間。
char *p = (char *)malloc(sizeof(char)*(100+8)); // 多分配8個字節的空間。為了以后的偏移留足空間。

盡管理論上malloc的返回值能夠轉化為隨意指針類型比方:int *。

可是要注意到指針的加減操作。所偏移的單位是指向類型的大小。比方:

// 假設p是int *類型
p += 1; // p向后偏移1*4個字節(int是4個字節)
// 假設p是char *類型
p += 1; // p向后偏移1*1個字節(char是1個字節)

非常明顯char *類型的指針偏移的準確度更高。這也是為什么我們通常把malloc返回值轉換為char *而不是int *的原因。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

回調函數

問:“C++中怎樣實現回調函數”

回調函數,挺熟的名字,callback。

。。可是詳細是個什么意思還真不好說。記得在安卓里面見到過。就扯了一下安卓。

問:“那么在C++中該怎樣實現呢”

接下來。確實也是運氣。

腦袋里冒出個函數指針,就脫口而出了。說了個一般的函數指針使用方法。貌似說對了。

答:“函數指針吧,先什么一種類型的函數的函數指針,然后你能夠自己去實現這樣的類型的函數。然后再把這個函數作為參數傳遞給函數中(參數是函數指針的函數)。

內存分配原理

問:“有沒有看過內存分配管理的源代碼?比方malloc之類的。

答:“沒有啊。那大概是匯編吧”(記得大概是Linus說過早期的malloc是用匯編實現的。如今就不知道了。

。)

問:“也不是涉及詳細語言,就是內存管理的算法了解嗎?”

答:“沒看過這方面的不了解。。”

然后問題就結束了。如今想想他的意思大概是要我從操作系統的知識方面談一下內存管理的算法,比方掃描一下,哪里未使用的空間就分配出去之類的。


后來問我有什么問題。

我基本沒啥問題。問了點弱智問題。

問:“是內推的你們會打電話過來(在某群里找了個內推。

)還是全部在官方申請實習的。你們都會打電話過來?”

答:“一般全部申請的都我們會打過去。


---------

后來第二天打來第二個電話。二面。。只是二面掛了。。

轉載于:https://www.cnblogs.com/yutingliuyl/p/6871835.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言程序設計第三次作業

&#xff08;一&#xff09;改錯題 計算f(x)的值&#xff1a;輸入實數x&#xff0c;計算并輸出下列分段函數f(x)的值&#xff0c;輸出時保留1位小數。 輸入輸出樣例1&#xff1a;   Enterr x: 10.0   f(10.0) 0.1 輸入輸出樣例2&#xff1a;   Enter x: 234   f(234.0…

mysql數據庫項目化教程鄭小蓉_MySQL數據庫項目化教程(高等職業教育“十三五”規劃教材(軟件技術專業))...

《MySQL數據庫項目化教程/高等職業教育十三五規劃教材(軟件技術專業)》是一本介紹MySQL數據庫基礎知識的入門教材&#xff0c;采用項目驅動方式循序漸進地介紹MySQL各個模塊的知識。主要內容包括&#xff1a;Windows下MySQL的安裝&#xff0c;MySQL服務的啟動與停止&#xff0c…

WPF-09 ManualResetEventSlim信號量

業務場景如下&#xff1a;WPF應用程序后臺有個定時任務在接收PLC硬件數據(該線程接收完數據之后, 會重新啟動一個新線程繼續接收.....)&#xff0c;當應用程序關閉時, 我們得確保接收PLC硬件數據的線程完成之后,再關閉應用程序&#xff0c;否則會造成數據丟失。上面的業務場景是…

【bzoj3033】太鼓達人 DFS歐拉圖

題目描述 給出一個整數K&#xff0c;求一個最大的M&#xff0c;使得存在一個每個位置都是0或1的圈&#xff0c;圈上所有連續K位構成的二進制數兩兩不同。輸出最大的M以及這種情況下字典序最小的方案。 輸入 一個整數K。 輸出 一個整數M和一個二進制串&#xff0c;由一個空格分隔…

Redis 集合處理

學習了列表之后&#xff0c;發現了Redis處理字符串的功能強大。 為了適應不同場景的需求&#xff0c;還有一個用的很多的就是集合。 Redis提供的集合支持的類型是字符串。并且集合中的元素值是唯一的&#xff0c;也就是說不能出現重復數據。 而且&#xff0c;集合的實現是通過哈…

fpga mysql_FPGA的一些瑣碎知識整理

1.生產FPGA的廠家有&#xff1a;ALTERAXILINXATCELLatticeps:Altera和Xilinx主要生產一般用途FPGA&#xff0c;其主要產品采用SRAM工藝Actel主要提供非易失性FPGA&#xff0c;產品主要基于反熔絲工藝和FLASH工藝ps: 熔絲&#xff0c;顧名思義&#xff1a;把絲熔掉&#xff0c;反…

使用增量備份修復DG中的GAP

問題描述 oracle中DG出現主備不同步現象&#xff0c;alert日志報警有gap信息&#xff0c;但是v$archive_gap視圖查不到任何信息。同時主庫上的對應歸檔已經刪除且沒有備份 解決方案 1.查詢備庫的scn SQL> select current_scn from v$database; 這時有可能出來的scn是以科學計…

C# 反射類Assembly用法舉例

概述程序運行時&#xff0c;通過反射可以得到其它程序集或者自己程序集代碼的各種信息&#xff0c;包括類、函數、變量等來實例化它們&#xff0c;執行它們&#xff0c;操作它們&#xff0c;實際上就是獲取程序在內存中的映像&#xff0c;然后基于這個映像進行各種操作。Assemb…

團隊作業

團隊&組員&#xff1a; 沒有組名&#xff0c;大概是因為我們組雖然有10個人&#xff0c;但是好像只起到人多的地方就容易開車搞笑&#xff0c;沒有內涵&#xff0c;取出來的都是秋名山吳彥組這樣的開車組名&#xff0c;在大家的的強烈建議和玩笑中&#xff0c;決定了沒有組…

算法系列【希爾排序】篇

常見的內部排序算法有&#xff1a;插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。用一張圖概括&#xff1a;關于時間復雜度&#xff1a;1. 平方階 (O(n2)) 排序各類簡單排序&#xff1a;直接插入、直接選擇和冒泡排序。2. 線性對數…

sql查詢索引語句_sql優化總結--基于sql語句優化和索引優化

概述最近做查詢&#xff0c;統計和匯總。由于數據量比較龐大&#xff0c;大部分表數據上百萬&#xff0c;甚至有的表數據上千萬。所以在系統中做sql優化比較多&#xff0c;特此寫一篇文章總結一下關于sql優化方面的經驗。導致查詢緩慢的原因1、數據量過大2、表設計不合理3、sql…

電商行業運維實踐

電商行業運維實踐&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;…

數據結構小總結(成都磨子橋技工學校數據結構前12題)

[pixiv] https://www.pixiv.net/member_illust.php?modemedium&illust_id34352147 暑假的作業&#xff0c;頹頹的我總算是寫完了 線段樹 線段樹是一個高級玩意&#xff0c;不僅可以求區間和&#xff0c;區間最大等等的簡單問題&#xff0c;靈活運用還有好多變種。自從學…

【九章算法免費講座第一期】轉專業找CS工作的“打狗棒法”

講座時間&#xff1a; 美西時間6月5日18&#xff1a;30-20&#xff1a;00&#xff08;周五&#xff09; 北京時間6月6日09&#xff1a;30-11&#xff1a;00&#xff08;周六a.m&#xff09; 講座安排&#xff1a; 免費在線直播講座 報名網址&#xff1a; http://t.cn/R2XgMSH&a…

golang mysql 防注入_Go,Gorm 和 Mysql 是如何防止 SQL 注入的

Go&#xff0c;Gorm 和 Mysql 是如何防止 SQL 注入的SQL 注入和 SQL 預編譯技術什么是 SQL 注入所謂SQL注入(sql inject)&#xff0c;就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串&#xff0c;最終達到欺騙服務器執行惡意的SQL命令。具體來說&#xff…

wav2midi 音樂旋律提取算法 附可執行demo

前面提及過&#xff0c;音頻指紋算法的思路。 也梳理開源了兩個比較經典的算法。 https://github.com/cpuimage/shazam https://github.com/cpuimage/AudioFingerprinter 后來一段時間&#xff0c;稍微看了下這兩個算法&#xff0c;還有不少可以精簡優化的空間。 例如抗噪&…

全新升級的AOP框架Dora.Interception[5]: 實現任意的攔截器注冊方式

Dora.Interception提供了兩種攔截器注冊方式&#xff0c;一種是利用標注在目標類型、屬性和方法上的InterceptorAttribute特性&#xff0c;另一種采用基于目標方法或者屬性的調用表達式。通過提供的擴展點&#xff0c;我們可以任何我們希望的攔截器注冊方式。目錄一、IIntercep…

SCAU 算法課的題

8594 有重復元素的排列問題&#xff08;優先做&#xff09; 時間限制:1000MS 內存限制:1000K提交次數:1610 通過次數:656 題型: 編程題 語言: G;GCC;VC Description 設集合R{r1,r2,...,rn}是要進行排列的n個元素&#xff0c;其中r1,r2,...,rn可能相同。 試著設計一個算法&am…

react 數組新增_React 新特性 Hooks 講解及實例(二)

本文是 React 新特性系列的第二篇&#xff0c;第一篇請點擊這里&#xff1a;React 新特性講解及實例什么是 HooksHook 是 React 16.8 的新增特性。它可以讓你在不編寫 類組件 的情況下使用 state以及其他的 React 特性。類組件的不足狀態邏輯復用難缺少復用機制渲染屬性和高階組…

智課雅思詞匯---二十二、-al即是名詞性后綴又是形容詞后綴

智課雅思詞匯---二十二、-al即是名詞性后綴又是形容詞后綴 一、總結 一句話總結&#xff1a; 后綴&#xff1a;-al ②[名詞后綴] 1、構成抽象名詞&#xff0c;表示行為、狀況、事情 refusal 拒絕 proposal 提議 withdrawal 撤退 1、名詞性后綴acy是什么意思&#xff1f; 后綴&a…