2021-08-17 16:41:18
美团后台开发暑期实习一面面经总结如下:
一、项目/科研经历相关问题遇到的困难需结合具体项目阐述技术难点,例如高并发场景下的性能瓶颈、分布式系统中的数据一致性挑战等。重点说明分析问题的过程(如通过日志排查、监控工具定位)及解决方案(如引入缓存、优化SQL、调整线程池参数)。
拷打项目细节
方案选择原因:需对比备选方案(如Redis与Memcached的选型、MySQL分库分表策略),说明当前方案在性能、成本、可维护性等方面的优势。
备选方案列举:例如缓存策略可选本地缓存或分布式缓存,需分析适用场景。
自我评分与改进:评分需客观(如7/10),改进点可提及代码复用性、异常处理完善性等。
个人贡献与不足
优点:突出技术深度(如优化数据库查询使响应时间降低40%)或协作能力(如推动团队采用自动化测试)。
改进方向:可提及对新技术的学习不足(如未深入掌握分布式事务框架)、需求评审阶段考虑不周全等。
进程调度算法需掌握以下算法及其适用场景:
FCFS(先来先服务):公平但效率低,适合长作业。
SJF(短作业优先):平均等待时间短,但可能导致饥饿。
优先级调度:区分任务紧急程度,需防止低优先级任务长期阻塞。
时间片轮转:实现多任务并发,时间片大小影响上下文切换开销。
多级反馈队列:综合优先级与时间片,兼顾交互式与批处理任务。
输入地址到返回网页的过程
DNS解析:递归查询本地缓存、根域名服务器、顶级域名服务器,最终获取IP。
TCP连接:通过三次握手建立可靠通道。
HTTP请求:客户端发送请求头与数据,服务器处理后返回响应。
渲染与返回:浏览器解析HTML/CSS/JS,渲染页面并关闭TCP连接(四次挥手)。
TCP三次握手原因
为何不是两次:防止历史连接导致的资源浪费。若客户端发送的旧SYN包因网络延迟到达,服务器回复SYN+ACK后若无第三次握手,会错误建立连接。
为何不是四次:三次已能同步双方初始序列号与确认号,额外握手无实际意义。
库表设计评估标准
需求匹配度:是否覆盖所有业务场景(如订单表需包含用户ID、商品ID、状态等)。
扩展性:是否支持未来功能迭代(如用户表预留扩展字段)。
性能:通过索引优化查询效率(如为高频查询字段建索引)。
规范化程度:遵循三大范式以减少冗余。
数据库三大范式
第一范式(1NF):字段不可再分(如地址拆分为省、市、区)。
第二范式(2NF):非主键字段完全依赖主键(如订单明细表需包含订单ID与商品ID作为联合主键)。
第三范式(3NF):非主键字段间无传递依赖(如用户表中的“所在城市”不应依赖“省份”字段)。
索引设计原则
选择性高:区分度大的字段(如用户ID优于性别)。
高频查询:为WHERE、JOIN、ORDER BY涉及的字段建索引。
避免过度索引:索引会占用存储空间并降低写入性能。
复合索引顺序:遵循最左前缀原则(如索引(A,B)可优化A=1 AND B=2,但无法优化B=2)。
MySQL采用B+树的原因
磁盘IO效率:B+树非叶子节点仅存键值,数据集中在叶子节点,减少IO次数。
范围查询优化:叶子节点通过指针连接,支持高效的范围扫描(如ID BETWEEN 1 AND 100)。
稳定性:树高度可控(通常3-4层可存储千万级数据),查询时间复杂度为O(log n)。
事务隔离级别
读未提交(Read Uncommitted):可能读到未提交数据(脏读)。
读已提交(Read Committed):避免脏读,但可能不可重复读(同一事务内两次读取结果不同)。
可重复读(Repeatable Read):避免脏读与不可重复读,但可能幻读(其他事务插入新数据)。
串行化(Serializable):最高隔离级别,通过锁机制完全避免并发问题,但性能最低。
垃圾回收算法
标记-清除:标记无用对象后直接清除,产生内存碎片。
复制算法:将存活对象复制到另一块内存,适合新生代(如Eden区)。
标记-整理:标记后压缩内存,避免碎片化,适合老年代。
分代收集:结合以上算法,新生代用复制,老年代用标记-整理。
Spring Bean生命周期
实例化:通过反射创建Bean实例。
属性注入:依赖注入(DI)完成属性赋值。
初始化:调用@PostConstruct方法或实现InitializingBean接口。
使用:Bean处于活跃状态,供业务逻辑调用。
销毁:调用@PreDestroy方法或实现DisposableBean接口,释放资源。
按.分割字符串为4部分。
验证每部分是否为0-255的整数。
将每部分转换为8位二进制,拼接为32位整数。
附:更多笔面经可参考链接: