- 博客(38)
- 收藏
- 关注
原创 【PostgreSQL & OpenGauss 】数据库查询表锁,释放表锁
在数据库中,表锁是用于控制对表的并发访问的一种机制。不同的数据库系统(如 PostgreSQL 和 OpenGauss)可能具有不同的表锁管理机制。下面分别介绍如何在 PostgreSQL 和 OpenGauss 中查询和释放表锁。
2024-01-26 16:01:44
1747
原创 结构型 - 装饰(Decorator)
装饰者模式(decorator pattern): 动态地将责任附加到对象上, 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案。
2024-01-22 11:37:26
402
原创 【Java IO】设计模式 (装饰者模式)
Java I/O 使用了装饰者模式来实现。装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其
2024-01-22 11:26:12
707
原创 【Java IO分类】从传输方式和数据操作上理解 Java IO分类
Java 使用双字节编码 UTF-16be,这不是指 Java 只支持这一种编码方式,而是说 char 这种类型使用 UTF-16be 进行编码。char 类型占 16 位,也就是两个字节,Java 使用这种双字节编码是为了让一个中文或者一个英文都能使用一个 char 来存储。UTF-16be 中的 be 指的是 Big Endian,也就是大端。相应地也有 UTF-16le,le 指的是 Little Endian,也就是小端。简而言之,字节是给计算机看的,字符才是给人看的。
2024-01-15 16:34:39
971
1
原创 JVM内存奥秘:2万字深度解析,让你彻底掌握内存结构!
通过下面两个问题,理解下PC计数器使用PC寄存器存储字节码指令地址有什么用呢?为什么使用PC寄存器记录当前线程的执行地址呢?因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令。PC寄存器为什么会被设定为线程私有的?多线程在一个特定的时间段内只会执行其中某一个线程方法,CPU会不停的做任务切换,这样必然会导致经常中断或恢复。
2024-01-14 14:08:29
1312
原创 揭秘HTTP协议:深入了解互联网通信的核心!
HTTP 协议是用于客户端和服务端之间的通信,除此之外还有 TCP/IP 协议族在内的众多协议,请求文本资源的一方,我们称之为客户端(client),接收请求并提供相应的一方称为服务端(Server)每个TCP 连接智能发送一个请求,发送数据完毕后,连接就关闭了,HTTP 是一种不保存状态,无状态协议,协议对于发送过来的请求或是响应都不做持久化处理。有时候,客户端和服务端身份是可以互换的,单就一条通信线路来讲,可以确定的是,由HTTP协议就可以区分谁是客户端谁是服务端。消息主体是响应消息的承载数据。
2024-01-12 21:57:31
959
原创 终极Linux命令宝典:从入门到精通,一网打尽!
vmstat报告有关进程,内存,页面调度,块IO,陷阱,磁盘和cpu活动的信息。free显示系统中可用和可用的物理内存和交换内存的总量,以及内核使用的缓冲区和高速缓存。top程序提供正在运行的系统的动态实时视图。它可以显示系统摘要信息以及Linux内核当前正在管理的进程或线程的列表。所显示的系统摘要信息的类型以及为进程显示的信息的类型,顺序和大小都是用户可配置的,并且可以使配置在重新启动后保持不变。该程序为流程操作提供了一个有限的交互式界面,并为个人配置提供了更为广泛的界面-涵盖了其操作的各个方面。
2024-01-12 21:43:38
927
原创 揭秘大厂Linux面试通关秘诀:锁定这5大核心问题,offer不请自来!
如果是单核Cpu的话,负载达到1就代表 CPU 已经达到了满负荷的状态,超过1后,后面的进行就要排队等待处理了,如果是多核多CPU的话,假设现在的服务器是2个CPU 每个 CPU 有2个线程,那么总负载不超过4都没有问题。假设那么公司厕所有1个坑位,有一个占了一个坑位,这时负载就是1,如果还有一个人在排队,那么负载就是2了,如果1小时内,A上厕所花了10分钟,B上厕所花了20分钟,剩下30分钟厕所都没人用,那么这1个小时利用率就是50%两种可能,他没带纸,或者一些奇怪的事情发生了。命令,打包并且压缩。
2024-01-11 23:27:54
796
原创 【HashMap】结构和底层原理
HashMap 是我们非常常用到数据结构,由数组和链表构成的数据结构,数组里面每个地方都存了 key-value 这样的实例,在Java7叫 Entry 在 Java8 中叫 Node
2024-01-11 11:00:52
918
原创 【详解】Java集合框架
一般的队列都是 FIFO(先进先出)但是又个例外,PriorityQueue 也叫 heap,并不是按照进去的时间顺序,而是按照规定的优先级出去,这个的算法就有点复杂了。: 这个是一个 HashSet + LinkedList 的结构,特点就是既拥有了 O(1) 的时间复杂度,又能够保留插入的顺序。,那如果已经达到了它最大的容量且不会扩容的,就会抛异常;: 采用 Hashmap 的 key 来储存元素,主要特点是无序的,基本操作都是 O(1) 的时间复杂度,很快。如果一个资深面试官问你,什么情况下选用。
2024-01-10 19:07:57
1196
原创 【JVM 基础】类字节码详解
源代码通过编译器编译为字节码计算机是不能直接运行java代码的,必须要先运行java虚拟机,再由java虚拟机运行编译后的java代码。这个编译后的java代码,就是本文要介绍的java字节码。为什么jvm不能直接运行java代码呢,这是因为在cpu层面看来计算机中所有的操作都是一个个指令的运行汇集而成的,java是高级语言,只有人类才能理解其逻辑,计算机是无法识别的,所以java代码必须要先编译成字节码文件,jvm才能正确识别代码转换后的指令并将其运行。
2024-01-10 18:20:09
964
原创 互斥、自旋、读写锁的应用场景
开发过程中,最常见的就是互斥锁的了,互斥锁加锁失败时,会用「线程切换」来应对,当加锁失败的线程再次加锁成功后的这一过程,会有两次线程上下文切换的成本,性能损耗比较大。如果我们明确知道被锁住的代码的执行时间很短,那我们应该选择开销比较小的自旋锁,因为自旋锁加锁失败时,并不会主动产生线程切换,而是一直忙等待,直到获取到锁,那么如果被锁住的代码执行时间很短,那这个忙等待的时间相对应也很短。如果能区分读操作和写操作的场景,那读写锁就更合适了,它允许多个读线程可以同时持有读锁,提高了读的并发性。
2024-01-09 21:41:49
1013
原创 【JVM 基础】 Java 类加载机制
通常情况下,我们都是直接使用系统类加载器。但是,有的时候,我们也需要自定义类加载器。比如应用是通过网络来传输 Java 类的字节码,为保证安全性,这些字节码经过了加密处理,这时系统类加载器就无法对其进行加载,这样则需要自定义类加载器来实现。自定义类加载器一般都是继承自 ClassLoader 类,从上面对 loadClass 方法来分析来看,我们只需要重写 findClass 方法即可。try {
2024-01-09 21:30:02
2000
原创 技术总监写的十个方法,让我精通了lambda表达式
前公司的技术总监写了工具类,对Java Stream 进行二次封装,使用起来非常爽,全公司都在用。我自己照着写了一遍,改了名字,分享给大家。一共整理了10个工具方法,可以满足 Collection、List、Set、Map 之间各种类型转化。例如ListSetListSet(v)->{}Collection。
2024-01-08 20:02:28
985
原创 SpringBoot项目如何防止反编译?
此方案比对上面的方案来说,就简单了许多。在单模块中此方案还算简单,但是现在项目一般都是多模块,一个模块依赖多个公共模块。那么使用此方案就比较麻烦,配置复杂,文档难懂,各模块之间的调用在是否混淆时极其容易出错。只需要在启动类的pom.xml文件中加如下插件即可,需要注意的是,改插件时要放到spring-boot-maven-plugin插件后面,否则不起作用。将此生成好的机器码,放到maven插件中的code里面即可。这样,打包好的项目只能在生成机器码的机器运行,其他机器则启动不了项目。
2024-01-08 17:27:07
1491
原创 Springboot支付宝沙箱支付(完整详细步骤)
两种方式进行配置。这里我采取的是默认方式: 开发者如需使用系统默认密钥/证书,可在开发信息中选择系统默认密钥。注意:使用API在线调试工具调试OpenAPI必须使用系统默认密钥。
2024-01-06 19:45:12
1485
2
原创 isEmpty 和 isBlank 的用法区别,居然一半的人答不上来.....
也许你两个都不知道,也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外,并不知道还有isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank的存在, come on ,让我们一起来探索org.apache.commons.lang3.StringUtils;这个工具类.
2024-01-05 18:56:06
946
原创 还在用 System.currentTimeMillis() 统计代码耗时?太 Low 啦
有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,然后这样如果执行大量测试的话就很麻烦,并且不直观,如果想对执行的时间做进一步控制,则需要在程序中很多地方修改,目前spring-framework提供了一个StopWatch类可以做类似任务执行时间控制,也就是封装了一个对开始时间,结束时间记录工具
2024-01-05 18:00:48
483
原创 2024最新Java基础面试题大全(六)
定义:浏览器-服务器(Browser/Server)结构,简称B/S结构。是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。
2023-12-31 23:24:00
954
原创 2024最新Java基础面试题大全(五)
在MVC里,View是可以直接访问Model的!作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。这两个关键字都是在继承关系中才会出现的,Super .变量,会在直接去父类中查找,this.变量,优先在本类中查找,没找到的话,会去父类中查找。
2023-12-31 22:04:16
985
原创 面试奇谈(一)
团队越大,代码就越发的健壮。作为一名开发工程师,以我目前的能力,不具备开发高性能的框架,开源项目,是我学习的很大渠道之一。数据库有MySQL,操作系统有Linux,Apache基金会的开源项目也都是开源的,Zookeeper Hadoop solr等。最后去看官网文档,官方文档无疑是最正确的学习方式,但也是最枯燥的。良好的框架,会有一篇好的官方API、比如 Vue、Layui、Mybatis的官方API 就解释的非常细致。时间很宝贵,因为稀少,我们才要以最少的时间完成更多的事情,这就牵扯到效率。
2023-12-31 21:53:03
450
原创 2024最新Java基础面试题大全(四)
1 RPC要求服务提供方和服务调用方都需要使用相同的技术,要么都hessian,要么都dubbo 而http无需关注语言的实现,只需要遵循rest规范2 RPC的开发要求较多,像Hessian框架还需要服务器提供完整的接口代码(包名.类名.方法名必须完全一致),否则客户端无法运行3 Hessian只支持POST请求4 Hessian只支持JAVA语言。
2023-12-31 21:41:30
949
原创 2024最新Java基础面试题大全(三)
这三个注解写在 public @interface 修饰的类上,这个类就是一个注解了里面可以设置成员变量,成员变量就是注解的属性。
2023-12-31 21:35:59
887
原创 2024最新Java基础面试题大全(二)
凡是new出来的,GC 都能搞定,所以一般不需要程序员去主动实现 finalize的,调用 super.finalize(),一个对象的 finalize()只会被调用一次,调用后不意味着 gc 会立即回收。构造方法不可以被重写,因为重写发生在父类和子类之间,要求方法名称相同,而构造方法的名称是和类名相同的,而子类类名不会和父类类名相同,所以不可以被重写。封装:万物皆对象,把相同类似的属性认为是一个类,不同的属性分别是不同的成员变量,不能从外部直接修改成员变量,可以同构造器,操作类,减少代码量,
2023-12-31 21:31:29
871
原创 2024最新Java基础面试题大全(一)
/创建等待队列 BlockingQueue < Runnable > bqueue = new ArrayBlockingQueue < Runnable >(20);//创建线程池,池中保存的线程数为3,允许的最大线程数为5 ThreadPoolExecutor pool = new ThreadPoolExecutor(3 , 5 , 50 , TimeUnit . MILLISECONDS , bqueue);//创建七个任务 Runnable t1 = new MyThread();
2023-12-31 21:13:02
1173
原创 MySQL 四种隔离级别
事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。编者按:一系列相关的操作,要么全部成功,要么全部不执行。事务的结束有两种,当事务中的所有步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消之前到事务开始时的所有操作。另外,这篇分布式事务不理解?一次给你讲清楚!推荐大家阅读。
2023-12-31 20:49:58
891
原创 【Git 强制推送到远程仓库,且覆盖远程代码库】
现在,你已经成功将本地分支强制推送到了远程仓库,并覆盖了原始的远程代码库内容。命令来强制推送本地分支到远程仓库,且覆盖远程代码库。强制推送会覆盖远程仓库上的任何更改,因此务必小心使用。建议在执行强制推送之前,先确认没有需要保存的工作。首先确保当前所在目录为本地 Git 仓库。命令来获取最新的远程更改。
2023-12-31 20:40:31
2546
原创 Linux 环境变量配置的 6 种方法,记得收藏
该方法修改系统配置,需要管理员权限或者对该文件的写入权限,和。变量定义了运行命令的查找路径,以冒号。定义的时候可加双引号也可不加。这两个命令执行的效果如下。分割不同的路径,使用。通过修改用户目录下的。
2023-12-31 20:35:58
547
原创 【彻底理解 同步 异步 阻塞 非阻塞】
在操作系统中,程序运行的空间分为内核空间和用户空间。应用程序都是运行在用户空间的,所以它们能操作的数据也都在用户空间。阻塞IO和非阻塞IO的区别在于第一步发起IO请求是否会被阻塞:如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO。
2023-12-31 20:24:37
359
原创 1亿条数据批量插入MySQL该如何优化?
能够看到,在开启事务下 JDBC直接处理 和 JDBC批处理 均耗时更短。Mybatis 轻量级框架插入 , mybatis在我这次实验被黑的可惨了,哈哈。实际开启事务以后,差距不会这么大(差距10倍)。大家有兴趣的可以接着去测试JDBC直接处理,在本次实验,开启事务和关闭事务,耗时差距5倍左右,并且这个倍数会随着数据量的增大而增大。因为在未开启事务时,更新10000条数据,就得访问数据库10000次。导致每次操作都需要操作一次数据库。
2023-12-30 16:21:11
924
原创 一起来看看Solr全量更新和增量更新的那些事
Solr全量更新和增量更新1.背景2. 概述3.同步方式3.1 全量3.2 增量3.2.1.首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties 、data-config.xml里面的数据3.2.2.数据库配置注意事项3.2.3.dataimporter.properties3.2.4.增量更新就是在全量更新的基础上加上一些配置,data-config.xml配置如下:3.2.5.通过后台管理手动增量更新和通过浏览器手动更新3.3.1 确定更新点1.背景数据如果
2020-08-27 21:46:42
764
1
原创 带你深入了解数据库三大范式
深入了解数据库三大范式什么是范式?第一范式条件:必须不包含重复组的关系,即每一列都是不可拆分的原子项。第二范式条件:关系模式必须满足第一范式,并且所有非主属性都完全依赖于主码。注意,符合第二范式的关系模型可能还存在数据冗余、更新异常等问题。第三范式的条件:关系模型满足第二范式,所有非主属性对任何候选关键字都不存在传递依赖。即每个属性都跟主键有直接关系而不是间接关系,像:a-->b-->c。一般数据库设计中,一般要求达到3NF,第四第五较少涉及。什么是范式?当一个关系中的所有分类都是不可再分的
2020-08-27 19:02:35
1712
原创 【十分钟入门Solr搜索引擎】从新手到高手的快速指南!
Solr搜索引擎一、什么是Solr?二 、数据库本身就支持搜索啊,干嘛还要搞个什么solr?三、如果我们想要使用solr那么首先我们得安装它2.solr官网3.解压后打开solr文件夹进bin目录,在地址框输入cmd 回车 此时弹出命令行4.输入solr.cmd start 命令开启solr服务5.看到下面这个界面说明solr安装成功啦!6.创建 **code** 核心并添加 **conf** 配置文件7.重启服务8.显示以下界面表示核心创建成功啦!9.一起来试试吧!10.查询成功一、什么是Solr?其
2020-08-25 09:43:16
8092
2
原创 实用小工具——SpringBoot整合Swagger
SpringBoot整合SwaggerSpringBoot整合SwaggerAPI详细说明SpringBoot整合Swagger前后端分离后,维护接口文档基本上是必不可少的工作。一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了。当然这是一种非常理想的状态,实际开发中却很少遇到这样的情况,接口总是在不断的变化之中,有变化就要去维护,做过的小伙伴都知道这件事有多么头大!还好,有一些工具可以减轻我们的工作量,Swagger2就是其中之一。API详细说
2020-08-23 22:29:20
157
原创 IntelliJ Idea 注释模板
IntelliJ Idea 注释模板IntelliJ Idea 添加类文件注释1.第一步 File ——>Settings——>Editor——>Life and Code TemplatesIntelliJ Idea 添加函数注释模板1.第一步 File ——>Settings——>Editor——>Life Templates2.添加函数注释模板3.点击Edit variables设置表达式和默认值4.添加完成 输入 \ ** 按TAB键(效果图)IntelliJ
2020-07-18 11:26:07
444
1
原创 IntelliJ Idea 恢复安装时初始状态
PS: 我的版本是.IntelliJIdea2019.3(举一反三)你是什么版本就选择对应文件。删除:“C:\Users\User”下的 ".IntelliJIdea2019.3"文件夹。使 IntelliJ Idea 恢复安装时的初始状态。注意:此过程会导致IntelliJ Idea重新激活。希望以上方法可以帮到您,祝您学习愉快!一个在互联网摸爬滚打的工具人 😛。好了到这我们的教程也结束了 😉。每次出现了各种各样的问题后。给大家分享一个新的解决办法。很多伙伴会选择重新安装。
2020-07-17 23:12:05
5319
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人