当前位置 博文首页 > 京东Java面试被虐总结_苏采的博客:达达京东java面试

    京东Java面试被虐总结_苏采的博客:达达京东java面试

    作者:[db:作者] 时间:2021-08-10 16:10

    01面试注意点

    1、声音尽量大一点,说话清晰,有条理地慢慢地说(语速适中)

    2、一个问题, 知道多少就说多少,越多越好,尽量让自己引导面试官

    3、记住! 不知道就是不知道哦,不要乱说!

    02面试开始

    e8954b6a2d5939ec25f89da480b52ba4.png

    33分钟

    1. 自我介绍(项目经历, 技术背景)

    闲聊(项目)

    2. 技术问题

    (Spring + 数据结构)

    1) HashMap存储结构, put方法做哪些操作

    HashMap的存储方式是哈希表,那么什么是哈希表,其实就是数组+链表。HashMap初始数组长度为16。数组的每个元素都保存着链表头的地址(或者为null),在向HashMap中put(key,value)的时候,先使用hash算法计算哈希值,然后再和数组的长度减一做与运算。计算出此键值对应该保存到数组的那个位置上,如果此位置没有元素,意思就是链表的头结点为null,那么就新建一个node结点,把key,value以及next保存。

    2) 有很大的数组, 找出其中最大的K个数 (最小堆, 比较过程)

    堆实际上是一棵完全二叉树(数组实现)

    大根堆,每次把大的放在后面,得到升序序列

    3) AOP实现原理

    反射+动态***模式

    面试闲聊时间

    3. 技术分享

    Dubbo SpringBoot 服务注册 底层 -> 容器 考虑业务场景

    约周六下午两点

    03一面总结

    考察基本功

    对Java语言的了解程度 网络知识 OS 数据库 设计模式逻辑性强

    04二面

    9703381877b756bf0400100a00821bd2.png

    时间: 44分钟

    1. 自我介绍

    2. 简历上项目介绍和实习介绍

    3. Java里用过哪些集合框架

    4. 设计模式知道哪些? 能手写代码吗? (除了单例之外)

    5. Java内存模型

    6. GC算法

    Minor GC和Full GC区别

    程序计数器:线程私有。是一块较小的内存,是当前线程所执行的字节码的行号指示器。是Java虚拟机规范中唯一没有规定OOM(OutOfMemoryError)的区域。

    Java栈:线程私有。生命周期和线程相同。是Java方法执行的内存模型。执行每个方法都会创建一个栈帧,用于存储局部变量和操作数(对象引用)。局部变量所需要的内存空间大小在编译期间完成分配。所以栈帧的大小不会改变。存在两种异常情况:若线程请求深度大于栈的深度,抛StackOverflowError。若栈在动态扩展时无法请求足够内存,抛OOM。

    Java堆:所有线程共享。虚拟机启动时创建。存放对象实力和数组。所占内存最大。分为新生代(Young区),老年代(Old区)。新生代分Eden区,Servior区。Servior区又分为From space区和To Space区。Eden区和Servior区的内存比为8:1。 当扩展内存大于可用内存,抛OOM。

    方法区:所有线程共享。用于存储已被虚拟机加载的类信息、常量、静态变量等数据。又称为非堆(Non – Heap)。方法区又称“永久代”。GC很少在这个区域进行,但不代表不会回收。这个区域回收目标主要是针对常量池的回收和对类型的卸载。当内存申请大于实际可用内存,抛OOM。

    本地方法栈:线程私有。与Java栈类似,但是不是为Java方法(字节码)服务,而是为本地非Java方法服务。也会抛StackOverflowError和OOM。

    7. 怎样判断一个对象的存活周期长短

    分代

    8. SpringMVC工作流程

    2343586ed9e0c5e0c5623f6cbc9ae381.png

    1、前端控制器DispatcherServlet(不需要程序员开发)

    作用接收请求,响应结果,相当于转发器,***处理器。

    有了DispatcherServlet减少了其它组件之间的耦合度。

    2、处理器映射器HandlerMapping(不需要程序员开发)

    作用:根据请求的url查找Handler

    3、处理器适配器HandlerAdapter

    作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

    4、处理器Handler(需要程序员开发, 类似代码中写的Controller)

    注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

    返回ModelAndView

    5、视图解析器View resolver(不需要程序员开发)

    作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

    返回View

    6、视图View(需要程序员开发, jsp)

    View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)

    填充模型数据

    9. Spring AOP 实现原理, 大致讲一下, 反射里面具体的类是什么

    Spring Bean加载流程

    在Spring出现之前,是通过new 对象来实例化bean的

    SpringIOC容器的本质它就是一个map集合

    1. 获取配置文件资源

    2. 对获取的xml资源进行一定的处理检验

    3. 处理包装资源

    4. 解析处理包装过后的资源

    5. 加载提取bean并注册(添加到beanDefinitionMap中)

    Spring中xml配置Bean和注解配置区别, 顺序

    Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系

    就是根据注解生成beanfactory的匹配规则

    注解@autowired,将被注解的对象自动装配到当前类中,有点类似于setter

    10. 数据结构: 讲思路 二叉树后序遍历实现(递归)

    后序遍历按照“左孩子-右孩子-根结点”的顺序进行访问。

    void PostOrder(TreeNode *root) {if(root == NULL) { return;}PostOrder(root->left);PostOrder(root->right); cout << root->val;}

    11. 你有什么要问我的呢?

    .....

    05三面

    2d66d4181c9d86a0ff1d06cc9a39cd10.png

    时长>1小时

    聊项目, 聊得很细吧, 大概有20多分钟

    中间问了一个问题:

    秒杀系统的实现, 讲思路

    幸好之前看过一篇秒杀系统文章,bulabula........

    三个算法题, 其实还是比较简单的

    大概10多分钟

    最后, 随便问了几个问题吧

    1. 看过哪些源码

    2. 熟悉哪个JDK版本, 版本之间的差异(JDK8)

    Lambda表达式

    接口的默认方法和静态方法

    匿名内部类访问外部变量(final)

    3. 线程池

    4. 数据库方面, 比如你是否会写SQL, 还有的话,

    一些性能优化相关的吧, 当然肯定有索引了

    5. 你有什么要问我的呢

    大致流程都是上周面的, 最后结果是挂了, 当然还是很有收获的.

    可能自己在分布式和缓存, 或者消息队列上不是很熟悉,

    而且项目也不是很复杂.

    当然, 基础还是一定要打好的!

    (二面的面试官说我基础不错, 其它是他问的问题, 我都知道, 哈哈! 所以, 面试还是需要运气的!)

    06心得感受

    180feeb376725d7e51e91972d113e439.png

    继续好好学习吧,天天实习,天天进步。机会是留给有准备的人的!

    最近, 又要准备面试, 又要看书学习,在百家号发发牢骚, 真心累啊!

    而且在西二旗线附近上班, 不管什么时候, 地铁里人不是一般的多, 好挤啊!记得又一次我心爱的本本都挤坏了,回去哭了老半天

    希望早点能够在家乡找到不错的工作机会, 然后回学校好好休息下, 真正地去体验生活和学习的美好

    所以呢, 现在必须拿出行动啊! 加油!

    cs