C++常見面試題之一

一、語言基礎與內存管理

  1. constconstexpr的區別?應用場景?

    • const:運行時常量,修飾變量/函數不可修改。
    • constexpr:編譯期常量(C++11),用于優化計算(如數組大小)。
    constexpr int size = 10;  // 編譯期確定
    const int x = get_value(); // 運行時確定
    
  2. 指針與引用的本質區別?

    • 指針:獨立變量存儲地址,可重指向、可為nullptr
    • 引用:別名,綁定后不可變,無空引用,更安全。
  3. 智能指針(unique_ptr/shared_ptr/weak_ptr)的實現原理與使用場景?

    • unique_ptr:獨占所有權,零開銷(替代auto_ptr)。
    • shared_ptr:引用計數(原子操作),循環引用需weak_ptr解決。
    • ★ 阿里高頻:手寫shared_ptr引用計數實現。
  4. 移動語義(Move Semantics)與完美轉發(Perfect Forwarding)的作用?

    • std::move:將左值轉為右值,觸發移動構造(避免深拷貝)。
    • std::forward:保持參數原始值類型(左值/右值),用于泛型編程。
  5. volatileatomic的區別?

    • volatile:阻止編譯器優化(不保證多線程原子性)。
    • atomic:硬件級原子操作(如load/store),線程安全。

二、面向對象與多態

  1. 虛函數表(vtable)與虛指針(vptr)的工作原理?

    • 每個含虛函數的類有一個vtable,對象通過vptr訪問,運行時動態綁定。
  2. 為何基類析構函數需聲明為virtual

    • 避免派生類對象通過基類指針刪除時資源泄漏(未調用派生類析構)。
  3. 純虛函數與抽象類的聯系?

    • 純虛函數(=0)使類成為抽象類,強制派生類實現接口。
  4. 多重繼承下的菱形繼承問題如何解決?

    • 虛繼承(virtual關鍵字),確保公共基類僅存一份實例。
    class D : public B, virtual public C { ... }; // 虛繼承C
    

三、STL與模板編程

  1. vector底層實現與擴容策略?

    • 動態數組,2倍擴容(避免頻繁分配),reserve()預分配空間優化。
  2. map(紅黑樹)與unordered_map(哈希表)的性能對比?

    操作mapunordered_map
    插入/刪除O(log n)O(1) 平均
    有序性
  3. ☆ C++17的std::optional/std::variant應用場景?

    • optional:安全處理可能缺失的值(替代nullptr或非法值)。
    • variant:類型安全的聯合體(替代union),編譯期類型檢查。
    std::optional<int> find(int id); // 返回有效值或std::nullopt
    
  4. 模板元編程(TMP)的應用案例?

    • 編譯期計算(如斐波那契數列)、類型萃取(type_traits)。

四、并發與多線程

  1. std::thread vs std::async

    • thread:直接創建線程,需手動管理。
    • async:可能復用線程池,通過future自動管理結果。
  2. 死鎖條件與解決方法?

    • 條件:互斥、請求保持、不可剝奪、環路等待。
    • 解決:按固定順序加鎖、std::lock()原子加鎖、超時機制。
  3. 無鎖編程的memory_order選項(如relaxed/seq_cst)?

    • relaxed:允許亂序(性能高,無同步)。
    • seq_cst:全局順序一致(默認,性能低)。
  4. ☆ 協程(Coroutines)的原理與優勢(C++20)?

    • 用戶態線程,切換成本低(20~50ns vs 線程1~10μs),支持異步I/O。
    • 字節跳動真題:實現百萬級協程調度器(Work-Stealing + 無鎖隊列)。

五、系統設計與性能優化

  1. 零拷貝(Zero-Copy)技術實現方案?

    • sendfile()(Linux):文件→Socket直傳(內核2.2+)。
    • splice() + pipe:跨文件描述符傳輸(無用戶態拷貝)。
  2. 高并發日志系統設計要點?

    • 無鎖分片隊列 + 獨立壓縮線程 + Kafka順序寫(美團真題:500萬條/秒)。
  3. 分布式緩存一致性協議(如Raft)?

    • Leader選舉 + 日志復制(多數派確認),腦裂防護(Lease機制)。
    • 阿里真題:Redis集群腦裂解決方案。

六、現代C++新特性(C++17/20)

  1. ☆ 結構化綁定(Structured Binding)

    auto [id, name] = std::make_pair(1, "Alice"); // 解包pair/tuple
    
  2. ☆ 概念(Concepts)的作用(C++20)?

    • 約束模板參數,替代SFINAE,提升可讀性。
    template <typename T> requires integral<T> // 限定T為整型
    T add(T a, T b) { return a + b; }
    
  3. ☆ Range庫(C++20)的優勢?

    • 管道式操作:data | views::filter(...) | views::transform(...)

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

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

相關文章

Golang 語言中的指針介紹

介紹&#xff1a;指針式一種數據類型&#xff0c;用來存儲值的內存地址&#xff0c;為了便于理解&#xff0c;我們也可以把指針未內存地址&#xff0c;指針類型只占用內存4個或 8 個字節&#xff0c;在Golang 語言中&#xff0c;類型名稱加 * 表示改類型的指針類型。指針類型變…

Flink 狀態管理設計詳解:StateBackend、State、RocksDB和Namespace

為什么需要 StateBackend&#xff1f;—— 職責分離原則我們可以用一個銀行的例子來類比&#xff1a;State (如 ValueState, ListState) 就像是你的銀行卡。AbstractKeyedStateBackend 就像是銀行的整個后臺系統&#xff08;包括總服務器、數據庫、風控系統、會計系統等&#x…

櫥柜鉸鏈的革命:炬森精密如何以創新科技重塑家居體驗

在現代化家居設計中&#xff0c;櫥柜不僅是存儲空間的核心&#xff0c;更是生活品質的象征。而作為櫥柜的“關節”&#xff0c;櫥柜鉸鏈的性能直接影響著日常使用的便捷性、安全性和耐久性。然而&#xff0c;許多消費者在櫥柜使用中常遭遇噪音干擾、頻繁松動或早期損壞等痛點&a…

醫療系統國產化實錄:SQL Server國產替代,乙方保命指南

醫療行業的SQL Server替代&#xff0c;和普通業務系統完全不是一個量級——醫囑邏輯嵌套幾十層存儲過程、收費結算小數點錯位能引發醫患糾紛、電子病歷查詢慢一秒醫生直接拍桌子。作為被按在手術臺上的乙方PM&#xff0c;實測四款主流國產庫后&#xff0c;掏心窩子說句實話&…

WAIC 2025 盛大啟幕,深思考邀您解鎖端側 AI 新可能?!

2025 世界人工智能大會今日正式啟幕&#xff0c;深思考人工智能&#xff08;iDeepWise&#xff09;攜端側多模態大模型技術成果登陸展會&#xff0c;與行業伙伴共探端側 AI 發展新機遇。作為專注于類端側多模態大模型領域的創新力量&#xff0c;深思考此次重點展示了 iDeepWise…

MySQL相關概念和易錯知識點(2)(表結構的操作、數據類型、約束)

目錄1.表結構的操作&#xff08;1&#xff09;增加表&#xff08;2&#xff09;查看庫中所有的表&#xff08;3&#xff09;查看表每個列的約束&#xff08;4&#xff09;刪除整張表&#xff08;5&#xff09;刪除某個具體的列&#xff08;6&#xff09;增加某個具體的列&#…

1. Qt多線程開發

目錄方法1.繼承QThread使用案例總結方法2.將qobject對象moveToThread&#xff08;官方推薦&#xff09;使用案例總結方法3.QRunnable QThreadPool使用案例總結方法4.快速線程QtConcurrentQFutureWatcher使用案例總結代碼下載方法1.繼承QThread 需要實現QThread的抽象函數run …

ARM入門學習方法分享

首先認識什么是ARM?ARM公司簡介ARM是Advanced RISC Machines的縮寫&#xff0c;它是一家微處理器行業的知名企業&#xff0c;該企業設計了大量高性能、廉價、耗能低的RISC &#xff08;精簡指令集&#xff09;處理器。 1985年第一個ARM原型在英國劍橋誕生。公司的特點是只設計…

基于springboot的在線數碼商城/在線電子產品商品銷售系統的設計與實現

用戶&#xff1a;數碼產品&#xff0c;限時秒殺&#xff0c;種草分享&#xff0c;新品資訊&#xff0c;留言板&#xff0c;訂單管理&#xff0c;在線客服&#xff0c;購物車&#xff0c;個人中心管理員&#xff1a;個人中心&#xff0c;用戶管理&#xff0c;數碼分類管理&#…

Zookeeper學習專欄(十):核心流程剖析之服務啟動、請求處理與選舉協議

文章目錄前言一、服務端啟動流程1.1 啟動入口類&#xff1a;QuorumPeerMain1.2 集群模式啟動核心&#xff1a;runFromConfig1.3 QuorumPeer線程核心邏輯&#xff1a;run()1.4 關鍵子流程&#xff1a;數據恢復1.5 關鍵設計要點二、請求處理鏈&#xff08;責任鏈模式&#xff09;…

網絡基礎19--OSPF路由業務多區域

一、OSPF多區域必要性單區域問題&#xff1a;LSDB龐大 → 內存占用高&#xff0c;SPF計算開銷大LSA洪泛范圍廣 → 拓撲變化影響全域無法路由匯總 → 路由表膨脹&#xff0c;查找效率低2. 多區域優勢&#xff1a;1. 劃分區域&#xff1a;獨立LSDB&#xff0c;縮小數據庫規模2. 限…

MFC擴展庫BCGControlBar Pro v36.2新版亮點:圖形管理器等全新升級

BCGControlBar庫擁有500多個經過全面設計、測試和充分記錄的MFC擴展類。 我們的組件可以輕松地集成到您的應用程序中&#xff0c;并為您節省數百個開發和調試時間。 BCGControlBar專業版 v36.2已全新發布了&#xff0c;在這個版本中添加了一個新的擴展器控件、改進了網格和報表…

QT開發---網絡編程上

Qt Network 模塊Qt Network 模塊提供了豐富的類用于實現各種網絡通信功能&#xff0c;涵蓋 TCP、UDP、HTTP、FTP 等多種協議。 Qt 網絡類均為異步操作&#xff0c;通過信號槽處理結果&#xff0c;避免阻塞 UI 線程。在使用QT進行網絡編程之前&#xff0c;就必須在 CMakeLists.t…

[spring6: Mvc-函數式編程]-源碼解析

接口 ServerRequest public interface ServerRequest {HttpMethod method();URI uri();UriBuilder uriBuilder();default String path() {return requestPath().pathWithinApplication().value();}default RequestPath requestPath() {return ServletRequestPathUtils.getPar…

Linux DNS 服務器正反向解析

一、環境說明與準備工作 1.基礎信息 本次實驗用兩臺 Linux 主機&#xff0c;分別作為 DNS 服務端和客戶端&#xff0c;具體信息如下&#xff1a;服務端IP客戶端IP網址192.168.120.130192.168.120.128www.zy.com2.準備工作 關閉安全軟件&#xff1a;服務端和客戶端都要關閉防火墻…

歷史數據分析——中證旅游

中證旅游板塊走勢從月線級別來看2015年5月到2024年9月&#xff0c;月線上走出了一個震蕩中樞的月線級別下跌段&#xff1b;目前月線級別底部放巨量&#xff0c;總體還在底部震蕩&#xff0c;后續上漲的概率較大。從周線級別來看從2022年12月到2024年9月整體是下跌走勢&#xff…

OpHReda精準預測酶最佳PH

1.顯著改進&#xff1a;OpHReda通過檢索嵌入數據增強機制&#xff0c;顯著提高了酶最佳pH預測的準確性&#xff0c;相比現有方法提升了55%的F1分數。2.多尺度殘差輕注意力模塊&#xff1a;該模塊結合了殘差學習和多尺度特征提取&#xff0c;增強了模型對酶序列中殘差級信息的捕…

醫護行業在未來會被AI淘汰嗎?

隨著AI的迅速發展&#xff0c;似乎所有職業都有被AI替代的風險&#xff0c;那麼醫療領域作為一個高技術依賴性的行業&#xff0c;有機會被淘汰嗎?我們今天就來說說&#xff0c;幾乎不可能被AI淘汰的職業---護理。一) AI在護理中扮演的角色i.) 臨床工作支持1. 健康監測自動化即…

大語言模型加速技術之KV Cache

大語言模型加速技術之KV CacheWhy we need KV Cache &#xff1f;Self-Attention Without CacheSelf-Attention With CacheHuggingface 官方代碼實現Why we need KV Cache &#xff1f; 生成式generative模型的推理過程很有特點&#xff0c;我們給一個輸入文本&#xff0c;模型…

代碼隨想錄算法訓練營第五十三天|圖論part4

110.字符串接龍 題目鏈接&#xff1a;110. 字符串接龍文章講解&#xff1a;代碼隨想錄思路&#xff1a; 把每個字符串看成圖的一個節點。 轉換為求無權圖兩節點的的最短路徑。求最短路徑用bfs #include <string> #include <vector> #include <iostream> #i…