春节过后就是招聘旺季,因为疫情的影响,今年的金三银四有些特别,危机面前,持续的提高自己才是王道,提前准备下面试,有备无患。
BAT 等互联网公司的高薪和福利吸引了很多工程师的加入,面试难度也水涨船高,一线互联网公司面试有哪些特点,如何更好的准备互联网公司的面试?
下面来看看这位朋友的阿里技术4面及面试经验和学习总结。希望能够帮助更多的小伙伴。
阿里一面(电面)
下面列出了一面问到的问题:
- synchronized与lock的区别,使用场景。看过synchronized的源码没
- JVM自动内存管理,Minor GC与Full GC的触发机制
- 了解过JVM调优没,基本思路是什么
- 如何设计存储海量数据的存储系统
- 缓存的实现原理,设计缓存要注意什么
- 淘宝热门商品信息在JVM哪个内存区域
- 操作系统的页式存储
- volatile关键字的如何保证内存可见性
- happen-before原则
- Lucene全文搜索的原理
阿里二面
下面是面试过程中的问题:
- 自我介绍下自己,不超过3分钟(我的自我介绍仍然不超过1分钟)
- 你说你熟悉并发编程,那么你说说Java锁有哪些种类,以及区别(果然深度不一样)
- 如何保证内存可见性
- Http请求的过程与原理
- TCP连接的特点
- TCP连接如何保证安全可靠的
- 为什么TCP连接需要三次握手,两次不可以吗,为什么
- AOP的原理
- 动态代理与cglib实现的区别(这个,醉得很厉害)
- 那么你说说代理的实现原理呗
- 看过Spring源码没,说说Ioc容器的加载过程吧
阿里三面(总监面)
- 先问项目,从项目问起
- 了解什么分布式数据一致性算法,具体说说
- MySQL事务隔离级别以及MVCC机制
- Redis缓存雪崩、缓存穿透以及如何解决?
- 问了设计秒杀系统
- 说说同步和异步,什么时候用同步,什么时候用异步
- mysql的innodb索引数据结构为什么是b+树,用hash来实现可以吗?
- 分布式事务的实现?
- 如何解决redis和mysql数据一致性?
- 常见的MySQL主从同步方案有哪些?优劣势比较过?
阿里四面(总监面)
- 自我介绍
- 手画自己项目架构图,然后针对架构和中间件提问
四面总结
一面和二面总结
一面大概面了50多分钟,可以看出一面的问题不是很难,但是要得到面试官比较高的评价,还是需要一-定的表达能力和对技术比较本质的认识的,如果在回答问题的时候能够做一些适当的扩展,自然会让面试官对你有不一样的评价。
二面面试官问的问题都比较直接,答案也是知道就知道,不知道就不知道。这些问题-部分是基础,一部分是根据你的专业技能的来提问的。面完后面试官对我的评价是:中规中矩,有机会下次面试。虽说是中规中矩,但听到面试官说有机会下次面试就感觉这次面试应该过了。
三面总结
三面是交叉面,没想到是阿里的总监面试。由于具体的技术问题在前两轮面试中已经问过了,所以三面后不会有具体的技术问题,总结来看,对自己做过的项目一定要深入,包括使用使用到的技术原理、为什么要使用这些技术。
针对项目,面试官关注的无非以下几点:
1.项目中某个比较重要的点是如何实现的(需要深入技术的原理)
2.遇到的最大困难是什么(有哪些),你怎么解决的?
3.如果需要扩展某个功能,如何降低系统的耦合度
4.如果针对某个功能进行优化,你会怎么设计和优化
四面总结
虽然这面比较轻松,也没有什么具体的技术问题,但对项目仍然是面试官关注的,后面了解到总监面除了看你的基础,主要看你的潜力(就是有没有培养的价值),这个东西看起来挺虚的,但是从你平时的学习中仍然是可以看得出来的。所以,作为一名开发人员。平时对技术的研究也是很重要的
最后
其实一步一步走过来,不单单只靠面试之前刷题那么简单,更多的还是平时的积累。小编整理出一篇Java进阶架构师之路的核心知识,同时也是面试时面试官必问的知识点,篇章也是包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日志、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等
想要免费获取这份完整版文档的朋友,点赞、关注、转发之后,私信【学习】即可免费获取
最后是总重要的技能环节,分享给大家一份核心面试文档
JavaOOP
Java集合/泛型
由于篇幅限制,无法全部展现出来,文末有完整版获取方式
Java异常
Java中的IO与NIO
Java反射
Java序列化
- 什么是java序列化,如何实现java序列化?
- 保存(持久化)对象及其状态到内存或者磁盘
- 序列化对象以字节数组保持-静态成员不保存
- 序列化用户远程对象传输
- Serializable 实现序列化
- writeObject 和 readObject 自定义序列化策略
- 序列化 ID
- 序列化并不保存静态变量
- Transient 关键字阻止该变量被序列化到文件中
- 序列化(深 clone 一中实现)
多线程&并发
JAVA 并发知识库
- Java中实现多线程有几种方法
- 继承 Thread 类
- 实现 Runnable 接口。
- ExecutorService、 Callable、 Future 有返回值线程
- 基于线程池的方式
- 4 种线程池
- 如何停止一个正在运行的线程
- notify()和notifyAll()有什么区别?
- sleep()和wait() 有什么区别?
- volatile 是什么?可以保证有序性吗?
JVM
- java中会存在内存泄漏吗,请简单描述。
- 64 位 JVM 中,int 的长度是多数?
- Serial 与 Parallel GC 之间的不同之处?
- 32 位和 64 位的 JVM,int 类型变量的长度是多数?
- Java 中 WeakReference 与 SoftReference 的区别?
- JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要使用
- 怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位?
- 32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?
- JRE、JDK、JVM 及 JIT 之间有什么不同?
- 解释 Java 堆空间及 GC?
Mysql
- 数据库存储引擎
- InnoDB(B+树)
- TokuDB( Fractal Tree-节点带数据)
- Memory
- 数据库引擎有哪些
- InnoDB与MyISAM的区别
- 索引
- 常见索引原则有
- 数据库的三范式是什么
- 第一范式(1st NF - 列都是不可再分)
Redis
- 什么是 Redis?
- Redis 与其他 key-value 存储有什么不同?
- Redis 的数据类型?
- 使用 Redis 有哪些好处?
- Redis 相比 Memcached 有哪些优势?
- Memcache 与 Redis 的区别都有哪些?
- Redis 是单进程单线程的?
- 一个字符串类型的智能存储最大容量是多少?
- Redis持久化机制
- 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
Memcached
- Memcached 是什么,有什么作用?
- memcached 服务在企业集群架构中有哪些应用场景?
- Memcached 服务分布式集群如何实现?
- Memcached 服务特点及工作原理是什么?
- 简述 Memcached 内存管理机制原理?
- memcached 是怎么工作的?
- memcached 最大的优势是什么?
- memcached 和 MySQL 的 query
- memcached 和服务器的 local cache(比如 PHP 的 APC、mmap 文件等)相比,有什么优缺点?
- memcached 的 cache 机制是怎样的?
- memcached 如何实现冗余机制?
MongoDB
- mongodb是什么?
- mongodb有哪些特点?
- 你说的NoSQL数据库是什么意思?NoSQL与RDBMS直接有什么区别?为什么要使用和不使用NoSQL数据库?说一说NoSQL数据库的几个优点?
- NoSQL数据库有哪些类型?
- MySQL与MongoDB之间最基本的差别是什么?
- 你怎么比较MongoDB、CouchDB及CouchBase?
- MongoDB成为最好NoSQL数据库的原因是什么?
- journal回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?
- 分析器在MongoDB中的作用是什么?
- 名字空间(namespace)是什么?
Spring
- 不同版本的 Spring Framework 有哪些主要功能?
- 什么是 Spring Framework?
- 列举 Spring Framework 的优点。
- Spring Framework 有哪些不同的功能?
- Spring Framework 中有多少个模块,它们分别是什么?
- 什么是 Spring 配置文件?
- Spring 应用程序有哪些不同组件?
- 使用 Spring 有哪些方式?
- 什么是 Spring IOC 容器?
- 什么是依赖注入?
Spring Boot
- 什么是 Spring Boot?
- 为什么要用SpringBoot
- Spring Boot 有哪些优点?
- Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
- 运行Spring Boot有哪几种方式
- 如何理解 Spring Boot 中的 Starters?
- 如何在Spring Boot启动的时候运行一些特定的代码?
- Spring Boot 需要独立的容器运行吗?
- Spring Boot中的监视器是什么?
- 如何使用Spring Boot实现异常处理?
Spring Cloud
- 什么是 Spring Cloud?
- 使用 Spring Cloud 有什么优势?
- 服务注册和发现是什么意思?Spring Cloud 如何实现?
- 负载平衡的意义什么?
- 什么是 Hystrix?它如何实现容错?
- 什么是 Hystrix 断路器?我们需要它吗?
- 什么是 Netflix Feign?它的优点是什么?
- 什么是 Spring Cloud Bus?我们需要它吗?
- 什么是微服务
- 什么是服务熔断?什么是服务降级
RabbitMQ
- 什么是 rabbitmq
- 为什么要使用 rabbitmq
- 使用 rabbitmq 的场景
- 如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
- 如何避免消息重复投递或重复消费?
- 消息基于什么传输?
- 消息如何分发?
- 消息怎么路由?
- 如何确保消息不丢失?
- 使用 RabbitMQ 有什么好处?
Dubbo
- 为什么要用 Dubbo?
- Dubbo 的整体架构设计有哪些分层?
- 默认使用的是什么通信框架,还有别的选择吗?
- 服务调用是阻塞的吗?
- 一般使用什么注册中心?还有别的选择吗?
- 默认使用什么序列化框架,你知道的还有哪些?
- 服务提供者能实现失效提出是什么原理?
- 服务上线怎么不影响旧版本?
- 如何解决服务调用链过长的问题?
- 说说核心的配置有哪些?
MyBatis
- 什么是 Mybatis?
- Mybaits 的优点
- MyBatis 框架的缺点
- MyBatis 框架适用场合
- MyBatis 与 Hibernate 有哪些不同?
- #{}和${}的区别是什么?
- 当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
- 模糊查询 like 语句该怎么写?
- 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?
- 如何获取自动生成的(主)键值?
ZooKeeper
- 什么是Zookeeper?
- Zookeeper 如何保证了分布式一致性特性?
- ZooKeeper 提供了什么?
- Zookeeper 文件系统
- ZAB 协议?
- 四种类型的数据节点 Znode
- Zookeeper Watcher 机制 -- 数据变更通知
- 客户端注册 Watcher 实现
- 服务端处理 Watcher 实现
- 客户端回调 Watcher
数据结构
- 栈(stack)
- 队列(queue)
- 链表(Link)
- 散列表(Hash Table)
- 排序二叉树
- 前缀树
- 红黑树
- B-TREE
- 位图
Elasticsearch
- elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。
- elasticsearch 的倒排索引是什么
- elasticsearch 索引数据多了怎么办,如何调优,部署
- elasticsearch 是如何实现 master 选举的
- 详细描述一下 Elasticsearch 索引文档的过程
- 详细描述一下 Elasticsearch 搜索的过程?
- Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法
- lucence 内部结构是什么?
- Elasticsearch 是如何实现 Master 选举的?
- Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一个 master,另外 10 个选了另一个 master,怎么办?
Kafka
- Kafka 是什么
- partition 的数据文件(offset, MessageSize, data)
- 数据文件分段 segment(顺序读写、分段命令、二分查找)
- 负载均衡(partition 会均衡分布到不同 broker 上)
- 批量发送
- 压缩(GZIP 或 Snappy)
- 消费者设计
- Consumer Group
- 如何获取 topic 主题的列表
- 生产者和消费者的命令行是什么?
微服务
- 微服务架构有哪些优势?
- 微服务有哪些特点?
- 设计微服务的最佳时间是什么?
- 微服务架构如何运作?
- 微服务架构的优缺点是什么?
- 单片,SOA 和微服务架构有什么区别?
- 在使用微服务架构时,您面临哪些挑战?
- SOA 和微服务架构之间的主要区别是什么?
- 微服务有什么特点?
Linux
- 绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?
- 怎么查看当前进程?怎么执行退出?怎么查看当前路径?
- 怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当
- Ls 命令执行什么功能? 可以带哪些参数,有什么区别?
- 查看文件有哪些命令
- 列举几个常用的Linux命令
- 你平时是怎么查看日志的?
- 建立软链接(快捷方式),以及硬链接的命令
- 目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
- 查看文件内容有哪些命令可以使用?
面试,难还是不难?最终结果好还是不好?取决于面试者的底蕴(气场+技能)、心态和认知以及沟通技巧。而一些主流的大型互联网公司面试(阿里巴巴、京东、美团、滴滴)更是需要你在面试时展现出自己的能力,从而获得面试官的欣赏和肯定。
而程序员在应聘时更是需要经历层层面试。俗话说,磨刀不误砍柴工,做好面试前的准备工作可以帮助大家更好的应对面试官的问题以及面试中的突发情况。