某互联网大厂的面试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. 场景题拷打,详细询问秒杀系统

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

相关推荐
刘发财5 小时前
弃用html2pdf.js,这个html转pdf方案能力是它的几十倍
前端·javascript·github
追逐时光者6 小时前
一款使用 C# 编写专为 Windows 11 打造的文件资源管理器增强工具!
后端·.net
风象南7 小时前
普通人用AI加持赚到的第一个100块
人工智能·后端
冰_河8 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
JavaGuide11 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
桦说编程11 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
格砸12 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
sunny86513 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
蝎子莱莱爱打怪13 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes