腾讯-iEG-游戏前沿技术-后台开发一面 凉经

发面经许愿过

自我介绍

进程和线程的区别?

为什么线程会比线程快?

进程中哪些资源是不共享的?共享的呢?

线程中哪些资源是不共享的?共享的呢?

为什么堆不共享,讲一下堆不共享的情况?

协程知道吗?

现在有100个进程,一个进程有10个线程,那么如果方法栈不共享的话是不是会有1000个方法栈,从协程的角度讲一下会有这种情况吗?

讲一下为什么要三握手?

http2.0和3.0的区别?

http2.0和1.0的区别?
讲一下Java目前版本的GC的一个过程?

Redis和Mysql的区别?

Redis是怎么更新的?

Redis的数据如果删除失败了怎么解决?(从流程上解决)

慢查询怎么找?

讲一下之前实习的查询优化怎么实现的?

讲一下具体怎么找到慢查询的?

RESTFUL API的特点?(回答了域名是什么样的就写了什么)

1t个整型数据怎么找中位数?(提示从快排的角度)

算法题:

LRU

连续子数和

答案:

### **1. 进程和线程的区别?**

进程是系统资源分配的最小单位,而线程是程序执行的最小单位。一个进程可以包含多个线程,线程之间共享进程的资源,比如内存空间、文件描述符等,而不同进程之间资源隔离,通信需要通过进程间通信机制。

---

### **2. 为什么线程会比进程快?**

因为线程间切换的开销小,共享资源多,比如内存空间无需重新分配,而进程切换涉及到上下文切换、内存空间的重新加载等,代价更大。

---

### **3. 进程中哪些资源是不共享的?共享的呢?**

不共享的有:内存地址空间、堆栈、全局变量等。

共享的有:代码段、只读数据段、内核资源(如打开的文件、信号处理器)。

---

### **4. 线程中哪些资源是不共享的?共享的呢?**

不共享的有:线程自己的栈空间、程序计数器、寄存器上下文。

共享的有:进程的内存空间、文件描述符、全局变量、静态变量等。

---

### **5. 为什么堆不共享,讲一下堆不共享的情况?**

其实堆在**线程间是共享的**,因为多个线程可以访问进程的堆区数据。但在**多进程中堆是不共享的**,每个进程有独立的虚拟地址空间,堆也各自分配,不会共享,除非通过共享内存机制显式实现。

---

### **6. 协程知道吗?**

协程是一种用户态的轻量级线程,不依赖操作系统调度,由用户控制上下文切换。相比线程更轻,适用于大量并发但不需要多核并行的场景,比如高并发 IO 操作。

---

### **7. 有100个进程,每个进程10个线程,如果方法栈不共享,是不是有1000个方法栈?从协程角度讲有这种情况吗?**

是的,如果线程不共享栈,那么确实会有1000个独立的栈。协程也是一样,每个协程也需要单独的栈空间,尽管更小,常见是几 KB,所以如果用协程实现相同数量,也会有近似数量的栈,只是代价更小。

---

### **8. 为什么要三次握手?**

三次握手是为了确保双方都有收发能力:

- 第一次客户端发起连接(SYN),
- 第二次服务端确认并回应(SYN+ACK),
- 第三次客户端再确认(ACK)。
    
    如果没有第三次,服务端无法确认客户端是否能正常接收数据。
    

---

### **9. HTTP2.0和3.0的区别?**

HTTP/2 使用 TCP,多路复用减少了 TCP 连接数,但仍受 TCP 队头阻塞影响;

HTTP/3 基于 QUIC 协议,使用 UDP,解决了 TCP 队头阻塞问题,同时提升了连接恢复和握手效率。

---

### **10. HTTP2.0和1.0的区别?**

HTTP/1.0 每次请求都要新建连接;

HTTP/2 引入了多路复用、头部压缩、服务器推送等特性,提高了性能,且可以复用同一个 TCP 连接处理多个请求。

---

### **11. Java 当前版本的 GC 过程?**

以 G1 GC 为例,它将堆划分为多个 Region,分代管理。先在年轻代进行 Minor GC,把对象晋升到老年代;当老年代空间不足时进行 Mixed GC,回收部分老年代;G1 的目标是低延迟,使用并发标记、并发清理等方式减少 STW 时间。

---

### **12. Redis 和 MySQL 的区别?**

Redis 是内存数据库,读写速度快,适合缓存、排行榜等场景;

MySQL 是磁盘数据库,支持复杂查询、事务等,适合数据存储场景。Redis 通常作为 MySQL 的补充,不是替代。

---

### **13. Redis 是怎么更新的?**

通常使用 **写穿** 或 **写回** 策略。

- 写穿是:写数据库后,主动更新或删除 Redis 缓存;
- 写回是:先写 Redis,异步同步到数据库(一般需要消息队列保证最终一致性)。

---

### **14. Redis 的数据如果删除失败了怎么解决?(从流程上解决)**

可以用 **延迟双删策略**:

第一次删除 Redis 缓存 → 更新数据库 → 延迟一段时间后再次删除 Redis,防止并发请求中缓存被旧数据污染。

同时可以通过消息队列或异步任务补偿失败的缓存删除。

---

### **15. 慢查询怎么找?**

- 对 MySQL,可以开启 `slow_query_log`,设定阈值,日志中就能找到执行时间较长的 SQL。
- 也可以用 `EXPLAIN` 或 `SHOW PROFILE` 分析执行计划,找出瓶颈。
- 在 Redis 中可以使用慢查询日志 `slowlog` 命令查看。

---

### **16. 实习中查询优化怎么实现的?**

我通过 SQL 优化 + 索引优化 + 缓存设计三方面入手:

比如原来使用 `LIKE '%keyword%'` 模糊查询,改为分词索引提高命中;

并对常用查询加入缓存,如 Redis + 本地缓存双层缓存机制。

---

### **17. 具体怎么找到慢查询的?**

在 MySQL 中打开 `slow_query_log`,通过 `mysqldumpslow` 工具整理日志;

配合监控工具(如阿里云 DMS、Prometheus + Grafana)定位慢 SQL,再用 `EXPLAIN` 看是否走索引,有没有全表扫描。

---

### **18. RESTful API 的特点?**

- 使用统一的 URI 命名资源(如 `/users/123`);
- 使用 HTTP 方法表达行为(GET、POST、PUT、DELETE);
- 无状态性,服务端不存客户端状态;
- 可缓存,提高性能;
- 结构清晰,易于维护和扩展。

---

### **19. 1TB 整型数据怎么找中位数?(提示快排)**

1TB 数据无法一次性放进内存。可以使用**外部排序算法**,或者基于**快速选择算法(QuickSelect)**的思想,通过分区,把比 pivot 小和大的数分别归类,类似快排的 partition 过程,只递归中位数所在的分区,直到找到目标位置。时间复杂度期望是 O(n)。
全部评论
笑死,同一个岗位,面试官根本不问我八股和项目细节,问的是项目整体设计,专考思维能力
1 回复 分享
发布于 05-23 16:46 陕西

相关推荐

隔壁投了之后又被捞起来面了,以下是TimeLine6.10 投递6.12 约面6.17 一面6.26 二面6.27 三面7.1 HR面7.4 Offer一面:全程40min左右1. 自我介绍2. 开篇面试官介绍了一下这次面试的流程3. HashMap和HashTable的区别?4. 接T3,针对HashTable的问题,有没有解决方案?(ConcurrentHashMap)5. 线程和进程的区别?6. 接T5,通信方式上有什么区别?7. MySQL索引结构?8. 接T7,B树和B+树的区别是什么?9. 接T8,为什么说B+树更好做范围查询?10. MySQL事务隔离级别?11. MVCC12. 索引失效的情况都有哪些?13. Redis持久化方案?14. 缓存雪崩、缓存穿透、缓存击穿15. 讲讲TCP的三次握手和四次挥手16. 说说Linux的常用命令?17. 有没有用过Docker?说说Docker的常用命令?有自己构建过Docker镜像吗?18. 项目拷打手撕:快速排序(问了比较时使用<和<=有什么区别)反问:1. 面试官并不是Java方向的,为什么会问Java基础知识?2. 组里技术栈?(Java、Go、PHP都有,看分到哪个组)3. 后续面试流程?(2-3轮技术面+1轮hr)4. 建议?追问:1. 可能会转语言,是否接受?2. 现在在长沙吗?如果面试通过到这边来会不会有什么阻碍或者困难?面完状态10min左右状态变成业务复试二面:全程40min左右,感觉主要是手撕1. 自我介绍2. 有用过MQ对吧,那你说说怎么解决消息重传的?3. 你是怎么做消息幂等性处理的?4. 接T3,如果说Redis的key已经存入了,但是刚好消费者宕机了,怎么办?5. 建立索引的SQL语句是?6. TLS握手过程7. 手撕1:单链表有一个指针指向任意一个节点,怎么删除这个指针指向的节点,如1→2→3→4,传入2,删除2,没有头指针(回答了更改节点值,next设置为next.next,追问怎么删除最后一个节点,不会,换了道题)8. 手撕2:LeetCode199. 二叉树的右视图(写了递归,要求再写一遍非递归)闲聊:1. 什么时候能到岗?2. 是哪里人?3. 为什么会考虑来长沙这边?4. 你觉得你的优点和缺点是什么?5. 手上还有其他offer吗?反问:1. 业务面完30min左右约三面三面:1. 自我介绍2. 拷打项目3. 拷打实习4. 我现在有一个student表,我要对name简历索引,sql语句怎么写?5. 主键索引和普通索引有什么区别?6. 为什么非聚簇索引要回表?7. MySQL隔离级别?8. MySQL主从同步原理?9. binlog日志存的是什么?10. Redis缓存雪崩是个什么概念?怎么解决?11. Redis持久化方式?12. HTTP报文格式?13. HTTP和HTTPS有什么不同?14. TLS握手过程?15. 为什么是非对称加密和对称加密结合使用?能不能只使用一种?16. 面向对象三大特性17. 我现在有一个Java源代码,比如说叫xxx.java,他是如何变成一个二进制文件的能够让机器运行他的?这个中间的过程是怎么样的?18. JVM的作用是什么?19. 进程和线程的区别?20. 有没有了解过协程?跟线程的区别是什么?21. 为什么说协程为什么更轻量?22. 二进制文件加载进内存,他的分布是怎么样的?23. Linux上怎么看机器的负载?24. top命令哪些参数表示负载?25. Linux怎么看cpu的核数?26. Linux怎么查看当前目录占用了多少空间?27. 查看当前服务器建立的tcp连接,用什么命令?28. tcp滑动窗口机制是怎么样的?29. time_wait状态是什么意思?30. 为什么是四次挥手?31. 三次握手是怎么实现的?中间的ACK和SYN是怎么合并的?32. 用过docker吗?怎么做到容器间隔离的?33. 怎么构建docker镜像?34. 有了解AI吗?大模型训练过程是怎么样的?35. 有没有了解过MCP?36. 使用过什么AI工具?手撕:二叉树的层序遍历,要求null值使用*占位反问:1. 面试结果什么时候出面完状态变为HR面HR面闲聊10分钟
面试问题记录
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
9
28
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务