自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 一些异常及解决方法记录(持续更新)

异常:org.springframework.http.converter.HttpMessageNotReadableException:JSON parse error: Cannot construct instance of com.类名* (although at least one Creator exists): cannot deserializ原因:类中没有空构造函数

2020-06-22 15:21:50 1958 1

原创 Java通过反射给注解赋值

在用java导出Excel的时候,表头不能写死,而是根据情况变化的。

2024-03-04 14:16:33 634 1

原创 springboot整合kafka和zookeeper简易示例(win平台)

先下载zookeeper:下载地址找一个版本,不使用最新版,好像有版本的错误。下载,解压。复制zoo_sample.cfg配置文件,修改文件名为zoo.cfg打开zoo.cfg,修改dataDir为本地磁盘地址,可以新建一个data文件夹。启动zookeeper, zkServer.cmd启动成功下载kafka,下载链接下载,解压。打开config下的server.properties配置文件修改log.dirs为磁盘路径修改zookeeper.connect=127.0.0.1:

2023-06-13 10:26:46 196

原创 若依框架添加出入参加密解密

若依出入参加密解密,若依全局过滤器使用,byte数组转string丢失数据问题。

2022-06-01 11:06:42 5365 5

原创 修改若依的数据权限功能

若依(cloud版本)的数据权限功能是通过注解实现的,在需要数据权限的方法上加上注解。在注解中判断当前用户的角色对应的数据权限类型,在执行的sql语句后面拼接部门和用户的sql过滤条件从而实现数据权限功能。数据权限的核心功能的代码如下:如果当前用户有多个角色,那么多个角色之间不同的数据权限通过sql的or来连接。最后在mybatis的xml中通过拼接sql语句实现。这个功能没有问题,使用$来拼接sql也没有问题,因为数据权限中需要拼接的语句是写死的,而且若依也做了防注入的操作。

2022-02-11 15:50:14 4662 2

原创 spring.factories是什么

springboot项目启动的时候,会把springboot目录下的类加载到 spring容器中。在代码里就可以直接使用这个创建好的类了。所以一般的springboot项目的启动类都是放在代码的外层,那么就可以扫描到代码中所有的类了。如图:可是,如果有的类需要spring去管理,但是存放的位置不在springboot启动类目录下,无法自动扫描到,比如这个swagger的配置类,那如何才能使得这个类同样被加载到spring容器中。如图;使用spring.factories可以实现,在res

2022-01-22 09:00:52 552

原创 linux安装redis

1,下载redis:https://redis.io/download2.上传并解压改名 tar -zxvf redis-6.2.6.tar.gzmv redis-6.2.6 redis3.进入解压后的文件夹 使用make命令对redis进行编译执行完成后会生成src等目录。4.进入src 执行make install 对redis进行安装5执行redis-server& ./redis.conf启动redis6.关闭redi...

2021-12-30 15:50:13 246

原创 异或^符号的使用

记录一道leetcode上的算法题精妙解法。给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例1:输入: [4,1,2,1,2]输出: 4题目其实非常简单,在此记录一种精妙解法,先把答案列出:public int singleNumber(int[] nums) { int ans = nums[0]; if (nums.length > 1) { for (int i = 1; i <...

2021-09-06 14:43:48 5342

原创 oracle连接并获取外部数据库

创建外部数据库的dblinkcreate public database link 数据库链接名 connect to 数据库名 identified by 数据库密码 using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 主机号)(PORT = 端口号)))(CONNECT_DATA =(SERVICE_NAME = 数据库服务名)))';SELECT * FROM 表名@数据库链接名;...

2021-09-06 14:29:05 411

原创 java在word中插入图片的一些问题

生成方式是用doc或者docx格式的模板,然后用流将内容写入。大概的代码如下:byte[] modelByte = Files.readAllBytes(Paths.get(inputUrl));Template<WayTemplate> template = new Template<>(wayTemplate);byte[] resultByte = devSiteBusiness.fillWordDataByDomain(modelByte, template

2021-08-19 22:03:15 1657

原创 maven打包成功但项目启动时找不到其他包的内容

手动导入一个新项目的时候可能会发生这种情况:maven全部都打包完成后,启动项目的时候报错,找不到这个类,可是打包是正常的,鼠标点击也能点进去,只有启动的时候说找不到。经过各种检查都是正常的,无奈上网查了查,有的说可能是IDEA2020.1的一个bug,不管怎样,解决方案如下:在maven命令行中执行idea:idea后,这个问题成功解决。...

2021-08-03 17:05:49 673 1

原创 Tomcat服务端部署成功但外部访问不到

在服务器上部署好了tomcat,但是在外部拿浏览器访问服务器IP:8080却无法访问到。排查:1.确认tomcat确实启动成功,在服务器中:curl 服务器IP:8080 看是否有返回html代码。2.关闭防火墙3,给8080端口号开通访问权限4,如果这样还是不行的话,最后也是最坑的一步就是,换个端口号试试。。。。。。。。。。比如我用的电信这个服务器因为8080端口号比较敏感就封了,换了端口号就可以了。。。。。。。。...

2021-01-23 09:17:21 1574

原创 windows搭建kafka入门

下载kafka包,官网解压出来。我的版本是2.6要启动kafka,要先启动zookeeper,这里使用kafka自带的zookeeper。修改config目录下的server.properties文件,修改log.dirs=F:\kafka_2.13-2.6.0\kafkaLogs可以新建一个文件夹用来存放kafka的数据信息存放地址。修改config目录下的log4j.properties文件,修改log4j.appender.kafkaAppender.File=F:/kafka_2.13

2021-01-09 15:04:19 132

原创 关于上传多文件的一些记录

做个记录备忘以Postman为例,前端发送请求时,使用Post请求,在Header中添加enctype = multipart/form-data(如果不能成功,可以把Header中的Content-Type去掉试试)入参使用body中使用表单提交类似,类型选择file:后端接收的话,注意方法的入参怎么接:public CommonResult<List<BaseFile>> upload(@RequestParam("files") MultipartFile[] fi

2021-01-09 09:21:53 88

原创 maven项目引入第三方jar包install失败

有时会从其他项目中得到所用jar包,jar包较多时,懒得一个个去找maven的地址,就直接引入项目了,但是引入项目后,在代码中是可用的,在maven的install的时候,就会报错。解决方法如下:在pom文件中加入对应jar包的配置,其他的都可以随便写,systemPath对应上第三方jar包就可以。 <dependency> <groupId>com.manege.shiro</groupId> <artifa

2020-12-16 16:06:36 1220

原创 错误码:4 服务器返回的错误消息:Failure的解决

向服务器上传文件时,出现这个错误。错误下面有提示,四种出现这种错误可能的情况,最常见的就是磁盘空间满了。使用df -h命令,查看服务器各磁盘的空间。看到有一个磁盘满了,首先想到的是日志的文件夹最容易满。到日志文件夹,果然有打印错误日志的文件有几十个G,打开一看,有一个异常在一直快速的向错误日志中写内容,所以很快就满了。先把服务关掉。先手动删掉了日志文件,然后发现空间还是满的,看来并没有删干净或者删除没有执行。使用 lsof | grep delete 命令查看删除进程,发现了很多没被删掉的

2020-12-14 16:28:42 8311

原创 Oracle数据库项目转MySQL数据库记录

首先是SQL脚本的修改,因为Oracle和MySQL的一些数据格式不同,要先将oracle修改成mysql的,比如NUMBER转为INT,VARCHAR2转为varchar。然后如果使用Hibernate的话,注意修改下方言。如果报这个错的话:Every derived table must have its own alias这个意思是字表必须要有自己的别名,如果看语句没有问题,那就查一下hibernate的方言,记得改成mysql的还有一些注解里的,主键生成策略中的记得要修改,毕竟mysql是没有

2020-12-14 15:29:49 149

原创 jar包加密防止反编译--classFinal

有这样的需求,我们项目要部署在其他公司的服务器上,但是又不想让外人看到我们的源码。所以要对jar包中的内容进行加密。加密方式一般有二,一是可以对class文件中的内容进行混淆,对类名和方法名等进行替换,使得代码阅读困难,但是不影响代码逻辑,多花时间还是可以解读出来的。二是对class文件进行一些操作加密,运行的时候再进行解密。网上找了几个,觉得还是classFinal这个比较满意,加密选择灵活,支持springboot项目,操作简单。项目地址:https://gitee.com/roseboy/cla

2020-11-23 11:31:14 8045 6

原创 《深入理解Java虚拟机》读书笔记(六)--HotSpot的算法细节实现

HotSpot虚拟机,使用JAVA的相信都不陌生。而前面讲的垃圾收集算法在运行时是怎样去保证其执行效率和正确性的呢?(这一段内容都很枯燥,可以暂时跳过,遇到的时候再返回来看)根节点枚举我们以可达性分析算法中从GC Roots集合找引用链这个操作作为介绍虚拟机高效实现的第一个例子。固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标明确,但查找过程要做到高效并非一件容易的事情,现在Java应用越做越庞大,里面的类、常量等更是恒河沙数

2020-11-19 14:42:00 227 2

转载 300行代码带你秒懂多线程

线程的概念,百度是这样解释的:线程(英语:Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(Lightweight Processes),但轻量进程更多指内核线程(Kernel Thread),而把用户线程(User Thread)称为线程。1.1 线程与进程的区别进程:指在系统中正在运行的一个应用程

2020-11-11 10:52:47 102

转载 15000 字的 SQL 语句大全,说得太好了!

一、基础1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server— 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’— 开始 备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create

2020-11-04 08:52:46 129

原创 创建对象的相关知识补充

创建对象有六种方法:一,使用new关键字这个不必多说了,是最常见和最常用的。二,Class对象的newInstance()方法Class clazz = Class.forName(className);Object obj = clazz.newInstance();三,构造函数对象的newInstance()方法Constructor constructor = Test.class.getConstructor();Test test = constructor.newInstanc

2020-10-22 14:54:27 146

原创 《深入理解Java虚拟机》读书笔记(五)--垃圾收集算法概述

从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。由于引用计数式垃圾收集算法在本书讨论到的主流Java虚拟机中均未涉及,所以我们暂不把它作为正文主要内容来讲解,本节介绍的所有算法均属于追踪式垃圾收集的范畴。分代收集理论当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(Generational Collection)[1]的理论

2020-10-21 16:01:26 178 3

原创 《深入理解Java虚拟机》读书笔记(四)--GC的回收条件及Java对象的引用

前面介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由即时编译器进行一些优化,但在基于概念模型的讨论里,大体上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性, 在这几个区域内就不需要过多考虑如何回收的问题,当方法结束或者线程结束时,内存自然就跟随着回收了。而Java堆和方法区这两个区域则有

2020-10-20 15:31:50 310

原创 《深入理解Java虚拟机》读书笔记(三)--堆栈异常代码示例

Java堆溢出:/***VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError*@author zzm*/public class HeapOOM { static class OOMObject { } public static void main(String[] args) { List<OOMObject> list = new ArrayList<OOMObject>(); while

2020-10-20 10:07:20 218

原创 《深入理解Java虚拟机》读书笔记(二)--对象的创建与空间分配及定位

Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程,本书第7章将探讨这部分细节。

2020-10-19 15:39:18 151

原创 《深入理解Java虚拟机》读书笔记(一)--java内存区域划分

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。程序计数器:(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里 ,字节码解释器工作时就是通

2020-10-19 13:35:34 152

原创 对于i++的原子性问题的详析

i++不是一个原子性操作,首先作为结论摆出这句话。那么什么是原子性操作?简单说就是该操作是不可分割的,或者说编译后的指令就是一句话。既然说i++不是原子性操作,那么是几步呢?是三步,那么如何证明呢?写一个最简单的代码来看看:public class Test{ public int i = 10; public void increase(){ i++; }}命令行中javac命令编译后,javap命令查看class文件的汇编解结果。结果如下:pu

2020-10-17 18:36:37 1091

原创 关于关键字volatile的一二

volatile关键字一般用来修饰变量。被volatile修饰的变量可以保证可见性和防止指令重排序,但是无法保证变量的原子性。什么是可见性,在JVM中,变量都存在主内存中,每个线程都有一个工作内存,工作内存中存放着该线程中要使用的变量。变量的值与是主内存的变量值的拷贝。当其中一个线程的的工作内存中的变量发生改变时,按理说应该马上将改变后的变量值更新到主内存中,这样其他线程在使用这个变量的时候,拿到的就是该变量最新的值。但是这个将新的变量值更新到主内存的操作,并不知道是什么时候执行,导致其他线程要从主内

2020-10-16 16:37:16 77

转载 二叉查找树的查询插入删除java代码实现

节点类:public class Node { int key; int value; Node leftChild; Node rightChild; public Node(int key, int value) { this.key = key; this.value = value; this.leftChild = null; this.rightChild = null; }

2020-10-14 13:24:50 78

原创 二叉查找树增删查简介

二叉查找树作为一个基本的数据结构,与二分法的线性查找有相似之处。二叉查找树:若其左子树存在,则其左子树中每个节点的值都不大于该节点值;若其右子树存在,则其右子树中每个节点的值都不小于该节点值。一个二叉查找树的图例如下:查找假如该二叉树是一个满二叉树的话,那么共有15个节点,树的高度是4,最多查找4次就可以找到树中任意一个值。可以得到: 15 = 2^4 -1;归纳为,如果有N个节点的满二叉树的话,查找次数为log2(N+1)次,那么查找复杂度就是log2N。假如每个二叉树每个节点只有一个

2020-10-13 17:26:18 104

原创 SQL语句的不常用方法记录

CONCAT():将多个列的值合成一个列,中间可以加其他字符串。例子:SELECT CONCAT(TRIM(m.id), "aaa ", TRIM(m.allprice)) AS concat_colFROM account m ;AVG():AVG方法是常用的,但是注意AVG() 会忽略 NULL 行,而且AVG()可以和DISTINCT 一起使用,效果是汇总函数值汇总不同的值。例子:SELECT AVG(DISTINCT aa.proprice) AS avg_col FROM accoun

2020-10-13 10:39:43 115

原创 使用C#写winform小程序入门

帮朋友要写一个自用的winform小程序,一开始打算拿java的swing写,可是发现太难用了,没用过的话,开发效率极低。所以就转C#写吧,反正C#和java很相近,减少很多学习成本。先说工具,C#一般对应的是SQLServer的数据库,安装稍有麻烦,我这有两个安装条件一直无法满足,算了,还是用mysql。开发工具的话,最常用的Visual Studio,最新版的单单是winform的功能就要5个G之大。。。。。。网上又搜了搜,发现一款叫Sharpdevelop的轻量级的C#开发软件可以用之。(使用时

2020-10-12 11:04:41 3642 1

原创 关于OptaPlanner的使用(三)——运行代码案例

打开下载的Optaplanner的示例的example的source文件件,可以看到这是一个maven的java项目,将这个项目导入到IDEA中,等待依赖jar包下载完成,就可以运行了。 项目结构大概如下:java文件下写的是对于各种情况的规划问题的代码,resource中写的是一些计算规则,比如使用什么算法计算,目标是得到什么结果,什么时候计算结束等。运行app文件下的OptaPlannerExamplesApp.java的main方法,就会打开之前的示例界面。和执行runExamples.bat

2020-08-28 15:13:30 1678 2

原创 关于OptaPlanner的使用(二)——运行案例

以案例中的Cloud Balancing为例,这是一个给任务分配计算机的规划任务。我们可以看到上面的Unassigned的是未被分配的任务,每个任务有CPU,内存,网络带宽三个参数,计算机也有这三个参数还有一个使用成本(这个成本是怎么算出来的没找到。。。。)。这个例子的目标就是把任务分配给计算机,硬规则是任务所占用的CPU,内存等参数不能超过计算机对应的参数,而且这个数值是累加的,如果一个计算机里有两个任务,计算机的参数的剩余量要减去两个任务参数的和才行。软规则是要使得计算机的使用成本尽量的小。以4

2020-08-28 10:31:49 1004

原创 关于OptaPlanner的使用(一)——简介

最近项目中有个要给司机排班的需求,自己写了一个可用的算法。看到网上介绍说有这个可以实现统筹规划的规则引擎OptaPlanner,学习一下,看能否满足需求进而可以替换掉自己写的算法。可以用的地方就是需要一些排班,调度等方面的时候,当情况比较复杂,使用人力无法轻易得到一个相对最优的计划时,可以使用计算机的高处理速度,在当前的资源条件下,得到一个细致的执行命令,实现相对最优的资源配置。先来说一下业务规则的种类:一种是硬规则,另一种是软规则。硬规则就是一些必定不能违反的规则,例如一个产品所使用的原料必然是指定范

2020-08-27 17:35:59 2750

原创 springboot打包发布到windows环境上中文乱码问题

平时项目是发布在Linux上的,Linux的默认编码是UTF-8,所以代码的格式一般也是UTF-8。但是windows环境的默认编码是GBK,直接发布的话自然会有乱码,至于为什么本地开发的时候没有乱码,可能是因为使用了Tomcat等容器的原因吧。。。。乱码解决方案:start javaw -Dfile.encoding=utf-8 -jar 项目包名.jar加上-Dfile.encoding=utf-8即可!!!...

2020-08-12 15:17:57 1660

原创 看一看LinkedList的源码?

LinkedList底层通过双向链表实现,双向链表的每个节点用内部类Node表示。LinkedList通过first和last引用分别指向链表的第一个和最后一个元素。当链表为空的时候first和last都指向null。看一下LinkedList的属性:public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Clone

2020-08-07 16:16:07 115

原创 为什么对象设置为Null的时候会利于GC的回收?

最近在看ArrayList的源码,看到remove方法中,有这么一行代码: public E remove(int index) { rangeCheck(index); modCount++; E oldValue = elementData(index); int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy

2020-07-20 17:16:45 2258 1

原创 快速失败与失败安全简述

先摆概念:系统运行中,如果有错误发生,那么系统立即结束,这种设计就是快速失败(fail-fast)。系统运行中,如果有错误发生,系统不会停止运行,它忽略错误(但是会有地方记录下来),继续运行,这种设计就是失败安全(fail-safe)。打个比方,在dubbo中,有一个AbstractClusterInvoker,其中有两个实现类FailfastClusterInvoker和FailsafeClusterInvoker在dubbo的配置中,有一个cluster的属性,里面可以填“failfast”和“fa

2020-07-20 15:31:12 186

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除