基本功数据库
1,HTTP 请求的 GET 与 POST 方式的区别:Post的数据大多都在body里面,post比get多一次header请求数组
2,equals 与 == 的区别:equals是逻辑等,==是对象地址安全
线程:数据结构
1,Arraylist 与 LinkedList 区别:arraylist底层数组(读取效率高),linked底层链表(更新效率高)并发
2,ArrayList 与 Vector 区别:vetctor线程安全,synchronizejvm
3,HashMap 和 Hashtable 的区别:hashtable线程安全(synchronize),key value皆不能为空post
四、HashMap 和 ConcurrentHashMap 的区别:ConcurrentHashMap线程安全(1.8为synchronize,1.7及以前为segment AQS)
五、HashMap 的工做原理及代码实现:数组+链表(1.8新增红黑树),扩容为当前容量一倍(arraylist为当前的一半)
六、ConcurrentHashMap 的工做原理及代码实现:同hashmap,1.8为synchronize,1.7及以前为segment AQSspa
线程
一、建立线程的方式及实现:Thread,Runnable,Callable(FutureTask)
二、sleep() 、join()、yield()有什么区别:sleep出让CPU,不释放锁|wait出让cpu,释放锁|yield出让cpu,不释放锁|join,让当前线程等待调用join的线程
三、说说 CountDownLatch 原理:AQS中,state为count
四、说说 CyclicBarrier 原理:
五、说说 Semaphore 原理:
六、说说 Exchanger 原理
七、说说 CountDownLatch 与 CyclicBarrier 区别
八、ThreadLocal 原理分析:Thread有个map属性,key为ThreadLocal类的变量,value为范型值,每次get都是去查map
九、讲讲线程池的实现原理:poolSize < corePoolSize,新建线程|poolSize > corePoolSize,队列未满,放队列|poolSize > corePoolSize,队列已满,poolSize < maximumPoolSize,新增线程|poolSize > corePoolSize,队列已满,poolSize = maximumPoolSize,则拒绝|线程执行完任务后,不当即退出,而是检查队列还有没有任务,没有则会退出超出corePoolSize的线程
十、线程池的几种方式:newCachedThreadPool|newFixedThreadPool|newSingleThreadExecutor|newScheduleThreadPool|new ThreadPooledExecutor()
十一、线程的生命周期线程
锁机制
一、说说线程安全问题:对象
二、volatile 实现原理:内存屏障,禁止重排序
三、synchronize 实现原理:monitorenter,monitorexit(底层为对象头中记录了线程标识)
四、synchronized 与 lock 的区别:synchronized是jvm实现的,悲观锁,lock是jdk的AQS实现的,乐观锁
五、CAS 乐观锁:乐观去操做,失败则能够采用自旋重试(底层实现为MESI协议)
六、ABA 问题:N线程读取变量为A,M线程A-->B,而后又B-->A,N线程再读取的时候仍是A,认为变量没有变化,能够采用AtomicStampedReference来解决,思路是版本号
七、乐观锁的业务场景及实现方式:数据库采用版本号来解决记录的并发更新
JVM
jvm基础知识
一、JVM 由哪些部分组成?:类加载器,执行引擎,内存区,本地方法调用
二、Java 虚拟机是如何断定两个 Java 类是相同的?:类全路径名+类加载器的namespace
三、类加载器是如何加载 class 文件的?加载-->链接(验证-->准备-->解析)-->初始化-->使用-->卸载
四、类加载?:获取类的字节码-->类的静态数据结构转化为运行时数据区数据结构-->在堆区生成Class对象,访问入口
jvm内存管理
一、jvm内存划分:方法区(运行时常量池,加载的类信息,常量,静态变量,jit后的代码),堆区(新生代(eden,s1,s2),老年代),虚拟机栈(局部变量表+操做数栈+动态连接+返回地址),本地方法栈,程序计数器
二、对象内存分配规则:优先在eden分配,无足够空间出发minor GC|大对象直接进入老年代|年轻代长期存活对象进入老年代|空间分配担保
三、Java内存模型:变量都存在主内存,每一个线程有本身的工做内存|工做内存包含主内存变量副分,线程操做的是工做内存|线程间变量值传递经过主内存进行
四、线程通讯:共享内存变量|wait,notify
五、