某互联网大厂的面试go语言从基础到实战的经验和总结

一面

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. 场景题拷打,详细询问秒杀系统

  • 需要考虑高并发、分布式系统设计、数据库设计、缓存机制、队列处理等问题。秒杀系统的关键是高效地处理并发请求、保证库存一致性和数据的准确性。

相关推荐
澡点睡觉4 小时前
【golang长途旅行第38站】工厂模式
开发语言·后端·golang
小蒜学长4 小时前
基于SpringBoot+Vue的健身房管理系统的设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
这里有鱼汤5 小时前
你以为 FastAPI 足够强?其实 Litestar 能让你的项目更轻量高效
后端·python
菜鸟谢5 小时前
windows vscode go 编译速度慢问题
后端
Victor3565 小时前
Redis(51)如何监控Redis哨兵的状态?
后端
止观止5 小时前
GitHub App 架构解析与最佳实践
架构·github
IT_陈寒5 小时前
Python性能优化:5个被低估的魔法方法让你的代码提速50%
前端·人工智能·后端
计算机毕业设计木哥5 小时前
Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统
开发语言·hadoop·spring boot·后端·python·django·课程设计
风象南6 小时前
SpringBoot 实现无痕调试注入器,线上问题定位的新利器
spring boot·后端