- 博客(723)
- 资源 (23)
- 收藏
- 关注
原创 SpringSecurity权限记录
WebSecurityConfigurerAdapter1、访问过滤器code模式访问:http://localhost:8000/oauth/authorize?response_type=code&client_id=test_client&scope=read&state=test&redirect_uri=http://baidu.comAnonymousAuthenticationFilter拦截进入登陆页面if (SecurityContextHolder
2022-01-24 17:11:47
862
原创 spring注入实验
public interface TestInterface<T> { void test();}@Scope("prototype")@Component("top")public class TestSub1 implements TestInterface<TestSub1>{ @Override public void test() { System.out.println("test1"); }}@Componen
2021-12-31 17:08:47
468
原创 @Transactional导致 dynamic-datasource-spring-boot-starter失效原因分析
1、dynamic-datasource@DB切面是可以将数据源信息push到DynamicDataSourceContextHolder类的ThreadLocal<Deque> LOOKUP_KEY_HOLDER中2、如果controller调用service,且controller -->Aservice–>Bservice–>Bdao(A表示A数据源,B表示B数据源),当且仅当Aservice使用@Transactional进行事物管理时,当controller --&
2021-11-03 17:40:36
2806
1
原创 mac 设置共享目录于centos虚拟机
1、配置然后root登录2、chmod -R 777 主机目录3、安装包Contents-Library-iosImages-linux.so复制出来4、重新安装或者安装CD(SATA)选择自动检测,重启可以安装so5、解压文件VMwareTools-10.3.10-13959562.tar.gz,执行vmware-install.pl6、重启设置共享,查看/mnt/hgfs...
2021-08-17 14:42:10
243
原创 mysql group by前n条分组
具有比较值的栗子如下,如果不具有比较值,则使用统计总数,生成比较值select Person,[group],agefrom(select * ,row_number() over(partition by [group] order by age desc) rnfrom mytable) twhere rn <= 2生成比较值SELECT a.*FROM (select depart_id,bu_id,login_name, count(1) total from data i
2021-07-05 16:56:08
208
原创 PropertySources
备忘记录查找类PropertySources PropertyResolver存储MapPropertySource过程
2021-06-04 17:14:16
142
原创 spring常用代码
import java.util.Map;/** * RPC Server * <p> * 1:如果bean实现了 BeanNameAware接口,则调用BeanNameAware.setBeanName() * 2:如果bean实现了BeanFactoryAware接口,则调用BeanFactoryAware.setBeanFactory() * 3:如果bean实现了ApplicationContextAware接口,则调用ApplicationContextAware.se.
2021-06-04 17:11:23
321
原创 一些基本引言的知识点
文章目录一些基本引言的知识点系统调优你所不知道的TIME_WAIT和CLOSE_WAIT一些基本引言的知识点⻦哥在 PHP7 中 把 HashTable 结构体从 72 字节压缩到了 56 字节,表⾯看起来不⼤的优化,实际上是成倍的性能提醒。因为 CPU 在向内存要数据的时候是以 Cache Line 为单位进⾏的,⼀个 Cache Line 是 64 字节。56 字节可以⼀次请求搞定,⽽原来的 72 字节则需要两次。另外就是 L1/L2/L3 的命中率也会提升很多,这个对性能的帮助更⼤。ka
2021-06-04 17:08:50
140
1
原创 循环依赖-Autowired方式
@Autowired方式例子@Componentpublic class TestA { @Autowired private TestB testB;}@Componentpublic class TestB { @Autowired private TestA testA;}TestA开始,AbstractBeanFactory.doGetBean方法开始分析,getSingleton一级缓存获取beanName,结果nullprotected
2021-06-04 17:03:32
704
原创 循环依赖构造器方式
文章目录@构造器方式例子@构造器方式例子@Componentpublic class TestA { private TestB testB; public TestA(TestB testB) { this.testB = testB; }}@Componentpublic class TestB { private TestA testA; public TestB(TestA testA) { this.te
2021-06-04 17:02:46
410
1
原创 特殊情况下会导致循环依赖失效
文章目录来源@Async方式例子来源spring 默认使用三级缓存解决循环依赖问题。特殊情况下会导致循环依赖失效。 比如 1.互相循环依赖使用构造器注入。 2. 通过类似 @Async 注解在对象初始化时期被生成代理对象替换原对象原因@Async方式例子@Componentpublic class TestA { @Autowired private TestB testB; @Async public String test() { retur
2021-06-04 17:01:39
743
原创 springboot类加载关系以及资源加载bug分析
加载器关系当使用 tomcat 容器时,运行时上下文类加载器是 TomcatEmbeddedWebappClassLoader,其父类加载器是 LaunchedURLClassLoader。在IDEA中运行时,上下文类加载器是 AppClassLoader,即应用程序类加载器。TomcatServletWebServerFactory设置TomcatEmbeddedWebappClassLoader类加载的时候,会设置parentclassloader即LaunchedURLClassLoader,因为
2021-05-25 20:20:50
833
原创 Netty启动分析
文章目录NIO SelectorImpl分析Netty前置知识简单总结**知识点**服务端分析NioEventLoop服务端代码继承关系SingleThreadEventLoop registerAbstractChannel register第一步startThread第二步addTask客户端发送数据,服务端处理客户端分析addTask不同Tail 管道连接AbstractChannelHandlerContext connect()建立连接NIO SelectorImpl分析java Channe
2021-05-24 19:13:31
300
原创 Springboot IDEA启动分析
文章目录链路分析核心加载类PathMatchingResourcePatternResolverIDEA启动分析idea启动后对包进行格式化处理获取路径下的File[]文件然后进行antPathMatcher匹配class文件返回Set集合包装成FileSystemResource循环Resource包装成MetadataReaderjar -jar命令启动Java资源管理URL如何解析各种协议`org.springframework.core.io.Resource`启动类JarLauncher不同环境获
2021-05-24 19:09:54
457
5
原创 1、Hadoop
1、基础知识2、安装3、时间同步1、基础知识涞源时Google三篇论文:1: 小文件存储占用大量的内存2: 2.x以后支持文件修改append功能,但是生产不开放这个功能,因为修改过程文件大小修改,切分重新定义,CPU 内存 IO 都会处理这个过程,性能浪费3: 原数据信息存放在NameNode中,生产环境有且只有一个NameNode处于工作状态中4: 1.x存在secondary namenode的概念 只能部分备份namenode数据,2.x 做HA就不需要了...
2020-08-10 16:10:04
138
原创 Sentinel注解集合排序-代码笔记
private static void insertSorted(List<OrderWrapper> list, InitFunc func) { int order = resolveOrder(func); int idx = 0; for (; idx < list.size(); idx++) { if (list.get(idx).getOrder() > order) { ..
2020-07-17 10:50:22
171
原创 ServiceLoader SPI的简单认知
写了这么长时间的代码,竟然没有用过jdk SPI的ServiceLoader,深表遗憾!为什么写这个,因为在看Sentinel配置代码的时候,看到了这个,挺好用的。用法:在jar包中,resources 中建立 META-INF/services文件夹,文件名作为接口的全限定名 public static <S> ServiceLoader<S> getServiceLoader(Class<S> clazz) { if
2020-07-16 20:48:42
331
原创 二分查找
闲来无趣,云品台也开发的差不多了,回顾回顾小小算法,防止老年痴呆/** * 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较, * 如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小, * 则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。 */public class BinarySerach { @Test public void binarySearchTest() { .
2020-07-16 11:51:39
139
原创 归并排序算法
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。public class MergeSortTest { @Test public void mergeSortTest() { Integer[] arr = {2, 4, 1, 5, 73, 2}; // 数组下标 mergeSort(arr, 0, ar...
2020-07-15 16:14:42
140
原创 Nacos 配置变更http异步通知集群其他服务,并不是长链接
配置变更接口:/nacos/v1/cs/configs获取注册中心服务信息:private static final Executor EXECUTOR = Executors.newScheduledThreadPool(100, new NotifyThreadFactory());Queue<NotifySingleTask> queue = new LinkedList<NotifySingleTask>(); for (int i =
2020-07-07 14:21:35
943
原创 Nacos server事件分发EventDispatcher代码小结
EventDispatcher类,作为事件分发器。AbstractEventListener静态内部抽象类,继承该类后实例化的子类,将在该类中的构造方法被注册到EventDispatcher中,这一点以前我没有想到,挺好的写法,设计模式是监听器模式,通过事件调用具体事件的监听类。对于Spring监听器的实现也是类似,只不过spring监听器将事件作为参数与监听器绑定,通过监听器轮询反射获取参数类型进行比对,而nacos事件分发监听是直接通过监听器与事件类进行成员变量的绑定,注册监听事件的过程有点绕,过程
2020-07-07 14:06:44
676
原创 发现stream里边一个好用的retry组件
说明:代码设计的挺好的,以后可以参考,在此记录下翻译说明使用重试语义简化操作执行的模板类。Retryable操作封装在RetryCallback接口的实现中,并使用提供的execute方法之一执行。默认情况下,如果抛出任何异常或异常的子类,则重试操作。可以使用setRetryPolicy(RetryPolicy)方法更改此行为。另外,在默认情况下,每个操作最多重试三次,其间没有后退。可以使用setRetryPolicy(RetryPolicy)和setBackOffPolicy(Back
2020-07-06 16:56:09
452
原创 ThreadPoolTaskScheduler 简单的记录
initializeBean方法:protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) { // 省略。。。。 // 对于实现BeanNameAware接口的类,将执行setBeanName方法, // 我觉的setBeanName的作用更倾向于日志方面的记录,比如Spring async线程池
2020-07-03 18:31:17
844
原创 redis设计与实现读书笔记-主从复制
主从复制:在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave)。如果从服务器创建的套接字能成功连接(connect)到主服务器,那么从服务器将为这个套接字关联一个专门用于处理复制工作的文件事件处理器,这个处理器将负责执行后续的复制工作,比如接收RDB文件,以及接收主服务器传播来的写命令,诸如此类。PSYNC
2020-06-29 10:57:00
150
原创 redis设计与实现读书笔记-事件
事件Redis服务器是一个事件驱动程序,❑文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通信操作。❑时间事件(time event):Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。文件事件Redis基于R
2020-06-29 10:45:18
190
原创 redis设计与实现读书笔记-持久化
RDB持久化RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态,RDB文件的创建与载入有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE。SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求,BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求RDB文件的载入工作是在服务器启动时自动执行的,
2020-06-29 10:26:25
152
原创 redis设计与实现读书笔记-数据库
前言键空间和用户所见的数据库是直接对应的:❑键空间的键也就是数据库的键,每个键都是一个字符串对象。❑键空间的值也就是数据库的值,每个值可以是字符串对象、列表对象、哈希表对象、集合对象和有序集合对象中的任意一种Redis对象。设置键的生存时间或过期时间通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(Time To Live,TTL),在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键:❑EXPIRE<key.
2020-06-28 16:57:04
216
原创 redis设计与实现读书笔记-对象
Redis用到的所有主要数据结构,比如简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等等,Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面所介绍的数据结构。Redis的对象系统还实现了基于引用计数技术的内存回收机制,当程序不再使用某个对象的时候,这个对象所占用的内存就会被自动释放;另外,Redis还通过引用计数技术实现了对象共享
2020-06-28 16:40:27
172
原创 redis设计与实现读书笔记-数据结构
数据结构:SDS与C字符串的区别:C语言使用长度为N+1的字符数组来表示长度为N的字符串,并且字符数组的最后一个元素总是空字符'\0'。C字符串并不记录自身的长度信息,所以为了获取一个C字符串的长度,程序必须遍历整个字符串,和C字符串不同,因为SDS在len属性中记录了SDS本身的长度,所以获取一个SDS长度的复杂度仅为O(1)。与C字符串不同,SDS的空间分配策略完全杜绝了发生缓冲区溢出的可能性:当SDS API需要对SDS进行修改时,API会先检查SDS的空间是否满足修改所需的要求,如.
2020-06-28 15:46:47
152
原创 一致性哈希算法的理解
概念一致性哈希算法及其在分布式系统中的应用http://blog.codinglabs.org/articles/consistent-hashing.html简单总结:普通分布式缓存痛点:服务器宕机或扩容,数据重新hash计算影响大。虚拟环:一致性hash算法是来做服务器的负载均衡,而服务器的IP地址是32位,所以是2^32-1次方的数值空间。服务器寻址:h = Hash(ip或主机名) % N, N为服务器的台数,并且服务器按照0 – (N-1)编号数据定位服务器:采用..
2020-06-27 20:03:00
191
原创 springgateway限流-令牌桶算法
限流配置参见:https://blog.csdn.net/forezp/article/details/85081162https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#the-requestratelimiter-gatewayfilter-factoryhttp://www.ityouknow.com/springcloud/2019/01/26/spring-cloud-gateway-limit.ht
2020-06-26 21:19:07
1313
原创 SpringGateway转发过程
为什么写?就想看看springgateway的限流咋做的?但是看着看着就想知道转发过程,然后就写了,总之:转发是通过重组请求头header、uri等信息建立netty客户端连接的访问过程。Lettuce相较于Jedis有哪些优缺点?Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接
2020-06-26 19:24:41
3669
原创 一个SpringBoot里边函数式编程的例子
为什么写因为看到了SpringBoot一个关于函数式编程的完美例子,以前很少用到,但是写的真是太美了,就像美女一样,真养眼。先看下lambda常用的函数接口接下来看看她长什么样子public final class PropertyMapper { private static final Predicate<?> ALWAYS = (t) -> true; private static final PropertyMapper INSTANCE = new
2020-06-26 12:41:50
1188
原创 Druid的数据库连接获取过程以及是否可热切换域名
为什么写?我就想看看,到底和普通建立当有啥区别,另外是否可以热切换域名普通的Mysql创建连接的过程:public class Conn { Connection con; public Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("数据库驱动加载成功");
2020-06-25 19:29:13
1125
原创 关于@EnableFeignClients的认识
今天起了大早,偶尔发现,项目忘记加入注解@EnableFeignClients,导致启动失败,于是想知道它做了啥呢?为什么项目没有加载相关bean?原来@EnableFeignClients是通过@Import把FeignClientsRegistrar注入到IOC容器中,当项目启动执行invokeBeanFactoryPostProcessors--》invokeBeanDefinitionRegistryPostProcessors—》ConfigurationClassPostProc
2020-06-24 10:37:37
5430
原创 回顾篇-SpringBoot-Tomcat
为什么写?今天看了Spring实战第五版,里边有句话如下:传统的基于Servlet的Web框架,如Spring MVC,在本质上都是阻塞和多线程的,每个连接都会使用一个线程。在请求处理的时候,会在线程池中拉取一个工作者(worker)线程来对请求进行处理。(读到这里没啥疑问,但是接下来说的我有点疑惑)同时,请求线程是阻塞的,直到工作者线程提示它已经完成为止。我就在想SpringBoot默认内置的Tomcat应该是Nio,请求线程不应该是阻塞的,应该是同步非阻塞的,于是变回顾下请求过程。To
2020-06-23 11:37:22
332
原创 使用常见的反应式操作
import lombok.Data;import org.junit.Test;import reactor.core.publisher.Flux;import reactor.core.publisher.Mono;import reactor.core.scheduler.Schedulers;import reactor.test.StepVerifier;import reactor.util.function.Tuple2;import java.time.Duratio...
2020-06-22 18:15:20
1127
原创 回顾篇-mysql索引-读书笔记
事务日志事务日志可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用的是追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘。目前大多数存储引擎都是这样实现的,我们通常称之为预写式日志(Write-Ahead Lo...
2020-06-20 19:45:07
217
restful zip请求直接解析和下载
2018-08-11
华为日志说明
2018-07-13
syslog工具(win10可以用)
2018-07-13
华为交换机手册配置(包括syslog日志)
2018-07-13
webgoatwebgoatwebgoat
2017-09-22
iBase4J配置部署说明+代码
2017-09-13
listener-tnsname
2017-09-09
PLSQL Developer11中文绿色
2017-09-09
bootstrap demo 大全
2017-09-03
bootstrap树 bootstrap-treeview完整例子
2017-09-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人