2022-01-27 16:03:06
腾讯云智后台开发一面主要围绕项目经历、技术原理、编程能力及问题解决思路展开,涉及单点登录、OAuth2.0、秒杀系统、Redis、JVM、MySQL、多线程、数据结构与算法等内容,并包含手撕代码和智力题。具体内容如下:
自我介绍与项目经历
自我介绍:简要说明教育背景、技术方向、项目经历及个人优势。
项目介绍:需挑一个最了解的项目,重点阐述技术选型、架构设计、难点解决及优化点。
社区介绍:若项目涉及社区功能,需说明用户体系、交互设计及性能优化方案。
点评项目介绍:需说明业务逻辑、数据流转及核心功能实现。
单点登录与OAuth2.0
单点登录原理:通过共享会话或令牌实现多系统统一认证,用户只需登录一次即可访问所有关联系统。
OAuth2.0原理:基于授权码模式、简化模式等流程,通过颁发访问令牌(access_token)实现第三方应用对用户资源的有限访问。
授权码拦截攻击:攻击者截获授权码并伪造请求获取令牌,可通过HTTPS加密、PKCE扩展(Proof Key for Code Exchange)或一次性授权码机制防范。
access_token过期时间:由授权服务器设定,通常为短期有效(如1小时),需结合refresh_token实现令牌刷新。
Authorization Grant有效性:授权码(Authorization Code)和刷新令牌(Refresh Token)有效期不同,授权码通常一次性使用且有效期较短。
秒杀系统设计
表设计:需包含商品表(库存、价格)、订单表(用户ID、商品ID、状态)、库存表(实时扣减)等,并通过乐观锁或分布式锁防止超卖。
异步秒杀与消息队列:消息队列(如Kafka、RocketMQ)用于解耦扣减库存和生成订单操作,通常位于扣减库存之前以实现流量削峰。
Lua脚本实现:在Redis中通过Lua脚本保证原子性操作(如库存扣减),避免竞态条件。
Redis问题:包括缓存穿透(查询不存在的数据导致直接访问DB)、缓存雪崩(大量缓存同时失效导致DB压力激增)及解决方案(布隆过滤器、随机过期时间、多级缓存)。
安全与加密
密码加密:外卖项目中对密码进行MD5加密(实际场景中建议使用更安全的算法如BCrypt)以防止明文存储泄露。
MD5逆向:MD5是单向哈希函数,无法直接通过加密后的串获取原始密码,但可通过彩虹表攻击破解弱密码。
实时通信与网络
WebSocket实现催单与来单提醒:通过长连接实现服务端主动推送,减少HTTP轮询的延迟和资源消耗。
HTTP局限性:HTTP为短连接协议,无法实现服务端主动推送,需通过轮询或长轮询模拟实时效果,效率较低。
计算机基础
大端小端:大端(Big-Endian)将高位字节存储在低地址,小端(Little-Endian)相反;存在原因是CPU设计差异,网络传输需统一为网络字节序(大端)。
ConcurrentHashMap底层:Java 7采用分段锁,Java 8改为CAS+synchronized+红黑树实现,减少锁粒度并提高并发性能。
synchronized与锁:synchronized是JVM内置锁,通过monitor对象实现;锁(如ReentrantLock)基于AQS框架,支持公平锁、超时等高级功能。
JVM死亡对象判断:可达性分析法通过GC Roots(如线程栈变量、静态变量)追溯对象引用链,无法到达的对象视为可回收。
数据库与索引
MySQL存储引擎:InnoDB支持事务、行级锁、外键;MyISAM不支持事务,表级锁,适合读多写少场景。
InnoDB与B+树:B+树非叶子节点存储索引,叶子节点存储数据且通过指针连接,支持高效范围查询和磁盘IO优化。
索引复杂度:B+树查询复杂度为O(log n),二叉平衡树(如AVL树)为O(log n),但B+树更适合磁盘存储(高扇出性)。
禁用二叉树原因:二叉树深度较大时磁盘IO次数增加,B+树通过多路平衡降低树高,提升查询效率。
手撕代码与智力题
链表倒数第k个节点:使用双指针法,快指针先走k步,然后快慢指针同步移动,快指针到达末尾时慢指针指向目标节点。
青蛙跳台阶:动态规划解法为f(n) = f(n-1) + f(n-2) + ... + f(1) + 1(初始条件f(1)=1),或递归优化为f(n) = 2^(n-1)(每次跳1到n阶的组合数)。
饮料兑换问题:买10瓶喝完后得10空瓶,兑换3瓶余1空瓶,喝完3瓶得3空瓶,再兑换1瓶余1空瓶,总计10+3+1=14瓶。
反问环节
组内技术栈:可询问后端开发主要使用的语言(如Java/Go)、框架(如Spring Cloud)、中间件(如Redis、Kafka)及云服务(如腾讯云)。
结果通知时间:通常3-7个工作日,部分公司可能更快。
技术栈要求:需明确是否对特定语言或框架有硬性要求,或更看重基础能力和学习能力。