第一轮
- 自我介绍
- sleep方法与wait方法的区别
- 举例说明哪些情况会引起mysql全表扫描
- kong网关性能怎么样,有没有跟APISIX比较过
- JVM加载类的过程
- 开发和发布的流程。
- 你们平台内部调用有没有做加解密。复盘:应该说jwt的
- 代码重构
- 有没有做过接口优化,针对长调用进行性能优化
- mysql日志的几种类型及其用处
第二轮
- k8s部署比较传统非容器部署方式的优点
- service用过哪些类型? ClusterIP, NodePort, LoadBalancer等
- 你们公司用的k8s集群的规模(指底层IAAS层)
- python有用过Answerable吗
- ELK里的日志收集器有出现过OOM吗
- 监控系统?我回答:采集器CAdvisor+时序数据库Prometheus+可视化工具Grafana。面试官居然讲我说反了。我记得很清楚没有搞反,后面也翻了一下资料,搞反的不是我。
- mysql使用中遇到过什么问题吗,比如连接池访问量过大,连接不上了,或者库的同步问题
- 如果堆内存小于32G,JVM会怎样,对象头会默认开启什么?参考答案:指针压缩。
此文看懂一部分,总觉得有些问题讲得不透彻。比如按文中逻辑,我看明白了指针压缩使用8字节对齐方式,所以32位系统可以对32G内存进行寻址。但这个是怎么得出64位系统堆内存超过32G,指针压缩失效的结论的。64位系统寻址空间大小应该是32位系统的平方啊
- jmap导出的文件后缀名一般是什么
- springboot统一鉴权怎么做。A:Filter. Q: 如果只想对几个方法鉴权,用AspectJ,知道做吗?
我总结几个关键点(以下代码参考12):
@Aspect 切面类,
@Pointcut 切点: 切面类里定义 用@Pointcut修饰的方法, 使用 切点表达式函数 来描述对哪些 Join point(连接点) 使用 advise。如:
@Pointcut("@annotation(com.xys.demo1.AuthChecker)")
public void pointcut() {
}
@Advice 通知,或者称为增强。如:
@Around("pointcut()")
public Object checkAuth(ProceedingJoinPoint joinPoint) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
// 检查用户所传递的 token 是否合法
String token = getUserToken(request);
if (!token.equalsIgnoreCase("123456")) {
return "错误, 权限不合法!";
}
return joinPoint.proceed();
}
自定义注解AuthChecker.java用来定位切点:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuthChecker {
}
- 设计一个限流机制,有看过Hystrix源码吗
- 写过spring boot starter吗
- JVM新生代为什么要分成Eden区和Survivor区
复盘:这个问题我搜了下资料,网上有很多几乎一样的文档:“如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代 。。。Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生” 这段我认为解释不通,为什么如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代呢?就一直在Eden区进行回收,年龄超过阈值才送往老年代,不是一样吗? - 熟悉CICD基础工具吗
- 微服务是怎样部署到k8s的。Consul里面存的是什么地址,是Pod地址,还是Service地址,还是什么?复盘:Pod地址。
- docker compose有用过吗?DockerFile里的CMD与EntryPoint是什么区别?