阿里 Java 程序员面试经验分享,附带个人学习笔记、路线大纲
背景经历
当时我工作近5年,明显感觉到了瓶颈期。说句不好听的成了老油条,可以每天舒服的混日子(这也有好处,有时间准备面试)。这对于个人成长不利,长此以往可能面临大龄失业。所以我觉得需要痛下决心改变一下现状。我定的目标就是进大厂,因为我觉得小厂做到我目前的程度已经很难有很多的提升了。
去年暑期面了阿里很多部门,现在已经成为了阿里的一员,把我之前的面经再拿出来分享给大家
部门A
一面 (已过)
介绍自己的RPC项目
BIO 和 NIO的区别?
项目中负载均衡怎么实现的
一致性哈希在某节点宕机时怎么保证一致性的?
了不不了解hessian协议(不太了解)
Zookeeper有几种角色?
Zookeeper集群节点宕机了怎么发现剔除的?
List Set Map 讲一下
HashSet底层结构
Set时间查询复杂度都是O(1)吗 (TreeSet不是)
reentrantlock、和synchronized的区别
了解死锁吗
算法题
队列实现栈
二面
介绍一下RPC项目聊起
实现高性能的RPC关键在于哪些方面(我从序列化,通信协议,IO模型三个方面回答)
项目如果要实现内存零拷贝怎么做?
有没有提供什么扩展的接口,钩子给其人或程序方便扩展。
AVL树深度差不能超过多少?红黑树时间复杂度?
讲一下什么样的情况能用动态规划?
TCP三次握手过程讲一下
TCP发数据过程中必须按顺序接收吗
Select poll epoll区别
虚拟内存和物理内存谈一谈。
聊聊GC。
还有三面
部门B
介绍一下RPC项目
负载均衡了解哪些(dubbo的四种策略说了下)
一致性哈希比其他方法的优点?(当增加或减少服务节点时,不会造成哈希表的全量重新映射,而是增量式的重新映射)
Java里的RMI了解吗?(不太了解)
除了Dubbo,还了解其他RPC框架吗(gRPC, Thirft 有什么区别)
除了NIO,还有什么?(BIO AIO)
除了Select,还有什么(Poll Epoll,区别是什么)
容器了解什么(只了解点Docker)
做题
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
LRU 简单谈下怎么实现?(参照LinkedHashMap)
二面
印象深刻的项目介绍一下?
RPC具体讲一下?
介绍一下服务注册中心怎么做的?
为什么用Zookeeper做注册中心(优点,与其他选型对比下)
整体服务调用链路是怎样的?
JDK动态代理机制是怎么实现的(反射,再底层原理不太清楚)
负载均衡是怎么做的?
Dubbo为什么推荐基于随机的负载均衡?
序列化怎么做的?Kryo原理了解吗?
RPC中是用Spring进行管理的,那用到了事务吗(没有)
介绍一下你理解的Spring。
依赖注入有哪写方式?
为什么选用Netty来做通信框架?
还知道其他网络通信框架?
能聊聊gRPC和dubbo这两类框架区别?
有没有考虑过服务治理相关的事情吗(还没有)
现在微服务的技术发展方向有了解吗
能聊下TCP吗?
能大概描述一下HTTP请求的过程?
HTTP提交请求时可以通过Form和JSON来提交的区别?(不太清楚)
Cookie和Session区别聊一下?
RPC项目中有做单元测试吗?(没有)
聊另一个项目
为什么用MyBatis(从与JDBC、Hibernate的区别聊)
事务隔离级别有了解吗?
SpringBoot项目中用到事务了吗?(没用到)
项目中用到查询优化了吗?(用了联合索引)
建索引基于哪些原则?(最左匹配原则)
HashMap聊一下?
Java多线程编程需要注意些什么?
JVM内存区域能讲一下吗?
堆里面内存回收大概讲一下?
有碰到过内存泄漏的问题吗?
Exception体系聊一下?
Linux熟吗,会shell编程吗?
平衡树和红黑树区别?
开源社区有没有什么参与?
对什么新技术比较感兴趣?
英文怎么样,来段英文自我介绍(懵逼中,因为没准备,所以没怎么介绍好)
反问
三面
介绍学习经历。
聊下自己RPC的架构?
了解Nacos和Zookeeper的区别吗?
用的TCP还是HTTP2传输的?
有没有了解gRPC等用HTTP2传输的协议?
有没有完整比较过性能?比较传输协议的性能?序列化的性能?(没有)
为什么选用ProtoBuff?
做RPC时会做内容协商吗?
你有把自己的RPC项目用在生产上吗(没有)
学习过程中收获最大的是什么?
Netty怎么实现高性能的?
有学计算机相关的课程吗?
能描述一下堆排序吗?(介绍堆,如何构建堆,堆排序)
能用英语介绍一下怎么实现并发编程吗,两分钟就好(??我展示出迟疑)
那就换用英语介绍下进程和线程的区别把?(也不简单啊。。)
介绍自己研究生阶段的研究。
未来职业规划,喜欢什么样的岗位。
容器有了解吗(不怎么了解)
云计算有了解吗(不了解)
最近还在学什么内容。
部门C
一面
RPC项目介绍
dubbo不足,以及优化方向?(语言支持)
netty高性能主要依赖了哪些特性?
netty bytebuf工作原理,和NIO里buffer区别?
服务注册原理
负载均衡?
聊另一个项目
AQS原理
做题
1 两个线程轮流打印
2 LRU
没写好,都知道怎么弄,就是写出了bug(凉凉)
跟面试官交流时从话语中以为凉凉,隔了好久告诉我过了,可能是想在给我一个机会试试把。
部门D
一面(凉)
介绍一下RPC项目
序列化怎么实现?
主要是Kryo(两个特点介绍了一下)
那你这个序列化还是针对Java语言的,如何实现跨语言的序列化或者rpc框架?
CGLib 底层
一个类有方法a和方法b,两个方法都被代理,方法a中调用了方法b,被代理后调用a方法,a方法中调用的是被代理的方法b还是普通方法b?(求大神解答)
分布式数据一致性协议都知道哪些(2PC 3PC Paxos)
Raft了不了解
知道怎么撑爆方法区内存吗?或者说怎么动态生成很多方法? (CGlib 动态生成类、方法)
private default protected public 权限
反射可以访问private方法和属性吗?如何访问?
通过 setAccessible(true)
Spring AOP说一下
AspectJ 原理知道吗。
Exception的体系?是捕获还是抛出,最佳实践是怎样的?
Java线程的状态,状态间怎么转换
怎么打断一个线程?Thread.interupt(),怎么安全优雅实现
做题
手写LRU
部门E
一面
简单介绍下JVM。
OutOfMemory出现原因和解决办法。
堆中哪个区域不会出现OutOfMemory?
孤儿进程和僵尸进程是什么?(不了解)
线程之间的同步方式?
GC常用的垃圾回收器?
谈下对Spring的理解。
抽象类和接口的区别?
haspmap和concurrentHashmap区别?
MySQL里索引的原理?
B+树 B树 红黑树的区别?
TCP协议能不用两次握手,如果两次是对服务器影响大还是客户端影响大?
HTTP与HTTPS区别
说一下堆排序和桶排序)的基本思想和时间复杂度。
做题
1 链表找倒数第K个节点。
2 剪绳子 剑指offe原题
部门F
一面
对JVM了解哪些模块?
讲一下JVM的内存模型?
垃圾回收策略?
JVM参数、调优做过吗(没有)
类的加载过程知道吗?
线程的生命周期?
常用的线程池用过吗?有哪些?
线程池拒绝策略?
简单说一下CAS?ABA问题了解吗?
AQS了解多少?子类有哪些?
Semaphore知道吗?
项目中异常怎么处理的?
Spring的Bean怎么加载的?
循环依赖了解吗?
Spring中AOP实现原理知道吗?
JDK动态代理和CGLib的区别?
Spring的一个接口ApplicationListener了解吗(不了解)
为什么用SpringBoot,优点是什么?
实现RPC框架是怎么实现的?
除了Netty还知道哪些网络传输框架吗?
二面
dubbo容错机制
dubbo的负载均衡
Serializable和Externalizable懂吗?(不知道Externalizable)
IO/NIO/AIO区别?
JDK中NIO有哪些重要组件?
Dubbo或Netty源码中你觉得有亮点的地方。(没看过不会)
为什么现在还在用JDK8?
OpenJDK 和 Java JDK的区别?(这个问题是为了提示上一个问题的答案吗)
为什么JDK8要提供接口的默认实现,有抽象类还要这个干嘛
为什么要提供Lambda表达式?
为什么JDK8要去除永久代(除了1不受堆大小空间限制,2与Jrockit虚拟机合并 两个原因还有啥???)
说下G1垃圾回收器。
说下JUC都有些什么?
说明下AQS的实现?
说下volatile?
有哪些线程池?线程池实现原理?哪些核心参数?
当前任务空闲,corePoolSize的几个线程怎么保持活性,不被销毁?
线程interupt,怎么实现优雅的终止?
JVM提供了哪些锁(偏向锁、轻量级、自旋锁、重量级锁)
介绍下红黑树最坏情况下查询时间复杂度?(不懂)
跳表了解吗?和红黑树应用场景有什么不同?
解释贪心和动态规划以及应用场景
当时花了几个月充分准备,十六个字,**增加深度、扩展广度、覆盖死角、挖掘项目。**介绍下当时具体的准备。
- 花了近2个月时间,Spring源码,手画核心流程不少于3遍,面试前做到能熟练讲述Spring容器启动流程、事务切面流程、MVC流程。
- 两周时间,学习MyBatis源码,做到ORM框架主流程心中有数,这块学得不是特别深。
- 花了很长的时间深入的学习JVM和并发编程,尤其是并发编程这块,从不同角度深入理解并发编程。最终进字节这块起了很大作用。对锁有深入认识,**阅读JVM synchronize关键字源码不下10遍,**对其中的大部分细节了然于胸,绘制了流程图,大家可以参考看看。当然,各类其他锁也都有学习源码,能深入比较各类锁的特点。
- 一周恶补MySQL,对于索引、锁、SQL优化重点掌握(深度略有不足,后期面试过程中有一定加强)
- 面试前,一周时间突击了网络编程,重点在基本知识和Java原生网络编程方面,Netty略微学了一点。增加深度就是主要从以上6个专题的学习体现的。都是Java开发必备的基本技能,一定要有深度。
下面讲下扩展广度,各类知识广泛涉猎。
- 面试前穿插一周时间学习Redis,redis我是用过的,但是用得很浅,专题学习下来收获很大,开阔思路。重点在redis应用和高可用架构。
- 同时穿插一周学习分布式事务、分布式锁等等解决方案
- 两三天时间Dubbo基础,放弃源码部分,掌握RPC框架核心思想
- 两三天时间ZK基础,放弃源码部分,掌握ZK精华,及常问面试题
- 了解一些MQ的相关基础知识,没有过多学习,主要是没时间了
以上几个分布式相关专题略有涉猎,多年分布式的应用经验,需要有一定的知识广度,才能做出较合理的技术设计。
之后就是覆盖死角,主要从核心面试题出发,我当时找到一份《Java高级进阶快速面试指南》,是一份Github总结的比较精炼的题库,查缺补漏,做到各类知识都能有所涉猎,**不至于冷门问题一句话也说不上来。并且自己为了加深自己的记忆也在复习过程中整理了学习大纲以及完整的学习资料,个人感觉还是非常全面和详细的,不管是零基础还是面试复习都可以直接来看
总结
最后提几个小建议:
- 对简历上的内容一定要有把握,不要给自己挖坑;
- 面试遇到不熟的内容,简单介绍下自己的认识,承认了解有限,不要硬着头皮瞎说;
- 尽量通过亮点项目和准备充分的问题体现自己的价值,也可以通过这些内容引导面试官问自己擅长的领域;
- 常见非技术问题有所准备,不至于当场抓瞎;
- 算法数据结构要有准备,面试经常要手写code。
相关文章:

阿里 Java 程序员面试经验分享,附带个人学习笔记、路线大纲
背景经历 当时我工作近5年,明显感觉到了瓶颈期。说句不好听的成了老油条,可以每天舒服的混日子(这也有好处,有时间准备面试)。这对于个人成长不利,长此以往可能面临大龄失业。所以我觉得需要痛下决心改变一…...

十大算法基础——上(共有20道例题,大多数为简单题)
一、枚举(Enumerate)算法 定义:就是一个个举例出来,然后看看符不符合条件。 举例:一个数组中的数互不相同,求其中和为0的数对的个数。 for (int i 0; i < n; i)for (int j 0; j < i; j)if (a[i] …...

【PAT甲级题解记录】1018 Public Bike Management (30 分)
【PAT甲级题解记录】1018 Public Bike Management (30 分) 前言 Problem:1018 Public Bike Management (30 分) Tags:dijkstra最短路径 DFS Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1018 Public Bike Managemen…...

SpringCloud————Eureka概述及单机注册中心搭建
Spring Cloud Eureka是Netflix开发的注册发现组件,本身是一个基于REST的服务。提供注册与发现,同时还提供了负载均衡、故障转移等能力。 Eureka组件的三个角色 服务中心服务提供者服务消费者 Eureka Server:服务器端。提供服务的注册和发现…...

原生django raw() 分页
def change_obj_to_dict(self,temp):dict {}dict["wxh_name"] temp.wxh_namedict["types"] temp.typesdict["subject"] temp.subjectdict["ids"] temp.ids# 虽然产品表里没有替代型号,但是通过sql语句的raw()查询可以…...

Android 9.0 Settings 搜索功能屏蔽某个app
1.概述 在9.0的系统rom产品定制化开发过程中,在系统Settings的开发功能中,最近产品需求要求去掉搜索中屏蔽某个app的搜索,就是根据包名,不让搜索出某个app., 在系统setting中,搜索功能中,根据包名过滤掉某个app的搜索功能,所以需要熟悉系统Settings中的搜索的相关功能,…...

SQL性能优化的47个小技巧,果断收藏!
1、先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器; 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据; 未命中缓存后,MySQL通…...

SE | 哇哦!让人不断感叹真香的数据格式!~
1写在前面 最近在用的包经常涉及到SummarizedExperiment格式的文件,不知道大家有没有遇到过。🤒 一开始觉得这种格式真麻烦,后面搞懂了之后发现真是香啊,爱不释手!~😜 2什么是SummarizedExperiment 这种cla…...

运行Qt后出现无法显示字库问题的解决方案
问题描述:运行后字体出现问题QFontDatabase: Cannot find font directory解决前提: 其实就是移植后字体库中是空的,字没办法进行显示本质就是我们只需要通过某种手段将QT界面中的字母所调用的库进行填充即可此处需要注意的是,必须…...

数据库浅谈之共识算法
数据库浅谈之共识算法 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是数据库浅谈系列,收录在专栏 DATABASE 中 😜😜😜 本系列阿呆将记录一些数据库领域相关的知识 …...

代码随想录算法训练营 || 贪心算法 455 376 53
Day27贪心算法基础贪心的本质是选择每一阶段的局部最优,从而达到全局最优。刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。做题的时候,只要想清楚 局部最优 是什么&…...

PMP考前冲刺2.25 | 2023新征程,一举拿证
题目1-2:1.项目经理正在进行挣值分析,计算出了当前的成本偏差和进度偏差。发起人想要知道基于当前的绩效水平,完成所有工作所需的成本。项目经理应该提供以下哪一项数据?A.完工预算(BAC)B.完工估算(EAC)C.完工尚需估算(ETC)D.完工偏差(VAC)2…...

【自然语言处理】Topic Coherence You Need to Know(主题连贯度详解)
Topic Coherence You Need to Know皮皮,京哥皮皮,京哥皮皮,京哥CommunicationUniversityofChinaCommunication\ University\ of\ ChinaCommunication University of China 在大多数关于主题建模的文章中,常用主题连贯度ÿ…...

C++入门:模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,…...

【MySQL】索引常见面试题
文章目录索引常见面试题什么是索引索引的分类什么时候需要 / 不需要创建索引?有什么优化索引的方法?从数据页的角度看B 树InnoDB是如何存储数据的?B 树是如何进行查询的?为什么MySQL采用B 树作为索引?怎样的索引的数…...

【Web逆向】万方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf
【Web逆向】万方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf声明一、了解protobuf协议:二、前期准备:二、目标网站:三、开始分析:我们一句句分析:先for循环部分:后…...

Amazon S3 服务15岁生日快乐!
2021年3月14日,作为第一个发布的服务,Amazon S3 服务15周岁啦!在中国文化里,15岁是个临界点,是从“舞勺之年”到“舞象之年”的过渡。相信对于 Amazon S3 和其他的云服务15周岁也将是其迎接更加美好未来的全新起点。亚…...

【python】函数详解
注:最后有面试挑战,看看自己掌握了吗 文章目录基本函数-function模块的引用模块搜索路径不定长参数参数传递传递元组传递字典缺陷,容易改了原始数据,可以用copy()方法避免变量作用域全局变量闭包closurenonlocal 用了这个声明闭包…...

AoP-@Aspect注解处理源码解析
对主类使用EnableAspectJAutoProxy注解后会导入组件, Import(AspectJAutoProxyRegistrar.class) public interface EnableAspectJAutoProxy {AspectJAutoProxyRegistrar类实现了ImportBeanDefinitionRegistrar接口中的registerBeanDefinitions()方法,此…...

宝塔搭建实战php悟空CRM前后端分离源码-vue前端篇(二)
大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享了悟空CRM server端在宝塔部署的方式,但是由于前端是用vue开发的,如果要额外开发新的功能,就需要在本地运行、修改、打包重新发布到宝塔才能实现功能更新&…...

FastASR+FFmpeg(音视频开发+语音识别)
想要更好的做一件事情,不仅仅需要知道如何使用,还应该知道一些基础的概念。 一、音视频处理基本梳理 1.多媒体文件的理解 1.1 结构分析 多媒体文件本质上可以理解为一个容器 容器里有很多流 每种流是由不同编码器编码的 在众多包中包含着多个帧(帧在音视…...

二分查找的实现代码JAVA
二分查找一、思路二、实现代码(普通版)三、整数溢出问题四、改进代码一、思路 1.前提: 有已排序数组A (假设已经做好) 2.定义左边界L、 右边界R,确定搜索范围,循环执行二分查找(3、4两步) 3.获取中间索引 M Floor((LR) 1/2) 4.中间素索引的值…...

cesium: 设置skybox透明并添加背景图 ( 003 )
第003个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置skybox透明并添加背景图。 我们不想要黑乎乎的背景,想自定义一个背景图,然后前面显示地球。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共70…...

【python】类的详解
注:最后有面试挑战,看看自己掌握了吗 文章目录PO verses OOPOOO当一个类很复杂的时候,考虑多弄一个类的改造私有类的模块化静态类verses动态类动态类查看模块源代码对象机制的基石 PyObjectPO verses OO PO PO耦合性高,很多过程…...

西安银行就业总结
引 进银行性价比最高的时刻是本科,研究生的话可以去需要研究生较多的银行,比如邮储或者证券类的中信建投。中信建投很香,要求本硕西电。研究生学历的话,一般情况下银行不会卡本科,只看最高学历,部分银行需…...

JavaScript Window
文章目录JavaScript Window浏览器对象模型 (BOM)Window 对象Window 尺寸其他 Window 方法JavaScript Window 浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话"。 浏览器对象模型 (BOM) 浏览器对象模型(Browser Object Model (BOM))…...

那些开发过程中需要遵守的开发规范
入职公司三天,没干啥其他活,基本在配置本地环境和阅读相关文档。技术方面公司基本用的是主流的技术体系,入职后需要先阅读阿里的开发规范和其他的一些产研文档。今天整理一些平时需要关注的阿里规约和数据库开发规范,方便今后在开…...

EFCore 基础入门教程
一、EFCore 基础入门教程EF 框架的简介、发展历史;ORM框架概念学习地址:https://blog.csdn.net/u011127019/article/details/129212786?spm1001.2014.3001.5502EFCore 安装,引入、支持的数据库学习地址:https://www.cnblogs.com/…...

HTML5 Drag and Drop
这是2个组合事件 dom对象分源对象和目标对象 绑定的事件也是分别区分源对象和目标对象 事件绑定 事件顺序 被拖拽元素,事件触发顺序是 dragstart->drag->dragend; 对于目标元素,事件触发的顺序是 dragenter->dragover->drop/…...

惠普m1136打印机驱动程序安装教程
惠普m113打印机是一款功能强大的多功能打印机,它能够打印、复印、扫描和传真等。如果你要使用这款打印机,你需要下载并安装驱动程序,以确保它能够在你的计算机上正常工作。在本文中,我们将介绍如何下载和安装惠普m1136打印机驱动程…...