TreeMind树图在线AI思维导图
当前位置:树图思维导图模板IT互联网产品结构面经讲解思维导图

面经讲解思维导图

  收藏
  分享
免费下载
免费使用文件
U282389596 浏览量:852024-11-10 14:41:49
已被使用13次
查看详情面经讲解思维导图

微服务,网络,分布式内容讲解

树图思维导图提供 面经讲解 在线思维导图免费制作,点击“编辑”按钮,可对 面经讲解  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:61935604ecda2fab40305ea824e81fde

思维导图大纲

面经思维导图模板大纲

JVM

JVM存储模型

线程共享区

方法区

新生代

from

to

老年代

线程隔离区

虚拟机栈

本地方法栈

程序计数器

JVM内存结构

JVM内存

java heap 堆

对象实例

数组

字符串常量池

静态变量

线程分配缓冲区

java stacks 栈

本地内存

垃圾收集器

ZGC

G1

CPU占用高排查

arthas

top -H p pid

jstack

什么时候Full GC

容器

K8S

Rancher

Docker

Rancher

数据库

非关系型

MongoDB

MongoDB 索引选择B-树

聚合性数据库

关系型

mysql

存储引擎

脏读、幻读和不可重复读

索引B+树

mysql优化

主从集群

读写分离

分库分表

水平分表

按照hash或range策略,拆分数据存储

垂直分表

拆分字段存储,主表扩展表

垂直分库

以表为依据,按照业务归属不同,将不同的表拆分到不同的库中

热点数据上缓存

sql优化

慢sql开启

explain执行计划

show profile

默认关闭,最近15次运行情况

sql优化规则

基于索引来查找

避免索引列上使用函数和运算,索引失效

like中%尽量放在右边

最左原则,联合索引模糊匹配,从左往右命中越多越好

尽量使用sql用到索引排序

查询有效列信息,避免使用*

永远小结果集驱动大结果集

postgresql

高速缓存

redis

缓存常见问题

雪崩

缓存时间随机值

加固缓存

限流降级

击穿

互斥锁机制,一个线程去查

预加载缓存

不过期缓存

穿透

缓存空值

布隆过滤器

参数校验

部署模式

主从模式

主写从读,不会重新选举

哨兵模式

主挂了会重新选举

哨兵集群管理,哨兵不与redis部署一起

集群模式

分片,存储不同内容

主从和哨兵结合,至少3m3s

多个集群,每个集群有主从

节点通过hash槽确定位置,16384,环形,key通过CRC16校验

redis和mysql数据一致

延迟双删(删->写->消息队列删)

延迟双删(删->写->删)+加锁

写->删(重试)

实时性好

写->binlog(canel)->删

最终一致性好

写->消息队列->删

6.0之前是单线程,6.0只有只有网络请求处理是多线程,主要操作键值对读取写入都是由一个主线程单线程完成

基本数据类型

String

简单动态字符串

预分配

O(1)获取字符串长度

二进制安全

兼容C语言字符串函数

List

双向链表

压缩列表

Hash

哈希表

压缩列表

Set

哈希表

数组

ZSet:有序,每个元素有评分

跳表

多层的有序链表

压缩列表

基本数据结构

Memcache

搜索引擎

ElasticSearch

消息队列(MQ)

RocketMQ

RabbitMQ

Kafka

大数据相关

Hadoop

MapReduce

HBase

Hive

Spark

HDFS

运维与监控

Zabbix

代码维护

gitlab

girrt

SVN

中间件

Canal

愚公

项目管理

jira

禅道

分布式

seata

四种事务模式

XA

1PC不提交事务,锁定资源

依赖数据库机制回滚,事务性数据库

强一致性

性能差

AT(默认)

1PC直接提交,不锁定资源

依赖数据快照回滚

最终一致性

可能脏写,引入全局锁读写隔离

TCC

1PC直接提交,无锁

不生成快照,没有全局锁,性能好

依赖补偿操作,可用于非事务性数据库

代码侵入,实现Try,Confirm,Cancel,复杂

最终一致性

Confirm,Cancel幂等处理

SAGA

1PC直接提交,无锁

异步调用,吞吐高

依赖补偿业务,自己编写

不用编写TCC

适合长复杂事务

时效性差

脏写

事后:dirty undo log日志,及时捕获告警

事前:全局锁@GlobalLock

分布式锁

redis(AP),性能高

SETNX key value expire key seconds del key

成功失败都要释放锁,超时释放锁

LUA脚本:原子性

看门狗:执行期间不断刷新获取锁,保证没有死锁

zookeeper(CP),性能中

原理:一个目录下只有一个唯一文件名

文件名按照顺序建立,是否获取最小的

数据库锁,性能低

悲观锁:for update

乐观锁:版本号

网络

网络四元组

微服务

服务网格

SideCar

负载均衡

服务发现

熔断

。。。

常用网格产品:Linkerd、Envoy、Istio、Conduit

Spring boot

自动装配机制的原理

@SpringBootApplication

@EnableAutoConfiguration

三个核心关键技术

Starter ,@Configuration 配置类,@Bean

classpath:META-INF/spring.factories ,SpringFactoriesLoader

ImportSelector 对这些配置类的动态加载

Dubbo

Dubbo请求失败

快速失败

失败安全

失败自动恢复,重试

并行多个处理策略

广播调用策略

高性能RPC架构

三层模式

Business

RPC

Remoting

负载均衡策略

加权随机

最小活跃数

一致性hash

加权轮询

最短响应时间

Dubbo和Spring Cloud

核心要素

Spring Cloud通过整合子项目可以顺利完成组件融合

Dubbo需要通过实现各种filter进行定制,开发成本和技术难度高

通信协议

Dubbo,单一长连接和netty的NIO异步通讯,Hession序列化,适合小数据量大并发

Spring Cloud,Http协议和Rest API,在通信速度上Dubbo略胜

服务依赖方式

Dubbo依赖较重,版本管理机制,程序侵入少

Spring Cloud使用JSON交互,省略了版本管理,为跨平台调用提供基础

组件运行流程

Dubbo每个组件需要部署在单独服务器上

Spring Cloud所有请求通过网关zuul访问内部服务,由注册中心(Eureka)和Ribbon进行服务发现和负载均衡

初始定位和生态

Spring Cloud是微服务架构下的一站式解决方案,依托Spring 生态

Dubbo起初关注服务调用和治理,生态相对不足但逐渐丰富

服务治理能力

Spring Cloud服务治理能力相对较弱

Dubbo提供企业级的服务治理能力

通信协议

Spring Cloud与http绑定,在性能和其他RPC体系互通上存在障碍

Dubbo提供灵活的通信协议选择,支持多种序列化编码协议

微服务集群规模

Spring Cloud适合小规模微服务集群

Dubbo可以在超大规模集群中实现水平扩容,应对集群增长带来的问题

多语言支持

Spring Cloud主要围绕JAVA生态

Dubbo支持多语言异构的微服务体系

远程调用方式

Spring Cloud中Feign基于http协议,接口规范统一,通信效率较低

自定义通信协议,数据传输性能好

Java

双亲委派机制

原理:先父类加载,不能再子类

加载流程(从上往下)

启动类加载器

扩展类加载器

应用系统类加载器

自定义类加载器

作用

避免重复加载一个类

确保核心类库的安全,不被自定义类替代

不同的类加载器可以为相同名称的类创建额外的命名空间

打破双亲委派

原因:不能向下委派,不能不委派

实现模块化和动态更新

解决类库版本冲突问题

运行时修改类

支持Web应用的独立部署和更新

方法

通过SPI机制,使用ServiceLoader.load去加载,classpath:META-INF/service

受加载范围限制,父类加载器无法加载需要拿到的文件,需要委托子类去加载

通过自定义类加载器,继承ClassLoader类,重写loadClass方法

重写方法中不让他执行双亲委派,打破双亲委派

工具

OSGI

Tomcat

Java Agent

URLClassloader

Spring

Spring Bean生命周期

创建前准备阶段

创建实例阶段

依赖注入阶段

容器缓存阶段

销毁实例阶段

Spring如何解决循环依赖

三级缓存

一级缓存:所有成熟完整的Bean,Spring容器(属性赋值,属性注入,初始化)

二级缓存:实例化半成品Bean实例或半成品代理对象bean,提前暴露单例的bean

三级缓存:工厂对象lambda表达式,可以产生bean对象提前暴露的引用

解决前提条件

互相依赖的Bean必须是单例

依赖注入的方式不能都是构造函数注入的方式

创建流程

不用三级缓存

使用二级缓存,那么对象没有属性赋值、初始化前就创建代理对象是有风险

产生AOP动态代理对象时的风险

创建时机

缓存一致性

性能开销

代码复杂性和可维护性

三级缓存是为了解决在循环依赖以及AOP动态代理同时产生时的风险

被迫的导致Bean对象提前的暴露了引用

多例、构造器注入这两种情况解决不了循环依赖

循环依赖的解决原理是在对象实例化后提前暴露了引用,而这两种情况都还没实例化

不能解决循环依赖的情况

单例的代理bean和多例bean通过setter注入

构造器注入bean

设置了@DependsOn的bean

BeanFactory和FactoryBean

功能不同

BeanFactory

核心接口,一个容器,所有容器的基础,管理和获取Bean,负责bean生命周期

FactoryBean

创建Bean的特殊工厂bean,创建返回其他Bean,提供扩展机制,创建Bean时进行复杂逻辑处理

返回值不同

BeanFactory

根据bean的定义返回bean对象实例,通过getBean方法

FactoryBean

创建和返回其他bean对象,通过getObject方法

配置方式不同

BeanFactory

通过XML或者注解方式配置,定义和管理对象

FactoryBean

需要自定义实现该接口的类,通过XML或者注解方式配置,创建和管理对象

创建时机不同

BeanFactory

获取Bean时动态创建Bean对象,按需创建

FactoryBean

容器初始化时创建,作为普通的Bean管理

IOC

对象的创建和管理由容器来负责,程序员只需要定义对象的依赖关系,由容器来实现对象的创建和组装,即把对象的控制权交给IoC容器

DI 依赖注入

AOP

原理

基于动态代理和字节码操作

流程

1、编译时:AspectJ编译器将切面代码编译成字节码文件

2、运行时:JDK动态代理或CGLIB动态代理生成代理类

3、代理类在目标对象方法前后插入切面代码,实现AOP功能

动态代理

JDK

目标对象实现了接口时

使用JAVA反射包里面的类和接口实现,核心是Proxy类中newProxyInstance方法,三个参数:类加载器,被代理类实现的接口,实现InvocationHandler接口的对象

CGLIB

目标对象没有实现接口时

继承目标类生成子类,覆盖方法实现增强

底层采用ASM字节码生成代理类,比JDK代理反射效率高

场景

日志记录,权限检查,事务管理,异常处理,性能监控,缓存,参数校验转换

Spring MVC

工作流程

Spring bean生命周期执行流程

定义bean

实例化Bean(通过反射)

属性赋值,属性注入(依赖注入)

初始化bean

使用bean

销毁bean

集合

HashMap

hash冲突

线性探测法

链式寻址法

再Hash法

建立公共溢出区

数组+链表(红黑树)结构

ConcurrentHashMap

node加锁

size()方法

竞争不激烈,CAS设置

竞争激励,获取数组某个CAS设置

fail-fast和fail-safe

fail-fast:使用迭代器遍历集合对象,遍历过程中修改了对象内容,会抛出ConcurrentModificationException。遍历期间有个modCount,对数据有改动会导致modCount变化

fail-safe:使用迭代器遍历集合对象,复制原有集合,在复制集合上进行遍历。修改是在原有集合上进行修改

算法

朴素贝叶斯

傅里叶变换

布隆过滤器

HLL(HyperLogLog)

BitMap(位图)

散列算法

密码加密 —— bcrypt、MD5、SHA-256、盐

局部敏感(文本去重)

simhash

检查两项内容相似度

Google判断网页是否已收集

老师判断学生论文是否从网上抄袭

不希望用户上传有版权的内容,与小说《哈利波特》类似

minhash

KShingle

排序

堆排序

归并排序

插入排序

冒泡排序

快速排序

查找

二分

文件存储服务

HDFS

Go-FastDFS

FastDFS

Minio

数据结构

B树

所有结点存数据

B+树

叶子结点存数据,叶子结点双向链表连接

红黑树

两个结点

链表

数组

哈希

并发编程

JUC

synchronized

锁升级

非公平锁

lock

ReentrantLock

可重入锁

可重入锁和偏向锁

自旋锁

依赖CAS实现

死锁

四个条件

互斥

请求和保持

一次性申请所有资源

不可抢占

获取不到就释放自己资源

循环等待

按序申请资源

线程池7大核心参数

详解

CAS

ABA问题

AtomicStampedReference

CPU消耗过大

分散竞争点,多个cell

AQS

组成部分

同步状态(state)

等待队列(CLH 队列)

独占模式和共享模式

设计模式

观察者模式

工厂模式

适配器模式

单例模式

相关思维导图模板

904名中国成年人第三磨牙相关知识、态度、行为和病史的横断面调查思维导图

树图思维导图提供 904名中国成年人第三磨牙相关知识、态度、行为和病史的横断面调查 在线思维导图免费制作,点击“编辑”按钮,可对 904名中国成年人第三磨牙相关知识、态度、行为和病史的横断面调查  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:10b9a8a2dd2fb4593f8130ef16c320fc

销售经理半年规划思维导图

树图思维导图提供 销售经理半年规划 在线思维导图免费制作,点击“编辑”按钮,可对 销售经理半年规划  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:e614d6bcf03e9318109240a18697c5d1