Java面试题记录(2)

发布于:2021-10-21 16:31:46

Java面试题记录(2)

面试题一:通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。
如何在华为云搭建图片的服务器
Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个select、insert、update、delete标签,都会被解析为一个MappedStatement对象。

Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象(如使用spring会注入到容器中),代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

面试题二:2. JVM中类加载的过程? 什么是双亲委派? 类加*饔心男?

在加载阶段,虚拟机需要完成以下三件事情:
1.通过一个类的全限定名来获取定义此类的二进制字节流(并没有指明要从一个Class文件中获取,可以从其他渠道,如:网络、动态生成、数据库等);
2.将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构;
3.在内存中(对于HotSpot虚拟机而言就是方法区)生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口;

双亲委派:
类加*魇盏嚼嗉釉厍肭螅约翰患釉兀蛏衔懈咐嗉釉兀咐嗉釉夭涣耍僮约杭釉, 就是避免Java核心API篡改。

类加*饔心男:
1.Bootstrap ClassLoader启动类 | 根加*鳎::它用来加载 Java 的核心类,是用原生代码来实现的,并不继承自 java.lang.ClassLoader(负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类)。由于引导类加*魃婕暗叫槟饣镜厥迪窒附冢⒄呶薹ㄖ苯踊袢〉狡舳嗉釉*鞯囊茫圆辉市碇苯油ü媒胁僮鳌

2.ExtClassLoader(扩展类加*):它负责加载JRE的扩展目录,lib/ext或者由java.ext.dirs系统属性指定的目录中的JAR包的类。由Java语言实现,开发者可以直接使用扩展类加*鳌

3.AppClassLoader:被称为系统(也称为应用)类加*鳎涸鹪贘VM启动时加载来自Java命令的-classpath选项、java.class.path系统属性,或者CLASSPATH换将变量所指定的JAR包和类路径。程序可以通过ClassLoader的静态方法getSystemClassLoader()来获取系统类加*鳌H绻挥刑乇鹬付ǎ蛴没ё远ㄒ宓睦嗉釉*鞫家源死嗉釉*髯魑讣釉*鳌S蒍ava语言实现,父类加*魑狤xtClassLoader。

相关推荐

最新更新

猜你喜欢