2020年整理的JAVA面试高频题目

基础
ConcurrentHashMap 和HashTable的区别

jdk1.8后,ConcurrentHashMap依旧使用分段锁的思想来实现线程安全,不同于jdk1.7及以前,jdk1.8将锁的粒度更加细分化,以每个数组索引为锁来进行实现。比如HashMap数组中长度有128,那么就会存在128个锁将每个索引锁住。这样相比于jdk1.7之前在效率上有了很大的改进。

  • ConcurrentHashMap 和 HashTable 都是线程安全的容器。
  • HashTable: 线程安全,效率和容器的大小成正比。容器数据量越大,效率越慢。
  • ConcurrentHashMap: 线程安全,效率相对于不如HashMap,但是和HashTable相比,效率得到很大的提升。
  • 综合考虑,如果使用线程安全容器,推荐使用ConcurrentHashMap
Produces在@RequestMapping中的使用方式和作用

produces可能不算一个注解,因为什么呢,它是注解@requestMapping注解里面的属性项,
它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码; 还有一个属性与其对应,就是consumes:
指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

  • produces第一种使用情景

返回json数据,下边的代码可以省略produces属性,因为我们已经使用了注解@responseBody就是返回值是json数据:

@Controller 
@RequestMapping(value="/students/{id}",method=RequestMethod.GET,produces="application/json") 
@ResponseBody 
public Pet getStudent(@PathVariable String id, Model model) { 
// implementation omitted
 } 
  • produces第二种使用情景

返回json数据的字符编码为utf-8.:

@Controller 
@RequestMapping(value = "/students/{id}", produces="MediaType.APPLICATION_JSON_VALUE"+";charset=utf-8") 
@ResponseBody 
public Pet getStudent(@PathVariable String id, Model model) { 
	// implementation omitted
 } 
Consumes的使用情景

处理request请求中Accept头中包含了"application/json"的请求,同时暗示了返回的内容类型为application/json;

@Controller   
@RequestMapping(value = "/students", method = RequestMethod.POST, consumes="application/json")   
public void addStudent(@RequestBody Student stu, Model model) {   
        // implementation omitted   
}   
Spring中的bean的作用域有哪些?
  • singleton:唯一bean实例,Spring中的bean默认都是单例的。
  • prototype:每次请求都会创建一个新的bean实例。
  • request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTPrequest内有效。
  • session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTPsession内有效。
  • global-session:全局session作用域,该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。
@Autowired 与@Resource的区别?
  • @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
  • @Autowired默认按类型装配(这个注解是属spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired()@Qualifier("baseDao")
privateBaseDao baseDao;
  • @Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
框架类
SpringMVC的执行流程?
1、客户端将请求提交给DispatcherServlet
2、DispatcherServlet查询一个或多个HanderMapping,找到处理请求的的Controller
3、DispatcherServlet将请求提交给Controller
4、Controller调用逻辑处理后,返回相应的ModelAndView
5、DispatcherServlet查询一个或多个ViewResolver视图解析器,找到ModelAndView指定的视图
6、视图解析器渲染后返回到客户端
SpringBoot好处
* 使用Java或Groovy开发基于Spring的应用程序非常容易。
* 减少了大量的开发时间并提高了生产力。避免了编写大量的样板代码,注释和XML配置。
* Spring Boot应用程序与其Spring生态系统集成非常容易。
* 遵循“自用默认配置”方法,以减少开发工作量。提供嵌入式HTTP服务器,如Tomcat,Jetty等,以开发和测试Web应用程序非常容易。
* 提供了许多插件来开发和测试Spring启动应用程序非常容易使用构建工具,如Maven和Gradle。提供了许多插件,以便与嵌入式和内存数据库工作非常容易。
  • 欢迎大家一起补充和完善,互相交流,共同进步!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱吃早餐的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值