奇安信 - C++ 工程师面经汇总
2043
2020.11.25
2020.11.25
发布于 未知归属地

image.png

语言

  • C++ 三大特性
  • C++ 内存管理
  • 指针和数组的区别
  • sizeof和strlen的区别
  • 智能指针有哪些,使用场景和区别
  • 智能指针引用计数的实现原理
  • unique_ptr如何实现独占对象
  • C++ 11特性
  • 右值引用
  • 类成员函数的函数指针怎么写
  • 什么是多态,实现机制
  • 什么是虚函数
  • 虚函数表存放的内容
  • 析构函数可以是虚函数吗
  • 构造函数可以是虚函数吗
  • 什么是纯虚函数
  • C++是怎么实现接口的
  • union和sturct的区别
  • struct的位域
  • sturct和class的区别
  • 模板和宏的区别
  • 什么是依赖注入
  • 什么是泛型编程
  • 什么是模板特化
  • 什么是仿函数
  • strcpy会拷贝字符串最后的/0吗
  • memcpy和strcpy有什么区别
  • memove和memcpy有什么区别
  • new 和 malloc 的区别
  • free 和 delete 的区别
  • char*p和char p[]的区别
  • 用sizeof去计算上述指针和数组的区别
  • extern C的作用
  • 内存对齐的原因
  • const的应用场景 可以修饰的类型

计算机网络

  • 三次握手和四次挥手
  • TCP UDP的区别
  • tcp怎么保证可靠传输
  • 拥塞控制和流量控制的区别
  • UDP协议的最大长度,超过最大长度会怎么样
  • udp大量传输应该注意什么
  • time_wait时间及原因
  • TCP连接中,服务端网线拔掉会怎么样
  • http请求头格式
  • get和post方法的区别和使用场景
  • 怎么解决TCP粘包问题
  • SYN Flood 攻击
  • 滑动窗口的原理
  • 对称性加密和非对称性加密的区别
  • 输入url 到浏览器显示的过程

数据结构

  • vevtor 和 list 的区别
  • vector 和 set 的区别
  • vector删除元素,迭代器失效问题
  • map和unordered_map的区别
  • unordered_map底层数据结构
  • 二叉搜索树,平衡二叉树,红黑树的区别
  • 为什么红黑树速度快,红黑树的难点
  • B树和B+树有什么区别
  • B+ 树为什么快,为什么数据库使用 B+ 树
  • 什么是跳表,什么时候用跳表
  • 单向双向链表区别 各有什么好处
  • iterator类型有哪些

数据库

  • redis 数据结构
  • redis rehash过程

操作系统

  • 进程和线程的区别
  • 进程间通信机制
  • 线程同步机制
  • 怎么实现一个守护进程
  • 共享内存的原理,共享内存的大小限制
  • 什么是协程
  • 什么是僵尸进程,孤儿进程
  • 什么是惊群效应
  • g++如何链接动态库,如何生成动态库,库和二进制文件分别在哪些目录
  • select、poll、epoll 的区别
  • 多进程之间的通信方式
  • 多线程开发需要注意的事情
  • 多进程和多线程的优缺点
  • 悲观锁和乐观锁
  • 什么是CAS
  • 单核cpu如何实现多线程
  • 阻塞IO/非阻塞IO
  • 如何设计线程池,是固定数量的线程吗
  • 多核的情况下,如何让进程运行在指定核上

算法

  • 数组实现队列
  • 反转链表
  • 快速排序实现,快排的时间复杂度,如何避免最坏复杂度
  • 求根到叶子节点数字之和
  • 堆排序的实现和原理,平均时间复杂度和最坏时间复杂度
  • 哈希表的实现,线程安全问题
  • 实现堵塞队列
评论 (0)