9.23万得一面凉经
下午两点面的万得,大概25分钟面完,面试官人很nice,没有给我什么压力。
首先让我做了自我介绍,然后开始问问题
1)介绍一下Java的集合
答:有Collection接口和Map接口,分别存放单个元素和键值对;Collection接口下面有List,Set和Queue接口,list集合存放的元素是有顺序的,Set集合存放的元素是唯一且无序的,Queue是按照顺序,先进先出,Map接口下面有HashMap,LinkedHashMap和HashTable三个实现类
2)介绍一下ArrayList和LinkedList的应用场景
答:ArrayList的底层是Object类型的数组,LinkedList在jdk1.8之前是双向循环链表,1.8开始取消循环变成双向链表。ArrayList可以通过下标获取元素,所以查询开销小,在第i位增加元素,所以把i位以后的元素都后移一位,所以增删开销大,
而LinkedList在增删时只要改变附近的节点指针指向就行,增删效率高,而查询是通过head节点向后遍历,效率低,开销大
3)怎么提高ArrayList的增删效率
答:在末尾添加元素时开销小,感觉答得不太好
4)说一下HashMap的存储机制
答:在jdk1.8之前的底层是数组+链表,1.8之后变成数组+链表+红黑树,添加元素时,计算出该元素地址对应的hashcode,放入数组中,若数组中同一个索引位置已经有元素了,就会变成链表,在链表中的元素个数大于等于8时,会调用树化方法,执行该方法时,会先判断数组容量是否大于等于64,不到64会先扩容,默认数组容量是16,扩容是两倍的扩,到了64才会接着执行树化方法,将链表变成红黑树。
5)说一下树化前后查询的时间复杂度
树化后的时间复杂度提升了,具体没答出来
6)说一下多线程
答:不太了解
7)说一下JVM
答:了解一点点,JVM内存区域主要分成三块,栈、堆和方法区,栈里面存放代码块和方法以及方法的形参中的局部变量,堆里面存放创建的对象,方法区里面有常量池还有一些类加载的信息,寄了
8)说一下JVM哪块区域最容易出问题
答:栈,调用很多个栈会出现内存溢出,其他的不太清楚,这块寄了
9)问http报文的内容
答:有请求头,session,session里面有个sessionid,答不出来了,寄
10)问tcp三次握手
答:第一次握手,客户端向服务端发送SYN标志的数据包,其中seq = x,
第二次握手,服务端向客户端发送ACK+SYN标志的数据包,其中seq = y ,ack = x + 1
第三次握手,客户端向服务端发送ACK标志的数据包,其中ack = y + 1
11)问Http和TCP的关系
答:http是网络层的协议,tcp是传输层的协议,http建立在tcp之上,口误了,http是应用层协议,寄
12)问数据库的事务的隔离级别
答:四种,读未提交,能读取其他事务修改后未提交的数据,读已提交,能读取其他事务修改后提交的数据,可重复读,开启事务后,每次读到的数据都一样,可串行化,每次读到的数据都是准确的
13)mySQL数据库的隔离级别
答:可重复读
14)了解SpringMVC吗
答:用于管理前端页面,里面有个过滤器,将字符编码转成UTF-8,有个@RequestMapping注解,有用xml和注解两种方式管理,这快答得很糟糕
15)了解MyBatis吗
答:里面封装了JDBC,用来管理持久层
16)Mybatis的特点或者说是优点
答:是半持久化,里面的sql语句要自己编写,寄,(面试官说消除了sql注入,我补充了用#{}和${}来存放输入的参数)
反问:
1)学习方面的建议
答:找份工作,实践出真知
2)工作强度
答:正常强度,没华子那么高
3)薪资待遇
答:和hr谈

