- 博客(52)
- 收藏
- 关注
原创 【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它实现了 Future 和 CompletionStage 接口,提供了丰富的方法来处理异步任务的完成、组合和异常处理。异步执行:CompletableFuture.supplyAsync() 方法可以将一个任务提交到线程池中异步执行,而不会阻塞当前线程。在上述代码中,每个接口调用都被封装成一个 CompletableFuture 对象,并通过 supplyAsync() 方法异步执行。并行处理。
2025-01-26 22:33:08
1040
原创 【拖延与完美主义】关于今天写了很久但还是没写出博客这件事情
昨天给自己定下了每日计划的目标,之前已经有很多年没有写博客了,现在要重新开始,要每天写一篇博客,以此锻炼自己的内容输出能力,并巩固自己的知识体系。于是今天有了空余时间的时候就开始想这件事情,想着“到底些什么主题的博客好呢?
2025-01-24 22:49:46
246
原创 [碎碎念] 重启学习与博客之旅-我的每日计划
好久没在写博客了,今天我下定决心,要重新开始。我给自己定了个小目标,从今天起,每天都要写一篇博客,然后发布到优快云和掘金上。以下是我的计划。以后每天早上,我都得抽出至少一个小时专门用来学新技术。我打算先列个学习清单,把一直想学但没时间学的技术都写上去,然后按照自己的兴趣和工作需要,一项一项地去攻克。比如说,我最近对人工智能和大数据分析特别感兴趣,所以打算每天看点相关的专业书,或者找些在线课程听听,再编写代码做点小练习,把学到的理论知识用起来。学习的时候,我肯定会遇到各种各样的问题,也会学到不少新知识点。
2025-01-23 20:54:38
210
原创 为什么建议不要做联表查询?
相比而言,拆分成单表查询+代码上组装,业务逻辑更清晰,优化更方便,单个表的索引设计上也更简单。1、单表查询更利于后续的维护。在实际开发场景中,在代码初步开发阶段(如果摊上一个不太靠谱的产品),业务发生变动,某张表的结构发生变动,很可能整个join查询都变得不可用,复杂的关联查询,在修改时,基本等于推倒重来。2、代码可复用性高这个不用多说,join联表的SQL,基本不太可能被复用,但是拆分后的单表查询,比如上面例子中,我查询出tab数据,任何地方组装需要tab数据,我都不需要再次做相关查询,直接使用。
2023-02-23 14:07:56
1199
1
原创 为什么要移除数据库物理外键?
数据完整性几乎都是业务的要求,理应由业务部分负责维护,而不是依赖数据库访问量较大的web应用,以及有一定规模的企业应用,都关注伸缩性和性能问题,各种形式的垂直、水平切分运用越来越多,外键、触发器、存储过程之类的基本属禁区。eg: 在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不止一个 字段有外键,这样扫描的数量是成级数的增长!在最早接触数据库的时候,会接触数据库三范式,在表和表之间有关系的时候,需要使用外键添加约束。
2023-02-23 14:05:36
543
原创 MySQL-redo log和undo log
MySQL中是如何实现事务提交和回滚的?为了保证数据的持久性,数据库在执行SQL操作数据之前会先记录redo log和undo logredo log是重做日志,通常是物理日志,记录的是物理数据页的修改,它用来恢复提交后的物理数据页undo log是回滚日志,用来回滚行记录到某个版本,undo log一般是逻辑日志,根据行的数据变化进行记录redo/undo log都是写先写到日志缓冲区,再通过缓冲区写到磁盘日志文件中进行持久化保存undo日志还有一个用途就是用来控制数据的多版本(MVCC)
2023-02-23 14:01:38
462
原创 JVM记录
1、方法区:也称“永久代”,“非堆”,用于储存虚拟机加载的类信息,常量,静态变量,是各个线程共享的内存区域。运行时常量池:方法区的一部分,Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息就是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。2、虚拟机栈:描述的是java方法执行的内存模型,每个方法被执行的时候,都会创建一个“栈帧”用于存储局部变量(包括参数),操作栈,方法出口等信息。
2023-02-23 14:00:51
376
原创 Java常用数据结构
Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。一、几个常用类的区别1.ArrayList: 元素单个,效率高,多用于查询2.Vector: 元素单个,线程安全,多用于查询3.LinkedList:元素单个,多用于插入和删除4.HashMap: 元素成对,元素可为空5.HashTable: 元素成对,线程安全,元素不可为空。
2023-02-23 13:53:24
471
原创 关于Java中的String,String Buffer, String Builder
可以看到,String类是final类,一旦赋值就不可改变,成员方法都默认为final方法。并且String类是通过char数组来保存字符串的。观察以下String类方法的实现的源代码,可以看出,String的操作都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象。在这些操作后,原来的对象都没有改变,得出的结果属于新的对象。因此,String对象创建之后,此对象中存储的字符串内容不再被改变,String类对象有编辑的功能,但是编辑功能是通过创建一个新的对象来实现的,而不是对原有对象进行修改。
2023-02-23 13:49:37
245
原创 Go语言学习资料推荐
the-way-to-gothe-way-to-go中文翻译版,内部含有大量代码示例可以直接下载build-web-application-with-golangbuild-web-application-with-golanggo语言web开发指南
2021-11-01 15:54:44
168
原创 Go语言成长之路(二)-内建容器(多图文示例)
这里写Go语言成长之路(二)-内建容器1、数组1.1、一维数组1.2、多维数组1.3、数组参数传递2、Slice-切片2.1、切片定义2.2、切片初始化2.3、切片常用操作3、Map-集合3.1、Map创建3.2、Map赋值3.3、Map获取3.4、Map遍历3.5、Map删除1、数组1.1、一维数组一维数组的声明方式:var variable_name [SIZE] variable_type例如:var b [5]int数组初始化:var b = [5]int{1000, 2, 3
2021-10-31 20:38:55
407
1
原创 Go语言成长之路(一)-Go语言基础语法(多图文示例)
1、变量定义Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字:2、变量类型定义3、指针定义4、常量定义5、枚举定义6、条件语句7、循环语句8、函数...
2021-10-31 11:39:38
552
原创 Go语言成长之路-Go语言结构
我们以一个HelloWorld代码作为实例来讲解Go 语言的基础组成有以下几个部分:包声明引入包函数变量语句 & 表达式注释如上图所示package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。import “fmt” 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),
2021-10-30 12:45:22
191
原创 GO语言学习-启动
Hello World!今天搭建好了环境,写了一个Hello World,纪念一下自己学习Go语言的起点。之后会按照计划学习这门语言。
2021-10-29 22:54:20
129
原创 《火星人日记》——今天才知道TODO的用法
今天明白了TODO的用法打开IDEA,在代码中加入注释,注释中的内容以TODO开头,提示自己下一步需要做什么然后打开IDEA底部栏的TODO就可以查找到添加了TODO注释的地方了作用相当于一个便利贴,提醒一下自己还有什么需要做。...
2021-10-15 10:48:52
169
转载 使用P3C进行项目代码规范管理
存在的问题研发团队的代码质量管理,是项目管理的重要环节之一。项目的代码质量将会影响到项目的研发、测试、维护以及运营等众多领域。中小项目团队在过去的代码质量管理中,往往存在以下几个问题:1、编写者水平经验有限。中小公司往往缺少技术专家,所以想要撰写完整全面的代码规范规约比较困难。2、文档更新维护成本高。由于代码规范也是随着技术变革需要与时俱进的,所以对于中小公司来说维护成本比较大。3、程序员容易疏忽。在编码时由于专注业务逻辑的实现,而疏忽了规范的遵守。4、代码质量监管费力。管理人员排查代码规范问
2021-06-15 09:39:19
507
原创 XML Parser Error on line 17: 对实体 “characterEncoding“ 的引用必须以 ‘;‘ 分隔符结尾
场景:使用Mybatis Plus Generator进行生成的时候,配置generatorConfig.xml后运行出错问题:XML Parser Error on line 17: 对实体 “characterEncoding” 的引用必须以 ‘;’ 分隔符结尾。原因:是数据库连接配置的connectionURL不能直接使用&号错误示范:<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
2021-06-13 17:42:34
577
1
原创 MyBatis-Plus学习总结
什么是MyBatis-Plus?MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus的有点有哪些?无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅
2021-06-11 16:42:46
725
2
转载 Mybatis Plus 查询方法记录
@Testpublic void contextLoads() {}@Autowiredprivate UserInfoMapper userInfoMapper;/** * 普通查询 */@Testpublic void selectById() { UserInfo userInfo = userInfoMapper.selectById(123); System.out.println(userInfo);}/** * 批量查询 */@Testpub
2021-06-10 20:53:54
1240
原创 使用Super CSV 解析上传csv文件后出现乱码
问题:在项目中使用了Super CSV来将上传的csv文件信息转化为实体类信息,但是中文部分出现了乱码。原因:一般的CSV是用UTF-8编码的,而EXCEL是ANSI编码,由于这一份csv文件是用Excel编辑的,因此由于编码不一致而导致出现乱码。用记事本打开csv文件,可以看到该文件是ANSI编码解决方式用记事本打开要上传的csv文件,点击另存为,并且重新设置编码为UTF-8,将保存类型设置为txt,然后再上传。然后再上传,得到的解析结果没有出现乱码。问题暂时解决。...
2021-06-09 09:28:50
516
原创 当IDEA提示代码文件出现问题时如何快速定位?
当IDEA提示代码文件出现问题时如何快速定位?1、设置模式右键点击编辑区右上角的右上角的方框,可以在Go the high priority problems only 和 Go to next problem模式间切换。“Go the high priority problems only”的意思是在优先级较高的错误间切换,“Go to next problem”的意思是永远跳向下一个错误和警告,不管优先级的问题。开始定位可以按F2键进行错误的快速定位,可以按Shift+F2键进行警告的快
2021-06-08 10:15:14
2263
原创 关于Bigdecimal 的equals 和compare
关于Bigdecimal 的equals 和compare在比较两个Bigdecimal 的值是否相等时,我们有equals 和compare两个选择,那么这两种方式有什么不同吗?接下来看一下源码。 @Override public boolean equals(Object x) { if (!(x instanceof BigDecimal)) return false; BigDecimal xDec = (BigDecimal)
2021-06-08 09:39:22
436
转载 创建BigDecimal对象的时候,最好使用String作为参数
一、构造BigDecimalBigDecimal提供了丰富的构造函数,可以通过int、long、double、String等来构造一个BigDecimal对象。但是,使用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。BigDecimal bg = new BigDecimal(1.1);System.out.println(bg.toString()); 运行结果:1.100000000000000088817841.
2021-06-08 09:34:09
3205
原创 (学习笔记)关于SpringMVC中的Controller、Service、DAO的多线程问题
SpringMVC中Controller为什么能够处理并发访问?SpringMVC中用来处理http请求的Controller是基于Servlet实现的,Spring中绝大多数的类都是单例的,Servlet也是这样。Controller、Service、DAO都是默认单例模式既然Controller是单例模式,那么它是怎么能够在同时处理很多个请求的呢?想要搞明白这点,首先面临的一个问题是:计算机是如何处理一个请求的呢?计算机大部分的任务都是由CPU来完成的,Controller虽然叫做控制器,但是
2021-04-08 11:53:12
3988
4
原创 SpringBoot入门教程(第一阶段):整合SpringData JPA
SpringBoot入门:使用SpringData JPA1、首先创建项目,添加依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency>
2021-02-16 23:17:42
256
1
原创 IDEA教程 第二章:创建SpringBoot项目
IDEA教程 第二章:SpringBoot1、打开IDEA,Create New Project,选择Spring Initializr,点击Next2、填写好项目相关信息3、选好依赖之后点击Next,选好项目所在路径,然后点击Finish4、项目创建完成
2021-02-15 22:35:04
131
原创 数据库学习笔记之索引详解
索引简介索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。如果说把数据库看作字典的话,那么索引可以被看作目录。在数据库表中,对字段建立索引可以大大提高查询速度。通过善用这些索引,可以令MySQL的查询和运行更加高效。索引是对数据库表中一个或多个列(例如,emplo
2020-10-25 17:16:48
766
原创 JAVA-JDBC编程总结
JDBC简介JDBC全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java的API,应用程序可以通过这套API关系到数据库,并使用SQL语句来完成对数据库的增删改查等操作。JDBC由两层构成,上层是JDBC的API,下层是JDBC的驱动程序API,1.Java应用程序2.JDBC驱动程序管理器3.厂商或第三次提供驱动程序4.数据库JDBC常用API使用JDBC连接数据库关于SQL关于数据库的基本操作事务处理...
2020-10-07 23:27:01
682
1
原创 计算机网络与Java网络编程基础知识总结
关于Java网络编程计算机网络将地理位置不同的计算机通过通信线路连接起来,实现资源的共享和信息的传递,网络中的计算机通常称之为主机,而网络编程就是通过程序来实现两台以上主机之间的通信。实际的通信网络内容较多,但是Java语言提供了许多网络类,屏蔽了底层的复杂细节,是程序员可以很容易地编写出网络程序。计算机网络知识基础在进行Java网络编程之前,需要对关于计算机网络的总体知识有一个大致的理解。分层结构模型众所周知,计算机网络传输实际上是一个很复杂的模型,为了更方便程序开发,我们一般会简历网络传输模
2020-10-06 21:21:58
777
1
原创 Java-关于并发与多线程笔记
进程与线程进程:是计算机中的程序在某个数据集合上的一次独立的运行活动,是系统进行资源分配和调度的基本单位。进程特征:1.每个进程都有自己独立的一块内存空间和一组系统资源;2.创建并执行一个进程的系统开销比较大;3.进程是程序的一次基本执行过程,是系统运行程序的基本单位;线程:被称为轻量级进程,.是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的 资源。虽然系统是把资源分给进程,但是CPU很特殊,是被分配到线程的,所以线程是CPU分配的基本单位。线程特征:1.线程自己
2020-10-04 23:15:57
175
原创 Java-关于异常处理笔记
什么是异常?在程序开发过程中,我们要尽量避免错误的发生,但是总会发生一些不可预期的事情,例如除法除数为0,内存不足,栈溢出等,这些就属于异常;Java中提供了异常处理机制,处理这些不可预期的事情;异常也被称为例外,是程序运行过程中会发生的,会打断程序正常执行的事件,以下是几种常见的异常:1.算术异常(ArithmeticException)2.没有给对象开辟内存空间时出现的空指针异常(NullpointException)3.找不到文件异常(FileNotFoundException)在程序
2020-10-03 13:17:23
375
原创 Java笔记2-面向对象
面向对象(OOP)在程序中使用对象的概念来映射现实中的事物,使用对象的关系来描述事实的联系,这种思想就是面向对象。把要解决的问题按照一定的规则划分为多个独立的对象,然后通过调用对象的方法来解决问题,一个应用程序会包含多个对象,通过多个对象的相互配合实现代码功能,当某个应用程序出现问题时或功能需求变化时,只需要修改相应对象即可,这样代码更容易维护开发,效率更高,逻辑结构更加清晰。面向对象三大特性封装继承多态类与对象类是一张用于组合对象属性和行为的一种机制;类的实例化就是对象;在Java中,
2020-09-27 20:21:18
282
原创 Java基础语法杂记
1.java工作原理编写,编译,运行.java文件——>.class文件——>机器代码.class文件交给JVM解释运行一次编译,到处运行java编译器与java解释器JRE(Java Runtime Enviroment) java运行时环境JDK(Java Devolopment Kit) Java开发工具包,其中包括Java运行时环境2.配置PATH环境变量系统查找bin目录JAVA的初学者,必须要学会配置PATH环境变量,否则无法编译、运行JAVA程序。那么,为
2020-09-25 22:40:30
132
原创 SQL调优的几种方式
要建立索引索引是帮助MySQL高效获取数据的一种数据结构,就像是书本的目录,加快数据库的查询速度。索引一般分为两种:聚集索引和非聚集索引。聚集索引:聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。如果某索引不是聚集索引,则表中的行物理顺序与索引顺序不匹配,与非聚集索引相比,聚集索引有着更快的检索速度。简单来说,就是一个按顺序排列的目录,数据也按目录顺序排列。非聚集索引:非聚集索引是一种不
2020-09-24 22:47:21
1888
原创 ECS训练营体验日记
第一天获取ECS服务器今天加入了ECS的训练营,并且获取了ECS的资源,打算趁这个机会学习一些关于云计算和服务器管理的有关知识。什么是ECS云服务器(Elastic Compute Service,ECS)的标准定义是指一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效。用户无需提前购买硬件,即可迅速创建或释放任意多台服务器,并且提供多样的类型。ECS的优势1.无需自建机房,无需采购以及配置硬件设施。2.快速交付,快速部署,缩短应用上线周期。3.快速接
2020-09-23 22:36:55
270
原创 关于Java的Static函数调用非静态方法
关于Java的Static函数调用非静态方法通常情况下,Java 静态函数中能不能调用非静态函数的方法?答案是不行的,因为在Java中,非静态方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接.调用。为什么是这样呢?从内存的角度看,在Java中,静态局部变量初始化是在第一次调用函数的时候初始化,全局变量是在main方法执行之前就已经初始化了,这时系统已经为该静态变量分配好内存。也就是说,当类被加载的时候,静态方法和静态属性
2020-09-20 11:05:17
690
原创 Spring MVC 入门使用笔记(一)
1.早期基于Servlet的MVC模型__MVC 是 Model、View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责: __1.模型:用于存储数据以及处理用户请求的业务逻辑。2.视图:向控制器提交数据,显示模型中的数据。3.控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。** 基于 Servlet 的 MVC 模式的具体实现如下: **1.模型:一个或多个 JavaBean 对象,用于存储数据(实体模型,由
2020-09-12 13:53:27
174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人