🌍 English | 简体中文| 日本語 | Українською
Note: Please raise an issue for any suggestions, corrections, and feedback.
The goal of this repo is to buid a advanced C++ programing tech stack for a higher salary.
大多数人都高估了他们一天能做的事情,但低估了他们一年能做的事情
💡 关于
📚 本仓库是面向 C/C++ 技术方向校招求职者、初学者的基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。
💡 侧边目录支持方式:📚 Docsify 文档、Github + TOC 导航(TOC预览.png)
📄 保存为 PDF 方式:使用 Chrome 浏览器打开 📚 Docsify 文档 页面,缩起左侧目录-右键 - 打印 - 选择目标打印机是另存为PDF - 保存(打印预览.png)
🙏 仓库内容如有错误或改进欢迎 issue 或 pr。由于本人水平有限,仓库中的知识点有来自本人原创、读书笔记、书籍、博文等,非原创均已标明出处,如有遗漏,请 issue 提出。本仓库遵循 CC BY-NC-SA 4.0(署名 - 非商业性使用 - 相同方式共享) 协议,转载请注明出处,不得用于商业目的。
问题列表,详细解答可参考: C++面经汇总
1、面向对象的三大特性:封装、继承、多态
2、类的访问权限:private、protected、public
3、类的构造函数、析构函数、赋值函数、拷贝函数
4、移动构造函数与拷贝构造函数对比
5、深拷贝与浅拷贝的区别
6、空类有哪些函数?空类的大小?
7、内存分区:全局区、堆区、栈区、常量区、代码区
https://blog.csdn.net/m0_37202877/article/details/126243403
8、C++与C的区别
9、struct与class的区别
10、struct、union 内存对齐
11、new/delete与malloc/free的区别
12、内存泄露的情况分析
13、sizeof与strlen对比
14、指针与引用的区别
15、野指针产生与避免
16、多态:动态多态、静态多态
17、虚函数实现动态多态的原理、虚函数与纯虚函数的区别
https://johnysswlab.com/the-true-price-of-virtual-functions-in-c/
18、继承时,父类的析构函数是否为虚函数?构造函数能不能为虚函数?为什么?
19、静态多态:重写、重载、模板
20、static关键字:修饰局部变量、全局变量、类中成员变量、类中成员函数
21、const关键字:修饰变量、指针、类对象、类中成员函数
22、extern关键字:修饰全局变量
23、volatile关键字:避免编译器指令优化
24、四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast
25、C++11 部分新特性,比如右值引用、完美转发等
什么是右值引用,跟左值又有什么区别?
完美转发
26、std::move函数
27、四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr
28、shared_ptr中的循环引用怎么解决?(weak_ptr)
29、vector与list比较
30、priority_queue的底层原理
31、STL部分容器的实现原理,如 vector、deque、map、hashmap、set、list
32、set与unordered_set对比
33、STL容器空间配置器
34、变量的声明和定义有什么区别
35、简述strcpy
、sprintf
与memcpy
的区别
36、请解析(*(void (*)( ) )0)( )
的含义
37、设置地址为0x67a9
的整型变量的值为0xaa66
38、简述指针常量与常量指针的区别
39、请你来说一下 C++ 中struct和class的区别
40、简述#ifdef
、#else
、#endif
和#ifndef
的作用
41、typedef
和define
有什么区别
42、写出int 、bool、 float、指针变量与 “零值”比较的if语句
43、结构体可以直接赋值吗
44、谈谈你对拷贝构造函数和赋值运算符的认识
45、sizeof和strlen的区别
46、关键字 override
47、C++ 自己实现一个String类
48、用两个栈实现一个队列的功能
49、高级数据结构
50、编译链接机制、内存布局(memory layout)、对象模型
参考书籍:《C++ Primer》(第5版)、《STL源码剖析》、
from: https://www.brendangregg.com/ebpf.html
https://cloud.tencent.com/developer/article/2134930
主要聚焦在多线程(CPU)、内存(Memory)的优化上,以冯·诺依曼体系结构为参考。
深入理解 Cache 工作原理 CPU Cache 机制以及 Cache miss
1、进程与线程区别
2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
3、互斥锁与自旋锁的底层区别
4、孤儿进程与僵尸进程
5、死锁及避免
6、多线程与多进程比较
7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
8、管道与消息队列对比
9、fork进程的底层:读时共享,写时复制
10、线程上下文切换的流程
11、进程上下文切换的流程
12、进程的调度算法
13、阻塞IO与非阻塞IO
14、同步与异步的概念
15、静态链接与动态链接的过程
16、虚拟内存概念(非常重要)
17、MMU地址翻译的具体流程
18、缺页处理过程
19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法
参考书籍:《Unix环境高级编程》、《Linux多线程服务器端编程》
git原理:
其本质上是一个key-value的数据库加上默克尔树形成的有向无环图(DAG)
https://www.jiqizhixin.com/articles/2019-12-20
常用使用方法:
常用命令:
1、执行命令git checkout br_rename_old //切换到br_rename_old分支 (如果已经在这个分支下,可以不执行此步骤)
2、执行命令git pull origin br_rename_old //将代码更新到和远程仓库一致
3、执行命令git branch -m br_rename_old br_rename_new //将本地仓库的br_rename_old的名称修改为br_rename_new
4、执行命令git push origin --delete br_rename_old //将远程分支br_rename_old删除
5、执行命令git push --set-upstream origin br_rename_new //将本地分支push到远程仓库
6、修改最近一次的commit信息 git commit --amend
7、git cherry-pick
8、更新子模块 git submodule update --init --recursive
9、删除远程分支 git push origin --delete
[GDB/CGDB]()
构建框架
编译器
ref: QEMU,KVM及QEMU-KVM介绍
Linux 下网络编程核心的包括系统编程和网络 IO 两个部分:
1、进程间通信方式:信号量、管道、共享内存、socket 等
2、多线程编程:互斥锁、条件变量、读写锁、线程池等
3、五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动 区别/联系
4、线程池
5、高性能 IO 两种模式:Reactor 和 Proactor( 但是 Linux 下由于缺少异步 IO 支持,基本没有 Proactor)
6、IO多路复用:select、poll、epoll的区别(非常重要,几乎必问,回答得越底层越好,要会使用)
7、手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)
8、边沿触发与水平触发的区别
参考书籍:《Unix网络编程》
关系型与非关系型
链接:https://github.com/Charmve/PaperWeeklyAI/tree/master/00_GuideBooksPDF(English%2BChinese)
更多免费电子书,公众号:迈微AI研习社回复
“电子书”
,可免费获取。
(初级 -> 高级)
C/C++ 发展方向甚广,包括不限于以下方向, 以下列举一些大厂校招岗位要求。
我的专栏 大厂后端/算法面经分类整理
专为求职面试中算法与数据结构的小伙伴,创了学习交流/刷题群(知识星球)!想要最快的提升算法与数据结构技能,和更多小伙伴一起来吧!
进群获取互联网大厂高频coding题库,告别刷题400道,分类整理的题库,算法思路和源代码实现配套,各个类型总结出来的解题模板,远比你一个人要强!
Facebook、Google、微软面试高频题总结,加我获取 🛰️ Yida_Zhang2
[1] interview. https://github.com/huihut/interview
[2] @Jeloys/HelloWorld. https://github.com/Jeloys/HelloWorld
[3] GitHub. https://gitlab.com/nsddd/CPlusPlusThings