欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

給個offer就要 level
獲贊
43
粉絲
56
關注
6
看過 TA
369
門頭溝學院
2026
C++
IP屬地:上海
正在認真學習計算機的小趴菜~
私信
關注
04-23 13:48
門頭溝學院 C++
0 點贊 評論 收藏
分享
04-20 22:11
已編輯
門頭溝學院 C++
1. C++中的內存分布?2. 在成員函數(shù)中調用delete this會出現(xiàn)什么問題呢?對象還可以使用嗎?3. 如果在類的析構函數(shù)調用delete this會出現(xiàn)什么問題?4. 類對象的內存大小手那些因素影響?1. 包括堆、棧、全局/靜態(tài)變量區(qū)、常量區(qū)、代碼區(qū);在執(zhí)行函數(shù)的時候,函數(shù)內部變量的存儲單元可以在棧上創(chuàng)建,函數(shù)執(zhí)行結束時這些存儲單元自動釋放。堆區(qū)是由用戶采用new創(chuàng)建并使用delete釋放,需要人為手動釋放,如果忘記,可能會造成內存泄漏;全局/靜態(tài)變量區(qū)一般存儲全局的變量和由static聲明的變量;常量區(qū)指的是不可以更改的變量;代碼區(qū)存放程序的二進制代碼;2. 在類對象的內存空間中,只有數(shù)據(jù)成員和虛函數(shù)表指針,并不包含代碼內容,類的成員函數(shù)單獨放在代碼段中。調用了delete this指針后,會將類對象的內存空間釋放;后續(xù)只要不要涉及到this指針的內容,都能夠正常運行;3. 會導致堆棧溢出;因為會反復調用本對象的析構函數(shù),導致無限循環(huán);4. 類的非靜態(tài)成員變量大?。粌却鎸R另外分配的空間大?。粨碛刑摵瘮?shù)的話,會在類對象中插入vptr指針;如果該類是派生類的話,會繼承基類部分的數(shù)據(jù)成員;
0 點贊 評論 收藏
分享
04-02 21:12
已編輯
門頭溝學院 C++
1. 讀寫鎖如何實現(xiàn)?2. 如何實現(xiàn)線程池?線程池里放了多個任務后,這些任務怎么分配到各線程的?3.哈希表的原理是什么?4.怎么實現(xiàn)對一個樹結構進行廣度優(yōu)先遍歷?5.棧內存和堆內存的區(qū)別?棧為什么分配速度快?它具體怎么分配?6.當使用new創(chuàng)建一個新的數(shù)組,它指針是虛擬地址還是物理地址?什么時候回真正映射到物理內存?7.https加密原理是怎么樣的?8.如果有個假冒服務器,它也可以跟你握手嗎?1. 讀寫鎖是一種并發(fā)控制機制,允許多個線程同時讀取共享資源,但寫操作需要獨占訪問;初始化一個互斥鎖(用于保護共享轉態(tài)),初始化一個條件變量(用于阻塞等待的線程);讀鎖:如果沒有寫線程正在訪問,允許讀線程進入;寫鎖:如果沒有讀線程或寫線程正在訪問,允許寫線程進入;解鎖:讀線程解鎖時,介紹讀取計數(shù);寫線程解鎖時,通知等待的線程;2. 線程池,通過三個類實現(xiàn),(1)線程類,用于控制線程的啟動和停止,以及維護一個指向事件循環(huán)的指針;(2)程池類:用于管理線程,包括初始化線程數(shù)量,已經(jīng)放置一個任務隊列,每來一個事件就放到隊列里,如果有空閑線程就喚醒去執(zhí)行;(3)任務函數(shù)的接口類,寫一個基類,自己通過子類來自定義函數(shù);線程池收到任務后,會把任務放到共享的任務隊列里面,每個線程會在循環(huán)里去拿任務,拿到任務時要加鎖互斥,誰先拿到就執(zhí)行。另外還可以考慮給任務添加優(yōu)先級3. 通過哈希函數(shù)將將鍵值映射到數(shù)組索引,再用數(shù)組存儲鍵值對。舉例:像C++中的unorder_map,使用鏈地址法解決沖突,在哈希沖突時把多個元素放到同一個桶里鏈表中。當存儲的元素跟數(shù)組大小的比值超過一定閾值,會進行自動擴容;4.  廣度優(yōu)先遍歷就是對每一層進行遍歷,用隊列實現(xiàn);先把根節(jié)點入隊,出隊時訪問,然后把它的子節(jié)點按順序入隊,一直到隊列為空;5. 棧由操作系統(tǒng)自動分配回收,存儲函數(shù)的現(xiàn)參、局部變量、返回地址等;堆是通過new/delete或者malloc/free由程序自己分配釋放,能分配更大的內存,但可能會出現(xiàn)內存碎片等問題;操作系統(tǒng)在底層對棧提供支持,會分配專門的寄存器存放棧的地址,另外它的入棧出棧操作也十分簡單,并且由專門的指令執(zhí)行,所以下來會很快;堆的操作是由C/C++函數(shù)庫提供,在分配內存的時候需要一定的算法尋找合適大小的內存。并且獲取堆的內容需要兩次訪問,第一次訪問指針,第二次根據(jù)指針保存的地址訪問內存,因此堆比較慢。6. 并不是物理內存,而是虛擬地址,后面需要通過頁表和MMU(內存管理單元)來映射到物理內存;操作系統(tǒng)采用懶加載策略,只有在程序訪問這塊內存時,才會將虛擬內存頁映射到物理內存。也就是說,程序觸發(fā)缺頁中斷時,操作系統(tǒng)才會分配物理內存并更新頁表來完成映射。7. 客戶端會發(fā)送一個Client random + TLS版本號 + 支持的密碼套件列表的信息給服務端,服務器回應一個Server random + 自己的數(shù)字證書;客戶端通過證書認證機構(CA)來驗證證書是否合法,確認服務器身份后,用服務器的公鑰加密一個pre-master發(fā)回給服務器;服務器用私鑰解密得到該數(shù);后面的就使用這個生成的會話秘鑰client random + Server random + pre-master進行對稱加密傳輸;8. 如果是一個假冒服務器,它的證書沒有權威CA的簽名,或者證書域名不匹配,客戶端會提示不信任,阻止連接。CA:是證書頒發(fā)機構,負責簽發(fā);證書:由CA頒發(fā)的電子文件,包含公鑰、身份信息和CA的簽名等;
0 點贊 評論 收藏
分享
03-25 14:40
門頭溝學院 C++
1. 什么是虛函數(shù)、純虛函數(shù)?2. 什么函數(shù)不能聲明為虛函數(shù),析構為什么要聲明為虛函數(shù)?3. 沒有虛函數(shù)的話,C++如何實現(xiàn)多態(tài)4. 同一個類的不同對象的虛函數(shù)表是同一個嗎5. 基類的虛函數(shù)表存放在內存的什么區(qū),虛表指針vptr的初始化時間?6. 虛函數(shù)內部調用非虛函數(shù)是調用指針類還是對象類?7. 純虛函數(shù)?使用場景有哪些?8. 純虛繼承解決什么問題?1. 虛函數(shù)是在面向對象編程中用于實現(xiàn)動態(tài)多態(tài)特性的機制;通過將基類的成員函數(shù)聲明為虛函數(shù),可以在派生類中重寫這些函數(shù),從而根據(jù)對象的實際類型確定調用函數(shù)版本;純虛函數(shù)是一個在基類聲明的虛函數(shù),但沒有在基類中提供實現(xiàn)。通過在函數(shù)聲明的結尾使用=0來標記;2. 構造函數(shù):因為在對象構建之前還未創(chuàng)建虛函數(shù)表;靜態(tài)函數(shù):靜態(tài)函數(shù)沒有this指針,與對象無關,不能聲明為虛函數(shù);內聯(lián)函數(shù):虛函數(shù)可以是內聯(lián)的,但是當虛函數(shù)表現(xiàn)為多態(tài)的時候不可以是內聯(lián),因為內聯(lián)是發(fā)生在編譯期間的,而動態(tài)是發(fā)生在運行狀態(tài);析構函數(shù)可以是虛函數(shù),而且建議都這么做,當將基類中的析構函數(shù)聲明為虛函數(shù)的時候,在執(zhí)行析構的時候,可以確保派生類的析構函數(shù)也被執(zhí)行;3.  使用函數(shù)指針,使用模版(在編譯時實現(xiàn)多態(tài)),使用策略模式(運行在運行時選擇算法和行為);4. 同一個類的不同對象的虛函數(shù)表是相同的,因為虛函數(shù)表是按類生成的,而不是按對象生成的。每個對象的虛函數(shù)指針指向類的虛函數(shù)表,從而實現(xiàn)多態(tài)調用;5. 存儲在常量區(qū)(只讀數(shù)據(jù)段),vptr的初始化發(fā)生在對象的構造函數(shù)被調用時;6. 當一個虛函數(shù)內部調用一個非虛函數(shù)時,調用的是指針類型所指向的類中的函數(shù),而不是對象實際類型的類中的函數(shù);7. 純虛函數(shù)是C++中用于定義抽象基類的工具。一個包含純虛函數(shù)的類被稱為抽象類,不能被實例化。純虛函數(shù)的目的是讓基類定義一個接口,而不提供具體的實現(xiàn),具體的實現(xiàn)由派生類來完成。場景:定義通用接口、實現(xiàn)多態(tài)、延遲綁定;8. 純虛繼承(也稱為虛繼承)是C++中用于解決多重繼承帶來的某些問題的一種機制。以下是純虛繼承主要解決的問題:解決函數(shù)調用的歧義,避免成員變量的重復,解決菱形繼承中的重復繼承問題(菱形繼承是指一個派生類從兩個基類派生,而這兩個基類又有一個共同的基類。如果不使用純虛繼承,派生類會從兩個基類各集成一份共同基類的成員,導致重復繼承和訪問歧義;純虛函數(shù)繼承確保派生類只繼承一份共同基類的成員);
0 點贊 評論 收藏
分享
03-25 14:40
已編輯
門頭溝學院 C++
1. 介紹下幾種典型的鎖2. 為什么不能把所有函數(shù)寫成內聯(lián)函數(shù)?3. 虛函數(shù)的作用與多態(tài)?4. 虛函數(shù)的底層實現(xiàn)?1. 讀寫鎖:可以允許多個讀者同時進行讀 寫者必須互斥 寫者優(yōu)先于讀者;互斥鎖:一次只能一個線程擁有互斥鎖,其它線程只有等待;條件變量:通過允許線程阻塞和等待另一個線程發(fā)送信號,一般和互斥鎖一起使用;自旋鎖:如果進程無法取得鎖,進程不會立刻放棄CPU時間片,而是一直循環(huán)嘗試讀取鎖,直到獲取為止;2. 內聯(lián)函數(shù)以代碼復雜為代價,以省去函數(shù)調用的開銷來提高執(zhí)行效率。如果你的內聯(lián)函數(shù)代碼比較長,會消耗更多的內存空間,函數(shù)體內有循環(huán),函數(shù)執(zhí)行時間要比函數(shù)調用開銷還大;3. 虛函數(shù)的主要作用是實現(xiàn)多態(tài)的機制?;惗x為虛函數(shù),子類對其進行重寫該函數(shù),當父類的指針指向子類對象的地址時,父類指針根據(jù)賦給它的不同子類指針,動態(tài)的調用子類的該函數(shù),而不是父類的函數(shù)。4. 虛函數(shù)的底層實現(xiàn)依懶虛函數(shù)表,虛表指針;每個類使用一個虛函數(shù)表,每個類對象用一個虛表指針。如果派生類重寫了基類的虛函數(shù),該派生類的虛函數(shù)表將保存重寫的虛函數(shù)的地址,而不是基類的虛函數(shù)地址。如果基類中虛函數(shù)沒有在派生類中重寫,那么派生類繼承基類中的虛方法,并且派生類中虛函數(shù)表將保存基類中未被重寫的虛函數(shù)地址。
0 點贊 評論 收藏
分享
03-22 19:36
已編輯
門頭溝學院 C++
未爾科技 實習 日薪200+10餐補 雙非碩
0 點贊 評論 收藏
分享
03-22 11:53
已編輯
門頭溝學院 C++
1. 被free回收的內存是立即返回給操作系統(tǒng)嗎?2. sizeof和strlen的區(qū)別?3. new/delete、malloc/free的區(qū)別4. 堆快一點還是棧快一點?5. 在main執(zhí)行之前和執(zhí)行之后執(zhí)行的代碼可能是什么?6. final和override的關鍵字?7. 拷貝初始化和直接初始化?8. select、poll、epoll9.Reactor?10. 阻塞、非阻塞、同步、異步?11. Proactor?1. 被free回收的內存首先會被ptmalloc使用雙鏈表保存起來,當有用戶申請內存的時候,會直接從這里面找出合適的內存進行返回。這樣可以避免操作系統(tǒng)的頻繁調用,另外它還會將小內存進行合并,防止產(chǎn)生過多的內存碎片;2. sizeof是運算符,strlen是庫函數(shù)。sizeof的參數(shù)可以是任何數(shù)據(jù)的類型或數(shù)據(jù),strlen的參數(shù)只能是字符串的指針,且結束符為'\0'的字符;3. 前者是C++運算符,后者是C/C++庫函數(shù);new自動計算要分配的內存對象,malloc需要計算;new是類型安全的,malloc不是;調用new的給自定義對象分配內存的時候,會調用構造函數(shù)并分配相應的內存,delete的時候會釋放內存并執(zhí)行析構;4.  ??煲稽c,操作系統(tǒng)堆棧提供支持,有分配專門的寄存器存放棧的地址,棧的出入棧也十分簡單,并且有專門的指令執(zhí)行,所以棧的效率更高更快;而堆在分配的內存的時候要使用算法尋找合適大小的內存,并且在獲取堆的內容的時候需要兩次訪問,一次指針,一直是指針保存的地址5. 初始化全局變量和靜態(tài)變量,即.data段數(shù)據(jù),將未初始化的全局變量進行賦值;全局對象初始化;將argc、argv傳遞給main函數(shù);___attribute___(constructor);結束后,全局的析構函數(shù)會在main函數(shù)執(zhí)行完后析構,可用一個atexit注冊一個函數(shù)會在main函數(shù)之后執(zhí)行;___attribute___(destructor)6. override的關鍵字,指定了子類的這個虛函數(shù)必須重寫父類的,如果函數(shù)名不小心打錯了,編譯器會進行報錯,不會通過;當不希望某個類被繼承、或不希望虛函數(shù)被重寫可以在類名和虛函數(shù)后面添加final關鍵字;7. 直接初始化直接調用與實參匹配的構造函數(shù);拷貝初始化首先使用指定構造函數(shù)創(chuàng)建一個臨時對象,然后用拷貝構造函數(shù)將那個零食對象拷貝到正在創(chuàng)建的對象;8. select函數(shù)將已連接的socket都放到一個文件描述符集合,然后調用select函數(shù)將文件描述符拷貝到內核中,去遍歷進行檢測那個套接字發(fā)生事件,將其進行標記,后續(xù)再復制到用戶態(tài),進行遍歷找到標記的套接字。這其中發(fā)生了2次遍歷文件描述符集合和2次拷貝文件描述符集合。poll突破文件描述符個數(shù)的限制(1024),通過一個動態(tài)數(shù)組,以鏈表的形式管理。其它與select還是一樣的。epoll通過在內核中使用紅黑樹來跟蹤進程所有待檢測的文件描述符,把需要監(jiān)控的socket通過epoll_ctl函數(shù)加入到內核中的紅黑樹,第二,epoll使用時間驅動的機制,內核里維護了一個鏈表來記錄就緒事件,當某個socket事件發(fā)生時,通過回調函數(shù)內核將其加入到就緒事件列表中,當用戶調用epoll_wait函數(shù)時,只會返回有事件發(fā)生的文件描述符的個數(shù)。9. reactor模型是 I/O 多路復用監(jiān)聽事件,收到事件后,根據(jù)事件類型分配(Dispatch)給某個進程 / 線程。單reactor單進程:reactor對象通過epoll監(jiān)聽事件,收到事件后通過dispatch進行分發(fā),如果是連接建立的事件交個Acceptor對象進行處理,如果不是就交給Handle對象通過read->業(yè)務處理->send的流程來完成完整的業(yè)務流程。單reactor多線程:對于不是連接建立事件,則交由Handler對象處理,他不負責業(yè)務處理,只負責數(shù)據(jù)的接受和發(fā)送,數(shù)據(jù)會發(fā)送給線程池來進行業(yè)務處理,處理完成后將業(yè)務結果返回給handler對象,然后發(fā)送給client;多reactor多線程:主線程只負責接受新連接,子線程負責完成后續(xù)的業(yè)務處理。主線程只需要把新連接傳給子線程,子線程進行業(yè)務處理后,直接可以將處理結果發(fā)送給客戶端。10. 阻塞I/O:當用戶執(zhí)行read,線程會被阻塞,一直等到內核數(shù)據(jù)準備好[1],并把數(shù)據(jù)從內核緩沖區(qū)拷貝到應用緩沖區(qū)中[2],當拷貝完成,read才返回。非阻塞I/O:可以在數(shù)據(jù)未準備好久立即返回,然后應用程序不斷輪訓內核,直到數(shù)據(jù)準備好,[2]操作還是要的;異步I/O:上面的[1]和[2]的步驟都不需要等待,都交由內核完成。11. Reactor模式是基于待完成的I/O事件,而Proactor模式是基于[已完成]的I/O事件。
0 點贊 評論 收藏
分享
03-22 11:39
已編輯
門頭溝學院 C++
1.核心態(tài)與用戶態(tài)?4.智能指針的原理、常用的智能指針及實現(xiàn)?1.內核態(tài)和用戶態(tài)是操作系統(tǒng)中兩種不同的CPU執(zhí)行模式,它們的主要區(qū)別在于權限、資源訪問能力和安全性。內核態(tài)擁有最高權限,可以執(zhí)行所有系統(tǒng)資源,錯誤可能導致系統(tǒng)崩潰。用戶態(tài),較低權限,只能訪問受限資源、錯誤通常只導致進程崩潰。4.動態(tài)分配的資源,交給一個類對象去管理,當類對象聲明周期結束時,自動調用析構函數(shù)釋放資源。share_ptr的實現(xiàn)采用引用計數(shù)的方式,允許多個智能指針指向同一個動態(tài)內存對象,每當增加一個智能指針指向該對象,引用計數(shù)就會加1,當析構一次就會進行減1,當引用計數(shù)為0的時候,就會對動態(tài)內存進行釋放。unique_ptr采用獨享資源所有權語義,一個非空的unique_ptr總是擁有它所指向的資源。不支持拷貝和賦值的操作,可以進行移動。weak_ptr共享資源的觀察者,需要和shared_ptr一起使用,不影響資源的生命周期,以前的引用計數(shù)有一個問題就是互相形成環(huán),這樣兩個指針指向的內存都無方釋放,如果它和share_ptr同時指向,那么當引用計數(shù)為0的時候就會資源釋放,不管是否還有weak_prt指向它。
0 點贊 評論 收藏
分享
03-20 11:47
門頭溝學院 C++
1.如果在頭文件創(chuàng)建一個函數(shù)但是在源文件中沒有實現(xiàn)它,會有bug嗎?如果用到了會有bug嗎?在那個階段會報錯2.如何解決循環(huán)包含的問題?3.動態(tài)庫和靜態(tài)庫的區(qū)別?4.當使用結構體或對象作為unordermap、map中的key,會有哪些操作?5.TCP的三次握手以及完成連接隊列的創(chuàng)建時機?6.介紹一下accept的底層原理?7.TCP的四次揮手?8.MySQL InnoDB存儲數(shù)據(jù)采用什么結構?B+樹的特征?B+樹有哪兩種類型(InnoDB)?聚集索引B+樹和輔助索引B+樹9.工廠模式解決了什么問題?什么場景下使用? 為了影藏對象構造的復雜,10. 在面對一個困難的問題時,你是怎么去分析的?解決的思路是什么?提出多個解決方案,哪一個方案最合適。這些都是重要加分項,不要錯過1. 函數(shù)沒有使用,在編譯、鏈接都不會出現(xiàn)錯誤;函數(shù)使用了,編譯沒問題,鏈接會出錯,如果該函數(shù)聲明為inline(流程簡單、頻繁調用的函數(shù)),在編譯階段就會報錯。2. 循環(huán)依賴 使用前置聲明(當類結構體被用做指針或引用時,無需包含完整定義,前置聲明替代頭文件包含);依賴擴散 pimpl慣用法;重復包含 pragma once 或頭文件保護宏。3. 靜態(tài)庫在編譯的時候會被直接鏈接到可執(zhí)行文件當中,動態(tài)庫是在運行階段才會確定。靜態(tài)庫缺點就是會造成程序體量比較大,并且在可執(zhí)行文件后續(xù)的迭代更新中,每次都需要重新進行編譯和鏈接可執(zhí)行文件,適合小型項目。動態(tài)庫可執(zhí)行文件較小,多個程序共享同一份庫代碼,在后續(xù)的迭代中,只需要更新動態(tài)庫,方便代碼的維護性,適合大型項目。4. 對于unordermap需要重建一個哈希函數(shù)、重載==運算符、對于map需要重載operator <或自定義比較函數(shù)5. 首先客戶端會發(fā)送一個SYN包請求建立連接,服務接受到之后返回一個SYN-ACK包,這個時候也會創(chuàng)建一個未完成連接隊列,將客戶端套接字加入進去,客戶端收到服務端發(fā)來的包之后會發(fā)送一個ACK包,這個時候代表連接建立好了。此時,就會把客戶單的套接字從未完成連接隊列移除,移動到完成連接隊列。6.當客戶端發(fā)起連接請求時,服務端和客戶端會通過TCP進行三次握手建立連接,完成之后,客戶端的連接會被放入已完成連接隊列,等待服務調用accept處理。之后。accept會從完成連接隊列中取出一個客戶端連接,并創(chuàng)建一個新的套接字文件描述符,用于客戶端通信。7.主動關閉方(客戶端)發(fā)送一個FIN報文給服務端,表示沒有數(shù)據(jù)發(fā)送了;服務端收到FIN報文之后,會返回一個ACK包,表示確認收到;服務端這邊沒數(shù)據(jù)發(fā)送了之后,也會發(fā)送一個FIN報文給客戶端;客戶端收到ACK報文之后就會進入一個待關閉的狀態(tài),然后過2MSL就會進行關閉;服務端那邊收到之后就會立馬關閉。8. B+樹的基礎知識有待欠缺,需要進行補習9. 它是一種創(chuàng)建性設計模式,為了將對象的復雜創(chuàng)建邏輯封裝起來,使得客戶端代碼不需要依賴具體的類,而是通過工廠來創(chuàng)建對象。最后下面的圖片,感覺寫的很好,所以貼上來了,是在B站上看到的,如有侵權,聯(lián)系刪除。#面試常問題系列#
0 點贊 評論 收藏
分享

創(chuàng)作者周榜

更多
關注他的用戶也關注了:
牛客網(wǎng)
??推髽I(yè)服務