- 博客(47)
- 资源 (14)
- 问答 (1)
- 收藏
- 关注
原创 BeanPostProcessor 和BeanFactoryPostProcessor
BeanFactoryPostProcessor和BeanPostProcessor,这两个接口,都是Spring初始化bean时对外暴露的扩展点。两个接口名称看起来很相似,但作用及使用场景却不同,分析如下:1、BeanFactoryPostProcessor接口package org.springframework.beans.factory.config;import org.springframework.beans.BeansException;@FunctionalInterfa
2021-12-12 23:32:04
1563
原创 spring 扩展接口的执行顺序
1. 调用构造方法2. @value @Autowired 注入3 实现了Aware 子类执行 BeanNameAware、BeanClassAware、BeanFactoryAware4. @postConstract 执行/ 所有BeanPostProcessor.postProcessBeforeInitialization方法执行(@postContract 也是通过 BeanPostProcessor 原理实现的)5. 实现InitializingBean接口执行afterP...
2021-12-08 23:46:47
367
原创 InitializingBean 原理以及简单使用
实现InitializingBean 接口,必须重写重写方法afterPropertiesSet(),此时实例已经创建,并且属性已经赋值完成,如下图 在执行到afterPropertiesSet 方法时,demo 属性已经赋值完成,然后在afterPropertiesSet 方法内就可以利用属性属性实现某一些功能@Componentpublic class InitializingBeanImpl implements InitializingBean { @Value("${demo:s.
2021-12-04 00:41:55
526
原创 FactoryBean 和BeanFactory
FactoryBean 和BeanFactory 虽然名字类似,但是使用场景完全不同FactoryBean 是 工厂类,一般应用场景是手动创建bean注入容器时使用BeanFactory 是bean 容器,管理bean 实例allBeanNamesByType已经bean 定义beanDefinitionMap,并且提供获取和设置bean 的方法,例如:public <T> T getBean(Class<T> requiredType)其中最重要的bean是Defa..
2021-12-01 19:18:00
210
原创 rocketmq 消息位点提交
此处只从消费线程池内消费进程讲起ConsumeMessageConcurrentlyService 并发消息消费主类,通过submitConsumeRequest将消息提交至消费线程池consumeExecutor ,如下为ConsumeRequest.run()方法class ConsumeRequest implements Runnable { private final List<MessageExt> msgs; private final
2021-11-13 18:18:55
1402
原创 Java 8 parallelStream 与Stream 比较
java8 parallelStream 与Stream 都是将集合转换为流,parallelStream 是并行流,Stream 是串行流1. 并不是所有大数据量流操作parallelStream 要比Stream 快,如下两个例子 List<Integer> intList1 = new ArrayList<>(); for(int i=0;i<=10000000;i++){ intList1.add(i); .
2021-07-29 11:13:21
1055
原创 IO NIO AIO 同步 异步 阻塞 非阻塞
传统javaIO 是同步阻塞IO,在同一个线程内,必须等到阻塞线程返回才会继续处理NIO 是同步非阻塞IO,还是在同一个线程内处理,只不过是设置为非阻塞,同时selctor 会不断查询channel 状态,状态的变更同一处理线程会进行不同的处理AIO 是异步非阻塞IO阻塞与非阻塞 指的是对内存而言,例如内存读取文件内容,读取网卡内容异步与非异步指的是针对是否一个线程处理进行处理还是多线程协作...
2021-07-27 22:39:00
340
原创 sharding jdbc 基本概念(二)
分片键用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。例:将订单表中的订单主键的尾数取模分片,则订单主键为分片字段。 SQL中如果无分片字段,将执行全路由,性能较差。 除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。分片算法通过分片算法将数据分片,支持通过=、>=、<=、>、<、BETWEEN和IN分片。分片算法需要应用方开发者自行实现,可实现的灵活度非常高。目前提供4种分片算法。由于分片算法和业务实现紧密相关,因此并未提供内
2021-05-07 23:17:51
206
原创 sharding jdbc 基本概念(一)
逻辑表水平拆分的数据库(表)的相同逻辑和数据表结构的总称,例如:订单数据根据主键尾数拆分为10张表,分别是t_order_0和t_order_9,他们的逻辑表名为t_order真实表在分片的数据库中真实存在的物理表,即t_order_0和t_order9数据节点数据分片的最小单元,有数据源名称和数据表组成即ds_0.t_orderd_0绑定表指分片规则一致的主表和子表,例如:t_order表和t_order_item 表,均按照order_id分片,则此两张表互为绑定关系,绑定.
2021-05-07 23:16:30
166
原创 sharding jdbc 简单配置
目前市面上的分库分表策略一般比较通用的是使用sharding 和mycat,我只接触过sharding jdbc,此处mycat 不做说明引用pom<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.1
2021-05-06 22:45:45
743
原创 Lambda 表达式
执行单语句 Parameters -> an expression执行多语句Parameters -> {expressions;};若lambda 不需要参数 ,可以使用空括号 () -> {for (int i = 0; i < 1000; i++) doSomething();};Java是一个强类型的语言,因此参数必须要有类型,如果编译器能够推测出Lambda表达式的参数类型,则不需要我们显示的进行指定...
2021-02-20 16:31:04
95
原创 HashMap 初始值大小 小记
HashMap 默认指定大小为16,负载因子为0.75其实这屌毛HashMap 大小可以指定的,必须指定为2的n次幂,若指定非2的n次幂,会自动设置为比设置的值大的2的n次幂(至于为什么是2的n次幂,下次补充)比如设置为3时,haspMap 自动设置为4 ,设置为7时,HashMap 自动设置为8, 设置为100或者120时,hashMap 会自动设置为128,原因如下代码 static final int tableSizeFor(int cap) { int n =.
2020-12-11 14:51:16
460
1
原创 StringBuffer和SpringBuilder 区别简述
StringBuffer和SpringBuilder 都是AbstractStringBuilder 的子类、单纯从StringBuffer.append 和SpringBuilder.append 方法上来看最大的区别是StringBuffer.append 存在synchronized,其他的都一样,而synchronized 是重量级锁,平常的使用过程中应使用SpringBuilder如下1. StringBuilder实现@Override public StringBu.
2020-12-09 20:24:10
2811
原创 JAVA中循环删除list中元素的方法总结
印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。 JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。1、for循环遍历listfor(int i=0;i<list.size();i++){ if(list.get(i).equals("de...
2020-12-07 23:20:37
733
转载 Java 如何产生UUID
转自https://www.cnblogs.com/maohuidong/p/7998258.html1.UUID 简介 UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF)的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。 UUID 的目的,是让分布...
2020-12-01 22:52:40
349
原创 关于BeanUtils 那点屌事
今天出现一个线上bug,我在排查代码的时候,两个高开在我身后陪我排查代码,慌的一批,害怕让他们看见不爽的代码,结果还真发现了,然后被屌了,如下 List<StudentB> studentbList = new ArrayList<>(); studentAList.forEach(student->{ StudentB studentB = new StudentB(); studentB.setName(
2020-11-28 00:11:03
992
1
转载 java 语法糖
转自https://blog.youkuaiyun.com/danchu/article/details/54986442语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言本身功能来说没有什么影响,只是为了方便程序员的开发,提高开发效率。说白了,语法糖就是对现有语法的一个封装。Java作为一种与平台无关的高级语言,当然也含有语法糖,这些语法糖并不被...
2019-10-26 00:52:49
120
转载 ApplicationContextAware原理
转自 https://blog.youkuaiyun.com/baidu_19473529/article/details/81072524入口类ClassPathXmlApplicationContext->AbstractApplicationContext refresh方法 ->prepareBeanFactory方法 AbstractApplicationContext.ja...
2018-11-08 23:13:16
627
原创 java 单例模式
/*单例模式类*/package com.test.cn;public class Singleton {private Singleton(){}private int para1;public int getPara1() {return para1;}public void setPara1(int para1) {this.par
2017-07-30 15:22:38
173
原创 JAVA 实现冒泡排序
package com.test.cn;public class test1 {public static void main(String[] args) {// TODO Auto-generated method stubInteger i=0, temp=0, j =0;int a[] = {1,2,3,4,5,6,7,8,9,10};for(i=0
2017-07-29 22:40:47
162
转载 C 语言unlink 函数
相关函数:link, rename, remove头文件:#include 定义函数:int unlink(const char * pathname);函数说明:unlink()会删除参数pathname 指定的文件. 如果该文件名为最后连接点, 但有其他进程打开了此文件, 则在所有关于此文件的文件描述词皆关闭后才会删除. 如果参数pathname 为一符号连接, 则此连
2013-09-02 14:57:59
1119
转载 va_arg介绍
va_arg1. 概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论.2. 定义大家先看几宏.在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:[cpp] view pl
2013-08-15 11:12:35
4152
1
转载 C语言字节对齐
别填充三个和两个字节使length和整个结构体对齐。于是我们sizeof(my_stu)会得到长度为20,而不是15. 四、__attribute__选项 我们可以按照自己设定的对齐大小来编译程序,GNU使用__attribute__选项来设置,比如我们想让刚才的结构按一字节对齐,我们可以这样定义结构体 struct stu{ char sex;
2013-08-14 14:12:40
449
转载 C语言位域和位段
C结构体之位域(位段)有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可
2013-08-14 00:42:43
682
转载 C语言位运算符:与、或、异或、取反、左移和右移
语言位运算符:与、或、异或、取反、左移和右移位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应
2013-08-14 00:01:25
853
原创 const 和 *
int x = 1,y = 2; // a 与 b 都是整型常量,值都不能修改,只读变量 const int a = 0; int const b = 0; const int *px = &a;// px 不是常量 *px 是常量 int * const py = &y;// py 是常量 *py 不是常量 const int * const pp = &x;// pp
2013-08-13 22:12:46
642
原创 C语言堆空间的生成与释放
堆空间的分配和释放 #include malloc、calloc、realloc、free malloc void *malloc(size_t size); 功能:在堆中分配 size 字节的连续空间 参数:size_字节数 返回值:成功返回分配空间的首地址,失败返回 NULL free void free(void *ptr); 功能:释放由 m
2013-08-13 22:11:06
1566
原创 函数声明与调用问题
假如函数在调用它之前定义可以不用声明实际上,如果在函数调用前,没有对函数作声明,则编译系统会吧第一次遇到的该函数的形式(函数定义或者函数调用)作为函数的声明,并将函数默认值类型认为int型比如有您调用的是void max(int a,int b)系统就会把该函数当做int max(int a,int b);
2013-08-09 14:59:39
804
函数声明与调用问题
假如函数在调用它之前定义可以不用声明实际上,如果在函数调用前,没有对函数作声明,则编译系统会吧第一次遇到的该函数的形式(函数定义或者函数调用)作为函数的声明,并将函数默认值类型认为int型比如有您调用的是void max(int a,int b)系统就会把该函数当做int max(int a,int b);...
2013-08-09 14:59:00
176
转载 C指针
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*p
2013-08-04 00:27:36
526
C指针
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*ptr)[3];...
2013-08-04 00:27:00
75
原创 C语言学习笔记
静态局部变量:假如静态局部变量不必被赋初值的话编译的时候会自动赋初值0(整型变量)者空字符串(字符类型),而对自动变量的话如果不赋初值的话,则可能是任意值。寄存器变量:在程序运行时,根据需要到内存中相应的存储单元中调用,如果一个变量在程序中频繁使用,例如循环变量,那么,系统就必须多次访问内存中的该单元,影响程序的执行效率。因此,C\C++语言还定义了一种变量,不是保存在内存上,而是直接存储在C
2013-08-03 21:10:29
455
C语言学习笔记
静态局部变量:假如静态局部变量不必被赋初值的话编译的时候会自动赋初值0(整型变量)者空字符串(字符类型),而对自动变量的话如果不赋初值的话,则可能是任意值。寄存器变量:在程序运行时,根据需要到内存中相应的存储单元中调用,如果一个变量在程序中频繁使用,例如循环变量,那么,系统就必须多次访问内存中的该单元,影响程序的执行效率。因此,C\C++语言还定义了一种变量,不是保存在内存上,而是直接存储在C...
2013-08-03 21:10:00
79
原创 extern 在C语言中的应用
C语言中extern关键字详解作者:华清远见武汉华嵌 技术支持 曹伟东内容清单:1. 用extern声明外部变量(1)在一个文件内声明的外部变量(2)在多个文件中声明外部变量(3)在多个文件中声明外部结构体变量2. 用extern声明外部函数3. 总结1. 用extern声明外部变量定义:外部变量是指在函数或者文件外部定义的全局变量。外部变量定义必须在所
2013-08-03 11:21:42
882
extern 在C语言中的应用
C语言中extern关键字详解作者:华清远见武汉华嵌 技术支持 曹伟东内容清单:1. 用extern声明外部变量(1)在一个文件内声明的外部变量(2)在多个文件中声明外部变量(3)在多个文件中声明外部结构体变量2. 用extern声明外部函数3. 总结1. 用extern声明外部变量定义:外部变量是指在函数或者文件外部定义的全局变量。外部变量定义必须在所有的...
2013-08-03 11:21:00
134
原创 tar命令的使用
1、建立TAR包(打包)命令格式:tar cvf TAR包文件名.tar 所备份的文件或目录功能描述:tar cvf命令用于把指定的目录或文件打包到指定的文件中。“c”指定建立(或压缩)TAR包,“v”设置命令执行时有更多的提示信息,“f”指定TAR包的文件名。c:create;v:verbose;f:file另外,在使用tar命令时,可以在cvf前面加上短横线
2013-08-03 09:52:16
830
Java 探针 优雅启动
2021-07-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人