这个问题 最好可以多说一点,比如 对于IOC,不妨把Bean 如何加载、如何初始化以及如何注册到IOC容器中的详细过程说一下, 涉及BeanDefinition、BeanFactory也深入细节聊一下。
这个问题不妨把一个请求过来在TCP层面上建立连接、操作系统如何处理连接、Web容器接收到连接对象后做了哪些事情、Spring 如何对接收到的请求进行处理都说一下,当然最终还是落在Spring 容器内部如何处理一个请求,这个过程一定要说清楚,需要体现细节。在说前面的内容的时候,可以放心面试官不会打断你。
这是一个考察数据结构的问题,一方面需要候选⼈对数据结构有所了解,一方面也需要候选人对代码有驾驭能力(毕竟要手写代码)。面试官会给一定的时间,在这段时间里,面试官不会打扰你,并尽可能为你提供方便,比如,签字笔不好用,面试官会帮你更换。据我个人经验,凡是面对需要写代码的问题,都不要急着放弃,静下心来,仔细思考,都是可以写得不错的。如果没能写出来,面试官会问你实现思路,如果你的思路很优化,一样可以过了这道题,但是前提是:你的代码不能一行都不写。
对于数据结构的考察的话,我建议看一下jdk中对于List、Stack、Tree、Set的实现,比如,至少你要知道,如果让你实现一个单链表,你会如何实现;比如,你可能会定义一个Node节点,里面有当前节点的key和value,还有对于下一个节点的引用。如果熟悉jdk对于各种数据结构的实现,这道题是很容易过的。
这个基本上大多数公司都会考察的。要写一个基于懒汉式的双重检测的单例。单例有三个比较关键的点,一是私有构造方法,避免外部new出对象;二是保证唯一性;三是提供一个全局访问点。
另外,懒汉式双重检测的实现方式 有三点需要注意的地方,一是 全局访问点必须是静态的,外界使用可以通过类直接调用,二是在进入锁之后还需要校验,三是保存单例对象的私有变量一定要用volatile修饰,这个地方可以多说一些,比如volatile防止指令重排序,保证内存可见性(JVM层面和CPU层面可以分别说)。volatile 这个地方能说的东西还是很多的,基本上可以与面试官再聊二十分钟了。
对于 HashMap 其实一般高级岗位及以上不再会问这个东西了,一旦问了,肯定不是让你只说一下数组+链表的。对于它的实现,不同版本实现方式不一样。
在jdk1.8之后,HashMap除了数组+链表之外,引用了红黑树。那么好了,你需要说明 对于 引用了红黑树的 HashMap 如何put一个元素,以及链表是在何时转化为红黑树的。比如,首先需要知道这个元素落在哪一个数组里,获取hashcode后并不是对数组长度取余来确定的,而是高低位异或求与来得到的。这个地方首先得知道异或求与是做什么样的运算的。
之后说一下在HashMap中的实现,比如hashcode无符号右移16位后和原hashcode做异或运算,这相当于把hashcode的高16位拿过来和hashcode的低16位做异或运算,因为无符号右移后前面说的16位都补零,这就是前面说的 高低位异或“,进而是“求与”,和谁求与呢,和数组长度减1 求与。说到这里起码能够证明你是看过源码的,接下来说说你的思考,比如我们知道对于hashmap 初始化容量决定了数组大小,一般我们对于数组这个初始容量的设置是有规律的,它应该是 2^n 。这个初始容量的设置影响了HashMap的效率,那又涉及到影响HashMap效率的主要因素,比如初始容量和负载因子。
当已用数组达到容量与负载因子的乘积之后会进行一个rehash的过程,这个地方涉及到的如何rehash及各种算法如果有时间也是可以说的,没有时间不说也没有关系。回到刚才说的 2^n, 可以说说它为什么是2^n。
当我们说什么东西为什么是这样的时候,我们一般从两个⻆度考虑,一个是:这样做有什么好处,另一个是:不这样做有什么坏处。我们刚才说到“求与”这个过程,如果不是 2^n, 会导致较多的哈希碰撞(具体原因可以自己分析一下或者百度一下),这个会影响HashMap的效率。说完上面这些,既表明你看过源码,又表明你有自己的思考了,当然也可以进一步说说它是在什么条件下以及如何进行扩容的(如果时间允许,并且面试官也有耐心继续听下去)。
对于put操作,这才只是第一步,找到数组的位置,接下来 要看这个位置也没有元素,如果没有,直接放进去就可以,如果有,要看怎么放进去,jdk1.8中 对于HashMap的实现中,是基于Node(链表节点) 和TreeNode(红黑树节点) 的,当然它们继承了Entry。
那么,如果数组当前位置已经有了元素,就得知道这个元素是链表的节点还是红黑树的节点,以便进一步确认接下来要put的元素是以链表的方式插入,还是以红黑树的方式插入,这个地方在源码中进入了一个类型的判断,如果是链表的节点,就以链表的方式把要put的节点插入到next为null的节点上,如果是红黑树的节点,就要以红黑树的方式插入一个节点。
(2)如何在红黑树中插入一个节点。对于这两个问题,首先,引入红黑树的好处是为了
提高查询效率,要说出O(log2(n)),但是在提高查找效率的同时 也在插入的时候更加耗时,那可以说一下为什么更加耗时,自然带出第二个问题,如何在红黑树中插入一个节点,比如 当插入一个节点的时候我们会默认它是红色的(这个地方可以结合红黑树特点说一下 我们为什么默认它是红色的,从黑色高度以及相邻两节点不同为红色入手),插入后如果父节点是黑色的 就不需要动了,但假如是红色的,就需要进行左旋和右旋操作,如果很了解,可以细说左旋右旋如何实现,如果不是很了解,到此为止也ok。
说到这里,我们忽略了一个重要的点,就是链表转换为红黑树的条件,说出链表长度到8(相当于红黑树开始第四层) 以及 数组大小达到64就已经够了,也可以进一步说一下 链表是如何转换为红黑树的。说完也可以说一下 ConcurrentHashMap中也是一样的,然后接下来就引入对ConcurrentHashMap的理解,⽐如 在什么地⽅会涉及到线程安全问题 以及ConcurrentHashMap是如何解决的,说说CAS,说完CAS再说说AQS,自由发挥吧。
这个问题比较简单,强引入、弱引入、软引入、虚引入,说一下它们各自的特点和GC对它们的不同处理方式,再说一下常用的应用场景或者jdk的实现中对它们的使用,比如,ThreadLocal 的静态内部类ThreadLocalMap,它的Key是弱引用的,也可以说一下 在你的理解中 为什么它是弱引用的,假如不是会怎么样。
这个主要是从它基于Spring的事件发布和监听机制开始说起 就没什么问题。
加载 链接 初始化,链接又分为验证准备和解析,每一个阶段是做了什么要说清楚。Object a = new Object();这行代码做了哪些事情,需要从类加载开始说起,这个相当于上一问题的延续,所以一定要清楚每一个环节做了哪些事情的,否则这个问题不可能说清楚。
说完类加载的过程,再说一下开辟内存空间、初始化内存空间以及把内存地址赋值给变量a,接下来可以进一步说一下JVM或者CPU层面对指令的优化,以及在某些时刻我们需要避免它做这样的优化,比如在单例中我们的实例需要用volatile修饰避免指令重排序(可以说一下在new一个对象的过程中如果指令重排序了会导致什么结果)。
Kafka分区,如何分区 等等(因为我过往项⽬经验中写了kafka,所以才会被问及,如果写了其他消息队列,也可能会被问及)
从NIO开始说 肯定是没错的,再说说Netty的实现⽅式,以及它除了IO之外还⼲了哪些事情。
这就需要在面试之前把自己的做过的项目好好总结一下,它们主要做的业务是什么,解决了什么问题,架构是什么样的,以及你在其中做了哪些⼯作。这个地方一定要准备充分,少要能扛得住面试官三连问。否则会被认 你不太清楚你们之前做的到底是什么,那你在业务能力方便可能是不太match的。
这个地方因人而异,但无论怎样,都不要什么都不问,至少你要表现一点对于岗位的兴趣吧。如问一下公司业务,团队构成,技术栈,以及你所应聘的这个岗位大概做哪些工作。
试(已拿到offer)之前8月底华为cloudsop部门打电话叫我要不要
试,当时正处于换工作的期间,于是就把简历发给华为hr,人事审核后经过一些列
试、机试,最终顺利拿到了offer,出于未来职业规划的考量,本人手里还有其他的一些offer,还没有定下来,顺便在此分享一下我
前言2019年年初的时候我就开始偷偷投简历了。因为在现在的从事的即时通讯企业做的不开心了,客户产品善变,公司开会贼多。当然最关键的还是工资没给到位,事情都做了,却TMD不给升职加薪,因此心里窝火,也为了再次向社会证明我的价值和能力。移动互联网的普及和智能终端设备的广泛应用,短视频、直播、在线等各类形式的实时音视频通信模式风靡大众,成为人们日常沟通的新模式。已经形成南抖音北
: 1、手写扑克牌洗牌操作。主要就是用随机数打乱顺序。我写的是new一个数组,随机放入原数组中的数据(牌),忘记了生成随机数会重复的问题,改为先生成随机数数组再操作。
试官建议采用交换的方法; 2、看简历,问项目。问了springMVC的架构,项目具体实现流程。问到注解的时候没能答出来注......
试题如下:1 快排2 二叉树的深度3 字符输入纠错4 top10的tag不超过两个5 括号匹配快排 出现好多了,不再介绍了二叉树的深度[LeetCode] 104. Maximum Depth of Binary Tree 二叉树的最大深度设计一个系统,自动纠正用户输入错误的字符串。这道题用字典树解决,在leetcode和剑指off......
编程题:比较两个版本号的大小:如:5.0.1 4.1.1将N个有序数组合并成一个数组
图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目
图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写
是经验做一些总结,今后也是打算开启博客总结自己工作中遇到的一些问题分享给大家,算是一个开始吧!先说下整体
试准备阶段不像考试有题可压,任何一个问题都有可能都会问到,所以,对自己负责,欺骗自己等于拿自己的事业开玩笑。2.大部分的
试官不是真的要问倒你,他们只是想看看你的解决思路和套路是否能够灵活多变,问到一个你不知道,你就......
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下
试官会针对简历中提到的知识点由浅入深提问,所以不要背答案,多理解。1.图片的三级缓存中,图片加载到内存中,如果内存快爆了,会发生什么?怎么处理?参考回答:首先我们要清楚图片的三级缓存是如何的如果内存足够时不回收。内存不够时就回收软引用对象2.内存中如果加载一张500X500的png高清图片.应......
试看重基础,全方位无死角的考察各位的基础知识点,并且一般考察XXX是什么?XXX怎么实现的? 社
会针对项目做一个详细的沟通与了解,包括整个项目的业务架构,技术架构和技术难点和卡点......
图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目
- 本文固定链接: http://www.douyinkuaishou.cc/?id=15701
- 转载请注明: admin 于 抖音快手 发表
《本文》有 0 条评论