自序

这次面试的公司有一点点多,主要是因为毕业后前两份工作找的都很草率,这次换工作就想着,emm,毕业三年了,该找个工作好好沉淀几年了。

先说下这次面试的结果吧:

到 hr 面的:阿里、美团、滴滴、金山云、每日一淘、火币、宜信、旺店通、黄包车、linkedMe

其他:

小米 (四轮技术面,大概4个小时的样子,大数据部门,不知道是不是四面的负责人嫌弃我木有大数据的经验,不过我确实木有哈)

京东 (电话面试一轮+现场两轮,面试完快中午一点了,说是让我先回家,后面让hr 电话联系我

一周后一面的面试官问我还考虑京东不,如果考虑的话,就进行后续。当时已经有了更好的offer,就说不考虑了,希望以后有机会再合作,所以没有后续了)

头条 (二面完gg,我的算法确实菜哈,然后leetcode又只刷过10道题,去面头条,确实有些作死的节奏,实在是对不起帮我内推的石冲大佬)

爱奇艺 (电话面试一轮+现场两轮,到技术终面了,这个怪我,面试官也一直很忙,然后我俩就互相一直改面试时间,最后定的那个面试时间我还迟到了一个小时,还是时间到了才给hr 打电话说一个小时后才能到

虽然我知道这样做非常不好,但是当时情况比较复杂,自己根本忙不过来,一直在面试,也没有办法中途给hr 打电话说一下。一天面两家,两家离的还比较远的小伙伴吸取一下教训。

我本来是想约第二天下午的,hr 就想当天,结果就晚上7:40开始二面了,面到9点,然后木有然后了)

有赞 (电话面试一轮+现场两轮,到技术终面了,面试官“base考虑杭州吗”,我“啊,你们北京不是也需要人吗,最好北京哈,杭州暂时不考虑”,然后木有然后了,哈哈。

后面面阿里的时候我就自己打脸了,面试官“base杭州考虑吗”,我“面过阿里我就去杭州,面不过我就在北京”。爱,就要大胆的说出来。)

这次面试基本都是三~四轮技术面,很多都是每一轮都有至少一道算法题,所以准备换工作的小伙伴,算法可以搞起来了哈,leetcode easy和medium 难度的就ok了,当然如果你也要刷hard 难度的题,是更好的哈。

我作为一名只刷过10道leetcode的渣渣,表示以后要好好刷leetcode了,拯救一下自己的智商。准备面头条的小伙伴,那就medium 和 hard难度的搞起来吧。你们加油,我就不想了。

群里有很多小伙伴怀疑我是985、211或者研究生毕业,都不是的哈,渣本(但是我还是很爱我的母校的),16年毕业,我一个妹子都可以做到的,你们更可以做到,所以相信自己,去努力就好了。

这篇文章主要是记录一下自己的面试经历,分享一些群里小伙伴们都很关注的面试题,然后文章末尾我会推荐一些书,完全免费推荐的哈,我个人感觉不错的,可以提升技术的,当然面试中也会对你有特别大的帮助。

阿里的面试题不会分享哈,这次主要分享tmdj、以及其他公司的一些面试题,把我分享的这些面试题都掌握了,对想去面阿里的小伙伴的帮助也是非常非常大的。

当然,面试题只是起一个查漏补缺的作用,并不是让你直接去整理答案,去背答案的哈。一个合格的面试官,是会针对你的简历去问的,即每个人的面试题都是不一样的。

头条

二轮技术面,17:00~20:25,晚饭时间hr 小姐姐还特贴心的带我体验了一把传说中的头条餐厅,不超过半小时

1.聊项目,画项目架构图,画一个用户从发起请求 到接收到响应 中间经过哪些服务 每个服务做什么事情 的流程图

2.讲项目中的难点、挑战,你是如何解决的

3.redis 中有几种类型 & 各自底层怎么实现的 & 项目中哪个地方用了什么类型,怎么使用的

4.redis如何实现分布式锁,zk如何实现分布式锁,两者的区别。如果service还没执行完,分布式锁在redis中已经过期了,怎么解决这种问题

5.synchronized底层实现,加在方法上和加在同步代码块中编译后的区别、类锁、对象锁

6.锁升级的过程

7.java运行时区域 及 各个区域的作用、对GC的了解、java内存模型 及 为什么要这么设计

8.对索引的理解,组合索引,索引的最佳实践

9.countDownLatch用过没有,在项目中如何使用的,对aqs 的了解

10.写生产者消费者问题,考虑高并发的情况,可以使用Java 类库,白纸写代码

11.如下图所示

12.设计一个发号器,考虑集群和高并发的情况,要求发号器生成的id是递增趋势,通过id可以区分出来是今天生成的id还是昨天生成的id,但是生成的id中不能直接带有日期,要具有一定的混淆功能,白纸写代码

13.一个二位数组,每个元素都可以往上下左右四个方向走,寻找最长递增路径。如下图所示,最长递增路径即红色字体路径。白纸写代码。

美团

电话面试(40分钟)+现场三轮技术面试(3.5小时)+hrbp面试(30分钟)

1.数据库和缓存的一致性问题。先更新数据库,再更新缓存,若更新完数据库了,还没有更新缓存,此时有请求过来了,访问到了缓存中的数据,怎么办?

2.聚簇索引/非聚簇索引,mysql索引底层实现,为什么不用B-tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方

3.mysql默认的事务隔离级别,mvcc,rr怎么实现的,rc如何实现的

4.mysql间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的sql语句,死锁发生了如何解决,mysql有没有提供什么机制去解决死锁

5.谈下对GC的了解,何为垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的区别,emm,还有一个直击灵魂的问题,看过cms的源码吗,笑cry

6.有没有排查过线上oom的问题,如何排查的

7.有没有使用过jvm自带的工具,如何使用的

8.假设有下图所示的一个full gc 的图,纵向是内存使用情况,横向是时间,你如何排查这个full gc的问题,怎么去解决你说出来的这些问题

9.说说对java中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的

10.对CAS的理解,CAS带来的问题,如何解决这些问题

11.volatile底层、synchronized底层、锁升级的过程、MESI

12.ehcache支持哪些缓存

13.juc有研究没有,讲一讲

14.聊项目,画项目架构图,画一个用户从发起请求 到接收到响应 中间经过哪些服务 每个服务做什么事情 的流程图

15.讲项目中的难点、挑战,如何解决的,项目这一块会问的特别细

16.如何保证RocketMQ 消息的顺序性,如何解决重复消费问题

17.项目中如何保证接口的幂等操作

18.讲一讲对redis 的了解,项目中如何使用的,哪个地方使用的,为什么要使用

19.哨兵机制、redis两种备份方式的区别,项目中用的哪种,为什么

20.讲一讲对分布式锁的了解

21.项目中系统监控怎么做的

22.如何理解Spring中的AOP 和 IOC,以及DI,读过Spring源码没有

23.读过MyBatis源码没有

24.说一个你了解最多的框架,说出你的理解

25.如何理解分布式事务,为什么会出现这个问题,如何去解决,了解哪些分布式事务中间件

26.聊一聊对分库分表的理解

27.hystrix功能 & 在项目中怎么使用的 & hystrix 怎么检测断路器是否要开启/关闭 & hystrix 实现原理,除hystrix之外的其他熔断限流中间件有了解没有,了解多少说多少

28.dubbo有了解没有

29.怎么理解java 中和 mysql 中的乐观锁、悲观锁

30.一致性hash

滴滴

现场三轮技术面试 + 一轮hrbp面(4小时5分钟)

> 1.聊项目,画项目架构图,画一个用户从发起请求 到接收到响应 中间经过哪些服务 每个服务做什么事情 的流程图,讲数据库设计
>
> 2.处理过线上oom问题没有,如何处理的
>
> 3.遇到过线上服务器cpu飙高的情况没有,如何处理的
>
> 4.线上有没有遇到其他问题,如何处理的
>
> 5.对线程池的理解,项目中哪个地方使用了,如何使用的,用的Excutor框架中的哪个实现类,为什么用这个
>
> 6.对CAS的理解,CAS带来的问题,如何解决这些问题
>
> 7.volatile底层、synchronized底层、锁升级的过程、MESI
>
> 8.对mysql索引的理解、对组合索引的理解、索引的最佳实践
>
> 9.分布式锁的实现、对比redis分布式锁 & zk分布式锁
>
> 10.唯一id如何实现的,snowflake实现原理,snowflake有哪些问题,如何11.避免根据订单号可以推算出今天的订单量
>
> 12.如果线上一个功能是用栈结构实现的,使用过程中要注意哪些问题,为什么
>
> 13.怎么理解线程安全
>
> 14.怎么理解接口幂等,项目中如何保证的接口幂等
>
> 15.怎么理解微服务,服务如何划分,可以从哪几个方面去划分,为什么这样划分,微服务带来了哪些好处,哪些坏处,如何看待这个问题
>
> 16.如何理解网关,网关带来的好处和坏处,如何解决
>
> 17.hystrix功能 & 在项目中怎么使用的 & hystrix 怎么检测断路器是否要开启/关闭 & hystrix 实现原理
>
> 18.怎么理解命令模式和观察者模式,手写一个观察者模式或者命令模式的代码,策略模式也行
>
> 19.掌握哪些设计模式,常用哪些,项目中如何使用的,为什么用这个,不用那个,手写一个线程安全的单例模式
>
> 20.如何设计一个秒杀系统
>
> 21.如果我现在就是要实现每秒10w请求,不能熔断限流,如何去设计
>
> 22.假设现在双十一零点,大量下单请求,如何对这些订单进行分库分表,为什么
>
> 23.服务A调用服务B中一个接口,服务B调用服务C中一个接口,如何实现若服务B响应服务A成功,则服务C一定响应服务B成功,需要考虑系统性能问题
>
> 24.递归使用中有什么需要注意的地方,递归写法一般可以用什么去替换
>
> 25.有两个表,table a,table b,写sql查询出仅在table a中的数据、仅在table b中的数据、既在table a 又在table b 中的数据
>
> 26.spring 源码有了解没有
>
> 27.myBatis源码有了解没有
>
> 28.mysql事务隔离级别、mvcc

我:既然现在很多业务线都是Go了,有没有考虑把剩余的业务线也转成Go呀?面试官:我认为,语言只是工具,语言不应该是影响开发的一个因素吧。面试官说的很有道理。

京东

电话面试(30分钟)+现场两轮技术面试(1小时40分钟),面完12:50,说让我先回来,后续hr 电话和我联系

一周后一面的面试官问我还考虑京东吗?,回复不考虑了,希望以后有机会再合作

1.一个final修饰的属性,定义的时候没有初始化,在无参构造函数中初始化,可以吗,为什么

2.说说对java中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的,为什么不用其他的集合类

3.hashMap,concurrentHashMap底层实现,

4.list删除是怎么实现的,遍历的时候可以删除吗,为什么

5.redis中有哪些数据结构,了解过其底层怎么实现的吗,和java中相似的数据结构的对比

6.redis是单线程的还是多线程的,为什么这么快

7.redis hash中某个key过大,变为String类型的大key,怎么处理,使用中如何避免出现这种问题

8.设计模式在项目中哪个地方用到了,怎么使用的,能不能画一个你熟悉的设计模式的UML图,手写单例模式,手写静态内部类实现的单例模式

9.讲一讲mysql索引,实际工作中,哪些场景用了b+tree索引,哪些场景用了hash索引

10.explain 可以看到哪些信息,什么信息说明什么,explain的结果列讲一下

11.Spring源码看过没有,会多少讲多少

12.MyBatis源码看过没有,会多少讲多少

13.cas,cas的缺点,如何解决

14.aqs,countDownLatch如何实现

15.线程池如何实现,核心线程数和最大线程数设置成多少,为什么这么设置,项目中哪个地方使用了线程池,使用时需要注意什么

16.mysql事务隔离级别,幻读,脏读,项目中用什么事务隔离级别,为什么

17.volatile底层原理、synchronized实现机制,

18.对XA、TCC的理解,了解哪些分布式事务框架,有什么缺点

19.feign 和 dubbo,了解多少说多少

20.eureka 和 zookeeper,了解多少说多少

21.hystrix 和 sentinel,了解多少说多少

22.Spring cloud alibaba,了解多少说多少

23.对分库分表、读写分离的了解,了解多少说多少

24.画一下java 线程几个状态 及 状态之间互相转换的图

25.聊项目,画项目架构图,画一个用户从发起请求 到接收到响应 中间经过哪些服务 每个服务做什么事情 的流程图,讲数据库设计 具体到部分表中有哪些字段

26.emm 我们部门体量比较大,可能需要加班,到凌晨两三点的那种,也可能通宵,通宵是大促期间,你能接受吗

27.emm 也会加班到十点,这个不是大促期间,但也不是每天,非常态情况,你能接受吗,你在哪里住,过来要多久,有男朋友吗?一起去吃午饭吧,我们这边有员工餐厅,不了不了,我回家吃饭吧

下面是面试tmdj 之外的公司中遇到的一些问题哈,tmdj 中已经被问到的就不再重复写了,只写一下个别公司中我还记得的面试题

others

火币 :四轮技术面试+一轮hr 面试(4小时),后来hr 小姐姐和我说,她们正常是两轮技术面试,因为技术面试完面试官一直没有找到她,然后,emm,就又来了一轮技术面试,又来了一轮技术面试,笑cry

1.kafka 如何保证消息顺序消费、在consumer group 中新增一个consumer 会提高消费消息的速度吗、那如果我想提高消息消费的速度,我要怎么办

2.redis几种数据结构 及 底层,项目中如何使用的redis

3.哨兵机制、选举算法

4.一致性hash

5.redis是单线程的还是多线程的,为什么速度这么快

6.多路复用的几种方式以及区别

7.对线程池的理解,在项目中如何使用的,多个线程之间如何共享数据,多个进程之间如何共享数据

8.hashMap、concurrentHashMap的区别 及 底层实现、hashMap和hashTable 的区别

9.什么是红黑树,什么是b-tree,为什么hashMap中用红黑树不用其他树

10.对mysql 索引的理解,为什么mysql索引中用b+tree,不用b-tree 或者其他树,为什么不用hash 索引

11.数据库和缓存的双写一致性问题

每日一淘 :三轮技术面试+一轮hrbp 面

1.用过哪些Object类的方法,如何使用的

2.java如何实现序列化的,Serialization底层如何实现的

3.countDownLatch如何实现的

4.项目中监控报警机制如何做的,说说你的了解

5.线上服务器cpu飙高,如何处理这个问题

6.服务A调用服务B,用户请求服务A,发现返回较慢,如何定位这个问题

7.TIME_WAIT是什么状态还记得吗,什么情况下网络会出现这个状态

linkedMe :二轮技术面试+一轮hr面试

1.内核态 和 用户态、cas 和 sout 哪个用到了内核态和用户态的切换

2.哪些典型的应用用的是udp

3.线程池有了解吗,项目中如何使用的

4.计算密集型/IO密集型 任务 分别如何设置线程池的核心线程数和最大线程数,为什么这么设置

5.假如我下午5点要和5个人一起开会,但是这5个人现在都出去了,不在公司,但是今天会回来,问,我如何开这场会,用java 并发方面的知识回答

旺店通 :5小时+,中午我还木有吃饭,下午面试时候真是饿的要死,而且下午脑细胞死了好多好多

  • 先机试(50分钟时间,三选二,不联网,明确告知机试不通过没有后续)

  • 一面给面试官讲一下自己机试题的思路,面试官运行看结果,然后问了几个问题(什么是B-tree,什么是B+tree之类的)

  • 笔试(10道选择题+2道数据库+2道算法题,30分钟)

  • 二面给面试官讲自己的机试题的思路,面试官运行看结果,然后给面试官讲笔试题,一道一道讲为什么这么写,过程中面试官可能会改题,然后问你怎么解决修改后的题,然后又问了几个题

  • 三面开始正常面试,但不是看简历问,一部分是简历上的,一部分是看面试官心情

  • hr面

    当场给了offer,但是啊,从他家出来的时候的想法就是,早知道下午这个样子,不如中午吃个午饭,回家好好睡一觉

    想去他家的小伙伴就好好写代码吧,多看java 中一些方法的实现,因为机试的题目都要求不能用java 中提供的方法,要自己写,然后还要好好准备算法

算法题

  • [1,1,2,2,3,4,4,5,5,5] 找出不重复的元素(黄包车)

  • 反转链表,要求时间复杂度O(N),空间复杂度O(1) (火币)

  • 非递归实现斐波那契数列 (爱奇艺)

  • 这一周股市价格为[2,6,1,4,8],求哪一天买入哪一天卖出,可获得最大收益,最大收益为多少 (爱奇 - 艺)

  • 按照箭头方向查找二叉树 (金山云)

  • 表a b c之间用id关联,求阴影部分的数据 (金山云)

  • 一个整形无序数组,里面三个数只和等于一个目标值,求这三个数 (小米)

    链表问题 (小米)

  • 扑克牌问题 (小米) 有十张扑克牌,从上面开始抽,抽出一张放桌子上,然后再抽出一张放扑克牌的最下面,这样循环往复的操作,直到手里的牌都没有了。这时,桌子上牌的顺序正好是1 2 3 4 5 6 7 8 9 10。要求写代码求出原顺序
  • 手写大顶堆 (linkedMe)
  • 手写LRU 算法 (火币)
  • 字符串相加 (滴滴) 两个数字类型的字符串,直接转int或者double肯定都放不下,然后求这两个数的和,返回值还是字符串,15分钟时间,要求无bug
  • 寻找目标值位置 (滴滴) 有一个二维数组,数组横向有序,纵向有序,求目标值的位置,10分钟时间
  • 求字符串“efabcbaefehiabcba”中最长的回文数,不去重(美团)
  • 反转int类型的值x,不要借用String,只用int 即可。&& 针对该程序,写出其应有的测试用例 (美团)
  • top K 问题(每日一淘)

    HR面

真诚待人,以真心换真心,不要弄虚作假,HR 问什么问题,如实回答即可。在回拒offer 时候,也请好好说话。

tips

其实面试过程中,你是可以感受到哪些面试官是真的很欣赏你,哪些只是想找一个可以干活的人的,最后一定要去一个欣赏你的面试官那里,因为待遇真的会不一样

(假装我体验过只是想找我干活的leader哈,很感激以前遇到的每一位leader 都很欣赏我,给我我想要的空间去做自己想做的事情,真的非常感谢你们)

嗯,免费安利环节到了,学不了吃亏学不了上当哈

《深入理解Java虚拟机》

《Java并发编程的艺术》

《Java并发编程实战》

《MySQL技术内幕 InnoDB存储引擎》

《Redis设计与实现》

《JVM G1源码分析和调优》

《重新定义Spring Cloud实战》

《Redis深度历险:核心原理与应用实践》

《Spring技术内幕》《myBatis技术内幕》

《深入拆解Java虚拟机》

等等等等

需要更多大厂面试题的,请关注公众号:程序零世界(C0W1024) 回复”学习“ 即可免费领取

来源:Bella的技术轮子 ,作者:Bella酱

3 年经验的 Java 后端妹子,横扫阿里、滴滴、美团,整理出这份厚厚的 8000 字面经!的更多相关文章

  1. 从面试官甄别项目经验的角度,说说如何在简历中写项目经验(java后端方向)

    在大多的JD(职位介绍)里,会写明该职位需要xx时间的相关经验,换句话说就是需要在简历中看到一定年限的相关商业项目经验,否则估计连面试的机会都没. 在本文里,不讨论这种门槛是否合理,而会以Java相关 ...

  2. 100道Java高频面试题(阿里面试官整理)

    我分享文章的时候,有个读者回复说他去年就关注了我的微信公众号,打算看完我的所有文章,然后去面试,结果我后来很长时间不更新了...所以为了弥补一直等我的娃儿们,给大家的金三银四准备了100道花时间准备的 ...

  3. java后端程序员1年工作经验总结

    java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为 ...

  4. 以技术面试官的经验分享毕业生和初级程序员通过面试的技巧(Java后端方向)

    本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的技巧,技巧我讲,公司你选,两厢便利. 毕 ...

  5. 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备

    在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...

  6. Java后端面试的一切技巧和常见的问题经验总结

    原文地址:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂(适用90%小小小公司, ...

  7. 面试经验合集-Java后端<一>

    面试一:CDKHXJSYJS   时间:2018-12-29 周六 地点:航天科技大厦32楼   一 技术题目 <回忆版> 1.上下转型 2.Java异常:分类.处理.设计 3.二叉排序树 ...

  8. 招聘前端、Java后端开发、测试、Mysql DBA

    公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...

  9. (Java后端 Java web)面试时如何展示自己非技术方面的能力(其实就是综合能力)

    这篇文章的适用范围其实不仅限于Java后端或Java Web,不过其中有些是拿这方面举例的,在其它方面,大家可以举一反三,应该也能得到些启示. 我们在面试时,会发现有些候选人技术不错,比如在Java ...

随机推荐

  1. Unity实现byte[]合成图像

    bool CreateCovers(byte[] imageData) { Texture2D imageTexture = new Texture2D(273, 126); imageTexture ...

  2. 【半译】扩展shutdown超时设置以保证IHostedService正常关闭

    我最近发现一个问题,当应用程序关闭时,我们的应用程序没有正确执行在IHostedService中的StopAsync方法.经过反复验证发现,这是由于某些服务对关闭信号做出响应所需的时间太长导致的.在这 ...

  3. Python 为什么不用分号作终止符?

    一般而言,编程语言中使用分号";"来实现两种目的: 作为语句分隔符:使用分号来分隔语句(statement),这样就能在一行代码中书写多条语句(一行多句) 作为语句终止符:使用分号 ...

  4. Java IO(十七)FIleReader 和 FileWriter

    Java IO(十七)FIleReader 和 FileWriter 一.介绍 FIleReader 和 FileWriter 是读写字符文件的便利类,分别继承于 InputStreamReader ...

  5. Codeforces Round #646 (Div. 2)【B. Subsequence Hate题解】

    具体思路已经在代码注释中给出,这里不再赘述. #include<iostream> #include<algorithm> using namespace std; int t ...

  6. 文件包含漏洞(file inclusion)

    文件包含漏洞原理:(php) 是指当服务器开启allow_url_include选项的时候,通过php某些特性函数.如include().include_once().require().requir ...

  7. 使用turtle库绘制奥运五环

    import turtle as t t.setup(600,600,50,50) t.pensize(3) t.pencolor("red") t.penup() t.pendo ...

  8. Java实现蓝桥杯墓地雕塑

    墓地雕塑 问题描述 在一个周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放), 希望所有n+m个雕塑在圆周上均匀分布.这就需要移动其中一些原有的雕塑.要求n个雕塑移动的 ...

  9. Java实现 LeetCode 78 子集

    78. 子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], ...

  10. Java 实现 蓝桥杯 生兔子问题

    生兔子问题 有一对兔子,从出生后第四个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子.假如兔子都不死,计算第十个月兔子的总数? 分析: 四个月开始生兔子,则:F(N) = f(n-1) ...