
java
文章平均质量分 78
要有价值
这个作者很懒,什么都没留下…
展开
-
Collector原理解析
collect函数式编程原理解析原创 2022-07-20 17:22:46 · 810 阅读 · 1 评论 -
MVCC原理
事务的4个隔离级别读未提交读已提交可重复读串行化什么是脏读简单说,读了一条未提交的数据什么是不可重复读?一个事务读取了另外一个事务修改后记录 强调的是 update 和delete ,只需要锁住满足条件的记录即可什么是幻读一个事务读取了另外一个事务插入的数据,强调的是 insert ,要锁住满足条件及相近的记录。备注:幻读是因为update的操作的where是属于当前读,所以与快照读无关,从而导致了update修改的数据的版本号也被更新为了当前的版本号(可能存在低的事原创 2022-01-24 11:47:09 · 358 阅读 · 0 评论 -
线上问题如何排查
磁盘空间不足问题先用 df -h 从总体查看磁盘状态文件系统 容量 已用 可用 已用% 挂载点devtmpfs 1.9G 4.0K 1.9G 1% /devtmpfs 1.9G 24K 1.9G 1% /dev/shmtmpfs 1.9G 740K 1.9G 1% /runtmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup/dev/vd原创 2022-01-18 19:23:24 · 943 阅读 · 0 评论 -
把线程池扒个底朝天
这节分享Java线程池,接下来我们一步步把线程池扒个底朝天。引言:老三取钱有一个程序员,他的名字叫老三。老三兜里没有钱,匆匆银行业务办。这天起了一大早,银行姐姐说早安。老三一看柜台空,卡里五毛都取完。老三这天起的晚,营业窗口都排满。只好进入排队区,摸出手机等空闲。老三睡到上三杆,窗口排队都爆满。经理一看开新口,排队同志赶紧办。这天业务太火爆,柜台排队都用完。老三一看急上火,经理你说怎么办。经理挥手一笑间,这种场面已见惯。四种办法来处理,你猜我会怎么办。小小原创 2021-11-29 11:20:12 · 166 阅读 · 0 评论 -
String
String:字符串常量池作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池:字符串常量池的设计意图是什么?字符串常量池在哪里?如何操作字符串常量池?字符串常量池的设计思想字符串的分配,和其他的对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化原创 2021-08-10 11:05:49 · 130 阅读 · 0 评论 -
JavaWeb开发:jar包和war包区别和目录结构
Java开发:jar包和war包区别和目录结构,深入了解:1.jar包的介绍JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和原创 2021-06-22 11:20:27 · 2015 阅读 · 0 评论 -
@RequestBody()和RequestParam()的使用
@RequestBody()和RequestParam()的使用基础知识介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody()接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody()与@RequestParam()可以同时使用,@RequestBody()最多只能有一个,而@RequestParam()可以有多个。注: 一个请求原创 2021-05-28 17:59:47 · 841 阅读 · 0 评论 -
Spring Boot整合Swagger
前言不管Spring Boot整合还是SpringMVC整合Swagger都基本类似,重点就在于配置Swagger,它的精髓所在就在于配置。1、Swagger简介目前互联网时代前后端分离已成趋势,前后端混在一起,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发。解决方案就是前后端通过API进行交互达到相对独立且松耦合。Swagger就是这样的一个API框架,Swagger支持多种语言 如:Java,PHP等,它号称是世界上最流行的API框架!2、整合前可能遇到的问题1、导入好依赖原创 2021-05-24 16:11:13 · 573 阅读 · 2 评论 -
log4j2.xml参数详解
log4j2.0以后我们通常在log4j2.xml中配置相关参数,在配置的时候我们需要理解这些参数的具体含义,下面列出了这些参数的解释。1、Logger 完成日志信息的处理<logger name="com.srd.ljzd" level="INFO" additivity="true"> <appender-ref ref="INFO" /> <appender-ref ref="WARN" /> <appender-ref ref="原创 2021-05-19 11:35:25 · 2334 阅读 · 0 评论 -
SpringBoot中Filter的使用和原理
先把SpringBoot中filter的使用示例写出来,然后再解释下代码、说一下运行的顺序,最后讲一下filter的原理(其实就是责任链设计模式,从马士兵老师那里偷来的。。。) 要想使用filter,需要写一个方法继承Filter类,我们写如下两个自己的Filter类,首先是FirstFilter类,其中@Order里边的数字越小代表越先被该Filter过滤,@WebFilter代表这是个Filter类并把这个类注入到容器中:package com.example.executor_test.fi原创 2021-05-18 16:09:52 · 813 阅读 · 2 评论 -
Mybatis的执行流程
Mybatis的执行流程原创 2021-05-18 11:53:30 · 136 阅读 · 0 评论 -
图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)
图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode,高频面试题中。前言深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻原创 2021-04-09 11:04:14 · 32124 阅读 · 4 评论 -
Spring Boot:处理跨域
一、跨域背景1.1 何为跨域?Url的一般格式:协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址示例:https://www.dustyblog.cn:8080/say/Hello 是由https + www + dustyblog.cn + 8080 + say/Hello组成。只要协议,子域名,主域名,端口号这四项组成部分中有一项不同,就可以认为是不同的域,不同的域之间互相访问资源,就被称之为跨域。1.2 一次正常的请求Controller层代码:@RequestMa原创 2021-03-24 15:00:39 · 163 阅读 · 0 评论 -
Spring中AOP的实现原理
一、什么是 AOP ?AOP(Aspect-Oriented Programming,面向方面编程),对 OOP(Object-Oriented Programming,面向对象编程)【OOP与AOP】概念AOP(Aspect-Oriented Programming,面向方面编程)OOP(Object-Oriented Programming,面向对象编程)方向OOP 定义从上到下的关系AOP 定义从左到右的关系【两个部分】核心关注点业务处理的主要流程原创 2021-03-11 14:00:56 · 11057 阅读 · 2 评论 -
Spring中IOC的实现原理
Spring中IOC的实现原理学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http原创 2021-03-11 11:15:18 · 217 阅读 · 0 评论 -
动态代理的两种实现和优缺点
一、文章要点提前知二、动态代理的本质1、首先了解一下动态代理类对应的class文件是什么时候生成的?首先通过一张图了解一下Java源文件实例对象的一个简单的流程:2、动态代理的本质简述:通过一定的技术,省略源文件的编写,直接在运行期间,生成相应的Java字节码文件;三、JDK原生动态代理1、JDK原生动态代理中两个重要的小伙伴 a、Proxy:Proxy是所有动态代理的父类;它提供了一个静态的方法创建代理的Class对象来配置生成代理类Class文件的方法与参数,主要就是通过Prox原创 2021-03-10 17:57:01 · 559 阅读 · 0 评论 -
Servlet 运行工作原理详解
Servlet 运行工作原理详解事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBUouz5q-1614861128873)(C:\Users\ule_lee\Desktop\v2-85bf84640fbc6b6e195b9c5b513b918f_hd.png)]所以,提问中说的网络协议、原创 2021-03-04 20:32:40 · 1801 阅读 · 1 评论 -
四种常见的线程池
在Java中使用线程池,可以用ThreadPoolExecutor的构造函数直接创建出线程池实例。不过,在Executors类中,为我们提供了常用线程池的创建方法。接下来我们就来了解常用的四种:newFixedThreadPool首先,看一下这种线程池的创建方法:public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads转载 2021-03-04 16:40:38 · 5907 阅读 · 5 评论 -
红黑树的理解
写在前面当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在学习过程中也会存在我的疑问,那么本文对你会有帮助,本文帮助你全面、彻底地理解红黑树!本文将通过图文的方式讲解红黑树的知识点,并且不会涉及到任何代原创 2021-03-04 16:34:25 · 271 阅读 · 1 评论 -
Java四种引用类型
1.强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。2.软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。3.弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,原创 2021-03-03 17:30:19 · 112 阅读 · 2 评论 -
常见JVM虚拟机指令
常见JVM虚拟机指令1.基本常用指令解释new创建一个对象并将地址放入虚拟机栈dup复制一个对象地址放入虚拟机栈invokespecial用于调用私有方法及final方法,调用构造方法invokestatic用于调用静态方法invokeinterface用于调用接口方法checkcast确定对象为所给定的类型并强制类型转换putstatic设置类中静态字段的值getstatic从类中获取静态字段putfield设置对象原创 2021-03-03 17:26:21 · 195 阅读 · 1 评论 -
SimpleDateFormat的线程不安全问题
一、前言日期的转换与格式化在项目中应该是比较常用的了,最近同事小刚出去面试实在是没想到被 SimpleDateFormat 给摆了一道…面试官:项目中的日期转换怎么用的?SimpleDateFormat 用过吗?能说一下 SimpleDateFormat 线程安全问题吗,以及如何解决?同事小刚:用过的,平时就是在全局定义一个 static 的 SimpleDateFormat,然后在业务处理方法(controller)中直接使用,至于线程安全… 这个… 倒是没遇到过线程安全问题。哎,面试官的考察点真原创 2021-03-03 16:24:18 · 2421 阅读 · 2 评论 -
B树、B-树、B+树、B*树之间的关系
B树B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。特此说明。先介绍下二叉搜索树 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;原创 2021-03-02 17:41:26 · 198 阅读 · 0 评论 -
接口、抽象类的区别
1、基本语法区别Java中接口和抽象类的定义语法分别为interface与abstract关键字。抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:a、抽象类不能被实例化只能被继承;b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;d、一个子类继承一个抽象类,则子类必须实现父类抽象方原创 2021-02-23 10:29:22 · 167 阅读 · 0 评论 -
进程、程序、线程的本质区别
进程是什么?程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。有了进程为什么还要线程?进程有很多优点,它提供了多道编程,让原创 2021-02-22 10:54:49 · 435 阅读 · 0 评论 -
从Jvm的角度来看Java的多线程
为什么使用多线程,一直深入讲解到jvm底层的锁实现。多线程的目的为什么要使用多线程?可以简单的分两个方面来说:在多个cpu核心下,多线程的好处是显而易见的,不然多个cpu核心只跑一个线程其他的核心就都浪费了;即便不考虑多核心,在单核下,多线程也是有意义的,因为在一些操作,比如IO操作阻塞的时候,是不需要cpu参与的,这时候cpu就可以另开一个线程去做别的事情,等待IO操作完成再回到之前的线程继续执行即可。多线程带来的问题其实多线程根本的问题只有一个:线程间变量的共享java里的变量可以分3原创 2021-02-05 17:33:06 · 312 阅读 · 0 评论 -
JAVA 8 Stream的详细用法
一、概述Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。特点: 1 . 不是数据结构,不会保存数据。 2. 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟pe原创 2021-02-01 18:44:08 · 256 阅读 · 0 评论 -
java中equals以及==的用法(简单介绍)
java中equals以及==的用法(简单介绍)简单介绍equals方法是java.lang.Object类的方法有两种用法说明:一、对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性)2原创 2021-01-29 20:00:39 · 774 阅读 · 0 评论 -
Springboot时间监听机制
springboot进行事件监听有四种方式:1.手工向ApplicationContext中添加监听器2.将监听器装载入spring容器3.在application.properties中配置监听器4.通过@EventListener注解实现事件监听讲到事件监听,这里我们说下自定义事件和自定义监听器类的实现方式:自定义事件:继承自ApplicationEvent抽象类,然后定义自己的构造器自定义监听:实现ApplicationListener接口,然后实现onApplicationEvent方原创 2021-01-25 15:03:08 · 930 阅读 · 0 评论 -
线程池实现原理剖析
概要线程池,大家都很熟悉了,我们在平时应用中也用的很多。对线程池,ThreadPoolExecutor 的实现原理有一定理解后,我们可以把它用的更好,对它的参数有更加深刻的理解,甚至我们可以扩展,监控自己的线程池。ThreadPoolExecutor实现原理本文代码基于JDK1.8线程池相关的类的关系我们先看看主要的类ThreadPoolExecutor的继承关系平时可能还有用到的 Executors 类,这是一个工具类,提供 newFixedThreadPool newCachedThrea原创 2021-01-22 17:21:19 · 491 阅读 · 0 评论 -
一文彻底理解ReentrantLock可重入锁的使用
java除了使用关键字synchronized外,还可以使用ReentrantLock实现独占锁的功能。而且ReentrantLock相比synchronized而言功能更加丰富,使用起来更为灵活,也更适合复杂的并发场景。这篇文章主要是从使用的角度来分析一下ReentrantLock。一、简介ReentrantLock常常对比着synchronized来分析,我们先对比着来看然后再一点一点分析。(1)synchronized是独占锁,加锁和解锁的过程自动进行,易于操作,但不够灵活。ReentrantL原创 2021-01-22 17:15:46 · 234 阅读 · 0 评论 -
Lambda表达式与匿名内部类的区别分析
一、 匿名内部类匿名内部类其实就是没有名字的内部类,但是其必须要实现一个接口或者继承一个父类,通常是用来简化代码例程如下:先定义一个 IAnimalpublic interface IAnimal { void run(); void walk();}然后定义测试类 NestedClassTestpublic class NestedClassTest { public static void main(String[] args) { IAn原创 2021-01-22 11:30:45 · 216 阅读 · 0 评论 -
Lambda 表达式
1、Lambda 表达式简介Lambda 表达式是一种匿名函数(对 Java 而言这并不完全正确,但现在姑且这么认为),简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。你可以将其想做一种速记,在你需要使用某个方法的地方写上它。当某个方法只使用一次,而且定义很简短,使用这种速记替代之尤其有效,这样,你就不必在类中费力写声明与方法了。Java 中的 Lambda 表达式通常使用 (argument) -> (body) 语法书写,例如:(arg1, arg2...) ->原创 2021-01-21 20:55:58 · 225 阅读 · 0 评论 -
Redis简单入门(java)
Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案。Redis官方网网站是:http://www.redis.io/,如下:Redis 有三个主要使其有别于其它很多竞争对手的特点:Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的;Redis相比许多键值数据存储系统有相对丰富的数据类型;Redis可以将数据复制到任意数量的从服务器中;Redis优点异常快速 : Redis是非常快的,每秒可以执行大约1100原创 2021-01-20 14:24:47 · 162 阅读 · 0 评论 -
Spring Boot 微框架
Spring Boot 微框架1. springboot的引言Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不 再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应 用开发领域(rapid application development)成为领导者。springboot(微框架) = springmvc(控制器) + spring(项目管理)原创 2021-01-18 13:52:23 · 167 阅读 · 0 评论 -
布隆过滤器(Bloom Filter)
原创 2021-01-15 12:49:35 · 144 阅读 · 0 评论 -
Java生成随机数Math.random()和new Random().nextInt(),new Random().nextDouble()效率问题
一般都使用Math.random()*100来生成随机整数,最近通过静态代码缺陷检查工具发现了一种新的方式–new Random().nextInt();据网上资料说,使用new Random().nextInt(100)生成的随机数效率高于后者,时间上前者大约是后者50%到80%的时间.查看Math.random()方法底层代码:public final class Math { //Math的random()方法实质上就是调用Random类对象的nextDouble()方法来实现的原创 2021-01-15 12:46:48 · 1258 阅读 · 0 评论 -
pom中parent和dependency区别以及dependencyManagement区别
在大多数分层项目中经常会遇到相互依赖的问题,B项目依赖A项目,C也依赖A项目,这时候用dependency还是用parent呢?这两者是有区别的:下面做一个测试,A项目作为一个公共项目,被B项目和C项目所依赖,B以parent的方式,C以dependency的形式。在A项目创建一个类,添加一个方法,然后分别在项目B、C中写测试方法,调用A项目类中的方法。项目A添加一个自己写的类TestUtilimport org.apache.commons.lang3.StringUtils;/** *原创 2021-01-07 21:11:41 · 1205 阅读 · 0 评论 -
Java序列化ID的作用
序列化ID的作用:其实,这个序列化ID起着关键的作用,它决定着是否能够成功反序列化!简单来说,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。序列化ID如何产生:当我们一个实体类中没有显示的定义一个名为“serialVersionUID”、类原创 2021-01-05 14:27:02 · 1353 阅读 · 0 评论 -
java的序列化是干什么的
java的序列化究竟是干什么的?我们知道,java是跨平台语言,为什么跨平台?是因为java程序编译后是class文件,class文件最终被java虚拟机解析成字节码文件,可以运行在任何平台上。对应的,如果我们想要在网络上进行文字传输,或者想要将程序内存中的对象写入到硬盘,可以用任何的虚拟机进行解析读取。也需要一个共同识别的方式,字节码!!!而我们的java序列化就是将java内存中对象属性的值进行字节码转换。Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处原创 2021-01-05 13:55:12 · 487 阅读 · 2 评论