2023-02-16 06:15:42
松鼠AI 一二面核心问题及解答要点总结
一面核心问题及解答方向技术实现类
发号器实现:需说明分布式ID生成策略(如雪花算法),重点阐述如何保证唯一性、趋势递增及高可用性。
62进制实现:解释进制转换原理(0-9a-zA-Z),结合短链生成场景说明压缩效率优势。
缓存问题:
穿透/击穿/雪崩区别:穿透(查询不存在的数据绕过缓存)、击穿(热点key过期被高并发访问)、雪崩(大量key同时过期导致请求直击DB)。
解决方案:穿透用布隆过滤器预过滤;击穿用互斥锁或逻辑过期;雪崩用随机过期时间或多级缓存。
SingleFlight原理:通过同步锁或channel合并同一请求的多次调用,避免重复计算或DB查询。
EFK日志收集:
EFK架构:Filebeat(日志采集)→ Logstash(过滤/转换)→ Elasticsearch(存储/检索)→ Kibana(可视化)。
Nginx日志收集:配置Filebeat的input.log路径及output.elasticsearch地址,结合Logstash解析JSON格式。
MongoDB排序实现:使用ZSET(有序集合)模拟Hacker News算法,结合时间衰减和热度权重排序。
数据库与网络
索引类型:
主键索引:唯一且非空,B+树结构;普通索引允许重复,辅助查询。
字符串与Int主键差异:字符串主键占用空间大,B+树层级更深,影响查询效率。
HTTP状态码:
100-500重点:101(协议切换)、200(成功)、301/302(重定向)、403(禁止访问)、500(服务器错误)。
Tinyint与Int区别:存储空间(1字节 vs 4字节)及取值范围(-128~127 vs -231~231-1)。
项目与职业规划
项目启发:结合日志收集项目,强调对分布式系统监控和性能优化的理解。
快速融入职场:主动沟通、学习公司技术栈、参与团队文档编写。
转正看法:表达长期发展意愿,提及对业务和技术双提升的期待。
深度技术问题
布隆过滤器:
原理:位数组+哈希函数,可能存在误判(不存在但返回存在),但不漏判。
实现:用Redis的Bitmap或Guava库的BloomFilter类。
EFK优化:
Filebeat缺点:单节点性能瓶颈,需横向扩展;配置复杂度高。
微服务组件:
注册中心:市面常用Eureka、Zookeeper、Nacos;Console不可替代注册中心(缺乏服务发现和健康检查能力)。
Go语言特性:
Map实现:哈希表结构,线程不安全需加锁或使用sync.Map。
GC机制:三色标记清除算法,通过写屏障减少STW(Stop-The-World)时间。
G-M-P模型:G(协程)、M(线程)、P(处理器),通过工作窃取机制平衡负载。
数据库进阶
联合索引使用:
条件a=10 AND b>10 AND c<100:仅用到a和b字段,c无法利用索引(范围查询后索引失效)。
分库分表场景:
水平分表:单表数据量大(如超过500万行);垂直分库:业务耦合度低(如用户库和订单库分离)。
Redis数据结构:
Bitmap:位操作统计(如日活用户);HyperLogLog:基数统计(如UV计算)。
Set与ZSET底层:Set为哈希表;ZSET为跳跃表+哈希表(支持范围查询和排序)。
场景化问题
502与504错误:
502(Bad Gateway):网关或代理服务器收到无效响应(如后端服务崩溃)。
504(Gateway Timeout):网关等待超时(如后端处理时间过长)。
MySQL字段类型选择:
Int1与Int10:存储空间相同(均为4字节),显示宽度不同(不影响实际存储)。
锁表场景:ALTER TABLE增加字段可能锁表(InnoDB引擎在线DDL可减少阻塞)。
职业规划与公司选择
实习期望:
工作量:明确可接受加班强度(如“能高效完成核心任务,必要时支持紧急需求”)。
薪资:参考市场水平(如“期望薪资与岗位价值匹配,具体可协商”)。
个人规划:
短期:快速掌握公司技术栈,独立完成模块开发。
长期:向全栈或架构师方向发展,结合业务优化系统性能。
反问环节:
小组工作范围:确认技术方向(如后端开发、大数据处理)。
培养机制:询问导师制度、技术分享频率。
复习分布式系统、数据库优化、网络协议等基础知识。
结合项目经验,准备“问题-解决方案-效果”的案例(如用布隆过滤器减少缓存穿透)。
表达清晰,避免过度使用技术术语;展示团队协作和学习能力。
了解松鼠AI业务(AI教育、智能测评),面试中关联技术场景(如推荐系统中的缓存设计)。
总结:松鼠AI面试注重技术深度与项目落地能力,需结合实际场景阐述解决方案,同时展现对长期发展的规划意识。