换一个环境改变自己的现状。而我正是其中一员,投了十多家互联网公司,目前 已收到五个 Offer,其实跳槽是把双刃剑,有好也有坏,要看你是因为什么原因跳槽。如果说你即将准备跳槽,是否准备充足了呢?小编即将分享的正是这些面经分享和我的成长笔记。
面试前的准备:
面试的时候 99.99%的公司都会让你做一下自我介绍和最近做的一个项目,所以自我介绍和项目要提前打好草稿,特别是不太会说话的。
自我介绍:
我觉得简洁一点就行了,一般面试官都会趁着你自我介绍的时候看简历,也没认真听你做自我介绍。
下面是我自己打的草稿:
面试官你好,非常荣幸参加贵公司的本次面试。下面我简单的介绍一下我的个人情况,我叫 xx,xx 年毕业于 xxx 学院 xxx 专业。目前在 xxx 公司工作,主要是从事 xxx 开发。 通过 xxx 招聘平台关注到贵公司岗位的招聘信息,这个职位比较符合我未来的职业发展,而且贵公司的业务对我都非常有吸引力,非常希望能够进入贵公司发展。
我对技术有浓厚的兴趣,专业知识面宽,技术也相对全面,责任心强,思路清晰,沟通能力好,熟悉 JAVA 体系, 对各种开发流程和主流架构模式,设计模式和 UML,有较强的需求分析、架构设计、项目管理能力,并有丰富的实战经验; 出于对工程师文化的向往,我在研发团队管理期间,尝试了多种方法去建立良性的团队氛围,并有效的改善了研发效率; 技术是为产品支撑的,所以我现在也在熟悉产品设计过程,希望可以结合公司发展战略,营销策略,跟着团队打造出一个好的产品。
上面的可以适当简化一下,能说出来多少取决于你的记忆力。
项目介绍:
这个是真的要提前准备好说辞,不然你面试的时候边想边说,说起来磕磕巴巴的,你给面试官的第一印象就不好了,至少说明你的表述能力不强。
介绍项目的话可以不用太紧张,面试官才拿到你的简历看多久,所以肯定是对你自己的项目是最熟悉的。需要注意的地方就是不要只讲一些业务相关的,面试官不需要知道这些,他只关心你的技术能力是否足够,通过你的描述知道你使用了什么技术,再根据相关的技术进行提问。
贴一下我的草稿:
我在 xx 公司做的 xx 系统,客户主要是 xx,项目的功能主要是提供代理雨伞,代理快递,代理订餐,图书借阅等服务,后台用的是主体架构是使用 Spring Cloud,微服务模块划分为 xxx,我主要负责其中 xxx 几个模块的开发, orm 用的是 mybatis,数据库是用的 mysql,缓存是用的 redis,前台用到了 vue 技术。共有 xx 个同事参与开发,整个项目持续了 xx 时间。
面试官会对他感兴趣的点进行提问。
现如今市面上充斥着大量杂七杂八的所谓“大厂面试资料”,实际上只有几十上百页,质量可见一斑!由此我整理了这份《面试指南》,初衷是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间,帮助有需要的朋友收获高薪 offer!
架构师必备技能:(阿里面试必问)
多线程 &并发面试题:
JAVA 并发知识库:
-
Java 中实现多线程有几种方法
-
继承 Thread 类
-
实现 Runnable 接口。
-
ExecutorSenvice. Callable. Future 有返回值线程
-
基于线程池的方式
-
4 种线程池
-
如何停止一个正在运行的线程
-
notify0 和 notifyAll0 有什么区别?
-
sleep0 和 wait0 有什么区别?
-
volatile 是什么?可以保证有序性吗?
-
Thread 类中的 start0 和 run0 方法有什么区别?
-
为什么 wait, notify 和 nfifAllI 这些方法不在 thread 类里面?
-
为什么 wait 和 ntify 方法要在同步块中调用?
-
Java 中 interrupted 和 isInterruptedd 方法的区别?
-
Java 中 synchronized 和 ReentrantLock 有什么不同?
-
有三个线程 T1,T2,T3,如何保证顺序执行?
-
SynchronizedMap 和 ConcurrentHashMap 有什么区别?
-
什么是线程安全
-
Thread 类中的 yield 方法有什么作用?
-
Java 线程池中 submit0 和 execute0 方法有什么区别?
-
说一说自己对于 synchronized 关键字的了解
-
说说自己是怎么使用 synchronized 关键字,在项目中用到了吗 ynchronized 关键字最主要的三种使用方式?
-
什么是线程安全? Vector 是一 个线程安全类吗?
-
volatile 关键字的作用?
-
简述一下你对线程池的理解
-
线程生命周期(状态)
JVM 面试题:
-
Serial 垃圾收集器(单线程、复制算法)
-
ParNew 垃圾收集器(Serial+ 多线程)
-
Parallel Scavenge 收集器(多线程复制算法、高效)
-
Serial Old 收集器(单线程标记整理算法)
-
Parallel Old 收集器(多线程标记整理算法)
-
CMS 收集器(多线程标记清除算法)
-
G1 收集器
-
JVM 类加载机制
-
类加载器
-
双亲委派
-
OSGI (动态模型系统)
-
动态改变构造
-
模块化编程与热插拔
-
JVM 内存模型
-
本地方法栈
-
程序计数器
-
堆
-
方法区
-
分代回收
-
堆和栈的区别
-
什么时候会触发 FullGC
-
什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”?
-
对象分配规则
-
描述一下 JM 加载 class 文件的原理机制?
-
Java 对象创建过程
Java 中的 IO 与 NIO 面试题:
-
Java 中 10 流?
-
Java 10 与 NIO 的区别
-
常用 io 类有哪些
-
字节流与字符流的区别
-
阻塞 10 模型
-
非阻塞 10 模型
-
多路复用 10 模型
-
信号驱动 10 模型
-
异步 10 模型
-
JAVA NIO
-
NIO 的缓冲区
-
NIO 的非阻塞
-
Channel
-
Buffer
Mysql 面试题:
-
分库分表之后,d 主键如何处理
-
存储过程(特定功能的 SQL 语句集)
-
存储过程优化思路
-
触发器(一段能自动执行的程序)
-
数据库并发策略
-
MySQL 中有哪几种锁?
-
MySQL 中有哪些不同的表格?
-
简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
-
MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
-
CHAR 和 VARCHAR 的区别?
-
主键和候选键有什么区别?
-
myisamchk 是用来做什么的?
-
MyISAM Static 和 MyISAM Dynamic 有什么区别?
-
如果一个表有一-列定义为 TIMESTAMP,将发生什么?
-
你怎么看到为表格定义的所有索引?
-
LIKE 声明中的 %和_是什么意思?
-
列对比运算符是什么?
-
BLOB 和 TEXT 有什么区别?
-
MySQL fetch. array 和 MySQL fetch object 的区别是什么?
-
MyISAM 表格将在哪里存储,并且还提供其存储格式?
-
MySQL 如何优化 DISTINCT?
-
如何显示前 50 名?
-
可以使用多少列创建索引?
-
NOW () 和 CURRENT_ DATE () 有什么区别?
-
什么是非标准字符串类型?
-
什么是通用 SQL 函数?
-
MySQL 支持事务吗?
Redis 面试题:
-
Redis 是单进程单线程的?
-
一个字符串类型的智能存储最大容量是多少?
-
Redis 持久化机制
-
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
-
热点数据和冷数据是什么
-
单线程的 redis 为什么这么快
-
redis 的数据类型,以及每种数据类型的使用场景
-
redis 的过期策略以及内存淘汰机制
-
Redis 常见性能问题和解决方案?
-
为什么 Redis 的操作是原子性的,怎么保证原子性的?
-
Redis 事务
-
Redis 的持久化机制是什么?各自的优缺点?
-
Redis 常见性能问题和解决方案:
-
redis 过期键的删除策略?
-
Redis 的回收策略(海汰策略) ?
-
为什么 edis 需要把所有数据放到内存中?
-
Redis 的同步机制了解么?
-
Pipeline 有什么好处,为什么要用 pipeline?
-
是否使用过 Redis 集群,集群的原理是什么?
-
Redis 集群方案什么情况下会导致整个集群不可用?
-
Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
-
Jedis 与 Redisson 对比有什么优缺点?
-
Redis 如何设置密码及验证密码?
MongoDB 面试题:
-
当更新-个正在被迁移的块(Chunk). 上的文档时会发生什么?
-
MongoDB 在 A:(B,C}上建立索引,查询 A:{B,C]和 A:{C,B)都会使用索引吗?
-
如果一个分片(Shard) 停止或很慢的时候,发起一个查询会怎样?
-
MongoDB 支持存储过程吗?如果支持的话,怎么用?
-
如何理解 MongoDB 中的 GridFS 机制,MongoDB 为何使用 GridFS 来存储文件?
-
什么是 NoSQL 数据库? NoSQL 和 RDBMS 有什么区别?在哪些情况下使用和不使用 NoSQL 数据库?
-
MongoDB 支持存储过程吗?如果支持的话,怎么用?
-
如何理解 MongoDB 中的 GridFS 机制,MongoDB 为何使用 GridFS 来存储文件?
-
为什么 MongoDB 的数据文件很大?
-
当更新-个正在被迁移的块(Chunk) 上的文档时会发生什么?
-
MongoDB 在 A:(B,C}上建立索引,查询 A:{B,C]和 A:{C,B)都会使用索引吗?
-
如果一个分片(Shard) 停止或很慢的时候,发起一个查询会怎样
-
分析器在 MongoDB 中的作用是什么?
-
如果用户移除对象的属性,该属性是否从存储层中删除?
-
能否使用日志特征进行安全备份?
-
更新操作立刻 fsync 到磁盘?
-
如何执行事务/加锁?
-
什么是 master 或 primary?
-
getLasterror 的作用
-
分片(sharding) 和复制(replication) 是怎样工作的?
-
数据在什么时候才会扩展到多个分片(shard) 里?
-
当我试图更新 一个正在被迁移的块(chunk) 上的文档时会发生什么?
MyBatis 面试题:
-
通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,
-
这个 Dao 接口的工作原理是什么? Dao 接口里的方法,参数不同时,方法能重载吗?
-
如何获取自动生成的(主)键值?
-
在 mapper 中如何传递多个参数?
-
Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?
-
Xml 映射文件中,除了常见的 selectlinsertlupdaeldelete 标签之外,还有哪些标签?
-
Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
-
为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
-
一对一、一对多的关联查询?
-
MyBatis 实现一对一有几种方式?具体怎么操作的?
-
MyBatis 实现-对多有几种方式,怎么操作的?
-
Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
-
Mybatis 的一级、二级缓存
-
什么是 MyBatis 的接口绑定?有哪些实现方式?
-
使用 MyBatis 的 mapper 接口调用时有哪些要求?
-
Mapper 编写有哪几种方式?
-
简述 Mybatis 的插件运行原理,以及如何编写一个插件。
-
MyBatis 实现一对一有几种方式?具体怎么操作的?
Spring 面试题:
-
Spring AOP and AspectU AOP 有什么区别?
-
如何理解 Spring 中的代理?
-
什么是编织(Weaving) ?
-
Spring MVC 框架有什么用?
-
描述一下 DispatcherServlet 的工作流程
-
介绍一下 WebApplicationContext
-
什么是 spring?
-
使用 Spring 框架的好处是什么?
-
Spring 由哪些模块组成?
-
Spring 的 IOC 和 AOP 机制
-
Spring 中 Autowired 和 Resource 关键字的区别
-
依赖注入的方式有几种,各是什么?
-
讲一下什么是 Spring
-
Spring MVC 流程
-
springMVC 是什么
-
SpringMVC 怎么样设定重定向和转发的?
-
SpringMVC 常用的注解有哪些
-
Spring 的 AOP 理解
-
Spring 的 IOC 理解
-
解释一下 spring bean 的生命周期
-
解释 Spring 支持的几种 bean 的作用域。
-
Spring 基于 xml 注入 bean 的几种方式
-
Spring 框架中都用到了哪些设计模式
-
核心容器(应用上下文)模块
-
BeanFactory - BeanFactory 实现举例。
-
XML BeanFactory
-
解释 AOP 模块
Spring Boot 面试题:
-
我们能否在 spring-boot- starter-web 中用 jetty 代替 tomcat?
-
如何使用 Spring Boot 生成一个 WAR 文件?
-
如何使用 Spring Boot 部署到不同的服务器?
-
RequestMapping 和 GetMapping 的不同之处在哪里?
-
为什么我们不建议在实际的应用程序中使用 Spring Data Rest?
-
在 Spring Initializer 中,如何改变-个项目的包名字?
-
可以配置 application.propertierde 的完整的属性列表在哪里可以找到?
-
JPA 和 Hibernate 有哪些区别?
-
使用 Spring Boot 启动连接到内存数据库 H2 的 JPA 应用程序需!要哪些依赖项?
-
如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?
-
指定的数据库连接信息在哪里?它是如何知道自动连接至 H2 的?
-
我们如何连接一个像 MSSQL 或者 orcale -样的外部数据库?
-
Spring Boot 配置的默认 H2 数据库的名字是上面?为什么默认的数据库名字是 testdb?
-
如果 H2 不在类路径里面,会出现上面情况?
-
你能否举一个以 ReadOnly 为事务管理的例子?
-
发布 Spring Boot 用户应用程序自定义配置的最好方法是什么?
-
配置文件的需求是什么?
-
如何使用配置文件通过 Spring Boot 配置特定环境的配置?
-
我们如何使用 Maven 设置 Spring Boot 应用程序?
-
如何禁用特定的自动配置?
-
Spring boot 支持哪些外部配置?
-
如何对 Spring Boot 应用进行测试?
-
Spring Boot Actuator 有什么用?
-
SpringBoot 中静态首页默认位置可以放在哪里?
-
SpringBoot 中静态资源直接映射的优先级是怎样的?
Spring Cloud 面试题:
-
SpringBoot 和 SpringCloud 的区别?
-
什么是 Hystrix 断路器?我们需要它吗
-
说说 RPC 的实现原理
-
微服务的优点缺点?说下开发项目中遇到的坑?
-
spring cloud 和 dubbo 区别?
-
REST 和 RPC 对比
-
你所知道的微服务技术栈?
-
微服务之间是如何独立通讯的?
-
springcloud 如何实现服务的注册?
-
Eureka 和 Zookeeper 区别
-
eureka 自我保护机制是什么?
-
什么是 Ribbon?
-
什么是 feigin?它的优点是什么?
-
Ribbon 和 Feign 的区别?
-
什么是 Spring Cloud Bus?
-
springcloud 断路器作用?
-
Spring Cloud Gateway?
-
作为服务注册中心,Eureka 比 Zookeeper 好在哪里?
-
什么是 Ribbon 负载均衡?
-
Ribbon 负载均衡能干什么?
-
什么是 zuu|路由网关
-
分布式配置中心能干嘛?
数据结构面试题:
-
栈(stack)
-
队列(queue)
-
链表(Link)
-
散列表(Hash Table)
-
排序二叉树
-
前缨树
-
红黑树
-
B-TREE
-
位图
算法面试题:
-
数据里有{1,2,3,4,5,6,7,8,9}. 请随机打乱顺序,生成一个新的数组(请以代码实现)
-
写出代码判断一个整数是不是 2 的阶次方(请代码实现,谢绝调用 API 方法)
-
假设今日是 2015 年 3 月 1 日,星期日,请算出 13 个月及 6 天后是星期几,距离现在多少天(请用代码实现,谢绝调用 API 方法)
-
有两个篮子,分别为 A 和 B,篮子 A 里装有鸡蛋,篮子 B 里装有苹果,请用面向对象的思想实现两个篮子里的物品交换(请用代码实现)
-
二分查找
-
冒泡排序算法
-
插入排序算法
-
快速排序算法
-
希尔排序算法
-
归并排序算法
-
桶排序算法
-
基数排序算法
-
剪枝算法
-
回溯算法
-
最短路径算法
-
最小生成树算法
-
AES
-
RSA
-
CRC
-
MD5
-
更多算法练习
Kafka 面试题:
-
Consumer Group
-
如何获取 topic 主题的列表
-
生产者和消费者的命令行是什么?
-
consumer 是推还是拉?
-
讲讲 kafka 维护消费状态跟踪的方法
-
讲一下主从同步
-
为什么需要消息系统,mysql 不能满足需求吗?
-
Zookeeper 对于 Kafka 的作用是什么?
-
Kafka 判断一个节点是否还过着有那两个条件?
-
Kafka 与传统 MQ 消息系统之间有三个关键区别
-
讲一讲 kafka 的 ack 的三种机制|
-
消费者如何不自动提交偏移量,由应用提交?
-
消费者故障,出现过锁问题如何解决?
-
如何控制消费的位置
微服务 面试题:
-
Container 在微服务中的用途是什么?
-
什么是微服务架构中的 DRY?
-
什么是消费者驱动的合同(CDC) ?
-
Web, RESTful API 在微服务中的作用是什么?
-
您对微服务架构中的语义监控有何了解?
-
我们如何进行跨功能测试?
-
我们如何在测试中消除非决定论?
-
Mock 或 Stub 有什么区别?
-
您对 Mike Cohn 的测试金字塔了解多少?
-
Docker 的目的是什么?
-
什么是金丝雀释放?
-
什么是持续集成(CI) ?
-
什么是持续监测?
-
架构师在微服务架构中的角色是什么?
-
我们可以用微服务创建状态机吗?
-
什么是微服务中的反应性扩展?
Elasticsearch 面试题
-
Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法
-
ucence 内部结构是什么?
-
Elasticsearch 是如何实现 Master 选举的?
-
Elasticsearch 中的节点(比如共 20 个),其中的 10 个选
-
个 master, 另外 10 个选了另一个 master, 怎么办?
-
客户端在和集群连接时,如何选择特定的节点执行请求的?
-
详细描述一下 Elasticsearch 索引文档的过程。
-
详细描述一下 Elasticsearch 更新和删除文档的过程。
-
详细描述一 下 Elasticsearch 搜索的过程
-
在 Elasticsearch 中,是怎么根据一个词找到对应的倒排索
-
Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?
-
对于 GC 方面,在使用 Elasticsearch 时要注意什么?
-
Elasticsearch 对于大数据量( 上亿量级)的聚合如何实现?
-
在并发情况下,Elasticsearch 如何保证读写一致?
-
如何监控 Elasticsearch 集群状态?
-
介绍下你们电商搜索的整体技术架构
-
介绍一下你们的个性化搜索方案?
-
是否了解字典树?
-
拼写纠错是如何实现的?
总结
不论是技术经理还是架构师,没有绝对地说哪条路是对还是错,适合自己才是最重要。小公司的可能没有架构师这个概念,大公司的架构师职位又不是那么容易拿下。但不管怎样,不断去学习新的技术,提升自己的层次是很有必要的,无论你在哪一家公司,过硬的技术水平才能吃得开。