写于2017-10-18,博文从我的网站迁移到掘金。面试
自我介绍redis
项目中最自豪的部分
算法
也没什么太自豪的,就是在移动端开发的时候不存在cookie和session,而后用redis存了一下验证码感受还不错。编程
讲一讲ArrayList和LinkedList
ArrayList底层实现是数组,而且每次扩容扩容1.5倍,经常使用在查询较多的场景中。而LinkedList底层实现是链表经常使用在增删比较多的场景api
你说你对锁有了解,说一说你最熟悉的两个锁
当时太紧张就随口说了两个,乐观锁,悲观锁。乐观锁:每次执行事务的时候都是先执行在检查是否有其余是否在执行。而悲观锁如行锁,表锁,都是先锁定再执行事务。一般在并发量比较大的状况下用悲观锁,并发量小的状况下用乐观锁数组
说一下synchronied和ReentrantLock的区别
synchronied是JVM级别的,而ReentrantLock是api级别的,JVM会对synchronied作出相应的优化,锁消除:当JVM断定该资源不会被其余线程争夺的时候就会消除该锁,还有锁自旋,自适应锁(面试官速度很快,还没等我来得及解释ReentrantLock就跳下一个问题了,也许是这个超底层的回答比较满意吧)缓存
讲一下ThreadLoacal吧
ThreadLocal底层实现是一个Map结构的表,key是Thread.currentThread(),而Value则是咱们想要保存的对象安全
它(ThreadLocal)有什么用,能够举一个例子吗?
能够在每一个线程都拥有一个各自的副本,封装起来不被影响,做用的话,能够作一个相似卖票的系统,每一个售票厅(线程)只能出售100张票,不能多不能少服务器
用过exchange()吗
很差意思,只敲过一次例子,不太了解cookie
说一说JVM内存模型吧
我:栈区:每次方法的执行都会有一次栈帧的生成,而且其中有局部变量表。堆区:每次new出来的对象都保存在这儿。本地方法栈:经过C/C++调用系统接口的一些方法,方法区:类的信息 静态变量都在这儿,还有程序计数器
说一说AOP吧
AOP就是面向切面编程,并解释了下列术语,joinpoint,pointcut,aspect,advice,并说了一下实现的原理,若实现了接口就是JDK动态代理不然就用CGLIB
了解asm吗?
我反应了半天才想起这是一个jar包,不过从没了解过就说不知道了
String str1=new String("abc"),String str2=new String("abc"); str1==str2返回什么 当时太紧张,注意力一直放在abc字符串上了忽略了这是new了一个对象,一直回答true,反问我好久我仍是没反应过来,有点没发挥好
知道如何让线程同步吗?
wait,notify,notifyAll,await,signal,siganlAll,countdownLatch,cyclicbarrer
说一说countdownlatch,cyclicbarrer
均可以等几个线程就绪后再执行后续操做,区别就是cyclicbarrer是能够复用的,而countdownlatch不能够
举个例子?
能够假设如下场景,等9个跑步选手(线程)同时在起跑线就绪了再开始起跑
能够实习多久
你的职业规划
你有什么想问个人吗?