热门话题白皮书HR资料
腾讯、美团、京东、华为面经汇总|第一期
2024.01.15


本期秋招面经企业:腾讯、美团、京东、迪瑞、华为、经纬、美行
作者:@ShaunHugo


腾讯(后台开发 - 腾讯视频 - 一面)

C++:

  • const 和 static 关键字的区别
  • const 修饰成员函数的作用
  • const 成员函数尝试修改普通成员变量会发生什么
  • 如果使用 const 修饰成员函数、还想修改成员变量怎么办(成员变量声明为 mutable)
  • const 成员函数只能访问 const 成员变量么
  • 重载和重写的区别
  • 指针和引用的区别
  • 多态是如何实现的

Network:

  • 说一下 TCP 三次握手建连的过程
  • 第三次握手丢了会发生什么(服务端超时重传、客户端 ACK 不会重传)
  • 断连时为什么需要 TIME_WAIT 状态
  • HTTPS 建连过程
  • 说一下 TLS 握手是如何进行的

Project:

  • 审核模型出现大量宕机、造成微服务中的稿件数据在 Redis 里大量积压怎么办
  • 准备如何设计在线和离线(定时回扫)任务在微服务中的优先级
  • 为什么需要使用 LRU 复用 gRPC 连接(看起来并发量并不高)

Scene Questions:

  • 如何设计一栋大楼里的电梯(分布位置、流量、成本等角度)

LeetCode:

  • 买卖股票的最佳时机(No. 121)

Expand:

  • const 成员函数为什么不会修改对象状态(本质:this 指针视为指向常量的指针)

腾讯(后台开发 - 腾讯视频 - 二面)

Redis:

  • Redis 单线程仍然性能优异的原因
  • Hash 底层数据结构
  • Redis 的哈希表数据结构如何解决哈希冲突

LeetCode:

  • 找到时间 t 之后播放量最多的视频

Scene Questions:

  • 设计系统支持用户轮播指定频道(一级)的指定节目(二级)下的所有视频

Expand:

  • 了解哪些接口限流算法


美团(软件开发工程师 - 基础研发平台 - 一面)

MySQL:

  • 事务隔离级别有哪些
  • 当前读和快照读的区别
  • 什么语句会触发当前读
  • 你知道的 MySQL 有哪些索引
  • InnoDB 索引底层数据结构是什么
  • 除了 B+ 树还有哪些可以作为索引的数据结构
  • B+ 树和哈希表的优缺点(按块读取内存、范围查询)

OS:

  • 什么场景下会造成死锁(多线程循环等待、单线程递归加锁)
  • 了解可重入锁吗(std::recursive_mutex)

Project:

  • B 站 Go 组件库如何封装 gRPC 实现服务发现和负载均衡(开源框架:Kratos)
  • cgroup 项目难点、以及自己遇到的困难

LeetCode:

  • LRU(No. 146、注意线程安全)


京东(后端开发 - 广告算法平台 - 一面)

C++:

  • 面向对象特性(封装、继承、多态)
  • 虚函数表是何时生成的(编译)
  • 派生类如何通过虚函数表查找到需要执行的函数(虚函数表指针)
  • 把构造函数声明为虚函数会发生什么
  • 不把基类的析构函数声明为虚函数会怎么样
  • static 关键字修饰各种变量和函数的场景
  • static 修饰全局变量和使用 namespace 限定作用域有什么区别
  • 模板类声明在 .h 中、定义在 .cpp 中、其他 .cpp 文件引入 .h 文件为什么导致链接错误(编译)
  • 为什么普通函数的声明和定义分开存放就不会报错(链接)
  • new 分配堆内存的底层过程

Scene Questions:

  • 背景:A 服务需要请求 B 服务获取不经常变动的模型特征、用户使用 id 在 A 服务查找特征
  • 问题:如何在 A 服务设计缓存、避免频繁请求 B 服务(答案:LRU)

LeetCode:

  • 使用数组实现循环队列


迪瑞医疗(软件工程师 - 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 的区别

……
👉戳我查看更多笔面经分享

免费领取「2024秋招开启时间表」
百家国央企,每日更新
包含福利待遇、面试真题等
👇扫码添加师姐
无需转发分享,即可领取