自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 springboot使用SHA256加密算法对接口访问控制

使用场景由于业务系统较多,且存在很多个提供给第三方系统的查询接口,第三方系统属于外部系统,个别系统在调用内部系统接口时可能存在安全风险,在周五项目组评审后决定,在对外提供的接口中,请求方需要添加私钥请求校验,我方使用 SHA256 算法计算签名,然后进行Base64 encode,最后再进行urlEncode,来得到最终的签名。周末闲来无事,简单研究一波(基于内网中其他系统已有的类似功能,结合外网资料)。学习使用创建一个简单的springboot项目,目录结构如下:由于并不是对所有接口进行过滤验证

2020-05-31 17:31:03 8343 3

原创 服务器迁移导致的C3P0连接池死锁问题

问题背景昨天一个朋友忽然间问有没有jvm调优的经验,因为本身是没有的,本着学习的精神,决定帮忙研究一下看看怎么做熟悉一下流程。问题内容如:https://bbs.csdn.net/topics/392189936叙述一致,为什么会认为需要jvm调优相关呢,原来通过他自己的排查,看了一些gc情况,截图上s0已经达到了99.99. 分析过程从他的角度继续分析,先去排查了一下gc情况,但是过了一会gc就一切正常了,可能那个时间节点下暂时出现的99.99。。。按照他的描述,程序在进入controller层后,

2020-05-29 19:54:22 234

原创 腾讯课堂Redis简单学习

1.redis核心数据结构redis核心数据结构有5种:string,hash,zset,list,set2.应用场景String应用场景单值缓存,对象缓存:利用JSON强大的兼容性、可读性和易用性,将对象转换为JSON字符串,再存储在string类型中,是个不错的选择,如用户信息、商品信息等。分布式锁:Redis 是单线程,多路复用方式提高处理效率。我们可以借助中间件Redis的setnx()命令实现分布式锁。setnx()命令只会对不存在的key设值,返回1代表获取锁成功。对存在的key设值

2020-05-28 20:56:00 258

原创 Oracle数据库order by查询问题

问题背景由于项目使用Oracle数据库,自然对数据库的操作比较多,近日工作内容是查询某一张数据库表,数据库表有27列属性,表中数据量大约60多万。其中索引信息如下:sql内容如下:查询条件使用了主键,并且最后按照主键中的gmt_create进行排序,表中数据大约60多万条,按照很正常的思路,用工具查询一下,预估一下时间损耗。如图可知查询效率还算客观,所以将项目部署。问题出现使用postman进行自测验证:竟然达到了可怕的70s,项目日志打印情况来看,接口响应只占用了2ms左右,故而排除

2020-05-27 13:24:49 563

原创 IO网络编程(四)

netty客户端的创建(简单入门)netty客户端创建时序图步骤 1:用户线程创建 Bootstrap实例,通过 API设置创建客户端相关的参数,异步发起客户端连接。步 骤 2: 创 建 处 理 客 户 端 连 接、I/O 读 写 的 Reactor 线 程 组NioEventLoopGroup, 可以通过构造函数指定 I/O 线程的个数,默认为 CPU内核数的 2 倍;步骤 3:通过 Bootstrap 的 ChannelFactory 和用户指定的 Channel 类型创建用于客户端连接的 Ni

2020-05-25 19:03:09 220

原创 IO网络编程(三)

netty服务端的创建netty服务端创建时序图步骤 1:创建 ServerBootstrap 实例。ServerBootstrap 是 Netty 服务端的启动辅助类,它提供了一系列的方法用于设置服务端启动相关的参数。步 骤 2: 设 置 并 绑 定 Reactor 线 程 池。Netty 的 Reactor 线 程 池 是EventLoopGroup,它实际就是 EventLoop 的数组。EventLoop 的职责是处理所有注册到本线程多路复用器 Selector 上的 Channel,Se

2020-05-24 20:03:33 161

原创 IO网络编程(二)

NIO简介有人称之为 New I/O,因为它相对于之前的 I/O 类库是新增的,所以被称为 NewI/O,这是它的官方叫法。但是,由于之前老的 I/O 类库是阻塞 I/O,New I/O 类库的目标就是要让 Java 支持非阻塞 I/O,所以,更多的人喜欢称之为非阻塞 I/O(Non-block I/O),由于非阻塞 I/O 更能够体现 NIO 的特点,所以本文使用的NIO 都指的是非阻塞 I/O。IO是面向流的,NIO是面向缓冲区,面向块的。NIO相关的包都在java.nio包下,并且对原来java.

2020-05-22 14:38:53 132

原创 Java注入的奇怪问题

问题复盘2020.05.21晚上十点开始系统升级,由于事先发布灰度环境,并且验证接口返回没有问题,因为对接方暂未升级,所以返回数据一致为空。此为背景。在22号0点左右,对接方数据接入,但是接口返回结果仍然为空,日志打印正常,根据日志中打印的查询条件,使用工具顺利查出若干条数据,然而程序中没有任何异常报错信息,对于问题的排查只有一点点的通过代码分析。项目背景由于对接方是使用的mongdb数据库,我方进行对应条件查询,查询索引,字段等信息在测试环境均做过完整验证,不存在任何问题,因此生产环境只需要对mon

2020-05-22 10:16:43 171

原创 IO网络编程(一)

Netty入门1.传统的BIO编程网络编程的基本模型是 Client/Server 模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的 IP 地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。在基于传统同步阻塞模型开发中,ServerSocket 负责绑定 IP 地址,启动监听端口;Socket 负责发起连接操作。连接成功之后,双方通过输入和输出流进行同步阻塞式通信。

2020-05-21 16:44:07 191

原创 JVM相关理论知识

JVM 内存区域在 Java 中,JVM 内存区域主要是指的运行时的数据区,主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。1.堆对于大多数应用来说,堆是java虚拟机管理内存最大的一块内存区域,因为堆存放的对象是线程共享的,所以多线程的时候也需要同步机制。注意:它是所有线程共享的,它的目的是存放对象实例。同时它也是GC所管理的主要区域,因此常被称为GC堆。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,最后 Survivor 由 From Survivo

2020-05-20 20:10:42 140

原创 学习系列之并发编程(五)

Java内存模型——JMM简介在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java 5开始的JSR-133发布后,已经成熟和完善起来。JMM规定了内存主要划分为主内存和工作内存两种。此处的主内存和工作内存跟JVM内存划分(堆、栈、方法区)是在不同的层次上进行的,如果非要对应起来,主内存对应的是J

2020-05-19 15:18:18 122

原创 MySQL中删除重复数据要求最终只保留一条

今天有小伙伴打电话寻求一个SQL相关的问题,大致是在表中存在重复数据,需要删除掉重复数据保留一条的场景,因为没有说明具体删除规则,怎么简单怎么来吧,研究后决定尝试一下,思路是删除表中多余的重复记录(多个字段),只留有rowid最小的记录。1.数据准备MySQL数据库中有一个goods表,表中手动插入一些数据,最终表的内容如下:2.思路分析按照原来设计思路,4,5,6明显是重复数据,想要保留id为4的这行记录。首先,对数据内容进行简单抽离,先查询出先查询出重复字段:SELECT goods_de

2020-05-17 17:41:06 1492

原创 学习系列之并发编程(四)

CAS1、什么是CAS?CAS:Compare and Swap,即比较再交换。java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。

2020-05-15 19:42:37 144

原创 学习系列之并发编程(三)

多线程队列在 Java 多线程应用中,特别是在线程池中,队列的使用率非常高。Java 提供的线程安全队列又分为了阻塞队列和非阻塞队列。1. 阻塞队列在 Java 线程池中,用到了阻塞队列。当创建的线程数量超过核心线程数时,新建的任务将会被放到阻塞队列中。我们可以根据自己的业务需求来选择使用哪一种阻塞队列,阻塞队列通常包括以下几种:ArrayBlockingQueue:一个基于数组结构实现的有界阻塞队列,按 FIFO(先进先出)原则对元素进行排序,使用 ReentrantLock、Condition

2020-05-14 16:55:08 120

原创 学习系列之并发编程(二)

线程池

2020-05-13 16:00:55 155

原创 java四大函数式接口简要学习

函数式接口java8开始,内置了四大默认的函数式接口,函数式接口是只有一个方法的接口。函数式接口对于简化代码来说有很大作用,四大接口分别是:Consumer :消费型接口 void accept(T t);Supplier :供给型接口 T get();Function<T, R> :函数型接口 R apply(T t);Predicate :断言型接口 boolean test(T t);Func

2020-05-12 13:25:40 216

原创 学习系列之并发编程(一)

简介1.JUC简介在Java中,线程部分是一个重点。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。2.线程与进程1.进程与线程进程是指处于运行过程中的程序,并且具有一定的独立功能。进程是系统进行资源分配和调度的一个单位。当程序进入内存运行时,即为线程。简而言之,进程是一个程序,或者是一个程序集合。一个进程包含至少一个或多个线程。java中默认开启的线程:main线程和gc线程java开启多线程的方法:Thread,Run

2020-05-10 10:32:31 146

原创 ForkJoin简单入门

简介ForkJoin框架介绍从JDK1.7开始,Java就提供了ForkJoin框架用于并行执行任务,然而真正发扬光大的是在JDK1.8以后,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。ForkJoin框架其实就是一个线程池ExecutorService的实现,通过工作窃取(work-stealing)算法,获取其他线程中未完成的任务来执行。可以充分...

2020-05-08 18:55:17 260

原创 InfluxDB简单学习

1.InfluxDB介绍InfluxDB用Go语言编写的一个开源分布式时序、事件和指标数据库,和传统是数据库相比有不少不同的地方。类似的数据库有Elasticsearch、Graphite等。特点提供了Http接口的API来操作数据提供了类似sql的数据库语句2.InfluxDB相关名词术语介绍其中,Point由时间戳(time)、数据(field)、标签(tags)组成。还有一...

2020-05-07 15:52:07 213

原创 springboot基于SpEL实现mongodb动态查询collection

背景以往一直在程序中写死的mongodb查询collection,对于频繁改动的mongodb来说,每次更改都要进行代码修改,费时费力还有风险,故而希望使用动态配置的方式来进行collection查询。以往映射关系如下:由于需要动态配置,首先想到将collection信息存储在zookeeper配置中心里(项目组使用zk做配置中心),所以希望使用@Value的形式来获得,但是由于mongd...

2020-05-06 16:45:25 1700 1

文件上传下载模板-excel模板下载,按照模板内容可以插入到对应表

文件上传下载模板-excel模板下载,按照模板内容可以插入到对应表

2023-05-05

SpringBoot经典学习笔记.pdf

网络上传播的关于springboot的开发学习笔记,适用于初学者在入门阶段学习使用,关于注解开发还有一些底层简单实现。

2020-06-01

空空如也

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

TA关注的人

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