- 博客(46)
- 收藏
- 关注
原创 spring扫描自定义注解注册bean
我们知道,在spring中,我们只需要加上注解@Component,就可以自动注入到spring容器中,如果我们自定义注解,怎么让spring识别到,注入到容器中呢,下面我们来看看。
2025-04-09 15:23:01
241
原创 Mybatis源码MetaClass中的buildProperty方法分析及学习
今天在学习mybatis源码的时候感觉MetaClass的方法写的很优雅,现分享出来。
2025-03-17 14:30:00
333
原创 关于SpringBoot自动加载DataSource的解析
本次探究的过程是因为在学习Shardingsphere时所引起的,在看Shardingsphere的文档中,发现并没有关于在SpringBoot中集成的介绍,这让我很好奇,有两个原因,其一,我记得之前在项目中是有看到关于shardingsphere-jdbc的starter的,其二,针对大部分项目一般都会提供相应的starter供使用,以便简化开发,比如Druid、Mybatis-Plus等。带着这两个疑问,我查阅了资料,疑问得到了解决,原来Shardingsphere官方在5.3.0。
2024-08-26 08:30:00
1406
1
原创 面试题:多线程篇
字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。所以,程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。
2024-06-07 10:00:15
786
原创 数据库总结
数据库的好处将数据持久化到本地提供结构化查询功能常见概念DB:数据库,存储数据的仓库DBMS:数据库管理系统,又称为数据库软件或者数据库产品,用于创建和管理数据库,常见的有MySQL、Oracle、SQL ServerDBS:数据库系统,数据库系统是一个通称,包括数据库、数据库管理系统、数据库管理人员等,是最大的范畴SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言常见分类。
2024-05-12 09:57:24
355
1
原创 实时数仓总结
在流式数据处理中,数据的计算是以计算增量为基础的,所以各个环节到达的时间和顺序,既是不确定的,也是无序的。在实际处理中,考虑到数据查找的性能,会把数据按照关联主键进行分桶处理,以降低查找的数据量,提高性能。该层的数据来源于 ODS 层,通过简单的 Streaming ETL 后得到,对于 binlog 日志的处理主要进行简单的数据清洗、处理数据漂移,以及可能对多个 ODS 层的表进行 Streaming Join,对流量日志主要是做一些通用ETL 处理,将非结构化的数据结构化,关联通用的维度字段;
2024-05-06 10:18:55
1232
1
原创 面试题:集合篇
为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。我们上面也讲到了过了,Hash 值的范围值-2147483648 到 2147483647,前后加起来大概 40 亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40 亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这个数组下标的计算方法是“ (n - 1) & hash”。
2024-05-06 09:41:53
1094
原创 面试题-Redis篇
Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时 候可以再次加载进行使用。Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list, set,zset,hash 等数据结构的存储。Redis 支持数据的备份,即 master-slave 模式的数据备份。Redis 优势。
2024-04-30 13:49:32
764
原创 面试题-Java I/O篇
Filter Stream 是一种 IO 流主要作用是用来对存在的流增加一些额外的功能,像给目标文件增加源文件中不存在的行数,或者增加拷贝的性能。序列化就是一种用来处理对象流的机制,将对象的内容进行流化。可以对流化后的对象进行读写操作,可以将流化后的对象传输于网络之间。
2024-04-30 11:45:34
632
原创 仿redis的zset类型
模仿redis的zset数据类型,写了Java内存版,写这个的背景是做自己的小项目,服务器资源有限,不想引入redis,但同时又想使用zset的排序功能,所以就自己写了一个简化版本。
2024-04-25 20:55:17
230
原创 面试题:kafka篇
Kafka 将生产者发布的消息发送到 Topic(主题) 中,需要这些消息的消费者可以订阅这些 Topic(主题)。Producer(生产者) : 产生消息的一方。Consumer(消费者) : 消费消息的一方。Broker(代理) : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个Kafka Cluster。Topic(主题) : Producer 将消息发送到特定的主题,Consumer 通过订阅特定的Topic(主题) 来消费消息。
2024-04-24 20:44:36
791
原创 面试题:Java I/O篇
Filter Stream 是一种 IO 流主要作用是用来对存在的流增加一些额外的功能,像给目标文件增加源文件中不存在的行数,或者增加拷贝的性能。序列化就是一种用来处理对象流的机制,将对象的内容进行流化。可以对流化后的对象进行读写操作,可以将流化后的对象传输于网络之间。
2024-04-24 20:39:16
1104
原创 Docker学习
参考资料:RUN yum -y install less EXPOSE 80 # 这里的目的是保持一个进程,让容器不关闭,像tomcat就不需要是因为它自己启动的tomcat进程一直在运行 ENTRYPOINT /bin/bash。
2024-03-11 10:51:20
374
原创 随机选择器
在阅读本公司源码时发现了一段实现随机选择器的代码,感觉不错,现分享出来。代码务必要多敲,就上面这么简单的一段代码,我自己敲错了好多地方。
2024-03-09 23:23:43
607
原创 第20章 注解
单元测试是对类中的每个方法提供一个或多个测试的一种实践,其目的是为了有规律的测试一个类的各个部分是否具备正确的行为。也称为元数据,为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻方便的使用这些数据。TYPE_PARAMETER:1.8版本开始,描述类、接口或enum参数的声明。TYPE_USE:1.8版本开始,描述一种类、接口或enum的使用声明 |** ** | SOURCE:在源文件中有效(即源文件保留)** ** | 允许子类继承父类中的注解 |@Deprecated:过时的。
2024-03-08 09:00:00
464
原创 xml总结
xml:即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制。它允许用户自定义标签。一个标签用于描述一段数据;一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其他标签描述其他数据,以此来实现数据关系的描述。DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。
2024-03-07 09:40:41
897
原创 第16章 数组
数组在早期版本中是必须的,但是随着泛型和自动装箱技术的出现,容器几乎完全可以替代数组了,在开发中应该使用容器,除非是对性能有极高的要求。
2024-03-03 11:10:25
253
原创 第15章 泛型
可以看到,很多通过符组合,表示的意思是,其代表某种意思,但是我们不知道这个意思是什么,其大部分用途是在方法的形参上,让它代表这个意思,然后通过实参,传入具体的类型。泛型最大的价值体现在容器类的使用中;在容器中获得Object对象并转型,出现错误并无法发现并不常见;将容器对象合理命名可以很好的避免这种情况;如此显著和复杂的特性(泛型)并非仅仅为了解决转型的错误;泛型更重要的目的在于表达性;正如泛型的名字,目的是创建出更通用的代码。
2024-03-02 09:00:00
898
原创 第14章 类型信息
在很多时候,我们需要判断对象是否为null,书中提供了一种思路,创建单例的空对象,来使所用的变量都不会为null,这样可以避免空指针异常,然而,这并不是完美的,很多情况下,我们需要区别它是否是空对象,这也是变相的判断是否为null。当程序创建第一个对类的静态成员的引用时,就会加载该类,包括静态方法,创建对象。类加载器实际上是一条类加载器链,但是只有一个原生类加载器,原生的加载可信类,一般是从本地磁盘加载的。类是程序的一部分,每个类都有一个Class对象,该对象是由类加载器产生的。限定为某一类型的做法。
2024-03-01 09:00:00
676
原创 第13章 字符串
底层是创建StringBuilder对象,使用append()方法,连接字符串,其存在的问题是当处于循环状态时,每次循环都会创建一个StringBuilder对象,因此,速度会变慢。当打印对象时,会调用该对象的toString()方法,当一个对象与String类型相加时,会调用该对象的toString方法,将该对象转为String类型,因此会导致递归调用。在第0行创建了StringBuilder对象,而从15到28行的循环体并没有创建对象,因此,与上种方法对比,速度会更快。"指定,匹配表达式最少字符数。
2024-02-29 09:38:40
390
原创 第12章 通过异常处理错误
/ 对于异常来说,最重要的就是类名,一般默认构造器就够用了super(msg);try {// 默认调用try {throw new MyException("说明信息");// 输出到指定流/**/a.txtcom.ding.five.MyException: 说明信息异常与记录日志// 返回指定命名的日志对象,如果存在直接返回,否则创建后返回// 下面两步的操作是将错误信息输入到StringWriter中// 将错误信息打印/*
2024-02-28 11:34:26
648
原创 第11章 持有对象
数组将索引与对象联系起来,保存类型明确的对象,可以是多维的,数组一旦生成,容量就不能改变;Collection保存单一元素,Map保存相关联的键值对。可以自动调整大小,不能持有基本类型,但是可以自动包装;List将索引与对象关联,是排好序的容器;大量随机访问使用ArrayList,经常从表中间插入或删除,使用LinkedList;各种Queue和栈的行为,由LinkedList提供支持;Map是将对象与对象相关联的设计。
2024-02-28 11:33:07
714
原创 第9章 接口
java中用实现接口表达拥有某种功能,用继承表现is-a的关系,显然飞行动物不是空中行为,飞行器也不能继承飞行动物,用实现接口更能很好的表达。另外,由于java中的单继承限制,假如现在要创建A类,它需要同时实现B类和C类中的功能,但是B类和C类都是相互独立的,此时通过继承就无法实现了。interface关键字使抽象的概念更向前了一步,只做了声明,没有提供任何的实现,表示“所有实现了该接口的类看起来都像这样”。从另一种角度来说,继承关系中,子类在初始化时会初始化基类,降低性能,而接口不存在这个问题。
2024-02-22 16:47:49
281
原创 第7章 复用类
Java并没有提供直接的支持,它是继承和组合之间的中庸之道,方式是将成员对象置于新类中,同时暴露该成员对象的所有方法。**称为向上转型的原因:**类继承图的绘制是将根置于顶端,子类置于下方,所以子类向父类的转换称为向上转型。final类不能被继承,同时隐含了方法为final,因为类不能被继承,所有也不存在被重写的情况。**再论组合与继承:**继承应当慎用,如果新类需要向上转型,则继承是需要的,否则应当使用组合。组合:在新的类中产生现有类的对象,该方法是复用了现有程序代码的功能,而非它的形式。
2024-02-22 16:46:21
439
原创 第5章 初始化与清理
当无构造器时,编译器会自动创建一个无参构造器;当定义了构造器时(无论是否有参数)编译器都不会再创建构造器。static方法中没有this关键字,通过类直接调用,这也正是它的用处。此时无法确认是哪个方法。
2024-02-22 16:43:26
434
原创 第3章 操作符
基本数据类型赋值是赋的本身,对象赋的是内存地址。对其的理解为变量是一块内存空间,右边的内存空间是什么,左边的变量的内存空间就会是什么,因为基本数据类型右边装的就是其本身,所以左边也会是其本身,而变量是内存地址,所以右边也会是内存地址。
2024-02-22 16:40:26
392
原创 用Java实现自己的编程语言
文章目录前言思路具体实现依赖操作数和操作符实体核心处理测试前言在工作中,由于需要,想在前端页面上实现一些逻辑,为了功能更强大一些,所以想着自己开发一个简单的编程语言,前端在文本框中即可实现自己的逻辑。思路使用字符串接收代码块,通过,正则表达式,实现拆分。将代码分为4个部分:操作数:变量:以下划线开头,支持大小写,例:“_age”。数据:目前仅支持整型和布尔数据,例:“12”、“true”、“false”。操作符:支持+ - * / = > < 操作符,赋值用“~”表示。
2020-10-30 17:08:40
920
原创 Apache.HttpClient使用总结
文章目录HttpClient1 GET无参2 GET有参2.1 直接拼接URL2.2 使用URI获得HttpGet3 POST无参4 POST有参4.1 普通参数4.2 对象参数4.3 对象+普通参数5 其他问题5.1 响应乱码5.2 https请求5.3 发送文件5.4 发送流HttpClient参考文章:https://blog.youkuaiyun.com/justry_deng/article/details/81042379pom<dependency> <groupId&g
2020-10-22 17:57:43
459
原创 json处理-Jackson使用总结
文章目录Jackson1 简单映射2 集合及多节点3 配置4 注解5 对日期时间的支持6 处理xml7 集成SpringBootJackson依赖<!--jackson依赖--><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.1
2020-10-22 17:53:15
421
原创 Java多种定时任务
文章目录定时任务1 Timer2 ScheduledExecutorService3 Spring Task3.1 基本使用4 执行时间配置4.1 cron表达式5 开/关定时任务定时任务1 Timer这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 @Test public void test1() throws IOException {
2020-10-19 17:17:01
754
原创 读书笔记-MySql必知必会(四)
文章目录第19章 插入数据第20章 更新和删除数据第21章 创建和操纵表第22章 视图第23章 使用储存过程第24章 使用游标第25章 使用触发器第26章 管理事务处理第27章 全球化和本地化第28章 安全管理第29章 数据库维护第30章 改善性能第19章 插入数据提要: 本章介绍了INSERT语句。1:插入数据的方式:插入完整的行;插入行的一部分;插入多行;插入某些查询的结果。2:INSERT INTO `user` VALUES (NULL,'kobi','男',32,'旧金山'
2020-10-16 17:54:51
318
原创 读书笔记-MySql必知必会(三)
文章目录第9章 使用正则表达式搜索第10章 创建计算字段第11章 使用数据处理函数第12章 汇总数据第13章 分组数据第14章 使用子查询第15章 联结表第16章 创建高级联结第17章 组合查询第18章 全文本搜索第9章 使用正则表达式搜索提要: 本章主要介绍了正则表达式在where子句中的使用正则表达式: 是用来匹配文本的特殊的串(字符集合)。1:查询地址包含北京的数据SELECT * FROM `user` WHERE address REGEXP '北京';2:LIKE 与 REGE
2020-10-16 17:50:36
295
原创 读书笔记-MySql必知必会(二)
文章目录第4章 检索数据第5章 排序检索数据第6章 过滤数据第7章 高级过滤数据第8章 使用通过符过滤第4章 检索数据**提要:**本章主要介绍了SELECT的基本使用。1:为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。2:检索单个列:SELECT prod_name FROM products;说明:本条语句是最基本的语句,比较简单,需要注意的是命名和书写规范;复杂的语句可以分成多行书写。数据库相关规范(一种):1、表名以T_开头,全部大写,
2020-10-16 17:44:39
103
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人