面试完第一反应是想笑

先来唠唠

组织内有位朋友最近刚经历了人生第一次面试 ,还是家大厂,面试完他自己都想笑。

他总觉得自己平时学的那些够应付了,结果一去面试就露了怯。面试官特别温和,问的问题也都扎实又专业,可他对着那些问题,好多都只能结结巴巴地卡着,半天说不完整句话。

之前总觉得自己学得还行,其实根本是自我感觉良好,跑过去面试还耽误了人家时间。

而且这样还会在大厂里面留下黑名单,后面还想约面就难了,所以在这里奉劝实习或者校招想要冲击大厂的同学,一定不要一开始就直接去大厂面试,先去其他的地方练练手。

下面也分享一下他整理的面经:

某大厂面经

1. go struct可以比较吗

在Go语言中,struct是否可以比较取决于其字段类型:

  • 若struct的所有字段都是可比较类型(如int、string、数组、指针等),则该struct可以比较,比较时会逐字段进行值对比;
  • 若struct中包含不可比较类型的字段(如slice、map、func等),则该struct不可比较,编译时会报错。

2. slice扩容机制(Go 1.18+ 版本)

Go 1.18 版本后,slice 的扩容规则发生了调整,更精确地控制内存分配,避免过度扩容。具体规则如下:

  1. 基础扩容逻辑

    • 当所需容量(newcap)小于等于原容量(oldcap)的2倍 时:
      • 若元素大小(elemsize)为 1、8 或 2 的幂次方,且 newcap 不超过 256,则扩容后的容量为原容量的 2 倍;
      • 否则,使用公式 newcap += (newcap + 3*256) / 4 逐步调整,直到满足需求。
    • 当所需容量大于原容量的2倍 时:
      • 直接使用所需容量作为初始 newcap。
  2. 内存对齐优化

    扩容后的容量会根据元素类型的大小(elemsize)和内存对齐规则进行调整,确保分配的内存块是页大小的整数倍,提升内存访问效率。

  3. 示例说明

    • 若原 slice 容量为 100,新增 50 个元素(需容量 150 ≤ 200),则扩容后容量为 200(2倍);
    • 若原 slice 容量为 200,新增 200 个元素(需容量 400 > 400),则直接扩容为 400。

3. 带缓冲区channel关闭后的读写

带缓冲区的channel关闭后,读写行为不同:

  • 读操作:若缓冲区还有数据,可正常读取数据(返回数据和true);当缓冲区数据读完后,再次读取会返回该channel元素类型的零值和false;
  • 写操作:向已关闭的channel写入数据会直接触发panic(Go不允许向关闭的channel写数据)。

4. linux 怎么查看cpu占用

常用命令如下:

  • top:实时动态查看进程CPU占用,按P可按CPU使用率排序(默认显示总体CPU占用,按1可查看单个核心占用);
  • ps aux:静态查看进程CPU占用(%cpu列显示使用率),结合grep可筛选特定进程;
  • mpstat:查看多核CPU的每个核心占用情况(需安装sysstat工具);
  • vmstat:查看系统整体CPU状态(包括用户态、系统态、空闲等占比)。

5. 软链接和硬链接区别

主要区别体现在存储、依赖关系等方面:

  • 存储方式:硬链接是原文件inode的"别名"(与原文件共享同一个inode);软链接是独立文件,存储的是原文件的路径(有自己的inode);
  • 跨文件系统:硬链接不能跨文件系统(因inode仅在单个文件系统内唯一);软链接可以跨文件系统;
  • 原文件删除影响:删除原文件后,硬链接仍可访问(因inode未被释放);软链接会失效(变成"断链");
  • 支持对象:硬链接不支持目录(避免循环引用);软链接支持目录。

6. 什么是死锁

死锁是指多个进程(或线程、协程)互相等待对方释放资源,导致所有进程都无法继续执行的状态。

死锁产生需满足四个必要条件:互斥(资源只能被一个进程占用)、持有并等待(进程持有部分资源,同时等待其他资源)、不可剥夺(资源不能被强制抢占)、循环等待(进程间形成互相等待资源的闭环)。

7. HTTP/1.1和HTTP/2.0区别

核心区别如下:

  • 协议格式:HTTP/1.1是文本协议(可读性强,但解析效率低);HTTP/2是二进制协议(分帧传输,解析快,更紧凑);
  • 多路复用:HTTP/1.1同一域名下默认允许6-8个并发连接(存在"队头阻塞"问题);HTTP/2通过"帧"和"流"实现单连接多路复用(多个请求共享一个TCP连接,无队头阻塞);
  • 头部压缩:HTTP/1.1头部无压缩(重复传输大量冗余信息);HTTP/2使用HPACK算法压缩头部,减少传输量;
  • 服务器推送:HTTP/2支持服务器主动向客户端推送资源(如HTML引用的CSS/JS),HTTP/1.1不支持。

8. 进程,线程,协程

三者是不同粒度的执行单元,核心区别:

  • 进程:操作系统资源分配的基本单位(有独立的内存空间、文件描述符等),创建/销毁开销大,切换成本高(需切换地址空间);
  • 线程:操作系统调度的基本单位(依赖进程存在,共享进程资源),创建/销毁开销中等,切换成本低于进程(无需切换地址空间);
  • 协程:用户态的轻量级线程(由程序(如Go的runtime)调度,而非OS),创建/销毁开销极小,切换成本极低(仅切换上下文寄存器),依赖线程运行(多协程可映射到少量线程)。

9. Tcp,udp,以及应用场景

TCP和UDP是TCP/IP协议栈中传输层的两种协议,区别及场景如下:

  • TCP:面向连接(三次握手建立连接)、可靠传输(通过确认、重传、拥塞控制保证数据不丢失、不重复、有序)、字节流协议;适用于对可靠性要求高的场景(如文件传输、HTTP/HTTPS、邮件等);
  • UDP:无连接(发送前无需建立连接)、不可靠传输(不保证数据到达,可能丢失或乱序)、数据报协议(按报文独立发送);适用于对实时性要求高、可容忍少量丢包的场景(如视频通话、直播、DNS查询、游戏等)。

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:面试群。

相关推荐
考虑考虑3 分钟前
Redis8中的布隆过滤器
redis·后端·程序员
丘山子1 小时前
DNS 原理入门
前端·后端·面试
你知道烟火吗1 小时前
谈谈对反射的理解?
java·开发语言·spring boot·后端
我爱996!1 小时前
Spring IoC&DI
java·后端·spring
创码小奇客2 小时前
深度对比:RocketMQ 凭什么成为阿里系首选消息队列?
后端·消息队列·trae
盖世英雄酱581362 小时前
事务报错,为何数据还是插入成功了❓
java·数据库·后端
it自2 小时前
Redisson在Spring Boot项目中的集成与实战
java·spring boot·redis·后端·缓存
kaliarch2 小时前
Terraform Authoring Operations Professional 认证考试经验分享:从备考到实战全攻略
后端
kaliarch3 小时前
迈向云基础设施自动化 - Terraformer 助力腾讯云资源管理转型
后端·云原生·自动化运维