对于想从事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面试题