26年2月北京500人公司 Java开发工程师 二面
- 讲讲你项目中的权限控制是如何实现的? 回答:项目中采用JWT+Spring Security实现权限控制。用户登录成功后生成JWT Token,包含用户ID和角色信息,前端存储在localStorage,每次请求在Header中携带。服务端使用Filter拦截请求,解析Token获取用户信息,查询数据库获取权限列表,使用Spring Security的@PreAuthorize注解控制接口访问权限。同时使用TransmittableThreadLocal解决线程池场景下的用户信息传递。
- JWT是什么?它包含哪几部分?如何验证token的合法性? 回答:JWT(JSON Web Token)是一种跨域认证方案,由三部分组成:Header(头部,Base64编码的JSON,包含算法类型)、Payload(负载,Base64编码的JSON,包含用户信息、过期时间等)、Signature(签名,对Header和Payload的签名)。验证时服务端使用密钥重新计算Signature,与Token中的Signature对比,一致则验证通过。同时检查Payload中的exp过期时间。
- 讲讲ConcurrentHashMap的底层实现原理?JDK 1.7和1.8有什么区别? 回答:ConcurrentHashMap在JDK 1.7采用Segment数组+HashEntry数组,每个Segment继承ReentrantLock,实现分段锁,默认16个Segment支持16并发。JDK 1.8取消Segment,使用Node数组+链表+红黑树,使用CAS+synchronized保证并发安全,锁的粒度细化到每个桶。JDK 1.8还引入了sizeCtl、CAS等优化,并发性能更好。
- ReentrantLock的实现原理是什么?公平锁和非公平锁的区别? 回答:ReentrantLock基于AQS(AbstractQueuedSynchronizer)实现,通过CAS修改state变量获取锁,失败则加入等待队列。公平锁在获取锁时检查等待队列是否有等待时间更长的节点,有则加入队尾;非公平锁直接尝试获取锁,成功则直接获取,失败再加入队列。公平锁保证先到先得但吞吐量低,非公平锁可能产生饥饿但吞吐量大。
- 讲讲Redis的数据类型及适用场景? 回答:Redis数据类型:String适用于缓存、计数器、分布式锁;Hash适用于存储对象、购物车;List适用于消息队列、排行榜;Set适用于去重、标签、好友关系;ZSet适用于排行榜、延迟队列;Bitmaps适用于用户签到、活跃用户统计;HyperLogLog适用于UV统计;Geo适用于附近的人、位置服务。
- Redis的setnx和setnx+expire是原子操作吗?如何保证原子性? 回答:在Redis 2.6.12之前,SETNX和EXPIRE是分开的两个命令
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【八股真解】精炼最新高频面经 文章被收录于专栏
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
