1.简单做个自我介绍
2.介绍一下JVM内存模型(JMM)
-
JVM内存模型(JMM)是Java虚拟机规范定义的一种抽象的计算机模型,它定义了线程之间的共享内存区域和私有内存区域的访问规则。JMM包括主内存、工作内存和线程之间的通信方式,确保多线程程序在不同平台上都能达到一致的内存访问效果。
3.程序计数器是线程私有的吗?主要的作用是什么?
-
程序计数器是线程私有的,每个线程都有自己的程序计数器。它的主要作用是记录当前线程执行的字节码指令地址,是线程切换后能够恢复到正确的执行位置。
4.堆内存的分配策略是什么?
-
堆内存的分配策略是根据对象的大小动态分配内存空间,并且采用分代垃圾回收算法对内存进行管理。
5.堆对大的对象有什么优化?
-
堆对大的对象有优化,可以通过设置参数来控制大对象的分配和回收。
6.遇到过什么内存问题需要排查jvm情况?
-
内存问题可能包括内存泄漏、内存溢出等,需要排查JVM情况,查看内存使用情况、垃圾回收情况等。
7.OOM一般会出现在什么情况?
-
OOM(Out Of Memory)一般会出现在内存不足的情况下,例如堆内存溢出、永久代内存溢出等。
8.反射的原理?
-
反射的原理是通过运行时动态获取类的信息,可以操作类的属性、方法等。
9.获取Class对象有哪些方式?
-
获取Class对象的方式包括通过类的静态属性class、通过对象的getClass()方法、通过Class.forName()方法。
10.hashmap的put()方法的流程?
-
hashmap的put()方法的流程是先根据key的hashCode找到对应的桶(数组位置),然后根据key的equals方法找到具体的节点,如果节点存在则更新值,不存在则新增节点。
11.hashmap扩容是怎么实现的?
-
hashmap扩容是通过创建一个新的更大的数组,然后重新计算每个元素的位置,将元素重新放入新的数组中。
12.每次扩容都会扩容到2倍的原因?
-
每次扩容都会扩容到2倍的原因是为了减少哈希冲突,提高哈希表的性能。
13.spring的循环依赖怎么解决?
-
Spring的循环依赖可以通过三级缓存解决,即在对象创建的过程中,将正在创建的对象放入缓存,如果发现循环依赖,则返回缓存中的对象。
14.bean的生命周期?
-
Bean的生命周期包括实例化、属性赋值、初始化、销毁等阶段。
15.单例对象和多例对象的生命周期有什么不同?
-
单例对象的生命周期是整个应用程序的生命周期,而多例对象的生命周期是根据使用情况动态创建和销毁。
16.作用域上有什么区别?
-
作用域上的区别是单例对象全局共享,多例对象每次获取都会创建一个新的实例。
17.微服务的调用是使用RPC还是HTTP协议?
-
微服务的调用可以使用RPC协议或者HTTP协议,具体取决于微服务架构的设计和实现。
18.微服务有哪些组件?
-
微服务的组件包括服务注册与发现、服务调用、负载均衡、断路器、API网关等。
19.负载均衡是如何处理的?(负载均衡策略)
-
负载均衡通过轮询、随机、加权轮询、加权随机等策略来处理请求分发。
20.注册中心使用是什么?
-
注册中心是用来管理微服务的注册和发现,可以通过注册中心来实现服务之间的通信和调用。
21.外部对硬件的检测是如何实现的?
-
外部对硬件的检测可以通过传感器、设备接口等方式实现。
22.通信的协议是什么?
-
通信的协议可以是TCP/IP协议、HTTP协议、WebSocket协议等。
23.websocket使用的是java原生的吗?
-
WebSocket使用的是Java原生的,可以通过Java的WebSocket API来实现。
24.怎么保证websocket链接的有效和安全?
-
保证WebSocket连接的有效和安全可以通过心跳机制和加密传输来实现。
25.设备的并发数据量有多少?
-
设备的并发数据量取决于设备的性能和网络环境,可以通过性能测试来评估。
26.服务器有几台?
-
服务器的数量取决于系统的负载和性能需求,可以根据实际情况进行扩展。
27.会主动监测设备吗?
-
可以通过监控系统来主动监测设备的状态和性能。
28.用户管理是直接和前端交互得吗?
-
用户管理可以通过前端交互,也可以通过后端接口来实现。
29.开发过程中又遇到什么让你头疼的问题吗?
-
在开发过程中可能会遇到性能问题、安全问题、兼容性问题等让人头疼的问题。
30.有没有遇到cpu飙升的情况,但是吞吐量却很低?如何去排查?
-
遇到CPU飙升但吞吐量低的情况可能是因为线程阻塞、死锁等问题,可以通过监控工具来排查
31.你有什么问题吗?