贝壳金服的面经

2020-05-22 01:26 来源:原创 网络编辑:admin 阅读 报错

  贝壳金服今朝的办公情况还可以,要人的欲望比拟剧烈,然则对基础的请求照样很高的。假设对java底层了解深入,对框架了解透辟,那基本没啥后果。长话短说,看看此次我面试的三个小时都问了哪些后果。有些后果能够曾经遗忘了,大年夜少数我都在纸上划了一下,大年夜体就是以下内容。-

  1,AtomicInteger的完成道理。

  CAS算法是由硬件直接支撑来保证原子性的,有三个操作数:内存位置V、旧的预期值A和新值B,当且仅当V契合预期值A时,CAS用新值B原子化地更新V的值,否则,它甚么都不做。

  Unsafe的compareAndSwapInt是个native方法,也就是平台相干的。它是基于CPU的CAS指令来完成的。

  2,CAS中ASA后果处理计划

  计划1 加版本号

  计划二用AtomicStampedReference处理ASA后果

  private static class Pair { final T reference; final int stamp; private Pair(T reference, int stamp) { this.reference=reference; this.stamp=stamp; } static Pair of(T reference, int stamp) { return new Pair(reference, stamp); } }

  这个类其实就是版本号的具体完成计划,经过Pair类外面的数据加版本号完美的处理ASA后果 3,CountDownLanch(倒计数锁存器)的应用和道理 class Driver2 { // … void main() throws InterruptedException { CountDownLatch doneSignal=new CountDownLatch(N); Executor e=…

  5,volatile关键字了解 多从可见性依次性和原子性三个角度仔细论述。对指令重排要有必然了解。

  6,幂等运算 幂等我的了解是屡次履行结果不合。

  7,甚么叫线程平安 假设你的代码地点的过程当中有多个线程在同时运转,而这些线程能够会同时运转这段代码。假设每次运转结果和单线程运转的结果是一样的,而且其他的变量的值也和预期的是一样的。

  8,数据库事务级别,隔离级别。这外面必然要记住要有场景性的了解,不能只知道概念 数据库得隔离级别是读未提交,读已提交,可重复读和串行化读

  查询全局的事务隔离级别

  SELECT @@global.tx_isolation;

  查询以后会话的事务级别

  SELECT @@session.tx_isolation; 脏读:脏读意味着我在这个事务中(A中),事务B固然没有提交,但它任何一条数据变更,我都可以看到! 不成重复读(Nonrepeatable Read):不成重复读意味着我们在统一个事务中履行完整相反的select语句时能够看到纷歧样的结果。不成重复读是当事务A开启后读数据,当它未提交的时分,事务B开启,并更改了数据,那么A再读数据得时分曾经不是之前的数据了。 可重复读:事务A开启后,读取了数据M,在事务A未提交的过程当中,事务B开启了,并更改了数据M结构为N,当事务A再读数据得时分掉掉落的照样数据M,只需事务A提交以后,才可以看到事务B更改了的数据N。 串行化读 (1)这是最高的隔离级别 (2)它经过强制事务排序,使之不能够相互抵触,从而处理幻读后果。简言之,它是在每个读的数据行上加上共享锁。 (3)在这个级别,能够招致少量的超时现象和锁竞争

关键词:

分享到:
至顶 反馈 至底