前言
对于很多没有学历优势的人来说,面试大厂是非常困难的,这对我而言,也是一样,出身于二本,原本以为就三点一线的生活度过一生,直到生活上的变故,才让我有了新的想法和目标,因此我这个二本渣渣也奋斗了起来,竟拿下了阿里P6岗。今天分享这波面经,主要是希望能够激励到同样被学历所困扰的技术人,能够对职业生涯和技术规划有一个参考价值。
进大厂需要的知识
那么,对于技术人,尤其是 Java 人来说,到底需要掌握什么技术才能通过筛选呢?这里列出几个流行的技术:
1、JAVA并发编程
对于一个 Java 程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一。因为并发编程是 Java 语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,更为考验一个程序员的内功。
2、Java虚拟机
熟知 Java 虚拟机的工作原理可以大幅提升日常编程的效率,对寻常 Bug 的修复更是轻而易举。同时,这也是Java 技术的重要组成成分之一,是实现技术进阶必不可缺的知识。
3、Nginx
Nginx 很火,因为它就像一个万能药,在任何存在性能需求的场合总能找见它的身影,它可以轻松在百万并发连接下实现高吞吐量的 Web 服务。同时,类似于 OpenResty 和 Tengine 这样的第三方模块群,进一步发展出了新生态,使 Nginx 的应用进一步向应用防火墙、CDN 等领域扩展。
4、Spring全家桶
毋庸置疑,Spring 早已成为 Java 后端开发事实上的行业标准,无数的公司选择 Spring 作为基础的开发框架,大部分 Java 后端程序员在日常工作中也会接触到 Spring ,因此,如何用好 Spring ,也就成为 Java程序员的必修课之一。 同时,Spring Boot 和 Spring Cloud 的出现,可以帮助工程师更好地基于 Spring 及各种基础设施来快速搭建系统,可以说,它们的诞生又一次解放了大家的生产力。 因此,Spring Boot 和Spring Cloud 已成为 Spring 生态中不可或缺的一环。想成为一名合格的 Java 后端工程师,Spring Framework、Spring Boot、SpringCloud 这三者必须都牢牢掌握。
5、Kafka
Kafka 是 LinkedIn 开发并开源的一套分布式的高性能消息引擎服务,后来被越来越多的公司应用在自己的系统中,可以说,Kafka 是大数据时代数据管道技术的首选。
6、Redis
Redis 是如今互联网技术架构中,使用最广泛的缓存。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储……同时, Redis 也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一。特别是那些优秀的、竞争激烈的大型互联网公司(比如 Twitter、新浪微博、阿里云、腾讯云、淘宝、知乎等),通常要求面试者不仅仅掌握 Redis 基础使用,更要求深层理解 Redis 内部实现的细节原理。毫不夸张地说,能把 Redis 的知识点全部吃透,你的半只脚就已经踏进心仪大公司的技术研发部。
这些技术相信大家都不陌生,都是近年来进大厂所必需的硬技能。把这些硬技能熟悉掌握之后2020年不愁拿不到高薪offer。
收到很多粉丝的私信说没有学习资料,放心,像我这么宠粉的博主怎么会让我的粉丝找不到学习资料呢?博主已经为你们整理好了这些硬技能的书籍文档资料以及视频学习资料。管住公主号:JavaAC,即可
阿里内部线程池学习资料
Redis实战
JVM与性能优化知识点整理
Spring全家桶书籍文档资料展示
针对性的学习知识
只是看看资料当然是不足以获得进大厂的资格的,想要进入大厂一定要有一个系统的学习过程,我一个本二毕业的渣渣都懂的这个问题,其实很多比我条件好的人都懂这个道理,只是以各种借口拒绝去学习罢了,个人建议:做开发工作必须要深造,不然没有竞争力,以下附上进大厂需要学习的知识点。
容器(Dubbo,Docker,K8S)
容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接启用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
微服务(Spring,SpringMVC,Spring Cloud)
微服务(或微服务架构)是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。这些服务通常
数据库(zookeeper,Redis,MySQL)
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
经过系统的学习后终于也是获得了去阿里面试的机会,下面附上面试过程。
阿里一面
- 自我介绍、自己做的项目和技术领域
- 说一下sync的底层实现,锁优化,和lock的对比
- 讲一下JVM参数调优详细过程
- 为什么这么设置?好处是什么?描述gc场景,如何去分析gc日志?
- redis数据结构,使用场景,微博场景使用redis如何去设计用户关系?
- 线程池参数设定,为什么这么设定,作用?7大参数
- spring的循环依赖如何解决?为什么要三级缓存?
- 优先级队列的底层原理?
阿里二面:
- 自我介绍一下吧
- 聊项目
- 结合你项目问你如何设计,提出漏洞,你怎么解决?如何改进,万一挂了?加一台机器有没有问题?如果我非要不出问题怎么办?
- 高并发下单扣库存场景如何设计
- rocketMQ架构设计原理
- Dubbo框架实现原理
- 最近读了什么书?平时怎么学习?
- 常用的负载均衡,该怎么用,你能说下吗?
阿里三面:
- 这一面主要问项目,给你的压力感比较强
- 结合项目问,为什么这么设计?让你去优化,你怎么优化,引导你用一个合理的更好的方式去优化,数据库的设计等
- 在公司做了什么事情,各个系统业务线都是做什么的,你的绩效,手写算法链表反转?
阿里四面:
- JVM的主要组成部分及其作用?
- JVM运行时数据区包含哪些?
- JVM垃圾回收机制,何时触发MinorGC等操作
- JVM的垃圾回收算法:
- JVM 调优的工具?
- 常用的JVM调优参数?
- 堆栈的区别?
- 详细介绍一下 CMS 垃圾回收器?
- 怎么判断对象是否可以被回收?
- 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
- java类加载过程?
- 把你知道的中间件都说一下吧(瞬间懵了一下)
HR面:
- 为什么来阿里?
- 之前没考虑过阿里吗?
- 毕业这么久了,你觉得自己最大的改变是什么?
- 用一句话总结一下自己
面试阿里前,我做了哪些准备。
(1)准备简历
简历是门面,更是敲门砖,能否拿到大厂的面试机会,就要看自己的简历如何,抛开学历以外,大厂最看重简历是否有亮点,因此我们对简历内容要有准备,对自己的突出点,包括技术、个性上的亮点,要练习表达,避免临时组织语言。
(2)提升技能
实际上我有个阿里的朋友很早之前就向我透露过,很多人认为大厂看重学历,但实际情况并不完全是,在阿里只以能力论英雄。所以,在日常生活中,通过不断地学习,提升自己的能力,努力去拉近自己与目标值的距离,这是很有必要的,也是未来的必然趋势。
关于提升自己的技术栈广度与深度,我的做法是:
读一些源码
读一些技术笔记
猛刷面试题
对于base不是太好的人来说,刷面试题实际上是最具有“急救”效果的办法,因此在面试阿里前,我是刷了不少面试题的,目的倒不是希望面试时能被问到原题,而是对大厂面试有一个相应的了解,清楚阿里面试会问一些什么,涉及到哪些技术栈等。