框架组件库
2023-05-09 15:01:31 1 举报
AI智能生成
java python框架组件库
作者其他创作
大纲/内容
python
Keras
TensorFlow
内核功能
线性内核线性内核是最简单的内核函数。
多项式内核多项式验证非标准内核函数,该函数非常适合于正交归一化的数据。
高斯核这里是经典的鲁棒径向基核,即高斯核函数。
指数核。
拉普拉斯内核。
方差分析内核。
乙状结肠
Wave内核
三角核
日志内核
mne
数据结构
Raw
Raw对象主要用来存储连续型数据,核心数据为n_channels和times,也包含Info对象。
Epochs
从连续的脑电图信号中提取一些特定时间窗口的信号,分析事件,这些时间窗口可以称作为epochs.
创建Epochs对象方式
通过Raw对象和事件事件点(event times)
通过读取.fif文件数据生成Epoch对象
通过mne.EpochsArray从头创建Epoch对象
Evoked
Evoked potential(EP)诱发电
dataset
sleep_physionet
参考电极
子主题 1
torch
PyTorch是使用GPU和CPU优化的深度学习张量库。
含了多维张量的数据结构以及基于其上的多种数学操作。另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化。
张量 Tensors
torch.optim
优化算法的库
adam
对SGD的扩展,可以代替经典的随机梯度下降法来更有效地更新网络权重。
适应性梯度算法(AdaGrad)
为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。
均方根传播(RMSProp)
基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。
Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。具体来说,算法计算了梯度的指数移动均值(exponential moving average),超参数 beta1 和 beta2 控制了这些移动均值的衰减率。移动均值的初始值和 beta1、beta2 值接近于 1(推荐值),因此矩估计的偏差接近于 0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。
util
data
DataLoader
该接口定义在dataloader.py脚本中,只要是用PyTorch来训练模型基本都会用到该接口,该接口主要用来将自定义的数据读取接口的输出或者PyTorch已有的数据读取接口的输入按照batch size封装成Tensor,后续只需要再包装成Variable即可作为模型的输入
torch.nn
nn.DataParallel
多个GPU来加速训练
sklearn
sklearn是基于python语言的机器学习工具包
监督学习
广义线性模型
普通最小二乘法
LinearRegression 拟合一个带有系数 w = (w_1, ..., w_p) 的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。其数学表达式为:
pipeline
NumPy
OpenCV
Scikit-learn
Pandas
Matplotlib
PyTorch
PaddlePaddle
java
org.springframework
core
AOP
动态代理
CGLIB
生成实现子类的代理类
fast
JDK
生成实现接口的代理类
IOC
bean的生命周期
Bean容器找到配置文件中Spring Bean的定义
Bean容器利用Java Reflection API创建一个Bean的实例
如果涉及到一些属性值,利用set()方法设置一些属性值
如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字
如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例
如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例
与上面的类似,如果实现了其他*Aware接口,就调用相应的方法
如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法
如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法
该方法会在对象属性被设置后,即:调用了setter方法之后被调用
如果Bean在配置文件中的定义包含init-method属性,执行指定的方法
如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法
当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法
当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。
注入
变量注入
变量方式注入非常简洁,没有任何多余代码
不能有效的指明依赖,对象为null
构造器注入
set方法注入
bean
单例模式
减少创建
原型模式
循环依赖
三级缓存来解决循环依赖
第一级缓存:单例池 singletonObjects,它用来存放经过完整Bean生命周期过程的单例Bean对象
第二级缓存:earlySingletonObjects,它用来保存哪些没有经过完整Bean生命周期的单例Bean对象,用来保证不完整的bean也是单例
第三级缓存:singletonFactories,工厂
lang
Nullable
NonNull
NonNullApi
NonNullFields
DependsOn
控制Bean加载顺序
io
ResourceLoader
与ApplicationContext相同的策略
ClassPathXmlApplicationContext启动的Spring容器,通过ClassPathResource以类路径的方式进行访问
FileSystemXmlApplicationContext启动的Spring容器,通过FileSystemResource以文件系统绝对路径的方式进行访问
XmlWebApplicationContext启动的Spring容器,通过ServletContextResource以相对于Web应用根目录的方式进行访问
前缀"classpath:"是指定使用ClassPathResource
前缀"file:"则指定使用UrlResource
web
bind
annotation
@ControllerAdvice
@RequestMapping
produces的作用是指定返回值类型和返回值编码
consumes的作用是指定处理请求的提交内容类型(Content-Type),例如application/json, text/html
servlet
拦截器(Interceptor)
context
support
AbstractApplicationContext
refresh ()
prepareRefresh()
Prepare this context for refreshing.
obtainFreshBeanFactory()
Tell the subclass to refresh the internal bean factory.
prepareRefresh()
Prepare the bean factory for use in this context.
注册了可解析依赖项
beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);
beanFactory.registerResolvableDependency(ResourceLoader.class, this);
beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
beanFactory.registerResolvableDependency(ApplicationContext.class, this);
DefaultListableBeanFactory.registerResolvableDependency
private final Map<Class<?>, Object> resolvableDependencies;
这些特殊实例变量直接获取
postProcessBeanFactory(beanFactory)
Allows post-processing of the bean factory in context subclasses.
invokeBeanFactoryPostProcessors(beanFactory)
Invoke factory processors registered as beans in the context
registerBeanPostProcessors(beanFactory)
Register bean processors that intercept bean creation.
initMessageSource()
initApplicationEventMulticaster()
onRefresh()
registerListeners()
finishBeanFactoryInitialization(beanFactory)
finishRefresh()
annotation
EnableAspectJAutoProxy
boolean proxyTargetClass() default false;
默认接口代理
@Import
可以在类上使用,也可以作为元注解使用
例如@EnableAspectJAutoProxy
导入
@Configuration标注的配置类
例子 @EnableRetry
可以拆分配置类,然后在程序中按需导入相应的配置
实现ImportSelector接口的类
例如@EnableTransactionManagemen
根据给定的条件(AdviceMode),选择导入哪些配置类
实现ImportBeanDefinitionRegistrar接口的类
例如@EnableAspectJAutoProxy注解
按需注册额外的BeanDefinition
@component类
@Autowired
@Autowired能够用在构造方法、成员变量、方法参数以及注解上
基于 field 注入的坏处
容易违背了单一职责原则 使用这种基于 field 注入的方式,添加依赖是很简单的,就算你的类中有十几个依赖你可能都觉得没有什么问题,普通的开发者很可能会无意识地给一个类添加很多的依赖。但是当使用构造器方式注入,到了某个特定的点,构造器中的参数变得太多以至于很明显地发现 something is wrong。拥有太多的依赖通常意味着你的类要承担更多的责任,明显违背了单一职责原则(SRP:Single responsibility principle)。
依赖注入与容器本身耦合
方法
强制依赖就用构造器方式
可选、可变的依赖就用 setter 注入
transaction
TransactionInterceptor
TransactionAspectSupport
interceptor
TransactionAspectSupport
注解从切面进入事务.所以非切面调用事务不生效
invokeWithinTransaction
getTransactionAttribute
获取事务属性
determineTransactionManager(txAttr)
确定事务管理器
createTransactionIfNecessary
创建事务管理器如果有必要
AbstractPlatformTransactionManager
retVal = invocation.proceedWithInvocation();
调用真实方法
support
AbstractPlatformTransactionManager
abstract Object doGetTransaction()
abstract void doBegin(Object transaction, TransactionDefinition definition)
abstract void doCommit(DefaultTransactionStatus status)
abstract void doRollback(DefaultTransactionStatus status)
TransactionSynchronizationManager
private static final ThreadLocal<Map<Object, Object>> resources
存储线程开启事务的 数据库连接
jdbc
datasource
DataSourceTransactionManager extends AbstractPlatformTransactionManager
doGetTransaction()
(ConnectionHolder) TransactionSynchronizationManager.getResource(obtainDataSource());
beans
factory
support
DefaultListableBeanFactory
boot
@SpringBootConfiguration
Refresh
@EnableAutoConfiguration
@AutoConfigurationPackage
这个组合注解主要是@Import(AutoConfigurationPackages.Registrar.class),它通过将Registrar类导入到容器中,而Registrar类作用是扫描主配置类同级目录以及子包,并将相应的组件导入到springboot创建管理的容器中
@Import(AutoConfigurationImportSelector.class)
AutoConfigurationImportSelector的作用是导入哪些组件的选择器
它通过将AutoConfigurationImportSelector类导入到容器中,AutoConfigurationImportSelector类作用是通过selectImports方法实现将配置类信息交给SpringFactory加载器进行一系列的容器创建过程
DeferredImportSelector
getImportGroup
AopAutoConfiguration
2.0.x默认CGlib动态代理
BeanClassLoaderAware
ResourceLoaderAware
BeanFactoryAware
EnvironmentAware
Ordered
判断是否开启自动配置
从META-INF/spring-autoconfigure-metadata.properties文件中载入属性配置
获取所有的配置列表
@ComponentScan
@EnableFeignClients
FeignClientsRegistrar.class
registerFeignClient
registerBeanDefinition
SpringApplication
createApplicationContext
SERVLET
AnnotationConfigServletWebServerApplicationContext
REACTIVE
AnnotationConfigReactiveWebServerApplicationContext
NONE
AnnotationConfigApplicationContext
run
configureHeadlessProperty()
设置java.awt.headless
即使没有检测到显示器,也允许其启动
getRunListeners(args)
getSpringFactoriesInstances
初始化META-INF\spring.factories下SpringApplicationRunListener对应的实现类
EventPublishingRunListener
SimpleApplicationEventMulticaster
listeners.starting()
prepareEnvironment
listeners.environmentPrepared
multicastEvent
configureIgnoreBeanInfo
printBanner
createApplicationContext
prepareContext
refreshContext
ConfigurableApplicationContext.refresh()
见 spring bean加载过程
afterRefresh
listeners.started(context)
callRunners
执行
ApplicationRunner.class
CommandLineRunner.class
listeners.running(context)
ApplicationEvent
SpringApplicationRunListener
context
event
EventPublishingRunListener
AbstractApplicationEventMulticaster
DefaultListenerRetriever
Set<ApplicationListener<?>> applicationListeners
web
servlet
error
ErrorController
cloud
注册中心
cap原理
nacos
DelegateConsistencyServiceImpl
EphemeralConsistencyService
DistroConsistencyServiceImpl
AP
Distro
Distro
服务端注册
心跳
特殊场景
特殊场景
服务端某节点宕机,不回复其他服务端节点的健康检查请求,则会被其他节点从健康节点列表中剔除,其他节点重新分配负责节点,依靠客户端的心跳重新建立完整的服务数据
验证任务startVerifyTask()
同步任务startLoadTask();
纯内存保存
PersistentConsistencyService
RaftConsistencyServiceImpl
POST HTTP://{ip:port}/v1/ns/raft/vote : 进行投票请求
POST HTTP://{ip:port}/v1/ns/raft/beat : Leader向Follower发送心跳信息
GET HTTP://{ip:port}/v1/ns/raft/peer : 获取该节点的RaftPeer信息
PUT HTTP://{ip:port}/v1/ns/raft/datum/reload : 重新加载某日志信息
POST HTTP://{ip:port}/v1/ns/raft/datum : Leader接收传来的数据并存入
DELETE HTTP://{ip:port}/v1/ns/raft/datum : Leader接收传来的数据删除操作
GET HTTP://{ip:port}/v1/ns/raft/datum : 获取该节点存储的数据信息
GET HTTP://{ip:port}/v1/ns/raft/state : 获取该节点的状态信息{UP or DOWN}
POST HTTP://{ip:port}/v1/ns/raft/datum/commit : Follower节点接收Leader传来得到数据存入操作
DELETE HTTP://{ip:port}/v1/ns/raft/datum : Follower节点接收Leader传来的数据删除操作
CP
Raft
consul
zookeeper(见hadoop分支)
ZK是往Leader(主节点)去写数据
熔断限流
hystrix
线程隔离
SPI重写线程池获取ThreadLocal值
信号量隔离
hystrix舱壁模式
为每一个需要被调用的服务维护了一个独立的线程池,这样每个服务都有自己的使用资源,当某个服务出现问题时,大家互不影响。
信号量隔离我理解为对线程池隔离的一个补充功能,如果开辟专有线程池的开销远远大于该依赖服务正常的访问时间,那么我们就可以使用信号量隔离。
信号量的开销确实是小于线程池的开销的,不过信号量做不到线程池的设置超时和异步访问,所以啊,在确保服务确实靠谱的情况下,再采用信号量哈
构建HystrixCommand或HystrixObservableCommand
Connection reset
服务器返回了RST
Connection reset by peer
sentinel
dashboard
限流、隔离、降级、熔断
统计数据:统计某个资源的访问数据(QPS、RT等信息)
规则判断:判断限流规则、隔离规则、降级规则、熔断规则是否满足
ProcessorSlotChain
基于责任链模式来设计,将不同的功能(限流、降级、系统保护)封装为一个个的Slot,请求进入后逐个执行
statistic
StatisticSlot:负责统计实时调用数据,包括运行信息、来源信息等
ClusterBuilderSlot:负责构建某个资源的ClusterNode,ClusterNode可以保存资源的运行信息(响应时间、QPS、block 数目、线程数、异常数等)以及来源信息(origin名称)
NodeSelectorSlot:负责构建簇点链路中的节点(DefaultNode),将这些节点形成链路树
rule checking
AuthoritySlot:负责授权规则(来源控制)
SystemSlot:负责系统保护规则
ParamFlowSlot:负责热点参数限流规则
FlowSlot:负责限流规则
DegradeSlot:负责降级规则
网关
gateway
actuator
RoutePredicateHandlerMapping
extends AbstractHandlerMapping(spring-webflux)
getHandlerInternal
寻找路由匹配 返回 webHandler
lookupRoute
找到yml中配置的所有的路由断言工厂执行
找到对应的适配器HandlerAdaptor,执行过滤器链
FilteringWebHandler
implements WebHandler(spring-web)
globalFilters转化成GatewayFilterAdapter。 GatewayFilterAdapter在内部集成了GlobalFilter,同时也实现了GatewayFilter,使 globalFilters和gatewayFilters在 适配器 类GatewayFilterAdapter中共存
spring-webflux
见 spring
filter
- PreserveHostHeader
为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host
- StripPrefix=1
去掉一层url前缀
- AddRequestHeader
为原始请求添加Header
AddRequestParameter
AddResponseHeader
DedupeResponseHeader
剔除响应头中重复的值
Hystrix
为路由引入Hystrix的断路器保护
配置
#feign
feign.httpclient.enabled=true
feign.hystrix.enabled=true
feign.client.config.default.connectTimeout = 30000
feign.client.config.default.readTimeout = 30000
#ribbon
ribbon.OkToRetryOnAllOperations=false
ribbon.ConnectTimeout=20000
ribbon.ReadTimeout=50000
ribbon.SocketTimeout=30000
ribbon.ServerListRefreshInterval=10
ribbon.MaxAutoRetries=0
ribbon.MaxAutoRetriesNextServer= 1
#hystrix
hystrix.command.default.execution.timeout.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=20000
spring-mvc
前端控制器(DispatcherServlet)
doService
doDispatch
RequestMappingHandlerAdapter
处理器映射器(HandlerMapping)
Handler处理器
拦截器
处理器适配器(HandlerAdapter)
视图解析器(ViewResolver)
视图(View)
1.发起请求到前端控制器(DispatcherServlet)
2.前端控制器请求处理器映射器(HandlerMapping)查找Handler(可根据xml配置、注解进行查找)
3.处理器映射器(HandlerMapping)向前端控制器返回Handler
4.前端控制器调用处理器适配器(HandlerAdapter)执行Handler
5.处理器适配器(HandlerAdapter)去执行Handler
6.Handler执行完,给适配器返回ModelAndView(Springmvc框架的一个底层对象)
7.处理器适配器(HandlerAdapter)向前端控制器返回ModelAndView
8.前端控制器(DispatcherServlet)请求视图解析器(ViewResolver)进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
9.视图解析器(ViewResolver)向前端控制器(DispatcherServlet)返回View
10.前端控制器进行视图渲染,即将模型数据(在ModelAndView对象中)填充到request域
11.前端控制器向用户响应结果
springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method
基于mvc拦截器
spring-webflux
DispatcherHandler
handle
链式调用
return Flux.fromIterable(this.handlerMappings) // 1.遍历所有的 handlerMapping
.concatMap(mapping -> mapping.getHandler(exchange)).next()
// 2.获取对应的handlerMapping ,比如常用的 RequestMappingHandlerMapping、RoutePredicateHandlerMapping
.switchIfEmpty(createNotFoundError())
.flatMap(handler -> invokeHandler(exchange, handler))
// 3.获取对应的适配器,调用对应的处理器
HandlerAdapter
SimpleHandlerAdapter
webHandler.handle
处理所有过滤器链的方法
filter
globalFilters
负载均衡
LoadBalancerClientFilter
转发路由网关过滤器
ForwardRoutingFilter
HTTP
NettyRoutingFilter
基于 Netty 实现的 HttpClient 请求后端 Http 服务
NettyWriteResponseFilter
将 NettyRoutingFilter 请求后端 Http 服务的响应写回客户端
websocket
WebsocketRoutingFilter
webclient
WebClientHttpRoutingFilter
WebClientWriteResponseFilter
org.springframework.cloud.gateway.filter.WebClient实现的 HttpClient 请求后端 Http 服务
网关适配器
见gatway
.flatMap(result -> handleResult(exchange, result));
// 4.返回处理结果
AbstractHandlerMethodMapping
AbstractUrlHandlerMapping
RouterFunctions
PropertySourcesPropertyResolver
Backpressure 其实是一种现象:在数据流从上游生产者向下游消费者传输的过程中,上游生产速度大于下游消费速度,导致下游的 Buffer 溢出,这种现象就叫做 Backpressure 出现。
Reactor
反应式 HTTP
服务器推送事件
WebSocket 的客户端和服务器端的支持
reactor-core实现响应式
spring-amqp
spring-rabbit
RabbitTemplate
参数
mandatory
如果消息不可路由,应该通过Basic.Return RPC命令将消息返回给发布者。
confirmCallback
ConfirmCallback为发送Exchange(交换器)时回调,成功或者失败都会触发;
returnCallback
ReturnCallback为路由不到队列时触发,成功则不触发;
sendConnectionFactorySelectorExpression
receiveConnectionFactorySelectorExpression
RabbitTemplate支持SpELsendConnectionFactorySelectorExpression 和receiveConnectionFactorySelectorExpression 属性,这些属性每个在每个AMQP协议的交互操作(send、sendAndReceive、receive、receiveAndReply)都会计算解析出来AbstractRoutingConnectionFactory提供的lookupKey值。
您可以使用bean引用,例如在表达式中使用@vhostersolvergetVHost(#root)。在send操作中,要发送的消息是根源计算对象。在receive操作中,queueName是根源计算对象。
拦截器
afterReceivePostProcessors
beforePublishPostProcessors
ConnectionFactory
spring-security
Spring Security Filter Chain
AbstractSecurityInterceptor
FilterSecurityInterceptor
获取当前 request 对应的权限配置,调用访问控制器进行鉴权操作
MethodSecurityInterceptor
AspectJMethodSecurityInterceptor
AccessDecisionManager
ConsensusBased
少数服从多数授权访问决策方案。
UnanimousBased
要求所有 AccessDecisionVoter 均返回肯定的结果时,才代表授予权限
AffirmativeBased
只要任一 AccessDecisionVoter 返回肯定的结果,便授予访问权限。
AfterInvocationManager
RunAsManager
AuthenticationManager
MessageSourceAccessor
@PreAuthorize
@EnableGlobalMethodSecurity(prePostEnabled = true)。
WebSecurityConfigurerAdapter
HttpSecurity
authorizeRequests()
http.authorizeRequests() .url匹配规则1.权限控制方法1 .url匹配规则2.权限控制方法2...
权限控制
permitAll()表示所匹配的URL任何人都允许访问
anonymous()表示可以匿名访问匹配的URL。和permitAll()效果类似,只是设置为anonymous()的url会执行filterChain中的filter
denyAll()表示所匹配的URL都不允许被访问。
authenticated()表示所匹配的URL都需要被认证才能访问
rememberMe()允许通过remember-me登录的用户访问
匹配规则
anyRequest()
antMatcher(String regx),传递一个ant表达式参数,表示匹配所有满足ant表达式的请求
regexMatchers(String regexPattern) 传递一个参数
configure()
SavedRequestAwareAuthenticationSuccessHandler
servlet
过滤器
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
http
HttpServletResponse
sendRedirect(String url)
HttpServletRequest
netty
概念
模型
NioEventLoopGroup
NioEventLoop
Selector(多路复用器)
注册NioServerSocketChannel
注册NioSocketChannel
注册NioSocketChannel
组成
管道(SelectableChannel)
选择器(Selector)
选择键(SelectorKey)
Channel
一个Channel包含一个ChannelPipeline,所有ChannelHandler都会注册到ChannelPipeline中,并按顺序组织起来。
Channe
EventLoop
ChannelPipeline
客户端发起请求再接受请求,先 outbound再inbound。
服务端:先接受请求再发送请求,先inbound再outbound.
sendUpstream
NettyInbound
sendDownstream
ChannelSink
NettyOutbound
一个ChannelEvent并不会主动的"流"经所有的Handler,而是由上一个Handler显式的调用ChannelPipeline.sendUp(Down)stream产生,并交给下一个Handler处理。也就是说,每个Handler接收到一个ChannelEvent,并处理结束后,如果需要继续处理,那么它需要调用sendUp(Down)stream新发起一个事件。如果它不再发起事件,那么处理就到此结束,即使它后面仍然有Handler没有执行。这个机制可以保证最大的灵活性,当然对Handler的先后顺序也有了更严格的要求。
ChannelHandler
ChannelUpstreamHandler
ChannelDownstreamHandler
客户端
ClientGroup
第一创建与服务端的连接(即OP_CONNECT事件),第二就是进行IO读写、编解码、业务逻辑等操作(即OP_READ事件、OP_WRITE事件)
客户端发出连接请求的同时会自己创建一条NioSocketChannel通道与服务端NioSocketChannel进行互通,连接完之后就是WorkGroup的事了,不需要BossGroup管了
一个客户端连接对应一条服务端NioSocketChannel
服务端
BossGroup
对客户端的新连接请求进行处理(OP_ACCEPT)
创建一个NioSocketChannel实例
ServerBootStrapAcceptor
向WorkGroup中的某个Selector注册刚才创建好的NioSocketChannel
WorkGroup
负责处理IO读写、编解码、业务逻辑等(即OP_READ事件、OP_WRITE事件)
服务端启动的时候会绑定一个端口,作为后续客户端连接入口
IO事件类型
SelectionKey.OP_READ
SelectionKey.OP_WRITE
SelectionKey.OP_ACCEPT
SelectionKey.OP_CONNECT
多线程的Reactor模式
BossGroup
对应 mainReactor
WorkGroup
对应 subReactor
多路复用
NioEventLoop
EpollEventLoop
reactor
core
publisher
Flux
Flux是一个发出(emit)0-N个元素组成的异步序列的Publisher
just
Mono
Mono 是一个发出(emit)0-1个元素的Publisher
mybatis
结果嵌套
collection
执行流程
SqlSessionFactoryBuilder(构造器)
SqlSessionFactory:依靠工厂来生成SqlSession。
SqlSession:是一个既可以发送SQL去执行并返回结果的,也可以获取Mapper接口,通过Mapper接口查询并封装数据。
SQL Mapper:它是MyBatis新设计的组件,它是由一个Java接口和XML文件(或者注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
组成
日志
异常
缓存
解析
org.apache.ibatis.parsing
xml解析,${} 格式的字符串解析
类型处理器
实现java和jdbc中的类型之间转换
绑定
注解
映射
执行器
事务
org.apache.ibatis.transaction
org.apache.ibatis.transaction.jdbc
org.apache.ibatis.transaction.managed
数据源
会话
org.apache.ibatis.session
org.apache.ibatis.session.defaults
BindingException
Invalid bound statement (not found)
mapper.xml中的namespace和实际的mapper文件不一致
mapper接口中的方法名和mapper.xml中的id标签不一致
Mapper.xml没有构建进去
配置文件导不出来
mapper-locations 配置 xml
org
generator
apache.ibatis
exceptions
PersistenceException
session
defaults
selectList()
executor
Executor
SqlSession执行增删改查都是委托给Executor
CachingExecutor
CachingExecutor用于处理二级缓存,如果缓存中不存在要查询的数据,那么将查询请求委托给其他的Executor。如果是执行SQL的增删改,那么CachingExecutor将清空二级缓存。
BaseExecutor
BaseExecutor是除CachingExecutor之外,其他Executor实现类的基类。该类主要处理一级缓存
SimpleExecutor
BatchExecutor
plugin
Plugin
interceptor
Interceptor
MybatisPlusInterceptor(mybaits-plus实现)
PageInterceptor(pagehelper实现)
PaginationInterceptor(mybatis-plus作废的实现)
mybatis
spring
SqlSessionTemplate
mybatisplus
com.baomidou.mybatisplus
extension
plugins
PaginationInterceptor
protected long limit = 500L;
Druid
源码
getConnectionDirect
Exception
GetConnectionTimeoutException
DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。
配置
initialSize
初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive
最大连接池数量
minIdle
最小连接池数量
maxWait
获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatements
是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
testOnBorrow
申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
默认 true
testOnReturn
testOnReturn
默认 false
timeBetweenEvictionRunsMillis
有两个含义:
1) Destroy线程会检测连接的间隔时间
2) testWhileIdle false
配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
testWhileIdle
transaction
TX-LCN
锁定事务单元(lock)
确认事务模块状态(confirm)
确认事务模块状态(confirm)
通知事务(notify)
Seata
Transaction Coordinator (TC): 事务协调器
维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚
Transaction Manager (TM): 控制全局事务的边界
负责开启一个全局事务,并最终发起全局提交或全局回滚的决议
Resource Manager (RM): 控制分支事务
负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。
TM是一个分布式事务的发起者和终结者,TC负责维护分布式事务的运行状态,而RM则负责本地事务的运行
隔离级别
Read Uncommitted
生命周期
TM 要求 TC 开始新的全局事务。TC 生成一个代表全局事务的 XID。
XID 通过微服务的调用链传播
RM将本地事务注册为XID对应的全局事务的一个分支到TC。
TM 要求 TC 提交或回滚 XID 对应的全局事务。
TC 驱动 XID 对应的全局事务下的所有分支事务完成分支提交或回滚。
MetricsMonitor
监控
google-guava
multimap
multiset
mysql-connect-java
ConnectionImpl
log
logback
标签
<configuration>
scan
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true
<logger>
用来设置某一个包或者具体的某一个类的日志打印级别、以及指定 <appender>。
<logger> 仅有一个name属性,一个可选的level和一个可选的addtivity属性
<appender>
是负责写日志的组件。该标签负责以适当的格式将日志记录事件输出到适当的输出设备
常用的 appender 类型
RollingFileAppender
滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件
<encoder>
对日志进行格式化
rpc
gRPC
gRPC (gRPC Remote Procedure Calls) 是 Google 发起的一个开源远程过程调用系统
Dubbo
Dubbo是阿里巴巴开源的基于 Java 的高性能RPC(一种远程调用) 分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
泛化调用
json
fastjson
JSONPath
使用表达式访问Json数据
Jackson
JsonTypeInfo
多态类型的序列化及反序列化
JSqlParser
reflections
0 条评论
下一页