C++ 双非二本三年经验社招面经
面试这个东西比较看运气和看部门
社招一般没有笔试,如果有也可以参与一下
我技术栈是 C++,学了一点 GO
算法题大部分都是 LeetCode 题目
腾讯一面(挂)
1、项目
2、tcp为什么可靠
3、tcp滑动窗口了解吗
4、http了解吗
5、IP分片了解吗
6、class和struct区别
7、虚函数了解吗
8、构造函数可以为虚函数吗
9、内存对齐了解吗
10、进程间通信方式
11、如果同一台机器上,不同进程需要大量通信,选哪种方式
12、服务器性能调优方式
13、DDoS了解吗
14、mysql的存储引擎了解过吗
15、mysql手撕题目
算法
滑动窗口的最大值
滴滴一面
1、有分布式经验吗
2、项目
3、在项目中的负责位置
4、性能调优了解吗
5、内存泄漏定位
6、内存过高会怎么样
7、malloc实现原理
8、tcmalloc了解吗
9、vector扩容机制,实现原理
10、stl源码看过吗
11、vector扩容怎么查看扩容了多少
12、map底层原理
13、hashmap用过吗
14、C++智能指针
15、右值引用
16、协程用过吗 (C++协程用过吗)
17、进程线程协程区别
18、线程怎么调度的
19、线程调度算法
20、协程怎么调度的(这里还提了一下go里面的gmp的m获取g的顺序)
21、go的协程一直不退出会怎么样(会被系统回收吗)
22、go的调试了解吗
23、接上一问, 除了CPU内存网络硬盘,还需要看什么指标
24、redis的用途
25、redis报文了解吗
26、消息队列了解吗
27、传统的socket用过吗 (答了自定义协议)
28、自定义协议怎么去使用 (我猜考的是tcp流式拆包黏包?)
29、grpc原理
30、http 2.0了解吗
算法(多线程)
给你两个线程,一个线程打印字母(从A到Z),一个线程打印数组(从1到26),要求交替打印,如:A1B2C3
滴滴二面
1、说三个项目难点,深挖
2、怎么衡量你的开发效率?有点忘了,大概是这个意思 (我说我经手过的项目,基本没有售后问题)
3、怎么去写概要设计(简历上有提到负责写概要设计)
4、多线程编程了解吗
5、读写锁和互斥锁的区别
算法(多线程)
手撕读写锁
滴滴三面
1、项目
2、整个项目级别的难点(非某个技术难点)
3、为什么想换工作
4、未来的打算发展方向
算法(多线程)
两个线程(交替?)打印 1~1000
滴滴HR面(挂)
1、离职原因
2、想去什么样的公司
3、最大的收获是什么
4、有没有晋升
5、绩效怎么样
6、最有成就感的事情(这里答的是在项目里发明的一个新功能)
7、这个功能会不会有什么问题(接上一问)
8、最有挫败感的事情
9、长短板是什么
10、短板如何去规避
拼多多一面(挂)
1、用golang手撕代码(我说不会写go,但是go代码都能读懂,可以用C吗)
2、那就先聊项目吧,说一个难点,解决办法,有没有其他解法
算法
手撕反转字符串(但是比剑指offer简单,单词顺序不需要反转)(hello world. 翻转为 olleh .dlrow)
拼多多一定要注意时间,因为可能面试官要赶下一场
百度一面(挂)
1、项目
2、libevent 了解多少
3、libevent 是多线程的吗
4、单线程和多线程的优劣
5、vector 和 deque区别
6、vector 的 push_back是怎么操作的(提到了在c++11 push_back会默认调用 emplace_back)
7、emplace_back 和 push_back 区别
8、vector 扩容细节
9、vector 是线程安全的吗
10、vector 多线程访问会奔溃吗
11、vector 扩容的时候多线程访问会奔溃吗
12、vector 扩容方法
13、vector 缩容方法
14、多态了解多少(答了静态多态和动态多态)
15、静态多态的细节和过程
16、返回值类型不同,函数名和函数参数相同能做到(静态多态)吗
17、模板能做到上面 16 里面提到的事情吗
18、多态是在运行时做的还是编译时做的(注意区分静态多态和动态多态)
19、虚函数和纯虚函数的区别
20、上面 19 的实际应用的地方(答了工厂模式)
21、虚函数表里面有什么
22、虚函数表是怎么使用的
23、虚函数表是在编译的哪个阶段生成的
24、虚函数在文件中的位置(答了代码段)
25、虚基类了解多少
26、父类虚函数定义了一个test,子类虚函数也定义了一个test,如果子类的test 的参数跟父类的不一样,能编译成功吗 (这里答了可以,父类虚函数跟子类虚函数是完全不同的新函数)
27、接着26,如果想调子类想用父类的虚函数怎么办 (我答的是用 父类::test 去访问)
28、构造函数和析构函数可以为虚函数吗
29、构造函数定义为虚函数能编译通过吗
30、如果去管理内存,防止内存泄漏 (答了智能指针)
31、new和malloc 有什么区别
32、new的对象可以使用malloc释放吗
33、new和malloc出错的话(比如内存不够了),会发生什么
34、new的对象用free,malloc的对象使用delete会发生什么
35、智能指针了解多少
36、share_ptr 循环引用会发生什么
37、怎么解决 share_ptr 循环引用 (weak_ptr)
38、说下上面37的指针内部细节
39、share_ptr是线程安全的吗
40、原子操作是怎么做的
41、share_ptr 什么时候会把里面的对象释放
算法
1、寻找两个正序数组的中位数
2、字符串的索引対(有一点改动,就是words里面的单词要和主串匹配,要连续且不能有交叉。一种暴力解法是求 words 里面的单词全排列,再和主串匹配子串)
阿里一面(挂)
1、项目难点说一个
2、poll和epoll
3、stl常见容器用过哪些
4、map有序吗
5、unordered_map 和 map 插入搜索复杂度
6、map是线程安全的吗
7、能使得map线程安全吗
8、如何实现无锁map
9、python用的多吗
10、redis有哪些数据结构
11、跳板插入删除复杂度
12、跳表为什么不用b+树
13、如何通过redis实现一个限流组件,要求限制每秒5个连接 (限流算法)
14、redis分布式锁了解多少,setnx
15、如何设置一个合理的redis的key的超时时间
16、我设置了一个10分钟的Redis超时时间,我希望一释放就抢到锁(setnx锁)
17、程序如果挂了,我希望程序挂了立马释放锁(setnx锁)
顺丰一面(挂)
1、项目
2、进程线程区别
3、redis基本数据类型
4、top k 问题
滴滴一面(换了一个部门面)
1、项目
2、fork会发生什么,子进程会拷贝父进程哪些东西
3、了解过 bfork 吗
4、程序性能调优了解哪些
5、perf用过吗
6、rpc了解多少,brpc了解吗
7、go的协程了解多少
8、协程的优势
9、我要实现一个高并发的服务器,多线程,定多少线程数合适
10、面对大流量的紧急措施(熔断、降级)
11、智能指针了解多少
12、unique_ptr 是怎么实现的
13、单进程里,一千个线程,每个线程要记录一个商品数量,商品数量一直+1的,问怎么去统计所有的线程里面的商品数量和(线程安全,后面提示是 thread_local 解决)
14、原子操作知道怎么实现的吗(上个问题答了原子变量去做)
15、图的最短路径算法了解多少
16、对以后的职业规划有什么想法
算法
1、二叉树的层序遍历
2、二叉树的层序遍历(Z字形遍历方式)
滴滴二面
1、项目
2、mysql的索引的数据结构
3、redis的数据种类 (最好是说出作用)
4、zset用过吗
5、读多写少的场景,用什么锁
6、生产者消费者问题,用什么锁
7、20个128G机器,构建1T redis集群,要怎么设计 (1、集群加哨兵 2、比如一个集群节点,带上几个从节点,保证集群运转稳定性 3、hash 一致性,保证 key 的节点均匀散落在集群里 4、如何找到我们的 key 值究竟散落到哪个节点了 —— 设计一个中间服务层专门去处理 redis 的 key 信息,中间节点去读取和写入集群 redis ,业务层不关心自己存的值在哪个节点,需要读写直接与中间层交互 5、如果保证第四点的中间层的稳定性 —— 需要考虑中间层的备份与容灾,比如主备等等,防止单点故障,导致整个业务不可用 )
算法
1、实现 LRU
2、实现线程安全的链表
滴滴HR面(OFFER)
1、为什么离职
2、对于未来的考虑
3、目前在流程中的其他公司情况,offer情况
4、绩效、晋升情况
5、目前薪资、期望薪资
6、在公司负责的工作是什么
7、在公司最大的贡献
8、你的领导对你离职怎么看
9、在公司做项目最大的困难
10、做项目的时候,有没有跨部门协作,有没有困难
11、在公司做项目比较遗憾的事情
12、有没有一直在坚持的事情(需要有挑战性)
13、通过什么渠道学习的知识
14、今年行情很差,为啥会选择今年离职,找工作会不会有焦虑
15、工作之余会做什么
16、对未来的规划(除了技术方面)
17、从小到大,做的最出格的一件事情
18、从小到大,对你来说帮助收益最大的人
19、其他公司面试的体验和本公司面试的体验是怎么样的
乌鸫科技一面(挂)
1、项目
2、怎么排查内存泄漏
3、C++面向对象的优势
4、静态多态的实现原理
5、动态多态的实现原理
6、动态多态的vptr是如何找到对应函数的
7、逻辑地址和物理地址了解吗,为什么要使用逻辑地址而不是直接使用物理地址
8、如何统计 ipv4 地址的出现频率 (使用 map 直接统计,key 为 ip 地址, value 为出现次数)
9、如何计算 8 中的前 top k 频率次数出现的IP地址
10、场景题设计,如果 8 中内存不够,需要设计怎样的系统去统计ip出现频率 (1、首先把 ip 地址转换为一个无符号整型,后面统计就使用这个整型 2、内存不够肯定是有一部分要存放在硬盘上的文件里,需要的时候去取用。我们把所有的 ip 地址按照桶去划分,一个桶为一个文件,每个桶大概装 1万个ip地址,比如:0号桶放入 0~9999,1号桶放入10000~19999,以此类推。我们先把ip 地址转换为整数,然后对 10000 取商和余数,商为桶的编号,余数为目标 ip 地址在桶文件的行号。桶文件的格式为,每一行为“ip地址的整数,出现次数”。并且我们每个桶初始化就穷举所有的 ip,频率都默认为 0,每插入一个地址,都能很快找到在桶的位置,并将其出现次数加一。3、举个例子,假设某个 ip 转换整数为 20003,我们对 10000 求商和余数,商为桶的位置,即2号桶,余数为 3 即该 ip 在桶内的位置,我们,读取2号桶文件的第3行数据,并将其出现次数加1。每个桶的行数是从0行开始的)(括号里是我自己的想法,有出现次数和 ip 就可以统计频率了)
算法
LeetCode 451. 根据字符出现频率排序(变种):字符串按照频率排序,如果频率相同按照出现的先后顺序
富途金融一面
1、项目
2、最擅长的语言
3、static关键字的作用
4、智能指针了解多少
5、tcp和udp的区别和作用
6、tcp三次握手的流程
7、mysql的主从复制过程,深挖,问到不会为止
8、redis的作用
9、redis为什么快,深挖,问到不会为止
算法
1、数组去重,重复的元素保留最后一个
输入:[a, b, c, c, b, d, c]
输出:[a, b, d, c]
3、三数之和
富途金融二面(挂)
1、为什么想换工作
2、未来职业规划
3、加密算法了解多少
4、非对称加密和对称加密有哪些算法
5、写过单元测试吗
6、你觉得代码质量应该如何保证
SQL (需要注意效率)
股票表stock(stk_no(PK), symbol, status(A有效/I无效)), 股价表price(date, stk_no(FK), cl_price) PK(date, stk_no), 注意有效股票也可能停牌,导致price表中当日数据没有对应的记录。 我们需要查询所有{有效}股票在{某日}的价格, 停牌的股票也希望保留,价格可以留NULL 比如 stock表: 1, AAPL, A 2, FCBK, I 3, FUTU, A 4, 0700, A 5, SIVB, A price表: 2023-04-01, 1, $450.23 2023-04-01, 3, $34.12 2023-04-01, 4, $50.12 2023-04-02, 1, $445.23 2023-04-02, 3, $36.12 2023-04-02, 4, $48.12 查询日期2023-04-01预期结果: AAPL - $450.23 FUTU - $34.12 0700 - $50.12 SIVB - NULL
算法(动态规划)
游戏角色, 有技能列表和魔法值, 求能造成的最大伤害, 例如: 输入skill_list: [{mana_cost:10,damage:10}, {mana_cost:12,damage:13}], current_mana: 20, 输出max_damage: 20 输入skill_list: [{mana_cost:10,damage:10}, {mana_cost:12,damage:13}], current_mana: 25, 输出max_damage: 26 输入skill_list: [{mana_cost:2,damage:5}, {mana_cost:4,damage:11}, {mana_cost:7,damage:20}], current_mana: 13, 输出max_damage: 36