面经小结(随机题版)

1、使用Mybatis的mapper接口调用时有哪些要求?

1)Mapper 接口方法名和 mapper.xml 中定义的每个 sql 的 id 相同 >

2)Mapper 接口方法的输入参数类型和mapper.xml 中定义的每个 sql 的 parameterType 的 类型相同

3)Mapper 接口方法的输出参数类型和mapper.xml 中定义的每个 sql 的 resultType 的类型 相同

4)Mapper.xml 文件中的 namespace即是 mapper 接口的类路径。

2、Mybatis是什么?有什么优势?

(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement、等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。

(2)MyBatis可以使用XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。

(3)通过xml文件或注解的方式将要执行的各种statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis 框架执行sql并将结果映射为java对象并返回。(从执行sql 到返回result 的过程)。

Mybaits的优点

(1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在XML 里,解除sql 与程序代码的耦合,便于统一管理;提供XML 标签,支持编写动态SQL语句,并可重用。

(2)与JDBC相比,减少了50%以上的代码量,消除了JDBC 大量冗余的代码,不需要手动开关连接;

(3)很好的与各种数据库兼容(因为MyBatis 使用JDBC 来连接数据库,所以只要JDBC 支持的数据库MyBatis 都支持)。

(4)能够与Spring 很好的集成;

(5)提供映射标签,支持对象与数据库的ORM 字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

3、为什么说HashMap是线程不安全的?

在接近临界点时,若此时两个或者多个线程进行put操作,都会进行resize(扩容)和reHash(为key重新计算所在位置),而reHash在并发的情况下可能会形成链表环。即在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。

4、为什么在并发执行put操作会引起死循环

因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。值得注意的是,JDK1.7的情况下,并发扩容时容易形成链表环,此情况在1.8时就好太多太多了,因为在1.8中当链表长度大于阈值(默认长度为8)时,链表会被改成树形(红黑树)结构。

5、Java虚拟机的内存模型?

6、简单说说Java中的异常处理机制的简单原理和应用 

原理是:java对异常默认的处理方式,是将问题抛出给上一级,抛出之前,java会根据错误产生的异常类,创建出该了类的对象,底层通过throw关键字将异常抛出给上一级,不断向上抛出,直到抛给了JVM虚拟机,虚拟机拿到问题之后,就会键错误的原因和所在的位置,打印在控制台上。

1.问题可以自己处理掉的

                try/catch处理方式:自己将问题处理掉不会影响好后续代码的执行。

2.问题自己处理不掉得

               thows抛出处理方式:如果发现问题无法自己完美解决,就可以通过throw关键字,将异常对象抛出给调用者,但如果使用throw抛出异常对象,则方法上必须进行throws得声明,告知调用者此方法存在异常,细节:如果抛出的异常对象是RuntimeException,则方法上面无需thorws声明。

7、sleep和wait有什么区别?

sleep 方法和 wait 方法都是用来将线程进入休眠状态的,并且 sleep 和 wait 方法都可以响应 interrupt 中断,也就是线程在休眠的过程中,如果收到中断信号,都可以进行响应并中断,且都可以抛出 InterruptedException 异常。

1)sleep是线程类(Thread)的方法;wait是Object类的方法

2)wait 方法必须配合 synchronized 一起使用,不然在运行时就会抛出 IllegalMonitorStateException 的异常,而 sleep 可以单独使用,无需配合 synchronized 一起使用。

3)sleep是使线程休眠,不会释放对象锁;wait是使线程等待,释放锁
sleep让出的是cpu,如果此时代码是加锁的,那么即使让出了CPU,其他线程也无法运行,因为没有得到锁;wait是让自己暂时等待,放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

4)调用 sleep 方法线程会进入 TIMED_WAITING 有时限等待状态,而调用无参数的 wait 方法,线程会进入 WAITING 无时限等待状态。

8、讲一讲SpringBoot自动装配的原理?

(2条消息) Spring Boot的自动装配原理_springboot自动装配原理_YING—country的博客-CSDN博客

9、讲一讲SpringBoot的启动流程(有难度)

SpringBoot启动原理解析_哔哩哔哩_bilibili

10、常用的负载均衡算法?

轮询法

随机法

源地址哈希法

加权轮询法

加权随机法

最小连接数法

11、如何决定使用HashMap还是TreeMap?

1、HashMap是通过hash值进行快速查找的;HashMap中的元素是没有顺序的;TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用TreeMap。

2、HashMap和TreeMap都是线程不安全的;

3、HashMap继承AbstractMap类;覆盖了hashcode() 和equals() 方法,以确保两个相等的映射返回相同的哈希值;TreeMap继承SortedMap类;他保持键的有序顺序;

4、HashMap:基于hash表实现的;使用HashMap要求添加的键类明确定义了hashcode()和equals() (可以重写该方法);为了优化HashMap的空间使用,可以调优初始容量和负载因子;TreeMap:基于红黑树实现的;TreeMap就没有调优选项,因为红黑树总是处于平衡的状态;

5、HashMap:适用于Map插入,删除,定位元素;TreeMap:适用于按自然顺序或自定义顺序遍历键(key)

12、session和cookie的区别?

1)cookie数据存放在客户端的浏览器上,session数据 放在服务器上。

2)cookie比session更不安全,别人可以分析存放在本地的cookie并进行cookie欺骗。(可考虑对cookie加密)

3)session会在一定时间内保存在服务器上。当访问增多时,会比较占用服务器的内容,考虑到减轻服务器负担,可以考虑使用cookie

4)单个cookie保存的数据不能超过4K,浏览器都限制一个站点最多保存20个cookie。session没有这种限制。

13、SpringBoot常用注解

(2条消息) Spring Boot常用注解(绝对经典)_springboot常用注解_哪 吒的博客-CSDN博客

14、final关键字

(2条消息) 关键字final的含义及用法_final关键字_爱编程的小疯子的博客-CSDN博客

15、B树和B+树的区别?

  1. b+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”;
  2. b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定(并不慢);
  3. 对于范围查找来说,b+树只需遍历叶子节点链表即可,b树却需要重复地中序遍历,如下两图:

16、数据库三大范式?

1)列不可分:第一范式主要是保证数据表中的每一个字段的值必须具有原子性,也就是数据表中的每个字段的值是不可再拆分的最小数据单元

2)要有主键:第二范式要求在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的,而且所有的非主键字段,都必须完全依赖主键,不能只依赖主键的一部分。

3)不可存在传递依赖:第三范式建立在已经满足第二范式的基础上,数据表中的每一个非主键字段都和主键字段直接相关,也就是说数据表中的所有非主键字段不能依赖于其他非主键字段,这个规则的意思是所有非主属性之间不能有依赖关系,它们是互相独立的

17、什么是反范式设计(第三范式)?

1)为了提高查询效率。

2)保存历史快照信息。

18、HashMap和HashTable的区别?

 相同点:

1、HashMap和Hashtable都是java.util包下的类
2、HashMap和Hashtable都实现了Map接口,存储方式都是key-value形式
3、HashMap和Hashtable同时也都实现了Serializable和Cloneable接口
4、HashMap和Hashtable的负载因子都是0.75

不同点:

1)HashMap是非线程安全的,Hashtable是线程安全的

2) HashMap允许null作为键或值,Hashtable不允许,运行时会报NullPointerException

3)HashMap添加元素使用的是自定义hash算法,Hashtable使用的是key的hashCode

4)HsahMap在数组+链表的结构中引入了红黑树,Hashtable没有

5) HashMap初始容量为16,Hashtable初始容量为11

6)HsahMap扩容是当前容量翻倍,Hashtable是当前容量翻倍+1

7) HsahMap只支持Iterator遍历,Hashtable支持Iterator和Enumeration

8.)HsahMap与Hashtable的部分方法不同,比如Hashtable有contains方法

(3条消息) HashMap和Hashtable的区别_Fluoxetine_Zero的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

开心懒羊羊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值