初始化以及如何注册到IOC容器中的详细过程说一下,涉及BeanDefinition、
这个问题不妨把一个请求过来在TCP层面上建立连接、操作系统如何处理连接、Web容器接收到连接对象后做了哪些事情、Spring如何对接收到的请求进行处理都说一下,当然最终还是落在Spring容器内部如何处理一个请求,
这个过程一定要说清楚,需要体现细节。在说前面的内容的时候,可以放心面试官不会打断你。
手写一个栈,实现push,pop方法,以及max(获取最大的元素)方法,要求时间复杂度为O(1)。
面也需要候选人对代码有驾驭能力(毕竟要手写代码)。面试官会给一定的时间,在这段时间里,面试官不会打扰你,并尽可能为你提供方便,比如,签字笔不好用,面试官会帮你更换。据我个人经验,凡是面对需要写代码的问题,都不要急着放弃,静下心来,仔细思考,都是可以写得不错的。如果没能写出来,面试官会问你实现思路,如果你的思路很优化,一样可以过了这道题,但是前提是:你的代码不能一行都不写。
对于数据结构的考察的话,我建议看一下jdk中对于List、Stack、Tree、Set
如,你可能会定义一个Node节点,里面有当前节点的key和value,还有对于下一个节点的引用。如果熟悉jdk对于各种数据结构的实现,这道题是很容易过的。
三是保存单例对象的私有变量一定要用volatile修饰,这个地方可以多说一些,
比如volatile防止指令重排序,保证内存可见性(JVM层面和CPU层面可以分
别说)。volatile这个地方能说的东西还是很多的,基本上可以与面试官再聊
在jdk1.8之后,HashMap除了数组+链表之外,引用了红黑树。那么好了,
获取hashcode后并不是对数组长度取余来确定的,而是高低位异或求与来得
之后说一下在HashMap中的实现,比如hashcode无符号右移16位后和原
面说的高低位异或“,进而是“求与”,和谁求与呢,和数组长度减1求
与。说到这里起码能够证明你是看过源码的,接下来说说你的思考,比如我们知道对于hashmap初始化容量决定了数组大小,一般我们对于数组这个初始
HashMap的效率,那又涉及到影响HashMap效率的主要因素,比如初始容
当已用数组达到容量与负载因子的乘积之后会进行一个rehash的过程,这个地方涉及到的如何rehash及各种算法如果有时间也是可以说的,没有时间不
这个过程,如果不是2^n,会导致较多的哈希碰撞(具体原因可以自己分析一下或者百度一下),这个会影响HashMap的效率。说完上面这些,既表明你看过源码,又表明你有自己的思考了,当然也可以进一步说说它是在什么条件
对于put操作,这才只是第一步,找到数组的位置,接下来要看这个位置也没有元素,如果没有,直接放进去就可以,如果有,要看怎么放进去,jdk1.8中对于HashMap的实现中,是基于Node(链表节点)和TreeNode(红黑树
那么,如果数组当前位置已经有了元素,就得知道这个元素是链表的节点还是红黑树的节点,以便进一步确认接下来要put的元素是以链表的方式插入,还是以红黑树的方式插入,这个地方在源码进入了一个类型的判断,如果是链表的节点,就以链表的方式把要put的节点插入到next为null的节点上,如果是红黑树的节点,就要以红黑树的方式插入一个节点。
(2)如何在红黑树中插入一个节点。对于这两个问题,首先,引入红黑树的好处是为了提高查询效率,要说出O(log2(n)),但是在提高查找效率的同时也在插入的时候更加耗时,那可以说一下为什么更加耗时,自然带出第二个问题,如何在红黑树中插入一个节点,比如当插入一个节点的时候我们会默认它是红色的
(这个地方可以结合红黑树特点说一下我们为什么默认它是红色的,从黑色高度以及相邻两节点不同为红色入手),插入后如果父节点是黑色的就不需要动了,但假如是红色的,就需要进行左旋和右旋操作,如果很了解,可以细说左
ConcurrentHashMap的理解,⽐如在什么地⽅会涉及到线程安全问题以及
这个主要是从它基于Spring的事件发布和监听机制开始说起就没什么问题。
继续考察Java基础,和对应⽤技术的掌握,比如过往项目中所有的一些框架,
加载链接初始化,链接又分为验证准备和解析,每一个阶段是做了什么要说清楚。Objecta=newObject();这行代码做了哪些事情,需要从类加载开始说起,这个相当于上一问题的延续,所以一定要清楚每一个环节做了哪些事情的,否则这个问题不可能说清楚。说完类加载的过程,再说一下开辟内存空间、初始化内存空间以及把内存地址
赋值给变量a,接下来可以进一步说一下JVM或者CPU层面对指令的优化,以及在某些时刻我们需要避免它做这样的优化,比如在单例中我们的实例需要用volatile修饰避免指令重排序(可以说一下在new一个对象的过程中如果指令重排序了会导致什么结果)。
从NIO开始说肯定是没错的,再说说Netty的实现⽅式,以及它除了IO之外还⼲了哪些事情。
什么,解决了什么问题,架构是什么样的,以及你在其中做了哪些⼯作。这个地方一定要准备充分,少要能扛得住面试官三连问。否则会被认你不太清楚。你们之前做的到底是什么,那你在业务能力方便可能是不太match的。
这个地方因人而异,但无论怎样,都不要什么都不问,至少你要表现一点对于岗位的兴趣吧。如问一下公司业务,团队构成,技术栈,以及你所应聘的这个岗位大概做哪些工作。
HR面试。这一轮可以说是斗智斗勇的一个环节,会考察到些软技能、个人成长、职业素质,也会问一下期望薪资。
小编分类整理了许多java进阶学习材料和BAT面试题,需要资料的请转发此文章后再私聊小编回复【java】就能领取2019年java进阶学习资料和BAT面试题以及《EffectiveJava》(第3版)电子版书籍。
- 本文固定链接: https://www.douyinkuaishou.cc/?id=15062
- 转载请注明: admin 于 抖音快手 发表
《本文》有 0 条评论