java开发工程师常见面试问题总结

本文总结了Java开发工程师面试中常见的问题,涵盖了LinkedList与ArrayList的选择、SQL调优策略、Java集合框架、SpringMVC工作原理及注解、Spring的IOC和AOP、Redis数据类型、Java基础及多线程、ORM框架、数据库索引等多个关键知识点,旨在帮助开发者全面复习和准备面试。
摘要由CSDN通过智能技术生成

目录

1:LinkedList不用ArrayList?

2:Sql调优?如果有一条SQL语句你怎么做优化

3:Java的集合有哪些

4:SpringMVC常用注解

5:SpringMVC的工作流程

6:Spring的IOC和AOP的理解

7:Redis的数据类

8:Java 中的基本数据类型

9:int 和 Integer 有什么区别

10:接口和抽象类有什么区别?

11:如何理解线程

12:ORM框架是什么?

13:SpringMVC是什么?

14:Spring MVC的优点?

15:什么是Mybatis框架

16:SpringBoot核心配置注解和常用的注解

17:工厂模式:

18:Redis的缓存击穿缓存穿透和雪崩

19:反射的优点和缺点

20:mysql数据库索引

21:Java的特性

22:面向对象和面向过程

23:重写和重载的区别?

24:事务的四大特性

25:创建线程池的方式。

26:数据库三大范式

27:线程和进程的区别

28:线程的优缺点

29:死锁产生的条件

30:http和https有什么区别?

31:synchronized和lock的区别?

32:事务的隔离级别?

33:inodb和myisam区别

34:Mybatis和mybatisplus的区别?

35:Mybatis#和$符号的区别

36:Hashmap和hashtable的区别?

37:红黑树的特性?


1:LinkedList不用ArrayList?

ArrayList: 可以看作是能够自动增长容量的数组

ArrayList的toArray方法返回一个数组

ArrayList的asList方法返回一个列表

ArrayList底层的实现是Array, 数组扩容实现

ArrayList线程不安全

ArrayList必须是连续的

ArrayList只能在数组末尾添加数据

ArrayList查询快,增删慢

LinkedList可以看做为一个双向链表(内部每个元素都指向下一个元素)

LinkedList实现了Deque接口和List接口

LinkedList也是线程不安全

LinkedList可以不连续

LinkedList查询慢,增删快

LinkList可以很方便在链表头或者链表尾插入数据,或者在指定结点前后插入数据,add()方法默认在链表尾部插入数据

2:Sql调优?如果有一条SQL语句你怎么做优化

使用group by分组查询,默认分组后,还会排序,可能会降低速度

可以使用连接来替代子查询,因为使用join,mysql不需要在内存中创建临时

  1. 适当的价索引
  2. 不要去使用*号查询全表扫描
  3. 尽量少使用子查询和连接查询
  4. 尽量避免使用 != <> 和or这样会导致索引失效

3:Java的集合有哪些

List:List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。

set:Set是一个继承于Collection的接口,Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,关于API方面。Set的API和Collection完全一样。

Map:Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。

4:SpringMVC常用注解

@service

@Controller

注解一个类表示控制器,Spring MVC 会自动扫描标注了这个注解的类。

@RequestMapping

请求路径映射,可以标注类,也可以标注方法,可以指定请求类型(post、get、put、delete、patch...)默认不指定为全部接收。

@RequestParam

用于数据绑定,接收url中的参数(即 Content-Type : application/x-www-form-urlencoded类型的内容),并且前后端参数名称必须相同。

@RequestBody

用于数据绑定,接收body体中的参数,而不是url。所以请求一定是post(即不是 Content-Type : application/x-www-form-urlencoded 类型的内容)

@ResponseBody

放在方法上,表示此方法返回的数据放在body体中,而不是跳转页面。一般用于ajax请求,返回json数据。

@RestController

这个是@Controller和@ResponseBody的注解组合。

5:SpringMVC的工作流程

1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
4.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
5.执行处理器Handler(Controller,也叫页面控制器)。
6.Handler执行完成返回ModelAndView
7.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
11.DispatcherServlet响应用户

6:Spring的IOC和AOP的理解

AOP:一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。可用于权限认证、日志、事务处理。

IOC:就是控制反转,是指创建对象的控制权的转移,这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。DI依赖注入,和控制反转是同一个概念的不同角度的描述,即 应用程序在运行时依赖IoC容器来动态注入对象需要的外部资源。

Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。

7:Redis的数据类

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阑珊处-Blue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值