已拿腾讯后台开发岗offer,简单说下自己面试经历和学习路线
liebian365 2024-12-01 00:24 29 浏览 0 评论
面前准备
敲定了方向和目标后就开始系统准备,主要分为以下几个方面来准备。
算法题
事先已经看过别人的社招面经知道头条每轮技术面都有算法题,而这一块平时练习的比较少,校招时刷的题也忘记了很多。因此系统复习的时候算法题还是花了比较多时间的。先是快速刷完了剑指 offer,这个校招时已经刷过两边了,因此现在刷起来会相对快一些。然后就是啃 LeetCode 的题了,LeetCode 的题比较多,想在短短几周内刷完基本是不可能的,因此我主要按照类型去刷,每个类型刷几道就会比较有感觉了。比如链表的题优先考虑递归和双指针来解决,栈和队列的题优先考虑用两个栈或队列来解决,树的题基本都是递归等。不过数组和字符串的题一般比较灵活,这种题只能尽量多刷了。平时要上班刷题也不方便,我采用的方法就是看题,用手机打开 LeetCode 的网站,看完题目后直接想解决方案,脑子里大概捋一下代码怎么写,能想到的就过,想不出的就看看别人的解法,用这个方法刷起来就很快。用这种方法你可能会担心面试时题写不完整,其实不用太担心,因为面试的时候面试官看你写的核心思路是正确的,边界处理是对的基本就过了,面试时间比较有限。
理论基础
基础这一块主要以快速复习为主,主要是语言(我主要用C++,所以复习C++)、操作系统和网络编程。校招这一块会问题的比较多,社招这一块问的比较少,但是如果这一块打不上来就比较尴尬了。语言就不说了,这一块大家应该都知道会考些什么,校招的时候毕竟都疯狂准备过。操作系统就看内存管理、进程管理和文件系统,一般虚拟内存问的多。网络编程这块就包括 TCP/IP 协议,HTTP协议,网络安全三个方面。TCP/IP主要就是三次握手,四次挥手,TIME_WAIT 的作用等这些常考的题了。HTTP 协议考察 HTTP 协议的返回码、HTTP 的方法等。需要特别指出的是 HTTPS 加密的详细过程要非常透彻,不然容易产生一种感觉好像都清楚了,但是一问就有点说不清楚。最后就是网络安全,主要考察也是 WEB 安全,包括XSS,CSRF,SQL注入等。
后端技术
这里的后端技术主要指工作中要用到的一些基础组件,一些常见的后端架构设计。主要准备了MySQL、Redis、消息队列、zookeeper、分布式系统架构设计和docker。MySQL 主要看了 《高性能MySQL 第三版》,关于事务、索引、锁以及 binlog 和 redolog 都讲的非常好,也是面试最爱考的,除此之外对数据库的读写分离、分库分表也要掌握。Redis 主要看了《Redis 的设计与实现》,然后自己再总结了一下 Redis 的使用场景,以及 Redis 实现分布式锁基本 Redis 就没有问题了。分布式系统的就准备CAP理论、BASE理论、限流、熔断、一致性***算法、主从架构、集群架构、异地多活、负载均衡、分层架构、微服务等。
深挖项目
没有参与开源项目的经验,工作中做的项目也很一般,项目这块我实在没什么太多拿的出手的,不过还是要挖掘一下,毕竟这一块是逃不掉。我说几个我思考的点吧:
- 找项目中相对而言具有亮点的地方。比如我用 redis 实现了一个延时队列,然后对这个延时队列我通过分片来解决瓶颈,通过分发来加快处理速度。
- 找项目中复杂的地方。如果你做的项目中有复杂的地方,即使不是你做的,也可以拿来说,前提是你要搞得非常清楚来。
- 量化指标。一个接口原来有性能问题,比如你做了一个小的优化,将其 TP99 的耗时从原来的 500ms 优化至多少 200ms。
- 赋能整个团队。在开发业务的过程中肯定会遇到一些重复的工作,或者可以复用的服务。你可以开发了某个工具或者服务化了某个功能推广到了全组使用,给公司创造了价值。
腾讯面试
腾讯面试提前1天和提前一个小时都会发短信提示。去的腾讯滨海大厦面试,大楼的现代化程度很高,不过需要提醒一下的是,腾讯的滨海大厦分为南塔和北塔。我去的时候就上错楼了,需要下到4楼重新换成电梯。
一面
笔试
- 微服务的特点,如何实现服务发现和负载均衡
- c++内存管理
- time_wait在哪一端产生,作用是什么
- 程序crash如何定位
- 服务性能问题如何定位
- 两个排序数组找中位数
- 就数字n的平方根
- 设计一个算法,抽奖次数越多中奖概率就越高
- MySQL 如何分析一条语句的执行过程。delete from t1 limit 3和delete from t1的区别?
一面
- 问项目
- 跳台阶
- 数组中奇数个元素
- 一栋楼有n层,不知道鸡蛋从第几层扔下去会碎,用最少的次数找出刚好会碎的楼层
- 动态规划与贪心有什么区别
- redis数据结构的底层实现
- redis如何实现高可用
- 负载均衡算法有哪些
- 服务发现是怎么实现的
- 熔断是怎么实现的
- id生成器怎么实现的,如何实现全局递增
- 协程和线程的区别
- 进程间通讯方法
- 平时逛哪些论坛,研究哪些算法
- paxos算法,这个算法我说不清楚,然后说了raft算法
- gdb怎么切换线程
- 如何判断一个图是否有环
- 介绍一下缓存
- 查看 CPU 的命令和磁盘 IO 的命令
二面
- 项目的系统架构画一下
- 如果用户量上涨怎么优化
- 负载均衡的加权轮询算法怎么实现
- 背包问题
- 贝叶斯的概率学原理
- 分词算法
- 连续整数求和(leetcode 第 829 题),要求时间复杂度小于O(N)
HR面
1.询问了除腾讯以外,还在看其他工作机会么?分别是什么 2.腾讯、XXX公司、XXX公司,你的优先级是什么,为什么? 3.之前薪资待遇是多少?你期望的薪资是多少? 4.平时有什么爱好? 5.了解职位需求吗? 6.有没有想问的?
腾讯二面最后一道算法题只能想出 O(N) 复杂度的,面试官一定要小于 O(N) 的,答不上来。这道题是 leetcode hard 级别的难度,所以没有刷。后来又跟面试官探讨了一下自己比较擅长的方面,比如协程与TCP方面的,因为自己也比较喜欢在GitHub上面钻研这些东西,
wangbojing/NtyCogithub.com
wangbojing/NtyTcp?github.com
我个人在这里学到的东西比较多(/狗头)
技术知识学习路线
【文章福利】小编推荐自己的linuxC/C++语言交流群后台私信“1”获取,整理了一些个人觉得比较好的学习书籍、视频资料共享在里面,有需要的可以自行添加哦!~
一、 数据结构与算法、设计模式、工程管理
- 排序 (11种排序) 与 KMP
- 红黑树 证明
- B树与B+树
- Hash与布隆过滤器
- 责任链模式
- 过滤器模式
- 发布订阅模式
- 工厂模式
- Makefile/cmake/configure
- git /svn与持续集成
- Linux系统运行时命令
二、代码实现、方案分析
- 网络io与select/poll/epoll
- reactor的原理与实现
- http/https web服务器的实现
- websocket协议与服务器实现
- 服务器百万并发的实现(c10K,c1000k, C10M)
- redis/memcached/Nginx网络组件
- Posix API与网络协议栈
- UDP可靠协议 QUIC/KCP
三、池式结构、高性能组件、开源组件
- 线程池(手写)
- 内存池 ringbuffer
- 异步请求池 性能优化,异步mysql 异步dns 异步redis
- mysql连接池
- redis连接池
- 原子操作 CAS
- 消息队列与无锁队列
- 定时器的方案 红黑树 时间轮 最小堆
- 锁的实现原理 互斥锁,自旋锁 ,乐观锁,悲观锁,分布式锁
- 服务器连接保活 keepalived
- try/catch的实现
- libevent/libev框架
- 异步日志方案 log4cpp
- 应用层协议 protobuf/thrift
- openssl加密
- json与xml解析器
- 字符编码unicode/gbk/utf-
四、协程框架的实现、用户态协议栈 NtyTCP (tcp/ip)
- 协程的原理与工程案例
- 协程的调度器实现
- 滑动窗口 拥塞控制 满启动
- tcp定时器的实现
- epoll的源码实现
五、Skynet、ZeroMQ、DPDK
- skynet高性能网关
- actor实现与cluster/负载均衡
- skynet网络与热更新 数据共享
- ZeroMQ Router-Dealter模式
- 源码分析:消息模型与工程案例
- 源码分析:网络机制
- dpdk PCI原理与 testpmd/l3fwd/skeletion
- kni数据流程
- dpdk实现dns
- dpdk的高性能网关的实现
- 半虚拟化 virtio/vhost的加速
六、 MySQL、Redis、Nginx、mongodb、dfs
- SQL语句 索引 存储过程 触发器 2.数据库连接池与sql解析剖析
- 存储引擎原理 MyISAM与Innodb 事务隔离
- 自己实现一个存储引擎 MySQL源码
- MySQL集群与分布式 高可用高并发
- Redis相关命令与持久化
- Redis连接池与异步操作
- 源码分析:存储原理与数据模型
- 源码分析:主从 原子模型
- redis的集群方案
- Nginx使用conf配置
- nginx模块开发 过滤器模块
- Nginx模块开发 handler模块
- 源码分析: Nginx Http状态机
- 源码分析:进程间通信与Slab共享机制
- Mongo接口编程与MongoDB命令使用
- MongoDB的集群方案
- ceph
- fastdfs
七、Linux内核进程管理、内存管理、文件系统
- 进程管理与调度
- 锁与进程间通信
- 系统调用 如何自己实现一个syscall
- 物理内存 伙伴算法 2.进程虚拟内存 mm_struct
- 页的回收与页交换
- 虚拟文件系统
- Ext2/3/4 文件系统
- 无持久的存储
八、性能分析
- 工具 wrk/ webbench/ loadbalance/valgrind
- Google gTest/Memtrack
- 火焰图/热图
九、分布式架构篇
- 腾讯的Tars
- 虚拟化的docker
- 分布式注册中心etcd
- P2P 网络穿透 打洞 去中心化的网络
- 上一篇:C++开发:打印日志的方式总结
- 下一篇:程序员如何实现高速成长?
相关推荐
- 精品博文嵌入式6410中蓝牙的使用
-
BluetoothUSB适配器拥有一个BluetoothCSR芯片组,并使用USB传输器来传输HCI数据分组。因此,LinuxUSB层、BlueZUSB传输器驱动程序以及B...
- win10跟这台计算机连接的前一个usb设备工作不正常怎么办?
-
前几天小编闲来无事就跑到网站底下查看粉丝朋友给小编我留言询问的问题,还真的就给小编看到一个问题,那就是win10跟这台计算机连接的一个usb设备运行不正常怎么办,其实这个问题的解决方法时十分简单的,接...
- 制作成本上千元的键盘,厉害在哪?
-
这是稚晖君亲自写的开源资料!下方超长超详细教程预警!!全文导航:项目简介、项目原理说明、硬件说明、软件说明项目简介瀚文智能键盘是一把我为自己设计的——多功能、模块化机械键盘。键盘使用模块化设计。左侧的...
- E-Marker芯片,USB数据线的“性能中枢”?
-
根据线缆行业的研究数据,在2019年搭载Type-C接口的设备出货量已达到20亿台,其中80%的笔记本电脑和台式电脑采用Type-C接口,50%的智能手机和平板电脑也使用Type-C接口。我们都知道,...
- ZQWL-USBCANFD二次开发通讯协议V1.04
-
修订历史:1.功能介绍1.1型号说明本文档适用以下型号: ZQWL-CAN(FD)系列产品,USB通讯采用CDC类实现,可以在PC机上虚拟出一个串口,串口参数N,8,1格式,波特率可以根据需要设置(...
- win10系统无法识别usb设备怎么办(win10不能识别usb)
-
从驱动入手,那么win10系统无法识别usb设备怎么办呢?今天就为大家分享win10系统无法识别usb设备的解决方法。1、右键选择设备管理器,如图: 2、点击更新驱动程序,如图: 3、选择浏览...
- 微软七月Win8.1可选补丁有内涵,含大量修复
-
IT之家(www.ithome.com):微软七月Win8.1可选补丁有内涵,含大量修复昨日,微软如期为Win7、Win8.1发布7月份安全更新,累计为6枚安全补丁,分别修复总计29枚安全漏洞,其中2...
- 如何从零开始做一个 USB 键盘?(怎么制作usb)
-
分两种情况:1、做一个真正的USB键盘,这种设计基本上不涉及大量的软件编码。2、做一个模拟的USB键盘,实际上可以没有按键功能,这种的需要考虑大量的软件编码,实际上是一个单片机。第一种设计:买现成的U...
- 电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题
-
电脑识别U盘失败?5个实用小技巧,让你轻松搞定USB识别难题注意:有些方法会清除USB设备里的数据,请谨慎操作,如果不想丢失数据,可以先连接到其他电脑,看能否将数据复制出来,或者用一些数据恢复软件去扫...
- 未知usb设备设备描述符请求失败怎么解决
-
出现未知daousb设备设备描述符请求失du败解决办zhi法如下:1、按下Windows+R打开【运行】;2、在版本运行的权限输入框中输入:services.msc按下回车键打开【服务】;2、在服务...
- 读《飘》47章20(飘每章概括)
-
AndAhwouldn'tleaveMissEllen'sgrandchildrenfornotrashystep-patobringup,never.Here,Ah...
- 英翻中 消失的过去 37(消失的英文怎么说?)
-
翻译(三十七):消失的过去/茱迪o皮考特VanishingActs/JodiPicoult”我能做什么?“直到听到了狄利亚轻柔的声音,我才意识到她已经在厨房里站了好一会儿了。当她说话的时候,...
- RabbitMQ 延迟消息实战(rabbitmq如何保证消息不被重复消费)
-
现实生活中有一些场景需要延迟或在特定时间发送消息,例如智能热水器需要30分钟后打开,未支付的订单或发送短信、电子邮件和推送通知下午2:00开始的促销活动。RabbitMQ本身没有直接支持延迟...
- Java对象拷贝原理剖析及最佳实践(java对象拷贝方法)
-
作者:宁海翔1前言对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po、Dto、Do、Vo各个表现层数据的转换,也存在于系统交互如序列化、反序列化。Java对象拷贝分为深拷贝和浅拷贝,目前常用的...
- 如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?
-
Qt组件推荐:QtitanRibbon:遵循MicrosoftRibbonUIParadigmforQt技术的RibbonUI组件,致力于为Windows、Linux和MacOSX提...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)