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

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

相关推荐
Lin_Aries_042112 分钟前
容器化 Flask 应用程序
linux·后端·python·docker·容器·flask
yuriy.wang1 小时前
Spring IOC源码篇六 核心方法obtainFreshBeanFactory.parseCustomElement
java·后端·spring
在未来等你2 小时前
Kafka面试精讲 Day 24:Spring Kafka开发实战
java·spring boot·面试·kafka·消息队列·spring kafka·@kafkalistener
Net_Walke2 小时前
git 的常用命令
git·物联网·github·iot
前端Hardy2 小时前
轻松搞定JavaScript数组方法,面试被问直接答!
前端·javascript·面试
Eoch772 小时前
HashMap夺命十连问,你能撑到第几轮?
java·后端
每天进步一点_JL2 小时前
🔥 一个 synchronized 背后,JVM 到底做了什么?
后端
SamDeepThinking3 小时前
有了 AI IDE 之后,为什么还还要 CLI?
后端·ai编程·cursor
yinke小琪3 小时前
线程池七宗罪:你以为的优化其实是在埋雷
java·后端·面试
月弦笙音3 小时前
【class 】static与 # 私有及static私有:系统梳理
前端·javascript·面试