已拿腾讯后台开发岗 offer,简单说下自己的面试经历和学习路线,2024年最新java软件工程师面试题目汇总

深挖项目

没有参与开源项目的经验,工作中做的项目也很一般,项目这块我实在没什么太多拿的出手的,不过还是要挖掘一下,毕竟这一块是逃不掉。我说几个我思考的点吧:

  1. 找项目中相对而言具有亮点的地方。比如我用 redis 实现了一个延时队列,然后对这个延时队列我通过分片来解决瓶颈,通过分发来加快处理速度。

  2. 找项目中复杂的地方。如果你做的项目中有复杂的地方,即使不是你做的,也可以拿来说,前提是你要搞得非常清楚来。

  3. 量化指标。一个接口原来有性能问题,比如你做了一个小的优化,将其 TP99 的耗时从原来的 500ms 优化至多少 200ms。

  4. 赋能整个团队。在开发业务的过程中肯定会遇到一些重复的工作,或者可以复用的服务。你可以开发了某个工具或者服务化了某个功能推广到了全组使用,给公司创造了价值。

腾讯面试


腾讯面试提前 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 上面钻研这些东西,

https://github.com/wangbojing/NtyCo

https://github.com/wangbojing/NtyTCP

我个人在这里学到的东西比较多(/狗头)

技术知识学习路线


一、 数据结构与算法、设计模式、工程管理

=====================

  1. 排序 (11 种排序) 与 KMP

  2. 红黑树 证明

  3. B 树与 B+树

  4. Hash 与布隆过滤器

  5. 责任链模式

  6. 过滤器模式

  7. 发布订阅模式

  8. 工厂模式

  9. Makefile/cmake/configure

  10. git /svn 与持续集成

  11. Linux 系统运行时命令

二、代码实现、方案分析


  1. 网络 io 与 select/poll/epoll

  2. reactor 的原理与实现

  3. http/https web 服务器的实现

  4. websocket 协议与服务器实现

  5. 服务器百万并发的实现(c10K,c1000k, C10M)

  6. redis/memcached/Nginx 网络组件

  7. Posix API 与网络协议栈

  8. UDP 可靠协议 QUIC/KCP

三、池式结构、高性能组件、开源组件


  1. 线程池(手写)

  2. 内存池 ringbuffer

  3. 异步请求池 性能优化,异步 mysql 异步 dns 异步 redis

  4. mysql 连接池

  5. redis 连接池

  6. 原子操作 CAS

  7. 消息队列与无锁队列

  8. 定时器的方案 红黑树 时间轮 最小堆

  9. 锁的实现原理 互斥锁,自旋锁 ,乐观锁,悲观锁,分布式锁

  10. 服务器连接保活 keepalived

  11. try/catch 的实现

  12. libevent/libev 框架

  13. 异步日志方案 log4cpp

  14. 应用层协议 protobuf/thrift

  15. openssl 加密

  16. json 与 xml 解析器

  17. 字符编码 unicode/gbk/utf-

四、协程框架的实现、用户态协议栈 NtyTCP (tcp/ip)


  1. 协程的原理与工程案例

  2. 协程的调度器实现

  3. 滑动窗口 拥塞控制 满启动

  4. tcp 定时器的实现

  5. epoll 的源码实现

五、Skynet、ZeroMQ、DPDK


  1. skynet 高性能网关

  2. actor 实现与 cluster/负载均衡

  3. skynet 网络与热更新 数据共享

  4. ZeroMQ Router-Dealter 模式

  5. 源码分析:消息模型与工程案例

  6. 源码分析:网络机制

  7. dpdk PCI 原理与 testpmd/l3fwd/skeletion

  8. kni 数据流程

  9. dpdk 实现 dns

  10. dpdk 的高性能网关的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值