面试经历 | 京东Java开发 2021.10

面试岗位

Java开发工程师(校招)

笔试 (2021.1009)

算法题

  1. 说有一个数组 1,2,3,3,3,2,2,他的数字最高出现频率是 ,让你找到他的子串中,数字最高出现频率和他相等的最短子串。
    答:统计每个数出现次数、最早出现时间以及最晚出现时间。然后再遍历一遍即可。

  2. 说有 n 块积木,你需要把他们摞起来,摞起来的条件是上下两块相邻的积木质量差不能超过 x,同时你还有 k 块任意重量的积木。问你最少摞成多少堆?
    答:先排序,再把所有相邻两数差值存进优先队列,每次弹出最小的,如果 ≤x 直接忽略,反之尝试添加过渡积木。最后返回队列剩余大小 +1 即可。

一面

基础题

  1. 事务 ACID 是什么?
    答:原子性,一致性,隔离性和持久性

  2. 隔离性是什么?
    答:事务的隔离性是指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰

  3. 事务的隔离级别有哪些?
    答:①读未提交,有脏读;②读已提交,不可重复读;③可重复读,有幻读;④串行化。

  4. 不可重复读和幻读区别?
    答:不可重复读是两次读取时数据变化,主要是 updatedelete,可以用行锁解决;而幻读更多的是 insert 导致的,光用行锁是解决不了的。通常采用 MVCC 等方法来解决。

  5. 聚簇索引和非聚簇索引有什么区别?
    答:聚簇索引将索引和数据同时保存在叶子节点上,这样每次搜索到对应节点,就可以直接拿到相应数据;非聚簇索引则是数据不直接存在节点上,而是仅主键值,查到该节点后,还需要去主键查询一次。

  6. 死锁的四个条件
    答:① 互斥条件; ② 请求与保持; ③不剥夺; ④ 循环等待条件

  7. 银行家算法?
    答:试探分配,如果判断空闲资源足以满足某个进程所有需求,那就执行该进程,否则取消该次分配。

  8. ArrayListLinkedList 区别?
    答:前者是动态数组,后者基于双向链表。

  9. ArrayListLinkedList 二者哪个更占空间?
    答:通常情况下后者更占空间,因为链表需要记录前后节点指针,但是当 ArrayList 恰好扩容时,由于需要扩容到 倍,因此可能更占空间。

  10. 线程池了解吗?有哪些主要参数?都大概起什么作用?
    答:① 核心线程数;② 任务队列; ③ 最大线程数; ④存活时间;⑤ 拒绝策略
    首先启动时开①个线程,然后任务放到②中等待执行,②满后开启至③个线程,如果有闲置非核心线程,④时间后销毁,如果②又满了,且已经开到③个线程,则执行⑤。

  11. JVM 结构描述一下,堆里面存什么
    答:有共用的堆和方法区,然后有很多线程,线程中包含程序计数器 ,虚拟机栈和本地方法栈。堆里面存对象实例和数组。

  12. CMSG1 区别?
    答:① 前者面向老年代,后者面向老年代和新生代;② G1 停顿时间可预测;③ 标记-清除和标记-整理; ④ 垃圾回收过程不同

  13. AOPIOC 是啥?
    答: 面向切面编程,把一些和核心功能无关的又必不可少重复性高的工作,做成函数,放到核心功能前后,相当于把原有的功能做了一个包装。
    原先我们在某个类中需要另一个类的时候,需要手动 new 一个新对象,而控制反转则是通过 BeanbyTypebyName 之类的方式,将类之间的依赖关系交给 Spring 来完成,由他来创造新的对象,并赋予对象之间相互关系。

算法题

没有算法题

二面

问的全都是学习和项目相关的:

  1. 英语水平?

  2. 本科和研究生期间哪科成绩最好,哪科成绩最差?

  3. 什么是对抗攻击?你毕设内容是什么?

  4. 项目里为什么引入了 Docker,好处是啥?

感受

总体而言比较轻松,面试官都非常随和,问的都不难,笔试也很容易。本来觉得是不是招聘末期刷一下 KPI ,结果头两天来了 offer call。强哥这人行,能处。

你可能感兴趣的:(面试经历 | 京东Java开发 2021.10)