阿里 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开发的,如果要额外开发新的功能,就需要在本地运行、修改、打包重新发布到宝塔才能实现功能更新&…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...