首页 > 科技 > 手撕面试官之:分布式+开源框架+微服务+性能调优,够吗?

手撕面试官之:分布式+开源框架+微服务+性能调优,够吗?

又到年底了,这一年听过最多的话,就是: Java 面试太 tm 难了僧多粥少基本是现在 Java 人面临的最大难题,去稍大一点的公司面试,竞争对手至少几十人。

想从人群中脱颖而出,有些时候靠的未必是技术能力。因为大家的能力,其实都差不多(除去大神级别的 Java 程序员)。最主要考查的是:你是否能在短时间内,抗得住面试官的“连环炮”。


如何将自己专业技能和项目经历,完整甚至“滤镜般”地展现在面试官面前,这是你能赢得面试官“芳心”的重要一步。

操作系统、Linux相关

死锁产生的原因进程、线程区别,什么时候用线程如何实现一个线程池,Java中线程池如何进行配置linux中有哪些常见的指令,进行介绍select、poll、epoll有没有了解过,讲解一下线程切换,引申到Java阻塞➡️运行页面置换算法有哪些 介绍一下

网络相关

OSI七层模型都是什么举例网络协议,都在哪个层TCP UDP区别TCP如何实现可靠连接Time_Wait中2*msl 为什么如果TCP突然接收方故障 会发生什么HTTP状态码 含义,503 504,200GET POST区别一个url从输入到访问经过了哪些过程说一说TCP三次握手和四次挥手

设计模式

  • 请列举出在 JDK 中几个常用的设计模式?
  • 什么是设计模式?你是否在你的代码里面使用过任何设计模式?
  • Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
  • 在 Java 中,什么叫观察者设计模式(observer design pattern)?
  • 使用工厂模式最主要的好处是什么?在哪里使用?
  • 举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?
  • 在 Java 中,为什么不允许从静态方法中访问非静态变量?
  • 设计一个 ATM 机,请说出你的设计思路?
  • 在 Java 中,什么时候用重载,什么时候用重写?
  • 举例说明什么情况下会更倾向于使用抽象类而不是接口?


注意:需要全部完整版架构大全答案的可以后台私信 “答案”,免费领取~小编会一一回复大家的~


性能优化之JVM

Java 类加载过程?描述一下 JVM 加载 Class 文件的原理机制?Java 内存分配。GC 是什么? 为什么要有 GC?简述 Java 垃圾回收机制。如何判断一个对象是否存活?(或者 GC 对象的判定方法)垃圾回收的优点和原理。并考虑 2 种回收机制垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?Java 中会存在内存泄漏吗,请简单描述。深拷贝和浅拷贝。System.gc() 和 Runtime.gc() 会做什么事情?finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?什么是分布式垃圾回收(DGC)?它是如何工作的?串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?在 Java 中,对象什么时候可以被垃圾回收?简述 Java 内存分配与回收策率以及 Minor GC 和 MajorGCJVM 的永久代中会发生垃圾回收么?Java 中垃圾收集的方法有哪些?什么是类加载器,类加载器有哪些?类加载器双亲委派模型机制?


  • Java中守护线程和本地线程区别
  • 线程与进程的区别
  • 什么是多线程中的上下文切换
  • 死锁与活锁的区别,死锁与饥饿的区别
  • Java中用到的线程调度算法是什么
  • 什么是线程组,为什么在Java中不推荐使用
  • 为什么使用Executor框架
  • 在Java中Executor和Executors的区别
  • 什么是原子操作,在Java Concurrency API中有哪些原子类(atomic classes)
  • Java Concurrency API中的Lock接口(Lock interface)是什么,对比同步它有什么优势
  • 什么是Executors框架
  • 什么是阻塞队列,阻塞队列的实现原理是什么,如何使用阻塞队列来实现生产者
  • 什么是Callable和Future
  • 什么是FutureTask,使用ExecutorService启动任务
  • 什么是并发容器的实现
  • 多线程同步和互斥有几种实现方法,都是什么
  • 什么是竞争条件?你怎样发现和解决竞争
  • 如何使用thread dump,如何分析Thread dump
  • 为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法
  • Java中你怎样唤醒一个阻塞的线程
  • 在Java中CycliBarriar和CountdownLatch有什么区别
  • 什么是不可变对象,它对写并发应用有什么帮助
  • Java中用到的线程调度算法是什么
  • 什么是线程组,为什么在Java中不推荐使用
  • 为什么使用Executor框架比使用应用创建和管理线程好
  • Java中有几种方法可以实现一个线程
  • 如何停止一个正在运行的线程
  • notify()和notifyAll()有什么区别
  • 什么是Daemon线程,它有什么意义
  • Java如何实现多线程之间的通讯和协作
  • 什么是可重入锁(ReentrantLock)
  • 当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它法
  • 乐观锁和悲观锁的理解及如何实现,有哪些实现方式
  • SynchronizedMap和ConcurrentHashMap有什么区别
  • CopyOnWriteArrayList可以用于什么应用场景
  • 什么叫线程安全,servlet是线程安全吗
  • volatile有什么用,能否用一句话说明下volatile的应用场景
  • 为什么代码会重排序
  • 在java中wait和sleep方法的不同
  • 一个线程运行时发生异常会怎样
  • 如何在两个线程间共享数据
  • Java中notify 和 notifyAll有什么区别
  • 为什么wait, notify 和 notifyAll这些方法不在thread类里面
  • 什么是ThreadLocal变量
  • Java中interrupted 和 isInterrupted方法的区别
  • 为什么wait和notify方法要在同步块中调用
  • 为什么你应该在循环中检查等待条件
  • Java中的同步集合与并发集合有什么区别
  • 什么是线程池,为什么要使用它
  • 怎么检测一个线程是否拥有锁

一般面试官在面试的时候,有三种常见套路:

  • 连环炮式发问,你如何抵挡?

问:用过哪些 JUC 常用工具?

答:Reentrantlock,ConcurrentHashMap、LongAdder、......

问:分别说一下它们的实现原理及使用场景。LongAdder 和 AtomicLong 有什么区别?LongAccumulator 比起 LongAdder 来说,有哪些改进?

答:@#¥¥%……

这种问答“连环炮” 是不是非常熟悉!其实这个时候,面试官考察的是你对技术理解的深度和钻研热情。如果你学习知识只停留在表面,没有深入的理解原理。面对夺命连环问,就会措手不及。


算法刷题

  • 编程技巧
  • 线性表
  • 字符串
  • 栈和队列
  • 排序
  • 查找
  • 暴力枚举法
  • 广度优先搜索
  • 深度优先搜索
  • 分治法
  • 贪心法
  • 动态规划
  • 细节实现题
使用O(N)复杂度完成GBDT分裂找出无序数组中相隔距离最长的逆序对给出一个rand5(),实现一个分布均匀的rand7()生成器有一个点,向北走5公里、东走10km、向南走5公里,回到原点。这样的点有几个,证明。有一个n克的物体、一个天平和若干砝码,这个天平没有刻度,试问最少用多少个什么样的砝码可以将这个物体的质量称出。砝码的质量和个数自行指定。


隐藏式(别有用心、暗藏用心式)发问,你如何应对?

问:你是否使用过某某框架时?

答:用过。

面试官内心:MMP@#¥¥%……

面试官问你是否使用过某某框架时?绝对不能单纯地说“用过”。因为他期待的是,你能回答框架的使用场景、解决的问题、有什么特点等等。直接说“用过”,那很可能就会被认为沟通能力有待提升,将来可能会影响团队协作与项目推进。

开源框架之Spring

什么是 Spring 框架?Spring 框架有哪些主要模块?使用 Spring 框架能带来哪些好处?什么是控制反转(IOC)请解释下 Spring 框架中的 IoCBeanFactory 和 和 ApplicationContext 有什么区别?Spring 有几种配置方式?如何用基于 XML 配置的方式配置 Spring如何用基于 Java 配置的方式配置 Spring怎样用注解的方式配置 Spring请解释 Spring Bean 的生命周期?Spring Bean 的作用域之间有什么区别?Spring 框架中的单例 Beans 是线程安全的么?请举例说明如何在 Spring 中注入一个 Java Collection如何向 Spring Bean 中注入一个 Java.util.Properties请解释 Spring Bean 的自动装配?请解释自动装配模式的区别?如何开启基于注解的自动装配?请举例解释@Required 注解?请举例解释@Autowired 注解?请举例说明@Qualifier 注解?构造方法注入和设值注入有什么区别?Spring 框架中有哪些不同类型的事件?Spring 框架中都用到了哪些设计模式?


高性能Netty

  • BIO、NIO 和 AIO 的区别?
  • NIO 是怎么组成?
  • Netty 有什么特点?
  • TCP 粘包/拆包的原因及解决方法?
  • 了解哪几种序列化协议?
  • 如何选择序列化协议?
  • Netty 的零拷贝实现?
  • Netty 的高性能表现在哪些方面?
  • NIOEventLoopGroup 源码?



开源框架之Mybatis

  • 什么是 MyBatis?
  • 讲下 MyBatis 的缓存
  • Mybatis 是如何进行分页的?分页插件的原理是什么?
  • 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
  • Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
  • #{}和${}的区别是什么?
  • 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  • Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
  • MyBatis 与 Hibernate 有哪些不同?
  • MyBatis 的好处是什么?
  • 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?
  • 什么是 MyBatis 的接口绑定,有什么好处?
  • 接口绑定有几种实现方式,分别是怎么实现的?
  • 什么情况下用注解绑定,什么情况下用 xml 绑定?
  • MyBatis 实现一对一有几种方式?具体怎么操作的?
  • Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
  • MyBatis 里面的动态 Sql 是怎么设定的?用什么语法?
  • Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
  • Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
  • 当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?
  • 模糊查询 like 语句该怎么写
  • 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?
  • Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
  • Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
  • Mybatis 中如何执行批处理?
  • Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
  • Mybatis 中如何指定使用哪一种 Executor 执行器?
  • Mybatis 执行批量插入,能返回数据库主键列表吗?
  • Mybatis 是否可以映射 Enum 枚举类?
  • 如何获取自动生成的(主)键值?
  • 在 mapper 中如何传递多个参数?
  • resultType resultMap 的区别?
  • 使用 MyBatis 的 mapper 接口调用时有哪些要求?
  • Mybatis 比 IBatis 比较大的几个改进是什么?
  • IBatis 和 MyBatis 在核心处理类分别叫什么?
  • IBatis 和 MyBatis 在细节上的不同有哪些?

开源框架答案解析如下:


分布式缓存之memcached

memcached 是怎么工作的?memcached 最大的优势是什么?memcached 和服务器的 local cache (比如 PHP 的 的 APC 、mmap 文件等)相比,有什么优缺点?memcached 和 和 MySQL 的 的 query cache 相比,有什么优缺点?memcached 的 的 cache 机制是怎样的?memcached 如何实现冗余机制?我需要把 memcached 中的 item 批量导出导入,怎么办?memcached 如何处理容错的?如何将 memcached 中 中 item 批量导入导出?memcached 是如何做身份验证的?memcached 的多线程是什么?如何使用它们?memcached 能接受的 key 的最大长度是多少?memcached 对 对 item 的过期时间有什么限制?memcached 最大能存储多大的单个 item ?为什么单个 item 的大小被限制在 1M byte 之内?



分布式缓存之Redis

Redis 简介为什么要用 redis /为什么要用缓存(高性能、高并发)为什么要用 redis 而不用 map/guava 做缓存?redis 和 memcached 的区别redis 常见数据结构以及使用场景分析(String、Hash、List、Set、Sorted Set)redis 设置过期时间redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)redis 事务Redis 常见异常及解决方案(缓存穿透、缓存雪崩、缓存预热、缓存降级)分布式环境下常见的应用场景(分布式锁、分布式自增 ID)Redis 集群模式(主从模式、哨兵模式、Cluster 集群模式)如何解决 Redis 的并发竞争 Key 问题如何保证缓存与数据库双写时的数据一致性?

分布式答案解析如下:


分布式通讯之kafka

Kafka 的设计时什么样的呢?数据传输的事物定义有哪三种?Kafka 判断一个节点是否还活着有那两个条件?producer 是否直接将数据发送到 broker 的 leader(主节点)?Kafa consumer 是否可以消费指定分区消息?Kafka 消息是采用 Pull 模式,还是 Push 模式?Kafka 存储在硬盘上的消息格式是什么?Kafka 高效文件存储设计特点:Kafka 与传统消息系统之间有三个关键区别Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中Kafka 新建的分区会在哪个目录下创建partition 的数据如何保存到硬盘kafka 的 ack 机制Kafka 的消费者如何消费数据消费者负载均衡策略数据有序kafaka 生产数据时数据的分组策略



高频MySQL面试知识点

事务四大特性(ACID)原子性、一致性、隔离性、持久性?事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL默认是哪个级别?MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别?MySQL的MyISAM与InnoDB两种存储引擎在,事务、锁级别,各自的适用场景?查询语句不同元素(where、jion、limit、group by、having等等)执行先后顺序?什么是临时表,临时表什么时候删除?MySQL B+Tree索引和Hash索引的区别?sql查询语句确定创建哪种类型的索引?如何优化查询?聚集索引和非聚集索引区别?有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?非关系型数据库和关系型数据库区别,优势比较?数据库三范式,根据某个场景设计数据表?数据库的读写分离、主从复制,主从复制分析的 7 个问题?使用explain优化sql和索引?MySQL慢查询怎么解决?什么是 内连接、外连接、交叉连接、笛卡尔积等?mysql都有什么锁,死锁判定原理和具体场景,死锁怎么解决?varchar和char的使用场景?mysql 高并发环境解决方案?数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)?

21条MySQL性能调优经验

  • 为查询缓存优化你的查询
  • EXPLAIN 你的 SELECT 查询
  • 当只要一行数据时使用 LIMIT 1
  • 为搜索字段建索引
  • 在Join表的时候使用相当类型的例,并将其索引
  • 千万不要 ORDER BY RAND()
  • 避免 SELECT *
  • 永远为每张表设置一个ID
  • 使用 ENUM 而不是 VARCHAR
  • 从 PROCEDURE ANALYSE() 取得建议
  • 尽可能的使用 NOT NULL
  • Prepared Statements
  • 无缓冲的查询
  • 把IP地址存成 UNSIGNED INT
  • 固定长度的表会更快
  • 垂直分割
  • 拆分大的 DELETE 或 INSERT 语句
  • 越小的列会越快
  • 选择正确的存储引擎
  • 使用一个对象关系映射器(Object Relational Mapper)
  • 小心“永久链接”

分布式限流(Nginx+ZooKeeper)

(1) 手撕分布式限流之Nginx

  • 请解释一下什么是 Nginx?
  • 请列举 x Nginx 的一些特性。
  • 请列举 x Nginx 和 和 Apache 之间的不同点
  • 请解释 x Nginx 如何处理 P HTTP 请求。
  • 在 x Nginx 中,如何使用未定义的服务器名称来阻止处理请求?
  • 使用 “ 反向代理服务器 ”
  • 请列举 x Nginx 服务器的最佳用途。
  • 请解释 x Nginx 服务器上的 r Master 和 和 r Worker 进程分别是什么?
  • 请解释你如何通过不同于 0 80 的端口开启 Nginx?
  • 请解释是否有可能将 x Nginx 的错误替换为 2 502 错误?
  • 在 x Nginx 中,解释如何在 L URL 中保留双斜线? ?
  • 请解释 e ngx_http_upstream_module 的作用是什么?
  • 请解释什么是 K C10K 问题?
  • 请陈述 s stub_status 和 和 r sub_filter 指令的作用是什么?
  • 解释 x Nginx 是否支持将请求压缩到上游?
  • 解释如何在 x Nginx 中获得当前的时间?
  • 用 x Nginx 服务器解释s -s 的目的是什么?
  • 解释如何在 x Nginx 服务器上添加模块?


(2)手撕分布式限流之ZooKeeper

  • ZooKeeper 是什么?
  • ZooKeeper 提供了什么?
  • Zookeeper 文件系统
  • 四种类型的 znode
  • Zookeeper 通知机制
  • Zookeeper 做了什么?
  • zk 的命名服务(文件系统)
  • zk 的配置管理(文件系统、通知机制)
  • Zookeeper 集群管理(文件系统、通知机制)
  • Zookeeper 分布式锁(文件系统、通知机制)
  • 获取分布式锁的流程
  • Zookeeper 队列管理(文件系统、通知机制)
  • Zookeeper 数据复制
  • Zookeeper 工作原理
  • zookeeper 是如何保证事务的顺序一致性的?
  • Zookeeper 下 Server 工作状态
  • zookeeper 是如何选取主 leader 的?
  • 分布式通知和协调
  • 机器中为什么会有 leader?
  • zk 节点宕机如何处理?
  • Zookeeper 同步流程
  • zookeeper 负载均衡和 nginx 负载均衡区别
  • zookeeper watch 机制

分布式通讯之RabbitMQ

  • RabbitMQ 中的 broker 是指什么?cluster 又是指什么?
  • 什么是元数据?元数据分为哪些类型?包括哪些内容?与 cluster 相关的元数据有哪些?元数据是如何保存的?元数据在 cluster 中是如何分布的?
  • RAM node 和 disk node 的区别?
  • RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?
  • RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?这些东东分别起什么作用?
  • vhost 是什么?起什么作用?
  • 在单 node 系统和多 node 构成的 cluster 系统中声明 queue、exchange ,以及进行 binding 会有什么不同?
  • 客户端连接到 cluster 中的任意 node 上是否都能正常工作?
  • cluster 中 node 的失效会对 consumer 产生什么影响?若是在 cluster 中创建了mirrored queue ,这时 node 失效会对 consumer 产生什么影响?
  • 能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么?
  • 为什么 heavy RPC 的使用场景下不建议采用 disk node ?
  • 向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行consume 动作会发生什么?
  • routing_key 和 binding_key 的最大长度是多少?
  • RabbitMQ 允许发送的 message 最大可达多大?
  • 什么情况下 producer 不主动创建 queue 是安全的?
  • “dead letter”queue 的用途?
  • 为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有durable 属性,同时 message 具有 persistent 属性才行?
  • 什么情况下会出现 blackholed 问题?
  • 如何防止出现 blackholed 问题?
  • Consumer Cancellation Notification 机制用于什么场景?
  • Basic.Reject 的用法是什么?
  • 为什么不应该对所有的 message 都使用持久化机制?
  • RabbitMQ 中的 cluster、mirrored queue,以及 warrens 机制分别用于解决什么问题?存在哪些问题?


微服务之Dubbo

Dubbo 支持哪些协议,每种协议的应用场景,优缺点?Dubbo 超时时间怎样设置?Dubbo 有些哪些注册中心?Dubbo 集群的负载均衡有哪些策略Dubbo 的核心功能?Dubbo 服务注册与发现的流程?Dubbo 的架构设计?Dubbo 框架设计一共划分了 10 个层:Dubbo 支持哪些协议,每种协议的应用场景,优缺点?dubbo 推荐用什么协议?Dubbo 默认采用注册中心?Dubbo 与 Spring 的关系?Dubbo 的集群容错方案有哪些?Dubbo 的默认集群容错方案?Dubbo 在安全机制方面是如何解决?Dubbo 和 Spring Cloud 的关系?Dubbo 超时时间怎样设置?Dubbo 和 Spring Cloud 的区别?


微服务之Spring Boot

  • 什么是 Spring Boot?
  • Spring Boot 有哪些优点?
  • 什么是 JavaConfig?
  • 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
  • Spring Boot 中的监视器是什么?
  • 如何在 Spring Boot 中禁用 Actuator 端点安全性?
  • 如何在自定义端口上运行 Spring Boot 应用程序?
  • 什么是 YAML?
  • 什么是 Spring Profiles?
  • 什么是 Spring Batch?
  • 如何集成 Spring Boot 和 ActiveMQ?
  • 如何使用 Spring Boot 实现分页和排序?
  • 什么是 Swagger?你用 Spring Boot 实现了它吗?
  • 什么是 FreeMarker 模板?
  • 如何使用 Spring Boot 实现异常处理?
  • 您使用了哪些 starter maven 依赖项?
  • 什么是 CSRF 攻击?
  • 什么是 WebSockets?
  • 什么是 AOP?
  • 什么是 Apache Kafka?
  • 我们如何监视所有 Spring Boot 微服务?

微服务之Spring Cloud

  • 什么是 Spring Cloud?
  • 使用 Spring Cloud 有什么优势?
  • 服务注册和发现是什么意思?Spring Cloud 如何实现?
  • 负载平衡的意义什么?
  • 什么是 Hystrix?它如何实现容错?
  • 什么是 Hystrix 断路器?我们需要它吗?
  • 什么是 Spring Cloud Bus?我们需要它吗?
  • 什么是 Netflix Feign?它的优点是什么?
项目式发问,你如何应答?

当面试官问:你是否在实际项目中使用过线程池?

如果你用过,就结合之前做过的项目需求展开聊聊,说说你对线程池原理的理解、对使用场景和配置上区别的分析,你得出了什么结论,最终的选择结果是什么...... 这些内容,是可以为你加分的。总归就是一句话:把所有技能,尽可能和实际项目结合起来,让面试官觉得你实战经验无比丰富。


之前有零零散散整理过一些专题给大家参考学习,这次一次性来个终极手撕之架构大全,包含开源框架、分布式、微服务、性能优化等四个大专题共17个小专题,全部一锅端,送给大家一起学习~不仅可以帮助你夯实Java 的基础知识,建立完整的知识框架,更让你学会如何在职场(求职/晋升)中表现自己的优势。让你少走弯路,利用有限的时间和精力,能够更加高效地准备和学习 Java。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1877216.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)