这篇文章给大家分享一下我遇到的一些质量较高的面试经历,具体经过就不多说了,就把面试题打出来供各位读者老哥参考如有不全的地方,各位海涵。
猿辅导
- 八皇后问题
- 求二叉树的最长距离(任意两个节点的路径 中最长的)
- lru算法的实现
- 设计一个数据结构 满足 put 和 getMedium(中位数)两个方法. (时间复杂度分析, getMedium 在常数,n,log n 时间复杂度返回如何实现)
- rabbitmq 脑裂问题,rabbitmq 延迟队列实现, rabbitmq高可用策略(因为项目中用到了rabbitmq他们技术选型出现了重叠,问了这个问题)
- 死磕项目细节:其中包括: 设计方案时有没有比较多种方案,为什么选这个方案?你个人最有成就感,最有挑战性的 工作是哪一个?
去哪儿
- 为什么使用 MQ, MQ 如何选型, 消息可靠性如何保证, 如何保证幂等
- 用过 dubbo吗? 设计一个 rpc 框架
- 介绍一下 https
- 数据库线程池, http 连接池有没有深入看过源码?介绍一下.(项目里用得到了 http client)
- 给你十亿条数据,如何最快的添加到数据库中
- 分布式锁的技术选型, 实现原理, 优劣势比较, zookeeper 的一致性协议原理
- java 线程同步的几种方式, countdownlatch 和 栅栏的区别
- synchronized和 aqs 如何实现可重入锁陌陌
- 分布式锁的实现方案比较,为什么选择 zookeeper, zookeeper 一致性协议原理
- 一致性 Hash 原理,实现,项目中是如何使用一致性 Hash 的,引入了多少虚拟节点?
- java synchronized和 AQS的原理,区别
- redis 有序列表
- redis 高可用架构是什么? codis 和 redis cluster 分片的区别
- 两个线程如何交替打印 0到99
头条(Go)
- top-k
- 实现前缀树
- 实现python装饰器.方法实现,和类实现, 带参数和不带参数.以及对装饰器的思考
- 如何实现对 多机房,多机架 之前的网络健康情况监控
- 如何理解进程上下文切换, 进程地址空间,为什么需要进程地址空间, 系统调用实现原理, top 命令介绍.
阿里
- mq 消息可靠性,幂等如何保证
- 分布式锁的实现方案比较,为什么选择 zookeeper, zookeeper 一致性协议原理
- 线程池参数,阻塞队列实现.
- 一致性 Hash解决什么问题, 如何实现? 虚拟节点的作用?
- Java 锁的实现方式, 比较? AQS实现原理?公平非公平实现原理?
- CAS 实现原理
- volatile 实现原理, 单例模式
- java 内存模型, gc 调优的经历. cms gc 的几个阶段, 为什么会出现 stop the world. 常见可优化参数有哪些.
- 为什么需要优化 gc, gc 会导致什么问题
- mysql 事务隔离级别. mvcc 实现原理
- mysql 索引原理. 为什么使用 B+树. 及何时无法使用索引?
- mysql 架构, 引擎层和 server层 各自负责什么.
- hashmap 及 concurrenthashmap 实现原理
- Spring aop原理,如何定义新的spring xml 标签
- 合并两个有序链表
- 如何设计一个 大型活动的安保系统(开放题)
- 你平常都在哪些论坛上学习?
- 如何学习一门未知的技术?思考:阿里面试官 虽然不面算法,但是面试考察点全方位打击,从浅入深,揪住不放,直到你不会为止.是收获最多的面试,也是感受到自己差距的面试.
快手
- 线程池实现原理,如何调优
- 如何实现一个延迟队列
- mysql 索引
- mysql 事务隔离级别
- java 锁和常见线程同步方式
- zookeeper 分布式实现方式及优劣,如何避免 多个客户端同时获取到锁?
- 求二叉树两个节点的共同节点
- 求二叉树的深度(非递归)
- java 集合常见类及原理
- tcc 原理
- netty 的请求处理流程.线程模型
美团
- HashMap 的实现原理?扩容原理? 为什么 jdk 8修改了冲突链表的插入位\
- mysql 的高可用架构.主从同步过程.\
- http 和rpc 调用的区别\
- redis 如何用单线程支撑高并发, redis 的常见使用场景\
- mq 如何选型为什么用mq\
- 一致性Hash 原理\
- 美团外卖的支付 ,要求在 15 分钟内取消未支付的订单. 如何实现\
- 打印 * 星号的等腰三角形\
- 项目的全链路架构, 有没有单点问题,解决单点问题有哪些常见的方案\
- 项目中有哪些可以衡量工作产出的指标.\
- 说一下你负责的 最复杂,参与人数最多,周期最长的项目是如何推进的\
- 你认为自己的优势,劣势在哪里\
- 你对未来的职业规划,你期望的工作内容,方向是什么?
腾讯(Java)
1.如何在物理机和容器中获取 cpu 核数,如何设置线程数, 如何主动触发GC
2.一致性 Hash, Hash 的作用, 为什么叫一致性 Hash,一致性体现在哪里. HashMap中还可以使用什么方式处理 Hash冲突
3.线程池参数,优化,原理
4.实现一个功能:cat /usr/local/*.log|grep tencent
5. 如何理解 Future模式?java 的实现原理
6. Java 阻塞队列实现原理
7. java 锁 volatile 实现原理
8. mysql 索引原理,事务隔离级别, mysql 死锁的场景会有哪些, 内部如何检测死锁的?
9. java 线程同步共有哪几种工具?
10. 你认为 java 设计得比较优秀的地方有哪些?
11. 如何理解面向对象设计,能用你看过的开源代码或者实际项目介绍一下吗?
12. java 类加载器的原理及实际使用场景
13. java 内存模型, 虚拟机栈默认大小
14. 说一下高可用架构的常见解决思路
思考
-
手撕算法需要准备,面试之前保证刷够100题,及部分设计题.
-
无论会不会,一定不能慌.无论会不会,一定要和面试官确认自己的理解是不是正确,这道题应该如何思考? 避免跑偏
-
面试重点在于沟通.
3.1 强行总结结论
一定要有条理性的和面试官沟通. 避免东一扫帚,西一扫帚.最好提前想好一些结论,重复几遍.这样面试官可能直接用你的"结论"来 写面试经过,结论,评价等. 说完一件事,最好有条理性的结论,让面试官印象深刻. 即使强行 1,2,3的划重点结论也比戛然而止强.
3.2 优雅的中断当前问题,只在检查点退出讨论,响应面试官的中断
当面试官出现了疑问,抛出了问题,中断你的回答,一定不要一味的回答,立即响应,把握自己的节奏,向面试官征求意见,能否把剩下的说完.继续快速的说完,记得总结结论求同存异,避免争论。
面试三千问
简历重要吗? 随便写行不行
简历一定要认真写.面试官抛出的问题中,除了常见的高频面试题,就是简历中你写的东西.要保证简历中写的东西,透彻理解! 无论写的是了解,还是精通都要精通. 否则别写我认为不用写的1.不熟悉的,仅仅是知晓的.2.在学校整的东西,没啥知名度就不要写了3.github 要有,但是我没有被问过github 中的项目
项目经历问吗?
项目经历一般是 面试必问的,重点问的. 所以第一步要优先发掘自己项目中的亮点, 把自己做的工作清晰的写出来.自我介绍阶段重点介绍应该也是自己的项目经历,这时最好自己提前准备一份演讲稿把自己的项目亮点说出来.多练几遍.避免不过脑子,黄河决堤式回答,想到哪里说哪里.
常见高频问题呢?
java 锁,线程同步,Juc 包.线程池内存模型,gc 调优mysql 索引,锁,事务隔离级别.常见分布式高可用架构 redis, mysql, zk, mq等. 数据同步,数据分片,数据备份等
需要刷题吗?
- 阿里一般不会问太多算法题.但是至少一半以上公司都会手撕算法. 把leetcode 各个类型的题都刷十道以上基本没太大问题. hard题一般不会问.如果自己面试表现非常好,但是因为算法题被刷掉是不是会很遗憾呢?算法题能扩展一个人的思路,还是有用的.也锻炼一个人编码能力. 个人建议白板算法用 python 非常简洁.更聚焦解题思路
- 如果自己面试表现特别好,职位匹配度非常高. 算法题是可以防水的,会挑简单题问. 目的就是 留下你,怕你答不上来,避免尴尬
- 但是自己面试比较差, 算法题答得特别好,会不会扭转面试结果呢? 基本不会, 手撕算法只是辅助.项目经历和基础面试题是核心.
面试结果可以问吗?
- 如果没有面试到 hr,或者 终面面试官没有明确 hr 会联系,我基本都会问. 或者问一下自己的不足. 一般都会告诉自己.另外, 手撕算法OK,也会被刷掉. 我在陌陌就是 手撕算法非常完美,结果还是挂了.
一般几轮面试?
- 不算 hr ,基本都是三轮及以上. 但如果二轮面试官开始扯虚的,和你介绍项目,问你职业规划 也许二面就是终面. 不清楚就问一下面试官.
平时工作划水, 面试临时抱佛脚行不行?
- 不幸当面试官逼问项目细节时, 如果平时没有对细节特别熟悉,做事马马虎虎,技术深度不够,例如技术选型为什么这么做,其他方案?优劣势是什么?如果没有调研,面试时,很快会露出马脚.如果对项目的整体架构不熟悉,只熟悉自己的模块,也会可能被面试官问到关联的模块,项目如果自己不熟悉,马上就会支支吾吾.如果你回答,这块不是我负责的,我不太熟悉,就会让面试官对你产生 没有大局观,主动意识不够的狐疑.评价时会被评"只能完成自己模块内的工作,对系统的全局没有了解,主动意识不强.自我驱动意识差"工作时,可能仅仅聚焦业务,对于项目中应用的技术关注不足. 面试时候就会被面试官揪住.如果当时不思考清晰,并且面试前没有意识到这块技术风险, 就会给面试带来很大风险.美团面试官曾问我,介绍一个你主要负责的 参与方最多,周期最长,最复杂的一个项目如何推进的? 如果平时工作不积极,不主动思考,面试被摊上这么一个问题.基本上哑口无言. (我就目瞪口呆了)
仅仅看博客,把高频面试题搞懂行不行? (问题驱动式准备面试)
- 这是必须要做的事情.但是仅仅做到这些还远远不够例如:阿里面试官问:gc 为什么一定要 stop the world? 一般博客没有给出明确清晰直观的原因
- 一致性 Hash 如何实现? 手撕一下.为什么叫一致性 hash,一致性体现在哪里? 一般博客没有lru算法手撕一下. 博客有,看一遍就能手撕了?
- redis 和 zk 分布式锁实现如何选型? 各自缺点,优势?项目使用时如何避免缺点带来的负面影响?
- 如何基于 AQS实现获取锁的公平性非公平性?
- 面试官甚至给你埋坑,故意说一个错误的,看你能否反驳
- 我之前被带坑过, 线程池问题 面试官问:是先到 max size 还是先添加到阻塞队列?我说 阻塞队列满了才会继续创建线程到max size面试官: 是这样吗? 那么如果是无界队列岂不是永远无法到达 max size 我心想: 是啊,有道理,我可能记错了.然后被面试官带偏了
- 所以结论是,光看懂记下来,不够,要深刻理解.时刻带着问题去学习.问题驱动式学习
- 最后你会发现,过了许久,你印象最深刻的还是自己当初提出来的疑问及其解决思路和答案
最后更新一下面试结果吧:
- 腾讯: 加班太多,部门一般, 再加上时间不充裕 放弃后续面试
- 去哪儿:23K
- 快手:一面挂了
- 陌陌: 二面挂
- 头条: 25k (据说 15 薪)
- 美团: 25k给不起(说面试过了, 要了期望薪资,没了下文. 现在美团离职人超多, 招人薪资压得很低)
- 蚂蚁金服:hc收缩 发不出 offer, 据面试官承诺可以给到28k+.(蚂蚁p6是基本没有议价权,所以直接告诉大概薪资. 但是没有纸质 offer 可信度也不是特别高)
- 猿辅导: 25-30k之间 (据说14薪, 入职了这家, 具体不透露了, 反正毕业两年的人绝大部分在这个区间里)
- 最后权衡了一下 , 不太想玩命加班. 去了猿辅导. 这些薪资基本上也算是市场平均价吧
猿辅导的福利基本上和宣传的出入不大.但是项目紧急还是需要加班,不过这点强度算是一个上升期互联网公司的最后底线吧
对于面试,刷面试题固然重要,但是我觉得理解核心的知识点更重要,下面这份大牛整理出来的Java全栈知识点可以说囊括了当前最热门的一些技术,可供大家参考,需要的 点击此处 凭截图获 即可获取~
JVM
- 线程
- JVM内存区域
- JVM运行时内存
- 垃圾回收与算法
- JAVA四中引|用类型
- GC分代收集算法VS分区收集算法
- GC垃圾收集器
- JAVA IO/NIO
- JVM类加载机制
Java集合
- 接口继承关系和实现
- List
- Set
- Map
- JAVA多线程并发
- JAVA并发知识库
- JAVA线程实现/创建方式
- 4种线程池
- 线程生命周期(状态)
- 终止线程4种方式
- sleep与wait区别
- start与run区别
- JAVA后台线程
- JAVA锁
- 线程基本方法
- 线程上下文切换
- 同步锁与死锁
- 线程池原理
- JAVA阻塞队列原理
- Clicarrier. CountDownLatch. Semaphore的用法
- volatile关键字的作用(变量可见性、禁止重排序)
- 如何在两个线程之间共享数据
- ThreadLocal作用(线程本地存储)
- synchronized和ReentrantL ock的区别
- ConcurrentHashMap并发
- Java中用到的线程调度
- 进程调度算法
- 什么是CAS (比较并交换乐观锁机制锁自旋)
- 什么是AQS (抽象的队列同步器)
Spring 原理
- Spring特点
- Spring核心组件
- Spring常用模块
- Spring主要包
- Spring常用注解
- Spring第三方结合
- Spring 10C原理
- Spring APO原理
- Spring MVC原理
- Spring Boot原理
- JPA原理
- Mybatis缓存
- Tomcat架构
微服务
- 服务注册发现
- API网关
- 配置中心
- 事件调度(kafka)
- 服务跟踪(starter-sleuth)
- 服务熔断(Hystrix)
- API管理
Netty与RPC
- Netty原理
- Netty高性能
- Netty RPC实现
- RMI实现方式
- Protoclol Buffer
- Thrift
网络
- 网络7层架构
- TCP/IP原理
- TCP三次握手/四次挥手
- HTTP原理
- CDN原理
RabbitMQ
- 概念
- RabbitMQ架构
- Exchange 类型
设计模式
- 设计原则
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 装饰器模式
- 代理模式
- 外观模式
- 桥接模式
- 组合模式
- 享元模式
- 策略模式
- 模板方法模式
- 观察者模式
- 迭代子模式
- 责任链模式
- 命令模式
- 备忘录模式
- 状态模式
- 访问者模式
- 中介者模式
- 解释器模式
负载均衡
- 四层负载均衡vs七层负载均衡
- 负载均衡算法/策略
- LVS
- Keepalive
- Nginx反向代理负载均衡
- HAProxy
数据库
- 存储引擎
- 索引
- 数据库三范式
- 数据库是事务
- 存储过程(特定功能的SQL语句集)
- 触发器(一段能自动执行的程序)
- 数据库并发策略
- 数据库锁
- 基于Redis分布式锁
- 分区分表
- 两阶段提交协议
- 三阶段提交协议
- 柔性事务
- CAP
分布式缓存
- 缓存雪崩
- 缓存穿透
- 缓存预热
- 缓存更新
- 缓存降级
一致性算法
- Paxos
- Zab
- Raft
- NWR
- Gossip
- 一致性Hash
JAVA算法
- 二分查找
- 冒泡排序算法
- 插入排序算法
- 快速排序算法
- 希尔排序算法
- 归并排序算法
- 桶排序算法
- 基数排序算法
- 剪枝算法
- 回溯算法
- 最短路径算法
- 最大子数组算法
- 最长公共子序算法
- 最小生成树算法
1500道面试题(篇幅限制不全部展示出来了)
整理不易,需要上面展示的资料的老哥,麻烦 点击此处 凭截图获 即可获取~