- 博客(285)
- 资源 (8)
- 收藏
- 关注
原创 笔记——maven使用dependencyManagement
遇到问题:父工程在dependencyManagement明确了引入,但是子工程一直报错找不到<dependencyManagement> <dependencies> <!--引入springcloud的版本--> <dependency> <dependency> <groupId>com.al.
2021-08-26 11:44:36
334
原创 分批次处理查询数据
public void addQuickShot() { long startId = 0; int size = 500; while (true) { List<EhrStaffPO> ehrStaffList = iEhrStaff.batchAllStatusStaffs(startId, size); if (CollectionUtils.isEmpty(ehrStaffLis...
2021-08-09 12:01:19
384
原创 根据范型,String转class
1、jacksonlist情况ObjectMapper mapper = new ObjectMapper(); JavaType javaType = mapper.getTypeFactory().constructCollectionType(List.class, EhrStaffMysteryInfoVO.class); return mapper.readValue(result, javaType);2、fastjs
2021-06-23 17:05:44
605
原创 AOP_SpringBoot——整合filter
1.springboot通过扫描注解,@ServletComponentScan和@WebFilter实现1.1编写FirstFilter类实现Filter接口package com.zhong.spring_boot_filter_03.filter; import java.io.IOException; import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterC
2021-06-08 17:47:58
159
原创 Elasticsearch——1、创建
1、属性PUT /vacation_record_index{ "mappings": { "doc": { "properties": { "id": { "type": "long" }, "staffId": { "type": "long" .
2021-06-02 11:47:12
245
原创 重试多次逻辑
private Optional<String> getQps(int count) { if (count == GET_QPS_MAX_RETRY) { LOG.error("在服务启动时候获取限流QPS阈值失败"); return Optional.empty(); } try { return dynamicConfigClient.get(COMMONS_R...
2021-05-10 16:15:45
119
原创 computeIfAbsent,computeIfPresent,compute
public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>();// map.put("1", 1); map.put("2", 2);// map.put("3", 30);// map.put("4", 40); //不存在,则添加。存在则不改变 I...
2021-04-25 17:21:03
148
原创 重试机制-aop
package com.fenbi.ep.ehr.server.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(.
2020-12-21 16:25:31
396
原创 反射获取属性值
public static Map<String, Object> getValueByIgnoreProperty(Object targetObj, String... ignoreProperties) { PropertyDescriptor[] targetPds = getPropertyDescriptors(targetObj.getClass()); List<String> ignoreList = (ignoreProperties != n..
2020-12-18 19:04:44
293
1
原创 编程规范——需要在Transactional注解指定rollbackFor或者在方法中显式的rollback。
方法【updateStaffByGarden】需要在Transactional注解指定rollbackFor或者在方法中显式的rollback。 Inspection info: 事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。 Positive example 1: /** * @author caikang * @date 2017/04/07 */ @Service @Transaction.
2020-09-12 11:24:00
11554
原创 Thrift——mac环境入门实践
1、安装thrift终端使用命令,安装homebrew/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"然后 安装thrift 0.9.3(网上随便一个教程跟着做)2、使用thrift生成Java文件在命令行中进入user.thrift所在的目录,然后执行thrift -r -gen java user.thrift.会发现在当前目录下生成了gen-java文件
2020-08-19 20:26:47
1005
原创 笔记——使用IDEA创建springboot项目时,出现错误Cannot download ‘https://start.spring.io‘: connect timed out
使用阿里代理的。https://start.aliyun.com/
2020-08-03 13:53:02
463
原创 jdk8新特性-4、Stream流式计算
概述:java8的流式处理极大的简化了对于集合的操作,实际上不光是集合,包括数组、文件等,只要是可以转换成流,我们都可以借助流式处理,类似于我们写SQL语句一样对其进行操作。java8通过内部迭代来实现对流的处理,一个流式处理可以分为三个部分:转换成流、中间操作、终端操作。如下图:/** * @Author zongx * @Date 2020/7/30 14:23 * @Version 1.0 */public class StreamTest { List<Use
2020-07-31 17:21:33
795
2
原创 笔记——快速创建百万级容量表
create table order_history(id int PRIMARY key auto_increment,type int,score int,name VARCHAR(255),phone VARCHAR(255))insert into order_history(type,score,name,phone) select type,score,name,phone from order_history;UPDATE order_history SET name .
2020-07-10 13:55:42
192
1
原创 JVM——简单了解 OOP-Klass 二分模型
OOP和klass的概念HotSpot中采用了OOP-Klass模型,它是用来描述Java对象实例的一种模型OOP或OOPS(Ordinary Object Pointer)指的是普通对象指针,主要职能是表示对象的实例数据,存储在堆里面 Klass用来描述对象实例的具体类型,实现语言层面的Java类,存储在元空间(方法区)总体上是多个OOP和一个Klass是对应的. 相当于一个类可以有多个实例A a = new A() ; A a1 = new A();a,a1 分别对应着不同的OO..
2020-07-01 15:50:22
1286
原创 JVM——Java的内存回收
Java引用的种类对于JVM的垃圾回收机制来说,如果一个对象,没有一个引用指向它,那么它就被认为是一个垃圾。那该对象就会回收。可以把JVM内存中对象引用理解成一种有向图,把引用变量、对象都当成有向图的顶点,将引用关系当成图的有向边(注意:有向边总是从引用变量指向被引用的Java对象)1、可达状态当一个对象被创建后,有一个或一个以上的引用变量引用它,则这个对象在程序中处于可达状态,程序可以通过引用变量来调用该对象的方法和属性。GcRoot的种类1.虚拟机栈:栈帧中的本地变量表引用的对象.
2020-07-01 11:33:49
280
原创 多线程-JUC学习-线程池-线程池源码分析
1 内部状态 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); private static final int COUNT_BITS = Integer.SIZE - 3; private static final int CAPACITY = (1 << COUNT_BITS) - 1; // runState is stored in the high-o
2020-07-01 10:20:02
326
原创 多线程-JUC学习-线程池-线程池基本原理
1. 理解线程池基本原理1.1 线程池是用来干嘛的?如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。线程池使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务。1.2 使用线程池的好处降低资源消耗。重复利用已创建线程,降低线程创建与销毁的资源消耗。 提高响应效率。任务到达时,不需等待创建线程就能立即执行。 提高线程可管理性。 防止服务器过载。内存溢出...
2020-06-30 15:34:08
208
原创 笔记——使用idea 打jar包,报错找不命名空间处理器NamespaceHandler
1、Spring启动流程中,获取beanfatory的时候会进行xml文件的读取,其中命名空间与xml校验使用了META-INF下的文件:以beans举例:理论上应该长上面那样。但是我打的jar包里面:查了一下,说是打包的时候maven依赖冲突的原因。修改多余maven依赖,后正常。...
2020-06-28 17:04:50
515
原创 多线程-JUC学习-JUC集合-BlockingQueue
阻塞队列 BlockingQueuejava.util.concurrent 包里的 BlockingQueue 接口表示一个线程放入和提取实例的队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2)支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空BlockingQueue 用法BlockingQueue ...
2020-06-05 18:25:51
210
原创 多线程-JUC学习-JUC集合-Map
ConcurrentHashMap纸质版深入了解了1.8的原理。此处不进行整理。后面有时间加上1.ConcurrentSkipListMap1.1 ConcurrentSkipListMap介绍ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。 ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表。但是,第一,它们的线程安全机制不同,TreeMap是非线程安全的,而ConcurrentSkipListMap是线程安全的。第二
2020-06-05 15:10:08
252
原创 多线程-JUC学习-JUC集合-List和Set
1. CopyOnWriteArrayList1.1 CopyOnWriteArrayList介绍它相当于线程安全的ArrayList。和ArrayList一样,它是个可变数组;但是和ArrayList不同的时,它具有以下特性:它最适合于具有以下特征的应用程序:List 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。 它是线程安全的。 因为通常需要复制整个基础数组,所以可变操作(add()、set() 和 remove() 等等)的开销很大。 迭代器支持hasN
2020-06-05 14:59:29
361
原创 多线程-JUC学习-JUC集合-框架
1. List和SetJUC集合包中的List和Set实现类包括:CopyOnWriteArrayList,CopyOnWriteArraySet和ConcurrentSkipListSet。ConcurrentSkipListSet稍后在说明Map时再说明,CopyOnWriteArrayList 和 CopyOnWriteArraySet的框架如下图所示:CopyOnWriteArrayList相当于线程安全的ArrayList,它实现了List接口。CopyOnWriteArrayLi..
2020-06-05 14:44:27
241
原创 任务调度——Quartz定时任务调度
转载自有修改:https://www.cnblogs.com/diandianquanquan/p/12823442.html什么是QuartzQuartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能。Quartz应用场景在我们实际的项目中,当Job过多的时候,肯定不能人工去操作,这时候就需要一个任务调度框架,帮我们自动去.
2020-06-03 16:50:45
501
原创 SSO-使用Spring session解决session共享问题
1、代码实现 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency>
2020-06-03 11:27:49
503
1
原创 Nginx做负载均衡之后,每次请求JSESSIONID都发生变化
1、问题现象第一次点击确定第二次点击确定第三次点击确定2、问题出现原因:首先服务器session对应的sessionId是放在cookie中保存的,而前端请求到后端时由于每个可以达到不一样的后端,因此后端获取到cookie中的JSESSIONID时可能在内存中找不到对应的session就会判定为session失效而重新创建session,这样就会生成新的sessionId放在cookie中,那样的话在session中保存的信息就会失效3、Tomcat管理session机制
2020-06-03 10:13:19
5910
1
原创 最大堆优先队列
优先队列普通的队列是一种先进先出的数据结构,元素在队列尾部追加,从而队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下,计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,我们就可以使用一种特殊的队列完成这种需求,优先队列。最大优先队列API设计;类名:MaxPrior
2020-05-25 14:45:50
416
转载 求解重合区间的个数
package com.test;import java.util.Arrays;import java.util.Comparator;import java.util.Scanner; /** * 输入: * 第一行: 一个整数n, 代表之后要输入多少个区间 * 之后, 每行有两个数, 例如: 3 6 其代表区间[3, 6) * 输入实例: * 4 * 1 9 * 2 3 * 3 5 * 3 6.
2020-05-25 10:50:16
607
原创 SSO——单点登录: 仿CAS
单点登录大致原理如下:我们sso客户端访问需要登录的url 或者登录的url 直接跳转到sso服务端的登录页面(如果已经登录则直接跳转到访问的url)直接访问登录的url,sso客户端的拦截器会将其直接重定向到 sso服务端的登录页面并携带sso客户端访问地址。访问sso客户端需要登录的url(没有登录的情况下)会重定向到sso服务端单点授权验证逻辑中。如果该用户未登录则重定向到 sso服务端的登录页面并携带sso客户端访问地址。输入用户名和密码在sso服务端进行登录,如果用户名和密码错误则
2020-05-14 16:10:57
443
原创 SSO——单点登录: CAS 应用及原理
转载自https://zhuanlan.zhihu.com/p/945155821、基于Cookie的单点登录的回顾将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中取出用户名密码进行登录,让用户从某种意义上觉得只登录了一次该方式缺点就是多次传送用户名密码,增加被盗风险,以及不能跨域。如果涉及到修改操作,则需要修改两处。2、统一认证中心方案原理Cookie单点登录认证太过于分散,每个网站都持有一份登陆认证代
2020-05-13 14:22:08
575
原创 RabbitMq——8、首部交换机Headers
简介首部交换机和扇形交换机都不需要路由键routingKey,交换机时通过Headers头部来将消息映射到队列的,有点像HTTP的Headers,Hash结构中要求携带一个键“x-match”,这个键的Value可以是any或者all,这代表消息携带的Hash是需要全部匹配(all),还是仅匹配一个键(any)就可以了。相比直连交换机,首部交换机的优势是匹配的规则不被限定为字符串(string)而是Object类型。any: 只要在发布消息时携带的有一对键值对headers满足队列定义的多个参数ar
2020-05-12 10:33:57
340
原创 RabbitMq——7、远程过程调用RPC
简介远程过程调用(RPC): 客户端发送一个请求到远程服务器上,远程服务器接收请求并处理结果,将结果响应给客户端,这个过程被称为远程过程调用。RPC涉及到的基本知识:关于队列:整个过程会设计到两个队列一个是专门保存请求的队列,一般名字被称为rpc_queue,另一个队列被称为响应队列,专门用于保存服务器处理的响应结果,这个队列的名字是随机生成的字符串。 关于消息的基本属性BasicProperties:回复(replyTo):是响应队列的名字,当服务器接收请求并处理好结果,服务器需要知道将响应
2020-05-12 10:00:55
220
原创 RabbitMq——6、主题交换机Topics
简介本节主要演示交换机的另一种类型:主题类型topic,直连接类型direct必须是生产者发布消息指定的routingKey和消费者在队列绑定时指定的routingKey完全相等时才能匹配到队列上,与direct不同,topic可以进行模糊匹配,可以使用星号*和井号#这两个通配符来进行模糊匹配,其中星号可以代替一个单词;主题类型的转发器的消息不能随意的设置选择键(routing_key),必须是由点隔开的一系列的标识符组成。标识符可以是任何东西,但是一般都与消息的某些特性相关。一些合法的选择键的例子:“
2020-05-09 17:52:15
238
原创 RabbitMq——5、路由选择Routing
简介本节主要演示使用直连接类型,将多个路由键绑定到同一个队列上。也可以将同一个键绑定到多个队列上(多重绑定multiple bindings),此时满足键的队列都能收到消息,不满足的直接被丢弃。生产者:package com.suirui.mq.rabbit.directRouting;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Con
2020-05-09 17:33:20
226
原创 RabbitMq——4、扇形交换机发布/订阅(Publish/Subscribe)
简介本节主要演示交换机的广播类型fanout,广播类型不需要routingKey,交换机会将所有的消息都发送到每个绑定的队列中去。在发布消息时可以只先指定交换机的名称,交换机的声明的代码可以放到消费者端进行声明,队列的声明也放在消费者端来声明。发布订阅类似观察者模式设计模式,一般适用于当接收到某条消息时同时做多种类似的任务的处理,如一个发短信,另一个一个发邮件;一个插入数据库,另一个保存在文件等类似操作,扇形交换机将消息传送给不同的队列,不同的队列对同一种消息采取不同的行为。扇形交换机是最基
2020-05-09 14:49:45
249
原创 RabbitMq——3、工作队列(Work Queues)
工作队列使用工作队列实现任务分发的功能,一个队列的优点就是很容易处理并行化的工作能力,但是如果我们积累了大量的工作,我们就需要更多的工作者来处理,这里就要采用分布机制了。本示例主要演示显示的功能:定义交换机 多个消费者同时订阅一个队列 模式采用手动应答演示代码:package com.suirui.mq.rabbit;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.
2020-05-08 18:30:09
211
原创 RabbitMq——2、简介和基本概念
一:简介RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,消息队列是一种应用系统之间的通信方法,是通过读写出入队列的消息来通信(RPC则是通过直接调用彼此来通信的)AMQP(Advanced Message Queuing Protocol)高级消息队列协议是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然
2020-05-08 17:52:55
165
原创 RabbitMq——1、windows安装
RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。装RabbitMQ服务器必须首先安装 Erlang 运行环境。安装Erlang安装Erlang 时要注意安装的RabbityMQ 所依赖的...
2020-05-08 17:26:12
135
原创 RocketMq——windows环境搭建与入门
一、准备工作文件已上传百度云网盘运行当前最新版本的RockitMQ(v4.4.0),必须先安装64bit的JDK1.8或以上版本。从RockitMQ官网 http://rocketmq.apache.org/release_notes/ 下载最新的release包。上图是rocketmq-all-4.4.0-bin-release.zip包解压后的目录结构。bin目录下存放可运...
2020-05-08 16:38:12
1195
1
Spring-quartz.zip
2020-06-03
单点登录: 仿CAS sso.zip
2020-05-14
Labview 同步
2017-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人