前言
这篇博客用来记录本人暑期实习 + 秋招全过程,主要应该是面经吧,可能会有些其他的碎碎念。这篇博客的内容我在牛客也会同步更新:https://www.nowcoder.com/users/209838151
2024/11/23
写完点评项目,将点评 + 外卖缝合到一起,总结学过的技术栈与各种经历,完成第一版简历
2024/12/01
开始投递简历,总的投递公司数量不多,有:腾讯、字节、快手、百度、美团、小红书、小米
后续:字节美团小米泡池子,快手投一次挂一次(听说是没有实习经历不给过简历,也可能是没到实习招聘时间),小红书和百度简历挂,只有腾讯给面试
2024/12/12
2024/12/1 投递后做了测评,一直到 10 号状态一直处于测评后等通知,2024/12/11 在官网更新了下简历,12号状态变成初试
2024/12/13
官网显示流程结束
2024/12/14
腾讯下午五点打电话约面,时间定的 2024/12/20 上午 11 点。面试部门是天美后台开发,13 号流程结束面试官说是没来得及更新官网状态,不过天美主 cpp + golang ,不知道为啥捞我 Java 选手面试
2024/12/20
第一次面试,面经如下:
全程一个半小时,前一个小时在做题,题目是翻转字符串和两个栈实现队列 翻转字符串就是输入:hello world,god bless you,需要输出:world hello,you bless god 两道题都不难,但第一次面试紧张感实在难顶,也不熟悉acm模式,输入输出处理的不太好,花了好久才做出来 后面半小时也没问什么,感觉是技术栈不match
我是java技术栈,面试官看我写题用cpp的stl比较熟练,上来先问: Q1:我看你stl用的挺熟练的,介绍下c++11的新特性? A:这个真不会,我对cpp的使用仅限于拿stl来做题
之后估计面试官着急吃饭,随便问了点 Q2:网络编程了解吗?讲讲java里套接字的api A:上次用有点太久远了,只讲了如何使用socket类绑定主机端口,其他讲的磕磕绊绊的
Q3:多态用过吗?你是java技术栈的话讲讲java的多态 A:吟唱八股
Q4:Linux有用过吗?使用过哪些命令? A:有使用docker在服务器上部署项目的经验,主要用的还是文件检索、修改、移动等基础的命令
Q5:数据库方面呢?说说你是用过哪些数据库? A:mysql、redis、mongo,吟唱一小段mysql和redis的八股
最后反问:第一次面试表现?学习建议? 面试官回答:知识广度还行,建议的话就是熟悉acm模式,写题需要有准确的输入输出,考虑边界情况
总结 面试官也问了一句了不了解go,我也是仅限于了解,没有实际用过。之前有看过天美的其他面经,感觉部门主要还是使用cpp和golang,虽然问的问题不多,但主要问的还是cpp相关的问题,cpp选手对Linux的掌握程度应该远高于我这个半吊子java选手 腾讯天美的总体面试体验很好,面试官很温柔,完全不push,看我写算法紧张会引导我思考,算法确实刷了不少,但面试做题和平时刷力扣完全是两个场景,很难不紧张。回池子等捞了,天美这类主cpp的部门就别捞我了
面完之后下午挂,应该是技术栈不 match + 做题比较慢
补充:
两个栈实现队列力扣有原题,翻转字符串暂时没找到,面试后自己重新做了一遍,补一下题解,面试的时候面试官说可以不考虑输入输出,硬编码进main函数中就行。 整体思路是先按照逗号将原字符串分割成子字符串,对每个子字符串按照空格分割成一个个单词,对单词顺序进行翻转
#include<bits/stdc++.h>
using namespace std;
string solve(string input) {
// 翻转子串
auto reverseSubStr = [&](string str) -> string {
vector<string> words;
string word = "";
for (char c : str) {
if (c == ' ') {
if (!word.empty()) {
words.push_back(word);
word = "";
}
} else {
word += c;
}
}
if (!word.empty()) {
words.push_back(word);
}
string res = "";
for (int i = words.size() - 1; i >= 0; --i) {
res += words[i];
if (i != 0) {
res += " ";
}
}
return res;
};
vector<string> substrs;
string substr = "";
for (char c : input) {
if (c == ',') {
substrs.push_back(substr);
substr = "";
} else {
substr += c;
}
}
if (!substr.empty()) {
substrs.push_back(substr);
}
for (auto& substr : substrs) {
substr = reverseSubStr(substr);
}
string res = "";
for (int i = 0; i < substrs.size(); ++i) {
res += substrs[i];
if (i != substrs.size() - 1) {
res += ",";
}
}
return res;
}
int main() {
string in = "hello world,god bless you";
string out = solve(in);
cout << out << endl;
return 0;
}
2024/12/25
腾讯二进宫,部门是微信支付前端开发,早上十点发短信约 26 号晚上七点面试,但那时候有课程汇报,期末也很忙,和面试官联系把面试时间推到了考试周(2025/1/6)
2025/1/06
前段时间听说 wxg 开暑期了,也不确定这次是不是暑期
面试官先自我介绍,再介绍微信支付前端开发部门业务 接下来我做自我介绍,面试官边听边看简历(可能面试开始前也看了),然后说前期约面试没沟通好,想直接释放掉简历(我是后端简历),问我有什么想问的 之后就是我一直问面试官(???)
Q1:您所在部门前端主要技术栈? A:市场上主流的那些,vue、react、nodejs啥的
Q2:wxg后端主要使用的开发语言? A:cpp和go都有,主要是cpp,后端开发语言不是问题,进来也是统一转语言
Q3:部门负责的业务? A:主要负责微信非大陆的业务,香港、澳门、新加坡等等
Q4:腾讯内部有主要使用java的部门吗? A:有,主要是数据分析那些吧,结合着spark使用的
主要就问了这些,剩下都是闲聊
2025/1/10 - 2025/1/16
简历上换掉原来的点评 + 外卖项目,改成了分布式微服务项目,具体可以看我的牛客
2025/1/17 - 2025/2/9
回家过年
2025/2/10
腾讯暑期提前批开了,回学校准备暑期
2025/2/14
腾讯 PCG QQ 部门面试官打电话约 2 月 19 号面试,提前在电话里说了部门是 cpp 和 go 的,问 java 技术栈能不能接受转语言
2025/2/19
暑期第一面,腾讯 PCG QQ 后台开发一面
- 冒泡排序和选择排序的时间复杂度?
- 我看你技术栈是 java ,讲讲 java 里用到哪些数据结构
- ArrayList 线性表,扩容机制;LinkedList 双向循环链表
- 两者的区别?各自的优势?
- HashMap 数组 + 链表(JDK1.7),HashMap 数组 + 链表 + 红黑树(JDK1.8)
- HashMap 底层是数组,数组索引怎么确认?是通过哈希计算得到的吗?
- 常见的哈希算法了解哪些?解决哈希冲突的方法呢?
- 红黑树了解多少?
- ArrayList 线性表,扩容机制;LinkedList 双向循环链表
- 如何寻找第 k 大的数字?(堆排序)
- 用大根堆还是小根堆?
- 堆的构建过程?
- TCP 的 time_wait 状态,在主动断开连接的那一方还是被动的那一方?time_wait 状态的作用?
- 你提到 TCP 超时重传,这个机制的底层实现原理有了解吗?(这个没太搞懂想问什么,说不太了解)
- 操作系统虚拟内存和物理内存的区别?
- 内存置换算法了解哪些?
- 拷打项目(最大的困难?如何解决?项目的不足?)
- 除了写代码,其他兴趣爱好?
- 反问:
- 面试表现:还行,沟通还比较流畅
- 部门业务:手机端 QQ 基础后台,主要做大数据流量控制之类的
无手撕,全程 40mins
2025/2/25
TL:2.19 周三一面无手撕,一直到 2.24 都没出结果,2.24 中午打电话约 2.25 下午补一个专门做题的面试
题目:1.折叠链表;2.反转字符串;3.LRU
三道题让自己选着做,我选 2 和 3 都 a 了,面试官有追问
- T2:空间优化? - T3:如何快速定位到使用次数最少的那个节点?
T1 没时间了,说了思路,全程一个半小时
后续:一面过了
2025/3/3
字节跳动 集团信息系统一面(凉)
TL:2.21 boss 投递,3.3 一面
八股穿插着项目问的,主要从项目的某个点开始发散
- 项目的分布式架构是什么样的?
- RocketMQ 在项目中的作用?
- 为什么选择 RocketMQ ,选型上有什么考虑?有没有考虑过其他的消息队列?
- 为什么要使用 MongoDB ?
- MongoDB 存储引擎和 MySQL 有什么不同?
-
我看你用 Docker 部署的项目,那你了解哪些 Linux 命令?
- 缓存三问,你在项目中是如何解决这三个问题的?
- 布隆过滤器底层原理?
- MySQL 事务隔离级别有哪些?MySQL 默认采用的是哪种隔离级别?
- RR 隔离级别有什么问题?MySQL 如何解决这些问题的?
- ACID 事务特性说一下,MySQL 底层如何实现事务的?
- 除了 redo log 和 undo log,你还了解哪些 MySQL 的日志?(回答了 binlog ,说了一下 MySQL 的主从同步流程)
- 你知道 binlog ,那你了不了解中间日志?(从节点从主节点拉取 binlog ,先将 binlog 记录到本地中间日志,再写回数据库)
- 线程、进程、协程区别说一下
- TCP 和 UDP 区别说一下
- 视频里的弹幕用的是 TCP 还是 UDP ?
- 重定向了解多少?
- 负载均衡了解吗?
- 场景题:我现在有一些海外业务,从国内将数据发送到海外延迟比较大,你有没有什么改善方法?
- 手撕:下一个更大元素Ⅲ(https://leetcode.cn/problems/next-greater-element-iii/description/)
面试的时候问题密度很大,一个接一个的,脑子烧了导致算法没撕出来,寄了
补手撕题解:
#include<bits/stdc++.h>
using namespace std;
int solve(int n) {
string nums = to_string(n);
int i = nums.length() - 2;
// 从后往前找第一个递减的位置
while (i >= 0 && nums[i] >= nums[i+1]) {
--i;
}
if (i < 0) return -1;
int j = nums.length() - 1;
// 从后往前找第一个比递减位置更大的数
while (j >= 0 && nums[i] >= nums[j]) {
--j;
}
swap(nums[i], nums[j]);
reverse(nums.begin() + i + 1, nums.end());
long ans = stol(nums);
return ans > INT_MAX ? -1 : ans;
}
int main() {
cout << solve(12) << endl;
cout << solve(21) << endl;
return 0;
}
2025/3/4
腾讯 pcg qq 后台二面
- 上一轮面有没有什么问题?有下去了解吗?
- 讲讲项目上最大的困难?怎么解决的?
- 做道题(啊?hard?):https://leetcode.cn/problems/string-compression-ii/description/
- 写了 15mins 后,面试官直接让说思路,完全没追问,好像不太关心我有没有做出来
- 我看你会写 Lambda 表达式,函数式编程你了解哪些?
- 为什么要使用 RocketMQ ?RocketMQ 怎么保证消息可靠性?怎么保证消息只被消费一次?
- 平时的学习方式?学习上遇到最大的困难是什么?
- 有了解使用过目前的 ai 模型吗?你日常怎么使用 ai 模型的?
- 如果说我让你设计一个聊天室,你会怎么去完成这个任务?
- 你认为你的优缺点是什么?你怎么克服你的缺点?
- 除了 Java ,有学过其他语言吗?
- 你学校是在厦门吗?能接受在深圳吗?
- 看看 need 力扣和 github ,平常你怎么刷力扣的?
- 实习到岗时间?
- 反问:
- 几轮面试?(三轮技术 + 一轮 hr)
- 部门业务?(手机 qq 后台基础架构)
- 面试表现?建议?(沟通比较顺畅,交流起来没啥阻塞,建议的话可以下去了解一些轮子项目)
后续:二面过了
2025/3/7 - 2025/3/9
做了好多好多场笔试
2025/3/13
腾讯 pcg qq 后台三面
- 拷打项目
- 最近在学什么新技术?
- 最新的 ai 技术了解哪些?
- 总结一下你的优缺点?
2025/3/17 三面挂
麻了,三场面试反馈都比较正向,不太明白为啥三面挂
2025/3/18
腾讯 wxg 微信游戏&小游戏团队 后台一面
- 拷打项目(从选型、亮点、难点考虑)
- 线程进程协程、线程同步方式、协程调度的底层
- 页表大小
- 内存不够 500 kb,此时申请 500 kb 会发生什么
- linux 内存管理
- epoll 说一下
- tcp 和 udp 使用场景
- tcp 为什么可靠
- https 的连接流程
- c++ 了解多少
- java 编译运行过程
- java 是怎么管理内存的(gc)
- 在学什么新技术
- AI 底层了解吗(被问到过好多次了)
- 老家哪的,未来规划
- 博弈:550个瓶子,A 和 B 轮流拿,每次可以拿 7-11 个瓶子,A 先拿,A 要怎么拿才能保证拿到第550个瓶子?
- 手撕:https://leetcode.cn/problems/sudoku-solver/description/(这个题好像是返回唯一解,面试的题要求返回有多少种解)
巴什博弈和数独都不会,我自己都绷不住了
这场 os 问的比较深,得加强一下
2025/3/20
美团一面
- 面向对象怎么理解
- String 类可以被继承吗,为什么不能
- final 修饰的类可以被继承吗
- ArrayList 和 LinkedList 区别
- HashMap 原理,是线程安全的吗
- 有没有线程安全的哈希实现(ConcurrentHashMap)?原理是什么
- 动态代理底层原理,几种实现方式之间的区别
- 重载和重写的区别
- spring 中用到哪些设计模式
- 从 springboot 的角度,讲讲前端请求到达 controller 后的一系列流程
- InnoDB 索引数据结构
- 从磁盘读写角度考虑,B+ 树节点为什么这样设计
- 聚簇索引和非聚簇索引
- 什么是 MVCC
- 设计索引要考虑哪些问题
- redis 是单线程还是多线程
- redis 多线程 I/O 体现在哪里
- 讲讲 redis 的数据结构及其应用(zset,排行榜)
- 如果数据量是千万级,还适合用 redis 吗
- redis 做集群还能保证排行榜的正确性吗
- 讲讲在一个全新的领域,你怎么学习新技术
- 手撕:写一个单例模式
体验感拉满,面试官非常尊重人,反问阶段回答了很多,受益匪浅的一次面试
腾讯 PCG技术线-应用架构方向 后台一面
TL:3.20 一面
- 闲聊,实习时长能有多久
- 手撕:给定字符串 s 和整数 k ,找到 s 的最长子串,该子串满足每个字符出现的次数至少为 k 次,返回最长子串长度。比如 s = “aaabbb,k = 3,返回 6;s = “aaabb”,k = 3,返回 3;s = “ababbc”,k = 2,返回 5
- hashmap 底层原理
- 创建线程的三种方式,区别
- final 关键字
- NIO、BIO、AIO
- synchronize 底层原理
- synchronize 锁升级
- redis 常用数据结构
- redis cluster
- 概率:三个信封中只有一个信封有钱,先拿一个信封,然后把剩下两个信封中没有钱的信封丢掉,问要不要交换手上的信封和剩下的一个信封
手撕解法:
分治:先遍历一遍字符串,记录每个字符出现的次数
- 如果每个字符出现的次数都至少为 k ,那么返回原字符串长度
- 如果有字符出现次数小于 k ,以该字符为界,递归计算最长子串长度
#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
int longestSubstring(string s, int k) {
if (s.empty() || k > s.size()) return 0;
if (k <= 0) return s.size();
unordered_map<char, int> charCount;
for (char c : s) {
charCount[c]++;
}
// 记录字符串中出现次数小于 k 次的字符
unordered_set<char> invalidChars;
for (const auto& pair : charCount) {
if (pair.second < k) {
invalidChars.insert(pair.first);
}
}
// 如果每个字符出现次数都大于等于 k,答案就是原字符串长度
if (invalidChars.empty()) {
return s.size();
}
int maxLen = 0;
int start = 0;
for (int i = 0; i <= s.size(); ++i) {
// 字符串末尾或者遍历到不满足要求的字符
if (i == s.size() || invalidChars.count(s[i])) {
if (i > start) {
// 递归计算答案
int currentLen = longestSubstring(s.substr(start, i - start), k);
maxLen = max(maxLen, currentLen);
}
start = i + 1;
}
}
return maxLen;
}
};
int main() {
Solution solution;
string s1 = "aaabbb";
string s2 = "aaabb";
string s3 = "ababbc";
cout << solution.longestSubstring(s1, 3) << endl;
cout << solution.longestSubstring(s2, 3) << endl;
cout << solution.longestSubstring(s3, 2) << endl;
return 0;
}
2025/3/27
腾讯运营开发——游戏技术运营一面
- 做题,第一题不太好描述,不太难;第二题计算日期差
- 聊参与开发的实际项目
- spring security,RBAC
- 索引是什么,为什么能加快查询速度,索引的缺点
- 聚簇索引和非聚簇索引
- 什么时候开始学后端的
- git rebase 知道吗
- redis 持久化
- redis 客户侧缓存了解吗(不了解,回答了 nacos 客户侧缓存)
- 讲讲你的分布式项目
- 场景:现在加一个需求,实现用户购买商品增加积分,付款的时候可以使用积分抵扣,怎么设计
- 面试官看过我的博客,问了些博客上的问题
- http 状态码,4xx 和 5xx 的区别
- 除了大二下跟着导师做的项目和自己的分布式项目,有没有其他技术上的经历
- 你是哪里人
- 到岗时间,实习时间
面试官挺和善的,聊天形式面了一个半小时还要多一点
2025/3/28
美团一面
- 日常学习方式
- 什么时候开始学后端的
- mysql 和 mongodb 区别
- redis 为什么适合做缓存
- 缓存三问
- nacos 相关
- docker 部署项目的流程
- JWT 原理
- 服务端也会存 session 吗
- 熔断和限流的区别
- 令牌桶算法
- 分布式锁
- 闲聊
2025/3/31
美团二面
- 讲讲三个项目
- 落地项目介绍一下,用来干嘛的,你具体负责哪些 crud
- 权限模型了解吗,落地项目的权限模型和 RBAC 有啥区别
- 仅仅是异步解耦用 mq 有点大炮打蚊子(直接拉一个线程并行去调用就行,得思考思考 mq 的具体应用场景了)
- mq 消息积压怎么办
- 然后聊了好久消息队列
- 你怎么理解高并发、高可用、可扩展的
- 聊了聊服务响应时间怎么计算的
- redis 和 mysql 相关,数据一致性怎么保证
- 服务器 cpu 使用率相关
- 奇怪的手撕,允许用 ai ,面试官说让看看怎么使用 ai 的(要求 O(1) 时间),还说感兴趣可以拍下来自己下去研究下
- 聊 ai ,agent、rag 这些了解吗
- 反问聊天
面试官全程笑嘻嘻的,面试体验是真好啊
2025/4/1
腾讯运营开发——游戏技术运营二面
- 自我介绍
- 写题:最长重复子串和一道模拟,两题限时半小时
- 介绍项目
- 怎么理解单体和分布式微服务架构
- mysql 默认的事务隔离级别是什么(RR)
- RR 解决了脏读和幻读吗,为什么(MVCC、间隙锁和当前读问题)
- 四种事务隔离级别
- 怎么用 redis 的,怎么解决缓存击穿
- redis 常用数据结构,你用到了哪些
- docker 相关
- 反问
写完题后主要在聊项目和在大二下组里打杂的经历,八股问的不多
2025/4/7
腾讯运营开发——游戏技术运营 hr 面
- 自我介绍
- 最有成就感的事
- 优缺点
- 职业规划
- 打算毕业工作还是考研
- 偏向在哪工作
- 老家哪的
- 父母支持你的工作选择吗
- 身体健康?
纯聊天,15 mins 左右
2025/4/8
北京字节约面,拒
2025/4/10
腾讯 hr 加微信,表示会继续推进
2025/4/11
饿了么约面,拒
2025/4/13
腾讯录用评估
2025/4/17
腾讯 offer,晚上字节约面,拒
2025/4/18 暑期总结
一、前期准备 先讲讲我自己的经历吧,楼主无实习,大二上就打消了读研的打算,开始准备就业。但当时还没有完全放下课内的课程学习,整个上学期只学完了 Java 基础
大二下,也就是去年的这个时候,我开始学 Spring 全家桶,在这个过程中也慢慢开始刷起了力扣。在那会和学长聊天时,得知学院有一位老师在给企业开发项目(现在看来比较偏向外包?),于是我便发邮件联系了这位老师,表达想参与到落地项目开发的意愿,幸运的是,她也很乐意接受我的请求,于是互相加了微信,约时间开了个小会,老师让我先学完 springboot 再联系她进组
下学期结束进入小学期,我开始在组里打杂,老师非常贴心地分配了一个研究生学长带我ww,我有不会的东西或者解决不了的问题都请教了学长,学到了不少东西
因为组内做的是一个基于脚手架的 web 系统,所以我的主要产出(其实也没多少2333)是权限相关的 crud 还有一些前端的路由逻辑,以及定时任务相关的编写,在暑假结束后的九月份,项目交付了,我也没有继续跟着老师接其他的项目,开始去学习分布式微服务相关的知识,后面也是把以前跟着敲的外卖点评换成了微服务项目
二、尝试投递日常实习 我最早投递实习的时间是去年十二月,那会时间比较尴尬,没什么面试,只有鹅给了机会。第一次面试是天美的后台,处女面也很紧张,两道简单的手撕写了一个小时才做出来,导致面试官后面也时间问八股,随便了解了下我的知识广度就结束了。当天下午查询进度看到流程结束也是意料之中
然后临近十二月底,微信支付的前端部门给我发了面试邀请(???),当时约的时间和一门课的汇报冲突了,推到了今年的 1 月 6 号,结果刚开始面试就和我说捞错了,想要直接释放简历,然后进入了反问环节(啊?
反问我只问了 wxg 前端相关的技术栈,后端用哪些语言,部门业务之类的,二十分钟结束了面试
微信这一出结束后,考试周也差不多到了尾声,我又投递了一些中小厂,可能是年底的缘故,没有一家约面,后面也就放弃了日常实习的投递,准备 allin 暑期实习
三、投递暑期实习 + 个人经验 过完年后,2 月 9 号回学校,准备暑期实习
我只投递了比较大的厂,最终给面的也只有那几家。
我的面试场次主要被腾讯占据,我的白月光也是腾讯,每次被挂了后不出半天就被另一个部门捞了(感觉是面评不错 + 运气尚可?),其他的公司我也没怎么面过不太好评价hhh,最后也是收到了腾讯的 offer
虽然拒了美团的 offer,但还是想夸一下美团,飞快的流程 + 顶级的面试体验,我遇到的美团的面试官都非常非常非常尊重人
这里也分享下我的面试经验,因为我暑期只面过腾讯、美团和字节,所以根据这三个公司的特点总结
- 腾讯、字节侧重考察 408 计算机基础,对计算机网络、操作系统考察又广又深
- 美团侧重问 Java 八股,准备美团面试的 uu 一定要重视 Java 的八股,包括 spring 框架、数据结构等等
- 大厂对项目很看重,一般面试流程是你先做自我介绍,然后面试官在你自我介绍的时候看你的简历,从你的项目开始发散八股和业务场景
- 面试官对你的项目会有一些扩展场景相关的提问,考察你对技术选型上有没有自己的思考
- 面试里面最重要的是手撕,如果这场面试的算法题没做出来,99% 会被判死刑。建议把 h100 刷完,再把 codetop 按频度排序前 5 页刷完,现在大厂算法很多并不是 h100 原题,可以在 codetop 这个网站上看看最近考得比较多的算法
- 除开计算机基础八股和算法,面试中我被问得最多的是中间件相关的原理和应用,比如 “你为什么用 rocketmq ?项目中哪里需要使用它?”、“有没有调研过其他的消息队列,为什么不用 kafka 或 rabbitmq?”、”redis 数据结构用过哪些?讲讲怎么用的“ 等等,因此,对于写在简历上的中间件技术一定要深入到底层架构和原理,不能仅仅停留在知道怎么用
- 面试这种东西,能力固然重要,但运气也是非常关键的一环,我和身边一起准备暑期的朋友交流讨论的时候都有这方面的共鸣。所以说还是要放平心态,面试挂了,并不代表你不优秀,很大可能是没有遇到看对眼的面试官。不管是秋招还是暑期,战线都很长,到后期才开始收割的大佬大有人在,各位不需要过于焦虑
最后分享一句我非常喜欢的歌词:”比较是会夺走幸福的海盗船,我躺在沙滩偏偏不想出海~“
祝各位能在暑期和秋招收获自己满意的 offer !