【Java学习】
文章平均质量分 75
摸索路程
JMzz
人不行,别怪路不平
展开
-
Java文件操作实现doc格式转pdf
在进行生成文档或者报告的时候,生成的word想要转换为pdf格式,这样才能保证报告的不可修改性,但是aspose-words的工具的License令人头疼,这篇文章就是解决这个doc转pdf的License的问题。话不多说,直接上实操。首先,需要一个本地的jar包,放在resources下的lib文件夹中,没有的话自己新建一个。其中辅助使用到了lombok模块,如果项目本身没有的,可以自行修改或者导入。代码实现doc转pdf,新建一个工具类PDFHelper.java。把本地的jar包导入到项目pom中。原创 2023-12-27 10:19:22 · 1136 阅读 · 0 评论 -
Java实现把List拆分成多个分组的两种方法
有时候我们需要将数量大的List按指定的数量分割成n个小List。(适用场景如:Excel导出的时候数量太大,导致卡顿;数据库批量Insert操作,数目达到一定的量,速度变慢或异常;集合作为SQL中IN的参数,而SQL又有长度限制,且性能会下降,所以需要分批分几次进行查询)原创 2023-09-06 08:42:38 · 3833 阅读 · 0 评论 -
函数式接口@FunctionalInterface,构建一对多Service结构
这类接口只定义了唯一的抽象方法的接口(除了隐含的Object对象的公共方法), 因此最开始也就做SAM类型的接口(Single Abstract Method)。在各个数据接口的ServiceImpl中实现抽象方法,并在@Service注解中标注service的默认值@Service("demoDataService")注解是用于标记函数式接口的,一个接口只有一个抽象方法时,就可以使用@FunctionalInterface。类的方法,这些方法不会影响接口的函数式属性。注解的接口中可以包含多个这些方法。原创 2023-03-26 22:09:22 · 858 阅读 · 2 评论 -
Js和Java用CryptoJS.pad.Pkcs7、AES/CBC/PKCS7Padding 实现加解密数据(crypto-js、bouncycastle、hutool-java)
但是对于Js中的CryptoJS,padding: CryptoJS.pad.Pkcs7,则对应Java中AES的默认模式是:AES/ECB/PKCS7Padding。最近开发遇到个对接接口的需求,而这个接口是前端的Ajax直接调用的,接口前后有进行加解密的处理,使用的是CryptoJS,加密模式为:padding: CryptoJS.pad.Pkcs7。而在Hutool的issue里面恰好有人提出这个问题,原作者也做出了回应。单使用Hutool,里面是没有这个加密算法的,所以需要配合BC库才能使用。原创 2023-03-03 16:55:45 · 4813 阅读 · 1 评论 -
阿里为什么建议给MVC三层架构多加一层Manager层
我们在刚刚成为程序员的时候,就会被前辈们 “教育” 说系统的设计要遵循 MVC(Model-View-Controller)架构。它将整体的系统分成了 Model(模型),View(视图)和 Controller(控制器)三个层次,也就是将用户视图和业务处理隔离开,并且通过控制器连接起来,很好地实现了表现和逻辑的解耦,是一种标准的软件分层架构。MVC分层架构是架构上最简单的一种分层方式。原创 2023-02-08 14:27:28 · 512 阅读 · 0 评论 -
通俗易懂的MyBatis 动态 SQL 语句
有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句。同理,上面的对于查询 SQL 语句包含 where 关键字,如果在进行更新操作的时候,含有 set 关键词,我们怎么处理呢?有时候可能某个 sql 语句我们用的特别多,为了增加代码的重用性,简化代码,我们需要将这些代码抽取出来,然后使用时直接调用。如果作者名字为空,那么只根据博客名字查询,反之,则根据作者名来查询。请看下面的 where 语句!原创 2023-02-08 09:44:03 · 291 阅读 · 0 评论 -
史上最全的 IDEA Debug 调试技巧(超详细案例)
Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方。转载 2023-01-11 16:56:04 · 12472 阅读 · 2 评论 -
一行代码完成Http请求,雀食好用
在Java的世界中,Http客户端之前一直是Apache家的HttpClient占据主导,但是由于此包较为庞大,API又比较难用,因此并不使用很多场景。对于 Android App来说,OkHttp 现在几乎已经占据了所有的网络请求操作,对于服务器端请求外部接口也是必备的选择。针对OKHttp,OkHttpUtil做了一层封装,使Http请求变得无比简单。而OKHttp是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。转载 2022-12-23 10:40:12 · 160 阅读 · 0 评论 -
肝了一周总结的SpringBoot常用注解大全,看完就炉火纯青了
这些SpringBoot注解基本都是我平时做项目常用的注解,在我的实战项目中基本都用到了,这里做了一番整理归纳,希望对大家有所帮助。转载 2022-12-15 10:27:59 · 262 阅读 · 0 评论 -
Okhttp实现上传文件+参数请求接口form-data
然后controller层的传参需要用@RequestParam或者直接一个请求的实体类,如果使用实体类,千万不要加@RequestBody,不然结合上传文件会失效,上传文件使用。有时候需要对接一些接口,而且接口传参不仅需要各种类型的参数,甚至还要上传文件,所以遇到挺多坑,用postman的生成代码也不好用,于是就有了这篇文章。@RequestPart("file") MultipartFile file进行传参。话不多说,我们直接上代码。首先是service层。原创 2022-12-14 14:01:32 · 6609 阅读 · 2 评论 -
Java之BigDecimal详解
在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。转载 2022-12-01 13:52:37 · 1239 阅读 · 0 评论 -
1亿条数据批量插入 MySQL,哪种方式最快?
能够看到,在开启事务下 JDBC直接处理 和 JDBC批处理 均耗时更短。Mybatis 轻量级框架插入 , mybatis在我这次实验被黑的可惨了,哈哈。实际开启事务以后,差距不会这么大(差距10倍)。大家有兴趣的可以接着去测试JDBC直接处理,在本次实验,开启事务和关闭事务,耗时差距5倍左右,并且这个倍数会随着数据量的增大而增大。因为在未开启事务时,更新10000条数据,就得访问数据库10000次。导致每次操作都需要操作一次数据库。转载 2022-11-29 09:55:40 · 142 阅读 · 0 评论 -
查出数据还需二次处理,用这个方法分页
对于分页插件PageHelper:通常情况下使用在查询前加上。PageHelper.startPage(vo.getPageNum(), vo.getPageSize());即可,但当我们要对查询到的数据进行进一步操作时候(比如统计或者计算他们的个别项数据之和后再分页),数据就不是我们想要的数据了,则我们需要手动进行分页,下面展示手动分页步骤:原创 2022-11-25 13:29:05 · 2663 阅读 · 0 评论 -
两万字盘点那些被玩烂了的设计模式
之前有小伙伴私信我说看源码的时候感觉源码很难,不知道该怎么看,其实这有部分原因是因为没有弄懂一些源码实现的套路,也就是设计模式,所以本文我就总结了9种在源码中非常常见的设计模式,并列举了很多源码的实现例子,希望对你看源码和日常工作中有所帮助。单例模式是指一个类在一个进程中只有一个实例对象(但也不一定,比如Spring中的Bean的单例是指在一个容器中是单例的)单例模式创建分为饿汉式和懒汉式,总共大概有8种写法。但是在开源项目中使用最多的主要有两种写法:1、静态常量静态常量方式属于饿汉式,以静态变量的方式声明转载 2022-11-18 14:06:45 · 88 阅读 · 0 评论 -
Java的stream流妙用之排序
当我们在查询出来的数据,想要按照一定顺序排序,而SQL没办法解决的时候,恰巧排序的顺序的定好的,不会变,那么就可以使用下面的这个方法。这样查出来的数据就能按照你规定的那个字典去排序了。而你的SQL查出来其中一个字段有这个城市名。比如这样随机写的这个排序,固定要这样去排。那么就可以用stream流来排序了。先定义一个静态的字典。原创 2022-11-10 15:13:25 · 5361 阅读 · 0 评论 -
java Internal error in the mapping processor java.lang.NullPointerException解决方案
【代码】java Internal error in the mapping processor java.lang.NullPointerException解决方案。原创 2022-10-31 10:41:09 · 515 阅读 · 0 评论 -
Idea运行报错Error running ‘Application‘: Command line is too long的解决方法
新项目再Idea里面启动的时候,有的时候报错Error running ‘Application’: Command line is too long. Shorten command line for Application or aalso for Spring Boot default configuration,报错信息如下所示。然后再在component 标签里加一行。重新启动项目,就不会报错了,问题解决☺。怎么解决呢,首先找到项目里面的。标签,标签如下图所示。原创 2022-10-26 17:46:48 · 398 阅读 · 0 评论 -
com.alibaba.fastjson.JSONException: error, offset 2924, char 已解决
在我们传入JSON数据用JSON.parseObject()方法去解析时,会出现这样的报错com.alibaba.fastjson.JSONException: syntax error, pos 9或com.alibaba.fastjson.JSONException: error, offset 2924, char原创 2022-10-13 19:12:26 · 3903 阅读 · 0 评论 -
Java tkmybatis操作数据库新增和查询 json 字段
网上见到的比较多的都是mybatis plus的教程,这边就分享一下关于tk mybatis对数据库中的JSON字段进行操作,实现增改查。注意:typeHandler位置是自己自定义转换器所在的位置。传参直接把JSON放到字段后面就好了,例如。查询出来也是可以的。原创 2022-09-19 11:12:55 · 2216 阅读 · 0 评论 -
最强分布式锁工具:Redisson
什么是Redisson?Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。转载 2022-08-11 15:06:58 · 2812 阅读 · 0 评论 -
新同事写了几段小代码,把系统给搞崩了,整顿了老板
Java程序是基于GC的,在启动初始,就申请了足量的内存池,再加上JIT等编译器的实时优化,速度并不比直接用C++语言写的慢。OOM一般是内存泄漏引起的,表现在GC日志里,一般情况下就是GC的时间变长了,而且每次回收的效果都非常一般。下面的代码是死循环,持续向HashMap里塞数据,由于myMap属于GCRoots,始终得不到释放,所以它最终的结果就是OOM。内存溢出可能是由于请求量过高,或者真实的业务需求需要所造成的后果,而内存溢出属于未知的、超出期望的OOM情况。...转载 2022-07-19 09:30:38 · 135 阅读 · 0 评论 -
Windows10安装Kafka教程
在安装Zookeeper之后就可以安装Kafka了1.下载安装包:Kafka_2.13-3.2.0 2、 解压并进入Kafka目录,我的文件夹:D:\kafka_2.13-3.2.03、 进入config目录找到文件server.properties并打开4、 找到并编辑log.dirs=D:\kafka_2.13-3.2.0\kafka-logs 5、 找到并编辑zookeeper.connect=localhost:2181 6、 Kafka会按照默认,在9092端口上运行,并连接zookeeper的默原创 2022-06-27 21:17:32 · 2138 阅读 · 0 评论 -
Windows10安装Zookeeper教程
zookeeper是分流减轻系统负担,就是很多台计算机 组成的一个整体,一个整体一致对外并且处理同一个请求,内部的每台计算机都可以互相通信(rest/rpc)机制。客户端的一次请求到 响应结束会历经多台计算机,简单的说就是把一个请求拆分多个子模块运行一致性:数据一致性数据按照顺序分批入库原子性:事务要么成功,要么失败,不会全局化单一视图: 客户连接集群中任意的一个zookeeper节点 数据都是一致的可靠性:每次对zookeeper的操作 状态都会 保存在服务端实时性:客户端可以读取到zookee原创 2022-06-27 18:53:47 · 2840 阅读 · 0 评论 -
细谈八种架构设计模式及其优缺点概述
一、什么是架构我想这个问题,十个人回答得有十一个答案,因为另外的那一个是大家妥协的结果。哈哈,我理解,架构就是骨架,如下图所示:人类的身体的支撑是主要由骨架来承担的,然后是其上的肌肉、神经、皮肤。架构对于软件的重要性不亚于骨架对人类身体的重要性。二、. 什么是设计模式这个问题我问过的面试者不下于数十次,回答五花八门,在我看来,模式就是经验,设计模式就是设计经验,有了这些经验,我们就能在特定情况下使用特定的设计、组合设计,这样可以大大节省我们的设计时间,提高工作效率。 作为一.转载 2022-05-31 09:00:06 · 543 阅读 · 0 评论 -
泛型中的 T、E、K、V,是怎么个回事
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就原创 2022-05-30 11:35:42 · 349 阅读 · 0 评论 -
Java8之Stream流的用法
一、概述Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。特点: 不是数据结构,不会保存数据。 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可原创 2022-04-26 16:33:03 · 455 阅读 · 0 评论 -
404不清楚?GET 和 POST不清楚?有点崩溃 ~
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。你轻轻松松的给出了一个“标准答案”: GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的U转载 2022-04-23 19:25:05 · 211 阅读 · 0 评论 -
Java公钥与私钥做对称加密解密
公钥与私钥机制属于非对称加密的范畴,非对称是相对于对称加密而言的,对称加密用于加密与解密的密钥是同一把,而非对称加密则用于加密与解密的密钥不相同,一个公开,称为公钥;一个保密,称为私钥,公钥与私钥必须成对出现,只有是配对的公钥与私钥才能用于加解密。公钥通过非安全通道发放,私钥则由发放者保留,公钥加密的数据,只能使用其配对的私钥对其解密;反之,私钥加密的数据,只可使用公钥对其解密。对称加密出现后有效地提升的数据的安全性,但是由于加密与解密用的是同一把密钥,这样除了通信双方需要约定加密算法之外,数.原创 2022-04-22 15:20:33 · 3308 阅读 · 0 评论 -
SpringBoot 监控 SQL 运行情况
1 基本概念虽然 HikariCP 的速度稍快,但是,Druid能够提供强大的监控和扩展功能,也是阿里巴巴的开源项目。Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。S...转载 2022-04-07 10:48:10 · 462 阅读 · 0 评论 -
[springBoot系列]--springBoot注解大全
一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration等同于spring的XML配置文件;使用Java代码可以检查类型安全。@EnableAutoConfiguration自动配置。@Compone...转载 2022-01-27 15:55:35 · 198 阅读 · 0 评论 -
Cannot resolve org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:unknown
导入eureka-server依赖时候,识别不出来发现自己加载Maven的时候出现了这个问题大概出现这种问题的都是这么导入依赖的吧这是因为没有指定对应的版本号,所以需要手动选择对应的版本号。在<version></version>标签中写一个2(以后可能还有3)跳出版本提示,选择一个最新的版本就好了点击重载Maven,问题解决。...原创 2022-01-10 11:40:48 · 1708 阅读 · 0 评论 -
MyBatisPlus3.4.3版自动生成代码的使用
目录1.准备工作2.导入依赖3.新建包名称为generator,创建MyGenerator类3.运行代码生成器数据库配置(DataSourceConfig)#基础配置#可选配置#全局配置(GlobalConfig)#包配置(PackageConfig)#模板配置(TemplateConfig)#注入配置(InjectionConfig)#策略配置(StrategyConfig)#Entity 策略配置#Controller 策略配置#Service原创 2022-01-12 12:04:09 · 1973 阅读 · 2 评论 -
深入学maven(通俗易懂)
前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下。 一、为什么使用Maven这样的构建工具【why】 ① 一个项目就是一个工程 如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。 借助于maven就可以将一个项目拆分成多个工程 ② 项目中使用jar包,需要“复制”、“粘贴”项目的lib中 同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工...转载 2022-01-26 09:41:01 · 362 阅读 · 0 评论 -
阿里一面:讲一讲 Spring、SpringMVC、SpringBoot、SpringCloud 之间的关系
搞后端开发的同学,对 Spring 家族一定不陌生。Spring 全家桶了为了解决不同场景的问题,逐渐演化出多套生态环框,如:Spring、SpringMVC、SpringBoot、SpringCloud它们之间的关系:SpringSpring 一站式的轻量级的java开发框架,采用容器化管理,创建各种 Bean 实例,并维护着 bean 与bean之间的关系。两大核心利器: IOC(控制反转) AOP(面向切面) 为Java应用程序开发提供了全面的基础架构支持。转载 2022-01-20 09:24:47 · 324 阅读 · 0 评论 -
阿里二面:main 方法可以继承吗?
main方法能重载么? main方法能被其他方法调用么? main方法可以继承么? 阿里二面:main 方法可以继承吗?我们一开始学习 Java 程序的时候,最先跑的一段代码肯定是 main 方法,main 方法的格式如下:publicstaticvoidmain(String[]args){}那么main方法有什么特殊的地方呢?今天我们来简单看一下。首先针对main方法的格式定义:「public」:main方法是启动的时候由JVM...原创 2022-01-11 16:28:11 · 71 阅读 · 0 评论 -
微服务(七)Gateway服务网关
为什么要有网关权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。在SpringCloud中网关的实现包括两种:gateway zuulZuul是基于Servlet的实现,属于阻塞式...原创 2022-01-06 15:01:36 · 1416 阅读 · 1 评论 -
微服务(六)Feign远程调用
Feign使用优化Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:•URLConnection:默认实现,不支持连接池•Apache HttpClient :支持连接池•OKHttp:支持连接池因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。这里我们用Apache的HttpClient来演示。原创 2022-01-06 14:57:10 · 350 阅读 · 0 评论 -
微服务(五)nacos配置管理
1 统一配置管理1.1 nacos中添加配置文件注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。1.2 从微服务拉取配置微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。但如果尚未读取application.yml,又如何得知nacos地址呢?因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之原创 2022-01-06 14:52:34 · 555 阅读 · 0 评论 -
微服务(四)nacos服务注册
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。原创 2022-01-06 14:48:59 · 1833 阅读 · 0 评论 -
微服务(三) Eureka注册中心和Ribbon负载均衡
1. Eureka注册中心1.1 Eureka的结构和作用在上一篇文章中微服务(二)服务拆分及远程调用order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口? 有多个user-service实例地址,order-service调用时该如何选择? order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?这些问题都需要利用SpringCloud中的注册中心来解决,其中最广为人知的注册中心就是Eureka,.原创 2022-01-06 14:45:18 · 132 阅读 · 0 评论