先大概说下自己的口试经历吧(详细的口试过程和口试题解析在末了):干系的公司有四类:
笔试就挂了的:网易、头条。(对付笔试这个东西我到现在都没太多履历)
网易是第一家参加笔试的,口试会报销用度去总部,以是还是有难度,这个公司呢,内推不内推都要参加笔试。以是笔试要好好准备(当然笔试也不好准备) 头条只有四道编程题,一个人做确实难度挺大的,尤其是工程为主,不太专搞算法的同学。

笔试过了但由于韶光地点缘故原由没去口试的:京东、小米、去哪、携程、招银。
这几个公司口试一定要现场,很多都哀求去总部,还不报销路费。以是在碰着这种情形时,大家要有选择的安排,毕竟韶光和精力都是有限的。
终极参加口试的:
阿里(电话2面,很轻松地就挂了)
腾讯(现场2面,良久之后hr电话说要转C++,就只能算了)
百度(电话2面+经理面,offer)
滴滴(视频2面+现场终面,offer)
360 (视频2面+hr面,offer)
美团(电话2面+hr面,offer)。
阿里呢大家都知道,恨不得把全国学生都面一个遍,对付这种策略我只想说三个字,晚点投(下面会阐明)。
腾讯的口试体验还是很好的,会在酒店的房间里,安静舒适。只是java的同学可能要被问到很多C++和网络的知识,建议还是提前准备一下。
百度内推都是电话面,会在某网站实时写代码,觉得百度的口试官都很不错,给我的体验也很好。内推的时候最好把稳下部门,在一个好的部门和边缘部门还是差别很大的。
滴滴口试比较晚,外地可以先视频面,末了会有现场面,报销花费。事情体验很不错,内部氛围很好,由于成立韶光短业务扩展太快,技能方面正在沉淀期,事情还是比较有寻衅性的。
360要先笔试,然后可以视频口试。这个公司比较稳定,业务也都很成型,演习的话留用率还是比较高的。
美团的话印象比较深,由于我是仲春底内推的美团,然后内推没面我,三月正常笔试通过,然后待口试两个多月。。估计是补招了才给我打的电话(我都已经准备入职了)。履历便是一定要选一个奇迹群,最开始选都喜好的大多是以为这样机会多,相反这样很多部门由于自己的简历池太满而顾不上捞你。
还有一投简历就沉的外企:Amazon、FreeWheel(不知道是他们只收北京生源,还是我英文简历写的太烂了)
文章末了的面经当然只包括第三种由于笔试这东西真的不好讲,杂七杂八什么题都有,编程题大多人也要看发挥。
然后这是我最直不雅观的感想熏染( 我就从左到右提及吧。):
offer = 心态 (实力 + 口试技巧) + 缘分运气1. 心态实在每个阶段的改变,也都是心态转变的过程,以是首先要说的一点,便是心态。在上面这种公式里,心态作为一个因子存在。没错,心态可以影响你口试的准备,笔试的状态,实力的发挥,可以影响一个口试过程的方方面面。心态崩了,就只剩运气了,offer估计也就走远了。
那怎么调度自己的心态呢?
首先是要正视自己的能力。不轻视,不高估。
不轻视指的是我们都要对自己有信心,毕竟选了这个行业和方向,说句不好听的话,机会那么多,就算你不怎么努力也会有个差不多的offer不是么?万万千万的初中创公司,各种拥有垂直领域稳定份额的二三线公司乃至有些已经上市,除此之外还有银行,投资,金融的IT岗,还有各行各业为了互联网+的策略而扩展的互联网分支(当然像链家这种已经算互联网+传统行业的典范了,我前些天还瞅到了像万达德勤一类的各行业巨子也在招程序开拓…)以是啊,要对自己有信心,在这个行业十分缺人的年代里(当然各个层次的公司缺人的标准是不一样的),总不至于会失落业吧。
不高估便是要清楚自己的能力范围,不是说期望过高不好,但过高的期望会让你的生理变得薄弱,稍有不顺心态就有崩掉的趋势。由于口试毕竟有太大的有时性,就算你达到了一定的水平,相应水平的岗位也不是百发百中的,更不要说身边有那么多大神和收割机,每天拿offer拒offer,对生理都是不小的冲击。
不要总给自己悲观的暗示,心态差了积极调度。
大多数的人,总暗示自己说什么韶光不多了,怎么每天过这么快效率怎么这么低。到笔试了,跟自己说这个算法太难了,肯定做不出来;临到口试了,跟自己说千万别问我linux内核,别问我分布式,问我肯定完;口试过之后,没有结果,就每天想肯定又挂了,唉我怎么这么菜。
如果这一系列的表现形成习气,那心态这个系数最多0.5,能发挥出来的东西也都打了一半的折扣。凡事都不要太悲观,一个offer没拿到,正常情形是这个失落败的经历产生的履历和总结是会让下一次的成功率提高的,千万别由于这些悲观的暗示,反而让该有的提高都没有了。
心态差的时候反而要停下你重复而没有效率的事情,去调度一下,可以出去玩一玩,吃吃喝喝,不要把这几个月看得有多么不一样,彷佛耽搁两小时就要来生再见一样。
对付身边的同学,多互换,不比较。
有一些一起准备的好伙伴是件非常好的事情,不仅可以相互督匆匆,而且可以在互换和分享的过程中取长补短。(哪怕是偶尔一起吐吐槽发泄一下也比一个人崩溃要好得多)。但对付每一次口试,只跟自己比就行了,口试的全体过程都是最怕比较的,有时性大,而且每个人适宜的方向和技能栈都不一样,结果不能解释统统问题。如果身边有些收割机,那更不要太在意这些每天拿offer的(尤其是拿一个就跑过来讲一句的,他们大概没有恶意,但他们可能真的想不到这种办法会对别人产生若何的冲击)。
对自己的水平有个很清楚的认识,并选择自己得当的公司,好好准备自己的笔试、口试,不怕失落败,但担保每次口试都有收成和提高,那满意的offer早晚会来。
2. 实力这里说的实力指的是硬实力,也便是技能上的真实积累(当然产品岗的便是对付产品干系知识的积累),而实在呢软实力在口试过程中也尤为主要(有时候真的要更主要),紧张是指和口试官的沟通,对一个问题的阐述办法和表达办法,逻辑思维能力以及的代价不雅观和为人等。
然后关于这个软实力我想放到下面的技巧中去说。
如果你平时有些项目积累,不善于也从来没有怎么系统地总结过;如果你学习呢不算那么负责刻苦,研究搞得也不算出众,但是你该努力的时候也会努力,可以为了一个好的事情逼自己一把。
那大概下面说的实力和技巧都可以在一定程度上帮到你。(由于我便是这样的情形)
2.1 实力怎么能表示出来
这么说是由于很多人其实在这些年的项目或是学习中有一些积累,但是在刚开始口试的时候完备觉得使不着力,便是有种你问的我都能讲上一点,但根本说不清楚的觉得。(往深了问自然是塌台)
知识面或者或者说技能栈都是有宽度和深度的,我们要做的便是在短韶光内提升宽度,捉住以往本身就熟习或是感兴趣的几个点去深入。
我因此为知识的宽度可以很大程度上决定你能不能通过口试(这里说的宽度并不是简历上理解、知道或者你都没往简历上写,仅仅是听说过的层面润色的方面,而是写熟习的那种,普通地说是可以讲清事理,不涉及横向比拟和优化的方面)
一两个点的深度呢在担保你能通过口试的同时(尤其是你的点恰好cover了对方部门的技能栈),并且还是影响offer等级的关键成分。(达到足够的深度,不但能说出事理,还能进行横向技能比拟,纵向的延伸技能,利害点及优化,或者在这个点写了几篇很透彻的博文,更厉害的同学乃至有干系的开源项目的参与与贡献)
关于怎么提升宽度和深度可以看下面的积累(实在说真的短期内宽度是好补的,深度确实要看个人,是代价较高,性价比不一定高的一方面,看自己的决定吧)
以是我的建议是,先把宽度提上来,把你能cover的知识点及事理搞懂是第一步。建议对自己之前的项目和技能积累做一个总结和分类(可以参考下面的技能路线),然后对已经理解的方面尽可能延伸,对盲区或是薄弱的地方进行针对性的学习和练习。
当你的知识面覆盖到一定程度的时候,你自然会把他们的联系搞明白,逐步理解这全体技能体系,在口试的过程中结合表达技巧可以关联起来说各个方面,也就可以很大程度上展现自己的真实实力(更厉害的同学乃至可以有超出自己真实实力的表现。。)
2.2 实力包含哪些方面(我也只是脑筋里过了一遍,肯定有遗漏的,大家自己补全就行了,毕竟每个人的知识覆盖范围也不同)
根本知识1.1算法和数据构造
a.数组、链表、二叉树、行列步队、栈的各种操作(性能,场景)
b.二分查找和各种变种的二分查找
c.各种排序算法以及繁芜度剖析(快排、归并、堆)
d.各种算法题(手写)
e.理解并可以剖析韶光和空间繁芜度。
f.动态方案(笔试回回有。。)、贪心。
g.红黑树、AVL树、Hash树、Tire树、B树、B+树。
h.图算法(比较少,也就两个最短路径算法理解吧)
1.2打算机网络
OSI7层模型(TCP4层)
每层的协议
url到页面的过程
HTTP
http/https 1.0、1.1、2.0
get/post 以及幂等性
http 协议头干系
网络攻击(CSRF、XSS)
TCP/IP
三次握手、四次挥手
拥塞掌握(过程、阈值)
流量掌握与滑动窗口
TCP与UDP比较
子网划分(一样平常只有笔试有)
DDos攻击
(B)IO/NIO/AIO
三者事理,各个措辞是怎么实现的
Netty
Linux内核select poll epoll
1.3数据库(最多的还是mysql,Nosql有redis)
索引(包括分类及优化办法,失落效条件,底层构造)
sql语法(join,union,子查询,having,group by)
引擎比拟(InnoDB,MyISAM)
数据库的锁(行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐不雅观锁,以及加锁的select sql办法)
隔离级别,依次办理的问题(脏读、不可重复读、幻读)
事务的ACID
B树、B+树
优化(explain,慢查询,show profile)
数据库的范式。
分库分表,主从复制,读写分离。
Nosql干系(redis和memcached差异之类的,如果你熟习redis,redis还有一堆要问的)
1.4 操作系统:
进程通信IPC(几种办法),与线程差异
OS的几种策略(页面置换,进程调度等,每个里面有几种算法)
互斥与去世锁干系的
linux常用命令(问的时候都会给详细某一个场景)
Linux内核干系(select、poll、epoll)
1.5 编程措辞(这里只说Java):
把我之后的面经由一遍,Java觉得覆盖的就差不多了,不过下面还是分个类。
Java根本(面向工具、四个特性、重载重写、static和final等等很多东西)
凑集(HashMap、ConcurrentHashMap、各种List,最好结合源码看)
并发和多线程(线程池、SYNC和Lock锁机制、线程通信、volatile、ThreadLocal、CyclicBarrier、Atom包、CountDownLatch、AQS、CAS事理等等)
JVM(内存模型、GC垃圾回收,包括分代,GC算法,网络器、类加载和双亲委派、JVM调优,内存泄露和内存溢出)
IO/NIO干系
反射和代理、非常、Java8干系、序列化
设计模式(常用的,jdk中有的)
Web干系(servlet、cookie/session、Spring
<aop、ioc、mvc、事务、动态代理 >、Mybatis、Tomcat、Hibernate等)</aop、ioc、mvc、事务、动态代理>
看jdk源码
2. 项目经历这个每个人的项目不同,覆盖的技能也不一样,以是不能统一去说。
这里的技巧呢,不才面也会详细解释。
无非是找到自己项目中的亮点,简历上阐述的简练并且吸引眼球,同时自己要很熟习这个点(毕竟可以提前准备)
最好自己多练,就像有个剧本或者稿子一样,担保口试中可以很闇练普通地讲出,并且让人听着很舒畅。
3.演习经历这个很抱歉,由于我是找演习的经历,以是也没有演习经历的讲述履历。
但我想如果你有演习经历,那口试过程的重点也会在演习做了什么上面,以是大家最好对演习所做的事情做一个总结,并且同样抓出亮点,搞懂内部事理,提前磨炼讲述的过程。
4.其他扩展技能(这个方方面面太多了,全部节制基本上不可能,只是作为大家其他韶光扩充技能的参考)4.1 分布式架构:(理解事理就行,如果真的有实践履历更好)
CAP事理和BASE理论。
Nosql与KV存储(redis,hbase,mongodb,memcached等)
做事化理论(包括做事创造、管理等,zookeeper、etcd、springcloud微做事、)
负载均衡(事理、cdn、同等性hash)
RPC框架(包括整体的一些框架理论,通信的netty,序列化协议thrift,protobuff等)
行列步队(事理、kafka,activeMQ,rocketMQ)
分布式存储系统(GFS、HDFS、fastDFS)、存储模型(skipList、LSM等)
分布式事务、分布式锁等
4.2 脚本措辞:(只是作为横向扩充,一样平常问到linux也会问问shell脚本)
python
php
shell
golang
…
4.3 大数据与数据剖析:
hadoop生态圈(hive、hbase、hdfs、zookeeper、storm、kafka)
spark体系
措辞:python、R、scala
搜索引擎与技能
4.4 机器学习算法:
模型和算法很多。不细说了,如果很闇练就去投算法,海内很多公司都算法岗都很稀缺,其他岗可以大概理解下理论。
4.5其他工具的理论和利用:
这个更多了,问的多的比如git、docker、maven/gradle、Jenkins等等,自己须要的话选择性地去学。
5.实力要怎么积累积累实力最好的办法便是平时在项目中或是学习中,多学多问,多思考多研讨。这里就说说短期内学习的一些方法和路径:
总结下来,一方面是通过看书、看视频、看面经来不断扩展自己的知识面,一方面是通过不断的口试积累履历和知识盲区,在每次总结的过程中积累实力。
先说说看书学习这一点 这里该当是有个推举书本的环节,这几个月确实看了不少书,但是并不是所有都有很高的性价比,在这边大概列一下,前后顺序也一定程度上代表了我认为的主要度先后,'/'做分割的是一类的书本,一样平常来说看一个就够了:
书单:
算法与数据构造
数据构造(严蔚敏)/大话数据构造 //如果以为教材无聊就可以看大话系列,印象中里面还有很多诗
剑指Offer/程序员口试金典/编程珠玑/编程之美/牛客网+leetcode
程序员笔试口试最优解(左程云)/不如直接看左神的笔试口试指南视频
Java的版本(不是很推举):
数据构造与算法经典问题解析(Java措辞描述)
图解数据构造(利用Java)
打算机网络:
打算机网络(谢希仁)
TCP/IP 详解
HTTP威信指南
图解TCP/IP
图解HTTP
数据库://数据库紧张是多用,书上紧张看索引和性能的部分
高性能MySQL/深入浅出MySQL
操作系统:
OS事理:操作系统(教材,玄色的那个)
Linux:
Linux私房菜 //鸟哥写的,很全,包括bash部分
跟阿铭学Linux //紧张侧重于命令和操作,比较浅近
java:
Java猖獗讲义/Java编程思想/Java核心技能 卷1
深入理解Java虚拟机
并发编程的艺术/多线程编程核心技能
Effective Java
Java程序员口试笔试宝典 //何昊的那本,个人觉得是突击知识点的神器
Java程序性能优化
实战Java高并发程序设计
Java Web:
Spring实战/轻量级JavaEE 企业运用(红皮,讲SSH的) //紧张看末了一部分Spring的就可以
深入JavaWeb技能底细(阿里 许令波)//这个讲的还是比较深的
SpringBoot实战/深入实践SpringBoot
设计模式:
大话设计模式 //普通易懂
各种博客的总结
分布式与大数据:
分布式做事框架事理与实践
大型网站技能架构
Hadoop实战(hadoop体系包括得很全)//还有一本我暂时想不起来名字了
其他:
Git:
Git威信指南
Git官方讲解视频(牛客网有带字幕的)
Redis:
Redis实战
还买了docker、springCloud等等一些工具书,由于太小众就不列举了
除了上面说的书和视频,最有用的还是大家分享的各种面经。
面经是个很不错的东西(嗯,想看的可以直接翻到末了一节)。记住不要一扫而过(除了那种岗位不太匹配可以快速抓重点看),岗位匹配的你可以顺着面经逐条去看,仿照一次口试过程(虽然是单向的,但是你心里该当是知道每个问题你能答道什么层次),这种不断地仿照可以让你知道盲点或者说弱点在哪,对付一个你心里没底或者想不太起来的问题一定要当时记下来或者当时就弄懂。
我当时是每天晚上在床上看几篇面经,然后把存疑的问题copy到记事本中,第二天找个固定的韶光短查询办理和总结。长期下来会养成一个很好的习气,你的知识点会不断地扩充。
在一次次口试中提高
这一点实在跟刚刚看面经的那个很类似(那个我不是叫做仿照口试了吗),每次口试完,一定要把自己不会的东西尽快记下来(当然你如果有记面经的习气就更好了,还能再分享出去),然后找韶光弄懂和总结。
除了知识点,每次口试(跟仿照口试不同的地方)还要总结的是哪里发挥得不好,哪里有可以提升的地方,下次一定要把稳之类的。(便是有关口试技巧的东西,比如这次语速太快,导致口试官反馈了,又比如这次创造对方让你在纸上画个项目逻辑图溘然一时脑梗,那回去就好好在本上画一遍)
3. 技巧一些自身的软实力
软实力这个东西与口试的准备关系不大,基本上是长期形成的。
包括和口试官的沟通(有的时候也会成为谈天瞎说的能力);对一个问题的表达办法,逻辑思维(像有些人的发言就让人听上去很有层次感,很舒畅,这方面欠缺的可以推举玩玩狼人杀);除此之外对方也会很在意你的代价不雅观和为人(这个是我进了公司创造的,很多公司在内部的口试细则上面都会注明这一点,如果代价不雅观或是人品问题会直接反对。)想想也是有道理的,由于这个是入职之后能不能好好相处的关键,设想如果你是一个口试官,面对一个有实力但是说话太有棱角聊不太来的和一个不算出众但根本不错很听话可以培养的,你会选哪一个?(如果你由于生活太平淡了想选第一个,那这一条当我没说。。)
这些软实力实在要在生活中逐步磨炼,比如多参加些活动,多和别人沟通,揭橥见地前好好组织自己的措辞等等。(每个人都有每个人的性情,这些都因人而异,但有一点我们要记住的是在口试中,不论什么情形,都要保持镇静和清晰的头脑,和一个谦卑的态度,互换要坦诚<尤其作为应届生>,这样最少印象会好很多,要知道虽然口试有各种各样花式的打分项,但是印象好每每是隐蔽的决定性成分)
关于口试的准备和技巧
口试的技巧首先便是刚刚说到的态度。 一个谦卑(把稳不是自卑,也不是把自己放的很低的样子)和礼貌的态度和表达办法每每可以让口试官的印象分提高很多,印象分很像之后要稽核的实力分的系数。留个好印象,口试就成功了一半。(当然你一定也听过那种聊得很嗨,或者偶遇校友之类的,毛都没问就聊通过了的场景。这种情形还是不算在技巧中了吧,该当属于运气和缘分的范畴。而大多时候聊得愉快和舒畅会让你觉得到通过率会比较高,这一点很多人还是深有体会的)
然后说一下口试之前可以做足的准备。
首先从简历开始说,简历怎么调格式,做几页,排版啥的就不想多说了,觉得很多文章都分享过。我只说说技能方面的内容怎么写。
专业技能的描述谓词无非就那么几种:精通、闇练、熟习、理解。(还有一级叫听说过,这个级别的可千万别往上写啊兄弟)
精通觉得一样平常还是不要写,除非你在某个技能点上真的有足够的把握,比如源码看的很透彻的同时还能深刻理解事理并能灵巧处理各种case场景,如果还有干系的开源贡献,那就自傲地写精通吧。
我们把自己节制的大多数技能点叫做闇练节制,这个须要我们在之前对各个技能点进行横向纵向的复习和总结,并不但是用的多有履历就行,有的时候我们以为熟,但真让你说的时候却不知道从何提及。
至于熟习和理解,可以写一些自己理解事理但是不常用的技能点,尤其是比较盛行的,各大公司都在用的技能(比如MQ,分布式缓存等等),这些你在学校不一定用过,但是你可以通过看博客,写demo去理解他的设计和事理,口试的时候可以讲得清楚。
这里还有个技巧,更细心的同学可以针对每个公司岗位的job detail不同,熟习和理解这块就针对jd中cover的技能点去写。这个做法是很聪明的,毕竟熟习和理解这个层面是可以提前学习和准备的,有针对性的去写对方须要的,是提升通过率很好的一种办法。(如果嫌麻烦就算了,比如我便是)
下面再说说项目经历这块:阐述一定要精髓精辟到位,细化到每一个亮点上。我现在再看我二三月份的简历切实其实是有种想撕了的冲动,当时便是项目描述两三行,然后概括下我大概做了哪几个模块。完了。
事实上,不能讲得这么泛泛,就从中找2-3个亮点,一句话高度概括,突出亮点。
比如后来我就把我一个普通的web项目挖出来三个点(爬虫,通信掌握方面,安全加密方面),分别用一句话阐述,这一句话最好包括这个技能点的思路,办理了什么,有没有做什么优化。比如一个爬虫工具可以写成这样:
我卖力这个别系中爬虫的开拓,终端掌握管理,店铺管理。。。。
是的,上面这个爬虫就占用了五个字,即是没说,口试官看到压根不知道怎么去问。这里还可以这样写:
卖力系统中爬虫模块的开拓,用于爬取影片的各种信息,包括年份,先容,主演信息等。
这个最少见告口试官爬虫做了什么,但是你并不能担保他会问,由于你的阐述不一定能引起他的兴趣。那还可以这么写:
独立开拓多线程影片信息爬虫工具, 并针对线程池性能、网络非常以及反爬虫方法进行多次优化,容错性良好并达到并发要求30+的QPS。
你以为口试官看到这句话,他不想问点什么吗(除非他真的就不想要你)。
以是说,实在口试官呢都是希望在口试的过程中创造我们的亮点和上风,从而展开更深层次的互换,但是每每在简历中没有一个让他讯问的入口,这样就可能导致他会随意问(比如你理解什么什么吗?一样平常情形下都不太乐不雅观),或者就说那你来讲讲吧(这种问法实在已经表达出他不知道怎么问的情形了,你在讲的时候一定要突出重点,否则会让人觉得没什么亮点,通俗俗通的项目而已(当然就算是普通的项目,我们也要挖掘它的代价和自己的代价不是))
我们在口试的过程中最主要的是自己节制主动权,如果口试官问的都是我们熟习的范围和准备过的领域那我们答起来也会更加得心应手。而让口试官随着我们简历中埋下的这些亮点(他就算知道你故意想说这一点,每每也会去问,由于他便是想在短韶光的口试中理解你处理问题的能力),去进行更深层次的互换,而这个更深层次的互换,还须要我们针对简历上的每一句话,都准备多个层次和维度的扩展。
比如还是这个爬虫,你可以充分扩展线程池的干系优化(有可能项目中没有怎么优化乃至便是个单线程,但是在准备口试的过程中还是可以专门去做一些code重构的),优化网络的NIO干系扩展,以及反爬虫的各种各样的方法,以及爬虫方分别如何应对。这里只要你去想,能准备的东西太多了,口试多了自然也就越来越熟,彷佛项目便是做得这么完美一样。
这里我就不怎么扩展去说了,再讲下去这篇文章就写不完了。。。
末了是口试中的技巧和履历。
好好对着自己写的简历一行一行看一遍,这都是你挖的坑,是准备给口试官作为切入点互换的,并不是自己往里跳的。(对每一行都要有足够理解和把握)
口试过程不要紧张,尤其是前几次,建议先从小公司入手磨炼下口试履历(参考我之后自身的反面教材
口试办法不同,侧重点不同(无非是电话、视频、现场三种)。
电话口试建议找个人少安静的地方坐着回答,并且建议拿纸笔多做记录多画多写。(当然如果你以为身边很多朋友可以让你越聊越嗨那也可以,坐着是让你全体节奏慢下来,说话明显更加沉稳,亲自体会过站着走来走去和坐着的差异)
视频口试实在和电话类似,只是可以实时写代码,口试官能看到你的表情。这里还是要放松,如果你比较紧张,可以不直视镜头,好好想问题便是了,由于很多口试官你答得好也会面无表情(由于他们也不常视频,表情都很尴尬),然后你看到他们没表情的表情肯定会受影响。
现场面呢,最主要的是和口试官互动了,说几个点:语气要轻松点,多点肢体动作有助表达,多笑;不太好说清的就用笔在纸上画,一遍画一边讲,口试官也会更随意马虎和你互换;如果你可以时时时诙谐一下开开玩笑是更好了;见面和离开记得礼貌地握个手说声感激。
学会平等互换,别把自己身体放的太低。实在有一点你要清楚,口试是个双选的过程,他可以谢绝你,你也可以谢绝他。千万不要太上赶着,反而会影响自己正常的表达和逻辑。(就跟你见了喜好的姑娘就不会说话了一个道理)
回答问题的时候不要一口气把知道的全部说完,然后还毫无条理。学会一个知识点由浅入深讲解给口试官,并且留有余地给他进一步去问。
举个例子:
就说最大略和普遍的HashMap,让你讲讲,你就可以先说说hashMap的设计事理,底层构造(链表+数组)扩容办法等,从这你就可以说说这种设计好在哪里(比如讲一讲put是如何做hash的),这时候你可以说这种hash可能会有冲突,hashMap也是做了相应设计
然后口试官会问题你怎么办理冲突?你可以再给他讲讲解决hash冲突的三种常日办法,而hashMap用的是链式法,然后可以说到这样会有隐患便是hash链过长。
口试官再问,你会给他讲解决繁芜度高的长链用了红黑树的构造,这里还可以延伸到红黑树的特点或者jdk7和jdk8的不同实现,这时候你可以说办理hash冲突,但hashMap还会有并发和同步的问题。
口试官会让你再讲讲,你可以说说hashtable是线程安全的,怎么实现的(sync函数),并不好,从而引出更好的juc包,说说concurrentHashMap,之后又可以说道锁分段事理,弱同等性迭代器,concurrentHashMap的锁粒度(java7和java8不同),同包的CopyOnWriteArray等等。
你还可以延伸说到锁(重量、轻量、悲观乐不雅观各自实现、底层源码等等)、缓存(由于很多时候Map的构造可以作为缓存,从而可以说到缓存系统的设计,kv事理,分布式缓存redis、memcashed等等)
举这个例子便是想说,一个大略的根本问题可以一步一步有条理有层次的回答,每一层表达完抛个引子,让口试官可以连续问下去,从而让口试官真正理解你的节制的深度。
如果真的不巧聊到不善于的地方,学会转移话题,从一个点中聊自己感兴趣或是有把握的方面(比如你对行列步队不太熟但是redis用的熟,你就可以在问到行列步队的时候说,由于之前都是自己做的项目嘛,性能方面没有考虑到最优,一些异步的办法还是靠redis list去实现的,虽然redis的机制并不常见,但当时还是知足了需求,之后可以考虑性能方面的提升和技能评估;又比如问你http要求细节,rest的设计实现细节,你可以说http restapi做事接口性能的一些不敷,后来利用了rpc的办法,当然你这么说一定是要对rpc很理解)实在有的时候口试官是知道你是故意转移的,但是每每他们也不会抓着你不会的去问,非让你自己承认自己的盲区,他们大概根本不在意这些。
如果真的被问到不会的,就直接说你不会(说你不会、说你不会,我再补充两遍),或者礼貌地说这方面可能我还要多学习。(对一个拿不准的问题千万不要猜,纵然是二选一的那种问题,猜错了直接塌台,猜对了被人看出来,再往深问还是塌台)其余,像可能,大概是,我以为这种表达最好不要,一听便是对一个点没把握,有可能会让口试官以为学习太暴躁不喜好寻求事理。那对付自己知道事理(确实是理解了的)但是没用过的东西,就讲讲事理,并承认自己实践不敷,表现出好学的态度。口试一定要诚挚。
问到有什么offer就直接说,不要藏着掖着,也不要把更好的offer(比如bat的)讲的非常诱人,一副bat我都拿到了的样子(口试官会心想,那你还来口试我们干什么)。再强调口试过程一定要诚挚。除了直接说,老实点之外,也要真的做些思考:对方公司跟之前的offer比上风在哪,比如平台更大?专业技能栈更match?事情更有寻衅力?地点更得当?有机会留用?随便一条符合的都可以讲出来,最少让对方以为你想来面是有缘故原由的并且真的有可能加入。(如果你还提前理解对方公司的文化,可以讲出这个文化自己很认同那就更可以了)
4. 缘分和运气关于这一点只有一句:平时多做好事,热爱生活。 实在都知道口试要讲缘分,讲运气,但人每每可以在很顺利地通过口试之后说句运气好运气好,却很难在努力准备却失落败的经历之后保持沉着。 但不管能不能转运是不是本命年有没有缘分,努力和收成的关系总是多年不变的真理。以是,讲心态,讲实力,讲方法。足矣。
下面是口试的详细过程,包含面经:
按韶光顺序,详细阐述一下我口试的过程,包括面经和心态的转变:(括号里是对问题的补充,如果觉得有知识点的盲区,大家恰好可以去深入学习一下。这里说一下我投的大多是Java研发岗,以是其他措辞的可以忽略java问题)
首先说一点,复习准备一定要早(当然这是说给19届师弟师妹们听的,嗯你们看到这里已经可以开始复习了),有同学去年暑假剑指offer都刷了一遍,然后我竟然今年3月才买这本书。。还有同学前一年冬天就已经去演习了,这种机会也不错。但寒假如果不演习的,一定要进入到学习状态。我准备的就有点晚,寒假完备没看书,真正开始准备,大概是2月中旬号玩了一晚上狼人杀之后。
便是那个时候创造校招就要开始了,然后开始慌了。大概看了一周的书(基本上都是java根本),然后师兄说阿里内推了,心想赶紧投吧要不人家招够了就不招了(后来创造都5月6月了还在招。。),然后就慌匆忙忙投了简历。
这里我要说一点最主要的事情: 一定不要在没有口试履历的情形下先面大厂,或者是你想去的公司。
我是3月1日下午三点半在阿里的官网完善的简历,5点电话就过来了。作为一个java coder,阿里是个很好的平台,(当然C++的岗可以好好准备腾讯),一定还是准备充分了再投,你先面的结果很可能是发急地等一两个月然后被后来准备充分再来口试的人取代。
阿里 3.1,3.2(两面)两天各面了一壁(投的蚂蚁金服,第一天面的就不太好,第二天又把我捞起来面,并且面完觉得就走远了,但当时却没有reject,这就导致之后一个月一贯在流程中,阿里其他奇迹部的师兄师姐没办法把我的简历提走,终极到要笔试了然后变成了rejected)
那个时候便是处于我所说的无知状态,知识点节制的不足牢,简历写的乱七八糟,口试履历为零(这该当是我上学以来的第一次口试),口试技巧就更不懂了。
然后当时两次都觉得聊得很差(尤其是聊算法模型的时候都想自爆了),也根本没有记录面经的想法。以是有些问题我都记不起来了,大概说一下吧。
hashMap的扩容事理,初始有13个,要怎么new?(达到了负载因子,直接手动>>1)
Integer的常量缓存池的问题(-127~128范围有个cache)
ConcurrentHashMap的size()怎么做的(并没有完备加锁,而是先乐不雅观的认为不会有写,通过modCount判断是否变动,这个我当时记不清就用了很多可能、大概、该当这种词,事实证明直接说不清楚会更好)
Spring的AOP关于拦截private方法一些问题.(细节忘却了,当时答得也不好)
项目中数据字典怎么做的缓存,如何做的通信,有没有用什么模块。(说了自己的做法,用的全局的HashMap,然后他会延伸到高并发的场景,分布式缓存怎么做等等,由于没实际操作履历提前也没准备,并且还没有直接说不会,又是用很多模棱两可的语句答得)
讲讲你的论文干系的模型吧(这个其实在简历上根本没写,只是写了数学建模的奖,然后口试官就开始问机器学习的算法,很多都是我没准备的,并且我心想我投的也不是算法岗啊。。。以是说对付简历上的每一条一定要熟习,做足准备,并且碰着简历上没有都扯到的方面,要想办法转移,不要在这耗着)
讲完算法的问题,口试官很尴尬的说了句,你这自己的研究方向你都搞不清楚吗?我当时预感就差不多走远了。。。
其他问题真的太久远了,我当时也没有记面经的习气,以是就没有了。但是最大的感想熏染是面阿里的时候全体人都是紧张的状态,语速特殊快,恨不得把知道的都说出来,没有条理,并且把自己姿态放得特殊低,还在楼道一直走来走去。(对,以上说的这几点全都是不应该的,但紧张缘故原由还是当时准备太不充分,简历方面的准备以及知识点的积累都不足;其余一点,还是要强调不会的便是不会,千万别说大概是,我以为吧这种东西,说的不好很随意马虎让口试官认作不懂装懂,虽然你只是很想向口试官表达点什么,哪怕只是积极的态度)
从阿里面完试开始我的心态基本上就崩掉了,对自己极度疑惑,加上今年诸事不顺,心情直接跌到了低谷。然后全体三月基本上都是阴郁的,全体一个月都没再投内推,每天从清晨起来,大多韶光就在看书刷题,晚上十点回宿舍躺在床上,还要刷两个小时牛客的面经。一个月下来很少说话,提升肯定是有,但是这个过程,实在完备可以用更好的心态去经历。
然后这段极其阴郁痛楚的日子持续到三月尾,一个师兄想帮我内推百度,由于之前由于没信心也错过了腾讯的内推,就心想要不试一下吧。
百度(123面)一壁 3.30 下午两点 45mins
自我介绍,印象最深最费心的项目(这个一套可以提前准备,在某些亮点可以估计抛出等口试官来问)
讲讲项目中的爬虫和优化怎么做的,为什么选用jsoup而没有用python的urllib
说说你理解的反爬虫方法,和针对非常的处理。
那你觉的你来做一个网站要从哪些方面考虑反爬虫。
这里可以提前和学习,纵然你真正利用的只是一点,也可以在干系问题上做更深的理解。 最大略只剖析要求,拦截所有非浏览器的直接要求(可以通过添加伪报头办理);查看refer页做防盗链接(可以改refer项);基于用户行为的策略,同一ip相似要求剖断(代理或ip池,或间隔要求办理);基于用户session的策略(仿照多用户登录办理);封装前端数据,用js渲染天生(通过探取和仿照异步ajax要求办理);对ajax要求进行加密等等方法。
讲讲项目中怎么实现的充值,锁的机制和事务表明,如何担保了事务的同等性。
spring层面干事务和数据库层面做的差异,各自实现办法。
聊了事务的传播性和隔离级别,问了mysql的默认隔离级别(可重复读)
spring中事务传播性怎么配置(xml办法和表明办法,还有关于savepoint的利用)
算法:O(1)删除实行链表结点,做剖析(实在是要指出剑指offer中那个直接copy值的方法的毛病和隐患)
算法:二叉树的最长间隔(递归的思想)
二面 3.30 下午五点 50mins
聊项目(这次是针对项目中的加密算法和安全性做了阐述,大概20分钟吧,之前爬虫那个例子已经说了项目亮点要怎么准备了,这里我就不多说了)
详细聊了聊spring的IOC和AOP思想
关于AOP在spring的运用(比如事务,关照,aspectJ,slf4j的事理,和log4j的比拟)
关于jdk代理和cglib第三方代理(说出对接口代理和子类继续的差异)
用的什么数据库,Mysql。
最大的数据量多大,用了索引没有,怎么用的(聊了前缀索引,对付varchar类型的值,又聊了聊char,varchar,text,blob的关系和差异)。
为什么索引不能随便用,什么时候用(什么时候失落效,什么时候最高效)。
如何达到索引开销和性能的平衡,用了一个表去举例。(方法便是,根据情境看常常做的查询是哪些,然后依次是什么查询条件,担保最高效索引的同时,也担保索引不失落效,避免无效开销,并且根据show profile和explain功能进行比拟剖析)
数据库用了缓存没有,讲讲redis的理解(用作缓存,行列步队,也可做存储)。
redis是单线程还是多线程的,举个例子(做计数器,rank排行榜)
讲讲hbase的事理,CloumnFamily包含哪些,region什么情形做分割,对付版本号这个第四维度的利用办法(一样平常默认三个版本)等等
让我等,说经理会联系我。
经理面 4.12 中午 40mins
经理面实在更加放松,不但是技能方面,还有生活,性情多方面,觉得是个技能+hr的综合面。聊家庭,家乡,事情意愿,爱好等等(聊了十几分钟,觉得都很不错,然后之后的口试也就很轻松了,基本是我在讲他在听)
讲了讲项目的设计,包括非常的处理,数据库设计,通信模型的设计。
讲讲你理解的JVM吧(从内存划分辨到了GC算法、分代思想,CMS和G1 collector,到类加载模型,tomcat的非双亲委派、线程高下文加载器,到JVM调优的策略,gc参数设置策略,如何找去世锁,读快照,创造内存泄露等等吧)
然后说了下部门的技能栈和部门先容,说了部门可能没有留用的hc,问我介不介意(当时还没offer当然说不介意只是希望去学习)然后就说把我简历锁了,之后会给我发offer。
实在到现在我都很感谢百度,虽然末了由于部门和留用hc的缘故原由没有去,但是这次口试收成最大的便是信心。并且经理电话里就给了口头offer,这个让我悬了一个多月的心一下子就放下来了,接下来的几天乃至之后的口试全体人都是放松的状态。(真的很难形容,这种转变就在这一个电话的前后)
以是,实在大家也早晚会有这一天,没必要一贯那么紧张的状态,太痛楚了。(虽然我知道这种话说得大略),其余一点便是三月份确实有了很大的提高,这个见告我们,该逼自己的时候还是要狠心一点。
360(123面)有了信心或者说有一个offer之后,你就会越来越顺利,从这之后的每次口试都会有不同程度的收成。360的流程是走得最顺利的,笔试+口试,三次口试一天完成,但是360的面经可能写得轻微大略一点,由于很多知识点在后面的口试中也涌现了,就没有做过多阐明,腾讯滴滴美团的面经要详细一些。
360一壁 4.12自我介绍加项目
线程池如何优化的爬虫,数据规模
网络时延如何处理
同名影片如何选取,有没有更好的办法。
反爬虫的事理,从低级到高等说一下,分别如何应对
收成了什么
线程进程差异
说下资源方面的差异,共享,不共享
共享的详细哪些资源
jvm内存模型
堆区的特点
数据库左连接右连接,场景
给200个200个数的数组,找到最大的200个
git 常用的操作,git rebase和git merge差异
分布式数据库怎么调用
linux常用命令,查看内存,查看磁盘利用率
360二面 4.12
聊项目,先容下背景,怎么谈的
印象最深的模块及办理,其他项目呢,随着老师做的,还有简历上没写的项目
项目履历还可以那根本怎么样自己以为,
说下jvm吧你知道的,中间会问
jvm详细如下
内存模型
垃圾回收
分代及回收算法
哪些作为gc root
网络器的特点分类
类加载机制和双亲委派模型
几个加载器
tomcat类加载有什么不同,说加载顺序并不是双亲模型,详细顺序说一下
并发把稳什么,线程实现同步的办法,通信
几种同步的差异
悲观锁乐不雅观锁,底层怎么实现的,越详细越好
单例模式的特点,几种实现,随意马虎引发的问题
如何防止内存透露,哪些会随意马虎造成
jvm调优如何检讨内存透露,如何优化gc参数
写sql 查询带日期多次考试成绩表中,每个学生的每门课最高成绩,日期要准确
分别用having子句写和用子查询写
写代码 旋转数组中查找某一个值
360 三面 hr 4.12
这是唯一一篇hr面经,由于我只面过这一次hr,其他的三面要么是技能,要么只是打个电话说说情况,还没问问题就挂了电话(比如腾讯的)。
讲一下项目怎么接的,怎么跟甲方沟通,碰着的最大问题,怎么战胜的
自己的项目和老师的项目和安排怎么折衷。
平时有什么爱好,怎么安排自己的韶光
拍照都去哪拍,喜好什么运动,什么时候运动
为什么选我们部门,其他部门你怎么看
我们是做移动端后台的,喜好玩手机吗
说说常用的app平时怎么用,频率
往后会不会创业,为什么
往后的方案,职业技能和生活两方面
hr面没有太多履历,个人生活爱好这类我觉得便是放轻松聊,方案方向这些可以自己提前准备准备,但是比如创业,offer(之前说过了),代价不雅观一类的问题,实在你也不知道对方想要什么样的回答,干脆随缘吧。
腾讯 (12面)腾讯的口试有一点印象很深,很稽核思维能力,常常会有一些意想不到的问题,或者智力题。挺故意思。
一壁 4.23
上来看了我的简历问我会不会C++,我心想虽然学过,但是好几年不写,还是说不会吧,然后口试官很好,就不问了。
hashmap底层构造画一下,手写代码做一个url解析器,用正则办法和hashMap的数据构造。
识别2的n次方,写个函数。(最快的是用位操作,大家该当都知道n&(n-1)可以去掉二进制最右的1,那2的n次幂&之后便为0)
自己实现http response相应头的构造及解析,用buffer(写个伪代码)
resp头中都有什么(紧张稽核http干系知识)
海量数据找到涌现次数最多的100个(内存不敷的时候可以先做hash分片,末了多路merge,每次操作可以用hashMap计数,也可以自己做hash函数计数)
redis底层实现,zset数据构造(问到了SkipList跳表这种构造)
jvm内存模型,分代,cpu100% 怎么排查(我以为问Jconsole的利用,实在是想问linux性能监测和调优)
用int值表示ip如何做(刚好32位bit一对一映射),写个伪代码做transfer
nio模型说一下
selector中的wakeup什么含义(这个答得不是很好)
select poll epoll (linux内核干系的知识)
arraylist.sort怎么实现的(这个可以看看TimSort的思想)
怎么看待java跟c++(说下差异和自己的感想熏染)
能演习多久(这个好说)
去深圳事情怎么看(这个真没想过,不过当时说也可以吧)
有女朋友吗(…)
二面 4.24
二面实在就两个大问题,但一贯往很深的地方问。
100亿个数找最大1000个(说了分片,用堆,再归并)
问你确定吗?(我一想是最大的1000个不是涌现次数最多的,实在是可以顺序读取,还是用堆实现)
有什么缺陷,分布不屈均(说一下堆的繁芜度由来)
有没有其他思路(用hash散列,计数排序)
这个更慢,还有更快的吗(我心想我平时就都是答得堆啊,怎么这次还有更快的?)
然后讲了基于partition的划分思想(找到第k个开始partition,在左边就在右面递归,在右面就在左边递归,末了确定partition出最大的k个)
这种思想理解了,但最坏情形太差,不稳定,还有更快的吗
是不是要用概率统计学,抽样估计?
说下思想。。
不足精确,还有又精确又稳定的吗?
。。。
那又给你一个数,你怎么快速见告我是不是在这100亿个数中?
这个我知道有可能是想问Bloom Filter,但是详细到hash函数去几个怎么算,怎么判断偏差等细节,我也记不太清了,就说了说思想。
然后进入第二个问题:
一个进程最多申请多大空间(看机器cpu的处理位数看情形)‘
怎么担保进程间数据的安全?线程呢?
安全方面有没有做过一些研究?
登录验证怎么做的,为什么用md5,有没有改进(+salt使md5库难解出),微信用的什么办法- 你知道吗?你想想该当用什么办法?(这里可能是问SSO单点登录的事理吧,可以讲讲SSO JWT token等技能的事理,这个也是我演习之后理解到的,当时答得一样平常)
那说到通信安全,怎么担保http的安全性,幂等性,回调同一个会话怎么标识不同要求,不同- 会话怎么区分(这个每个问题都画图阐述了下)
TCP 3次握手和timewait讲一下事理
讲一下滑动窗口,饱和了怎么处理
http安全吗?https说一下?
get和post要求
linux怎么查看网络状态(vmstat)
查看udp的性能,udp端口多少,什么时候用udp?
为什么tcp弗成?
qq里哪些用的tcp哪些用udp?分别针对每种情形说一下为什么?
可以看到腾讯还是很爱问网络通信、大数据处理的(当然C、C++也很爱问,只不过我说了别问,他们就真没问,当然你做java的也不要期望他们会问你多少java问题)
然后当时并没有hr面,我心想该当是挂了,但是微信的状态又迟迟没挂,结果到了一个月之后五月底我都回家准备入职了(绝对又是补招的备胎),然后打电话问问个人情形(也没说是不是准备给offer),问可不可以去深圳,转C++方向。
当时也有比较好的机会了,并且演习转岗,如果不愿定能留下,绝对是不建议做的一件事,以是就实话实说了。
滴滴新锐(123面)一壁 5.12
说说你对现有Web开拓框架的理解(从各个层入手横向比拟优缺陷,印象中说了SpringMVC和Struts,mybatis和hibernate及jpa)
mybatis和hibernate各自的缓存事理和比较,hibernate的一级二级和查询缓存,还有针对缓存的miss率,置换策略,容量设置和性能的平衡问了自己的理解。
要你设计的话,如何实现一个线程池(就讲线程池的事理,从初始线程数,核心线程数,然后到任务行列步队,满了连续到最大线程数,再满了到饱和策略handler,饱和策略一样平常有哪几种,基本上要理解ThreadPoolExcuter的布局方法那几个参数)
synchronized关键字,实现事理(和Lock比拟着说,说到各自的优缺陷,synchronized从最初性能差到jdk高版本后的锁膨胀机制,大大提高性能,再说底层实现,Lock的乐不雅观锁机制,通过AQS行列步队同步器,调用了unsafe的CAS操作,CAS函数的参数及意义;同时可以说说synchronized底层事理,jvm层的moniter监视器,对付方法级和代码块级,互斥事理的不同,+1-1可重入的事理等)
算法:手写一个ArrayList类,实现add,remove,等基本的方法(紧张考扩容的事理和实现,重点写出扩容机制以及扩容时的copy过程)
然后让对这个ArrayList进行改进,使之可以应对并发的场景
算法:手写字符串的正则匹配,实现和.的功能,用的递归(写了一半他说韶光差不多了,思想大概理解了)。
二面 5.12
说说你认为项目中技能最薄弱的一个地方(答了IO网络监控和通信模块,短连接性能太差)
举例说说在什么情形下会涌现性能瓶颈,如何优化(答了用NIO的办法)NIO的事理,jdk中有哪些工具和类去实现,如何实现(selector和channel的用法),真的好用吗?还可以用什么?(口试官该当是想问netty,由于没有实际用过,只能给他讲了netty的事理)
那来说说AIO吧,和NIO什么差异(对异步的理解),AIO在工程中如何实现的?(大概说了下ajax的回调函数),又问回调函数详细是怎么实现的(通报函数指针)。
然后借着异步IO想问行列步队,讲了一下几种模型和事理。(口试中没有用过没紧要,只要你懂事理还是可以跟口试官讲,最少可以证明你是爱学习的)
项目中非技能上的困难(和甲方沟通需求,没有规范化的项目设计,需求变更太频繁等),问了我办理的方法还有往后希望怎么改进。(变相问互联网公司里面各个team以及需求方是如何互助和分工的)
讲讲Spring中怎么对初始化的bean做其他操作。(这里有三种办法,@PostConstruct表明办法,init-method的XML配置办法,InitializingBean接口办法)
三种实现上有什么差异(还好看过点源码,实在前两种是一个意思,都是通过反射的办法用aop思想实现,可以肃清对spring的依赖;接口办法是直接调用afterPropertiesSet方法,效率更高点。spring加载bean时先判断接口办法,再实行配置表明办法)
算法题,一个先减后增的数组,查找目标值。(这里并不是查找最值,也不是剑指offer上的旋转数组,但是思想上也可以用二分的办法)
算法题,两个大数求和,要按高到低位的输入,实时输出结果的对应位,空间O,韶光O(n),不借助工具类。(要考虑实时的进位标识,以及多个9之后的连续进位标识)
两面完了电话让去参加新锐的现场终面,很有诚意地报销了所有的花销。新锐的三面还是有难度,基本上围着算法在问。
三面 5.12
算法:int范围的随机数的阶乘编码实现。(这个题如果直接按最大略的算法题肯定是弗成的)
1.首先考虑要用字符串做运算(由于中间数太大了,只有String能保存,当然你可以借助BigInteger或BigDecimal类去赞助实现)。2.阶乘直接打算代价太大,循环太多,考虑设计中间缓存。(正常算繁芜度太高,本身便是阶乘级的,以是正常想到用韶光换空间)3.只用空间换韶光的话缓存也不能覆盖全部,如果把所有的中间值保存,空间是eb级别,不现实。(这里就要达到一个空间和韶光繁芜度的平衡点)4.存部分中间值用部分空间换取韶光,达到空间繁芜度和韶光繁芜度的最优平衡。(开始说的二分做分割存储之后改为等间隔做分隔存储,间隔选取多长为好?我以为要首先确定空间繁芜度的接管极限,然后尽可能减小韶光繁芜度,由于空间繁芜度是可以有预估值的,而韶光繁芜度当然我们是希望约小越好的)
(这里说一下,我并不是一开始都想到了,只是口试官一贯在提示我思路,给我韶光思考,没有否定过我)
由于头一次手写白板,返回类型有缺点,口试官说你这个编译器会提示什么?
又问了非常体系,checked unchecked虚拟机事理怎么做。
阐明下iaas.paas.saas和之间的关系,外呼接口和做事怎么调用的。
数据库主从备和读写分离事理,ibatis怎么配置。(这个只讲了数据库层面的事理,比如监听线程,主机和从机的同步办法等,但是详细代码层面的配置,由于没亲自做过,就说不太知道。)
算法,股票最长增长区间,优化
算法,最长递增子序列,一个dp数组一个max数组,最优情形
ps:这个口试官该当是口试过程中碰着最nice的一个,也是我现在的老大。实在口试除了自身的成分也有口试官的成分,一个好的口试官不会随便地否定和质疑你(当然有专门压力面的),而是可以让你在放松的环境下,挖掘你真正对付一个方面的深度和理解。末了的十几分钟他并没有问我问题,只是在跟我谈天,他跟我说不管是哪个公司,真正的发展还是跟部门的方向和蔼氛有关系,选择的时候不要只看公司,做的业务部门方向和leader才是该去理解和考虑的。作为应届生很多时候不那么理解,这就要靠我们(指口试官)多去理解你想发展的方向。然后聊了很多发展路径和方案的事。
真正演习到现在一个多月,深深以为口试便是口试,很多知识和题目都是可以准备的,而事情中面对各种情形办理问题的能力和办法才是更主要的。为了口试准备了很多,事情了创造要学的东西更多,我们真的还有很长的路要走。
美团(123面)1面 1hour 5.26
java根本,从头到尾问了个遍,都是大家准备的,但是也挺深的,包括:
hashMap,红黑树处理冲突,jdk7和jdk8有什么差异
JUC干系的凑集,ConcurrentHashMap jdk7和jdk8的差异,Collections.sort函数jdk7 和 jdk8 分别怎么实现的。(总觉得这个口试官在某段韶光肯定纠结过两个版本)
CopyOnWriteList底层是什么,适用的情形,vector的特点,实现的是List接口吗。并发的问题,线程间通信三种办法
锁的膨胀过程,Synchronized和Lock的差异,底层的monitor实现和unsafe类的CAS函数,参数表示什么,寄存器cpu如何做)
volatile cpu和寄存器层面是怎么实现的。
线程池布局函数参数,各种类型的预设池各自的特点,ForkJoinPool是怎么实现的,多线程等等问了一个遍。
为什么匿名内部类的变量必须用final润色,编译器为什么要这么做,否则会涌现什么问题数据库:
索引的分类。
主键索引和普通索引的差异,组合索引怎么用会失落效。
索引的前缀匹配的事理,从B树的构造上详细剖析一下。
聚拢索引在底层怎么实现的,数据和关键字是怎么存的。
组合索引和唯一性索引在底层实现上的差异(这个是全体一壁觉得答得不好的一个问题,不太明白口试官想问啥)
sql的优化策略,慢查询日志怎么操作,参数含义。
explain 每个列代表什么含义(关于优化级别 ref 和 all,什么时候该当用到index却没用到,关于extra列涌现了usetempory 和 filesort分别的缘故原由和如何动手优化等)
show profile 怎么利用。
2面 1hour 5.27 (由于这一壁问得很深,以是到现在都记得很清楚)
一个url到页面全过程(让我能说多详细说多详细,最好从OSI七层的每一层去扩展)
http的要求头格式(这个真的记不太清了,只说了几个有印象的标志位)
getpost差异,post可不可以用url的办法传参。
说到了url有最大长度,就问长度有限定是get的缘故原由还是url的缘故原由,为什么长度会有限定,是http数据包的头的字段缘故原由还是内容字段的缘故原由,详细解释。(在他一步步追问下答了个差不多)
关于幂等性的详细先容。
幂等性是http层面的问题吗,还是做事器要处理和解决的内容。(便是看你对幂等性的定性是怎么理解的)
后台做事器对付一个要求是如何做负载均衡的,有哪些策略,会涌现什么样的问题,怎么办理。(说了同等性hash算法,分布式hash的特性,详细的运用处景,又非要问我知不知道这个最早在哪个公司利用的…我说这个真不知道。彷佛是amazon?)
说说http的缺陷,无状态,明文传输。
那https是怎么做的,如何实现的?ca认证机构。
然后问我https ssl tcp三者关系,个中哪些用到了对称加密,哪些用到了非对称加密,非对称加密密钥是如何实现的。(还好我项目中涉及到了一些加密)
关于加密的私钥和公钥各自如何分配(客户端拿公钥,做事器拿私钥)
那客户端是如何认证做事器的真实身份,详细解释一下过程,包括公钥如何申请,哪一层加密哪一层解密。
java的优先级行列步队,如果让你设计一个数据构造实现优先级行列步队如何做?
用TreeMap繁芜度太高,有没有更好的方法。hash方法,但是行列步队不是定长的,如果改变了大小要rehash代价太大,还有什么方法?
用堆实现,那每次get put繁芜度是多少(lgN)(思想便是并不一定要按优先级排队列的所有工具,繁芜度太高,但每次担保能取最大的就行,剩下的顺序不用担保,用堆调度最为得当)
在线编程题:敲一个字串匹配问题,写了常规代码。问kmp的代码思想,末了问了下正则中用的改进后的BM算法。(还有个比较新奇的Sunday算法,有兴趣的同学也可以看一下)
3面 hr
实在写了3面,觉得根本不算口试了,便是随便先容了下部门,然后商量演习韶光(大概补招都这样吧)。由于已经决定去滴滴新锐了,就跟她说可能暑期不能演习,然后说可以秋招再联系。
其余美团这家要跟师弟师妹们说一声,投简历一定还是要选奇迹群的,千万不要选都喜好,否则就算过了笔试,也会像我这样等两个月大概是补招才会联系到你。
写在末了实在大家可以从这个过程中看出来,随着韶光的推进,自己的知识储备和各方面的履历和能力都是上升的。
总结几句:
对自己要有个定位
准备永久都不嫌早不嫌多
心态差了及时调度
口试挂了及时总结
这么多年也该逼自己一把了
一两次乃至一系列的失落败并不可拍,成功之后反而没有失落败总结得透彻,收成的多。失落败的经历会让你不断提升能力,成功的经历会让你不断提升信心。而不管成功失落败都会提升你的履历,都会有收成。
以是不症结怕失落败,由于早晚会成功。
愿大家都能拥有满意的结局。
公众年夜众号作者乔戈里亲历2019秋招,哈工大打算机本硕,百度准入职java工程师,欢迎大家关注我的微信"大众号:程序员乔戈里,"大众号有3T编程资源,以及我和我朋友(准入职百度C++工程师)在秋招期间整理的近200M的口试必考的java与C++面经,并有每天一道leetcode打卡群与技能互换群,欢迎关注。
等等,先别走!
[程序员乔戈里]公众年夜众号又有活动了!
参与活动,不仅可以培养自己良好的习气,还能拿到“现金红包与书本褒奖”,动作要快,姿势要帅
福利一
双11到了,媷一波苏宁的羊毛,新用户可享受满30减30的优惠券!
!
!
只需打开下方链接,输入手机号即可领取,帮
复制下方链接领满30元减30元无门槛优惠
http://t.cn/EAJAV5U
福利二
戳我看详情
今日问题:
看了往后,你有什么感想熏染?
留言格式:
打卡xx天,答:xxx