前言

呼!终于拿到阿里offer了,可以放松一下休息休息了,想想这将近一个月的面试经历,实在是太难了!

 

背景

普通本科,非985,非211的一个普通本科,应届生,在学校的成绩算不上有多好(平常玩乐居多,大学嘛,你懂得!),本来自己的能力也就找个相对来说的小公司,这次能拿到阿里offer是我万万没想到的!

突遭疫情

刚进2020年,疫情突然爆发,以迅雷不及掩耳之势席卷全国!替国家担忧是肯定的,总不能希望国家来个生化危机吧~~

担忧以外就是开心了,毕竟可以痛痛快快的打游戏了~

ps:很多人都懂我的想法吧

担忧前程

平常还是有关系一些博客什么的,能看到一些有意思的东西,还有一些看上去很牛逼的技术(可以拿去和同学吹牛逼)!看到了疫情裁员等等文章,我开始着急了!

被裁掉的程序员这么多,再加上今年和我一起毕业的“程序员”,我还能找到工作吗?

于是我找到了上一届的学长(阿里P6),问他我这样的情况该怎么学习,才能脱离困境!

学长也是异常的给力,首先给了我一份阿里大佬整理的学习文档,这份文档涵盖了Java基础、网络、数据库、多线程、JVM、设计模式、算法、Spirng、微服务、zookeeper、kafka、MQ、Hadoop、Spack、分布式等超多面试常问的核心知识点,还有学长自己整理的面试合集,学习视频等等,经过长达6个月的学习、将近一个月的面试最终将自己的技术提升到了一个非常高的层次(仅仅想想过的层次)拿到了阿里的offer

分享下阿里七面过程吧

阿里淘系 七面 工程项目经验基本为0 所以被死磕Java

总结起来:面试官喜欢抛出一个大点,看你能讲多广多深

一面: 90mins

讲项目

讲一个集合框架整体框架

分Collection和Map两大类全部讲一遍,每一个接口和对应实现类,他们类各自的特点,性质,基本参数,能讲多深讲多深

arraylist和hashset区别

为什么hashmap要在8的时候树华

根据泊松分布概率(源码注释里写了)

hashmap线程安全的方式

hashtable和concurrenthashmap的各自特点,能讲多深讲多深

为什么hashtable被弃用了,cch1.7之前和1.8之后的区别

锁的分类

乐观锁、悲观锁、自旋锁、读写锁、排它锁、共享锁、分段锁等等各自特点,以及它们在java中具体的实现方式

Spring IOC的底层实现

XML+dom4j+工厂+单例

索引不适用的条件

索引列上有函数,不满足最左前缀,使用了不等号,使用了范围查询等等

索引的分类

B-Tree索引,Hash索引,全文索引,单值索引、唯一索引、复合索引、聚簇索引、非聚簇索引等等,以及它们各自的特点

二面:40mins

讲项目

线程池了解多少

executors创建的几种线程池,直接new ThreadPoolExecutor,7个参数

线程池拒绝策略分别使用在什么场景

Spring AOP的底层实现

动态代理,newProxyInstance,cglib,ASM

讲一下代理模式

动态代理,静态代理

你都了解什么设计模式,他们在JDK中如何体现的

工厂,责任链,观察者,建造,代理,单例,原型等等在JDK中对应的体现。。。

三面coding:2h

千万级数据量的list找一个数据(多线程),抢红包

四面:50mins

讲项目

讲一下JVM堆内存管理

栈上分配->TLAB->新生代、老年代->可达性分析->GC算法->所有垃圾回收器及其优缺点和特点

那到底多大的对象会被直接扔到老年代

G1两个region不是连续的,而且之间还有可达的引用,我现在要回收其中一个,另一个会被怎么处理

听说过CMS的并发预处理和并发可中断预处理吗

平常怎么学习的和职业规划

五面coding:2h

百万级int数据量的一个array求和(fork/join)

六面交叉面:20mins

深挖科研项目

七面hr:20min

聊人生

面试肯定不是只面了阿里,腾讯、美团、字节大厂也都有过面试,拿到了好几个offer,最后根据多方面的条件选择了阿里

再分享一下这段时间整理的面试题

JAVA基础

  • 面向对象和面向过程的区别
  • Java语言有哪些特点?
  • 关于JVM JDK和JRE最详细通俗的解答
  • Oracle JDK和OpenJDK的对比
  • Java和C+ +的区别?
  • 什么是Java程序的主类应用程序和小程序的主类有何不同?
  • Java应用程序与小程序之间有哪些差别?
  • 字符型常量和字符串常量的区别?
  • 构造器Constructor是否可被override?
  • 重载和重写的区别
  • Java面向对象编程三大特性:封装继承多态
  • String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
  • 自动装箱与拆箱
  • 在一个静态方法内调用一个非静态成员为什么是非法的?
  • 在Java中定义一个不做事且没有参数的构造方法的作用
  • import java和javax有什么区别?
  • 接口和抽象类的区别是什么?
  • 成员变量与局部变量的区别有哪些?
  • 创建一个对象用什么运算符?对象实体与对象引用有何不同?
  • 什么是方法的返回值?返回值在类的方法里的作用是什么?
  • 一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗? 为什么?
  • 构造方法有哪些特性?
  • 静态方法和实例方法有何不同
  • 对象的相等与指向他们的引用相等,两者有什么不同?
  • 在调用子类构造方法之前会先调用父类没有参数的构造方法其目的是?
  • ==与equals(重要)
  • hashCode与equals (重要)
  • 为什么Java中只有值传递?
  • 简述线程、程序、进程的基本概念。以及他们之间关系是什么?
  • 线程有哪些基本状态?
  • 关于final关键字的一些总结

多线程与高并发

  • 什么是线程和进程?
  • 请简要描述线程与进程的关系,区别及优缺点?
  • 说说并发与并行的区别?
  • 为什么要使用多线程呢?
  • 使用多线程可能带来什么问题?
  • 说说线程的生命周期和状态?
  • 什么是上下文切换?
  • 什么是线程死锁?如何避免死锁?
  • 说说sleep0方法和wait0方法区别和共同点?
  • 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
  • volatile关键字
  • ThreadLocal
  • 线程池
  • Atomic原子类
  • AQS
  • Reference

JVM

  • 介绍下Java内存区域(运行时数据区)
  • 说一下Java对象的创建过程
  • 对象的访问定位有哪两种方式?
  • 说一下堆内存中对象的分配的基本策略
  • Minor Gc利和Full GC有什么不同呢?
  • 如何判断对象是否死亡?(两种方法)
  • 简单的介绍一-下强引用,软引用,弱引用,虚引用
  • 如何判断一 个常量是废弃常量?
  • 如何判断一个类是无用的类?
  • 垃圾收集有哪些算法,各自的特点?
  • HotSpot为什么要分为新生代和老年代?
  • 常见的垃圾回收器有哪些?

面试题肯定不止这些,不过头条文章篇幅有限制,就展示这些吧,面试题和答案都整理成了PDF文档,需要的朋友文末自取!

 

学长分享的阿里大佬整理的Java核心知识点手册

为啥分享出来?说不定你以后也进了阿里并且和我同一个部门呢,多个朋友多条路!(进阿里后的感悟,人脉很重要)

Java基础

这份手册真的超级nice,重点都展示的非常透彻、学起来非常轻松

 

网络

网络这块挺重要的,刚开始我也没意识到这点,还是在学长的提点下学的

 

数据库

 

多线程与高并发

手册还附带学习图谱,很详细,也很清楚,就是不知道最后发出去后怎么样。。。

 

 

JVM

 

算法

 

就展示这么多吧,我想已经足够你了解这份手册了,篇幅限制,我也没办法。。。

最后

前面也有提到过,阿里面试问的很深,其实不只是阿里,其他大厂也一样,另外每个大厂又有不同的侧重点,像字节跳动非常重视算法,四面下来问的算法题不少!

上面提到的学习手册还有整理的面试资料全部免费分享给大家,需要的朋友加下方小助理VX即可免费领取到

100%领取到,领取不到的可以在文章下面骂我!