自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

基地的博客

自己的一些学习笔记,发现问题请及时指出,谢谢!

  • 博客(65)
  • 资源 (2)
  • 收藏
  • 关注

原创 实体类多字段排序

java实体类根据多字段排序实现方法

2023-04-25 18:48:48 447

原创 Spirng @Conditional 条件注解的使用

Conditional是Spring4.0提出的一个新的注解,当标注的对象满足所有的条件时,才能注册为Spring中的bean。可以看到@Conditional可以使用在类上或者方法上。具体使用方式如下1、在标注或元标注了@Component组件的类上进行标注;2、作为元注解直接标注在其他注解上面;3、在标注了@Bean注解的方法上标注。表示类或方法上的注解元信息。...

2022-07-23 16:37:52 360

原创 基于java实现浅拷贝和深拷贝

浅拷贝:在拷贝一个对象时,复制基本数据类型的成员变量,但对引用数据类型的成员变量只进行引用的传递(复制其地址引用),并不会创建一个新的对象。简单地说就是被拷贝对象和浅拷贝得到的新对象,它们的引用数据类型的成员变量指向同一个内存地址。深拷贝:在拷贝一个对象时,除了复制基本数据类型的成员变量,对引用数据类型的成员变量进行拷贝时,会创建一个新的对象来保存引用类型的成员变量。简单地说就是被拷贝对象和深拷贝得到的新对象,它们的引用数据类型的成员变量指向不同的内存地址。...

2022-07-12 11:38:25 2766

原创 webservice服务调用

Web Service是一种跨编程语言和操作系统平台的远程调用技术。Web Service采用标准的SOAP(Simple Object Access Protocol,简单对象访问协议,属于w3c标准。并且是基于 http 的应用层协议传输xml数据)协议传输。Web Service采用WSDL作为描述语言,并且W3C为Web Service制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何语言写的web

2022-05-24 23:49:23 1500

原创 过滤器和拦截器的区别

一、过滤器Filter 是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。1、过滤器生命周期Filter对象的生命周期:实例化:服务器启动时,实例化;初始化:调用 init() 方法(只会被初始化一次);过滤:当用户请求与过滤器关联的 url 匹配时,调用 doFilter() 方法。FilterChain 参数可以调用chain.doFilter 方法,将请求传给下一个过滤器(或目标资源),或利用转发、重定向将请求转发到其他资源;销毁:服务器

2022-04-24 22:53:27 558 1

原创 双亲委派模型的破坏

一、类加载机制Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这动作的代码模块成为“类加载器”。类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载他的类加载

2022-04-23 16:16:01 2458

原创 优雅实现接口重试

微服务之间互相调用,一般情况下都会设置一些兜底手段,避免服务出现问题,最常见方案就是接口重试机制。对于接口重试常见的方案有:1、 硬核捕获;2、Spring AOP 实现;3、Spring 自带重试工具;4、Gavua 提供重试工具。一、准备工作1、提供一个接口,该接口用来模拟出现网络波动时,服务调用失败的情况:@Componentpublic class RetryServcie { private LongAdder num = new LongAdder(); /*

2022-04-09 23:08:36 3008 1

原创 接口设计--幂等性

1、什么是幂等性?幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。2、接口幂等有哪些使用场景?接口幂等一般出现的场景有:前端重复提交;接口超时重试;消息队列重复消费。3、幂等设计应该在哪一层做?目前互联网技术架构基本都是分布式、微服务架构,层次分的也比较清晰,如:第一层:APP、H5、PC等终端访问;第二层:负载均衡设备(F5,

2022-04-05 17:39:48 6412 1

原创 如何保证数据库和缓存双写一致性?

数据库和缓存双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。一、简介一般情况下,使用缓存都是为了提升查询的性能(redis 单机支持 10万 QPS),减轻DB访问压力。对于查询请求,引入缓存之后的流程通常如下:用户请求到达服务器,首先去缓存查询。如果缓存命中,直接返回;缓存没命中,下一步;去数据库查询,如果数据不存在,直接返回(是否缓存空值取决于实际业务);如果数据存在,更新缓存,返回结果。但是,如果在高并发的情况下,某条记录在被放入缓存之后

2022-04-05 17:31:51 907

原创 MySQL 索引

索引(Index )是数据库优化中最常用也是最重要的手段之一,通过索引通常可以解决大多数的 SQL 性能问题。索引是帮助 MySQL 高效获取数据的数据结构,它用于快速找出在某个列中含有某一特定值的行。索引的本质是空间换时间 ,通过索引这个缓存来提高数据查询的效率。 在MySQL 中,InnoDB 和 MyISAM 存储引擎使用的是B+树索引,Memory使用的是hash索引。一、索引的优缺点1、优点索引大大减小了服务器需要扫描的数据量;索引可以帮助服务器避免排序和临时表;索引可以将随机IO变

2022-04-05 17:20:37 1765

原创 哈希函数处理冲突的方法

​ hash存在天然的问题,哈希冲突,又叫哈希碰撞。开放定址法​ 也叫再散列法,其基本思想是:当关键字 key 的哈希地址 p=H(key)出现冲突时,以 p 为基础,产生另一个哈希地址 p1 ,如果 p1 仍然冲突,再以 p 为基础,产生另一个哈希地址 p2 ,…,直到找出一个不冲突的哈希地址 pi ,将相应元素存入其中。​ 这种方法有一个通用的再散列函数形式: Hi=(H(key) + di) % m i=1,2,…,n(n <= m-1) 其中 H(key)为哈希函数,m 为表长,d

2022-02-12 17:08:08 863

原创 SpringBoot --多环境配置文件动态切换

多环境配置​ 在项目实际开发过程中,可能会有不同的环境,例如开发环境,测试环境和生产环境。不同的环境,对应的配置信息是不同的,将项目发布到不同的环境,需要去更改对应环境的配置信息,如果每次都是手动去更改环境,非常不友好,且容易漏掉配置,如果能够实现不同环境的自动识别,动态切换,将极大的提高工作效率。下面介绍一下自己在工作中使用到的多环境配置方法。环境变量控制​ SpringBoot打包服务时,一些参数需要从外界获取,可以通过在配置文件中配置环境变量实现:spring: datasource:

2021-12-25 16:51:13 1775 2

原创 基于spring实现事件监听

目录事件监听JDK 事件监听机制基于JDK实现事件监听Spring 事件监听基于Spring 实现事件监听基于Spring 实现异步事件监听事件监听​ 常见事件监听机制的主要角色如下:​ 事件及事件源:事件源发生某事件是特定事件监听器被触发的原因;​ 事件监听器:监听器监听特定事件,并在内部定义了事件发生后的响应逻辑;​ 事件发布器:事件监听器的容器,对外提供发布事件和增删事件监听器的接口,维护事件和事件监听器之间的映射关系,并在事件发生时负责通知相关监听器。JDK 事件监听机制​

2021-12-01 22:41:53 1015

原创 Elasticsearch -- 学习笔记

目录1 Elasticsearch 入门1.1 Elasticsearch 安装1.1 下载软件1.2 安装软件1.2 基本操作1.2.1 索引操作1.2.1.1 创建索引1.2.1.2 查看创建的所有索引1.2.1.3 查看创建的指定索引1.2.1.4 查看索引文档总数1.2.1.5 删除指定索引1.2.2 文档操作1.2.2.1 创建文档1.2.2.2 查看文档1.2.2.3 修改文档1.2.2.4 部分文档更新1.2.2.5 删除文档1.2.2.6 根据条件删除文档1.2.3 映射操作1.2.3.1

2021-11-27 14:42:50 1143

原创 Springboot 参数校验

Springboot 参数校验​ Java API规范(JSR303)定义了Bean校验的标准 validation-api,但没有提供实现。hibernate validation 是对这个规范的实现,并增加了校验注解如 @Email、@Length 等。​ Spring Validation 是对 hibernate validation 的二次封装,用于支持 spring mvc 参数自动校验。引入依赖​ 如果spring-boot版本小于2.3.x,spring-boot-starte

2021-11-21 22:54:50 613 1

原创 SpringBoot读取配置文件自定义值

使用Spring上下文中的环境获取​ bootstrap.yml文件中添加配置jidi.name: 基地jidi.age: 24​ java代码注入 Environment,通过上下文环境获取定义的配置:@Autowiredprivate Environment environment;/** * 通过上下文环境获取定义的配置*/String name = environment.getProperty("jidi.name");String age = environmen

2021-11-21 20:26:16 575

原创 Spring缓存注解使用

Spring缓存注解使用​ 从3.1开始,Spring引入了对 Cache 的支持。​ Spring Cache 包含两个顶级接口,Cache(缓存)和 CacheManager(缓存管理器)。Cache 接口包含缓存的各种操作集合,Cache 接口下 Spring 提供了各种 xxxCache 的实现,比如:RedisCache、EhCache、ConcurrentMapCache。CacheManager 定义了创建、配置、获取、管理和控制多个唯一命名的 Cache,这些 Cache 存在于

2021-11-21 20:20:28 2445 4

原创 Spring @Async 注解的使用

Spring @Async 注解的使用​ Spring中用**@Async**注解标记的方法,称为异步方法,它会在调用方的当前线程之外的独立的线程中执行。调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行。Spring 已经实现的线程池​ 1、SimpleAsyncTaskExecutor:默认情况下每次调用都会创建一个新的线程,若系统中不断的创建线程,最终会导致系统占用内存过高,引发OutOfMemoryError错误。针对

2021-08-01 17:31:23 352

原创 SpringBoot项目中使用Google EventBus

SpringBoot项目中使用Google EventBus1、项目导入依赖<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version></dependency>2、注册为Bean组件package com.jidi.springbo

2021-08-01 17:29:54 748 1

原创 自定义二分搜索树,实现树的增加、修改、查询和遍历(递归和非递归)

完整代码如下:package com.jidi.data.structure.tree;import java.io.Serializable;import java.util.LinkedList;import java.util.Queue;import java.util.Stack;/** * @Description 自定义二分搜索树 * @Author jidi * @Email [email protected] * @Date 2021/4/21 */publi

2021-04-24 23:50:21 158

原创 JDBC,你真的知道怎么用吗?

目录1 JDBC API 简介1.1 建立数据源连接1.2 执行SQL语句1.3 检索SQL执行结果1.4 关闭连接1.5 使用JDBC操作数据库2 JDBC API中的类与接口2.1 java.sql包2.2 javax.sql包1 JDBC API 简介JDBC(Java Data Base Connectivity),java语言提供的访问关系型数据库的接口。在Java编写的应用中,使用JDBC API可以执行SQL语句、检索SQL执行结果以及将数据更改写回到底层数据源。JDBC API也可

2020-12-17 23:06:21 825

原创 get请求与post请求的区别

目录1. HTTP协议2. HTTP的get和post请求2.1 get请求2.2 post请求2.3 get请求和post请求的区别2.4 get请求和post请求参数长度的限制3. 参考文献1. HTTP协议HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议。所有的www文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。2. HTTP的get和post请求在客户机和服务器之间进行请

2020-12-09 22:02:14 227

原创 《网络是怎样连接的》-----户根勤,读书笔记

DNS是一个分布式数据库系统,可以将域名和IP地址映射。在互联网上域名与IP地址之间是一一对应的,域名方便记忆,IP地址被机器识别。两者之间的转换称为域名解析。DNS查询有两种方式:递归和迭代。DNS客户端一般都是递归,而DNS服务器之间一般采用迭代查询方式。QQ是直接使用IP地址来连接服务器的,所以即便DNS失效,它依然可以“屹立不倒。浏览器是一个具备多种客户端功能的综合性客户端软件,因此它需要一些东西来判断应该使用其中哪种功能来访问相应的数据,而各种不同的URL就是用来干这个的,比如访问Web服务.

2020-12-09 21:02:06 932

原创 redis缓存穿透、缓存雪崩与缓存击穿

目录1. 缓存访问过程2. 缓存穿透2.1 概念2.2 解决方案3. 缓存雪崩3.1 概念3.2 解决方案4. 缓存击穿4.1 概念4.2 解决方案1. 缓存访问过程使用redis缓存访问过程如下:应用访问redis缓存,如果redis缓存中数据存在,直接从缓存中返回数据。如果缓存中不存在数据,会直接访问数据库,同时把数据写进redis缓存,下次访问就可以直接从redis缓存中读取数据。2. 缓存穿透2.1 概念访问一个不存在的数据,缓存会不起作用,请求会直接访问数据库,由于数

2020-07-18 00:01:23 113

原创 插入排序(java)

1. 算法步骤将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)2. 动图演示3. 代码实现/** * @Description 插入排序 * @Author jidi * @Email [email protected] * @Date 2020/6/10 */public clas

2020-06-10 22:24:03 148

原创 选择排序(Java)

1. 算法步骤首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。2. 动图演示3 代码实现public class Selection { /** * 排序 * @param a * @return */ public static Comparable [] sort(Comparable a[]){

2020-06-09 22:25:12 170

原创 冒泡排序(java)

/** * 冒泡排序测试 * @author 基地 * */public class BubbleSort { public static Comparable [] sort(Comparable a[]) { if(Objects.isNull(a)) { // 为空 return null; } if(a.length == 0) { // 数组长度为0 return a; } for(int i = a.length - 1; i >

2020-06-04 15:13:19 197

原创 ECMAScript 6 之Class的继承

目录1.ES5的继承让一个构造函数继承另一个构造函数,是常见的需求。ES5 是通过修改原型链实现继承,ES6中Class 可以通过extends关键字实现继承,这比 ES5 的方法要方便很多。1.ES5的继承在ES5中实现继承,分两步:在子类的构造函数中调用父类的构造函数;让子类的原型指向父类的原型。下面是一个具体的例子:function A(X, Y) { this.x = x; this.y = y;}A.pr...

2020-05-27 11:50:57 173

原创 java:单例模式的五种实现方式

基于java实现到单例模式

2020-05-23 15:56:28 8529 2

原创 java中的三种代理方式

目录1. 代理模式2. 静态代理2. 动态代理3 Cglib代理4. Spring AOP1. 代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式:即通过代理对象访问目标对象,在目标对象实现的基础上,增强额外的功能操作,或者叫做扩展目标对象的功能,如添加权限,访问控制和日志等功能。举个例子,假如我们需要邀请某位公司老板就某个项目进行合作,我们不会直接联系老板,而是会去联系老板的秘书。老板只要确定合作内容就好了,秘书负责处理其它琐碎的事情就好。此时,秘书就是一个代理对象,老板就是一

2020-05-22 23:51:09 2028 2

原创 Thread.sleep(0)有什么作用?

Thread.sleep(0):线程休眠0秒有什么意义?既然是 Sleep 0 毫秒,那么去掉该代码前后有啥区别?在回答上述问题之前,先来看一下操作系统CPU调度策略:时间片:所有的进程排成一个队列。操作系统按照他们的顺序,给每个进程分配一段时间,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。优先级:操作系统会根据

2020-05-21 09:56:22 980

原创 ECMAScript 6 之Class

目录1. 概述1.1 constructor 方法1.2 类的实例1.3 取值函数与存值函数1.4 属性表达式1.5 Class 表达式1.6 Class 注意事项1. 概述ES6之前,生成实例对象的方法是通过构造函数。function Person(name, sex, age) { this.name = name; this.sex = sex; this.age = age;}Person.prototype.toString = function() { console.inf

2020-05-16 11:08:31 348

原创 ECMAScript 6 之Module

目录1. 概述2. 严格模式3. export 命令4. import 命令5. export default 命令6. export 与 import 的复合写法1. 概述ES6 之前,模块加载方案主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。2. 严格模式ES6中模块自动采用严格模式,关于严格模式,请参考:严格模式。3. e

2020-05-14 17:14:10 152

原创 回过头再看MyBatis

一直使用Spring系列框架+MyBatis进行项目开发,突然发现原生MyBatis的使用忘记了很多,重新温习一下原生MyBatis的使用,使用本博客记录一下过程。目录1. 使用JDBC操作数据库1.1 使用IDEA创建MAVEN工程1.2 导入mysql依赖包1.3 准备数据1.4 使用JDBC1.4.1 数据库配置文件1.4.2 工具类编写1.4.3 测试2. 使用MyBatis框架2.1 ...

2020-05-03 22:04:06 141

原创 JavaScript--浏览器环境

目录1. javaScript脚本嵌入网页的方法1.1 script元素内嵌代码1.2 script 元素加载外部脚本1.3 事件属性1.4 URL 协议2. script 元素2.1 工作原理2.2 defer属性2.3 async属性3. 浏览器的组成3.1 渲染引擎3.2 重流和重绘3.3 JavaScript 引擎4. 参考链接1. javaScript脚本嵌入网页的方法在一个网页中嵌...

2020-04-28 16:49:09 237

原创 《java深入解析:透析java本质的36个话题》阅读笔记

最近阅读了梁勇,阮丽珍编著的《java深入解析:透析java本质的36个话题》一书,将其中一些话题记录下来,分享给大家。目录1. 关键字2. 标识符3. 整型数据类型之间的转换4. 浮点数5. 贪心规则6. ++i与i++1. 关键字java中的关键字如下表所示:注意:goto与const作为保留的关键字而存在,虽然未在程序中使用,但是也禁止程序员将其作为标识符来使用。true、f...

2020-04-18 19:05:55 208

原创 Vue自定义过滤器格式化数字,每三位加一个逗号

自己在开发过程中,前端需要对一些表示金额的数值进行处理,每隔三位数字,用逗号分隔开。记录一下自己的做法。(1) 自定义格式化方法。源代码如下:/* 数字金额逢三加, 比如 123,464.23 */export function numberToCurrency(value) { if (!value) return '0.00' // 将数值截取,保留两位小数 value ...

2020-04-09 09:54:10 4346

原创 java自定义注解以及Spring boot配置aop使用自定义注解

目录前言1. 内置注解2. 自定义注解前言随着springboot的流行,注解使用的越来越多:Java注解不仅让我们减少了项目中XML文件,方便了维护,同时也使我们代码更简洁。那么项目中我们如何自定义注解呢?1. 内置注解Java注解(Annotation)又称Java标注,是JDK5.0引入的一种注释机制。和Javadoc不同,Java标注可以通过反射获取标注内容。在编译器生成类文...

2020-04-08 16:24:13 436

原创 java读取配置文件工具类

假设要读取配置文件为jdbc-mysql.properties,文件内容如下:#jdbc-mysql connectionjdbc.mysql.driver=com.mysql.jdbc.Driverjdbc.mysql.url=jdbc:mysql://localhost:3306/uzi?useUnicode=true&characterEncoding=utf8jdbc.m...

2020-04-05 00:58:22 208

原创 javaScript中的任务队列和事件循环

单线程的javaScriptJavaScript从一诞生就是单线程的,未来也不会改变。虽然HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是新标准并没有改变JavaScript单线程的本质。同步和异步JavaScript中的任务可以分为两类:同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。异步任务:不进入主线程、而进入...

2020-04-03 23:53:59 295

XXL-JOB文档.md

分布式任务调度平台 xxl-job 使用文档

2022-01-02

Centos6.5安装Oracle.docx

本文档是我在Centos6.5上面安装Oracle的步骤总结,参考我的文档,应该能够实现Oracle在虚拟机上面的安装与运行。

2020-03-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除