2019年阿里java面试题
一、JVM与性能优化
描述一下 JVM 加载 Class 文件的原理机制? 什么是类加载器? 类加载器有哪些? 什么是tomcat类加载机制? 类加载器双亲委派模型机制? Java 内存分配? Java 堆的结构是什么样子的? 简述各个版本内存区域的变化? 说说各个区域的作用? Java 中会存在内存泄漏吗,简述一下? Java 类加载过程? 什么是GC? 为什么要有 GC? 简述一下Java 垃圾回收机制? 如何判断一个对象是否存活? 垃圾回收的优点和原理,并考虑 2 种回收机制?基本原理是什么? 深拷贝和浅拷贝? 什么是分布式垃圾回收(DGC)?它是如何工作的? 在 Java 中,对象什么时候可以被垃圾回收? 简述Minor GC 和 Major GC? Java 中垃圾收集的方法有哪些? 讲讲你理解的性能评价及测试指标? 常用的性能优化方式有哪些? 说说分布式缓存和一致性哈希? 什么是GC调优?
二、Redis
redis数据结构有哪些?
Redis缓存穿透,缓存雪崩?
如何使用Redis来实现分布式锁?
Redis的并发竞争问题如何解决?
Redis持久化的几种方式,优缺点是什么,怎么实现的?
Redis的缓存失效策略?
Redis集群,高可用,原理?
Redis缓存分片?
Redis的数据淘汰策略?
redis队列应用场景?
分布式使用场景(储存session)?
三、网络编程
TCP建立连接和断开连接的过程? HTTP协议的交互流程? HTTP和HTTPS的差异,SSL的交互流程? TCP的滑动窗口协议有什么用? HTTP协议都有哪些方法? Socket交互的基本流程? 讲讲tcp协议(建连过程,慢启动,滑动窗口,七层模型)? webservice协议(wsdl/soap格式,与restt办议的区别)? 说说Netty线程模型,什么是零拷贝? TCP三次握手、四次挥手? DNS解析过程? TCP如何保证数据的可靠传输的?
四、设计模式与重构
说说几个常见的设计模式(23种设计模式)? 设计一个工厂的包的时候会遵循哪些原则? 列举一个使用了 Visitor/ Decorator模式的开源项目/库? 如何实现一个单例? 代理模式(动态代理)? 单例模式(懒汉模式,恶汉模式,并发初始化如何解决, volatile与lock的使用)? JDK源码里面都有些什么让你印象深刻的设计模式使用,举例看看?
五、分布式
什么是CAP定理? 说说CAP理论和BASE理论? 什么是最终一致性?最终一致性实现方式? 什么是一致性Hash? 讲讲分布式事务? 如何实现分布式锁? 如何实现分布式 Session? 如何保证消息的一致性? 负载均衡的理解? 正向代理和反向代理? CDN实现原理? 怎么提升系统的QPS和吞吐? Dubbo的底层实现原理和机制? 描述一个服务从发布到被消费的详细过程? 分布式系统怎么做服务治理? 消息中间件如何解决消息丢失问题? Dubbo的服务请求失败怎么处理? 对分布式事务的理解? 如何实现负载均衡,有哪些算法可以实现? Zookeeper的用途,选举的原理是什么? 讲讲数据的垂直拆分水平拆分? zookeeper原理和适用场景? zookeeper watch机制? redis/zk节点宕机如何处理? 分布式集群下如何做到唯一序列号? 用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗? MQ系统的数据如何保证不丢失? 列举出能想到的数据库分库分表策略?
===========================
1、架构师筑基必备技能
1.1 并发编程进阶
- 线程共享和协作
- 并发工具类实战
- 站在巨人肩上操作CAS
- 阿里面试常问的显示锁和AQS
- 并发容器源码解析及应用实战
- 仅会用线程池是不够的
- 架构师应该知道的并发安全解决方案
- 性能优化实战
- 并发编程面试题目汇集
1.2 JVM性能深度调优
- 15种方式编写高效优雅Java程序实战
- Java内村区域深入解析
- 垃圾回收器和内存分配策略
- 你必须知道的JVM执行子系统
- JVM类加载机制及执行引擎原理
- JVM性能优化实战
- JVM面试锦囊妙计
1.3 网络编程与高效IO
- http/tcp/udp网络协议原理透析
- 原生JDK网络编程
- Netty应用快速入门
- Netty粘包/半包问题解决实战
- Netty进阶和实战
- Netty源码深入分析
- Netty常被问到那些面试题汇集
1.4 深入Tomcat底层
- 10分钟熟悉你常用却又不知道的Tomcat体系架构
- 你必须得知道的Tomcat容器及运行机制
- Tomcat类加载机制分析
- Tomcat核心组件源码解读
- Tomcat高级进阶
- Tomcat面试题整理
1.5 MySQL深度优化
- MySQL存储引荸选型及注意事项
- 解读MySQL的共享锁及排它锁
- MySQL事务及隔离性级别
- 30分钟深入掌握执行计划
- 解读BTree与B+ Tree索引
- SQL慢查询配置及分析
- SQL优化策略及实战
- MySQL面试题汇总
1.6 架构基础必备Linux
- Linux安装指南
- Linux基础命令
- 用户与用户组系列操作
- 文件与权限系列操作
- 架构师应该掌握的shell脚本基础
2、设计思想解读开源框架
2.1 六大原则
- 单一职责原则
- 开闭原则
- 里氏替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特法则
2.2 结构型模式
- 桥接模式
- 适配器模式
- 装饰器模式
- 代理模式
- 组合模式
2.3 创建型模式
- 建造者模式
- 单例模式
- 抽象工厂模式
- 工厂方法模式
- 静态工厂模式
2.4 行为型模式
- 模板方法模式
- 策略模式
- 观察者模式
- 责任链模式
- 命令模式
- 访问者模式
2.5 Spring 5 源码解读
- 5分钟快速理解Spring核心流程
- 熟练掌握Spring工作常用注解及陷阱
- 后置处理器源码解读
- I0C容器源码解读
- AOP源码解读
- 声明式事务源码解读
- Spring源码面试题汇总
2.6 Spring MVC 框架源码解读
- Servlet3.0 6
- 性能实战
- 手写SpringMVC实战
2.7 Mybatis框架源码解读
- 5分钟掌握MyBatis的配置使用
- 动态SQL、缓存及关联查询深入讲解
- 10分钟掌握Mybatis与Spring的集成实战
- Mybatis插件开发及源码分析实战
- 多级关联实战
- 手写MyBatis框架实战
- Mybatis常见面试题汇集
3、性能直升提升架构技术
3.1 分布式架构思维
- 大型互联网架构演进过程
- 架构师应具备的分布式知识
- 主流分布式架构设计详解
3.2 Zookeeper
- 5分钟搞定Zookeeper安装及指令解析
- 原生客户端、zkclient、 curotor快速开发实战
- Zookeeper应用实战
- Zookeeper底层协议解读
- Zookeeper面试资料整理
3.3 Nginx
- 5分钟将你的项目实现Nginx分流
- Nginx安装及基本使用
- Nginx进程模型及配置详解
- location规则及rewrite解析
- 动静分离实战
- 反向代理实战
- 跨域配置实战
- 缓存配置及Gzip配置实战
- https安全认证实战
- LVS高可用实战
- Nginx那些面试题汇总
3.4 消息中间件概述
- 消息中间件和RPC的区别
- 消息中间件使用场景介绍
- ActiveMQ、RabbitMQ、 RocketMQ、 Kafka对比
- 消息中间件的编年史
3.5 ActiveMQ
- 3分钟快速安装ActiveMQ
- JMS规范解读
- 原生ActiveMQ的API编程
- ActiveMQ高级特性和用法
- 限时订单实战
- 用户注册的异步处理实战
- 企业级高可用集群部署实战
3.6 RabbitMQ
- Linux下安装与配置
- 消息发布与消费权衡
- 消息的拒绝怎么解决
- 控制队列与消息属性
- 与Spring集成完成应用解耦实战
- 集群化与镜像队列实战
- RabbitMQ常见面试题汇总
3.7 RocketMQ
- RocketMQ快速安装与配置
- 消息发送与消费流程解读
- RocketMQ消息存储、消息过滤及事务消息
- RocketMQ高可用实战
- 整体Spring完成用户注册的异步处理实战
- 整合Spring完成限时订单实战
- RocketMQ面试题汇集
3.8 Kafka
- Kafka快速安装部署
- 开启Kafka的集群模式
- Kafka的生产者和消费者
- Kafka高级特性解读
- Kafka处理请求的内部机制剖析
- 整合Spring完成削峰填谷实战
- Kafka面试题汇集
3.9 Elastic
- ElasticSearch
- Logstash
- Kibana
- ELK常见面试题汇总
4、高效存储让项目性能起飞
4.1Redis
- 5分钟搞定Linux下Redis安装
- String, List, Hash、 Set、 Zset类型使用场景
- 时间轴、队列应用场最设计实战
- 购物车开发与设计实战
- Redis与Lua模拟抢红包实战
- 网站投票设计与开发实战
- Lua+ Redis联合开发指南
- Redis慢操作优化
- Redis哨兵机制及底层机制分析
- 10分钟搭建Redis高可用集群实战
- 动态扩容、缩减集群节点实战
- Redis常见面试题汇总
4.2 缓存解决方案
- 15分钟掌握项目中SpringCache的用法
- 缓存的一致性策略(更新及失效处理机制
- 缓存雪崩解决方案
- 缓存穿透方案
4.3 MongoDB
- Mongodb使用场景分析
- 20分钟玩转增删改查
- MongoDB开发时你应该注意的事项
- 安全设置及存储引擎分析指南
- 性能调优与索实战
- 复制架构解析实战
- MongoDB分区实战
4.4 MySQL高可用
- Mysql主从复制、读写分离高可用方案实战
- Mysql+ Keepalived实现双主高可用方案实战
- Mysq|实现分库分表高性能解决方案实战
4.5 Mycat
- Mycat简介及用途
- 基于Mycat实现Mysql读写分离实战
- 基于Mycat实现数据库切分实战
- 全局表、ER表、分片机制分析
4.6 Sharding-Sphere
- Sharding-JDBC
- 引擎原理与数据分片剖析
- 读写分离
- 编排治理
- 分布式事务
- 数据脱敏
- Sharding-Proxy
4.7 FastDFS
- 文件存储实战
- 文件同步实战
- 文件查询实战
- 分布式部署实战
5、分布式扩展到微服务架构
5.1 从RPC开始
- 服务注册与发布
- 动态代理
- 序列化与反射
- 手写RPC框架实战
5.2 Dubbo
- 10分钟学会Dubbo使用
- 项目之间的依赖划分实战
- 传统项目拆解分布式实战
- Dubbo spi扩展实战
- Dubbo源码深度解读
- Dubbo面试题指南
5.3 Spring Boot
- SpringBoot快速入门
- 核心组件分析
- 性能优化
- jta+ atomikos分布式事务
- SpringBoot核心源码解读
- 手写SpringBoot实战
- SpringBoot面试汇总
5.4 Spring Cloud Netflix
- Zuul路由网关详解及源码探析
- Ribbon客户端负载均衡原理与算法详解
- Feign声明式服务调用方式实现
- Hystrix服务熔断及服务降级实战
- Eureka注册中心构件分析
- Config配置服务中心与svn、git快速集成
- BUS消息总线技术
- Sleuth调用链路跟踪
- Stream消息驱动的微服务
- SpringCloud面试题目汇总
5.5 Spring Cloud Alibaba
- NACOS
- Nacos概述
- Nacos- Discovery服务发现
- 配置中心Nacos-Config
- Sky Walking
- 链路跟踪概述
- 客户端/服务端实战
- Assembly Plugin
- Sentinel限流
- Sentinel熔断器特性
- Sentinel回退机制
- Feign集成Sentinel
- Sentinel-Dashboard
- Seala分布式事务
- 角色中的角色
- Seata Server
- Seata请求逻辑
- 实战分布式事务
5.6 Docker
- 5分搞懂定Docker安装与使用
- Docker的基础操作
- Docker File快速进阶
- Docker网络与存储那些事
- DockerCompose高阶用法
- 微服务与Docker集成实现动态扩容实战
5.7 Kubernetes
- Kubernetes简介及安装配置
- Kubernetes核心原理
- Kubernetes集群管理方案实战
5.8 Service Mesh
- 10分钟快速入门与介绍
- 核心组件解析
- 如何用Helm部署Istio
- 快速解析Istio的常用功能
- Mixer适配器的应用
- http流量管理实战
- Istio的安全加固实战
6、分布式方案及团队协作工具
6.1 分布式事务解决方案
- 事务与锁
- 标准分布式事务
- 两阶段提交
- BASE理论与柔性事务
- TCC方案
- 补偿性方案
- 异步确保型与最大努力型
6.2 单点登陆方案
- 单点登陆的问题背景
- 页面跨域问题
- Session跨域共享方案
- session的扩展
6.3 分布式任务调度方案
- Quartz调度的用法
- Elastic-Job示例
- 分布式调度的疑难点
- Quartz集群定制化分布式调度
6.4 Maven
- 安装和配置
- 使用入门
- 坐标和依赖
- 聚合与继承
- 生命周期与插件
- 仓库及版本管理
- 私服- Nexus
- 手写Maven插件实战
6.5 Jenkins
- Jenkins远程测试
- Jenkins持续部署
- Jenkins自动部署
- Jenkins分布式构建
- Jenkins管理
- Jekins安装
6.6 Git
- 与SVN对比
- 基本运作流程
- Git常用操作及问题处理
7、架构师应具备职场软技能
7.1 自我修养
- 职业路线图和个人发展
- 程序员职业的四大象限
- 需求分析和调整定位
- 职涯经验和建议
- 不仅仅是程序员
- 观察潮流和市场
- 建立个人品牌
- 分享和传递价值
- 开源项目
- 跳槽篇
- 跳槽为了什么?不为什么?
- 跳槽的意义和原则
- 跳槽的节奏和路线图
- 实操篇
- 求职材料应该如何写
- 寻找求职渠道
- 面试准备及总结
7.2 项目管理
- 什么是敏捷管理
- 敏捷开发与传统项目管理区别
- 数捷开发的要素
- 敏捷开发的关键角色
- 敏捷开发的流程和工具
- Product Backlog和Sprint Backlog
- 冲刺( Sprint )
- 燃尽图( Burn Down Chart )
- 利用看板进行可视化管理
- 关于敏捷开发的会议
- 阿里项目实战讲解
8、零距离互联网项目实战
8.1 系统设计
- 架构设计
- 数据库设计
- 部署设计
- 基础开发框架讲解
8.2 商品管理子系统
- 商品管理( mongodb )
- 商品分类( mongodb )
- 商品发布( nosql与mysq|数据同步)
- 热卖商品排行( redis )
8.3 订单子系统
- 分布式环境生成唯一编号( ZooKeeper )
- 下单业务流程(消息中间件)
- 订单可靠性
- 秒杀功能( Redis )
- 订单管理
- 购物车功能( MongoDB)
8.4 搜索子系统
- 基于ElasticSearch搜索引|擎的全文检索
- 检索需求分析
- 检索策略
- 索引设置
- 分词算法
- 命中率优化
- 订单实时统计
8.5 后台系统
- 日常管理
- 在线IM系统( WebSocket NO )
- 用户行为分析
- 报表大数据查询优化
8.6 分布式调度系统
- 数据统计
- 数据同步
- 任务调度配置
8.7 用户管理子系统
- 用户注册登录(二维码技术)
- 权限控制( shiro )
- 单点登录( session统-缓存、sso )
8.7 支付系统
- 微信支付对接
- 支付宝对接
- 银联对接开发