JAVA面试必知28个最难回答问题(面试常考,建议收藏!)

261 阅读5分钟

高级JAVA面试题:

高级java开发工程师(算法/堆栈) | 智一面

1.springBoot有哪些注解?

SpringBootApplication(启动)Autowired(控制反转注入)Configuration(配置)

2.springBoot启动流程?

  • 第一步加载元注解,定义作为范围、有效期、是否允许继承、动态生成文档文件
  • 第二步加载spring:第一步加载所有的配置文件,第二部开启自动化配置,第三步过滤掉部分未引用的加载项

3.spring注解什么情况下会失效?

①没有被spring管理

②方法不是public的

③不支持事务

④出现异常try-catch处理掉,事务无法回滚

4.Nginx配置步骤,如何检查配置有没有成功?

①修改ngnix.conf的upstream的端口已连接服务器

②修改conf.d文件夹下的配置文件,配置域名如果项目使用动静分类情况下还要配置静态文件在ngnix的位置

③随便写个html,用浏览器看看是否可以访问

5.Java集合哪些线程安全,哪些不安全?

Vector、HashTable、Properties是线程安全的; ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是线程不安全的

1627876496(1).jpg

6.创建线程池的API有那些,7个参数的意义都是什么?

核心线程数、最大线程数、存活时间、时间单位、任务队列、线程工厂

7.redis有那些数据类型?

string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)

8.redis怎么做分布式锁?

提取时在redis创建一个map,提取结束后将map删掉,这个map就是锁

9.springcloud的技术栈?

  • Spring Cloud Config配置管理包
  • Spring Cloud Bus时间,与config配合可以实现热部署
  • Spring Cloud Sleuth日志收集工具包
  • Spring Cloud Stream数据流开发包

10.描述一下bean的生命周期?

找到spring管理的bean,进行实例化,bean堆5种接口进行了实现,完成实例化后bean准备就绪,存储在上下文种。

销毁时间:①上下文被摧毁。②调用实现接口里的销毁方法

1627876520(1).jpg

11.spring bean是什么?

Bean是由springBoot管理的所有的对象的总称,只要是交给springboot管理的对象都可以称之为bean,bean是一个被实例化、组装并通过sprnigIOC容器锁管理的对象

12.redis哪个版本之前为什么是单线程的?

6之前是单线程的,因为无法解决读写锁的问题,且当时的硬件的问题也无法解决

13.arraylist和linkedlist的区别?

ArrayList是数组结构,LinkedList基于链表

14.equals和==比较的各是什么?

equals比较的是值,而==比较的是内存位置

15.对JVM的了解,JVM垃圾回收机制?

堆、方法区、方法栈、本地方法栈

16.redis缓存的击穿、穿透、雪崩是如何解决的?

击穿:存储null值

穿透:增加读写锁

雪崩:①搭建多台redis服务器,②更新时间

17.描述以下aop的初始化?

aop即面向切面编程,打个比方,就是你现在希望在原有的程序上添加一个功能但是又不想破坏原有的程序,所以你在你希望加的地方打上一个标记,程序在运行到这个标记的时候,先运行要加的方法运行结束之后再继续运行程序

18.Streambuffer和Streambuilder的区别是什么?

Buffer和builder都是可变类,不同的是buffer是线程安全的,任何对它指向的字符串的操作都不会产生新的对象。每个buffer对象都有一定的缓冲区当容量没有超过时,不会分配新的容量,如果超过会自动增加容量且buffer是多线程操作字符串

19.hashmap和hashtable的区别?

二者都实现了map接口,不同的地方在于,hashmap允许键和值是null的但是hashtable不允许键或值是null的,且hashmap单线程操作且非同步,hashtable是多线程操作且同步,

20.hashmap初始内存是多大?

初始时为16个,负载因子是0.75

1627876543(1).jpg

21.简述AOP和IOC?

两个都是spring的重要核心,AOP是切面编程,指在不更改原有的程序上添加新功能,但不破坏原有程序,在书写时需要加上标记,程序运行到这个标记时去运行标记的程序,然和再继续运行

IOC是控制反转,以前需要实例化对象后才能用,再项目中IOC一个Autowired注解进行

22.hashmap是怎么存储的?

用Key:Value的形式存入元素集,当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),当数据量大于8个时,使用红黑树算法存储以解决最高时间复杂度问题,使用红黑树后将二叉树改平衡二叉树

23.springMVC是如何渲染到前端的?

如果返回的是json,用的是@ResponseBody

如果只是返回,放到model或ModelAndView

24.springmvc如何从前端获取到数据?

如果是/之后,?之前,用@PathVariable

如果是在?之后,用@RequestParam(以上是在方法参数里)

获取request消息体是@RequestBody

25.springmvc如何接收前端传送过来的文件?

方法参数里@RequestParam(value="file")

PostMapping

u=411035725,2076790212&fm=26&fmt=auto&gp=0.webp

26.springcloud的远程调用(跨服务)是如何做的?

使用feign

main上添加注解@EnableFeignClients

在定义的接口上使用@FeignClient

27.spring使用哪个注解开启事务的?

Transactional

28.springcloud使用feign(远程调用)时会很慢,如何解决?

将返回结果放到缓存中,使用注解@Cacheable,并标注缓存到哪个区域