自学内容网 自学内容网

java 面试题总结

1锁粗化和锁消除,锁膨胀和锁升级的区别。

https://www.cnblogs.com/xuxinstyle/p/13387778.html

.无锁 < 偏向锁 < 轻量级锁 < 重量级锁 ,说的时候不要忘记说无锁状态

2.Map 的实现,线程安全的实现

1、ConcurrentHashMap在JDK 1.7中使用的数组 加 链表的结构,其中数组分为两类,大树组Segment 和 小数组 HashEntry,而加锁是通过给Segment添加ReentrantLock重入锁来保证线程安全的。

2、ConcurrentHashMap在JDK1.8中使用的是数组 加 链表 加 红黑树的方式实现,它是通过 CAS 或者 synchronized  来保证线程安全的,并且缩小了锁的粒度,查询性能也更高。

3. springcloud 熔断降级,什么是熔断降级,你们是怎样处理的。

服务熔断一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施。

服务降级是在服务器压力陡增的情况下,利用有限资源,根据当前业务情况,关闭某些服务接口或者页面,以此释放服务器资源以保证核心任务的正常运行。

这个问题日常工作中一般有个监控软件,监控服务状态比如cpu,内存,服务的健康性,服务异常会发报警, 然后开发人员处理,但是具体这个属于熔断还是降级,这个貌似啥也不属于。

4.eureka的健康检查

注册中心的心跳机制有两种形式:客户端主动上报和客户端被动响应。

Eureka属于是主动上报类型的,Client通过renew机制频繁的向Server发送消息,通知Server它还活着,不要将其从服务列表中剔除,但是我们renew仅仅是监控Client是否存活,并不会去检测Client依赖的服务是否存活

renew最基础的就是调一下Server的/apps/{appName}/{instanceId}?status=&lastDirtyTimestamp=接口,正常情况下Client启动后的status为UP,所以只要Client自身服务不出问题,永远都是UP,默认的指示器是CompositeHealthIndicator,默认的管理器为EurekaHealthCheckHandler;

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

eureka.clientt.healthcheck.enabled = true

eureka.instance.lease-renewal-interval-in-seconds=15 默认是30s

自定义监控指标参考 Eureka心跳检测-CSDN博客

# Dockerfile 示例
FROM openjdk:17-jdk-slim
# 假设你的Spring Boot应用编译打包后的jar名为app.jar
COPY target/app.jar /app.jar
# 设置环境变量以启用Spring Boot Actuator的健康检查端点
ENV SPRING_BOOT_ADMIN_CLIENT_HEALTH-CHECK-URL=http://localhost:8080/actuator/health
# 定义健康检查命令,每30秒执行一次,连续两次失败判定为不健康
HEALTHCHECK --interval=30s --timeout=5s --start-period=1m --retries=2 CMD curl -f http://localhost:8080/actuator/health || exit 1
# 指定容器启动时运行的应用
ENTRYPOINT ['java', '-jar', '/app.jar']

原文地址:https://blog.csdn.net/x17809211858/article/details/136453520

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!