快手面试题目(内有真实面试实践经验分享)

快手高开及以上职级面试是没有笔试或者机试的,所以从第一轮开始就是直接面对面试官。

一轮

主要考察对Java基础的理解和深入程度。

Spring原理,SpringIOC、AOP。

这个问题最好可以多说一点,比如对于IOC,不妨把Bean如何加载、如何

初始化以及如何注册到IOC容器中的详细过程说一下,涉及BeanDefinition、

BeanFactory也深入细节聊一下。

一个请求过来在Spring中发生了哪些事情。

这个问题不妨把一个请求过来在TCP层面上建立连接、操作系统如何处理连接、Web容器接收到连接对象后做了哪些事情、Spring如何对接收到的请求进行处理都说一下,当然最终还是落在Spring容器内部如何处理一个请求,

这个过程一定要说清楚,需要体现细节。在说前面的内容的时候,可以放心面试官不会打断你。

手写一个栈,实现push,pop方法,以及max(获取最大的元素)方法,要求时间复杂度为O(1)。

这是一个考察数据结构的问题,一方面需要候选⼈对数据结构有所了解,一方

面也需要候选人对代码有驾驭能力(毕竟要手写代码)。面试官会给一定的时间,在这段时间里,面试官不会打扰你,并尽可能为你提供方便,比如,签字笔不好用,面试官会帮你更换。据我个人经验,凡是面对需要写代码的问题,都不要急着放弃,静下心来,仔细思考,都是可以写得不错的。如果没能写出来,面试官会问你实现思路,如果你的思路很优化,一样可以过了这道题,但是前提是:你的代码不能一行都不写。

对于数据结构的考察的话,我建议看一下jdk中对于List、Stack、Tree、Set

的实现,比如,至少你要知道,如果让你实现一个单链表,你会如何实现;比

如,你可能会定义一个Node节点,里面有当前节点的key和value,还有对于下一个节点的引用。如果熟悉jdk对于各种数据结构的实现,这道题是很容易过的。

#JVM内存结构

这个问题需要你能画出JVM内存结构的图,画出方法区、堆、程序计算器、

虚拟机栈、本地方法栈,并说出每一个部分具体是什么作用,比如,哪些是线

程共享的,哪些是线程独享的,哪些地方存放了什么数据,为什么会这样存放,

哪些虚拟机参数对这些空间大小是有影响的,可以如何配置。这些都比较常规。

#手写一个单例

这个基本上大多数公司都会考察的。要写一个基于懒汉式的双重检测的单例。

单例有三个比较关键的点,一是私有构造方法,避免外部new出对象;二是

保证唯一性;三是提供一个全局访问点。

另外,懒汉式双重检测的实现方式有三点需要注意的地方,一是全局访问点

必须是静态的,外界使用可以通过类直接调用,二是在进入锁之后还需要校验,

三是保存单例对象的私有变量一定要用volatile修饰,这个地方可以多说一些,

比如volatile防止指令重排序,保证内存可见性(JVM层面和CPU层面可以分

别说)。volatile这个地方能说的东西还是很多的,基本上可以与面试官再聊

二十分钟了。

#HashMap

对于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的节点上,如果是红黑树的节点,就要以红黑树的方式插入一个节点。

接下来其实不是考察的重点,但是也可以说说,就是:

(1)为什么要引入红黑树,

(2)如何在红黑树中插入一个节点。对于这两个问题,首先,引入红黑树的好处是为了提高查询效率,要说出O(log2(n)),但是在提高查找效率的同时也在插入的时候更加耗时,那可以说一下为什么更加耗时,自然带出第二个问题,如何在红黑树中插入一个节点,比如当插入一个节点的时候我们会默认它是红色的

(这个地方可以结合红黑树特点说一下我们为什么默认它是红色的,从黑色高度以及相邻两节点不同为红色入手),插入后如果父节点是黑色的就不需要动了,但假如是红色的,就需要进行左旋和右旋操作,如果很了解,可以细说左

旋右旋如何实现,如果不是很了解,到此为止也ok。

说到这里,我们忽略了一个重要的点,就是链表转换为红黑树的条件,说出链

表长度到8(相当于红黑树开始第四层)以及数组大小达到64就已经够了,也

可以进一步说一下链表是如何转换为红黑树的。说完也可以说一下

ConcurrentHashMap中也是一样的,然后接下来就引入对

ConcurrentHashMap的理解,⽐如在什么地⽅会涉及到线程安全问题以及

ConcurrentHashMap是如何解决的,说说CAS,说完CAS再说说AQS,自

由发挥吧。

#JVM四种引入类型

这个问题比较简单,强引入、弱引入、软引入、虚引入,说一下它们各自的特

点和GC对它们的不同处理方式,再说一下常用的应用场景或者jdk的实现中

对它们的使用,比如,ThreadLocal的静态内部类ThreadLocalMap,它的

Key是弱引用的,也可以说一下在你的理解中为什么它是弱引用的,假如不

是会怎么样。

#SpringBoot启动过程

这个主要是从它基于Spring的事件发布和监听机制开始说起就没什么问题。

二轮

继续考察Java基础,和对应⽤技术的掌握,比如过往项目中所有的一些框架,

在这二轮中会被问到。

#类加载过程

加载链接初始化,链接又分为验证准备和解析,每一个阶段是做了什么要说清楚。Objecta=newObject();这行代码做了哪些事情,需要从类加载开始说起,这个相当于上一问题的延续,所以一定要清楚每一个环节做了哪些事情的,否则这个问题不可能说清楚。说完类加载的过程,再说一下开辟内存空间、初始化内存空间以及把内存地址

赋值给变量a,接下来可以进一步说一下JVM或者CPU层面对指令的优化,以及在某些时刻我们需要避免它做这样的优化,比如在单例中我们的实例需要用volatile修饰避免指令重排序(可以说一下在new一个对象的过程中如果指令重排序了会导致什么结果)。

#接下来主要是对过往项目中用到的框架、工具的考察

1.maven的熟练程度

比如问问有哪些类型

2.Linux命令⾏的熟练程度

比如问问${}和$()区别

3.消息队列的熟练程度

比如问问Kafka分区,如何分区等等(因为我过往项⽬经验中写了

kafka,所以才会被问及,如果写了其他消息队列,也可能会被问及)

4.Netty

从NIO开始说肯定是没错的,再说说Netty的实现⽅式,以及它除了IO之外还⼲了哪些事情。

三轮

这一轮主要考察对于过往项目的业务理解

#根据过往项目经验依次介绍业务

这就需要在面试之前把自己的做过的项目好好总结一下,它们主要做的业务是

什么,解决了什么问题,架构是什么样的,以及你在其中做了哪些⼯作。这个地方一定要准备充分,少要能扛得住面试官三连问。否则会被认你不太清楚。你们之前做的到底是什么,那你在业务能力方便可能是不太match的。

#你有什么问题想问面试官的

这个地方因人而异,但无论怎样,都不要什么都不问,至少你要表现一点对于岗位的兴趣吧。如问一下公司业务,团队构成,技术栈,以及你所应聘的这个岗位大概做哪些工作。

四轮

HR面试。这一轮可以说是斗智斗勇的一个环节,会考察到些软技能、个人成长、职业素质,也会问一下期望薪资。

                      -END-

小编分类整理了许多java进阶学习材料和BAT面试题,需要资料的请转发此文章后再私聊小编回复【java】就能领取2019年java进阶学习资料和BAT面试题以及《EffectiveJava》(第3版)电子版书籍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容