从今年5月份就开始面试了,面试了几十家公司,其中有几十个人的小型创业公司,也有几百人的上市公司,踩了不少的坑,最后收到了宝能集团的offer,我也决定就去这家了。
看过很多别人的面试分享经验,这里我也做一些面试的分享吧。
首先,提前要求自带简历的一般都不太靠谱,特别是小公司要求自带简历,一般都是hr不专业,不想提前把你的简历打印出来,或者说不想为了你浪费几张A4纸,所以这种公司可以直接pass了,除非你特别缺offer,生存都成困难了。
其次,可以提前问一下hr面试流程是什么样的,现在很多公司都取消笔试了。众所周知笔试没有人监督你,所以可以掏出手机(虽然我没做过,但是面试看见其他人这样做过),所以我觉得笔试作用其实没多少。如果有公司是明确要先笔试,笔试通过再进行面试,而你面试的不是应届生岗位,就要小心了,先考虑一下那家公司过去面试距离远不远,提前去看准网看一下相关的评价,再考虑要不要去面试的事。我之前面过两家都是需要笔试的,笔试没通过是直接没有后面的面试的(有的面试题非常脑残,下面上图),来回也比较远,浪费了我一个上午的时间。
面试的时候99.99%的公司都会让你做一下自我介绍和最近做的一个项目,所以自我介绍和项目要提前打好草稿,特别是不太会说话的。
我觉得简洁一点就行了,一般面试官都会趁着你自我介绍的时候看简历,也没认真听你做自我介绍。
下面是我自己打的草稿:
面试官你好,非常荣幸参加贵公司的本次面试。下面我简单的介绍一下我的个人情况,我叫凌霄,xx年毕业于xxx学院xxx专业。目前在xxx公司工作,主要是从事xxx开发。 通过xxx招聘平台关注到贵公司岗位的招聘信息,这个职位比较符合我未来的职业发展,而且贵公司的业务对我都非常有吸引力,非常希望能够进入贵公司发展。
我对技术有浓厚的兴趣,专业知识面宽,技术也相对全面,责任心强,思路清晰,沟通能力好,熟悉JAVA体系, 对各种开发流程和主流架构模式,设计模式和UML,有较强的需求分析、架构设计、项目管理能力,并有丰富的实战经验; 出于对工程师文化的向往,我在研发团队管理期间,尝试了多种方法去建立良性的团队氛围,并有效的改善了研发效率; 技术是为产品支撑的,所以我现在也在熟悉产品设计过程,希望可以结合公司发展战略,营销策略,跟着团队打造出一个好的产品。
上面的可以适当简化一下,能说出来多少取决于你的记忆力。
如果你在学习Java或者准备面试,可以点击一起提升 Java面试刷题、技术提升讨论
这个是真的要提前准备好说辞,不然你面试的时候边想边说,说起来磕磕巴巴的,你给面试官的第一印象就不好了,至少说明你的表述能力不强。
介绍项目的话可以不用太紧张,面试官才拿到你的简历看多久,所以肯定是对你自己的项目是最熟悉的。需要注意的地方就是不要只讲一些业务相关的,面试官不需要知道这些,他只关心你的技术能力是否足够,通过你的描述知道你使用了什么技术,再根据相关的技术进行提问。
贴一下我的草稿:
我在xx公司做的xx系统,客户主要是xx,项目的功能主要是提供代理雨伞,代理快递,代理订餐,图书借阅等服务,后台用的是主体架构是使用Spring Cloud,微服务模块划分为xxx,我主要负责其中xxx几个模块的开发, orm用的是mybatis,数据库是用的mysql,缓存是用的redis,前台用到了vue技术。共有xx个同事参与开发,整个项目持续了xx时间。
面试官会对他感兴趣的点进行提问。
让我想起小学时经常写的作文:最难忘的一件事。这可真是太艹了,没想到小学学的知识现在派上了用场。
项目中遇到的难题,解决了之后其实都不是什么难题了。我列几个点可以参考一下:
当然最后还是要自己的专业技能扎实,才能获取源源不断的offer。
接下来分享一些这段时间的面试公司
腾讯云全资子公司,其实就是腾讯云的外包公司
第一次面试,尴尬的是我基本上没打上来,只回答上了springboot原理,居然还叫我去hr面,要把这个岗位确定下来,我拒绝了。
上市公司,原来叫做建研集团,做建筑相关的工程。
你用过SpringBoot的哪些注解
Spring的Bean默认是单例还是多例,我想改成多例的怎么办
项目中用到了rabbitmq,使用中遇到什么问题
rabbitmq重复消费怎么解决,除了数据库里查记录还有其他什么方法
分布式锁怎么实现,redis实现方式死锁怎么解决
我:数据库实现,redis实现,zookeeper实现。redis加上一个失效时间
mysql索引怎么实现的,btree索引有什么特点
现在有一个联合索引(A,B) 我有一个sql语句是
select xxx from xxx where A=xxx 会用到索引吗
select xxx from xxx whereB=xxx 会用到索引吗 为什么会是最左匹配原则
ArrayList实现了哪些接口
说了List、Cloneable、Serializable,我觉得他应该是想问RandomAccess接口,当时没回答上这个
代码优化怎么做的
nginx怎么配置负载均衡
闭锁怎么用,什么原理
二分查找法,时间复杂度
自我感觉回答得不是很好,但是第二天收到了复试邀请,还挺惊讶的。
复试先是做一套性格测试题,然后就是项目主管来面试我,问了一下毕业学校,为啥学校挺好还是科班出身,为啥毕业会进小公司。然后问了下我现在的职位级别,接下来就巴拉巴拉开始夸他们公司。
然后就是cto面试,也没问技术,就问了问家里的情况,未来职业规划,然后说他是从华为出来的,公司实行狼性文化,加班是经常的。正题来了,他说待遇是不会高于我上家公司的,但是进他们公司未来的发展肯定会很好。我就有点不太舒服,就叹气嘛,然后他说我唉声叹息比较悲观,进公司会影响其他人,他需要的是一个时刻保持乐观的人,能给团队带来活力。
我整个人都傻了。
中国民航的子公司,是一家国企。
先要提前一天做一套线上笔试题,不管有没有通过,第二天都是要去面试的。
主要是项目相关的,业务上的东西问得多
代码优化
mysql优化
jvm内存模型
spring cloud用过哪些组件 讲讲熔断机制
为什么离开上家公司
不是很难但是没有offer,心态崩了。
做人脸识别相关的,和我上家公司做的产品差不多。
Hashmap原理
ConcurrentHashMap原理,为什么多线程条件下性能这么好
我从sync在1.6做的优化谈的,他从锁的粒度方面谈的
项目相关
代码优化
mysql优化
spring的aop怎么实现的
每天抓拍的数据量比较大,有做过分库分表吗
用的shardingjdbc 还有mycat,中小公司一般用shardingjdbc,
Rabbitmq实现原理
不知道
后面两个没有回答好吧,所以没有后续了。
这家应该是要找做全栈的吧,开头就问我好几个前端相关的,我直接懵了,理所当然的没有后续了
用过jquery哪些框架
es6语法熟悉吗
vue用过哪些组件
spring用过哪些注解
使用@autowired注入的时候,如果这个接口有多个实现,怎么指定注入哪一个的实现
eureka搭过集群吗
mysql优化,什么时候不会用到索引
select *,可能会导致不走索引
where后面有函数运算,导致不走索引
索引不适用于隐式转换的情况,比如你的SELECT * FROM T WHERE Y = 5 在Y上面有一个索引,但是Y列是VARCHAR2的,那么Oracle会将上面的5进行一个隐式的转换,SELECT * FROM T WHERE TO_NUMBER(Y) = 5,这个时候也是有可能用不到索引的。
like查询使用通配符开头不会用到索引
但是这些好像不是他想要的答案,我也猜不透。。
接受长期出差吗
做互联网金融的,公司总部在北京,我面试的时候是在成都的新网银行公司,看这个模式应该就是驻场开发了,但是公司本身不是外包。
这次面试回答得挺好的,hr也打了好几次电话说面试官对我挺有意向的,就是一顿操作猛如虎,一问工资0.9。而且我当时还是在职,要求我一周到岗,我就没去。
做海外电商的公司,但是进去之后是做一些小系统的开发,问的问题有点像校招一样,我是应届毕业生说不定能答出来。
朋友内推的,听他说是稳了,去面就能过,结果还是翻车了。
java特点描述一下,继承封装多态分别是什么意思
synchronized和lock区别
ConcurrentHashMap线程安全怎么实现的
创建线程的几种方式,创建线程池几个参数的含义,线程饱和策略
sleep和wait区别
spring是单例还是多例,多线程并发会出现什么问题
SpringBoot如何解决跨域,具体怎么配置
全局异常捕获怎么做的
SpringSecurity的前后端分离,登录怎么做的
我:拦截登录的url,然后获取到用户名和密码,把这个用户名和密码交给manager,manager会交给具体的provider处理,provider会调用UserDetailsService的方法完成验证。
这里是我失误了,他说用户名和密码时通过getattribute 获取到的吗,我说是的。
怎么设计一个安全的对外接口
单线程的redis为什么这么快
redis持久化方式
什么是聚簇索引,什么是非聚簇索引
mysql事务隔离级别
你觉得你能承担独立开发的任务吗
其他问题回答得挺好的,自我感觉不错,本来以为能收到offer的,但是朋友说那个面试官觉得我不行,不能承担独立开发系统的任务,估计是第8个问题回答失误了吧,其他我觉得我回答没有问题。
面试的人比较多,所以是群面,一个面试官对应多个面试者。虽然我回答得比另外一个面试者好很多,但是没有收到offer,很迷,真的很迷。
海康下面的一家分公司,主要做车辆交通相关大屏数据统计报表之类的,面试官和我一个学校的学长,开头就问我是哪个老师教的,吓我一跳哈哈哈哈,我以为给老师丢脸了。
过程还是挺愉快的吧,就是薪资待遇没有谈到位,比较可惜。
一家做共享充电宝的公司,面试官又是和我一个学校的学长,但是没有给我放水,很生气。
问题:
最后问了一些学习相关的建议,收获挺多的。
外包公司,给平安做的一个项目,电话面试,外包都喜欢这种方式。
外包不是很好进吗,但是我没有收到offer。
面完问了一下期望薪资,然后约了二面,二面就简单问了一下项目相关的,平时怎么学习的。三面就是hr面,给我发了offer。
如果各位以后有机会面试别人的话,希望对面试者多一些尊重吧。
以下是一些翻车面试,有些公司真的把我心态搞崩了,导致后面的面试都没有发挥好。
公司很小,面试官架子不小,面试全程非常不愉快,经常在我说到一半打断我,挺会嘲讽人的。面试的时候没有空间了,然后在外面靠近电梯的走廊面试的。
因为我的项目是做人脸识别相机相关的,然后他问我图片处理到算法识别经历了什么过程,我是直接调算法,最多把jpg格式的图片转成bgr格式,或者图片有旋转的,通过exif修正旋转。但是我的回答好像不是他要的,然后就直接打断我,说我不知道就直接说不知道
rabbitmq用了哪些设计模式。发布订阅模式,还有其他的吗,我不知道,有知道的朋友可以告诉我一下
tcp/ip协议
让你设计eureka,你怎么设计
乐观锁,悲观锁介绍一下
我:乐观锁实际上没有加锁
然后他就直接打断我了,发出一声嘲笑,问我:那你觉得什么是锁。
jvm参数调优怎么做的
我回答的是用的微服务部署,有的微服务访问很频繁的,就多给他设置一些内存,比如网关,一些不怎么用到的,可以设置稍微小一点。然后他说:你们这就是全凭感觉瞎设置呗
哎,面完之后心情低落了很多,难受了一下午,开始质疑我自己。
Boos直聘上标榜的上市公司,我去面试的时候顶多就看见5个人在公司,办公区域很空旷很安静。
项目介绍
挑出你在项目里做的一个模块,谈谈这个模块的整个设计
这个我真不知道怎么回答,你说整个项目怎么设计的我还能画个架构图啥的给你瞅瞅,但是你这说到具体的模块设计,我不知道怎么说,最多给你说说数据库怎么设计的
项目并发情况
你这公司规模还问我这个,不合适吧
听你说对linux比较熟,环境搭建过吗(tomcat之类的),有没有遇到什么问题
搭环境都成为一个技术点来问了嘛,反正我现在用docker了。
nginx你们一般做什么,正向代理一般用来干啥
你会前端啊,说说vue用history打包之后,部署到服务器,nginx需要配置什么
说说你的优点
假如你最近加班很累(你已经很累了,要猝死了),但是项目比较急,你想请假怎么跟领导沟通。
第一次见到这样问问题的兄弟,挺有新鲜感的,其他公司翻来覆去的就是那几个问题。就是浪费了我的简历,打印一次一块钱,你还在我的简历上涂涂改改,我都不好意思要回简历了。
java的序列化和反序列化什么含义 生成的serialVersionUID有什么用
yml文件里有一些属性,怎么获取这些属性
有一个枚举类,有很多value和code,然后yml中的一个属性对应这个code的值,怎么通过code的值获取到这个对应value
我想说循环判断,但是觉得没这么简单,所以沉默了半天。。。。
然后他说枚举类里面有一个方法valueOf
啊这,是他没表达清楚还是我理解错了?
final干嘛的,如果有一个final Stirng a = "123",后面还可以改变吗
一般io操作会捕获异常,然后在catch中释放资源,有更简单的办法吗。
有一个list,给它按照类里的一个属性排序
有个string数组,里面有些空的值,我想去除空的,怎么做
线上有个接口速度慢,但是本地测试环境和线上环境是一样的,数据量也是一样,接口速度却很快。怎么排查
不知道
面了这么多家,他家是第一次把我问的说不上话的,是电话面试。
java的继承和多态讲讲,继承在项目里面是怎么使用的
在项目里怎么用我不知道怎么回答
说一下泛型
泛型提供了编译时类型安全检测机制,该机制可以在编译时期就检测到非法的类型,避免了运行时的类型转换异常。可能不是他想要的答案?我不知道他想问什么,他说算了下一个问题。
设计模式,说说简单工厂模式和抽象工厂模式怎么实现的,区别
我不知道怎么描述他的实现,不知道各位能不能口述出来。我语言表达能力真不行
java8新特性,讲讲用过stream里的哪些东西吧
mysql优化
说了一堆,然后说sql操作尽量使用预编译语句的时候,
他说:不是mybatis已经解决了嘛。。。哎
redis项目里怎么用
作用是支撑高性能高并发,然后在项目里具体怎么用的说了下。
他:一句话的事儿:不就是做缓存的嘛
坐车坐了两个小时,然后去面试先hr面,了解了基本的情况,然后没了。
我还是请假坐车2个小时过去的,hr没有提前了解我的基本信息就给我发面试邀请了吧,然后过来面试才觉得我不合适,所以直接就没有技术面试了。
就是最开头说的那家,招聘网站上常年挂着招聘岗位,起码挂了快一年。过去先是做了一套笔试题,满分100,60分及格,没及格就没后续。
同样是做了一套笔试题没有后续了。因为我发现有一个题有问题,然后留空白。
前一天电话面试,自我介绍之后,问了一些技术问题,然后就让第二天到现场面试。
现场的话,整个公司人员不超过10个人,本来想走了的,想着来都来了,进去坐坐也无妨嘛。结果这是我做的最后悔的一个决定。
整个面试体验非常差,面试官先是让我自我介绍,我前一天已经在电话里做过自我介绍了,不知道这是什么意思,面试中途还接了几个电话。然后就问登录怎么设计的,前端密码怎么传输过去的,明文还是加密,我说前端加密没有必要也没意义,最多加上https,他说加上https没用,就是要加密传,我就在思考怎么回答他的时候,他说这是面试,请你尊重这次面试(说话语气带了点怒火,感觉要骂人了),我也不能忍啊,直接起身就走了。
我觉得这不是一个中级开发工程师甚至高级开发工程师能做的出来的,但是面试就是要问。死记硬背考记忆力呗,只要记住其中几个常用的配置就行了。
堆大小设置
收集器设置
调优总结
年轻代选择
响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。 吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。
年老代选择
响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。
分为三个维度来谈,可以稍微拓展一下:
六大设计原则
单一职责原则
接口的单一职责,一个职责一个接口,我们对外公布的是接口,而不是实现类,所以不需要过度关心实现类是否遵循单一职责,生搬硬套单一职责会引起类的剧增,给维护带来非常多的麻烦
里式替换原则
只要父类能出现的地方我子类就可以出现,而且调用子类还不产生任何的错误或异常,调用者可能根本就不需要知道是父类还是子类。但是反过来就不成了,有子类出现的地方,父类未必就能适应。里式替换原则包含了四层意思:
依赖倒置原则
依赖倒置原则的本质就是通过抽象(接口或抽象类)使各个类或模块的实现彼此独立,不互相影响,实现模块间的松耦合。我们在项目中使用这个原则要遵循下面的规则:
每个类尽量都有接口或者抽象类,或者抽象类和接口两都具备
变量的表面类型尽量是接口或者抽象类
任何类都不应该从具体类派生
尽量不要覆写基类的方法
接口隔离原则
客户端不应该依赖它不需要的接口,客户端需要什么接口就提供什么接口,把不需要的接口剔除掉,对接口进行细化,保证其纯洁性。通俗的讲就是:建立单一接口,不要建立臃肿庞大的接口。
迪米特法则
一个对象应该对其他对象有最少的了解,通俗的讲,一个类对自己需要耦合/调用的类应该知道的最少,这个类内部是怎么复杂、怎么纠缠不清都和我没关系。尽量不要对外公布太多public方法和非静态的public变量,尽量内敛,多使用private、package-private、protected等访问权限
开闭原则
类、方法对于扩展是开放的,对于修改是关闭的,在程序需要进行拓展的时候,不能去修改原来的代码。
24种设计模式
单例模式
工厂模式
建造者模式
观察者模式
有观察者和被观察者,被观察者接口:增加观察者、删除观察者,通知观察者更新 观察者:被观察者发送消息了,我自己也要做些什么
责任链模式
适配器模式
十家公司有九家会问,这个必须要记住。基本上只要记住我写的这些,面试基本上稳了:
必考题,抽时间看看深入理解jvm虚拟机吧。
面试和工作是两回事,面试没通过的人,工作能力不一定比你弱,面试通过的人,工作能力不一定比你强。所以面试没通过也不要灰心,回去好好总结复盘,不要因为失败就丧失斗志,加油!