自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java本地缓存的使用

此类数据通常不会变动,使用频率高且数据量较小,如果每次使用都去数据库查询,代价比较大,可以考虑在项目启动时将此类数据加载到缓存中,并定时进行。当然,数据量较大的情况下,还是不推荐这样使用的,可能会造成OOM。因为业务的需要,既要通过key获取到value,又要通过value获取到key,因此我在这里没有复用父类中的map,而是添加了一个。注解修饰,在第一次被用到的时候会被注入到IOC容器中,此时会调用其(父类BaseCache)构造函数,开始执行定时任务,调用。下面是一个缓存的抽象类,子类继承并实现。

2023-10-17 13:38:59 487

原创 Spring基础元注解@Target、@Retention、@Documented、@Inherited

用于指定当前注解被保留到什么阶段,一共三个阶段:.java文件 → .class文件 → 内存中的字节码。表明修饰的内容被javadoc工具记录。默认情况下,javadoc不包含注解。但是如果声明注解时指定了。,则它会被javadoc之类的工具处理,所以注解类型信息也会被包含在生成的文档中。修饰,那么其子类会自动继承此注解类的注解。如果一个注解类在定义的时候,被。表示当前类是一个注解类。Spring基础元注解。

2023-10-16 13:19:52 340

原创 static属性怎么自动注入@Value

通常,开发中的固定不变的配置项的值都存放在Qconfig中,使用时直接取出来。最常用到的就是非static的属性,配置文件名为。的文件中,存放的是Test类中的各个属性的值。非static属性,直接在属性上方添加。注解,即可给属性赋予对应的值。set方法不能为static。如果是static属性,一、非static属性。二、static属性。

2023-10-11 17:21:42 305

原创 别用==比较包装类

前两天工作把代码合并到主分支时,被公司的安全监测机制拦截了,一看是因为用了。具体的原因下面也讲解的很清楚,就是因为对象会复用,导致比较结果出错。只有在基本数据类型的比较上,是直接比较值,否则比较的是两个对象的地址。

2023-10-11 10:16:08 96

原创 docker常用命令

docker常用命令

2023-09-26 15:01:15 102

原创 Mybatis-plus实现【真·批量插入】

新建一个名为的类,继承。(当然,类名可以根据自己的喜好来)//添加InsertBatchSomeColumn方法 return methodList;} }

2023-08-08 14:59:38 21035 12

原创 使用lambda解决Java中的硬编码问题

解决QueryWrapper中的硬编码问题

2023-07-17 19:29:38 517

原创 负载均衡算法

为了使这个服务器组合能够承受更大的并发量,需要将整个服务器组合收到的所有请求合理的分配给每一个服务器,这就叫做负载均衡。本文简要介绍了简单轮询、加权轮询、加权随机、最小连接数4种负载均衡算法。

2022-10-21 15:17:51 594 1

原创 分布式ID生成算法——leaf算法

leaf算法:号段模式 + 雪花ID模式详解。

2022-10-20 10:41:05 4442

原创 分布式ID生成算法——雪花算法

是Twitter公司提出的一种分布式ID生成算法,是分布式ID问题的经典解决方案。此算法生成的是一个64bit(8字节)的ID,在Java中使用8字节的long来存放,在数据库推荐用bigint来存储。对于单体架构,我们可以使用自增ID来保证ID的唯一性。但是,在分布式系统中,简单的使用自增ID就会导致ID冲突。雪花ID结构如下所示,由1bit符号位 + 41bit时间戳 + 10bit工作机器ID + 12bit序列号组成。根据回拨的时间长短的不同,可以采取不同的应对方案。四、其他分布式ID解决方案。

2022-10-19 21:41:55 17453

原创 为什么volatile不能保证原子性

volatile执行原理、volatile为什么没法保证原子性、代码实现

2022-10-05 16:12:13 3300 11

原创 final修饰的变量必须初始化吗?

final修饰的变量可以分为两类,局部变量和全局变量。当final修饰的变量是局部变量时,只需在用到这个变量之前进行初始化就可以了。但是,当final修饰的变量是全局变量时,必须在变量所属类的对象创建完成之前进行初始化。

2022-10-01 17:08:53 1867

原创 BIO和NIO和AIO

Java中的BIO、NIO和AIO可以理解为Java语言对操作系统中不同IO模型的封装。这样,程序员在需要使用不同IO模型时,无需从操作系统层面考虑,只需要使用Java中的API。就是发起一个请求后,调用者会一直等待请求结果返回,在此期间无法从事其他任务。就是发起一个请求后,调用者不用一直等着结果返回,可以先去干其他事情。就是发起一个调用后,立刻得到被调用者的表示已接收到请求的回应,但。被调用者通常依靠事件,回调等机制来通知调用者其返回结果。即发起一个调用后,被调用者未处理完请求之前,

2022-09-29 15:00:34 461

原创 为什么Spring中的bean默认都是单例模式?

Spring的bean默认单例,主要是为了避免反射的低效率对整体框架的性能造成太大的影响。

2022-09-25 14:51:21 2671 5

原创 Java并发-CAS、Synchronized、ThreadLocal、线程池

线程池、AQS、Volatile、Synchronized、线程池

2022-09-05 19:35:19 983

原创 Java集合知识点

HashMap、HashTable、ArrayList、ConcurrentHashMap

2022-08-23 16:27:09 681

原创 Java基础

Java基础语法、关键字、异常、IO

2022-08-15 16:51:43 276

原创 Spring AOP的概念与原理解析

AOP,就是面向切面编程,它跟OOP(面向对象编程)提供了不同的抽象角度。在OOP中,我们以类Class作为基本单元。在AOP中,我们以切面Aspect作为基本单元。事实上,AOP是IOC的一个拓展功能,是在IOC的整个流程中的新增的一个拓展点。在BeanPostProcessor的后置处理方法中实现的。AOP通过动态代理来实现,运行时在内存中临时生成AOP动态代理类,因此被称为“运行时增强”。这样做便于减少系统的重复代码,降低模块间的耦合度,并有利于后期可操作性和可维护性。......

2022-07-24 17:30:21 382

原创 Spring源码之BeanDefinitionReader

BeanDefinitionReader是一个简单的接口,是用于读取Spring配置文件的内容,并转换为BeanDefinition。源代码如下。BeanDefinitionReader一共有4个实现类此外,源码中介绍说,一个bean definition reader并非一定要实现这个接口,原文如下。简单来说,BeanDefinitionReader这个接口提供了一个规范,但是并不强制执行。因此,我们可以在源码中找到并未实现此接口的bean definition reader。...

2022-07-11 19:07:20 999 2

原创 Java泛型之类型擦除

泛型的基本原理泛型本质是将数据类型参数化,它通过类型擦除的方式来实现。 声明了泛型的 .java 源代码,在编译生成 .class 文件之后,泛型相关的信息就消失了。 可以认为,源代码中泛型相关的信息,就是提供给编译器用的。 泛型信息对 Java 编译器可以见,对 Java 虚拟机不可见。类型擦除使用泛型的时候加上的类型参数,会在编译的时候被编译器去掉。在这里,我们定义一个泛型类GenericsTest,下面的三段代码,分别是编译前的GenericsTest.java文件,经过编译器编译的Generi

2022-04-15 15:10:05 1065

原创 Redis实现分布式锁

好文推荐 ===> 怎样实现redis分布式锁?

2022-04-13 20:00:08 400

原创 SpringBoot自动装配

什么是自动装配?解决了什么问题?《Spring实战》中给装配的定义是:创建应用对象之间协作关系的行为称为装配。也就是说,当A对象中的属性是B对象的时候,在实例化A时,需要对B进行实例化并将其引用赋值给A对应的属性。自动装配其实就是依赖注入的升级版本,是为了简化依赖注入的配置而生成的。在传统的依赖注入中,我们必须要明确给属性装配的是哪一个bean的引用,也可以叫做手动装配。在bean很多的情况下,是非常不方便的。因此,SpringBoot采用注解来进行自动装配。用户不需要知道属性具体要装配哪一个be

2022-03-23 19:48:58 557

原创 Spring事务

Spring事务的实现方式有两种:编程式事务管理:灵活但是难以维护声明式事务管理:可以将事务管理和业务代码分离,可以通过注解和XML配置管理事务Spring事务的优势:提供了跨不同事务API的一致编程模型为编程式事务管理提供了更简单的API支持声明式事务管理很好的集成了Spring的各种数据访问抽象Spring的事务是由AOP来实现的,流程如下:先做准备工作,解析各个方法上事务相关的属性,然后根据具体的属性来判断是否需要开始新的事务。当需要时,获取数据库的连接并关闭自动提交功能

2022-03-22 15:56:58 769

原创 Spring IOC概念与原理详解

IOC,Inversion Of Control,直译过来就是控制反转,它是一种设计思想。在传统的Java Se中,我们通过new来创建一个新的对象,是程序主动去创建依赖对象。而IOC有一个专门的容器来创建这些对象,也就是说,由IOC容器来进行对象的创建,将它们装配在一起,并管控其完整的生命周期。对象的创建由主动行为变成被动行为,控制权颠倒过来了,这也就是"控制反转"名称的由来。既然IOC是控制反转,那么到底哪些方面被反转了呢?主要是获取依赖对象的过程被反转了。控制被反转后,获取依赖对象的过程由自身管理

2022-03-20 00:21:55 671

原创 Spring是如何解决循环依赖的

Spring只能够解决单例模式下的setter循环依赖问题,通过三级缓存来解决。对于构造器的循环依赖和非单例模式的循环依赖无法解决。下面分析一下Spring是如何通过三级缓存来解决单例模式下setter的循环依赖问题的呢?缓存用途一级缓存singletonObjects存放完全初始化好的bean,从这里取出的bean可以直接使用二级缓存earlySingletonObjects半成品bean,尚未填充属性,用于解决循环依赖三级缓存SingletonFactories

2022-03-19 01:49:49 940

原创 Spring Bean的生命周期

1. 实例化Bean对于BeanFactory容器来说,因为它的懒加载策略,所以当用户向容器请求一个尚未初始化的bean,或者初始化bean的时候需要注入另外一个尚未初始化的依赖时,容器才会调用createBean()方法来进行Bean的实例化。对于ApplicationContext容器来说,在容器启动结束后,通过获取BeanDefination对象中的信息,实例化所有的Bean。2. 依赖注入(设置对象属性)实例化后的对象被封装在BeanWrapper对象中,接下来,Spring根据BeanDe

2022-03-18 09:57:05 479

原创 hibernate中entity实体类内部属性名带大写字母出错

最近在练习springboot的过程中,发现了一个有意思的事情。springboot使用jpa(java persistence API) 时默认是hibernate,对应的entity实体类的属性名最好不要有大写字母,因为大写字母会被默认改为下划线+小写字母的形式。下面上图:@Data@Entitypublic class Article { @Id private Integer articleid; private String articleTitle; p

2021-06-30 11:20:25 409

原创 SVM(二):对偶算法、SMO算法

拉格朗日乘子法在学习对偶算法之前,首先我们需要了解一点数学知识——拉格朗日乘子法。它和高数中的拉格朗日乘数法很类似,都用于最优化的求解。不同的点是乘数法用于限制条件为等式的情况,而乘子法用于限制条件为不等式的情况。下面我们介绍一下两种方法,侧重点放在乘子法上面。1、拉格朗日乘数法——等式约束下面简单介绍下拉格朗日乘数法。设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0,为寻找z=ƒ(x,y)在附加条件下的极值点。1. 先做拉格朗日函数F(x,y,λ)=f(x,y)+λφ(x,y) ,其中λ

2020-10-27 10:21:34 1291

原创 SVM(一):SVM入门

SVM简介支持向量机SVM(support vector machines)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。间隔最大使它有别于感知机。SVM还包括核技巧,这使它成为实际上的非线性分类器。SVM的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。SVM相关定义1、分离超平面w⋅x+b=0 w·x+b=0 w⋅x+b=0分离超平面由法向量w和截距b决定,可用

2020-10-26 23:39:27 797 2

原创 函数间隔到几何间隔的推导过程

有道云笔记的Markdown和CSDN中的公式有点不兼容,直接截图上传了。

2020-10-14 16:48:43 448

原创 爬虫入门(2)——BeautifulSoup库

BeautifulSoup拓展包安装pip3 install BeautifulSoup4 --default-timeout=1000BeautifulSoup简介BeautifulSoup是一个html/xml的解析器,主要功能是解析和提取html/xml中的数据。BeautifulSoup支持python标准库中的html解析器,也支持一些第三方的解析器。如果我们没有进行额外的安装,使用的就是python默认是解析器。lxml解析器更加强大,速度更快,推荐使用lxml。1、提取网页中的纯

2020-09-09 00:36:43 333

原创 爬虫入门(1)——requests库

一、requests拓展包的安装1、直接在终端执行下面命令,报错。pip3 install requests2、查看报错原因,里面有一句。估计是网络问题。raise ReadTimeoutError(self._pool, None, 'Read timed out.')3、在命令中增加响应时长后执行成功。pip3 install requests --default-timeout=1000# 运行结果Successfully installed certifi-2020.6.20 c

2020-09-09 00:33:23 258

原创 1到9组成三个三位数,比值为1:2:3且9个数不重复

算法要求使用1,2,3,…,9组成3个三位数,其比值为1:2:3,且其中的9个数每个都要用一次。代码import java.util.HashSet;import java.util.Set;public class Test { public static void main(String[] args) { int j,k; for(int i=123; i<99...

2020-05-06 23:59:34 2196

原创 KMP模式匹配算法求next数组

给大家介绍一种手工求解KMP模式匹配算法中next数组的方法,超级简单。下面以字符串abaabcac进行说明:j01234567值abaabcacnext01122312j是字符串中的位置(从0开始计算),值是字符串对应j位置的字母,next是next数组中的值。下面是计算方法:(1)首先next[0] = 0,n...

2019-08-30 11:44:19 1346

原创 Mac邮箱应用添加邮箱账户

因为网易邮箱大师有太多广告了,今天试了一下Mac自带的邮箱应用,中途出了点小问题,写下来给有需要的人。想要将163等邮箱绑定到Mac自带的邮箱上需要开启邮箱的POP3功能,然后设置授权码,登录的时候密码要使用授权码,而不是邮箱原来的密码,切记。已经开启过POP3功能的如果不记得授权码的话可以重新开启来重置授权码,POP3功能可以在设置内开启。Mac自带的邮箱应用没广告,很清爽,但是好不好用...

2019-08-29 09:38:55 650

原创 oracle数据库自动备份

代码出bug可以修复,但是数据库的数据丢失了,那可是莫大损失,所以让数据库自动进行备份是非常有必要的。下面的方法是通过win的定时器定时执行bat文件来备份数据库:1.首先我们要准备一个用来备份数据库的bat文件(1)新建一个txt文档,里面内容如下(代码放在最后可以复制下来稍微修改一下直 接拿去使用)红色方框内是数据库的账号/密码@SID,蓝色方框内是你用来存储导出的数据库文件的...

2019-08-14 09:49:26 668

原创 SQL语句中的case when,decode的用法

以下面的表为例:用 case when 将人物战斗力筛选成不同的级别:用法:case when 字段 = '值1' then '结果1' when 字段 = '值2' then '结果2' else '结果3' end实例:select name,fightnum,skill, (case when fightnum = 20000 then '神级' ...

2019-07-31 14:39:37 841

转载 Mac用docker安装oracle数据库并且使用

试了很多教程,只有下面的成功了https://blog.csdn.net/qq_37145397/article/details/89462153

2019-07-29 23:52:53 1466

原创 dmp数据库文件的导入导出(数据泵方式)

  首先我们需要创建一个空间用来数据库导出后形成的文件,下面这条语句是在数据库中执行的sql语句。作用是创建名字为dump_dir,路径为 D: 的空间,当然这两者都可以自己定义。create or replace directory dump_dir as 'D:';  然后通过执行下面的语句查看表空间是否创建成功。如果创建成功,查询结果中会有显示。select * from all_d...

2019-07-23 15:45:50 2866 1

原创 数据库借助RowNum筛选数据时不能使用RowNum >= n

介绍RowNum之前首先引入伪列的概念,伪列是数据库术语,物理上该列并不存在,只有当查询时才被数据库构造出来。伪列通常是自由分配的,用户无法更改。RowNum在查询时,每执行一次都是从1开始,直到该行被输出,举个例子:select * from hr.employees where RowNum > 5查询的时候系统首先查找RowNum = 1的行,发现不符合RowNum &gt...

2019-07-19 09:24:53 304

空空如也

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

TA关注的人

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