个人背景
我的个人背景非常简单,Java开发经验3年,学历普通,一本本科计算机专业,毕业后出来就一直在一家互联网公司Crud,在公司每天重复的工作对我的技术提升并没有什么帮助;
心思开始活泛想去追寻更具有挑战的工作,于是就开始海投简历,没曾想一个星期后居然收到了阿里巴巴是我面试邀请,由于来的有点突然,让我慌手慌脚的,结果可想而知,在三面的时候挂了(能坚持到三面其实还是比较满意的)
还好本人比较喜欢复盘,把面试问题能记得的都做了记录总结,大家先一起来看看吧。
阿里一面:
- 自我介绍
- 擅长哪方面的技术?
- Java有哪些锁种类?(乐观锁&悲观锁、可重入锁&Synchronize等)
- 比较重要的数据结构,如链表,队列,栈的基本理解及大致实现
- J.U.C下的常见类的使用。 ThreadPool的深入考察; BlockingQueue的使用
- Java内存分代模型,GC算法,JVM常见的启动参数; CMS算法的过程。
- volatile关键字有什么用(包括底层原理)
- 线程池的调优策略
- spring cloud的服务注册与发现是怎么设计的?
- 分布式系统的全局id如何实现
- 分布式锁的方案,redis和zookeeper哪个个好,如果是集群部署,高并发情况下哪个性能更好。
耗时将近50分钟
阿里二面:
- 参与的项目,选一个,技术难度在哪里?
- Collections.sort底层排序方式
- 负载均衡的原理
- 设计模式与重构,谈谈你对重构的理解
- 谈谈Redis相关的集群有哪些成熟方案?
- 再谈谈一致hash算法(redis)?
- 数据库索引,B+树的特性和建树过程。
- mysql相关的行锁,表锁;乐观锁,悲观锁
- 谈谈多线程和并发工具的使用
- 讲讲Redis的架构和组件
- Redis的数据一致性问题(分布式多节点环境 & 单机环境)
- docker容器
耗时将近40分钟
阿里三面(高级技术专家面):
- 高并发情况下,系统是如何支撑大量的请求的?
- 接着上面的问题,延伸到了中间件,kafka、redis、rocketmq、mycat等设计思路和适用场景等
- 最近上过上哪些技术站点; 最近在看哪些书。
- 工作和生活中遇见最大的挑战,怎么去克服?
- 未来有怎样的打算
耗时将近30分钟
自我反省
以上就是支付宝中三次面试全部问题了,事后回忆自己的基础确实不扎实暴露了很多弊端;
同时这次面试也让我冷静了下来,本就是准备试着投投简历,看看现在市场的需求,并没有做充足的准备;现在也知道接下来努力方向在哪里了;
幸好三面的时候加了阿里常老师的微信,事后常老师告诉我说:如果招聘名额再多一个的话我会入选的,相比来说我虽然差了点,但是差的也并不多;同时给我指引了学习方向,只要把这几个重点学习一遍,进大厂轻轻松松,没一点问题。现在分享给各位小伙伴;
九大核心:
- 多线程高并发
- JVM虚拟机
- 设计模式
- redis
- zookeeper
- mysql调优课程
- netty
- spring源码分析
- 算法
之后我就开始了三个月的恶补之旅。。。
我这三个月学习资料与路径
下面所有资料都可以免费分享给各位,点击此处即可
多线程高并发:
JVM虚拟机:
设计模式:
设计模式是纯看马士兵老师的视频共9.5个G,视频讲解是真的香,会让你理解得更为透彻;
Redis:
Zookeeper:
Mysql:
Netty:
着重推荐这一本《跟着案例学Netty》;本书共19个案例,用案例详细透解Netty在实操中的实际问题;是一本快速帮人出坑的好书;
Spring源码分析:
对于Spring源码起初也是在看一些书籍,结果就是看完就忘,理解不深刻,之后发现看视频并跟着实操是最快的理解方式;Spring源码100集真是香到不能再香了;
算法:
关于算法我可要多说两句了,因为我能进入字节跳动全靠它。
这是一本程序员面试宝典!书中对IT名企图面试的类别转化的最优解进行了总结,并提供了相关的代码实现。针对当前程序员面试缺乏权威的总结总结这一痛点,这本书选择“将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。”
本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联系,使知识的学习避免碎片化。书中将所有的面试题从难到易依次分为“将、校、尉、士” 四个档次,方便读者有针对性地选择“刷”题。本书所收录的所有面试题都给出了最优解讲解和代码实现,并且提供了一些普通解法和最优解法的运行时间对比,让读者真切地感受到最优解的魅力!
看过的面经:
上面所有资料都可以免费分享给各位,只需点击此处即可免费获取
幸运女神的再次眷顾
在恶补了三个月之后迎来了一次字节跳动的内推机会(谢谢马老师给的一次内推机会)
下面给大家再看看字节跳动问的面试题吧!(字节三面压力很大呀!)
一面
40min
- Java内存模型
- 两个进程的变量的地址相同,它们之间的写操作有相互的影响吗
- 进程通信的方式
- 关系型和非关系型数据库
- 事务的特点
- 原子性和一致性的实现原理(不会)
- TCP和IP为什么要四次挥手
- Close_ wait状态是什么(不会)
- 甲乙轮流射箭,两个人命中靶子的概率都是0.5 ,谁先射中就赢,问甲获胜的概率(答案2/3 )
- 算法题:给出一串数字,去掉k个数,问能形成的最小的数
二面
50min
- Java HashMap
- put 数据的过程
- 链表非常长会怎么样
- 什么情况下会转红黑树
- ConcurrentHashMap作的改进
- 常见的垃圾回收算法
- 引用计数的循环引|用的情况
- MySQL的联合索引
- 索引的底层结构
- 100个人坐座位,第一个人随机坐一个座位,后面的人优先坐自己的座位,只有当自己的座位被占了才会随机坐,问第100个人能坐到自己座位的概率(答案50% ,不会)
- 段页式管理下, CPU取数据要几次访存
- 算法题:给出一个数字串的排列,找出下一一个比当前数更大的一个排列(不能用next_ permutation )
三面
55min
- 场景题:对HashMap rehash的时间进行优化
我第一次答了:事先预估capacity ,直接申请相应大小
我第二次答了:扩容时仅申请数组但不拷贝,当get命中时顺便拷贝过去
缺点是什么(可能会生成很多数组)
再优化
- 手写单例模式(饿汉、DLC懒汉)
- 算法题:给出一个转义后的字符串,问原串是什么? (写得并不太满意)
字节效率很高,面试完毕的第四天就已收到offer ,挺开心的哈。
最后祝各位看官都可以找到自己心仪的工作。