一面
1. 实习项目
- 可以简要描述你的项目经历,最好是与职位相关的项目。如果是与技术栈相关的项目,比如 Go、C++、Golang 或 Python,重点讲述项目中的技术细节和你如何解决问题。
编辑
2. Go学习多久
- 说明你学习 Go 语言的时间长度、学习的方式(如通过自学、培训、项目实践等),以及你学到的主要知识点,比如 Go 的并发模型(goroutines)、内存管理、接口等。
编辑
3. C++、Golang、Python优缺点
-
C++ :优点是性能高,控制力强;缺点是内存管理复杂,语法较繁琐。
-
Golang :优点是并发编程强,内存管理简单,语法简洁;缺点是相对较新的语言,第三方库的支持不如 Python。
-
Python :优点是语法简洁,生态丰富,开发效率高;缺点是性能相对较低,无法像 C++ 一样控制硬件。
编辑
4. GMP模型
- GMP 模型(Go的 Goroutine、M:操作系统线程,P:调度器)是 Go 语言中的并发模型。简要解释 Go 语言如何通过这一模型实现高效的并发编程,如何进行调度和工作。
5. slice底层实现
- Go 的 slice 底层是一个数组,它有三个元素:指针(指向数组的某个位置)、长度和容量。当 slice 扩展时,Go 会创建一个新的数组,并将原有数据复制过去。
6. cap和len的区别
len
返回的是 slice 中元素的个数,而cap
返回的是 slice 的容量,即底层数组的大小。
7. TCP和UDP区别
-
TCP :面向连接,保证数据的可靠性和顺序,适用于对数据传输有严格要求的应用,如 HTTP、FTP。
-
UDP:无连接,不保证数据的可靠性和顺序,适用于实时应用,如视频流和在线游戏。
8. TCP如何保证可靠性
- TCP 通过序列号、确认应答、重传机制和流量控制等手段确保数据的可靠性。
9. 拥塞控制
- TCP 拥塞控制通过算法(如慢启动、拥塞避免、快速重传、快速恢复)来控制网络中数据的发送速率,以避免过载。
10. TCP两次握手可行性
- TCP 三次握手是必要的,第二次握手是为了确认客户端已经收到服务端的响应。如果只有两次握手,会导致数据丢失和连接不稳定。
11. MySQL使用的是什么索引
- MySQL 使用 B+ 树作为索引结构,B+ 树的优势是能够保持有序,且每个节点只存储键值,实际数据在叶子节点。
12. 为什么使用B+树而不是平衡二叉树
- B+ 树相较于平衡二叉树,具有更高的磁盘效率,它的所有叶子节点形成链表,适合范围查询。
13. 查看某个端口的占用的Linux命令
lsof -i :<port>
或netstat -anp | grep <port>
。
14. 统计一个文件中的行数
- 使用命令
wc -l <file>
来统计文件的行数。
15. 进程、线程、协程区别
-
进程 :独立的资源单元,拥有自己的地址空间和资源。
-
线程 :进程内的执行单元,共享进程的资源。
-
协程:比线程更轻量级,通常由程序调度。
16. 内核调用和普通调用的区别(内核态 & 用户态)
-
用户态 :应用程序执行的状态,访问用户空间的内存。
-
内核态:操作系统内核执行的状态,访问内核空间的内存。系统调用时需要从用户态切换到内核态。
17. 虚拟内存
- 虚拟内存是操作系统提供的一种内存管理机制,它允许每个进程使用一个独立的内存地址空间,操作系统通过映射机制将虚拟内存转换为物理内存。
18. 为什么虚拟地址空间切换耗时,其切换流程是什么
- 切换时需要保存当前进程的上下文,加载目标进程的上下文,涉及到页表的切换和TLB缓存失效等,耗时较长。
19. HTTP的GET、POST
-
GET :请求资源,数据通过URL传递,适用于获取数据。
-
POST:提交数据,数据通过请求体传递,适用于修改数据。
20. 浏览器访问URL时发生的事情
- 浏览器解析 URL,DNS 查找域名,TCP 建立连接,发送 HTTP 请求,服务器响应,浏览器渲染页面。
21. HTTPS的S是什么
- S 代表"安全"(Secure),它通过 SSL/TLS 协议加密 HTTP 数据,保证数据传输的安全性。
22. HTTPS如何实现
- HTTPS 使用 SSL/TLS 协议在 HTTP 协议上加层安全,保证数据的加密和身份验证。
23. LRU和LFU
-
LRU(Least Recently Used) :最少使用算法,淘汰最近最少使用的缓存。
-
LFU(Least Frequently Used):最不常用算法,淘汰最不常用的缓存。
24. 手撕:重排链表
- 可以通过双指针或递归方法实现链表的反转或重排,具体实现可以使用交换指针等方法。
二面
1. 场景题拷打,详细询问秒杀系统
- 需要考虑高并发、分布式系统设计、数据库设计、缓存机制、队列处理等问题。秒杀系统的关键是高效地处理并发请求、保证库存一致性和数据的准确性。