自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhangjian8641的博客

一个渣渣的笔记

  • 博客(37)
  • 收藏
  • 关注

原创 函数式开发自定义排序方式进行排序

package com.test;import lombok.Builder;import lombok.Data;import java.util.ArrayList;import java.util.List;import static java.util.stream.Collectors.toList;/** * @author zhangjian */@Data@Builderpublic class Value { private int val1;

2021-07-12 14:21:48 244

转载 数据库读写分离数据延迟解决方案

一、数据库系统架构发展1、主备架构业务发展的前期,数据访问量小,这时我们可以直接采用单库的架构。不过我们一般不使用的上面的架构,因为存在单点的问题。若数据库出现故障,这段期间业务将会不可用。我们除了等待重启,其他没什么解决办法。所以我们会增加一个备库,实时同步主库的数据。一旦「主库」出了故障,通过人工的方式,手动的将「主机」踢下线,将「备机」改为「主机」来继续提供服务。这种架构,部署维护简单,业务开发也无需任何改造。不过缺点也很明显,备库只有在主库有问题的时候才会被启用,存在一定的资源浪费

2020-12-10 19:27:10 3470 3

原创 优化SQL分页语句

下面以Mysql来举例说明。SELECT * FROM operation WHERE type = 'SQLStats' AND NAME = 'SlowLog' ORDER BY create_time LIMIT 1000, 10;先看上面这条SQL,是不是就是我们平时写的分页SQL,如果数据库大的时候,我们会在数据库中用 type, name, create_time 字段上加组合索引,以此达到优化的目的。但当 LIMIT 子句变成 “LIMIT 1000000,10” 时,你会发现S

2020-11-26 15:53:53 274

原创 Java后端返回前端的日期差9小时?

当后端返回Date类型到前端的时候,需要在实体中增加@JsonFormat注释,这个可以帮我们处理格式化,很多人都是用下面这种写法。@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")这样写大部分时候都不会有问题,但是有可能会出现加了8小时还是少了1小时的问题。这是因为GMT+8代表的是东时区,不代表中国时区,Asia/Shanghai 这个代表的是中国的时区,但在历史中,有国家(包含中国)政策

2020-11-26 11:04:43 660

原创 Monodb日期存储差8小时分析与解决,同时引出时间分析

1、时间标准UTC(世界标准时间)其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。GMT(格林尼治平时)位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。CST(北京时间)中国标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为GMT+8。2、java中的时间我们在java中new一个时间对象,看一下是怎么样的时间。通过上图可以看出,这个时间是CST,同时还是Asia/Shanghai地区的。这就奇怪了,程序是怎么知道我们的所在地区呢

2020-11-26 10:56:25 4022 1

原创 PostgreSQL备忘笔记

什么是PostgreSQLPostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),完全开源,集关系与非关系于一身。由于前身为加州大学伯克利分校计算机系的学术研究系统,用于商业的时间比较晚,所有国内社区还不是很丰富。数据类型大部分类型与其他SQL差不了太多,主要讲解一下text,json这两个类型,其他类型可以通过下面的官方文档链接进行查看。text:与其他数据库不同,pgsql中的text类型没有长度限制;json:其中有分为json和jsonb,json会输出和输入完全相同的

2020-10-22 19:33:08 336

原创 Oracle迁移到PostgreSQL实战记录

本篇将介绍Oracle迁移到PgSQL的实战经验,使用的方法是Navicat提供的,具体的方法可行性和操作可以看我之前的介绍。不同数据库之间的数据迁移方案:https://blog.csdn.net/zhangjian8641/article/details/108377225迁移Oracle数据表结构到Pgsql中在Navicat中找到数据传输,填写源数据和目标数据点击选项只选择传输表结构然后 下一步选择要传输的表 再 下一步等待传输完成 即可。修改表结构1、将有了表结构的Pgsql的表

2020-10-20 11:21:55 7451 1

原创 java heap space 与 GC overhead limit exceeded 内存溢出相关问题分析处理

前言最近写了个复杂的数据处理程序,测试的时候在小数据量的场景下一点问题都没有,当时当部署到生产环境,发现执行不了,报了 java heap space 和 GC overhead limit exceeded 的错误,由于jvm的内存我们都是给最大的,而且明明内存都没满,怎么就报错了,只能从代码入手看是什么问题。问题介绍java heap space:内存溢出GC overhead limit exceeded:JVM花费了98%的时间进行垃圾回收,而只得到2%可用的内存问题重现我使用的电脑

2020-10-17 14:16:19 1561

原创 Java中将方法作为参数进行传递的实现

在Java8中引入了一个函数式接口Consumer的对象,该对象可以把方法作为参数进行传递。实例如下:package com.test;import org.junit.jupiter.api.Test;import java.util.function.Consumer;public class ForkJoinTest { @Test public void test() { //利用函数式接口Consumer的accept方法实现打印,Lambda表达

2020-10-14 17:32:36 11946 1

原创 java中ForkJoin框架的使用

什么是Fork\Join框架从JDK1.7开始,Java提供Fork/Join框架用于并行执行任务。它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。如下图:如何实现Fork\Joinjava 的ForkJoinTask 抽象类中提供compute方法给我们实现这种思想。java又提供两个抽象类继承ForkJoinTask ,分别是:RecursiveTask有返回值,RecursiveAction无返回值。java7代码实例1、定义一个实体类packag

2020-10-12 17:30:18 206

原创 java.util.Calendar 日历类

Calendar.YEAR: 年Calendar.MONDAY: 月Calendar.WEEK_OF_YEAR:周Calendar.DAY_OF_MONTH:天Calendar.HOUR: 时Calendar.MINUTE: 分Calendar.SECOND: 秒calendar =Calendar.getInstance(); //实例一个日历int year = calendar.get(Calendar.YEAR);System.out.

2020-09-25 11:13:12 108

原创 Java中使用枚举来Switch

最近写需求的时候,遇到了这个问题,记录一下写法。1、枚举类package com.model.dto;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import lombok.AllArgsConstructor;import lombok.Data;import lombok.Getter;import javax.validation.constraints.

2020-09-24 17:14:37 536 1

原创 springboot编写netty-socketio实例

socket基础:https://blog.csdn.net/zhangjian8641/article/details/108615804上一篇记录了基础的Socket,本篇将结合springboot一起使用socket1、引进Maven<dependency> <groupId>io.socket</groupId> <artifactId>socket.io-client</artifactId> <ver

2020-09-16 20:12:56 828 1

原创 java基础socket实例

什么是SocketSocket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。套接字Socket=(IP地址:端口号)Socket是以 TCP/IP 协议进行通讯图片来源:https://www.runoob.com/w3cnote/android-tutorial-socket1.html从上面的模型可以看出,Socket是一个长连接,可以在连接结束前进行多次通讯。实现Socket下面用代码实现一下上面的图。Server服务器package com.exa

2020-09-16 20:12:14 161

原创 IDEA在XML中提示SQL和运行SQL

在IDEA编译器中,我们除了能在上面编写代码,其实,IDEA还提供了连接数据库的功能,我之前也介绍了如何用IDEA生成实体类,还不知道的朋友可以看一下下面这篇文章了解一下:https://blog.csdn.net/zhangjian8641/article/details/107718153除了这个功能,我今天才发现原来配合MyBatis的时候,还能用来提示SQL和运行测试。连接数据库编写XML数据库连接好后,我们可以打开一个XML文件进行编写MyBatis,当我们要输入表名或者字段名的时候

2020-09-09 14:26:01 4873 5

原创 Redis应用场景记录

首先了解一下什么是redis,redis是一个key-value存储系统,支持存储的value的类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。当然,redis与其他NoSql的最大不同,就是能够设置超时时间,很多场景都是通过这个来实现的,下面将介绍我知道的几个场景,后续如果有其他的也会补充进来。热点数据缓存由于redis访问速度块、支持的数据类型比较丰富,所以redis很适合用来存储热点数据。将关系型数据库中查询

2020-09-09 09:56:27 94

原创 不同数据库之间的数据迁移方案

最近项目有可能从oracle转到pgsql,这中间就会涉及到数据库的迁移,网上搜了一下,发现都是在说用Ora2Pg进行转换,我在服务器上怎么装都没装成功,就想还有没有别的方法。然后无意中想到以前用Navicat传输数据,就去看了一下,发现Navicat还真的提供数据库迁移功能。步骤:打开Navicat -> 工具 -> 数据传输迁移后的结构样子:有问题的数据:其中发现NUMBER的数据迁过来都变成1000位的0了,至于有没有其他的问题,待后续慢慢了解,至少知道这个方法是可行的。这

2020-09-03 13:53:59 3490

原创 Linux安装PostgreSQL设置远程访问(在线+离线)

在线安装 RPM包yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm安装客户端软件包yum install postgresql12安装服务器软件包yum install postgresql12-server启动service postgresql-12 initdbchkconfig postgresql-12 o

2020-09-03 10:01:48 2615 2

原创 mongodb如何查询大于某个字符串数值

当把一个数值类型存成了字符串,如何对该字符串进行数值比较。先上mongodb中的数据结构:db.test1.insert({ "modelId": "111", "patientId": "222", "patientName": "333", "sex": "14", "birthday": "2020-08-06", "count": "10"})现在我们要写一个查询语句,查询出count > 2的SQL,正常我们都会想到 $gt

2020-08-27 10:58:02 4458

原创 Springboot整合cache缓存到redis

如果不知道怎么用cache的,可以先点击下面的链接了解:https://blog.csdn.net/zhangjian8641/article/details/108120384本篇主要讲解怎么把cache与redis结合起来,用过cache的都知道,它默认是缓存到本地的。1、引入MAVEN<dependency> <groupId>org.springframework.boot</groupId> <artifactId>

2020-08-26 20:22:55 234

原创 org.apache.commons.collections.MapUtils Map集合工具类

1、MapUtils<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.2</version></dependency>包:org.apache.commons.collections4public stati

2020-08-20 19:40:05 4642

原创 Springboot整合Ehcache缓存

EhCache是一个比较成熟的Java缓存框架,最早从hibernate发展而来, 是进程中的缓存系统,它提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案,快速简单。网上很多教程都没说完整,本1、引入MAVEN<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache&l.

2020-08-20 19:26:20 647

原创 解决 Java 泛型类型转换时的警告

最近在编写代码的时候,遇到了一个问题,当在Mongodb中查询到Map数据的时候,由于这个Map的结构不固定,没办法用实体来接收封装,就只能用Map来接收,但是没办法返回Map泛型,需要用到强转来处理数据,导致IDEA会出现警告,这对于我这种有强迫症的选手来说,看着贼难受,就想怎么才能消除掉警告。具体代码如下:LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>)lists.get(0)

2020-08-13 15:06:05 3793

原创 Java中处理Mongodb实例

最近项目中用到Mongodb,遇到问题在网上查找发现很多都写的很模糊,本文用来记录我已使用过的Mongodb实例,后续有新的实例会补充进来。首先说明,我使用 spring-data 的 MongoTemplate 来操作 Mongodb 的,操作很简单,就是将MongoTemplate注入到项目中,使用里面的API操作就行了,这个不用多说,真正麻烦的是如何拼接Query这个条件。Query:用来封装所有条件对象Criteria:用来构建条件查看了Criteria的API源码,这个对象有下

2020-08-11 20:08:01 978

原创 Lombok+Builder构建实体类

以前的java实体类,代码中充斥着各种的get,set,构造等方法,这些代码既浪费时间又影响代码的美观,于是Lombok工具就问世了,使用Lombok可以用注解的方式取代这些方法。1、引入Lombok的Maven包<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency>2、安

2020-08-11 17:34:33 1261

原创 java数组String[]与列表List相互转换,解决转换后add,remove报错问题

1、String[] 转ListString[] strs = new String[]{"1", "2", "3"};List<String> strLists = Arrays.asList(strs);2、List转String[]List<String> strLists = new ArrayList<>();strLists.add("1");strLists.add("2");strLists.add("3");String[...

2020-08-05 14:28:41 557

原创 JAVA函数式编程实例笔记

1、剔除不在集合内的结果,得到新的集合List<UserDto> list = userDtoList.stream().filter(r -> ids.contains(r.getId())).collect(Collectors.toList());2、剔除不在集合内的结果同时对Id去重,得到新的集合List<UserDto> list = userDtoList.stream().filter(r -> ids.contains(r.getId())

2020-08-05 11:17:49 152

原创 AOP实现之自定义开发

一、AOP是什么?AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,...

2020-08-02 16:33:52 498

原创 IDEA自定义Generate POJOs.groovy生成实体 - JPA+Lombok的模板

最近做新项目,项目中没有引入自动生成的代码,要手写实体,好麻烦,就上网搜了一下IDEA工具有没有什么插件可以自动生成,没想到好真的有,用这篇文章记录一下整个过程,毕竟中间还是遇到了好几个问题。1、打开Database工具Tab页,连接数据库,找到要生成实体的表,右键选择按照那个模板生成就可以了。但是,网上说有人没有这些,他们说重新下载一个新的版本就可以了,我也没遇到,所有也不是很清楚。2、现在生成的操作过程都清楚了,下面就是怎么自定义生成模板,我自己修改了一份JPA实体模板,如下:

2020-07-31 17:56:54 1598 5

原创 Oracle中IN的集合不能大于1000条的处理方法

最近用Oracle开发,发现Oracle跟Mysql还是有很多细微之处不一样,例如本文记录的IN的内容不能大于1000条的问题,我在mysql好像没有遇到过,之前只听说IN语句混影响性能。好的,废话不多说,遇到这个问题,我找了几种方法处理:一、拆分SQL最简单的方法,将总集合拆分为每999个为一集合,每个集合单独一条SQL查询,将每个查询结果用UNION ALL合并起来。SELECT * FROM T_USER WHERE USER_ID IN ('114664882678267904',

2020-07-30 16:03:09 536

原创 Linux超大日志查询遍历命令记录

之前在工作中遇到了一个日志文件,一个9G的文件,在Linux上。现在生产环境出现问题,需要日志排除,不知道怎么办,后来同事说有Linux命令可以解决这个问题,试了一下真的可以,记录起来。遍历查询内容cat catalina.out | grep 经销商银行卡遍历查询内容生成文件grep -i "aaa" -A 1 ?1.txt | grep -v ?-e ?"--" >2.txt其中 “经销商银行卡” 和 “aaa”就是要查询或导出的内容...

2020-07-30 11:11:02 421

原创 Docker常用命令记录

一、什么是Docker?Docker 是一个开源的应用容器引擎。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。二、Docker的应用场景Web 应用的自动化打包和发布。 ...

2020-07-30 10:45:00 122

原创 Linux上安装kafka(避过了很多坑)

1、安装zookeeper[root@wzq opt]#wgethttp://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz[root@wzq opt]#tar zxfzookeeper-3.4.12.tar.gz 也可以自己下载解压:http://zookeeper.a...

2019-08-11 22:18:21 632

原创 基础排序算法整理(java实现了一小部分)

最近在看算法的书,发现书中都是用C语言进行代码示例,所以写了一篇java示例的排序算法进行整理。一、桶排序(最快,最简单,浪费空间)桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。这个算法就好比有11个桶,编号从0~10。每出现一个数,就将对应编号的桶中的放一个小旗子,最后只要数数每个桶中有几个小旗子就OK了。例如2号桶中有1个...

2019-01-13 23:29:38 217

原创 java-string-api

首先,字符串的操作是计算机程序设计中最常见的行为。一、String(不可变对象)提到字符串,就必定会想到String关键字,但String不是java的八大基本类型之一。至于它的特性,只读性,下面我们来看一段代码:String str = &amp;amp;amp;quot;abcdefg&amp;amp;amp;quot;;System.out.println(str);str = &amp;amp;amp;quot;1234567&amp;amp;amp;

2018-07-16 17:30:15 176

原创 Java客户现场运行环境(Window)

一、window系统有些坑爹的客户现场买了工作站或者服务器,居然连系统都没有,只能自己用U盘或者光盘来装系统,装系统的时候如果该电脑是第一次装系统,或者找不到磁盘去分区,就要进入BIOS(基本输入输出系统)里面进行设置硬盘模式。 有篇文章有介绍:http://www.kqidong.com/bios/1605.html二、JDK1. 下载JDK下载地址:http://ww...

2018-07-12 16:23:03 268

原创 整合文档谈Java容器

一、面试题引发的故事一个字符串,如何统计这个字符串里的每个字符出现的次数?String str = &amp;amp;amp;amp;amp;amp;quot;2hin2hbyb2bhbhbvas&amp;amp;amp;amp;amp;amp;quot;;String key;Map&amp;amp;amp;amp;amp;amp;amp;lt;String, Integer&amp;amp;amp;amp;amp;amp;amp;gt; map = new H

2018-07-03 11:44:22 187

空空如也

空空如也

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

TA关注的人

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