ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA中级面试题

2021-12-29 14:58:00  阅读:146  来源: 互联网

标签:面试题 调用 服务 spring boot 中级 Ribbon JAVA starter


  1. 面试题

一: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的调优?

  1. 业务层面的优化
  2. 代码层面
  3. S ql层面

> 在表中建立索引,优先考虑where、group by使用到的字段。

> 尽量避免使用select *,返回无用的字段会降低查询效率。

  1. 硬件层优化

七: RabbitMQ有什么优点  写了rabbitmq的可以问 )?

解耦、异步、削峰;

八: 如何保证RabbitMQ不被重复消费?  写了rabbitmq的可以问 )?

先说为什么会重复消费:正常情况下,消费者在消费消息的时候,消费完毕后,会发送一个确认消息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除;

但是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将消息分发给其他的消费者。

针对以上问题,一个解决思路是:保证消息的唯一性,就算是多次传输,不要让消息的多次消费带来影响;保证消息等幂性;

九: Redis支持哪几种数据类型?

String、List、Set、Sorted Set、hashes

十: Redis主要消耗什么物理资源?

redis是一种基于内存高性能的数据库--- 主要依赖于内存内存。

十一: S pringmvc用到的设计模式有哪些?

简单工厂 , 工厂方法 , 单例模式 , 适配器 , 观察者 等模式

十一: S pring 中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需要将调用的方法定义成抽象方法即可。

二十六:L inux的常用命令有哪些?

 

二十七:shiro权限表有哪些?

 

标签:面试题,调用,服务,spring,boot,中级,Ribbon,JAVA,starter
来源: https://blog.csdn.net/qq3164069700/article/details/122215777

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有