专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 java后端面试题部分参考

java后端面试题部分参考

更新时间:2020-06-15 11:30:57 来源:动力节点 浏览2007次

对于想从事java的朋友来说,都会遇到java面试题的问题,其中也包括了java后端面试题,动力节点java培训机构的小编为大家整理了java后端面试题部分参考,希望对大家能够有所帮助。

java后端面试题

1、ThreadLocal(线程变量副本)

Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。

采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。

ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本。

ThreadLocal在Spring中发挥着巨大的作用,在管理Request作用域中的Bean、事务管理、任务调度、AOP等模块都出现了它的身影。

Spring中绝大部分Bean都可以声明成Singleton作用域,采用ThreadLocal进行封装,因此有状态的Bean就能够以singleton的方式在多线程中正常工作了。

2、Java内存模型:

Java虚拟机规范中将Java运行时数据分为六种。

(1)程序计数器:是一个数据结构,用于保存当前正常执行的程序的内存地址。Java虚拟机的多线程就是通过线程轮流切换并分配处理器时间来实现的,为了线程切换后能恢复到正确的位置,每条线程都需要一个独立的程序计数器,互不影响,该区域为“线程私有”。

(2)Java虚拟机栈:线程私有的,与线程生命周期相同,用于存储局部变量表,操作栈,方法返回值。局部变量表放着基本数据类型,还有对象的引用。

(3)本地方法栈:跟虚拟机栈很像,不过它是为虚拟机使用到的Native方法服务。

(4)Java堆:所有线程共享的一块内存区域,对象实例几乎都在这分配内存。

(5)方法区:各个线程共享的区域,储存虚拟机加载的类信息,常量,静态变量,编译后的代码。

(6)运行时常量池:代表运行时每个class文件中的常量表。包括几种常量:编译时的数字常量、方法或者域的引用。

3、类加载器工作机制:

(1)装载:将Java二进制代码导入jvm中,生成Class文件。

(2)连接:a)校验:检查载入Class文件数据的正确性 b)准备:给类的静态变量分配存储空间 c)解析:将符号引用转成直接引用

(3)初始化:对类的静态变量,静态方法和静态代码块执行初始化工作。

双亲委派模型:类加载器收到类加载请求,首先将请求委派给父类加载器完成

用户自定义加载器->应用程序加载器->扩展类加载器->启动类加载器。

4、SpringMVC运行原理

(1)客户端请求提交到DispatcherServlet

(2)由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controller中。

(3)Controller调用业务逻辑处理后,返回ModelAndView

(4)DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

(5)视图负责将结果显示到客户端

5、HashMap与HashTable的区别

(1)HashMap是非线程安全的,HashTable是线程安全的。

(2)HashMap的键和值都允许有null值存在,而HashTable则不行。

(3)因为线程安全的问题,HashMap效率比HashTable的要高。

6、HashMap的实现机制:

(1)维护一个每个元素是一个链表的数组,而且链表中的每个节点是一个Entry[]键值对的数据结构。

(2)实现了数组+链表的特性,查找快,插入删除也快。

(3)对于每个key,他对应的数组索引下标是 int i = hash(key.hashcode)&(len-1);

(4)每个新加入的节点放在链表首,然后该新加入的节点指向原链表首

java后端面试题部分参考

以上就是动力节点java培训机构的小编针对“java后端面试题部分参考”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>