阿里 Java 程序员面试经验分享,附带个人学习笔记、路线大纲

news2024/9/30 7:22:46

背景经历

当时我工作近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总结的比较精炼的题库,查缺补漏,做到各类知识都能有所涉猎,**不至于冷门问题一句话也说不上来。并且自己为了加深自己的记忆也在复习过程中整理了学习大纲以及完整的学习资料,个人感觉还是非常全面和详细的,不管是零基础还是面试复习都可以直接来看

总结

最后提几个小建议:

  1. 对简历上的内容一定要有把握,不要给自己挖坑;
  2. 面试遇到不熟的内容,简单介绍下自己的认识,承认了解有限,不要硬着头皮瞎说;
  3. 尽量通过亮点项目和准备充分的问题体现自己的价值,也可以通过这些内容引导面试官问自己擅长的领域;
  4. 常见非技术问题有所准备,不至于当场抓瞎;
  5. 算法数据结构要有准备,面试经常要手写code。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/370586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot系列03--自动配置原理

目录1. 相关注解2. 自动配置原理分析3. 自动配置图示Spring Boot的核心优势:自动装配、约定大于配置。 1. 相关注解 ConfigurationProperties(prefix "前缀名")该注解用于自动配置的绑定,可以将application.properties配置中的值注入到 Bean…

加油站ai系统视频监测 yolov5

加油站ai系统视频监测通过yolov5网络模型深度学习边缘计算技术,加油站ai系统视频监测对现场卸油过程中人员违规离岗、现场灭火器没有按要求正确摆放、以及卸油前需要遵守静电释放15分钟、打电话、明火烟雾情况、抽烟行为进行自动识别。YOLO系列算法是一类典型的one-…

九龙证券|不惧美联储重回鹰派,这个板块强势领涨!游戏才刚刚开始?

美联储开释鹰派信号,商场再度堕入博弈美元反弹的预期之中。 美联储近日发布的2月议息会议纪要显现,上行通胀危险是影响美联储前景的要害因素,在通胀持续回落至2%之前,需求采取限制性方针。叠加欧元区1月份中心通胀升至历史最高纪录…

Spring MVC 源码- HandlerExceptionResolver 组件

HandlerExceptionResolver 组件HandlerExceptionResolver 组件,处理器异常解析器,将处理器( handler )执行时发生的异常(也就是处理请求,执行方法的过程中)解析(转换)成对…

Python学习-----模块5.0(文件管理大师-->os模块)

目录 前言: 1.os.getcwd() 2. os.listdir(path) 3.os.walk(path) 4.os.path.exists(path) 5.os.mkdir(path) 6.os.makedirs(path,exist_okTrue) 7.os.rmdir(path) 8.os.remove(path) 9.os.path.join(p1,p2) 10.os.path.split(path) 11.os.path.isdi…

【python】类的详解

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

手写Android性能监测工具,支持Fps/流量/内存/启动等

App性能如何量化:如何衡量一个APP性能好坏?直观感受就是:启动快、流畅、不闪退、耗电少等感官指标,反应到技术层面包装下就是:FPS(帧率)、界面渲染速度、Crash率、网络、CPU使用率、电量损耗速度等&#xf…

Linux命令之awk

awk是一个有强大的文本格式化能力的linux命令,早期是在Unix上实现的,linux后来也可以使用了,我们在Linux上使用的awk是gawk(GNU awk的意思) 语法 awk [option] 模式{动作} file option表示awk的可选参数,可…

mybatis与jpa

1、官方文档 mybatis:mybatis-spring – jpa:https://springdoc.cn/spring-data-jpa/ 应用文档 jpa详解_java菜鸟1的博客-CSDN博客 JPA简介及其使用详解_Tourist-xl的博客-CSDN博客_jpa的作用 2、使用比较 mybatis一般用于互联网性质的项目&#x…

zabbix4.0 Web页面配置 - 聚合图形的实现

目录 1、主机组Host groups配置 创建主机组 ​编辑 将一个主机添加至刚才创建的主机里面 2、用户参数UserParameter设置 示例: 添加一个参数:show.host.messages 模拟zabbix模板里面的参数再添加一个userparameter 3、触发器设置 示例: …

浏览器缓存之强缓存和协商缓存

为什么需要缓存? - 缓存的优点: 1.减少对服务器的访问次数,减轻了服务器的压力 2.节省用户网络带宽(就是省钱,带宽都是按流量算钱的) 3.从缓存读取更匀速减少等待优化了用户体验 - 缓存的缺点 资源被缓存后用户不能及时获取不到最新的资源,所以缓存不能乱用 强缓存 涉…

TypeScript快速上手语法+结合vue3用法

TypeScript快速上手语法结合vue3用法 前言: 本篇内容不涉及TypeScript安装以及配置,具体安装及配置篇可以看下面目录,本篇只涉及TypeScript语法相关内容,及结合vue3的用法。不讲废话,简单直接直接开撸。 目录 Type…

理想汽车--笔试(算法)

笔试分为选择题和编程题,选择题考的很全面,包括概率论、数据库、机器学习、python、数据结构。 选择题 1.在某些规划的分类器中,依据规划质量的某种度量对规划排序,保证每一个测试记录都是由覆盖它的‘最好的’规格来分类&#…

LeetCode-54. 螺旋矩阵

题目来源 54. 螺旋矩阵 题目思路 while循环只遍历"环"&#xff0c;不成环就不遍历了 四个边界 上边界 top : 0下边界 bottom : matrix.length - 1左边界 left : 0右边界 right : matrix[0].length - 1 矩阵不一定是方阵 top < bottom && left < r…

使用git从github.com中clone一个项目的源代码---git与github的安装配置与使用入门

本文目录git简介github简介git的安装github的配置1&#xff0c;注册github帐号2&#xff0c;登录github3&#xff0c;配置git4&#xff0c;生成密钥5&#xff0c;在github中添加密钥6&#xff0c;使用git从github.com中clone一个项目的源代码git简介 Git是一个开源的版本控制管…

Java知识复习(六)常见的设计模式(单例、原型、工厂)

前言 发现无论是什么设计模式&#xff0c;其实总的原则就是减少耦合&#xff0c;增加可复用代码&#xff0c;使系统更易于扩展 参考书籍&#xff1a;《秒懂设计模式》 1、单例模式&#xff08;Singleton&#xff09; 单例模式&#xff1a;即单一的实例&#xff0c;同时提供几…

【java web篇】项目管理构建工具Maven简介以及安装配置

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

【离线数仓-8-数据仓库开发DWD层-交易域相关事实表】

离线数仓-8-数据仓库开发DWD层-交易域相关事实表离线数仓-8-数据仓库开发DWD层-交易域相关事实表一、DWD层设计要点二、交易域相关事实表1.交易域加购事务事实表1.加购事务事实表 前期梳理2.加购事务事实表 DDL表设计分析3.加购事务事实表 加载数据分析1.首日全量加购的数据加载…

基于APRX并行架构的高速QPSK解调实现(Matlab仿真篇)

由于QPSK系统下变频之后的信号中频为720MHz,信息符号速率为500Mbps,因此,采用传统的串行解调方案已无法在FPGA中实现解调。因此,本方案采用基于APRX并行架构实现对高速率的QPSK解调。如图1所示,为并行全数字QPSK接收机实现架构。 图1 并行全数字QPSK接收机实现架构 1 高速…

Golang 接口笔记

基本介绍接口是一个数据类型&#xff0c;可以定义一组方法&#xff0c;但都不需要实现。并且interface中不能包含任何变量。到某个自定义类型要使用的时候&#xff0c;再根据具体情况把这些方法实现出来语法type 接口名 interface {method1(参数列表) 返回值列表method2(参数列…