面经 - 2024.11.6 万物安全

写在前头

本人5年工作经验,普通二本,gap10个月

第一轮

final关键字干嘛的?

回答 修饰类和变量 作用略

String可变吗?

回答 不可变,使用final修饰

String 线程安全吗? 为什么?

回答 安全

回答 final的特性 不可变 可见性 避免重排序

final的局限性?

回答 如果使用final修饰的对象内部也有可变状态则不保证线程安全 比如容器ArrayList

String intern 用过吗 使用场景是?

回答:没用过 不知道

面试官回答补充 学到了

synchronized是可重入锁吗?什么是可重入锁?

回答: 是 解释概念

知道乐观锁吗?讲讲著名的乐观锁实现

回答: mysql的mvcc

mvcc能解决幻读吗?

回答:不能,解释幻读的概念和mvcc的特点

幻读是因为数据的增删导致的,单纯的 MVCC 快照读无法控制新行的插入或删除。

怎么解决幻读?

回答 for update,面试官深入间歇锁,不知道 下一个问题

k8s的label有什么作用?

回答 相当于打标签,配合selector来做筛选和分组操作

讲讲类加载过程

回答 八股文

类加载顺序?

回答 双亲委派机制

面试官说涉及到继承的时候

回答 八股 先执行静态代码块之类 略

聊聊ConcurrentHashMap

回答 jdk7和jdk8的实现区别

讲讲ConcurrentHashMap的扩容

回答 不清楚 但是需要考虑线程安全问题

CAS是什么?

回答:解释cas

CAS会有什么问题?怎么解决?

回答 ABA问题 解释ABA问题

带版本的CAS 判断版本是否一致来判断是否发生了ABA问题

Kafka broker的作用?

回答 解释 收发 持久化消息 副本管理

Kafka怎么保证集群中不同节点的分区数据一致性?

回答 leader和副本的同步机制 生产者ACK

第二轮

给了纸笔 系统设计占了大部分时间

讲讲你的项目

解释项目

讲讲你们的权限设计?

回答 使用了keycloak,keycloak提供RBAC 以及ldap导入并且可以签发token

为什么不用springsecurity?

回答 springsecurity不能做到动态API权限,需要在API写死角色

你们怎么实现动态API权限

回答 基于keycloak的用户数据和角色数据,在新建一张权限表 绑定角色和API

然后就是面试官开始反驳我

springsecurity也可以做到动态权限 你看过springsecurity的源码吗?

回答 没有,下一个问题

讲讲kafka在你们项目中的使用场景

回答 消息队列和日志收集

为什么不用rabbtimq?

回答 解释kakfa和rabbitmq的区别 和rabbitmq集群难以管理

为什么难以管理?

回答 不知道

设计一下PC端的微信登录 在纸上画出状态机

回答 PC 手机 服务器

正常回答 忘了如果一直手机不扫 二维码需要超时更新

设计一个通用的定时调度模块

反问具体场景

面试官回答

提供统一的API接受其他模块的请求

其他模块的请求是要求你定式触发一个HTTP API 或者是一个RPC接口

回答 表设计 job表 job_details表 task表

面试官睿评:缺少了很多重要字段

结束面试

无下文