个人近期面试情况

今年七月以来,我的面试除了一个用友的,基本其他都被毙了,可以说是非常残酷的。其中有很多自己觉得还面的不错的岗位,比如百度、跟谁学、好未来等公司。说实话,打击比较大。

情况基本上是从八月中旬开始好起来的,这个时间点,秋招开始了,国家之前也开启了接近40万亿的基础建设计划,在这个时间段,面试的几个代表性的公司,包括腾讯、饿了么、宝宝树、旷世科技等等,基本都成了。

最终,就在前段时间,蚂蚁金服给我确认了P7的职位。也算自己到了另一个奋斗的阶段了。对自己的经历,做一个面试总结。

我的面试准备
面试其实我是属于一边面试,一边准备的过程,但是无论如何,一定要做到基础扎实、比较好的自我介绍,以及描述自己的职业故事。

面试经历

快手 – 视频面试30分钟

  • 谈一下项目

  • 谈一下对IOC和AOP的理解

  • Memchached 和 Redis 的区别

  • Redis的持久化实现

  • Redis的淘汰策略

  • 定期删除和惰性删除的区别、优缺点

  • IOC的原理是什么

  • Hashmap的底层实现和原理

  • 手写一个,实现map的put方法

  • 百度 – 视频面试20分钟

  • 说下spring事务,@Transition 这个注解在哪些情况下不会生效

  • Synchronized 基本原理

  • Synchronized和ReentrantLock 都是可重入锁,他们俩是怎么实现可重入的

  • 线程池的工作原理和7个参数

  • Volatile的用处

  • JVM在什么情况下会发生YoungGC和FullGC

  • Redis的淘汰机制

  • 类加载机制说一下

  • 快速排序的基本实现

  • Mysql优化是怎么优化的,索引失效的情况都有哪些

  • 实现一个抢红包的算法,怎么实现

  • 让你实现一个LRU算法,怎么实现

搜狐一面 – 视频面试 50分钟

  • JVM垃圾回收机制

  • 怎么判断当前对象能否被回收

  • 对象首次创建的话创建在哪个区(新生代还是老年代,新生代哪个区)

  • 解释一下stop the world

  • Stop the world 过程中,如果有新的垃圾产生怎么办

  • 我说我们项目用的是JDK1.6,面试官就问,1.8和1.6都有哪些区别

  • 有了解过1.8的stream流吗

  • HashMap1.8和1.8之前的区别,以及底层实现

  • HashMap为什么不是线程安全的

  • HashMap还会造成什么问题(1.8之前头插***导致死循环)

  • 实现HashMap线程安全的有哪些(我答了三种)

  • CurrentHashMap的底层原理,以及1.8和之前的区别

  • 详细讲讲CAS的工作原理

  • CAS的ABA问题怎么解决的

  • 你常用的线程池有哪些

  • 线程池的7个参数

  • SingleThreadExecutor和CachedThreadPool为什么不推荐使用,会出现哪些问题

  • 写一个冒泡排序

  • 写一个算法,快乐数(LeetCode原题),我一开始用递归写,会出现死循环的状态,面试官超好提醒我,然后花了很长时间修改算法,通过

  • Mybatis有了解它的插件吗

  • MybatisTemplate 有了解吗

  • Redis的五个参数

  • Redis的事务,我Muliti事务开始,然后写了五个key,其中有一个失败了,Redis怎么处理的,会回滚吗

  • Redis事务和Mybatis事务有什么区别

  • Redis主从复制了解吗

  • Redis主服务器是怎么给从服务器写入数据的

  • 看你还了解Docker,(简单说了一下玩过一点点)

蚂蚁金服(支付宝)一面 – 视频面试 50分钟

  • 聊了十多分钟做的项目

  • 你们公司自研的Spring和市面上流行的Spring有什么不一样

  • Redis主要用来干嘛的

  • Redis的持久化方式

  • Redis的事务有了解吗(我说了使用的基本命令和mybatis、mysql的区别)

  • 你对你们经常使用的集合底层有了解吗

  • HashMap的底层原理,1.8以及之前的,线程安全实现方式

  • Sychonized和ReentrantLock 的区别

  • Volatile的作用是什么

  • 对JVM垃圾回收器有了解吗

  • CMS垃圾回收器说一下工作原理

  • 堆和栈的区别

  • JVM的调优

  • try{}catch{}finally{}中,如果finally{}中的返回值+1,返回的是多少,会改变返回结果吗

  • 线程池有了解吗,它的工作原理

  • 固定长度的线程池有什么缺点

  • Mysql和Oracle你用的最大的区别是什么(我说了两者的事务隔离级别,以及mysql中的Explain和oracle当中的Explain plan for的区别)

  • Mysql的聚簇索引和非聚簇索引有了解吗

  • 看你做过Sql优化,讲讲你做了哪些优化

  • Mysql回表知道是什么吗

  • SpringMVC的工作流程是什么

  • 一道简单的算法题,反转链表,我说这题我前段时间专门leetcode上练过,我算法不好,这段时间主要是复习基础了,面试官夸我基础很扎实,应该二面稳了,面试体检极佳

蚂蚁金服(支付宝)二面 – 视频面试 40分钟

  • 是个小姐姐程序员,聊了聊项目

  • 问了下我们公司现在项目用到的技术栈

  • 和一面一样问了下我们公司自研的Spring有哪些不一样

  • 同样讲了讲oracle和mysql的区别

  • 讲讲不可重复读是什么

  • Jdk1.8有了解过CompletableFuture吗(我没有了解过,流下来没技术的眼泪)

  • 那你知道Future吗(好像是Callable的时候返回值会用到它,又流下了没技术的眼泪)

  • 写一个算法题吧,牛客网的 密码合格校验,写了十多分钟,全是靠if else解决的

  • 小姐姐也说,这个写的没问题,但是需要更多的考虑更好的办法,比如借助java自带的工具类等等。

  • 说一些和技术无关的,你对你自己的技术发展有什么想法(我就说,平时会多看看技术公众号,看B站学习技术,会关注很多新技术然后跟着学习,想去更大的平台通过实际场景的应用丰富自己的阅历)

美团(美团打车)一面 – 视频面试 40分钟

  • String,StringBuild,StringBuff的区别

  • StringBuff为什么是线程安全的

  • ArrayList和LinkedList的区别是什么

  • 以上二位是线程安全的吗,怎么实现线程安全

  • Vector实现线程安全的原理是什么

  • 多线程编程中你知道哪些都是保证线程安全的

  • Volatile的底层实现是什么

  • 线程池了解吗,说说工作原理

  • 内存溢出说一下

  • 栈溢出说一下

  • 要实现一个OOM和栈溢出,怎么实现

  • 说一下你常用的垃圾回收器

  • Stop the world 解释一下

  • CMS的工作流程是什么

  • Spring中bean的作用域

  • Spring中bean的生命周期说一下

  • 说一下你在项目中遇到的印象深刻的问题是什么,有什么收获

  • Redis的持久化怎么实现的

  • 写一道编程题,leetcode 第一道经典题目–两数之和

  • 对美团打车有什么想了解的吗(问了下美团打车和滴滴高德打车的区别)

字节跳动 视频面试 – 30分钟

  • 简单介绍了一下项目

  • HashMap介绍一下

  • 为什么要用红黑树的结构

  • 红黑树一般都会用在哪些场景中

  • Oracle的索引了解吗

  • Mysql的索引底层实现是什么

  • B+树的实现原理了解吗

  • Mysql事务特性了解吗,具体说一说

  • Mysql的事务隔离级别了解吗

  • Mysql的事务隔离级别是怎么实现的

  • 算法题:[(5,7),(1,6),(15,50),(60,90),(35,37)] 合并二元数组 输出[(1,7),(15,50),(60,90)]

  • 算法题:分层打印二叉树

  • 算法题:反转链表起网络

一般技术面到后面,面试官都是leader或者是部门老大,他们其实很关心你的职业规划、对待工作的态度、团队合作的能力、自我价值实现方面的思考,当然还有项目实现的能力,过往项目经验和深度。所以最好自己先想想怎么用简短的话表述清楚。注意围绕关键词去说。

写给看到最后码友的话

这些算是我作为过来人对于应届毕业生和刚工作不久的同学的一些小小建议吧。

(1)一定要紧跟技术前进的脚步,尤其是大数据相关的技术,在技术更迭的时候一定要学习熟悉新技术,看源码,哪怕自己在工作中用不到也一定要学。因为这是你下一份工作的敲门砖。

我作为一个老兵,在上一家公司工作4年,我没有逼迫自己学习新技术。

结果现在面试碰壁,其实大部分原因就是人家用的都是主流技术,你不会你就被淘汰。

(2)不要给自己设置舒适区,这个就是说,一个公司待久了不要懒惰,不能荒废自己,始终要保持清醒的头脑和进取心,不断学习,不断完善自己的技术,架构设计能力,项目管理能力,交付能力等。

一定要及时从项目中总结经验和不足,最好落实到日记本中,最后通过不断思考,形成自己的做事方法论。

(3)对自己的职业生涯要有一个规划,以后要做哪一块一定要有自己的想法,确定了就要从这个方向完善自己,多学多练。

目前大数据这一块,有数据中台架构的公司不是很多,除了算法岗外,大多数人在团队中都是1专多能的角色,今天干干ETL,明天搞数仓,后天又给BI出数据,可能又搞调度系统、报表系统、标签系统、反作弊平台等平台。

没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。

(4)做事情要有担当,不要根据OKR给自己设置界限,有能力有空闲多做一定要多做,这也是别人认可你的最佳途径之一。互联网圈子很小,大家认可你,以后去大厂,换个好工作,也许就更容易。

最后

在这我也分享一份大佬自己收录整理的Java学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Java开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料(主要是我把其他杂乱的不成体系的都删了~)

领取一下Java文档点击此处蓝色传送门

MySQL进阶面试突击(数据库理论+MySQL使用+MySQL底层实现)


Java核心技术笔记


Java核心技术笔记


Java面试神技


总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习