日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

拼多多、腾讯 C++开发工程师面试题

發布時間:2025/3/15 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拼多多、腾讯 C++开发工程师面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

(一)拼多多實習服務端

1、 一個C++源文件從文本到可執行文件經歷的過程

對于C/C++編寫的程序,從源代碼到可執行文件,一般經過下面四個步驟:

1).預處理,產生.ii文件

2).編譯,產生匯編文件(.s文件)

3).匯編,產生目標文件(.o或.obj文件)

4).鏈接,產生可執行文件(.out或.exe文件)

2、#include 的順序以及尖叫括號和雙引號的區別

1. #include的順序的區別:

頭文件的引用順序對于程序的編譯還是有一定影響的。如果要在文件a.h中聲明一個在文件b.h中定義的變量,而不引用b.h。那么要在a.c文件中引用b.h文件,并且要先引用b.h,后引用a.h,否則匯報變量類型未聲明錯誤,也就是常見的某行少個“;”符號。

2. #include尖括號和雙引號的區別:

1)#include <> ,認為該頭文件是標準頭文件。編譯器將會在預定義的位置集查找該頭文件,這些預定義的位置可以通過設置查找路徑環境變量或者通過命令行選項來修改。使用的查找方式因編譯器的不同而差別迥異。

2)#include "",認為它是非系統頭文件,非系統頭文件的查找通常開始于源文件所在的路徑。查找范圍大于<>。

3、進程和線程,為什么要有線程

1、和進程相比,它是一種非常"節儉"的多任務操作方式。在linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種"昂貴"的多任務工作方式。(資源)

2、運行于一個進程中的多個線程,它們之間使用相同的地址空間,而且線程間彼此切換所需時間也遠遠小于進程間切換所需要的時間。據統計,一個進程的開銷大約是一個線程開銷的30倍左右。(切換效率)

3、線程間方便的通信機制。對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞只能通過進程間通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由于同一進城下的線程之間貢獻數據空間,所以一個線程的數據可以直接為其他線程所用,這不僅快捷,而且方便。(通信)

除以上優點外,多線程程序作為一種多任務、并發的工作方式,還有如下優點:

1、使多CPU系統更加有效。操作系統會保證當線程數不大于CPU數目時,不同的線程運行于不同的CPU上。(CPU設計保證)

2、改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序才會利于理解和修改。(代碼易維護)

4、C++11有哪些新特性

1)關鍵字及新語法:auto、nullptr、for

2)STL容器:std::array、std::forward_list、std::unordered_map、std::unordered_set

3)多線程:std::thread、std::atomic、std::condition_variable

4)智能指針內存管理:std::shared_ptr、std::weak_ptr

5)其他:std::function、std::bind和lamda表達式

5、為什么可變參數模板至關重要,右值引用,完美轉發,lambda

6、malloc的原理,brk系統調用干什么的,mmap呢

malloc的實現方案:

1)malloc 函數的實質是它有一個將可用的內存塊連接為一個長長的列表的所謂空閑鏈表。

2)調用 malloc()函數時,它沿著連接表尋找一個大到足以滿足用戶請求所需要的內存塊。 然后,將該內存塊一分為二(一塊的大小與用戶申請的大小相等,另一塊的大小就是剩下來的字節)。 接下來,將分配給用戶的那塊內存存儲區域傳給用戶,并將剩下的那塊(如果有的話)返回到連接表上。

3)調用 free 函數時,它將用戶釋放的內存塊連接到空閑鏈表上。

4)到最后,空閑鏈會被切成很多的小內存片段,如果這時用戶申請一個大的內存片段, 那么空閑鏈表上可能沒有可以滿足用戶要求的片段了。于是,malloc()函數請求延時,并開始在空閑鏈表上檢查各內存片段,對它們進行內存整理,將相鄰的小空閑塊合并成較大的內存塊。

brk和mmap:

從操作系統角度來看,進程分配內存有兩種方式,分別由兩個系統調用完成:brk和mmap(不考慮共享內存)。

1、brk是將數據段(.data)的最高地址指針_edata往高地址推;

2、mmap是在進程的虛擬地址空間中(堆和棧中間,稱為文件映射區域的地方)找一塊空閑的虛擬內存。

這兩種方式分配的都是虛擬內存,沒有分配物理內存。在第一次訪問已分配的虛擬地址空間的時候,發生缺頁中斷,操作系統負責分配物理內存,然后建立虛擬內存和物理內存之間的映射關系。

在標準C庫中,提供了malloc/free函數分配釋放內存,這兩個函數底層是由brk,mmap,munmap這些系統調用實現的。

7、C++的內存管理方式,STL的allocator,最新版本默認使用的分配器

C++的內存管理方式:

在c++中內存主要分為5個存儲區:

棧(Stack):局部變量,函數參數等存儲在該區,由編譯器自動分配和釋放.棧屬于計算機系統的數據結構,進棧出棧有相應的計算機指令支持,而且分配專門的寄存器存儲棧的地址,效率分高,內存空間是連續的,但棧的內存空間有限。

堆(Heap):需要程序員手動分配和釋放(new,delete),屬于動態分配方式。內存空間幾乎沒有限制,內存空間不連續,因此會產生內存碎片。操作系統有一個記錄空間內存的鏈表,當收到內存申請時遍歷鏈表,找到第一個空間大于申請空間的堆節點,將該節點分配給程序,并將該節點從鏈表中刪除。一般,系統會在該內存空間的首地址處記錄本次分配的內存大小,用于delete釋放該內存空間。

全局/靜態存儲區:全局變量,靜態變量分配到該區,到程序結束時自動釋放,包括DATA段(全局初始化區)與BSS段(全局未初始化段)。其中,初始化的全局變量和靜態變量存放在DATA段,未初始化的全局變量和靜態變量存放在BSS段。BSS段特點:在程序執行前BSS段自動清零,所以未初始化的全局變量和靜態變量在程序執行前已經成為0.

文字常量區:存放常量,而且不允許修改。程序結束后由系統釋放。

程序代碼區:存放程序的二進制代碼

?

SGI 版本STL的默認配置器std::alloc

參見:《STL源碼剖析》

1)考慮到小型區塊所可能造成的內存碎片問題,SGI設計了雙層配置器。第一級配置器直接使用malloc()和free();第二級則視情況采取不同的策略:當配置區塊超過128bytes時,視為“足夠大”,便調用第一級配置器;當配置區塊小于128bytes時,視之為“過小”,為了降低額外負擔,便采用memory pool(內存池)整理方式,而不在求助于第一級配置器。

2)內存池的核心:內存池和16個自由鏈表(各自管理8,16,...,128bytes的小額區塊)。在分配一個小區塊時,首先在所屬自由鏈表中尋找,如果找到,直接抽出分配;若所屬自由鏈表為空,則請求內存池為所屬自由鏈表分配空間;默認情況下,為該自由鏈表分配20個區塊,若內存池剩余容量不足,則分配可分配的最大容量;若內存池連一個區塊都無法分配,則調用chunk_alloc為內存池分配一大塊區塊;若內存不足,則嘗試調用malloc分配,否則返回bad_alloc異常。

8、hash表的實現,包括STL中的哈希桶長度常數。

hash表的實現主要涉及兩個問題:散列函數和碰撞處理。

1)hash function (散列函數)。最常見的散列函數:f(x) = x % TableSize .

2)碰撞問題(不同元素的散列值相同)。解決碰撞問題的方法有許多種,包括線性探測、二次探測、開鏈等做法。SGL版本使用開鏈法,使用一個鏈表保持相同散列值的元素。

雖然開鏈法并不要求表格大小必須為質數,但SGI STL仍然以質數來設計表格大小,并且將28個質數(逐漸呈現大約兩倍的關系)計算好,以備隨時訪問,同時提供一個函數,用來查詢在這28個質數之中,“最接近某數并大于某數”的質數。

9、hash表如何rehash,怎么處理其中保存的資源

先想想為什么需要rehash:

因為,當loadFactor(負載因子)<=1時,hash表查找的期望復雜度為O(1). 因此,每次往hash表中添加元素時,我們必須保證是在loadFactor <1的情況下,才能夠添加。

模仿C++的vector擴容方式,Hash表中每次發現loadFactor==1時,就開辟一個原來桶數組的兩倍空間(稱為新桶數組),然后把原來的桶數組中元素全部轉移過來到新的桶數組中。注意這里轉移是需要元素一個個重新哈希到新桶中的。

?

?

?

?

?

?

(二)騰訊二面面經

1、redis的主從復制怎么做的

Redis舊版復制功能只有同步和命令傳播。新版復制功能加入了部分同步的功能。

1)同步:

2)命令傳播:

當主服務器會將自己執行的寫命令,也即是造成主從服務器不一致的那條寫命令,發送給從服務器執行,當從服務器執行了相同的寫命令之后,主從服務器將再次回到一致狀態。

3)部分同步:(斷線后重復制)

復制偏移量:通過對比主從服務器的復制偏移量,程序可以很容易地知道主從服務器是否處于一致狀態。

復制積壓緩沖區:主服務保存最近的寫命令到復制積壓緩沖區,是一個先進先出隊列

服務器運行ID:從服務器記錄上次同步的主服務器的Id。

2、寫代碼,去掉字符串中的空格空格

#include <iostream>using namespace std;int main(){char str[40] = " abc 123 456 ";int num = 0;int i;for(i = 0; str[i] != '\0'; ++i){if(str[i] == ' ')++num;elsestr[i-num] = str[i];}str[i-num] = '\0';printf("%s\n",str); }

3、如何把一個文件快速下發到100w個服務器

gossip算法?Gossip有眾多的別名“閑話算法”、“疫情傳播算法”、“病毒感染算法”、“謠言傳播算法”。

4、如何判斷一個圖是否連同?

DFS、BFS、并查集

如果大家對C/C++感興趣的話,可以加一下我們的學習交流Q群:637 ?935 ?295,免費領取一套學習資料和視頻課程喲~

5、ubuntu開機的時候系統做了什么

1)加載BIOS

BIOS程序首先檢查,計算機硬件能否滿足運行的基本條件,這叫做”硬件自檢”。硬件自檢完成后,BIOS把控制權轉交給下一階段的啟動程序。

2)讀取MBR

計算機讀取該設備的第一個扇區,也就是讀取最前面的512個字節。如果這512個字節的最后兩個字節是0x55和0xAA,表明這個設備可以用于啟動;如果不是,表明設備不能用于啟動,控制權于是被轉交給”啟動順序”中的下一個設備。

3)Bootloader

在這種情況下,計算機讀取”主引導記錄”前面446字節的機器碼之后,不再把控制權轉交給某一個分區,而是運行事先安裝的”啟動管理器”(boot loader),由用戶選擇啟動哪一個操作系統。

Boot Loader 就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核做好一切準備。

Boot Loader有若干種,其中Grub、Lilo和spfdisk是常見的Loader。Linux環境中,目前最流行的啟動管理器是Grub。

4)加載內核

內核的加載,內核加載后,接開始操作系統初始化,根據進程的優先級啟動進程。

總結

以上是生活随笔為你收集整理的拼多多、腾讯 C++开发工程师面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久亚洲中文字幕无码 | 一卡二卡国产 | 精品国产视频 | 精品国产一区二区三区久久久久久 | 欧美黄色大片网站 | 一区二区av在线 | 日本三级大片 | 波多野吉衣在线观看视频 | 成人网页在线观看 | 中文字幕av高清 | 四虎国产精品成人免费入口 | 校园春色av | 另类av在线| 欧洲一级片 | 手机av免费观看 | 日韩精品无码一区二区三区 | 九色蝌蚪91 | 欧美一级免费看 | 国产男男gay | 日本成人一级片 | 操欧美老女人 | 性高跟鞋xxxxhd人妖 | 天天操国产 | jizz教师| 日韩精选 | 日本高清视频一区二区 | 内射毛片内射国产夫妻 | 国产伦精品一区二区三区免.费 | 好看的黄色录像 | 在线观看黄色的网站 | 亚洲视频网 | 六月婷婷在线观看 | 欧美视频一二三 | 久久精品视频一区二区三区 | 久久资源av | 亚州av一区二区 | 亚洲欧洲免费视频 | 香蕉视频影院 | 国产富婆一区二区三区 | 国产男女精品 | 涩涩涩涩av | 看av网| 精品一区二区在线播放 | 五月天狠狠干 | 牲欲强的熟妇农村老妇女视频 | 亚洲一区不卡 | 欧美精品一二区 | 凹凸日日摸日日碰夜夜 | 亚洲一区欧美激情 | 麻豆网页 | 亚洲成人伊人 | 日韩在线天堂 | 菠萝菠萝蜜网站 | 西西人体44www大胆无码 | 黄av资源 | 国产剧情一区 | 成人99| 久久色视频 | 私人av| 狠狠搞狠狠干 | www国产亚洲精品久久麻豆 | 欧美性猛交乱大交xxxx | 精品无码av一区二区三区四区 | 天天色棕合合合合合合合 | 草草视频在线播放 | 蜜臂av | 大陆农村乡下av | 白丝校花扒腿让我c | 色在线综合 | 波多野结衣网址 | jizz欧洲| 日本五十路在线 | 国产理论视频在线观看 | 色网在线免费观看 | 91亚洲精品乱码久久久久久蜜桃 | 欧美日韩免费在线 | 五月婷婷天 | 国产+日韩+欧美 | 天天躁日日躁狠狠躁av麻豆 | 夜夜躁日日躁狠狠久久av | 久久久久中文字幕亚洲精品 | 在线视频观看一区二区 | 日韩精品中文字幕在线播放 | 欧美一级大片在线观看 | 久久这里只有精品久久 | av影院在线观看 | 朝鲜美女黑毛bbw | 蜜桃av影视 | 精品人人妻人人澡人人爽牛牛 | 夜夜夜网 | 国产成人精品视频在线 | 色男人av| 午夜小影院 | 九久久久久| 国产黄色片在线免费观看 | 亚洲一区区 | 国产美女一区二区三区 | 日韩经典午夜福利发布 | 美女视频一区 |