面试完第一反应是想笑

先来唠唠

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

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

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

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

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

某大厂面经

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,备注:面试群。

相关推荐
小马爱打代码21 分钟前
Spring Boot 3.4 :@Fallback 注解 - 让微服务容错更简单
spring boot·后端·微服务
曾曜1 小时前
PostgreSQL逻辑复制的原理和实践
后端
豌豆花下猫1 小时前
Python 潮流周刊#110:JIT 编译器两年回顾,AI 智能体工具大爆发(摘要)
后端·python·ai
轻语呢喃1 小时前
JavaScript :事件循环机制的深度解析
javascript·后端
ezl1fe1 小时前
RAG 每日一技(四):让AI读懂你的话,初探RAG的“灵魂”——Embedding
后端
经典19921 小时前
spring boot 详解以及原理
java·spring boot·后端
Aurora_NeAr1 小时前
Apache Iceberg数据湖高级特性及性能调优
大数据·后端
程序员清风1 小时前
程序员要在你能挣钱的时候拼命存钱!
后端·面试·程序员
夜阳朔2 小时前
Conda环境激活失效问题
人工智能·后端·python
白仑色3 小时前
Spring Boot 多环境配置详解
java·spring boot·后端·微服务架构·配置管理