奇安信 C++面试问题收集 (7000+字数,30+面经)
一面面经更新 23/9/5
- 评价:一面特别偏项目,需要对于项目的每个知识点都有不错的理解,没有直接询问的八股问题,都是结合项目来询问,具体问题可以参考上面的面经
- 缺点是面试官会停顿,这样中间的沉默 “震耳欲聋”
- 面试体验良好,静待面试结果
前言
-
楼主23/9/5面试 23/9/2 下午收集
-
楼主一个收集了30+奇安信面经,面经参考链接在文末,C++面经,后端、服务端和客户端都有
-
总体看来,奇安信的面试问题难度中等,有的甚至是困难,有一部分发散性问题,且面试问题的覆盖面非常广,值得仔细研究
-
没有对问题做特别详细的分类和描述,问题后面的 “*”代表的是问题出现的次数
- 问题没有进行进一步的排序,仅供大家参考
-
计算机网络
-
- TCP为什么有四次握手?****
- HTTP状态码有哪些?常用状态码?**
- OSI的七层网络模型,每一层对应的协议有哪些?***
- ping的工作原理 ***
- TCP三次握手相关,三次握手与网络编程API的对应关系 ******
- 实现客户端TCP通信需要用到的socket API ***
- GET 和 POST的概念和区别 **
- HTTP请求报文和响应报文结构 **
- TCP与UDP的区别 ***
- 网络编程API的具体功能 ***
- TCP 粘包 *
- TCP的特性和保证特性的原理 **
- A、B、C三种网络的区分
- IP头部校验具体校验的是什么? *
- 网络路由协议 **
- 对称加密和非对称加密的区别 **
- UDP协议的最大长度,超过最大长度会怎么样?
- HTTP与HTTPS的异同 ***
- TCP滑动窗口的作用
- CS模型
- 非八股问题
- 浏览器输入URL至显示网页的全过程 ***
- 显示浏览器缓存时,还需要联网吗?还需要与服务器端进行通信吗?
- TCP连接中,服务端网线拔掉会怎么样?**
- SYN FLood 攻击 ? *
- 两个进程,socket的返回值相同,但确实不同的socket通道,为什么?
- TCPdump 抓包 **
- UDP大量传输时应该注意什么
- 怎么应对ddos攻击?
- 访问牛客网的时候,你的本机会跟CA机构数据交互吗 ?
-
操作系统
- 进程和线程的区别 *******
- 协程的相关概念 ,协程与线程的异同?**
- 读写锁的设计和应用场景
- 线程同步的概念及方法 ******
- IO多路复用的概念 **
- 多进程的通信方式?通信方式的优劣? *******
- 锁机制是如何实现的?*
- 信号量如何实现同步?*
- 僵尸进程的概念 ?*
- 进程调度 *
- epoll 及其触发模式****
- 什么是虚拟内存?
- 非八股问题
- 设计并发系统,怎么选择多线程和多进程,怎么考虑? ***
- 多线程开发需要注意什么?为什么要进行数据保护,不做保护会有什么后果?
- 怎么实现一个守护进程?*
- main函数执行前的过程
- 如何设计生产者-消费者模型
- 单CPU多线程程序实现
- 多核情况下如何让进程运行在指定核上
-
Linux
- 常用的Linux命令有哪些?***
- 如何查看特定端口的连接信息 **
- shell脚本设计
- 查看网络状态和CPU状态
- gcc 、gdb、makefile的了解 ****
- 杀死进程命令
- 文件权限管理
- 怎么修改用户组?
-
数据库
- MySQL中用到了哪些数据结构?*
- Mysql索引的优势和类型 ******
- B+树的具体特性的描述 *****
- redis的简单了解
- 基础SQL语句的编写 **
- Redis数据结构 **
- 跳表的概念和相关使用 ***
- mysql 如何优化 *
- redis的底层实现 *
- 悲观锁和乐观锁
- 数据库三大范式
- mysql的锁 *
-
数据结构与算法
- 红黑树 *****
- B+树 ***
- 二叉搜索树
- 排序算法对比 **
- 快排 **
- 哈希表的实现及其线程安全 **
- 非八股问题
- 搜索引擎的提示功能的实现原理?
- 设计一个秒杀系统
- 内存池的实现 **
- 缓存设计
-
C++
- STL容器的了解 ********
- 迭代器的实现原理和设计思路 **
- 智能指针概念、实现原理和应用场景 *******
- 泛型编程、模板特化、仿函数的概念 ****
- 移动语义和右值 *
- C++11特性 **
- 单元测试 *
- 纯虚函数、多态、虚函数 **************
- union、struct、class的区别
- 指针和数组、指针和引用的区别 ****
- 内存对齐 **
- auto关键字 *
- const关键字 **
- private、protected、public
- 堆、栈中存放的内容
- strcpy功能及实现 **
- new 和 malloc、free和delete的区别 **
- 虚继承
- sizeof和strlen的作用和区别 **
- bind函数的作用
- memcpy与strcpy的区别、实现和效率比较
- extern c的作用
- 非八股问题
- 写一个类成员函数的函数指针
- 根据程序特点,选择调试的方法
- struct中长度为0的数组的作用
- g++链接动态链接库、动态库生成
-
手撕
- 快排 **
- 求根到叶子节点数字之和
- 链表反转(递归、迭代写法) **
- 最长公共子数组
- 堆排序
- 剑指offer机器人
- 栈实现
- 含有重复数字的全排列
- 实现队列
- 字符串逆序输出
-
WebServer项目相关
- 对于线程池的追问 **
- 并发模式的描述 **
- 阻塞IO和非阻塞IO的区别 **
- epoll和阻塞IO还是非阻塞IO搭配使用
- reactor和proactor **
- 日志如何查找某些特定的记录
- 如何设计一个定时器 ***
- 每个客户端和服务端的连接时怎么保持的
- 服务端架构及涉及的通信协议
- epoll比select快的原因 **
- 实现一个webserver需要哪些模块
- 日志系统设计 **
- webServer的概要、难点、难点解决
- 性能测试、webserver服务器的性能瓶颈
- 假设请求队列已满、工作线程都在工作,又有新的连接到达怎么处理?
- 如果服务器运行了一个月,突然down,怎么找出原因?
- 消息队列的具体使用场景和具体结构
- 实现阻塞队列
-
参考面经