1. Java基础

问题1:String str = “abc” 和 String str = new String(“abc”)的区别?他们分别创建了几个对象?

问题2:Java8的新特性

问题3:创建stram的时候有几种方式?

问题4:ArrayList和LinkedList的区别是?
  1. ArrayList基于动态数组实现的非线程安全的集合;LinkedList基于链表实现的非线程安全的集合;
  2. 对于随机index访问的get和set方法,一般ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标直接找到元素;LinkedList要移动指针遍历每个元素直到找到为止。
  3. 新增和删除元素,一般LinkedList的速度要优于ArrayList。因为ArrayList在新增和删除元素时,可能扩容和复制数组;LinkedList实例化对象需要时间外,只需要修改指针即可。
  4. LinkedList集合不支持 高效的随机访问(RandomAccess);

在增删改查的过程中的对比:

  1. 增加元素时,LinkedList 表现更好,因为ArrayList 插入元素需要进行挪元素,而LinkedList 只需要修改地址值,而且头插和尾插速度快,所以LinkedList 表现更佳;
  2. 删除元素LinkedList要优于ArrayList ,因为找到待删除的元素后,ArrayList 需要挪元素,但是LinkedList 只需要修改地址值;
  3. 修改元素ArrayList 因为有随机访问能力,所有在给定位置进行修改表现更好,但是二者修改给定位置速度差不多,都要遍历;
  4. 查找元素,毋庸置疑ArrayList更好,具有随机访问的能力,时间复杂为O(1)
    问题5:创建线程都有哪些方式?

问题6:乐观锁和悲观锁?

2. SpringBoot

问题1: Spring中IoC容器的初始化过程

IOC容器的初始化分为三个过程实现:

  • 第一个过程是Resource资源定位。这个Resouce指的是BeanDefinition的资源定位。这个过程就是容器找数据的过程,就像水桶装水需要先找到水一样。
  • 第二个过程是BeanDefinition的载入过程。这个载入过程是把用户定义好的Bean表示成Ioc容器内部的数据结构,而这个容器内部的数据结构就是BeanDefition。
  • 第三个过程是向IOC容器注册这些BeanDefinition的过程,这个过程就是将前面的BeanDefition保存到HashMap中的过程。

问题2:不同对象的生命周期和Spring bean的生命周期?

我们知道对于普通的 Java 对象来说,它们的生命周期就是: ① 实例化 ② 该对象不再被使用时通过垃圾回收机制进行回收 而对于 Spring Bean 的生命周期来说: ① 实例化 Instantiation ② 属性赋值 Populate ③ 初始化 Initialization ④ 销毁 Destruction 实例化 -> 属性赋值 -> 初始化 -> 销毁

image.png

问题3:SpringBoot自动配置的原理

问题4:Spring IoC的作用?解决了什么问题?

3. SpringCloud

问题1:SpringCloud的优缺点

优点: 1.耦合度比较低。不会影响其他模块的开发。 2.减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发。 3.配置比较简单,基本用注解就能实现,不用使用过多的配置文件。 4.微服务跨平台的,可以用任何一种语言开发。 5.每个微服务可以有自己的独立的数据库也有用公共的数据库。 6.直接写后端的代码,不用关注前端怎么开发,直接写自己的后端代码即可,然后暴露接口,通过组件进行服务通信。 缺点: 1.部署比较麻烦,给运维工程师带来一定的麻烦。 2.针对数据的管理比麻烦,因为微服务可以每个微服务使用一个数据库。 3.系统集成测试比较麻烦 4.性能的监控比较麻烦。【最好开发一个大屏监控系统】

  • 总的来说优点大过于缺点,目前看来Spring Cloud是一套非常完善的分布式框架,目前很多企业开始用微服务、Spring Cloud的优势是显而易见的。因此对于想研究微服务架构的同学来说,学习Spring Cloud是一个不错的选择。

问题2:使用 Spring Boot 开发分布式微服务时,我们面临什么问题

  • (1)与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
  • (2)服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
  • (3)冗余-分布式系统中的冗余问题。
  • (4)负载平衡 —负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或磁盘驱动器的分布。
  • (5)性能-问题 由于各种运营开销导致的性能问题。

4. Spring MVC

问题1:如何开启Spring MVC的注解开发模式?

在开发过程中,大多时候都使用的注解,在项目中如何开启….

答案:

在applicationContext.xml中配置:

问题2:为了提高Spring MVC的效率,如何设置拦截时排除静态资源?

在使用Spring MVC时,我们会配置DispatcherServlet用于拦截所有Http请求,为了….

答案:

在applicationContext.xml中配置:

问题3:@Controller注解的作用?

  1. Spring IOC在初始化时会自动的将该类初始化,并被IOC容器管理起来
    2. Spring知道这是一个Spring MVC的控制器,这个类根本的作用就是: 帮助我们处理Http的请求,并且返回响应的

问题4:SpringMVC如何处理一个请求?

Java面试题 - 图2

问题5:Controller方法如何接收前端form表达传递的复合数据

两种方法:

使用数组; 使用list集合

注意:
在使用list集合时,其前必须使用@RequestParam注解,只有增加该注解后,Spring MVC才知道原来请求中包含的复合数据要被转化为list集合
Java面试题 - 图3

5. redis

问题1:生成订单30分钟未支付,则自动取消,该怎么实现?

推荐使用消息队列RabbitMQ

用redis如何实现呢?我们将订单超时时间戳与订单号分别设置为score和member,系统扫描第一个元素判断是否超时,具体如下图所示
Java面试题 - 图4
链接:https://juejin.cn/post/7068837416714371102?utm_source=gold_browser_extension#heading-4

问题2: redis的应用场景?

6. Mybatis

问题1:Mybatis在批量插入的时候能否返回插入的ID?