一通电话,打开了我的秋招之路…
8月27日,接到阿里电话offer,这是我第一次正经面试,没想到意外通过,可惜是阿里边缘部门,因此被我拒掉了!而这通电话,也正式拉开了我的秋招之路,拒掉offer之后,想了想为什么不再面试一次,争取到阿里云或蚂蚁金服去呢?就这样,开始准备了起来,面试了一些互联网公司,最后拿下了好几个offer,分别是阿里云、爱奇艺、携程和滴滴。
以下附上我这次面试的面试题以及我个人的复习方法和学习心得,包括了一些可以免费分享给大家的文档,需要这些文档的(点击我)免费领取!
阿里云面经分享(3面技术+HR面)
之前有参加过阿里某边缘部门的面试,至于哪个部门就不说了,给了offer,但我拒了没有去,一直想进蚂蚁金服或阿里云,有了上次的阿里面试经验,这次面试阿里就更得心应手了,顺利了许多,最终历经4面拿下了阿里云的offer。
阿里云一面:大概耗时近30分钟,比我想象中的要短,回答得比较顺
- 首先按照惯例做了一个自我介绍
- 问项目,项目中的难点,怎么解决难点,之后的反思等等。
- 说一下Java的线程池,各个参数的作用是怎样的,如何进行的?
- 讲一下Redis
- 分布式系统的全局id是如何实现的?用zookeeper如何实现的呢?
- 分布式锁的方案,redis和zookeeper哪个好?如果是集群部署,高并发情况下哪个性能更好?
- kafka了解么?说一下
- 编程题,现场出了一个两个字符串,String s1 = “abcdefg”,String s2=“defgabc”。这两个字符串有一定的规律,让我写方法,判断传入的两个字符串是否满足这样的规律。
阿里云二面:轻松过,面试官出来都挂着欣赏的笑容(希望不是我自作多情!)
- 介绍项目吧,说说其中的难点
- 上次面试官问了你哪些问题,你觉得最难答的是哪方面?或者说上次你觉得自己哪个题没回答好?
- 那你再回答一次吧(说了一个自己知道答案的,差点掉坑里了)
- 反射的作用是什么?
- 数据仓库,多线程和并发工具等。
- 了解哪些中间件?具体说一下吧
- Dubbo中的rpc如何实现的?
- 自己实现rpc应该怎么做?
- Dubbo的服务注册与发现
- 设计一个线程安全的HashMap
- 快排的实现,时间复杂度和空间复杂度
- 讲一下JVM内存模型
- 讲一下垃圾回收机制
- 项目中查看垃圾回收
阿里云三面:问得开始比较深入一点,还好我稳住了!
- 项目中的权限管理
- 登录状态如何储存
- session和cookie的区别,session如何管理
- HashMap底层结构
- Synchronized关键字的用法
- synchronized修饰类方法和普通方法的锁区别,获取类锁之后还能获取对象锁吗?
- 类加载器的双亲委派模型的作用,能重复加载某个类吗?
- 类加载器的类的缓存,key是什么?
- 介绍一下Redis
- 如何将数据分布在不同的Redis?
- 有了解过取余算法?
- Spring的apo实现
- 字节码结构
- 说一下浏览器输入网址过程,结合springmvc
- HashMap在大量哈希冲突该怎么处理?
- MySQL为什么使用B+树?
阿里云HR面:
- 做项目的时候,你有什么收获,遇到问题你是怎么解决的?
- 有参加过什么竞赛吗?有发过论文吗?有什么成果吗?
- 参加过什么学生活动吗?担任过什么职务?
- 分布式有了解吗?
- 并发编程怎么样?线程池有了解吗?
- 现在面了哪些公司?
- 了解过互联网公司的文化吗?
- 你了解阿里多少?
- 你有什么问题吗?
爱奇艺安全云部门开发岗面经(2面技术+总监面,无正式HR面,电话回访问常规,然后给了offer)
爱奇艺一面:
- 自我介绍
- 线程中保持同步有哪些方法?
- 白板手写单例
- 堆和栈的区别
- 说说快排的原理
- 说一下Hashmap的put操作过程
- redis的hash数据结构最多能存储多少个元素
- 乐观锁与悲观锁的使用场景
- 了解哪些排序算法,讲讲复杂度
- 手撕归并排序
爱奇艺二面:
- Springboot与spring的区别、优点
- MySQL事务隔离级别
- 什么是幻读,如何解决?
- 写SQL,一张表三个字段,学生id,课程id,成绩,查询每一个学生得分最高的那门课
- 并发了解哪些?说一说线程互斥与线程同步的区别?
- 描述下登录模块怎么实现的?需要考虑哪些问题?
- 如何解决某一时间段内的大量非法请求,答了验证码与接口限流,问接口限流如何设计?
- 分布式session如何实现的?
爱奇艺三面:总监面
- 自我介绍做过哪些项目
- 项目中遇到的什么样的困难?怎么解决的?
- 如果要提高并发度你会怎么重新设计你的项目?
- 你在项目中用到的聚类算法,为什么选择它们,它们之间有何异同
- 最后以一道智力题结束了面试 1,6,30,__,3031
总结
携程和滴滴印象不太深,就略了吧!
面试前,对于技术层面的知识一定要准备好,复习要到位,建议最好在面试前做做面试演练,因为语言表达能力和沟通能力是非常重要的,在面试场上的语言表现力往往能够给你加分不少!
我的复习方法
01 复习JAVA基础理论(概念)
因为工作有几年,基本上都是实操,所以在理论方面多少有些欠缺了,但我知道面试时,面试官会着重考察一个人的基础理论,所以刷了《Java从入门到精通》这本电子文档,这份文档囊括「基础知识-核心技术-高级应用-项目实战」4个篇章,非常系统且完整,刷了一遍之后对体系内容就有了完整清晰的思路了,后续的专题训练复习相对来说就容易多了。
02 面试核心知识点(面试问什么?)
在还未开始准备之前,面试对于我来说,似乎熟悉又陌生,这主要是因为我几乎不知道现在的面试会问到一些什么,所以对此心里没有底。那么在面试之前,刷题就非常重要了,所以我们需要摸清楚面试会问到哪些知识点。于是在面试前,刷了一遍这套「面试核心知识点」,每个架构知识点在这个文档里都有清晰的详解,让人茅塞顿开。(文档中的知识点解析包括JVM、Java基础、多线程并发、Spring原理、微服务、设计模式、数据库、分布式缓存、RabbitMQ、MongoDB、Kafka等等。)
03 准备算法题(不止是LeetCode)
大部分互联网公司还会面算法题,这部分题目主要是来过滤掉那些非计算机专业出身的人,所以算法题是非常重要的,需要提前学习和准备,但大部分人盲目地去刷LeetCode,要知道LeetCode的题实在太多,只刷LeetCode是远远不够的。我的做法是收集并整理各个大厂近5年来最常问的算法题,在学习这些算法题时,学会举一反三,在面试时基本就能自信应对了。(免费分享个人整理的算法题库)
我的学习心得
1.好记性不如烂笔头
这句谚语,几乎无人不知无人不晓,但是总被许多初学者抛在脑后。在学习的时候,总是看的代码多,而动手练习的代码少!身为一个程序员都应该很清楚,代码如果不多动手敲它,它永远不会自己跑进脑中,所以多动手才是成功的关键。
2.花更多的时间分析问题
花更多的时间理解和分析问题,然后再设计方案吧。你会发现剩下的事情很容易了。设计不是说要用建模语言和工具,可以是仅仅看看天空在脑子里构思。那些在遇到问题就开始敲代码的人往往会最终偏离需求。作为程序员,当你在编写代码之前,尽量把问题分析透彻一点,这不仅能提高你编码的效率,更重要的是能提高你的分析问题能力。
3.重思考,多总结
一个段好的代码并不是它们越复杂越好,简单的方法,实现复杂的功能,才是我们最需要的。要提高编码速度,更重要的是简化梳理程序流程,以最小的代码量完成功能实现。所以编程最重要的事情是思考和总结。
总结
最后,祝愿大家都能够拿到心仪的offer!
以上我个人的复习方法所提及到的文档资料,均可以免费分享,包括阿里面试题的答案也整理成了文档,需要打包带走这些资料的,直接(点击我)免费获取哦!