最新java面试基础总结。如果有用欢迎点赞加评论。
- 重写和重载的区别
方法的重载和重写都是实现多态的方式。重载实现的是编译时的多态性,重写实现的是运行时的多态性。
重载发生在一个类中,同名的方法如果有不同的参数列表则视为重载;
重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。 - gc机制
gc:即垃圾收集, 是指 JVM 用于释放那些不再使用的对象所占用的内存。在系统运行过程中,会产生一些无用的对象,这些对象占据着一定的内存,如果不对这些对象清理回收无用对象的内存,可能会导致内存的耗尽,所以垃圾回收机制回收的是内存。同时gc回收的是堆区和方法区的内存。当要进行垃圾回收时候,不管何种GC算法,除了垃圾回收的线程之外其他任何线程都将停止运行。垃圾回收机制有很多种,包括:分代复制垃圾回收、标记垃圾回收、增量垃圾回收等方式。 - SpringMVC如何实现后台校验(校验前台传过来的值是否合法)
引入hibernate 校验框架的jar包。
在实体类中增加要校验属性的注解。
在控制层的处理器方法中增加模型参数的注解和BindingResult参数。 - @RequestBody注解的作用是什么
一般情况下常用其处理application/json类型。通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,也可以将其分别绑定到对应的字符串上。 - Spring中如何全局捕获异常
①: @ControllerAdvice,@ExceptionHander()
创建一个全局异常类,类上添加@ControllerAdvice和@ResponseBody返回json参数。也可以单独使用@RestControllerAdvice。且spring会扫描到此注解,所以无需配置注入bean。在方法上添加@ExceptionHander(value = “需拦截异常的class”),可以单独拦截某一个异常,也可以全拦截Excepiton。
②:在父类的baseController方法上加上@ExceptionHander()此方法与方法①类似,区别在于@ExcptionHander所在的类不一样。这个是在一个基类controller方法添加。缺点在于每个controller必需继承基类baseController。 - Spring mvc中如何注入properties文件的参数
通过context:property-placeholde实现配置文件加载。
通过util:properties实现配置文件加载。
直接在Java类中通过注解实现配置文件加载。 - mybatis中 # { }和 $ { } 的区别是什么?
①#{ }是预编译处理, $ { }是字符串替换。
②mybatis在处理#{ }时,会将sql中的#{ }替换为?号,调用PreparedStatement的set方法来赋值;mybatis在处理$ { }时,就是把$ { }替换成变量的值。
③使用#{ }可以有效的防止SQL注入,提高系统安全性。 - Mybatis动态sql有什么用?有哪些动态sql?
Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。
Mybatis 提供了 9 种动态 sql 标签:trim 、 where 、set 、 foreach 、 if |、choose、 when 、 otherwise 、 bind。 - 什么是跨域问题?SpringBoot中如何解决跨域问题?
跨域是指 不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。
通过实现WebMvcConfigurer接口,然后重写addCorsMappings方法解决跨域问题。一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。 - 构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不能被重写,但可以被重载。