自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

njitzyd

njitzyd的博客

  • 博客(150)
  • 资源 (6)
  • 收藏
  • 关注

原创 关于JDK8中的字符串常量池和String.intern()方法理解

JDK8中的字符串常量池以及String.intern()具体做了什么事情,以及和字符串常量池的联系的解析以及原理思考

2022-11-23 21:59:38 607

原创 Java并行流Parallel Stream与Fork-Join线程池

Fork-JoinParallel Stream实现任务的切分,并将任务提交到全局的ForkJoinPool线程池中执行,注意,是全局的线程池。关于ForkJoinPool,我这里简单介绍下。在Fork-Join中,比如一个拥有4个线程的ForkJoinPool线程池,有一个任务队列,一个大的任务切分出的子任务会提交到线程池的任务队列中,4个线程从任务队列中获取任务执行,哪个线程执行的任务快,哪个线程执行的任务就多,只有队列中没有任务线程才是空闲的,这就是工作窃取。可以这样理解工作窃取,比如有4个人干

2021-08-22 23:53:32 4258 1

原创 Java中的线程池

1.线程池原理有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。使用线程池主要为了解决一下几个问题:通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。线程池的构图如下:整体的执行流程如下:当正在运行的线程小于corePoolSize,线程池会

2021-08-19 21:30:35 389

原创 阿里云短信服务实战

短信验证码功能是一个很常用的功能,而且操作也不难,下面实操看看如何进行短信服务实战。个人只能在阿里云使用一个短信验证的功能,但足够了登录阿里云后,点击头像下的AccessKey 管理点击后会出现提示信息这里会有一个所有权限的账户,为了安全我们点击使用子账户创建子账户选择子账户之后,会来到创建用户的界面可以根据提示快速创建用户,在选择权限的地方我们选择只有短信服务。然后下载AccessKey创建用户组就像Linux中的用户组一样,我们可以创建用户组,然后把刚刚创建的用户添加到这

2020-11-03 23:48:04 562

原创 Java中的锁

Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文主要介绍了Java中的锁机制以及常用的锁的实现,以帮助工作中更好的运用。锁是jvm内置的锁,不同于锁。关键字可以修饰方法,也可以修饰代码块。关键字修饰方法时可以修饰静态方法,也可以修饰非静态方法;关键字可以修饰代码块。值得注意的是synchronized是一个对象锁,也就是它锁的是一个对象。因此,无论使用哪一种方法,synchronized都需要有一个锁对象。

2023-05-04 23:15:17 1337 1

原创 MySQL的count()函数

在面试的时候或者平时工作的时候,经常会遇到MySQL中的count()函数,本文就是主要学习并了解count()函数中的性能以及效率问题。count() 是一个聚合函数,函数的参数不仅可以是字段名,也可以是其他任意表达式,该函数作用是统计符合查询条件的记录中,函数指定的参数不为 NULL 的记录有多少个。比如这条语句是统计「 t_order 表中,name 字段不为 NULL 的记录」有多少个。也就是说,如果某一条记录中的 name 字段的值为 NULL,则就不会被统计进去。

2023-04-24 22:39:30 1615

原创 MySQL的隐式类型转换

在MySQL中:当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。则会发生转换隐式也就是说,MySQL会根据需要自动将数字转换为字符串,将字符串转换数字。避免发生隐式类型转换,隐式转换的类型主要有字段类型不一致、in 参数包含多个类型、字符集类型或校对规则不一致等隐式类型转换可能导致无法使用索引、查询结果不准确等,因此在使用时必须仔细甄别数字类型的建议在字段定义时就定义为 int 或者 bigint,表关联时关联字段必须保持类型、字符集、校对规则都一致。

2023-03-16 21:29:21 1062

原创 Spring中BeanFactory FactoryBean和ObjectFactory的区别

BeanFactory和FactoryBean以及ObjectFactory

2023-01-15 16:48:02 651

原创 SpringBoot数据绑定

属性自动装配

2023-01-11 19:56:03 889

原创 Java中的四种引用类型

Java中四种引用类型

2023-01-01 17:34:15 3779 1

原创 GuavaCache学习三种过期策略的学习

基本介绍回收策略Guava Cache提供了三种清理或者刷新策略expireAfter

2022-11-06 21:06:57 3664

原创 Java基础之泛型

泛型

2022-07-31 21:45:26 127

原创 Spring中的@Autowired和@Resource注解对比

这是自定义标题简介简单对比相同点不同点@Autowired注解@Resource注解代码实战验证@Autowired验证@Resource验证简介@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,但是Spring支持该注解的注入。本文代码已经上传至 gitee简单对比相同点都能进行依赖注入,可以加到属性上也可以加到setter方法上。不同点@Autowired注解

2022-04-17 23:24:45 350

原创 Lombok注解的使用

1.简介lombok是一个编译级别的插件,它可以在项目编译的时候生成一些代码。通俗的说,lombok可以通过注解来标示生成getter settter等代码,简便我们的开发。2.使用2.1引入依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <v

2021-12-26 00:39:43 1582 1

原创 Java工具ObjectSizeCalculator获取对象内存占用

基本类型 长度 the size of an objectInt     4    16Short    2    16Long    8    24Byte    1    16Character 1    16Float    4    16Double   8    24在JDK1.8中可以采用ObjectSizeCalculator类来计算对象在内存中的大小import jdk.nashorn.internal.ir.debug.ObjectSizeCalculator;imp

2021-12-21 22:28:27 6383 1

转载 技术科普-OpenResty

OpenResty参考文档

2021-12-21 00:28:29 103

转载 技术科普-ectd

ectd介绍

2021-12-21 00:22:05 88

转载 Git Flow 工作流程

GitFlow工作流程参考

2021-12-21 00:17:26 258

原创 Java日期工具-Joda-Time和FastDateFormat

目录[toc]1.基本介绍Java自带日期格式化工具DateFormat ,但是DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中。如果你不这么做,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。因此,从日期、时间处理的所有实践来说,我强力推荐使用joda-time 库 或者使用Apache的 FastDateF

2021-12-19 19:37:57 1471

原创 不可变集合ImmutableMap

概述ImmutableMap 的作用就是:可以让java代码也能够创建一个对象常量映射,来保存一些常量映射的键值对。不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。为什么要用immutable对象?immutable对象有以下的优点: 1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 2.线程安全的:immutable对象在多线程下安全,没有竞态条件 3.不需要支持可变性, 可以尽量节省空间和时间的开销.

2021-12-13 22:00:52 481

原创 Java中的可变参数和数组参数

简介Java方法中的可变参数类型是一个非常重要的概念,有着非常广泛的应用。而可变参数和数组参数又有着很大的联系,下面我们看看这两者的对比以及平时如何使用。使用(注意 可变参数必须作为方法的最后一个形参才行)下面是可变参数的一个简单案例:public class TestVarArgus { public static void dealArray(int... intArray) { for (int i : intArray) { System.

2021-12-12 19:37:46 1738 1

转载 Java中的 WeekHashMap(强引用、弱引用、软引用等)

转载自:java中的weekHashMap弱引用

2021-12-06 21:55:52 295

转载 理解Spring容器、BeanFactory和ApplicationContext

理解Spring容器、BeanFactory和ApplicationContext

2021-11-22 21:33:45 97

原创 Spring 和 Spring MVC的关系

Spring框架中有很多概念,本文主要是区分一些容易混淆的概念,更方便的去理解和学习Spring框架。Spring和Spring MVC的关系SpringSpring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。简单点的话可以将SpringMVC类比于Struts。Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,spring mvc是其中一个开源项目,所以简单走个流程的话,htt

2021-11-21 21:19:03 1702

原创 Filter和Interceptor的对比

问题引入在开发过程中需要对某些接口进行鉴权,一开始的想法是写个Filter,然后拦截指定的路径,通过获取header中的信息进行鉴权,没有权限则抛出自定义异常,然后自定义全局异常处理器再去拦截。程序测试时发现,没权限时确实被拦截了,但是并没有进入到全局异常处理器,而是直接抛出500。通过查找发现,Filter的在进入Servlet之前进行拦截的,而全局异常是SpringBoot中的(本质是Servlet),所以全局异常处理并不能拦截到Filter抛出的异常。基本概念 与这个相关的一些概念如下:1、

2021-11-17 00:59:39 988

转载 Linux curl命令详解

Linux curl命令详解Linux curl命令

2021-11-15 23:20:06 90

转载 zk的 paxos算法和zab协议

分布式系统 协议

2021-11-14 15:26:16 144

原创 反射修改static final

之前认为static final的变量是不可改变的,通过反射也是无法修改的,但是这个变量并不是不可以改变的,这里先给出结论:被static final修饰的 基本数据类型和String是无法通过反射进行修改的,但是其他类型(比如基本类型的包装类)则是可以通过反射改变。演示代码private static void setFinalStatic(Field field, Object newValue) throws NoSuchFieldException, IllegalAccessExceptio

2021-11-14 14:48:49 2696

原创 Java对象和Map互相转换-BeanMap

引入在开发的时候会遇到这种场景,把一个java对象转换成一个Map,转换的方法有很多比如下面:1、通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个bean,就需要12秒!!!不推荐使用2、通过java反射,获取bean类的属性和值,再转换到map对应的键值对中,这种方法次之,但稍微有点麻烦3、通过Spring框架中的BeanMap类中的方法,比较方便。(本文介绍)代码案例有时候比如我们通过HttpCli

2021-11-14 00:09:08 1021

原创 AOP-面向切面编程

1.简介1.1定义这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。1.2理解AOP面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。但是人们也发现,在分散代码的同时,也增加了代码的重

2021-11-13 17:46:04 491

原创 return,break,continue 区别

return 会直接另函数返回,函数就运行结束了,所有该函数体内的代码都不再执行了,所以该函数体内的循环也不可能再继续运行。如果你需要让循环继续执行,就不能return函数,而应该选用break或者continue。break:跳出所在的当前整个循环,到外层代码继续执行。continue:跳出本次循环,从下一个迭代继续运行循环。return:直接返回函数,所有该函数体内的代码(包括循环体)都不会再执行。...

2021-11-09 23:15:42 50

转载 深入理解 Java的SPI机制

深入理解SPI机制

2021-09-01 23:31:28 75

原创 Spring中@Async注解的使用

简介Spring中用@Async注解标记的方法,称为异步方法,它会在调用方的当前线程之外的独立的线程中执行,其实就相当于我们自己new Thread(()-> System.out.println("hello world !"))这样在另一个线程中去执行相应的业务逻辑。本篇先只讲@Async的使用,后面会分析它实现原理。 @Async注解使用条件:@Async注解一般用在类的方法上,如果用在类上,那么这个类所有的方法都是异步执行的;所使用的@Async注解方法的类对象应

2021-08-28 23:03:40 434

原创 Java中定时任务ScheduledThreadPoolExecutor、Timer、@Scheduled和Quartz

1.简介 在实际应用中,有时候我们需要创建一些个延迟的、并具有周期性的任务,比如,我们希望当我们的程序启动后每隔1小时就去做一次日志记录、每天凌晨12点去清理一下数据库中的过期数据等。在JDK中提供了两种方法去创建延迟周期性任务。分别是ScheduledThreadPoolExecutor和Timer。另外还有一个开源的更加强大的任务调度框架Quartz。下面我们来具体认识这三个框架。2.TimerTimer的主要方法有:// 安排在指定的时间执行void schedule(TimerTask t

2021-08-27 00:21:29 1792

转载 并发容器-ConcurrentLinkedQueue详解

转载自:并发容器-ConcurrentLinketQueue

2021-08-23 23:12:28 98

原创 java对象间的关系映射工具-mapstruct的使用

<h2 id="1前言">1.前言</h2><p>在现在一个多模块的系统中,随着系统的不断迭代,导致各个系统之间的model 不断地增多。如DTO VO BO 等多个对象之间的属性拷贝就是一个不小的

2021-07-06 23:29:00 514

原创 分页助手PageHelper的使用

分页助手PageHelper的使用简介pagehelper是一个很好用的mybatis的分页插件,通过这个插件可以非常方便的实现分页功能。官网地址使用这个插件的使用方式非常简单。引入依赖新建一个springboot项目,添加以下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</ar

2021-02-22 22:01:13 265

原创 Java中 volatile的使用和理解

简介Volatile 是 Java 虚拟机提供轻量级的同步机制。它有三个特性:保证可见性不保证原子性禁止指令重排基本原理当对非volatile变量进行读写的时候,每个线程先从主内存拷贝变量到CPU缓存中,如果计算机有多个CPU,每个线程可能在不同的CPU上被处理,这意味着每个线程可以拷贝到不同的CPU cache中。  volatile共享变量则会在修改之后立即刷新到内存中,并使其他CPU中的变量失效,使得其他CPU使用时必须从内存中重新加载。(这就保证了可见性)在volatile修饰

2021-01-31 19:15:24 263

原创 SpringBoot中@EventListener注解的使用

背景在开发工作中,会遇到一种场景,做完某一件事情以后,需要广播一些消息或者通知,告诉其他的模块进行一些事件处理,一般来说,可以一个一个发送请求去通知,但是有一种更好的方式,那就是事件监听,事件监听也是设计模式中 发布-订阅模式、观察者模式的一种实现。观察者模式:简单的来讲就是你在做事情的时候身边有人在盯着你,当你做的某一件事情是旁边观察的人感兴趣的事情的时候,他会根据这个事情做一些其他的事,但是盯着你看的人必须要到你这里来登记,否则你无法通知到他(或者说他没有资格来盯着你做事情)。对于 Spring

2021-01-26 22:39:22 22740 7

原创 多线程下建议使用while而不用if进行循环

在多线程操作中,我们常常会遇到需要先判断信号量状态是否就绪,然后执行后续操作的场景。这里对状态的判断使用的是while而不是单线程下常用的if。以下示例展示了一个简单的生产者-消费者模型:当队列满的时候,阻塞set;当队列为空的时候,阻塞get操作。public class EventStorage { private int maxSize; private List<Date> storage; public EventStorage(){ max

2021-01-24 19:08:58 581 1

yapi的Chrome插件

yapi的Chrome插件,只有安装插件才可以进行mock测试,特别好用,而且这个yapi可以在线测试,可以导入rap文档

2020-08-14

PicGo-Setup-2.2.2.exe.zip

PicGo是一个可以方便进行图床处理的软件,比如我们在使用typora进行Markdown格式的博客的书写时,图片只是存放在本地,通过使用图床可以让笔记在任何地方都可以看

2020-05-27

Editplus64位.rar

EditPlus安装包,解压即用,无需进行复杂的操作。EditPlus是一个非常强大的文件编辑器,他比其他相同功能的编辑器所占用的空间小

2020-05-26

SQLyog-10.0.0-01.zip

下载安装后就可以成功使用,完全免费,使用起来比Navicat好用。

2019-06-12

GlassFish5.0安装包

GlassFish是优秀的web服务器,性能比tomcat高很多,是oracle公司主推的免费开源的Web服务器

2019-03-29

空空如也

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

TA关注的人

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