一份来自一月寒冬互联网一线的面经(附面试题)

1.背景:

因为公司变动,lz不得不出来看看机会, 面试的岗位主要是后端,历经三周,面了北京大大小小的几家公司,最后收获了满意的offer。

自己也成长收获了不少, 谨以笔记,自己可以日后回忆,也希望能帮助到最近寒冬下需要找工作的同学,在文章的后面会附上一点小心得和建议。

 

2.level

我是16年本科毕业, 算上实习接近2年半-3年的工作经历吧,一直做java后端。  自己定位大概能到p6+的水平。有大厂经验,本科211, 所以面试机会总体来说还是挺多的。

 

3.过程

大概是从元旦过后开始写简历,投简历,从7号开始陆陆续续面了若干公司, 有好有坏,以表格形式记录如下,以我面试的时间排序。

声明:虽然博客没有什么人看,但是如果您认为记录有不实或者伤害到下述公司名誉啥的, 直接联系我删除即可。

有朋友建议我省掉公司名,我就用某代替吧。

公司 部门  渠道  结果  感受(办公环境,面试难度,感受)
 

某信银行

 

DevOps

Boss

 4+0,拿到offer.

(4技术面 0hr面,下同)

 某信的位置和办公环境都很不错,位于安贞门。

面试官人很nice,没有多余的操作, 并且友好地帮我倒了一杯水。

主要针对简历中的项目,以及java基础进行面试。

难度也是循序渐进, 说实话因为是第一家面试, 我确实很多地方没有准备好,但是还是感谢面试官给我机会。

感受:之前感觉银行可能比较水, 但是感觉各方面都挺与时俱进的, 待遇和人文也很有竞争力。 某信应该有大几百人的研发团队,各方面应该都不输于D轮的互联网公司。 总体是比较赞的。

 某动    Boss  线上笔试

 3道Codility,英文,大概3h限时, 我应该1h就写完了,用例跑通我就提交了,但是只有一道题ac。(很奇怪,也没有错误用例的提示,和LeetCode有些不一样)

 然后hr还是让我去面试, 我拒绝了,可能是我当时已经对这家公司没有太大兴趣了。

某见科技    Boss 笔试+面试

一家AI创业公司, 看jd介绍不错就去了。 最后发现是在一个很偏,有点破的创业园,里面环境有点像家乡的网吧。

笔试3道很简单的题, 面试也没什么深度,面试官说实话感觉水平比较一般。

总体技术和互联网差别很大, 我当时也是抱着练手的态度过去。 所以也没下文了。

 某vo  金融 Boss   视频面试

 1面视频面,难度循序渐进,两位面试官提问。 面试官说第二天hr联系我,结果也没联系。我也没问了。

主要是因为某vo在深圳,我在北京,可能我也不是很想换城市,后面投的都是在北京了。

 某团  --  Boss 3+0 拿到offer 

某团的环境感觉就是标准的互联网风格,

面试官也很务实友好, 难度循序渐进,二面会问一些底层,并发的理解。

某团无论是从技术沉淀还是我面试团队的潜力, 都是我很心仪的。

很幸运也给了我一个不错的定级和待遇。

 某米  某品  Boss 2面撤了

 说实话,我开始是不想投某米的,但是考虑到我是湖北人,可能回武汉。

但是!!!我面试之前应该在脉脉上搜一搜这个部门的。

这个部门位于清河一个挺偏的地方, 周围仿佛回到了18县小乡镇。

面试官也是low爆炸了,一面面试官穿了一个脱鞋,让我在楼下等了20min,前台态度也不好。

然后竟然去了一个茶吧台面试。不过一面面试官总体态度还行。(某米不提供饮水,面试官带我去饮料机买了瓶汽水,当然是我自费,从某米出来我就有了带水的习惯了。)

二面简直是个活宝,上来站着问,你懂hashmap吗, 我简单答了一下数组+链表,然后按理应该往碰撞,或者并发的方向继续问, 结果坐下,抖腿,问什么抓包的原理,然后扯的乱七八糟的。 最后憋了一分钟吧,出了一个很无聊的题(LeetCode第十题)。 我实在不想浪费彼此时间,就直接走了。

某米本身在我心中还是个挺有态度的公司,和雷某总也是老乡。  哎,真是刷新了我的三观。

 某脉  效能  Boss  2+1

 某脉我觉得公司和产品一样nice, 位于768,环境很安静。

hr笑的很开心,面试官也很有礼节。

他们主后端是用python, java主要做一些离线和效能的工作。

因为第一天3面面试官不在, hr让我第二天过去, 但是由于面试过程中了解到是去做效能平台,财务平台。

秉着发展的考虑,我还是拒绝了。 

但是我还是推荐某脉, 小而美。

 某某跳动  某告  猎头  3+1,拿到offer

 面完某米之后,我觉得我不能在小公司上面浪费时间,同时也有了某团的offer。

于是我把其余的面试都取消了,只剩下了某条和某里。

某条办公环境,位置都很好。 每层都有食堂(请我吃了一顿,很好吃)

同学们给我最大的感受是 年轻,有活力,友好。 还有就是真的忙。

我身边已经有陆陆续续不少同事选择了某条了。

面试难度其实没有传说中的那么难, 不至于手写红黑树,但是基本的数据结构和算法要熟悉,每一面都会写算法。

hr感觉也很尽心尽责。

某某巴巴 某学 Boss 3+1

某巴巴的面试总体有点失望,首先hr没预约会议室,导致在休息区面试。 也没有茶水,虽然我自带了。

然后是办公区到处都是屏幕,循环着某云的创业视频。

三面面试中规中矩。

某学本来就不是我投的部门(我投的u某c,不知道咋流过去了,然后让我面试,我也想试一试吧,然后hr说我某蚁简历没过,可我压根没投过)

某里最难的是hr面,  一个hr非要充当心里学家,问你人生高潮是啥, 非常没有礼貌,说话直接打断,也没什么信用,感觉这群hr把某里搞得乌烟瘴气。   特别是hr套路很多, 面完了说没有hc,hc要审批(那你喊我来干嘛) ,然后我有很优秀的同事面过了 (其实也一直拖着没给offer),我说有人拿offer了 ,hr又说人家面的早。让我感觉她就是在刷kpi啥的。

反正这个部门我是不建议去了, 周围拿到某学offer的同事也打算拒了再看看。

某马逊 物流仓储 Boss 还没面  

 

4.总结及建议

1.一定要提前准备好,刷一定量的题,特别是现在各大公司都有自己的招聘系统,如果一面就挂了,可能直接就拉黑,后续面试就更难了。

2.关于刷题,大概刷完剑指offer上面的经典题, 或者leetcode前100道应该就够了,我建议有选择的刷,主攻排序,链表,大文件处理这些面试高频的,也有意义的。

3.关于练手,我觉得不要有太大的心里负担, 你去一般公司面试,对于公司可能是一种匹配,但是对个人可是一次很好的自我认知反省的机会,甚至会改变后续的很多结果。

我们结合对行业的了解,如下公司可以说小而美(其实也是大独角兽了),本身就值得加入,面试也有很多收获: 某辅导,某脉,某探,瓜某,某vo互联网。

当然拿大厂的边缘部门练手也未尝不可,就是有风险有记录。

当然也有一些黑名单,面试官迷之自信,态度傲慢,技术浅显, 建议大家面试前脉脉一下。。

最后一棒子打死,感觉位于清河的公司,可能都不太利于个人生活和发展。

4.关于基础,我在下面附上一些前辈整理好的url。一定要夯实打捞。

5.关于面试礼仪,我觉得面试礼仪是衡量双方的重要标准, 面试者要注重自己的仪表整洁,谈吐礼貌自然。 可以从公司面试官的行为判断出公司的大体人员素质,我个人比较看重公司行政或者面试官是否能给瓶矿泉水或者倒杯水,我认为这是尊重一个面试者的基本表现,虽然后来我都是自己带水。 我面试中就某米和某里没有提供(并且某里某学是饭点约去面试,也不管饭,饿着肚子从5点面到9点多),然后就是双方是否守时,我一般提前20分钟到,提前10分钟给hr打个电话。 

6.关于面试难度,我觉得正常应该是围绕简历和基础循序渐进,一上来手撕红黑树,给个hard基本要dp的,或许不是真心想招人的。 

当然,即使难点也不要慌, 表达好自己的思考过程,展现自己一个综合的素质 ,即使错了也不会被一票否定。

7.关于面试技巧, 之前看了有的前辈说尽量把面试官往自己熟悉的领域带,有一点道理, 但是我没有刻意这样操作过, 不会的一般思考一下,直接说不确定/没研究过/不会,然后说一个可能的原理,如果合理我认为也能体现一种技术功底和应变能力。

其他的想到在整理吧。

 

 

5.面试题+基础

各家的面试题其实都大同小异, 掌握基础和原理,走到哪都不怕。

 基础

leetcode上有一些总结,star数非常高了。贴上url

https://github.com/CyC2018/CS-Notes

https://github.com/Snailclimb/JavaGuide

这两个大概只是个提纲,如果是高级职位,深度可能不够,具体的还得看书。

另外强烈推荐 http://www.iocoder.cn/ 芋道,我的面试题很多都是从上面找的。平时对提高也有帮助。

 

 reids

redis的话,我推荐《Redis深度历险:核心原理和应用实践》 和《redis设计与实现》

 

  • 知道redis吗,redis是如何做持久化的
  • 介绍下redis的特点,redis的基本数据结构,数据持久化方式,主从之间如何同步;
  • 导致redis性能瓶颈的操作
  • redis有哪些接口
  • Redis的实现模式;
  • redis为什么这么快?

 

 

java-core

基础的话主要看源码吧, collection和juc里面的。 然后就是《java编程思想》和《java核心技术 卷1.2》(有很多过时的章节直接跳过即可) 

  • 1、List 和 Set 的区别
  • 2、HashSet 是如何保证不重复的
  • 3、HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)?
  • 4、HashMap 的扩容过程
  • 5、HashMap 1.7 与 1.8 区别,说明 1.8 做了哪些优化,如何优化的?
  • 6、final finally finalize
  • 7、强引用 、软引用、 弱引用、虚引用
  • 8、Java反射
  • 9、Arrays.sort 实现原理和 Collection 实现原理
  • 10、LinkedHashMap的应用11、cloneable接口实现原理
  • 12、异常分类以及处理机制
  • 13、wait和sleep的区别
  • 14、数组在内存中如何分配

 

 

java-并发

我推荐《java并发编程艺术》 我觉得比 《java并发编程实战》更好理解一点。

 

  • 1、synchronized 的实现原理以及锁优化?
  • 2、volatile 的实现原理?
  • 3、Java 的信号灯?
  • 4、synchronized 在静态方法和普通方法的区别?
  • 5、怎么实现所有线程在等待某个事件的发生才会去执行?
  • 6、CAS?CAS 有什么缺陷,如何解决?
  • 7、synchronized 和 lock 有什么区别?
  • 8、Hashtable 是怎么加锁的
  • 9、HashMap 的并发问题?
  • 10、ConcurrenHashMap 介绍?1.8 中为什么要用红黑树?
  • 11、AQS
  • 12、如何检测死锁?怎么预防死锁?
  • 13、Java 内存模型?
  • 14、如何保证多线程下 i++ 结果正确?
  • 15、线程池的种类,区别和使用场景?
  • 16、分析线程池的实现原理和线程的调度过程?
  • 17、线程池如何调优,最大数目如何确认?
  • 18、ThreadLocal原理,用的时候需要注意什么?
  • 19、CountDownLatch 和 CyclicBarrier 的用法,以及相互之间的差别?
  • 20、LockSupport工具
  • 21、Condition接口及其实现原理
  • 22、Fork/Join框架的理解
  • 23、分段锁的原理,锁力度减小的思考
  • 24、八种阻塞队列以及各个阻塞队列的特性
  • 单机上一个线程池正在处理服务,如果忽然断电了怎么办(正在处理和阻塞队列里的请求怎么处理)?
  • 为什么要使用线程池?
  • 线程池有什么作用?
  • 说说几种常见的线程池及使用场景。
  • 线程池都有哪几种工作队列?
  • 怎么理解无界队列和有界队列?
  • 线程池中的几种重要的参数及流程说明。

 

JVM

JVM应该就一本《深入理解JVM虚拟机》 就够了, 但是我买的版本比较老,1.8以后内存区域做了一些改动,自己的得知道。

 

  • 1、详细jvm内存模型
  • 2、讲讲什么情况下回出现内存溢出,内存泄漏?
  • 3、说说Java线程栈
  • 4、JVM 年轻代到年老代的晋升过程的判断条件是什么呢?
  • 5、JVM 出现 fullGC 很频繁,怎么去线上排查问题?
  • 6、类加载为什么要使用双亲委派模式,有没有什么场景是打破了这个模式?
  • 7、类的实例化顺序
  • 8、JVM垃圾回收机制,何时触发MinorGC等操作
  • 9、JVM 中一次完整的 GC 流程(从 ygc 到 fgc)是怎样的
  • 10、各种回收器,各自优缺点,重点CMS、G1
  • 11、各种回收算法
  • 12、OOM错误,stackoverflow错误,permgen space错误
  • 说一下对jvm的理解,jvm的组成部分,各个部分的存储内容以及常见的jvm的问题排查步骤。
  • JVM熟不熟悉?简单说说类加载过程,里面执行的那些操作?
  • JVM方法区存储内容 是否会动态扩展 是否会出现内存溢出 出现的原因有哪些。
  • 介绍介绍CMS
  • 介绍介绍G1。
  • 为什么jdk8用metaspace数据结构用来替代perm
  • 简单谈谈堆外内存以及你的理解和认识。
  • JVM的内存模型的理解,threadlocal使用场景及注意事项?
  • JVM老年代和新生代的比例?
  • jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题?
  • Java虚拟机中,数据类型可以分为哪几类?
  • 怎么理解栈、堆?堆中存什么?栈中存什么?
  • 为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
  • Java中,什么是是栈的起始点,同是也是程序的起始点?
  • 为什么不把基本类型放堆中呢?
  • Java中的参数传递时传值呢?还是传引用?
  • Java中有没有指针的概念?
  • Java中,栈的大小通过什么参数来设置?
  • 一个空Object对象的占多大空间?
  • 对象引用类型分为哪几类?
  • 讲一讲垃圾回收算法。
  • 如何解决内存碎片的问题?
  • 如何解决同时存在的对象创建和对象回收问题?
  • 讲一讲内存分代及生命周期。
  • 什么情况下触发垃圾回收?
  • 如何选择合适的垃圾收集算法?
  • JVM中最大堆大小有没有限制?
  • 堆大小通过什么参数设置?
  • JVM有哪三种垃圾回收器?
  • 吞吐量优先选择什么垃圾回收器?响应时间优先呢?
  • 如何进行JVM调优?有哪些方法?
  • 如何理解内存泄漏问题?有哪些情况会导致内存泄露?如何解决?

 

 

Spring

spring的话,感觉现在问的少了, spring cloud会问的比较多, 应该算在微服务/分布式的知识点里面。

  • 1、BeanFactory 和 FactoryBean
  • 2、Spring IOC 的理解,其初始化过程?
  • 3、BeanFactory 和 ApplicationContext
  • 4、Spring Bean 的生命周期,如何被管理的?
  • 5、Spring Bean 的加载过程是怎样的?
  • 6、如果要你实现Spring AOP,请问怎么实现?
  • 7、如果要你实现Spring IOC,你会注意哪些问题?
  • 8、Spring 是如何管理事务的,事务管理机制?
  • 9、Spring 的不同事务传播行为有哪些,干什么用的?
  • 10、Spring 中用到了那些设计模式?
  • 11、Spring MVC 的工作原理?
  • 12、Spring 循环注入的原理?
  • 13、Spring AOP的理解,各个术语,他们是怎么相互工作的?
  • 14、Spring 如何保证 Controller 并发的安全?

 

Netty

 我不会

 

分布式相关

主要考察对cap和base的理解吧, 我没有系统学习过,主要靠平时的积累。

  • 1、Dubbo的底层实现原理和机制
  • 2、描述一个服务从发布到被消费的详细过程
  • 3、分布式系统怎么做服务治理
  • 4、接口的幂等性的概念
  • 5、消息中间件如何解决消息丢失问题
  • 6、Dubbo的服务请求失败怎么处理
  • 7、重连机制会不会造成错误
  • 8、对分布式事务的理解
  • 9、如何实现负载均衡,有哪些算法可以实现?
  • 10、Zookeeper的用途,选举的原理是什么?
  • 11、数据的垂直拆分水平拆分。
  • 12、zookeeper原理和适用场景
  • 13、zookeeper watch机制
  • 14、redis/zk节点宕机如何处理
  • 15、分布式集群下如何做到唯一序列号
  • 16、如何做一个分布式锁
  • 17、用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗
  • 18、MQ系统的数据如何保证不丢失
  • 19、列举出你能想到的数据库分库分表策略;分库分表后,如何解决全表查询的问题
  • 20、zookeeper的选举策略
  • 21、全局ID

 

 

mysql:

《Mysql技术内幕-innodb存储引擎》就够了。

  • mysql索引的实现原理
  • Innodb中,什么是聚集索引,非聚集索引,他们是什么关系
  • 插入一条记录时,聚集索引和非聚集索引是如何修改的
  • 建立索引的标准是什么
  • 查看 SQL 是不是使用了索引?(有什么工具)
  • SQL 索引的顺序,字段的顺序
  • MySQL 分页查询语句,mysql分页有什么优化

 

 

posted @ 2019-01-27 23:03  NovaCN  阅读(6261)  评论(16编辑  收藏  举报