2019秋招经验谈
以下乃一家之言,有用,则吾心甚慰,无用,君权当一笑。
一家之言,常有多家之辩,望诸君善待吾之善心,莫急言于在下。
吾求无错,奈何水平所限,失误再所难免,请各位提之,吾当改之。
吾所求岗位均为研发岗位,故技术人才更适用之。
目录
0. 个人情况
1. 准备工作
- 1.0 概述
- 1.1 我的练级之路
- 1.2 认知思维篇
- 1.3 专业技术篇
- 1.4 面试技巧篇
- 1.5 学习资料篇
2. 面经
- 2.0 概述
- 2.1 中国银联
- 2.2 顺丰科技
- 2.3 VIVO
- 2.4 海康威视
- 2.5 招商银行信用卡中心
- 2.6 华为
- 2.7 携程
- 2.8 虎牙
- 2.9 平安科技
- 2.10 其他公司
零.个人情况
- 学校:211
- 专业:非计算机专业,但是是电子类专业
- 应聘岗位:Java后端开发(或者相关开发岗位)
- offer:中国银联 顺丰科技 vivo 海康威视 招商银行信用卡中心
- Java相关知识学习时间:2017.11 ~ 2018.9 (以前是做雷达相关的研究)
- 秋招正式准备时间:2018.5.15 ~ 2018.8 (前面还有零散的准备)
- 面试城市:西安
- no offer: bat(二面挂) 网易(一面挂)虎牙(一面挂)平安科技(一面挂) 华为(还在池子里泡着呢)携程(还在池子里泡着呢)
一. 准备工作
1.0 概述
- 首先要明确,offer与认知思维、专业技术、面试技巧以及运气都分不开,即
offer = 认知思维 + 专业技术 + 面试技巧 + 运气
(1)认知思维是指求职者的心理准备,思维准备,决定了准备的质量以及offer的质量;
(2)专业技术是指求职者的专业实力,是校招的基础,敲门砖,决定了offer的下限;
(3)面试技巧是指求职者的语言表达,归纳整理,能力包装等能力,为专业能力锦上添花(而非雪中送炭),决定了求职者是能够发挥出应有的专业水准。 - 接下来我将围绕认知思维、专业技术以及面试技巧展开介绍。
1.1 我的练级之路
1.1.1 选择与方向
关于我的练级之路,我想从一个面试经常问到的问题谈起:你为什么要从搞雷达转到搞Java开发呢?为什么从一个非常高端的领域转到一个简单的应用领域呢?你不觉得浪费你的才能吗?是的,我的研究方向是雷达相关,与Java开发完全不搭边,为什么要转呢?主要原因有以下几点(注意,面试的时候可不能这么回答呀,童鞋们,我这里只是说了个大实话而已,面试的时候得包装啊,童鞋们):
- 我发现我不适合做雷达方向的研究,整个雷达领域其实涉及的知识点是非常多的,需要掌握雷达相关理论和雷达设备本身以及战场环境3个纵深领域的知识,而雷达理论、雷达设备与战场表现三个领域的表现其实并不完全一致,想要做出成绩,其实需要经历大量年限的积累,对整个雷达领域有了一个整体的积累之后,你才能做出有效的成绩(注意这里的有效是指不是骗国家钱的那种研究,而是实实在在的能用在实战中的研究,不细说了),因此整个领域的发展不是循序渐进的发展,而是断崖式厚积薄发的发展,因此其实挺难的。
- 雷达方向的就业面很窄,基本上主要去研究所工作,而研究所的工作氛围并不适合我(说的直接点,事实上是工资更加不适合我)当然了,现在其实随着自动驾驶的兴起,雷达算法工程师也逐渐可以去民用公司赚钱,这点其实非常好
因此想要换一个方向去做,或者说换一个技术路径去发展,但是毕竟是换一个方向去发展,时间和精力有限,需要选一个难度较低的切入点,因此选择了 Java后端开发工程师。
既然谈到了选择,这里需要提醒一下大家,在找工作之前,一定要想想自己适合做什么样的工作,自己感兴趣的是什么工作,这点非常重要。
1.1.2 制定计划
谈完选择,定下方向,接下来就是制定计划了。整个准备过程其实一直都是制定计划、执行计划、打破计划、重新制定计划、重新执行计划的循环。因此我下面就直接介绍我都做了哪些事情。直接上图吧。
在这个过程里你会发现,生活从来没有准备到完美的时候,计划永远都赶不上变化,那么校招也是一样,你永远不会有准备好的那一天,那就在准备了多少就直接上战场吧。
1.1.3 执行计划
既然知道了该做什么事情,那么你就应该像一只野兽一样,开始捕猎,不见血不停止,你需要拼命地野蛮生长。
2018.10.1 - 2018.10.15
我其实是2018.10就有意识的开始准备找工作了,但是那个时候需要干实验室老板的任务,因此都是每天项目任务完成之后,开始零散的学习Java基础知识,当时每天项目任务完成,开始复习的时候,基本都是晚上11点左右了,每天基本上学习到凌晨0:40左右,回宿舍休息,第二天接着来。就这样,学习了差不多有半个月,后面项目越来越紧,需要投入的时间越来越多,然后就开始中断了。对Java有了一个整体的认识。2019.2
直到寒假放假,大概2019.2 才有了2周完整的学习时间,这2周,深化了一下Java基础知识,Java基础基本上已经有一个全面的了解了。3月返校,老板的任务更重了,基本上挤不出什么时间复习,因此我加班到5月中旬,把我所有的相关的任务全部做完之后,跟老板商量,能不能开始找工作,不再做实验室项目了,老板曰,可以。尽管后面老板还找我,但是其实已经没有那么频繁了,因此我开始有了一定的时间复习,但事实上,其实并不够,其实还是有很多实验室项目的事情需要做,但是好歹可以有自己的时间复习了。在这里我要给大家一个建议:当你实验室活很多的时候,你需要给你的老板去说你即将要找工作的事情,去和他商量,为啥这么做呢?首先,老板对你毕业有身杀大权,你需要征求他们的同意,才能有一定的时间去找工作,不至于发生因为找工作而没有完成实验室任务,导致和老师发生冲突,那就不好了;其次,你提出找工作的事情,其实是给老师释放一个信号:你要找工作了,希望老师能少安排活,即使他最后没有少安排活,也会降低对你完成任务的期许,这样不容易造成冲突。
2019.5.15 - 2019.6.15
正式复习开始了,在这段时间里,开始大量复习计算机网络、Linux、数据库(MySQL, Redis)的知识,大量总结归纳。同时呢,也开始准备一个Java后端的项目:这个项目其实就是叶神的高级项目课https://www.nowcoder.com/courses/semester/senior, 然后边做边学习Spring Boot,Spring,MyBatis这些框架,同时也加深对数据库的理解,并且有意识地开始学习如何优化代码,如何引入设计模式。在整个项目的学习和准备过程中,我要给大家一个建议:那就是准备校招的时候,其实应该以结果为导向,以实战为线索,在实战中,在项目中去应用自己学习过的知识,同时学习新的知识,通过迭代来将知识、能力以及思维逐渐形成一个体系:知识-思维-能力-案例 四位一体的体系。
2019.6.16 - 2019.7.15
这段时间里,最重要的事情莫过于算法了,在这段时间里,主要的工作就是看算法相关的书籍,了解算法基础知识,然后开始刷题,加深理解。在学习算法的过程中,其实,也一直接着做Java后端的项目;同时呢,还在深入的学习JVM, 学习设计模式。
2019.7.16 - 2019.8.8
这段时间呢,主要完成Java后端的项目,同时,伴随着Java多线程、设计模式的学习,然后开始复习计算机网络、Linux、数据库等。2019.8.9 - 至今
这段时间呢,就开始了大量的笔试,面试。
1.1.4 总结
其实整个校招准备的过程中,就是一个制定计划、执行计划、打破计划、重新制定计划、重新执行计划的循环。在这个过程里,你会被很多乱七八糟的事情打断,你需要不断平衡实验室工作和校招复习之间的准备工作。这里你就需要采取很多策略,去保证你的复习时间和复习质量,同时你也需要采取有效的心态和认知去对待整个过程。
整个校招过程中,你会发现,你的认知和思维会影响你的技术准备、面试发挥,你的技术准备的程度、面试发挥的好坏又会反哺你的认知和思维,整个过程是一个稳定自我,提升自我,然后挑战外在的一个过程。
下面就详细地介绍一下,该如何准备。
1.2 认知思维篇
1.2.1 战略悲观与战术乐观
我在学习过程中,一直有个态度,就是战略悲观与战术乐观。什么意思呢?解释一下:
- 所谓的战略悲观是指,在整个准备的过程中,心态上,要认识到自己永远都不可能准备完美,永远会有缺失和漏洞,这是很正常的,甚至单纯的一个知识点,以现在的能力,每个人都不可能准备到面面俱到,因此不要苛求自己,不要追求完美***,抓大放小,抓住主要矛盾,解决核心问题,这是很重要的。
- 所谓的战术乐观是指,一旦要参与战斗,一旦去笔试,去面试,那么你就认为你是准备好的,在这样的情况下,你要明白,你需要做的是发挥出你现有的水平,发挥出你当下的水平就够了,而不是去瞻前顾后,认为自己这也不会,那也没看,不要管那些,你要做的就是自信地去应对每一场笔试,每一场面试,把你会的发挥出来,而且每次战斗都要比上次要进步,那么你的目标就达到了。
因此,在整个校招的准备过程中,你需要做到:
- 对于整个校招而言,你要保持战略悲观的态度,充分利用每一分每一秒去准备,不要苛求完美,抓住核心知识和技能去准备;
- 对于每一场笔试或者面试而言,你要保持战术乐观,你要每一场都保持自信,认为你已经准备好了,然后尽情地去发挥,以战养战,不断精进。
整个校招由大大小小多场战斗组成,你要赢的是最后的胜利,而不是某一场的胜利,因此自信地去应对每一场。所谓胜败乃兵家常事,单场的失败只能证明你当下没有准备好,你要做的是查漏补缺,不断精进,迎接下一场战斗。其实,当你参加一定场次之后就会发现,哎呀,原来套路是一样的,那个时候你就可以开始收割了。
记住:战略悲观与战术乐观。做一个长远有野心,当下有信心,事后有决心,正确认识成败,立足长远的求职者。
1.2.2 自由与平等
我在面试的过程中,保持的态度是自由与平等,什么意思呢?解释一下:
所谓的自由与平等,指的是面试者和面试官之间是平等的,面试者与面试的公司之间是平等的,没有任何的等级之分,这里的自由与平等,既指个人尊严与人格的平等,也指面试者和公司之间的选择平等,双方没有任何的权力和资格去藐视和歧视对方。这个非常重要。
面试者在参加面试的时候,需要保有自由与平等的态度,要做事先做人,要认识到你与面试官之间是平等的,首先保持你自己的人格尊严,然后再考虑面试,因此你没有必要对面试官卑躬屈膝,低声下气,没有必要惧怕对方,没有必要去紧张,见面了,一声干净利落地“老师好”或者“面试官好”,然后一字一句的清晰地去与面试官交流你的观点和主张,这个非常的重要。不要因为一个面试而丢掉了自己的骨气,这远比你面试本身更重要。
既然是自由平等的,那么面试者与公司之间的选择也自然是自由平等的,有时候,你可能会发现自己明明准备的很好,面试交流的也很好,但是就是被挂了,为啥?只能说明你的面试不符合这个公司的招聘标准,只能说明公司认为你不合适,不能说明你不行,或者你的方向选择是错的,尤其不能说明你的智商有问题,你要做的是,心里淘汰掉这家公司,然后接着下一家。
记住:自由与平等。做一个自信,大方,自尊,平等的求职者。
1.2.4 胜而后战
是故胜兵先胜而后求战,败兵先战而后求胜。 - 《孙子兵法·形篇》
这句话是说,两军交战,胜利的队伍在战斗之前就已经做了充分的准备,胜利是准备好的结果。
这句话其实很好地说明了,整个校招,若想取得好的结果,其实得早点开始准备,尽全力地早点开始准备,要明白,开始准备的早,不一定结果就好,但是准备的晚,大概率是很难取得自己满意的结果的。
孙子有云,“凡战者,以正为合,以奇为胜”。这句话是说,作战,先要把正面的兵排好,要排的不偏斜,合乎法则,这叫正;如果此时你还有多余的兵力,你就赢了,这叫以奇(ji)为胜。
这句话其实很好地说明了,整个校招其实不止你自己要复习地好,你要复习地好到干掉和你竞争同一个岗位的人,那么你就应该比你的同行多做准备,不仅要充分的准备,而且要额外的准备。
曾国藩,一代文人,但是在打仗上确实甚为了得,为啥呢?因为老爷子喜欢“结硬寨,打呆仗”。老爷子打仗的时候,大部分时间,都在挖沟,基本上他参加的战场,都是沟壑纵横。他先用结硬寨的方式把敌人围起来,限制敌人的行动能力,使自己利于不败之地,然后再徐徐图之,以求胜利。
曾老爷子这个方式,其实也正是我们校招的方式,应对每一场面试,我们要做的就是掌握核心知识点,尽最大努力,做尽可能充分地准备,使自己在专业能力上立于不必之地,然后徐徐图谋更好的待遇。
记住:凡战者,以正为合,以奇为胜。以结硬寨,打呆仗的方式去尽可能充分地准备校招(其实有时候也意味着尽可能早的去准备),确保自己在能力上能立于不败之地,那么剩下的就是尽情发挥,然后收割校招的胜利果实了。因此,做一个用笨办法踏实复习的求职者。
1.2.5 军团作战
校招,其实不是一个人的战斗。
整个校招过程中,信息海量,一个人很难兼顾到所有的情形,例如你无法关注到所有公司的求职信息,你无法了解到所有公司的情况,因此你需要找一群小伙伴,一起去奋斗。
所谓军团作战,就是指,找一群志同道合的小伙伴,组成学习同盟,互相交流学习,互相沟通经验,互相共享求职信息,攻守相伴。这样的团结互助其实不止体现在信息上、能力上,更体现在学习过程中,相互之间的心理的支持和关心上,这些都很重要,大大提高了校招的效率和成功率。
记住:军团作战。提高准备效率,做一个团结合作的求职者。
1.2.6 提前准备
所谓的提前准备,是指:
- 提前进行技术准备
- 提前进行秋招(一定不要错过提前批,2019最早的提前批6月底就开始了)
一定要注意,提前批的难度和正式秋招的难度是有区别的:
- 很多公司提前批都免笔试,这会省去不少时间
- 很多公司的提前批,面试难度并不高,并没有正式秋招高
- 提前批hc充足,有大量试错机会或者说练习面试的机会,这个非常值钱
- 提前批相当于给秋招了2次机会,这样话,即使提前批过不了,秋招也可以再试一次(看再多面经也不如自己亲身体验一次要感受的深嘛)
- 很多公司,提前批可能意味着sp,ssp(华为除外)
说明:
这里需要区别一些名词:提前批 vs 内推 vs 校招
- 校招:校招就是每个公司都有的完整的招聘流程,简历筛选、笔试、面试一个不少
- 提前批:很多公司的提前批是独立的,是当年第一批次的招聘,可能免去简历筛选,笔试
- 内推:很多公司的内推是独立的,可能免去简历筛选,笔试;但是有些公司内推和提前批是重叠的,也有些公司的内推和校招是重叠的,一定要注意。
- 注:一定要看内推和提前批对校招是否有影响,例如:
- 是否参加内推或者提前批,就不能参加校招,例如唯品会
- 是否参加内推或者提前批,校招就需要换岗位甚至换部门,例如网易
简历筛选 vs 免笔试
- 简历筛选:很多好学校的同学觉得简历筛选只是对学校不太好的同学有用,对自己没有,但是其实不是,例如银行(国有和商业银行)就会筛选,有些好学校的同学有时候会发现连笔试的机会都没有,而一些相对不太好的学校的同学拿到了笔试机会,其实是因为有些同学是内推的,免掉了简历筛选。现在简历筛选越来越玄学了,所以免掉简历筛选其实很重要
- 免笔试:相对而言免笔试对大家影响并没有那么大,但是免笔试有个很大的好处,就是加快面试流程。
1.3 专业技术篇
1.3.0 概述
- 目标:介绍Java后端开发相关的知识点
- 认知准备:胜而后战 (见1.2.4节)
- 说明:这部分内容是必须掌握的内容,鉴于水平所限,可能不是很全面,仅做参考。
- 建议:
(1)复习的过程中,做复习笔记,最好是记录在云端,这样的话,可以随时复习,例如面试等待中复习;
(2)当知识复习完一遍之后,就可以对照着面经去复习准备了,记住先搞熟核心知识,再去搞其他边缘的知识;
(3)复习过程中,一定要注意不仅要了解知识,还要主动思考,去思考知识背后的逻辑以及设计的意图 - 注: vs 表示比较的意思
关于专业技术呢,是指你的硬实力,硬实力的考查呢,主要从2个角度进行:
- 宽度:掌握的知识是否全面
- 深度:掌握的能力是否深入
宽度在一定程度上决定了你是否能够进入一家公司,深度则决定了你offer的等级。对于bat,甚至更好的公司来说,有时候深度甚至可能决定你是否能够进入这家公司。
1.3.1 专业技术
- 一门语言(以Java为例)
- Java核心知识
- Java基础
- 新版本特性
- 跨平台特性
- Java四个基本特性
- Object类及其方法实现(尤其是equals() and hashCode())
- 基本数据类型与引用数据类型
- Exception vs Error
- finally vs final vs finalize
- final vs final
- 四种引用:强引用、软引用、若引用、幻象引用的比较
- 重载 vs 重写
- 接口 vs 抽象类
- 深克隆 vs 浅克隆
- String vs StringBuffer vs StringBuilder (底层实现)
- IO vs NIO vs AIO
- 反射与动态***
- 序列化与反序列化(底层实现)
- 集合框架 (应用及源码分析)
- 集合框架的设计与所有的继承关系
- Vector vs ArrayList vs LinkedList
- HashTable vs HashMap vs TreeMap
- HashTable vs HashMap vs ConcurrentHashMap
- HashSet vs TreeSet
- 并发与多线程(应用及底层实现)
- 线程的创建方式
- 多线程应用场景
- 线程状态与转换
- 线程安全与同步机制:volatile vs synchronized vs Lock(ReentrantLock)
- volatile底层原理
- synchronized底层原理及其锁的升级与降级
- Lock(ReentrantLock)底层原理
- ThreadLocal
- 线程通信
- 线程池(底层实现)
- 死锁的出现场景、定位以及修复
- CAS 与 Atomic*类型实现原理
- AQS:并发包基础技术
- Java并发包(java.util.concurrent及其子包)提供的并发工具类
- 比synchronized更加高级的各种同步结构,如:Semaphore,CyclicBarrier, CountDownLatch
- 各种线程安全的容器(主要有四类:Queue,List,Set,Map),如:ConcurrentHashMap,ConcurrentSkipListMap,CopyOnWriteArrayList
- 各种并发队列的实现,如各种BlockingQueue的实现(ArrayBlockingQueue, LinkedBlockingQueue, SynchorousQueue, PriorityBlockingQueue,DelayQueue,LinkedTranferQueue)等。
- Executor框架与线程池
- Java基础
- JVM
- JVM运行时数据区域 vs Java内存模型 (这2不一样!!!)
- Java内存模型与happen-before原则
- 内存泄露、内存溢出以及栈溢出
- JVM类加载机制及其作用与对象的初始化
- JVM垃圾回收
- 如何判断对象已经死亡?引用计数法 vs 可达性分析
- 如何回收对象?垃圾收集算法
- Minor GC vs Full GC
- 常用的垃圾收集器及其特点
- 内存分配与回收策略
- GC调优
- GC调优的思路
- JVM常用参数
- 基于JDK命令行工具监控Java进程, 如 jps,jinfo,jstat,jmap,jstack
- 基于图形化工具监控Java进程,如MAT(Memory Analyzer),VisualVM,Btrace
- Java核心知识
- 面向对象与设计模式(了解常用设计模式及其应用场景、示例)
- 面向对象的六个基本原则
- 单例模式(手撕各种单例模式)
- 工厂模式(Spring的BeanFactory,ApplicationContext)vs.抽象工厂模式
- 构造器模式(应用场景:解决构造复杂对象的麻烦。复杂:需要输入的参数的组合较多)
- ***模式(Spring AOP(动态***模式:2种实现方式,即jdk & 字节码方式))
- 装饰器模式(应用场景:若想对一个类从不同角度进行功能扩展,例如java.io中,InputStream是一个抽象类,标准类库中提供了FileInputStream\ByteArrayInputStream等各种不同的子类,分别从不同角度对InputStream进行了功能扩展。这些不同的实现类其构造函数的输入均为InputStream(的实现类),然后对InputStream添加不同层次的逻辑,从而实现不同的功能,这就是装饰。)
- 观察者模式(各种事件***)
- 策略模式(比较器Comparator)
- 迭代器模式(ArrayList等集合框架中的迭代器)
- 生产者消费者模式(消息队列)要能手撕
- ...还有很多,但是掌握这些基本上够了
- 数据结构与算法
- 时间复杂度和空间复杂度分析
- 常用的数据结构及其特点
- 数组 vs 链表
- 队列 vs 栈
- 跳表(Redis利用跳表实现有序集合Sorted Set)
- 散列表
- 堆与优先级队列
- 二叉树:普通二叉树 vs 二叉查找树 vs 平衡二叉树(AVL)vs 红黑树 (vs 哈夫曼树)
- 多叉树:B-Tree vs B+Tree vs B*Tree / Trie Tree
- B+Tree: MySQL索引数据结构
- Trie Tree: 实现敏感词过滤算法; 实现搜索引擎的关键词提示功能
- 图:考数据结构不多,主要考2个最短路径优先算法
- 常用算法
- 各种排序算法:内部排序+外部排序(https://blog.csdn.net/hguisu/article/details/7776068/)
- 需要手撕:冒泡、插入、堆排、归并、快排(2路快排+3路快排+随机枢值)
- 大数据排序:外部排序
- 各种查找算法:
- 二分查找算法及其变种
- 二叉查找树的查找
- 利用快排查找
- ...
- 常用的遍历算法
- BFS vs DFS
- Morris遍历
- 常用的Hash算法
- 一致性哈希
- 布隆过滤器
- 贪心算法
- 分治算法
- 回溯算法
- 动态规划
- 海量数据处理算法
- bitmap算法
- 布隆过滤器
- https://blog.csdn.net/v_july_v/article/details/6279498
- 其他算法:
- LRU算法
- KMP算法
- Manacher算法(面试问过1次)
- BFPRT算法
- 各种排序算法:内部排序+外部排序(https://blog.csdn.net/hguisu/article/details/7776068/)
- 常见的手撕代码问题
- 《剑指offer》的问题
- 后续搜集补充。。。
- 计算机网络
- OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及及各层协议
- 给定一个网址,访问这个网址经过了那些过程?涉及哪些协议?
- HTTP and HTTPS
- HTTP报文格式
- HTTP方法及相互区别
- HTTP的无状态
- HTTP状态码
- HTTP 1.0 vs 1.1 vs 2.0
- HTTP vs HTTPS
- HTTP安全性
- HTTP底层协作协议(如传输层为TCP协议)
- TCP and UDP
- TCP vs UDP
- TCP如何保证可靠传输?
- TCP的三次握手和四次挥手及其原因
- TCP的流量控制与滑动窗口
- TCP的拥塞控制与拥塞窗口
- TCP的拆包粘包
- 关于TCP协议非常好的2篇文章:
- RPC协议(经常和Dubbo一起问)
- Socket编程
- 异步IO多路复用:select poll epoll
- OS
- 内核态 vs 用户态
- 进程 vs 线程
- 进程调度算法
- 进程间通信的几种方式
- OS死锁相关的问题
- 什么是死锁?哲学家就餐问题
- 死锁的必要条件
- 死锁的应对方法
- 死锁的检测与恢复
- 死锁的动态避免:银行家算法
- 死锁的静态防止:破坏死锁的必要条件之一
- 段页式内存管理
- 页面置换算法
- 磁盘调度算法
- Linux系统常用的命令有哪些?是否会Shell,Python?
- 数据库MySQL
- 数据库范式
- 数据库事务
- 什么是事务?
- 事务特性:ACID
- 事务隔离级别以及脏读、不可重复读、幻读
- 分布式事务
- 数据库索引
- 索引的应用场景
- 索引特点
- 索引的优点和缺点
- 索引的分类
- 索引选择原则
- 索引的优化
- 索引失效
- 索引的底层实现(B-Tree vs B+Tree)
- 对于建立索引的列,数据均匀分布好还是不均匀好?
- 数据库的锁
- 行锁 vs 表锁
- 读锁 vs 写锁
- 乐观锁 vs 悲观锁以及如何实现?(MVCC)
- 加锁的方式
- 分布式锁
- 数据库存储引擎比较
- InnoDB
- MyISAM
- Memory
- MySQL连接池对比
- MySQL命令
- JOIN的执行计划?
- 数据库分库分表
- 主从复制
- 数据库Redis
- 为什么使用Redis?
- Redis的优点与缺点
- Redis的数据类型、底层实现以及各种数据类型的使用场景
- Redis是单线程吗?单线程的Redis为啥这么快?
- Redis持久化的方式
- 谈谈Redis的过期策略以及内存淘汰机制
- 如何解决Redis和和数据库双写一致性的问题?
- 如何应对缓存穿透与缓存雪崩的问题?
- 如何解决Redis的并发竞争Key问题
- Web与常见框架
- Servlet的生命周期(问的很少)
- Cookie vs Session
- 分布式Session
- Spring相关(应用与源码分析)
- 看过Spring的源码吗?
- IOC应用及原理
- AOP应用及原理
- 事务
- Spring涉及的设计模式
- 谈谈Spring Bean的生命周期和作用域
- Spring MVC的工作原理
- Spring vs Spring MVC
- Spring vs Spring Boot
- 了解微服务,Spring Cloud
- Netty (网络框架)
- Dubbo
分布式架构
- 服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等
- 资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。
- 流量调度,涉及路由、负载均衡、流控、熔断等。
- 数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等
- 容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。
- 自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等。
项目
准备项目对于秋招而言是非常重要的,为啥呢?
- 加深对所学知识的理解,将知识转换为能力
- 证明你的学习能力和实践能力
- 项目可以在一定程度上,将面试官的问题引导到一定范围内,例如在面试的时候,一般情况下,项目会最开始介绍,在介绍项目的时候,你就可以以你熟悉的内容,不断引申,就像是多米诺骨牌一样,一直延续下去。这样就有可能避免面试官深挖基础,问到你没有准备过的东西。
如何准备项目呢?我以我准备的Java后端项目为例说明,即叶神的高级项目课:https://www.nowcoder.com/courses/semester/senior
- 明确这个项目的需求与解决的问题
- 明确这个项目的结构与组成
- 明确这个项目涉及的技术栈
- 完成这个项目的基本功能
- 在完成的过程中,总结归纳
- 总结归纳业务知识,例如如何实现系统的登陆和注册功能,如何实现点赞功能
- 总结技术栈的相关知识与应用场景,例如Spring, Spring Boot, MyBatis, MySQL, Redis
- 总结几个你认为做的非常好的点,例如利用Redis实现一个异步处理框架
- 总结项目中出现的问题以及解决方式,例如响应时间过长,你是如何解决的?
- 总结如何扩展系统,例如如何扩展系统的业务功能(添加后台管理模块等)
- 总结如何提升系统性能,例如如何处理缓存,如何提高系统响应
- 总结如何设计一个系统,例如根据经验如何设计和实现一个秒杀系统?
- 总结如何进行系统的测试,例如你甚至可以测试驱动开发(TDD)
- 还有很多总结...这里只是提供一些思路
- 扩展项目
- 添加业务模块,例如添加后台管理模块
- 添加推荐算法,例如给timeline增加推荐能力
- 公共模块服务化
- 如果可以的话,将系统上线(非常加分的),这里涉及另外的一些知识点:
- 项目的版本管理:Git & Github
- 项目的部署:涉及Linux、服务器
- 项目的扩展:涉及Nginx与负载均衡
- 项目的调试与优化:涉及如何在服务器端远程进行调试和优化,例如jmeter进行远程调试系统
- 项目的服务化与分布式架构:微服务,例如如何将项目从单体应用扩展为分布式应用,如何将常用模块或者固定模块变成一个个服务
- 还有很多知识点...这里知识提供一些丝
实习
关于实习,我没有去实习过,因为实验室老板不让去,我会结合去实习的同学谈谈实习的建议(大佬绕行):- 一切为秋招服务,无论前面准备项目还是去实习,一定要明确实习的目的是为了更好的服务于秋招,当然了提高技术是必然的。
- 选择大厂去实习,小厂的实习含金量不高。(对于秋招而言)
- 实习时间不要与秋招冲突。尽量选择春招的时候去实习,或者越早越好,因为一旦实习时间和秋招冲突,那么可能会错过很多秋招机会。
- 若实习时发现学不到什么技术,并且影响到了秋招,立马离职,准备秋招。
- 若实习与秋招时间重叠,实习过程中,做好两手准备:(1)实习转正;(2)准备秋招。因为转正的周期一般都比较长,一旦转正失败,那么也会错过很多秋招的机会。
1.4 面试技巧篇
1.4.1 形象和谈吐篇
面试过程很短,对于一个人的认识和了解也很有限。那么如果你的技能一般的话,就需要加强形象和谈吐了。所谓实力不够,形象来凑。
形象方面,最好穿工作便装,休闲的也可以,但是要干净、整洁,不要有异味、不要邋遢(刮胡子,梳头发,熨衣服,这些都很重要)。尤其是HR面,基本上都是小姐姐,不要吓到她们。
另外,保持微笑,表现得热情、开朗和幽默非常重要。每个人都喜欢积极乐观向上的人。交谈的时候,不要挤牙膏,别人问一句你答一句,要直接把前因后果都讲清楚。最好能够以讲故事的心态分享你的故事,尤其是hr面,最好能够把hr妹子逗笑,但是切记不要撩。
说话的时候,要看着对方,一方面,这是对对方的尊重和礼貌,另一方面,这也是一种自信。就算没有回答好,也不要低着头,不要像做错事情一样。万一碰到有说不清楚的内容,不要犹豫,直接上图。对于比较复杂的或者面试官听不懂的问题,一定要换个思路表达。
1.4.2 心态篇
面试的时候,你要保持一个自信的心态,无论你准备的到位与不到位
面试的时候,紧张是正常的,但是你要通过前面的自我介绍(如果没有自我介绍的话,前几个问题回答慢一点)的时间来调整自己的紧张
注:详细的心态管理见1.2 认知思维篇
1.4.3 面试技术篇
Checklist(简称cl)
在整个秋招面试过程中,最好能够准备一个checklist, 这个cl是用来在你面试前进行模拟面试的,那么cl包含哪些内容:
- 自我介绍
- 项目介绍
- 技术知识点
- 非技术知识点
以下详细介绍这几个方面:
- 自我介绍
在自我介绍的时候,除了介绍你自己的基本情况外,直接明了的提出你擅长的技术栈是一个很好的技巧,为什么这么做呢?因为这会给面试官一个先入为主的印象,会给面试官心里种下一个种子,潜意识认为你对这一块知识比较了解,那么后面问到这一块知识的概率就会变大;同时呢,后面万一他问到那些不会的内容,你也可以拉面试官到你擅长的技术栈,由于前面已经埋下了伏笔,因此后面面试官大概率上是容易接受你的转换的。
注:有时候hr面的自我介绍和技术面的自我介绍不同,会产生不一样的效果 - 项目介绍
项目介绍除了介绍项目的目的,解决的问题,设计的思想以及整体结构,更重要的是提出你在项目中的亮点以及项目中你擅长的技术栈,这会在一定程度上引导面试官去对你这些内容发问 - 技术知识点
每次面试前,都应该有针对性地深化一部分知识点,这部分知识点要么来自于你要面试的这家公司的面经,要么来自于你计划中要解决的知识点,力求做到每次面试都拿下一部分知识点,将比较复杂的问题化整为零,然后再总结归纳,这会有效的降低你记忆的难度 - 非技术知识点
非技术知识点主要是针对hr面试中可能出现的问题的,一般hr面就那些问题,因此这个准备非常好准备
模拟面试
面试和你的笔试一样,笔试需要做大量的题目去模拟,那么面试也必然是的。那么如何进行面试的模拟呢?
- 准备CheckList
- 根据CheckList, 进行自我介绍,然后将你自我介绍的过程用视频录下来或者语音录下来,然后去分析你哪些地方有问题,作为面试完之后的分析依据,根据面试情况,去修正你的自我介绍
- 根据CheckList, 进行项目介绍以及项目分析,然后将你自我介绍的过程用视频录下来或者语音录下来,然后去分析你哪些地方有问题,作为面试完之后的分析依据,根据面试情况,去修正你的项目介绍,尤其是项目中涉及的知识点以及技术栈,你是否理解到位了,你会做,那么你是否能够讲清楚,如果讲不清楚问题在哪里?
- 你也可以请你的同学或者朋友充当面试官的角色,让他按照你的CheckList去对你进行提问,看你是否能够给一个没有做过这个项目的人将项目讲清楚,如果可以说明你真正理解了,这样就可以给你面试有一个参考。
注意:
- 面试开始前,给面试官一个微笑,简单大方地问好:“面试官好”或者“老师好”,然后双手将简历(或者所需材料)递给面试官
- 面试结束后,给面试官一个微笑,简单大方地对面试官表达感谢:“谢谢您,再见”,然后带着自己的东西离场。
- 面试过程中,
- 当面试官提出问题时,一定不要着急回答,而是思考清楚面试官的问题之后,再回答问题;如果不确定面试官的问题,那么你需要不断询问面试官,确定题目的具体意思,当你确定意思之后,再认真回答问题。回答问题的时候,你要一步到位,直接给出充足的细节,将问题的前因后果全部描述清楚,不要等着面试官追问,那样的话,你会变得非常的被动。讲的时候,要条理清楚,问题的来源、解决方案、演进过程,都要利索地讲清楚。
- 当面试官问到的问题,你是不懂的,那么你应该向面试官提出你不是很懂这个问题:“不好意思,这个问题我不是记的很清楚了(或者不好意思,这个问题我没有接触过,我不是很懂)”,问他是否可以给出提示,如果可以在给出提示的情况下答出问题,体现的则是你的思考和逻辑能力;若面试官无法给出提示,那么你直接告诉面试官你不懂这个问题,但是你懂另外一个相关的知识点,是否可以给他介绍?如果可以,你接着介绍这个相关知识点;如果不可以,那就请求面试官是否可以进入下一个话题。在这里再强调一下,有时候,面试官并不期待你能在很短的时间内解决这个难题,他只是想看你遇到难题的时候的态度和思维方式以及应变能力。如果你能证明给面试官看,你解决问题的方向和方法是正确的,即使不是正确答案,也很不错。如果最后没有答上来,最后可以和面试官要个联系方式(邮箱或者微信),回去后努力搞懂,然后举一反三,写篇文章发给面试官,有时候会让你起死回生的。
- 当面试官对你提示的时候,请记住,当你回答问题结束之后,你需要对面试官表达感谢,感谢他的提示。
- 面试过程中,如果是hr面,那么你需要表达出你的忠诚、坚持、责任、荣誉、毅力、稳定、对自己正确的认识等,至于具体的套路,我这里就暂时不说了,如果后期需要了解的同学比较多的话,我可再补充。
1.5 学习资料篇
- Java
- Java核心知识
- 入门:《Head First Java》
- 进阶:《Java编程思想》、《Effective Java》
- JVM
- 《深入理解Java虚拟机》
- Java并发与多线程
- 面试:《Java并发编程的艺术》(适合在时间紧张的时候,准备面试)
- 进阶:《Java并发编程实战》(想深入学习,用这本)
- Java核心知识
- 面向对象与设计模式
- 《Head First 设计模式》
- 马士兵的设计模式
- 数据结构与算法
- 入门:《大话数据结构》
- 进阶:《算法·第四版》
- 手撕代码:
- 《剑指offer》https://www.nowcoder.com/ta/coding-interviews
- 《程序员代码面试指南》左神 (时间紧,可以直接看书)
- 不想看书的,可以直接看左神的视频:
- leetcode(有时间一定要刷)
- 海量数据处理:
- 动态规划:https://www.geeksforgeeks.org/top-20-dynamic-programming-interview-questions/
- 计算机网络
- 入门:
- 《图解TCP/IP》
- 《图解HTTP》
- 进阶:《TCP/IP详解·卷1》或者《计算机网络:自顶向下方法(原书第6版)》(看一本即可)
- 入门:
- OS
- 入门:《Operating Systems: Three Easy Pieces》(讲的非常好,只有英文版)
- 进阶:《深入理解计算机系统》
- 视频:http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240243X+sp/about
- Linux
- 《鸟哥的linux私房菜》
- 视频:https://pan.baidu.com/s/1hx2as373BZlAKtKonn5u1g
- 数据库MySQL
- 入门:《MySQL必知必会》
- 进阶:
- 《MySQL技术内幕 Innodb存储引擎》
- 《高性能MySQL》(这本更好,不过有点难)
- 数据库Redis
- 《Redis设计与实现》
- Web与常见框架(框架这部分,我认为通过官网直接上手实战,然后再去分析其源码)
- 《深入分析JavaWeb技术内幕》
- Spring/ Spring Boot/ Spring Cloud:
- 官网:https://spring.io/
- 应用:《Spring4.x 企业级应用开发实战》
- Spring源码
- 《Spring技术内幕》(这本写的太好了)
- MyBatis
- Netty
- Dubbo
- 分布式架构
- System Design Primer:目前这个仓库收集到了好些系统架构和设计的基本方法。其中包括
- CAP理论
- 一致性模型
- 可用性模式
- DNS
- CDN
- 负载均衡
- 反向***
- 应用层的微服务和服务发现
- 关系型数据库和NoSQL
- 缓存
- 异步通讯
- 安全等
- System Design Primer:目前这个仓库收集到了好些系统架构和设计的基本方法。其中包括
- 项目
- 《大型网站技术架构·核心原理与案例分析》
- 叶神高级项目课:https://www.nowcoder.com/courses/semester/senior
- Git& Github
注:暂时列出这么多,有空了补充吧。
二. 面经
2.0 概述
- 此部分面经均为现在回忆所写,可能略有缺失,仅供参考
- 鉴于bat、网易面经太多就不写了,但是所涉及面试内容将会在本文后面章节以知识点形式给出。
2.1 中国银联
中国银联我必须从笔试开始说起,为什么要从笔试开始说起呢?
答曰:重要,非常重要。有些同学会发现面试都很好为啥最后挂了呢,有部分原因就是因为笔试成绩不如别人
中国银联的录取,不仅要看你的学校,更要看你的能力,它录取的时候呢,就会将你的笔试成绩群面成绩以及技术面的成绩全部计算在内,最后加权得分,然后择优录取。因此笔试很重要。确切讲,每一个考试都很重要,笔试、群面、还有后面的技术面都很重要。挂掉一场意味着都挂了,或者说只要有一场分数很低,也可能被淘汰。
2.1.1 笔试
【题目】中国银联的笔试非常类似于公***,主要包含以下内容:
- 行测:数学计算 逻辑判断 言语理解 图形推理
- 专业知识: 金融 经济 财会 管理 法律 银联常识
- 英语:阅读理解
- 专业知识:Java相关基础知识
【解决方案】准备银联的笔试,确实非一人之力,所以大家懂得...,分数越高越好。
2.1.2 群面(30min)
【题目】
主题:疫苗问题
流程:
- 5分钟阅读材料,总结归纳观点
- 1分钟个人陈述观点+自我介绍
- 15分钟组内讨论
- 3分钟最终发言
【解决方案】
解决这样的群面问题呢,不能蛮干,应该有套路。
- 1分钟回答:
阅读问题,带着后面的问题阅读材料,然后迅速整理出材料结构,总结1分钟陈述的回答。要注意这个1分钟回答,只需要回答主干就行了,不需要细节,因为根本说不完; - 15分钟讨论过程:
15分钟讨论过程中,一定不要起内讧(一旦内讧,基本上你的群面分数不会很高,而我说了),而是在一个人的带领下,将问题主题确定,然后围绕问题主题快速提出一组主要答案,然后围绕这个主要答案进行总结调整,15分钟看着很长其实很短,所以一定要注意时间。
在15分钟讨论过程中,不要为了回答问题而回答问题,一定要抓住重点,确保自己有1~2次的有效回答,要么是总结性回答,要么是补充性回答,这个很重要,切记不要胡说八道。
在15分钟讨论过程中,发言的时候,如果没有思路,可以考虑一下:要么从整体入手去回答整个问题,要么从细节入手去深化问题,这是2个不错的策略,要么体现你的总结能力,要么体现你的思考能力。 - 最后的总结陈述:
整个是由组内选出1人进行总结陈述,整个总结陈述其实是高风险高收益的,要么总结的非常好,高分,要么总结的非常差,出局,所以慎重对待。
2.1.3 技术面(20min)
【题目】
- 项目,你觉得你的项目的亮点是什么?为啥采用这样的加密方式?有没有框架实现这样的加密?
- 谈谈反射?反射能干嘛?反射安全吗?反射的坏处是什么?知道反射是怎么实现的嘛?
- 线程池了解吗?线程池的好处是什么?
- 数据库知道哪些?详细谈谈?现场给题目,直接手撕sql,3道题。
- Linux系统知道哪些?详细谈谈?用过Linux命令吗?知道哪些?详细说说?
- Spring知道哪些?详细谈谈?动态***模式是怎么玩儿的?给我们详细讲讲
- Spring Boot和Spring有啥区别?
- 你平时都怎么学习的?
- 你有没有自己的博客?
- 你的期望薪资是什么?
- 你有什么想问的吗?
- 其他问题。这里问了很多问题,当时第一次参加技术面试,很多都不会,大概70%都不会,当然也可能是压力面,总之最后过了。
(1)关于银联录取的分数计算:
goal = a * 笔试分数 + b * 群面分数 + c * 技术面分数,其中,a, b, c为系数
因此,每一场都很重要。
注:此计算方式来源于面试官
(2)关于录用流程:
中国银联的录用流程确实挺慢,从8月9号面试完,到今天(9月30日)正式收到录用offer,其实确实挺漫长的,虽然漫长,但是整个过程中,银联的hr部门还是一直在推进,可能整个过程中,由于他的hr人太少,通知的确实是太慢,不可否认,但是整个流程还可以。比较规范。
(3)关于体检:
中国银联的体检相对而言比较严格,但是主要还是看你是否生有大病,这是银行主要检查的内容,即使收到复检通知,只要不是大病,可以和医生沟通一下,写成合格,也可以拿到offer。
2.2 顺丰科技
2.2.1 技术面
手撕代码:计算n + (n-1) + ... + 2 + 1
要求:递归计算
问题1:你的递归有没有问题? 要求考虑返回值为long型的情况
问题2:你觉得这样的递归可能产生什么样的问题?
问题3:你觉得如何处理上述的问题?
问题4:若存在这样的一种情况:递归调用这个计算的时候,计算n的时候,不会出现栈溢出,但是计算n+1的时候出现栈溢出,那么若有2个线程一起调用这个递归,会出现什么状况呢?代码题
关于sychonronized、 notify()、 notifyAll()、wait()的问题,涉及线程同步,线程通信相关的代码执行顺序以及多线程执行情况。(具体题目我忘了)
(1)若多个线程以字符串“a”作为锁,即synchronized("a"),请问这个锁是一个锁吗?为什么?
(2)调用wait()的时候,调用线程是否还持有这个锁?为什么?
(3)调用notify()的时候,调用线程发生了什么?为什么?调用wait()的线程发生了什么?为什么?
(4)调用notifyAll()的时候,调用线程发生了什么?为什么?调用wait()的线程发生了什么?为什么?智力题
甲地有小球A,乙地有小球B,现在A向乙地以2m/s的速度前进,B向甲地以1m/s的速度前进,在2者前进的过程中,A每次碰到B都要返回甲地,然后向着乙地前进,接着碰到之后再返回,循环往复,而B球则一直向着甲地前进,直到B球到达甲地。
(1)A最终走了多少路程?
(2)A最终碰到B球时单程总共走了多少路程?
(3)A最终碰了多少次B球?请求出其公式。项目
谈谈反射?知道反射是怎么实现的嘛?反射能获得方法的注解吗?为啥?能不能举个例子?
Spring知道什么?源码看过没?谈谈。
谈谈你知道的设计模式
Spring Boot的源码看过没?谈谈。知道微服务吗?谈谈你对微服务的认识?
数据库了解什么?谈谈数据库索引?
知道Cookie和Session的区别吗?你项目有用到Session吗?怎么用的?
你觉得Redis在项目中使用的时候有没有什么风险?
list 和 set的差别
hashmap了解不?谈谈。
put怎么做的?
为啥要设计成数组+链表?
是否直接用hashCode确定桶的位置?如果不是是用的啥?请写出公式。
equals()和hashCode()有啥区别?二者重写有啥规则?为啥要约定这样的规则?
get怎么做的?
rehash是为了什么?
树化是为了什么?你的思维能力非常强,但是你的知识深度不够,给你四分钟,讲一个能够你的牛逼之处,如果能征服我,我就让你过。
其他问题忘了。。。。
2.2.2 hr面
- 自我介绍
- 项目介绍
- 实验室导师的项目
- 你实验室的项目及研究方向和工作方向不一样?为啥?为啥要换成Java开发?
- 你觉得你和计算机科班出身,有何优势?(这是个很好的加分问题,有机会分析如何答这个问题)
- 你为啥想去深圳工作?
- 你有女朋友吗?(这是个很好的加分问题,有机会分析一下如何回答整个问题)
- 你自学Java是如何学习的?为啥你用Java找工作?而不是用你熟悉的C++?
- 谈一个你最大的优点和你最大的缺点?(这是个很好的加分问题,有机会分析一下如何回答整个问题)
- 你觉得为啥我们要你?
2.3 VIVO
2.3.1 技术面
注:C++工程师面试的
- 懂C++吗?答不懂。你觉得C++和Java有啥差别?
- C++的对象回收和Java的对象回收有何差别?说一下二者的机制。
- C++的编译过程和Java的类加载过程有何联系?详细谈谈。
- 你知道为啥一个应用有4G,但是机器内存只有2G,为啥这个应用可以跑起来?原理是啥?详细谈谈其机制。
- 进程和线程了解吗?详细谈谈。
- TCP UDP协议了解吗? 二者有何区别?应用场景是啥?为啥TCP是可靠地?
- TCP三次握手四次挥手,画出整个过程并解释,为啥不是2次或者4次握手?为啥要4次挥手?
- 谈谈TCP的流量控制
- 谈谈TCP的拥塞控制
- 谈谈项目
- 手撕代码,题目忘了(leetcode上的)
- 有啥想问的?
2.3.2 hr面
- 自我介绍
- 项目介绍
- 为啥想到杭州
- 谈谈你最大的缺点和最大的优点。请举例说明
- 你想去的目标城市是哪里?为啥想去?为啥不想去其他地方?如果换的话想去哪里?(我说我就想去杭州,结果给我整南京去了,我说能否用sp换一个深圳,答曰不能。。。)
- 你有女朋友吗?你去外地工作了?她怎么办?
- 介绍一下你的家庭情况
- 你有啥想问的?
2.4 海康威视
2.4.1 技术面
- 项目
- 手撕sql:
(1) 给了一个数据库的题目,然后让写出查询语句(涉及 select from where group by having like order by)
(2) 进一步多表联查
(3) MySQL索引,包括但不限于分类,区别,数据结构(B B+的比较和插入删除的*作演示)
(4) MySQL失效的情况,并举例说明(例如like "%x"这样的会索引失效) - 给你一个视频监控系统,你如何考虑这个系统设计?
(1)请画出你的设计图,然后解释说明
(2)提出其中用到的技术手段以及可能存在的问题
(3)如何提高这个系统的性能
(4)如何判定这个系统是一个稳健的系统,或者说如何保证这个系统的稳定性? - 详细谈谈TCP/IP协议族,包括但不限于以下内容:
TCP UDP协议了解吗? 二者有何区别?应用场景是啥?为啥TCP是可靠地?
TCP三次握手四次挥手,画出整个过程并解释,为啥不是2次或者4次握手?为啥要4次挥手?
谈谈TCP的流量控制
谈谈TCP的拥塞控制 - 知道jsonp吗?
- 会前端吗?
- 你平时怎么学习?
- 了解blockingqueue吗?详细说说。
- 了解线程池吗?详细说说。
- 了解GC吗?
- 手撕代码(题目忘了)
2.4.2 hr面
- 自我介绍
- 介绍一下你实验室做的东西?
- 你为啥做Java开发?
- 请说出你的三个缺点和三个优点?(我竟然有3个缺点,我怎么不知道呢?最讨厌这个问题啦)
- 你们实验室项目中,你的角色是什么?
- 你们团队合作的时候,你一般如何看待合作?如何行事的?你们的分工一般是什么?
- 既然你是你们团队的leader,那么你是怎么带领一个团队攻克难关的?
- 有女朋友吗?
- 你有哪些offer?我有。。。
那你为啥来海康呢?为啥不去其他公司呢?(你说呢?) - 你有什么想问我的呢?
ps: 小姐姐太漂亮了。。。无比享受的hr面。
2.5 招商银行信用卡中心(信息技术部)
2.5.1 初面(1个多小时)
- 介绍一下你zhiji
- 全程怼Java项目
-介绍一下这个项目?
-为啥做这个项目?
-用了哪些技术?
-你自学的技术是哪些?
-详细谈谈你对Spring的理解,和Spring Boot有啥区别?
-既然谈到了AOP,你在项目中如何使用AOP的,AOP还能有哪些应用?
-AOP的原理是什么?有哪些实现的方式?
-既然谈到了动态***模式,请谈谈动态***有哪些实现方式?(jdk & 字节码方式)
-这2种不同的实现方式中,目标类和***类的关系是?
-接着深入的谈谈你了解的其他设计模式?(单例模式 工厂模式 抽象工厂模式 建造者模式 策略模式 装饰器模式 迭代器模式 生产者消费者模式 责任链模式 一口气连原理带例子说完)
-既然谈到了生产者消费者模式,请问你项目中是否使用这个模式?
-责任链模式如果让你写你会怎么写?(双端链表)
-策略模式在Java集合框架中是否有用到?装饰器模式呢?
-Redis在项目中怎么用的?为啥这么用?一般Redis的应用场景是什么?
-谈谈Redis的数据类型以及应用场景?是否看过其源码?
-Redis是单线程的还是多线程的?为啥是单线程的还这么快?
-谈谈Redis的过期策略以及内存淘汰机制
-如何解决Redis和和数据库双写一致性的问题?
-用户的注册和登陆你是如何解决的?
-拦截器是如何使用的?
-拦截器和过滤器以及责任链模式有何关系?
-谈谈敏感词过滤算法都有哪些?你是如何实现的?优势是什么?为啥这么设计?时间复杂度如何?
-你做的站内信是否是实时的?如何做成实时的?有没有思路?或者现在想想?
-谈谈你对cookie和session的理解
-谈谈你对token的理解
-谈谈你对分布式session的理解
-谈谈你对微服务框架的理解
-谈谈你对分布式的理解 - 全程怼实验室项目
-介绍一下这个项目
-解决的场景是什么
-你这个相控阵雷达牛逼呀,给我介绍一下
-你们团队是怎么分工的?
-你有什么牛逼的成果?
-如果你和你的合作的同学意见出现分歧了如何解决? - 你有啥想问的呢?
- 你平时都怎么学习的呢?有没有写博客?有没有GitHub?经常更新不?
- 谈谈你了解的数据结构与算法?
- 面试结束了,你过了,来接着给我介绍一下相控阵雷达
2.5.2 终面
- 自我介绍一下
- 介绍一下你的项目
- 为啥转Java开发呢?你做的是***项目,转到民用,是不是有点大材小用呢?
- 你如何挑选公司的?
- 你怎么看待互联网公司与非互联网公司呢?
- 你是怎么看待自己的?
- 你最大的优点和最大的缺点是什么?
- 你最铁的哥们儿是谁?
- 你有从你的朋友们身上学到了什么?
- 你交朋友的标准是什么?
- 你喜欢哪类人?不喜欢哪类人?为什么?
- 如果你的合作对象或者你的同事是你讨厌的人,你会如何对待他?
- 你和合作对象或者同事意见发生分歧了,你如何处理?
- 为什么要来信用卡中心?
- 你有面过那些公司?有没有对这些公司做过总结和分类呢?
- 谈3个对你影响最大的人,为什么?
- 你平时都怎么学习?
- 你有女朋友吗?你们未来是怎么安排的?你为什么喜欢她?她对你有何影响?(她是另外一个本我,常有相濡以沫之默契,时有不如相忘于江湖之洒脱)
- 你是如何规划你的未来的?
- 你觉得你厉害吗?谈谈你认为你最自豪的事情
ps: 很佩服信用卡中心这种说话算话的公司,说7天出结果,绝对不8天出结果,在这里bishi一下某为的sb尿性。。。
2.6 华为
这是一家随机且佛性的公司:
1.面试过不过佛性;
2.发不发offer佛性;
3.什么时候发offer佛性;
4.发不发签约佛性;
5.什么时候发签约佛性;
6.工作岗位佛性;
7.工作地点佛性;
8.工作薪资佛性;
9.你来不来佛性;
10.你去不去佛性;
11.你性格对不对佛性;
12.你是谁佛性;
13.怎么对你佛性。
那么如何应对这家公司呢?
也请你佛系对待这个公司,因为这是一家喜欢唱 无所谓 的公司
得不到,请冷静的对待;得到了,请更加冷静的对待
漫长的等待,等来的可能是希望,更有可能是希望后面伴随的毁灭的绝望。
好,做好这个思想准备之后,开始华为的笔试面试之旅。
首先为啥要介绍华为的笔试呢?因为它不重要。
为啥要介绍华为的面试呢?因为它不重要。
那为啥不重要还要介绍呢?
其实主要是为了介绍上面的佛性***。其次是为了对仗,哈哈哈
好,做好这个思想准备之后,就可以跳过华为的笔试面试经验啦。哈哈哈哈,因为真的不重要。
2.6.1 笔试
【题目】笔试题目=编程1(100分) + 编程2(200分)+编程3(300分)
注:100分就够了,多了浪费(2018年)
2.6.2 业务面
- 平时都做啥项目了
- 详细介绍一下你最自豪的项目(Java)
- 你这个项目是自己做的,导师让你做的项目是啥?你干嘛了?(C++)
- 接下来咱聊聊基础吧
- 接下来就是C++和Java的比较,垃圾回收有啥差别,类加载有啥差别
- TCP和UDP区别
- DHCP底层原理
- 有没有做过socket编程
- 你还有啥想问的?
2.6.3 综合面
- 自我介绍
- 你做啥项目了?详细讲讲
- 你为啥会想到做这个项目?目的是啥?用途是啥?
- 华为有没有其他的亲属或者师兄师姐?有没有问过他们眼中的华为?
- 数据库用的啥?
- 你眼中的华为是啥样子的?
- 你有啥想问的?
- 回去等通知,2-3天出结果
- 你还面试哪里了?
好,终于跳过了。。。
2.7 携程
2.7.1 技术1面
- 详细谈谈Java基类Object类以及其方法
- 详细谈谈equals()和hashCode()
- 详细谈谈wait() notify() notifyAll()
- 详细谈谈final finally finalize的区别
- 写出单例模式的双检锁形式,序列化以及反序列化以后是否仍然是单例?
- 手撕代码:
-链表中间值
-一个数字中1的个数 - ArrayList vs Vector Vs. Linkedlist
- hashMap vs hashTable vs. concurrentHashMap
- 线程同步机制:synchoronized vs. ReentrantLock 、volatile
-synchoronized底层原理以及锁的升级和降级
-ReentrantLock的底层原理
-synchoronized vs. ReentrantLock
-synchoronized vs. volatile
-volatile的作用是什么?如何实现的?了解happen-before吗? - 线程池原理、参数以及给定实际的场景,然后设计线程池
- 知道JVM的内存模型和运行时区域吗?分别说一说(注意这里很容易错,二者是不同概念)
- 平时学校开设哪些课程?
- 有什么想问的?
2.7.2 技术2面待安排
2.8 虎牙
2.8.1 技术面
- new一个对象的过程
- cap定理
- hashset
- list vs set
- lock的底层
- http的方法有哪些
- 线程池底层怎么实现的
- threadlocal
- mysql引擎有哪些
- jdk 8的lambda表达式
ps:都答上来了,莫名其妙一面挂了。可能长得丑。哈哈哈哈
2.9 平安科技
2.9.1 技术1面
- 自我介绍
- 介绍一下项目
- 你觉得你的项目会出现什么问题,如果让你现在想,你觉得可能出现什么问题?
第3个问题之后就挂了。
2.10 其他公司
其他公司的面试经验以知识点的形式给出,见1.3.1。
- 更新时间
- 2018.9.30 更新面经篇
- 2018.10.2 我的练级之路篇
- 2018.10.3 专业技术篇
- 2018.10.4 暂时写完,以后有空补充