现场面:
一面(架构组资深架构工程师):
介绍了业务情况,学的技术方向
二面(架构组资深开发工程师):
1、英文 自我介绍 2、相关设计模式类图 3、sql查询 4、git底层原理(要从git的工作区,暂存区,还有当前分支说起指针指向情况) 5、沟通能力考查,如何处理很多任务。。。
三面(数据组资深开发工程师):1、hashmap底层实现原理 2、现场给个算法实现,一个数组A = [1,9,3,8, 4, 7, 0, 6],如何获取两两相加等于10的那些组合?要求性能最好。 3、数据库锁(表锁,行锁,共享锁,排它锁) 4、MySQL死锁如何处理? 四面(成都boss面): 1、threadlocal底层原理?如果一个类有static修饰会有影响吗? 2、了解并发库里哪些集合?说了concurrenthashmap,阻塞队列。 3、什么是阻塞?(阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种: (一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。 (二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。 (三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。) 4、sleep() 和 wait() 区别?哪个是持有CPU?(wait是Object类的方法,sleep和yield是Thread类的静态方法。sleep和yield方法是用来让线程让出CPU时间,把CPU交给线程调度器,使得其他线程能获得CPU时间。sleep()睡眠时,保持对象锁,仍然占有该锁;而wait()睡眠时,释放对象锁。等等) 5、有没有了解spring boot?(使用spring boot都是化繁为简) zookeeper? hashmap线程安全吗,会有什么问题。怎么实现一个线程安全的map,不安全,jdk1.8以前因为头插法可能导致循环链表,jdk1.8之后虽然没有循环链表了但是仍然会导致修改丢失等问题。
怎么实现一个不可重入的锁
在reentranklock里面获取锁state会+1,,并判断是否是当前线程拿到的锁,那么直接把这个判断去了就行,如果state>0,就不能再获取锁。
mybatis的缓存实现,如果数据库进行修改了缓存怎么办
五面(HR面):介绍了薪资福利,谈了一下工资,也介绍了各个面试官大佬。
以上就是我的面试经历,部分问题后面简单的写了一些我当时的回答,可能不全面,望大家指正,共同进步。因为我在外地,所以一开始安排的电话面试,后来去现场面试,现场面试问的东西没有电话里那么细了,一方面我也才去年6月毕业的,工作还没有满一年,所以面试官没有怎么过多为难我,
全部评论
(1) 回帖