自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 构建树形结构

构建树形结构定义树对象构建对象返回体我们在业务中或多或少都会遇到构架树结构的情况,我这也是简单记录一下。定义树对象public class InvGroupDetailTreeNode { @ApiModelProperty( value = "节点ID", notes = "规则 产品节点ID:公司ID||'_'||产品ID,单元节点ID:公司ID||'_'||产品ID||'_'||单元ID,组合节点ID:公司ID||'_'||产品ID||'

2022-01-05 15:40:48 383

原创 Spring Boot 启动报错:while scanning for the next token found character ‘@‘ that cannot start any token.

几天

2021-10-11 18:50:27 4438 2

原创 centos clickhouse的安装与启动

环境:centos 7.6用到的所有命令(顺序执行即可完成安装):curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | bashyum list | grep clickhouseyum install -y clickhouse-server clickhouse-clientservice clickhouse-server startclickhouse-cl

2021-02-20 09:58:54 1705 1

原创 关于 sharding 使用 ON DUPLICATE KEY UPDATE 中 VALUES 方法失效的原因

其实也不是失效,而是我自己没有仔细观察背景:由于使用到了分库分表,数据库被 sharding jdbc 代理mysql 提供了 主键冲突时 进行更新操作的语句 ON DUPLICATE KEY UPDATE但是我在使用的时候,因为数据库被代理,所以在 ON DUPLICATE KEY UPDATE语句中不能使用#{},${}, 需要使用VALUES方法。于是就有了下面的这个语句INSERT INTO `moyu_user_session_hist` ( platform_i

2021-01-25 18:19:48 3096 12

原创 Spring Security 小坑

Spring Security 小坑如果在项目中,添加了 Spring Security 依赖,那么项目就会默认开启 Http Basic 认证,就会自动生成密码。在开启了 Http Basic 认证后,必须需要使用Get 请求才可以使用,Post 请求会报 403 的错误...

2020-12-17 14:33:22 109

原创 SpringBoot 使用 Http Basic 请求

Spring Security 使用 Http Basic 认证请求引用 Spring Security 依赖,继承 WebSecurityConfigurerAdapter 类@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity httpSecurity) throws Exc

2020-12-16 22:57:41 654

原创 常见小bug之Spring @Configuration 注解未生效

问题:第一种情况:正常情况下,我的这个项目结构不会报这种错误,我们都知道,Spring Boot 会默认扫描启动类同级包和子包的类,而我的也符合规范,但是我忘记了在启动类中修改了自动扫描的包和子包,所以扫描失败了。第二种情况:还有一些其他的情况就是没加注解,或者项目结构不对(不是同级包或者子包)...

2020-11-14 17:02:59 13342 2

原创 Java冷知识之可变参数

今天在看源码时,看到了类似这样的一个方法 public static String getPerson(Integer id, Object... a) { System.out.println(id); return id.toString(); }在上面方法的参数中使用到了_Object…_这样的参数,主要功能就是意味着这个参数可以不传,也就是这样的第一种getPerson(1);第二种getPerson(1, "s", "ssss");如果是

2020-11-11 12:34:26 709

原创 SpringBoot 项目 使用java -jar 命令执行,出现 没有主清单属性错误

因为之前自己写了一个小demo,是一个Spring Boot 项目,使用maven 构建。情景:使用Idea 可以正常启动,但是通过maven 打成 jar 包后,使用 java -jar命令启动,出现没有主清单属性错误。我在网上查的时候哦,都说是添加以下代码就可以: <build> <plugins> <plugin> <groupId>org.springframework.b

2020-11-05 10:44:14 108

原创 Java并发之线程池浅析

线程池的主要构造方法第一种:newFixedThreadPool 方法创建一个固定数量的线程池,用于处理多个任务ExecutorService executorService = Executors.newFixedThreadPool(3);public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads,

2020-10-09 17:48:25 72

原创 Java并发之ThreadLocal浅析

ThreadLocal :顾名思义,线程本地变量

2020-09-21 15:41:34 114

原创 Java并发之CyclicBarrier浅析

CyclicBarrier 是什么?CyclicBarrie允许让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier只能唤起一个任务,CountDownLatch可以同时唤起多个任务CyclicBarrier可重用,CountDownLatch不可重用,计数值为0该CountDownLatch就不可再用了代码分析:public class MyTest2 { public static

2020-08-21 12:04:00 198

原创 Java并发之CountDownLatch浅析

CountDownLatch 是什么?CountDownLatch基于AQS的共享模式,用来控制一个或者多个线程等待多个线程基本思想:内部存在计数器,当所有的子线程都执行到指定的地点,通过给Count 值 做减法,直到为 0 时,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务实例分析:public class MyTest1 { public static void main(String[] args) { CountDownLatch cou

2020-08-20 16:56:30 141

原创 锁消除和锁粗化浅析

锁消除锁消除是编译器对于锁的优化措施,在JIT编译器可以在动态编译同步代码时,使用一种逃逸分析的技术,来通过该技术判别程序中所使用的锁对象是否只被一个线程所使用,而没有散布到其他线程中;如果这种情况的话,那么JIT在编译这个同步代码时就不会生成synchronized关键字所标识的锁的申请与释放机器码,从而消除了锁的使用流程。public class MyTest4 { public void method() { Object object = new Object()

2020-08-17 12:13:56 550

原创 Java 并发之 wait 和 sleep 区别

wait 和 sleep 到底有什么区别sleep 方法存在于 Thread类中,而 wait 方法存在于Object类中sleep 在调用的时候不会去释放对象的锁,wait 会释放对象锁,这也是为什么 wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,因为在调用wait的时候会释放锁,所以必须得先获得锁,那么获取对象锁的方式有哪些呢?synchronized 关键字 修饰静态方法synchronized 关键字 修饰实例方法synchronized 关键字

2020-08-06 16:52:52 92

原创 关于Mybatis的小水坑之参数问题

在项目中使用到了Mybatis框架,在写sql语句做一些条件过滤的时候,如果传入的参数是Integer类型,并且传入的是0,那么Mybatis会自动将该参数转化为"",也就是空串。

2020-07-02 10:55:01 117

原创 Java monitor 实现

monitor 是操作系统提出来的一种高级原语,但其具体的实现模式,不同的编程语言都有可能不一样。以下以 Java 的 monitor 为例子,来讲解 monitor 在 Java 中的实现方式。在Java中,一个对象对应了一个momitor对象,而synchronized关键字也需要关联一个对象,这个对象需要天生就支持monitor,所以在Java中,可以就是Java 中的 java.lang.Object 类,便是满足这个要求的对象,任何一个 Java 对象都可以作为 monitor 机制的 mon

2020-06-29 16:25:02 802

原创 Synchronized 的锁升级

搜索

2020-06-29 09:40:53 168

原创 Synchronized使用方法

在工作中,遇到多线程的问题,我们可能会添加synchronized关键字,特别方便,主要还是它是java提供的,其内部帮助我们做了很多优化,接下来,我们慢慢分析一波。众所周知,synchronized包括对象锁和类锁。第一种:类锁指synchronize修饰静态的方法或指定锁对象为Class对象,在java中,每个类都有一个class 对象,当我们使用synchronized修饰class对象时或者静态方式时,就相当于锁住了class对象。public class SynchronizedObjec

2020-06-08 11:08:26 198

原创 关于Spring cloud 报413Request Entity Too Large,402的解决方案

关于在Spring cloud 时,报413Request Entity Too Large、402问题。问题的起因:我们在使用token验证的时候,随着账号权限的增加,token会变得越来越大,所以就超出了限制。解决方案:@Componentpublic class CustomizeNetty implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> { @Value("${server.max-

2020-05-13 17:04:00 2079

原创 JVM 内存模型之常量池区别

1.程序计数器:负责存储当前虚拟机执行的字节码指令地址,如果是本地方法(native),地址则为空(undefined)。2.虚拟机栈:由一个个的栈帧组成,一个栈帧对应着一个方法,其中一个栈桢中有操作数栈、局部变量表、动态链接和方法出入口信息。在这里,会出现两种异常;第一种:stackOverFlowError(栈):当请求的栈的深度大于虚拟机栈的最大深度时,则抛出异常。第二种:outO...

2020-04-07 21:02:55 122

原创 Java8之方法引用、默认方法分析

之前的文章我们分析了怎么写出一个自己需要的、恰当的Lambda表达式,现在方法引用这个方法使我们更加的方便了。接下来,我们分析一下方法引用。什么环境下使用方法引用其实是Lambda表达式的另一种特定的写法,也就是说方法引用只有满足一定的条件才可以代替Lambda表达式。条件:Lambda表达式的方法体中有一条语句并且有具体的方法示例:// 第三条语句可以代替第二条语句进行输出,并且达到的...

2020-01-21 11:41:14 180

原创 Java8之Optional

Optional类是为了避免空指针异常的发生其中有三种创建Optional实例的方法,我们接下来进行分别介绍第一种方法 ---- empty (静态方法)源码: // 静态方法,可以使用类名直接使用。 // 返回一个空的Optional实例。 public static<T> Optional<T> empty() { @SuppressWarn...

2020-01-12 12:01:47 316

原创 Java8之Supplier、BinaryOperator

今天我学习了Java8的新的函数式接口—Supplier、BinaryOperator;接下来,我们来一个一个的分析它们的源码。Supplier 源码分析顾名思义,Supplier的意思是供应商、提供者的意思。// 其中官方文档的意思是:// 1.每次调用Supplier的时候不要求返回新的或者不同的值;// 2.T 泛型代表的是 该供应商提供的结果类型,也是说他是不接收参数,// 并...

2020-01-07 23:39:48 326

原创 Java8之Predicate

函数式接口-----Predicate之前的一篇文章,我分析了函数式接口------Function,现在我们继续分析第二个函数式接口------Predicate。这是一个断言式的函数式接口,返回的是一个boolean值,用于进行判断行为与参数是否相符。Java8Stream中的filter使用的就是此函数式接口。下面我将分别列举出它所包含的方法和使用例子。第一个方法 ------- t...

2020-01-02 23:02:02 408

原创 Java8之Function函数(包括BiFunction)

众所周知,Java8提供了一下非常重要的函数式接口。今天我们就来讲讲其中一个函数式接口-----Function接口。下面的代码就是Function接口的全部代码。接下来我们逐个分析一下。@FunctionalInterfacepublic interface Function<T, R>@FunctionalInterface 表明该接口是一个函数式接口<T, ...

2019-12-26 10:26:44 1669

原创 Java8之Lambda(概念)

什么是函数式接口定义:如果一个接口中只有一个抽象方法,那么Java编译器会默认该接口是函数式接口。解释一下上面的话,什么情况下才是接口中只有一个抽象方法,因为在Java中,Object是所有类的父类,所以当一个接口复写了Object类中的抽象方法,Java编译器并不会将该抽象方法算在该接口中,也就是说,接口中的抽象方法并不会增加一个。函数式接口的情况如果我们在某个接口上声明了Functi...

2019-12-25 10:54:31 116

原创 ArrayList 源码分析

ArrayList 分析本人是基于Java8分析的。其实我认为ArrayList分为两步分析,第一步是分析它的构造方法,它的构造方法其实挺有意思的,一会慢慢讲,第二步就是分析它的Add方法,当然了,还有其他方法也会看看的,但是主要的还是Add方法ArrayList 底层使用的是动态数组,是连续的内存空间,对于数据的查询比较快。对于插入和删除需要移动内存,所以比较慢。它是线程不安全的。属性 ...

2019-12-23 09:20:16 67

原创 JVM 类加载器

Java中的类加载器分为两种,一种Java 自带的类加载器,另一种是用户自定义的类加载器Java自带的类加载器分为三种一、启动类加载器(根类加载器)负责加载:$JAVA_HOME 中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类,所以启动类加载器没有父类加载器,它的父类加载器为null。但是它是扩展类加载器和应用类加载器(系统类加载器)的父类二...

2019-12-17 22:07:05 67

原创 Java类的加载过程

Java虚拟机的类加载定义:将类的 .class文件中的二进制数据放到内存中,将其放在运行时数据区的方法区中。一、过程:Java中类加载分为三个过程,分别是加载、连接、解析。加载:查找并加载类的二进制数据连接:分为三个步骤,分别为验证、准备、初始化验证:确保被加载的类的正确性准备:为类的静态变量分配内存,并设置默认值解析:将类中的符号引用(例如一个方法名)转换为直接引用(指针地...

2019-12-11 20:18:41 64

MySQL 重点分析 (仅仅是自己认为的重点--适用于初学者)

通过自己的学习,编辑了脑图,图中有自己认为的重要的知识点,仅供参考。

2021-08-16

空空如也

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

TA关注的人

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