新的一周,继续加油!
今天给大家分享一份腾讯Go后端的面经,先来说说这位同学的面试经历,正在找工作的同学可以参考一下。
他第一次面腾讯,过了前两面,到第三面没通过。之后他去面了某打车软件,拿到了 offer,本来都快入职了,结果被毁约了。
本以为大厂无望了,但是腾讯的HR突然联系他,说看了他之前的面试记录,问他要不要再试一次。
面试官觉得他技术还行,就是经验少了点,刚好部门有新的招聘名额,就想着再给他个机会。
有了之前的经验,这次他做足了准备,从一面到终面都挺顺利,最后HR跟他谈了薪资。
这一路走来真的是不容易,好在他一直没有放弃。下面就分享下他在腾讯的一面面经:
主键索引是一种特殊的唯一索引,用于唯一标识表中的每一行数据。它具有以下特点:
普通索引则是非聚簇索引,其叶子节点存储的是索引列的值和对应的主键值。普通索引允许重复值,且不强制非空。查询时需先通过索引找到主键,再回表查询完整数据行,因此可能需要两次I/O操作。
非聚簇索引(如普通索引)的叶子节点仅存储索引列的值和主键,不包含完整数据行。当查询需要访问索引列以外的字段时,需先通过非聚簇索引找到主键,再根据主键到聚簇索引(主键索引)中查找完整数据行。这种二次查询的过程称为“回表”。例如,若表有索引idx_name,查询SELECT * FROM users WHERE name='Alice'时,需先通过idx_name找到主键,再通过主键查询完整数据。
MySQL支持四种事务隔离级别,默认是可重复读(Repeatable Read):
MySQL主从同步基于二进制日志(binlog),分为三个阶段:
binlog(二进制日志)记录了所有对数据库数据和结构的变更操作,包括:
缓存雪崩指大量缓存同时失效,导致请求直接穿透到数据库,引发数据库压力激增甚至崩溃。常见原因包括:
解决方案:
Redis支持两种持久化方式:
dump.rdb),可手动触发(SAVE/BGSAVE)或按配置自动触发(如save 900 1表示900秒内至少1次写操作则生成快照)。appendonly.aof),可配置每秒同步(appendfsync everysec)或每次写操作同步。HTTP报文分为请求报文和响应报文,结构如下:
方法 URL HTTP版本,如GET /index.html HTTP/1.1。Host: example.com。HTTP版本 状态码 原因短语,如HTTP/1.1 200 OK。Content-Type: text/html。特性 | HTTP | HTTPS |
|---|---|---|
加密 | 明文传输,不安全 | 基于SSL/TLS加密,数据保密 |
端口 | 默认80 | 默认443 |
连接方式 | 简单请求响应 | 需TLS握手建立安全连接 |
证书 | 无 | 需CA颁发的数字证书验证身份 |
性能 | 快 | 稍慢(加密和解密开销) |
HTTPS通过加密和证书验证,防止数据窃听和中间人攻击,适用于金融、登录等敏感场景。 |
TLS握手是客户端与服务器建立安全连接的过程,步骤如下:
Animal的say()方法,子类Dog和Cat分别实现为“汪汪”和“喵喵”。维度 | 进程 | 线程 |
|---|---|---|
资源分配 | 独立地址空间、内存、文件句柄 | 共享进程资源(如内存、文件句柄) |
调度单位 | 操作系统调度的基本单位 | 进程内的调度单位,切换更快 |
并发性 | 多进程可并行(多核) | 多线程可并发(单/多核) |
上下文切换 | 开销大 | 开销小 |
独立性 | 进程间数据隔离,通信复杂 | 线程间数据共享,易引发竞态条件 |
进程适用于需要资源隔离的场景(如独立服务),线程适用于高并发、低开销的任务(如Web服务器处理请求)。 |
协程(Coroutine)是用户态的轻量级线程,由编程语言或框架调度,无需操作系统内核介入。与线程的区别:
常用命令:
top命令的第一行包含系统负载信息,格式为:
top - 12:00:01 up 3 days, 4:53, 3 users, load average: 0.11, 0.25, 0.30
其中load average后的三个数值分别表示1分钟、5分钟、15分钟的系统平均负载。数值越高,说明系统压力越大。一般认为,负载值超过CPU核数的70%时需警惕。
lscpu:直接显示CPU信息,包括核数、线程数、架构等。
lscpu | grep 'CPU(s)'
# 输出:CPU(s): 8 (表示8核)
/proc/cpuinfo:通过文件查询处理器数量。
cat /proc/cpuinfo | grep processor | wc -l
# 输出处理器总数(如8)
使用du命令:
查看当前目录总大小:
du -sh
# 输出:500M . (当前目录占用500MB)
查看子目录大小:
du -h --max-depth=1
# 显示当前目录下各子目录的大小
netstat:
netstat -tunlp | grep ESTABLISHED
# 显示所有TCP连接,-t表示TCP,-u表示UDP,-n显示IP地址,-l监听状态,-p显示进程ID
ss:
ss -tun | grep ESTAB
# 更高效的替代工具,支持过滤和统计
TCP滑动窗口是流量控制机制,用于避免发送方发送数据过快导致接收方缓冲区溢出。原理如下:
win字段)。