迪瑞 / 华为 / 经纬 / 美行秋招面经合集
近期面试比较少,但还是遇到了一些比较新奇的问题,发出来与牛友们分享,查缺补漏~
迪瑞医疗(软件工程师 - QT - 一面)
C++:
- 源文件编译成可执行文件的步骤
- 什么是内存(字节)对齐
- 引入头文件后编译显示未定义、是什么原因
OS:
- 进程和线程的区别
- 线程是如何共享资源的
- 线程同步有哪些方式
Network:
- 网络大端和小端字节序
- 什么是 TCP 粘包、如何解决
Linux:
- 常用哪些 Linux 命令
Git:
- 遇到过代码冲突的情况吗、如何解决
Webserver:
- 了解 Windows 高并发 Socket 模型么
- 介绍一下 Reactor 事件处理模式
- 线程池如何动态调整线程数量
华为(通用软件工程师 - 云核心网)
C++:
- 指针占几个字节
- 哪些场景会造成内存泄漏、如何解决
OS:
- 大端存储和小端存储
- 进程间通信方式
- 自旋锁的含义与使用场景
Network:
- 介绍一下五层网络模型
- ARP 协议是干什么的
- 网页输入一个 URL 并回车到显示网页、这个过程发生了什么(详细)
Data Structure:
- 根据 Key 在一亿数据中查找结果、使用什么数据结构
- 哈希表底层实现
- 如何解决哈希冲突
- 计算最短路径有哪些方法(图论)
Leetcode:
- 数据库在某一时刻的并发连接数(差分数组、类似 No. 1450)
- 无重复字符的最长子串(No. 3)
经纬恒润(C++ 开发工程师 - 一面)
C++:
- new 和 malloc 的区别
- 如何解决 shared_ptr 循环引用
OS & Network:
- 线程同步有哪些方法
- select 和 epoll 的区别
- 如何解决 TCP 粘包问题
gRPC:
- gRPC 性能如何
- JSON 和 protobuf 序列化和反序列化的性能对比
美行科技(C++ 开发工程师 - 一面)
C++:
- 如果 vector 中的元素是类对象、可以使用 sort 排序吗(如何进行范围查找)
- 如果 map 的 key 是类对象、会以什么样的规则排序
- 为什么需要将函数定义为虚函数
- 派生类的虚函数后加 final 关键字、编译器做了什么优化(静态绑定)
- 如何实现一个 shared_ptr
- weak_ptr 的用处、为什么不会增加引用计数
- C++ 使用指针时踩过哪些坑(dynamic_cast、const、浅拷贝)
- 了解内存破坏的概念吗、如何排查(指针
p
指向的内存被其他线程修改) - 什么情况下会出现栈溢出
Network:
- 介绍一下 HTTP、哪些信息需要被缓存
- HTTP 缓存策略由报文 header 中的哪个字段控制(Cache-Control)
gRPC:
- protobuf 和 JSON 格式的优缺点
- 如果想在 proto 文件的函数接口中扩充两个字段、如何操作
- proto 文件中每个变量后面的序号 1、2、3 代表什么含义
MySQL:
- 介绍一下事务
- 索引有哪些类型
- 联表查询有哪些方法、区别是什么
- 计算生日在特定日期的学生数量(count & group by)
Design Pattern:
- 什么是懒汉单例模式
- 介绍一下装饰模式的用法和优缺点
Expand:
- Cookie 和 Session 的区别