JAVA中级面试题
Posted 李日兴lrx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中级面试题相关的知识,希望对你有一定的参考价值。
首先java是在jvm上运行的,比如windows系统的jdk,linux系统的jdk等或者其他的系统的jdk,java运行依赖jdk内的jvm,处处运行。
二:你能保证GC执行吗?
不能,虽然你可以调用 System.gc() 或者 Runtime.gc(),但是没有办法保证 GC的执行。
三:Synchronized和lock有什么区别?
1、 首先synchronized是Java内置关键字,在JVM层面,Lock是个Java类;
2、 synchronized 可以给类、方法、代码块加锁;而 lock 只能给代码块加锁。
3、 synchronized 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;而 lock 需要自己加锁和释放锁,如果使用不当没有 unLock()去释放锁就会造成死锁。
4. 通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。
四:抽象类必须要有抽象方法吗?
不是必须。抽象类可以没有抽象方法。
五:arryList的扩容机制?
ArrayList扩容发生在add()方法调用的时候, 调用ensureCapacityInternal()来扩容的, 通过方法calculateCapacity(elementData, minCapacity)获取需要扩容的长度:ensureExplicitCapacity方法可以判断是否需要扩容:ArrayList扩容的关键方法grow(): 获取到ArrayList中elementData数组的内存空间长度 扩容至原来的1.5倍
六:mysql的调优?
- 业务层面的优化
- 代码层面
- Sql层面
> 在表中建立索引,优先考虑where、group by使用到的字段。
> 尽量避免使用select *,返回无用的字段会降低查询效率。
- 硬件层优化
七:RabbitMQ有什么优点(写了rabbitmq的可以问)?
解耦、异步、削峰;
八:如何保证RabbitMQ不被重复消费?(写了rabbitmq的可以问)?
先说为什么会重复消费:正常情况下,消费者在消费消息的时候,消费完毕后,会发送一个确认消息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除;
但是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将消息分发给其他的消费者。
针对以上问题,一个解决思路是:保证消息的唯一性,就算是多次传输,不要让消息的多次消费带来影响;保证消息等幂性;
九:Redis支持哪几种数据类型?
String、List、Set、Sorted Set、hashes
十:Redis主要消耗什么物理资源?
redis是一种基于内存高性能的数据库--- 主要依赖于内存内存。
十一:Springmvc用到的设计模式有哪些?
简单工厂,工厂方法,单例模式,适配器,观察者等模式
十一:Spring中bean的生命周期?
Bean的实例化和DI(dependency injection),检查Spring Awareness,创建bean生命周期回调,销毁bean生命周期回调
十三:java线程的生命周期?
新建,就绪,运行,阻塞,销毁
十四:前后端分离项目跨域怎么解决?
前端jsonp,后台提供请求过滤。
十五:假如外网访问某服务器下的静态资源比如图片?
可以提供tomcat配置文件配置图片在服务器下的地址,提供启动tomcat访问
十六:服务器部署的项目前端怎么配置可访问?
例如:nginx配置
server
listen 8100;
server_name localhost;
location /
root /shengLongProject/front/water-affair-web/;
index index.html;
十七:websocket中在项目中有没有使用,怎么使用的?
按照回答来
十八:springboot常用的starter有哪些?
spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持,spring-boot-starter-data-jpa 数据库支持,spring-boot-starter-data-redis redis数据库支持,spring-boot-starter-data-solr solr支持,mybatis-spring-boot-starter 第三方的mybatis集成starter
十九:springboot如何添加【修改代码】自动重启功能?
添加开发者工具集spring-boot-devtools
二十:什么是微服务
以前的模式是 所有的代码在同一个工程中 部署在同一个服务器中 同一个项目的不同模块不同功能互相抢占资源,微服务 将工程根据不同的业务规则拆分成微服务 微服务部署在不同的机器上 服务之间进行相互调用,Java微服务的框架有 dubbo(只能用来做微服务),spring cloud(提供了服务的发现,断路器等)
二十一:什么是 spring cloud?
spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。二十二: spring cloud 的核心组件有哪些?
Eureka:服务注册于发现。
Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
Zuul:网关管理,由 Zuul 网关转发请求给对应的服务
二十三: 什么是Ribbon?
ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。feign默认集成了ribbon。
二十四:什么是feigin?它的优点是什么?
feign采用的是基于接口的注解,feign整合了ribbon,具有负载均衡的能力,整合了Hystrix,具有熔断的能力
1.添加pom依赖。
2.启动类添加@EnableFeignClients
3.定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务
二十五: Ribbon和Feign的区别?
1.Ribbon都是调用其他服务的,但方式不同。
2.启动类注解不同,Ribbon是@RibbonClient feign的是@EnableFeignClients
3.服务指定的位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
4.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign需要将调用的方法定义成抽象方法即可。
二十六:Linux的常用命令有哪些?
二十七:shiro权限表有哪些?
以上是关于JAVA中级面试题的主要内容,如果未能解决你的问题,请参考以下文章
分享 2021 年最新阿里 java 面试题:java 初级 + 中级 + 高级面试题(附答案),让你的面试之路畅通无阻!