java编程
文章平均质量分 86
记载java相关编程笔记
被子里
我的眼前不是未来,也不是风景,我的眼前只剩下你了
展开
-
最详细ChatGPT+AI绘画+企业知识库+视频去水印系统源码搭建流程,手把手教你搭建
这款源码搭载了强大的AI问答功能,是基于目前最强大AI大语言模型ChatGPT进行开发的Ai智能问答系统,并使用stablediffusion加最新的comfyui作为底层技术的绘画系统,使用comfyui的api接口,可以更灵活的定制自己的绘画工作流,支持sd v2.1、v1.5、xl全部模型。内置了知识库、支持上传csv格式的qa问答数据,使用milvus作为向量数据库,问答时可标注知识库内容!还可以一件对视频去水印,提取无水印视频、文案、音频,以及一件文案改写,简直是自媒体人的福音ai软件!原创 2023-11-12 10:12:12 · 911 阅读 · 0 评论 -
cpu高问题分析
1、什么是cpu高的问题?在实际的生产环境中,对程序的性能、占用的资源其实是很敏感的。在这个大环境下,如果某个进程占用的cpu异常的高,势必需要分析cpu高的原因、以及减少其cpu资源2、为什么会发生cpu高的问题?如果需要分析cpu高的原因,就需要对cpu高的原因,有一些初步的判断。一般可以概括为以下几种情况:代码中写死循环时,一直占用cpu 循环中不停的创建对象,也会导致GC频繁 System.currentTimeMillis() 采用这种方式去做计时,大概占用了10-20%cpu原创 2020-09-09 22:24:37 · 749 阅读 · 0 评论 -
Disruptor实战
前言作为一位开发者,我们经常会接触到“线程”一词,线程意味着并发,但是并发编程是比较困难的。在并发编程中,我们比较关心的就是线程安全问题,解决线程安全问题常用的方法是加锁,可以是乐观锁或者悲观锁,但是我们知道锁技术是很慢的,而且加锁的过程中还很容易出现死锁的现象。Disruptor很好的解决了这些问题。一、Disruptor究竟是什么Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题。与Kafka、RabbitMQ用于服务间的消息队列不同,disrup原创 2020-09-06 23:16:53 · 610 阅读 · 0 评论 -
Spring boot整合使用logback
一、前言Logback是由log4j创始人设计的又一个开源日记组件,Logback 当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块,logback-classic是log4j的一个改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Htt原创 2020-08-23 23:04:25 · 648 阅读 · 0 评论 -
结构型设计模式之适配器模式
1、什么是适配器模式?当一个类的接口,不满足客户端需要,需要进行拓展或者修改时,在保持原有接口的前提下,增加一个适配层,通过这个适配层,提供客户端需要的接口。2、为什么要使用适配器模式?把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。主的目的是兼容性。3、怎么使用适配器模式?3.1.首先介绍一下适配器模式的类型: 类的适配器模式 对象的适配器模式 3.2 类的适配器模式:核心思想:有一个Source类,拥.原创 2020-07-19 18:23:28 · 230 阅读 · 0 评论 -
JVM垃圾回收前篇 ————垃圾回收算法
消失的垃圾——垃圾回收算法JAVA和C++之间有一堵由内存动态分配和垃圾自动回收的高墙。正所谓,城里的人想出来,城外的人想进去,只因为这两种方式各有利弊。如果更好的使用java,需要我们了解java的垃圾回收机制。今天我们来聊一聊jvm的垃圾回收算法的思想。1、垃圾回收算法的分类:垃圾回收算法,从判定对象消亡的角度上面分类,可以分为“引用计数式垃圾收集”和“追踪式垃圾收集”。主流的java虚拟机用到的大部分都是“追踪式垃圾收集”。2、标记——清除算法:首先标记出所有需要回收的对象,.原创 2020-07-12 23:55:18 · 228 阅读 · 0 评论 -
pdman逆向数据中出现mysql保留字段的解决方案
pdman逆向数据中出现mysql保留字段在原本的数据库表中存在desc字段,我们在使用数据库备份的时候,一般都会给表名与字段名加上引号,如:-- ------------------------------ Table structure for lwt_game_groupitem-- ----------------------------DROP TABLE IF EXISTS `lwt_game_groupitem`;CREATE TABLE `lwt_game_groupitem`原创 2020-07-12 22:12:01 · 750 阅读 · 0 评论 -
常见数据校验规则
package com.test.easycheck;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 手机号的校验规则: * /^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$/ * * 邮箱的校验规则: * /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a.原创 2020-07-05 21:48:06 · 3917 阅读 · 0 评论 -
CMS收集器日志分析
1、GC日志参数JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC输出GC日志 -XX:+PrintGCDetails输出GC的详细日志 -XX:+PrintGCTimeStamps输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps输出GC的时间戳(以日期的形式,如 2017-09-04T21:53:59.234+0800) -XX:+PrintHeapAtGC在进行GC的前后打印出堆的信息 -Xloggc:../logs/gc.lo...原创 2020-06-22 20:17:00 · 942 阅读 · 0 评论 -
NIO浅析
1、什么是NIO?在 JDK1.4 之后,为了提高 Java IO 的效率,Java 又提供了一套 New IO(NIO),原因在于它相对于之前的 IO 类库是新增的。此外,旧的 IO 类库提供的 IO 方法是阻塞的,New IO 类库则让 Java 可支持非阻塞 IO,所以,更多的人喜欢称之为非阻塞 IO(Non-blocking IO)2、为什么要用NIO?所有的系统 I/O 都分为两个阶段:等待就绪和操作。举例来说,读函数,分为等待系统可读和真正的读;同理,写函数分为等待网卡可以写和真正的原创 2020-06-20 20:39:50 · 1081 阅读 · 0 评论 -
java 编译器工作原理
javai编译过程分析原创 2020-06-14 19:42:54 · 1710 阅读 · 0 评论 -
mybatis-generator自动生成代码
一、简介mybatis-geneator是一款mybatis自动代码生成工具,可以通过配置,快速生成mapper和xml文件。如果公司中使用的持久层框架是mybatis,这样我们就可以使用mybatis-generator,在短时间内生成实体类、mapper、dao接口文件,将这些毫无技术含量的工作交给mybatis-generator来做,以提高自己的工作效率。二、如何使用(一)生成的方式有三种:1.使用maven插件进行2.使用命令行3.使用图形化工具生成(二)所用文件:1.数据库驱动原创 2020-06-07 23:54:19 · 1228 阅读 · 0 评论 -
设计模式六大原则之依赖倒置原则
1、什么是依赖倒置原则?总链接:https://blog.csdn.net/jjs15259655776/article/details/105619335依赖倒置原则的意思是:High level modules should not depend upon low level modules,Both should depend upon abstractions.Abstractions should not depend upon details.Details should depen原创 2020-06-07 22:22:20 · 1106 阅读 · 0 评论 -
Google 开源技术protobuf
Google 开源技术protobuf公司项目一直是使用protobuf序列化结构数据,但一直都是一知半解,今天就让我们来深入了解下它。一、什么是protobuf?1.官方描述:protobuf是一种用于序列化结构化数据的灵活,高效,自动化的机制–以XML为例,但更小,更快,更简单。您可以定义如何一次构造数据,然后可以使用生成的特殊源代码轻松地使用各种语言在各种数据流中写入和读取结构化数据。简单来讲, ProtoBuf 是结构数据序列化方法,可简单类比于 XML。2.那序列化又是什么呢?简单来原创 2020-06-02 00:19:15 · 1582 阅读 · 0 评论 -
java多线程 —— 多线程同步器
1、什么是多线程同步器?可以理解为,用于控制多线程之前同步动作的工具。2、为什么使用多线程同步器?在实际应用中,我们希望多线程根据某些一些特定的规则执行。因此有了多线程同步器,通过不同的多线程同步器,可以让多线程实现多样的行为。3、多线程同步器介绍3.1、Samaphore应用场景:对于一组有限制都资源访问。比如餐厅有2个位置但同时有10个人要吃饭,则要控制10个人对餐位的并发实用。即当餐位有空余时,就会有人用餐,没有空余时,则进入阻塞等待。用法:定义Semaphore变量sem原创 2020-05-30 20:42:33 · 2326 阅读 · 0 评论 -
Eureka注册中心
Eureka注册中心最近在学习springcloud,接触到了Eureka,在这跟大家分享下。一、需求分析:在微服务中有众多的服务,那微服务的信息如何管理?Spring Cloud中提供服务注册中心来管理微服务信息。首先说下我对Eureka的理解。微服务其实就像是我们的经常逛的万达一样,里面入驻了各式各样的商家,给我们提供了各种各样的服务,但是这些商家需要有个管理中心,来管理这些商家的入驻,而Eureka就是充当这样的角色。为什么 要用注册中心?1、微服务数量众多,要进行远程调用就需要知道服务端原创 2020-05-18 00:32:05 · 1030 阅读 · 0 评论 -
Full GC触发原理和日志分析
1、Java GC的工作原理GC(garbage collection)是指垃圾回收机制,当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空间就没有存在的意义了,java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。当可用内存不能满足内存请求时,GC会自动进行。所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xms(程序的初始化内存大小)和-Xmx(程序占用的最大内存)来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Surv原创 2020-05-11 11:32:42 · 2800 阅读 · 0 评论 -
设计模式六大原则之里氏代换原则
1、什么是里氏代换原则(Liskov Substitution Principle)?总链接:https://blog.csdn.net/jjs15259655776/article/details/105619335LSP最正宗的定义是:如果每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T...原创 2020-04-26 11:07:33 · 1563 阅读 · 0 评论 -
Netty应用程序实战
一、编写服务器所有的Netty服务器都需要以下两部分。至少一个 ChannelHandler ——该组件实现了服务器对从客户端接收的数据的处理,即它的业务逻辑。引导 ——这是配置服务器的启动代码。至少,它会将服务器绑定到它要监听连接请求的端口上。1.ChannelHandler和业务逻辑因为服务器会响应传入的消息,所以它需要实现ChannelInboundHandler 接口,用来定...原创 2020-04-19 21:58:01 · 1524 阅读 · 0 评论 -
设计模式六大原则之开闭原则
1、什么是开闭原则?总链接:https://blog.csdn.net/jjs15259655776/article/details/105619335开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。2、为什么要使用开闭原则:...原创 2020-04-19 18:59:07 · 385 阅读 · 0 评论 -
初入netty的概念及结构体系
netty的概念及结构体系最近在netty的相关知识,跟此跟大家分享下学习成果在学习netty之前,我们需要先了解下java的网络编程一、Java网络编程在早期的Java API中只支持由本地系统套接字库提供的所谓的阻塞函数package com.liwai.game;import java.io.BufferedReader;import java.io.IOException;...原创 2020-04-19 17:30:26 · 1480 阅读 · 0 评论 -
spring boot ioc实操
spring boot 的ioc一、简介ioc与aop是spring boot的两个核心理念,spring boot是基于注解开发的Spring IOC。IOC容器一般具备两个基本功能:1、通过描述管理Bean,包括发布和获取。2、描述Bean之间的依赖关系在此有必要解释下什么是bean,bean的中文意思是“豆子”。所谓bean就是可以被重复使用的组件,外界不了解其内部组成与运行方式...原创 2020-04-12 23:17:33 · 2404 阅读 · 0 评论 -
java多线程 ———— 小结(干货)
java多线程中常见问题小结:1、java中实现多线程的几种方法:继承Thread类; 实现Runnale接口; 实现Callable接口,通过FutureTask包装器来创建Thread; 使用线程池;package com.test;import java.util.concurrent.*;public class ThreadTest4 implements Ca...原创 2020-04-12 19:14:49 · 1430 阅读 · 0 评论 -
java多线程 ———— 线程停止
1、线程的停止方法我们在之前的博客提到过,线程怎么创建。线程池:https://blog.csdn.net/jjs15259655776/article/details/105037208创建和启动线程:https://blog.csdn.net/jjs15259655776/article/details/84350022这次我们主要介绍怎么停止线程。主要有两种方法:调用st...原创 2020-04-05 13:26:43 · 1460 阅读 · 0 评论 -
java多线程 ———— 读写锁
目录1、什么是读写锁?2、为什么使用读写锁?3、怎么使用读写锁?1、什么是读写锁?读写锁有很多,最终极的父类就是ReadWriteLock,他把锁分为两类,读锁和写锁。即获得读锁的线程,拥有读取变量的权利;获得写锁的人,拥有写入变量的权利。2、为什么使用读写锁?我们都知道java多线程的应用中,不缺乏锁的使用,最经常使用的就是同步锁(synchronized),它的效果...原创 2020-03-30 01:04:12 · 1607 阅读 · 0 评论 -
AOP编程
一、什么是AOP?同上篇IOC编程一样,AOP也是一种编程思想,而不是一门技术。AOP的全称叫Aspect-Oriented Programming,也叫面向切面编程。在理解什么事AOP之前,我们需先知道什么是分散关注。分散关注 即将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。AOP就是这种实现分散关注...原创 2020-03-29 23:14:34 · 1583 阅读 · 0 评论 -
java多线程 —— ThreadLocal
目录1、什么是ThreadLocal?2、为什么要用ThreadLocal?3、ThreadLocal的内部实现?4、怎么用ThreadLocal?1、什么是ThreadLocal?ThreadLocal是一种变量类型,称为“局部变量类型”。一般用private static修饰。2、为什么要用ThreadLocal?提供线程间的数据隔离效果。我们知道多线...原创 2020-03-27 20:05:39 · 1530 阅读 · 0 评论 -
java多线程——线程池
1、什么是线程池? 线程池是一种线程的使用模式。类似数据库连接池一样,线程可以通过线程池对系统使用的线程进行统一的管理。统一管理线程的创建,调度,销毁等等。2、为什么使用线程池?统一管理。一个功能复杂的系统中,势必需要使用多线程,一旦线程数量过多,就需要统一管理。如果不用线程池进行统一管理,那么就需要浪费大量的经历和无用的重复代码对线程进行管理。 内存节省。线程其实是系统中的稀...原创 2020-03-22 22:58:04 · 1473 阅读 · 0 评论 -
java多线程 —— 单例模式
1、什么是单例? 单例模式实际上是一种模式。它达到的效果是,在程序的运行过程中,一个类最多只会被实例化(初始化)一次。2、为什么使用单例? 上面我们已经知道单例模式,其实就是一个类的变量和方法最多只会被初始化一次,即全局唯一。全局唯一可以节省内存开销,提供全局唯一的变量和方法等等优点,但是其实静态变量和静态方法也是能达到全局唯一的效果,那么为什么一定要用单例呢? ...原创 2020-03-19 20:33:44 · 1722 阅读 · 2 评论 -
java synchronized
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个syn转载 2017-09-06 14:33:25 · 161 阅读 · 0 评论 -
java异常处理和异常分类
一、背景信息: 异常才是程序遇到的最场景的情况。一段具有某种功能或者达到某种效果的程序,在理想的情况下,是完美的。这里的理想情况是程序不会遇到处理不了的异常,然后在大部分生产关系下,会面临各种各样的异常:IO错误、网络异常、不合法数据、容器越界、内存溢出等等。所以异常才是正常的情况。 面对着形形色色的异常,我们如果仅仅只是模式化的运用着JAVA的异常处理机制...原创 2020-01-15 18:08:08 · 1681 阅读 · 0 评论 -
log4j2的自动加载顺序
log4j2的自动加载顺序:log4j将检查“log4j.configuration file”系统属性,如果设置了,将尝试使用与文件扩展名匹配的configurationfactory加载配置。 如果未设置系统属性,则属性配置工厂将在类路径中查找log4j2-test.properties。 如果没有找到这样的文件,yaml configurationfactory将在类路径中查找log...原创 2019-10-30 16:09:16 · 3513 阅读 · 0 评论 -
在Java中使用xpath对xml解析
xpath是一门在xml文档中查找信息的语言。xpath用于在XML文档中通过元素和属性进行导航。它的返回值可能是节点,节点集合,文本,以及节点和文本的混合等。在学习本文档之前应该对XML的节点,元素,属性,文本,处理指令,注释,根节点,命名空间以及节点关系有一定的了解以及对xpath也有了解。XML学习地址:http://www.runoob.com/xml/xml-tutorial.ht...转载 2019-10-16 15:36:01 · 601 阅读 · 0 评论 -
小记 —— IO的String和Byte转换
1、转换方法://string 转 byte[]String str = "Hello";byte[] srtbyte = str.getBytes();// byte[] 转 stringString res = new String(srtbyte);2、注意事项:编码格式的设置。String.getBytes()和new String()都可以设置编码格式。...原创 2019-09-27 11:10:56 · 283 阅读 · 0 评论 -
ActiveMQ中的Session
当你从ActiveMQ的 ConnectionFactory中获得Connection之后,可以通过Connection创建多个Session,创建Session时有两个参数SessioncreateSession(booleantransacted,intacknowledgeMode);一般设置为:connection.createSession(false,Session...原创 2019-07-25 11:21:52 · 2841 阅读 · 0 评论 -
八大排序算法思想,时间复杂度,稳定性、及其java实现
八大排序算法思想,时间复杂度,稳定性、及其java实现1.归并排序package eightSort;import java.util.Arrays;/** * 归并排序 * * 1.设r[i…n]由两个有序子表r[i…m]和r[m+1…n]组成,两个子表长度分别为n-i +1、n-m。 * j=m+1;k=i;i=i; //置两个子表的起始下标及辅助数组的起始下标 * 2.若i>m 或j原创 2017-09-20 18:02:17 · 1205 阅读 · 0 评论 -
SimpleDateFormat的format和parse妙用。
SimpleDateFormat.format把date转成StringSimpleDateFormat.parse把String转成date。tips:SimpleDateFormat.parse的时候,经常会有ParseException原因是输入的字符串格式跟SimpleDateFormat定义的格式不一致。这时候,可以先通过SimpleDateFormat.forma...原创 2019-06-11 17:51:57 · 12298 阅读 · 2 评论 -
Timer already cancelled 或者 Task already scheduled or cancelled
关于Timer already cancelled以及Task already scheduled or cancelled问题1、问题的原因我们想要设置一个开关,控制定时器的状态。当我们关掉开关的时候,也就是在使用task.cancel()或者timer.cancel()来取消定时任务后再调用原来的定时任务时,可能会出现这两种错误,原因是因为每个task和timer都是一次性的消耗品,当...原创 2019-06-13 20:19:03 · 8570 阅读 · 0 评论 -
ArrayList和LinkedList的区别以及优缺点
ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用。他们都可以对元素的增删改查进行操作。对于ArrayList,它在集合的末尾删除或添加元素所用的时间是一致的,但是在列表中间的部分添加或删除时所用时间就会大大增加。但是它在根据索引查找元素的时候速度很快。对于LinkedList则相反,它在插入、删除集合中任何位置的元素所花费的时间都是一样的,但...转载 2019-05-10 18:01:16 · 153 阅读 · 0 评论 -
手把手搭建ssm框架(IDEA)
网上有很多ssm框架的教程,特此总结。前期准备: idea 2017.1 jdk1.8 Maven 3.3.9开始搭建:一、首先使用idea新建一个Maven webapp项目 这样就有了一个maven项目关于maven,我有一篇初识maven的博客,可以参考:https://blog.csdn.net/jjs15259...原创 2018-09-13 22:02:04 · 8030 阅读 · 4 评论