两年经验京东社招面试Java岗经历

1、手撕代码。牛客题霸上的原题,可以去看看:NC28 最小覆盖子串

2、运行时数据区域(内存模型)

1)程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。是线程私有”的内存。

2Java虚拟机栈:与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧 ,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

3)本地方法栈:本地方法栈(Native Method Stack)与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。

4Java堆:对于大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

5)方法区(1.8叫元数据):方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。


3、CAS操作ABA问题

如果在这段期间它的值曾经被改成了B,后来又被改回为A,那CAS操作就会误认为它从来没有被改变过。Java并发包为了解决这个问题,提供了一个带有标记的原子引用类“AtomicStampedReference”,它可以通过控制变量值的版本来保证CAS的正确性。


4、Boolean占几个字节?

未精确定义字节。Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。


5、为什么选择B+树作为索引结构?

1Hash索引:Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。所以,哈希索引只适用于等值查询的场景。而B+ 树是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描

2)二叉查找树:解决了排序的基本问题,但是由于无法保证平衡,可能退化为链表。

3)平衡二叉树:通过旋转解决了平衡的问题,但是旋转操作效率太低。

4)红黑树:通过舍弃严格的平衡和引入红黑节点,解决了 AVL旋转效率过低的问题,但是在磁盘等场景下,树仍然太高,IO次数太多。

5B+树:在B树的基础上,将非叶节点改造为不存储数据纯索引节点,进一步降低了树的高度;此外将叶节点使用指针连接成链表,范围查询更加高效。

#京东##社招##Java工程师##面经#
全部评论
20个月全职工作+5个月实习能算2年经验不
点赞 回复 分享
发布于 2020-11-26 11:56

相关推荐

AI 面的提问逻辑其实很简单 ——精准锁定你简历和自我介绍里的关键词,然后顺着技术点 “追根究底”,全程没有废话,比真人面试官更 “较真”,也更擅长抓知识盲区。首先,自我介绍里提到的技术栈,一定会被逐个拆解提问。比如你说 “熟练掌握 Java 后端开发”,AI 会先从基础八股开始:“HashMap 的底层实现?JDK1.8 做了哪些优化?红黑树的插入条件是什么?”;你说 “用 Redis 做过缓存优化”,追问立刻就来:“缓存穿透、击穿、雪崩的区别和解决方案?布隆过滤器的原理和优缺点?Redis 分布式锁如何避免死锁?” 这些问题不会跳着问,而是层层递进,直到你答不上来为止。其次,项目经验是 AI 面的重点 “拷打” 对象,细节问到你怀疑人生。比如你写 “参与 Spring Boot 项目开发,负责用户模块”,AI 会问:“用户模块的表结构设计?为什么用这个字段类型?用户登录的鉴权流程是什么?有没有考虑过 XSS 攻击?”;你提 “做过接口性能优化”,它会追着要数据:“优化前的响应时间是多少?用了什么工具做压测?优化后提升了多少?具体改了哪些代码?” 模糊的表述在这里完全行不通,必须有实打实的细节支撑。再者,场景化问题占比极高,主打一个 “考察实战能力”。这些问题不是死记硬背就能答好的,需要结合开发经验梳理思路。比如:“接口出现超时问题,你的排查步骤是什么?”“MySQL 慢查询如何优化?从索引、SQL 语句、配置三个方面说明。”“高并发场景下,如何保证接口幂等性?列举三种以上方案。”“分布式事务的几种实现方式?各自的优缺点和适用场景?”还有一个很容易被忽略的点 ——AI 面会问基础编程和算法题。部分平台会直接嵌入代码编辑器,要求你现场写代码,比如 “用 Java 实现一个简单的线程池”“写一个快速排序算法,要求处理重复元素”“用 Python 实现 LRU 缓存”,难度不算高,但很考验代码规范和临场发挥能力。最后,还有一些 “软性问题”,用来考察你的学习能力和职业规划。比如 “你最近在学习什么新技术?为什么选择这个方向?”“你觉得自己最大的技术短板是什么?打算如何弥补?”“如果入职后,遇到不会的技术问题,你会怎么解决?” 这些问题虽然不涉及硬核技术,但回答得好能加分不少。总的来说,AI 面的问题没有 “偏题怪题”,核心就是 “你写了什么,它就问什么”。准备的关键就是把简历里的每一个技术点、每一个项目细节都吃透,梳理清楚前因后果,确保问到任何相关问题都能条理清晰地回答 —— 毕竟 AI 不会因为你的紧张而手下留情,只会一步步挖到你的知识边界。
查看14道真题和解析
点赞 评论 收藏
分享
评论
2
22
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务