
Java独立技术点
图灵农场
互联网的好处是总有文明的道路可以走,如果在产品、技术、管理上挖掘潜力的话,可以不作恶而通向成功的道路。(布局自己的技术体系!https://gitee.com/wxmingit)
展开
-
长连接与短连接——JDK的HttpClient、ApacheHttpClient及OkHttpClient类比——Feign产品优化
O、长连接与短链接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次挥手,所以说每个连接的建立都是需要资源消耗和时间消耗的。长连接:所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。维持长连接耗资源,所以用户量多了很可能把服务器资源耗尽,所...原创 2020-09-04 11:12:11 · 4019 阅读 · 3 评论 -
同一个工程配置多个mq及相关@ConditionalOnSingleCandidate、@Autowired和@Resource
@ConditionalOnSingleCandidate表示当指定Bean在容器中只有一个,或者虽然有多个但是指定首选Bean。同一个工程里配置不同的mq,并且不同位置各自使用。重写RabbitAutoConfiguration这个类里实例化的bean,RabbitTemplateConfiguration下的RabbitTemplate、AmqpAdmin以及RabbitMessagingTemplate。使用的时候注入不同类名的,以及注解里指定各自name的。要注入相同类型不同名字的,原创 2020-08-07 02:15:57 · 4435 阅读 · 0 评论 -
Spring事务传播机制详解
REQUIRES_NEW官方文档解释:Create a new transaction, and suspend the current transaction if one exists.意思是,创建一个新事务,如果当前存在事务,将这个事务挂起。也就是说如果当前存在事务,那么将当前的事务挂起,并开启一个新事务去执行REQUIRES_NEW标志的方法。先来总结一下结果:(REQUIRES_NEW一般用在内层事务,即A事务方法里又调用了B事务方法,B方法用REQUIRES_NEW这种事务。)1.标志RE原创 2020-06-12 16:53:21 · 320 阅读 · 0 评论 -
程序中需要调远程获取数据时-测试用例中使用Mock造挡板数据
程序中需要调远程获取数据时-测试用例中使用Mock造挡板数据示例:1、加依赖<!-- Mock依赖。 --> <dependency> <groupId>org.jmockit</groupId> <artifactId>jmockit</artifactId> <version>1.47</version> <scope>test</scope>原创 2020-06-03 17:42:47 · 923 阅读 · 0 评论 -
webservice使用Axis2框架时-wsdl2java命令及参数
wsdl2java 用于根据WSDL生成相应的服务端和客户端代码的生成工具。命令行格式为:WSDL2Java [options] -uri <url or path> : A url or path to a WSDL示例:WSDL2Java -uri http://128.168.168.8:443/rrs/getAllInfo/GetAllInfo.wsdl -p com.sinosoft.webservice.esb.service -s -o D:\eeee其中常用的..原创 2020-06-02 11:38:33 · 260 阅读 · 0 评论 -
给已经打好的jar包添加依赖jar包重新打包
可以这么操作1、使用压缩软件,解压平台提供的yusp-app-oca.jar,解压后的目录格式如下:yusp-app-oca...BOOT-INF\*...META-INF\*...org\*2、在yusp-app-oca\BOOT-INF\lib目录中添加mysql驱动3、进入yusp-app-oca目录,执行如下命令:jar cvfm0 yusp-app-oca.jar .\M...原创 2020-02-24 15:14:18 · 1213 阅读 · 0 评论 -
Eureka服务监督(客户端缓存刷新、心跳监测)定时任务亮点——自动调节间隔的周期性任务
TimedSupervisorTask类(自动调节间隔的周期性任务)Eureka中客户端缓存刷新、心跳监测,调远程服务端接口操作的定时任务,调远程网络不确定性导致定时任务执行不确定性,Eureka设计了一个自动调节间隔的周期性任务!!!通过一个线程类的run方法的finally中再次调用该线程实现。1、该定时任务的启动代码:DiscoveryClient类里的initSchedule...原创 2019-12-04 15:59:50 · 1392 阅读 · 0 评论 -
Eureka多级缓存机制亮点(待整理)
读写互斥,加锁影响效率。Eureka最终一致性,高可用。对外接口resource类中接口防御性编程,对入参优先做校验。解决频繁的读写:读写分离注册方法写的时候直接写内存注册表,写完表之后主动失效读写缓存。获取注册信息接口先从只读缓存取,只读缓存没有再去读写缓存取,读写缓存没有再去内存注册表里取(不只是取,此处较复杂)。并且,读写缓存会更新回写只读缓存,同步。更新缓存:只读缓...原创 2019-12-02 01:05:06 · 1859 阅读 · 4 评论 -
数字证书工作原理及基本流程
基本概念对称加密:加密和解密用同一份密钥;非对称加密:加密和解密用不同的秘钥,分别是私钥和公钥,这两个密钥是成对出现的,公钥加密过的密文只有对应的私钥能解密;私钥签名过的密文可以通过对应的公钥验签。原则上私钥是不能在网络中传递的。目标场景:甲要给乙发送一段机密信息要保证这次信息传递的机密性、完整性、可信赖性,需要规避以下几条潜在风险:风险一:明文在传递时被截获并读取...转载 2019-09-19 16:27:17 · 1927 阅读 · 0 评论 -
MD5加盐加密和Spring Security 使用BCrypt加密密码
原文链接:https://liuyanzhao.com/7569.html1、MD5加盐加密所谓加盐加密,就是在原先密码上加点“盐”然后加密。因为虽然MD5加密是不可逆的,但是别人可以根据你的MD5密码不断比较发现你的原密码,比如你的密码设置得很简单是123456,加密后是e10adc3949ba59abbe56e057f20f883e,一旦数据库泄露,密码丢失,不法分子很容易...转载 2019-09-17 18:51:29 · 844 阅读 · 0 评论 -
事件Event监听相关——spring的事件监听相关
应用场景:事件驱动模型简介事件驱动模型也就是我们常说的观察者,或者发布-订阅模型。理解它的几个关键点:1、首先是对象间的一对多的关系;最简单的如交通信号灯,信号灯是目标(一方),行人注视着信号灯(多方);2、当目标发送改变(发布),观察者(订阅者)就可以接收到改变;3、观察者如何处理(如行人如何走,是快走/慢走/不走,目标不会管的),目标无需干涉;所以就松散耦合了它们之间的关系...原创 2019-08-30 19:37:38 · 389 阅读 · 0 评论 -
mybatis的xml中,返回类型中嵌套别的类
mybatis的xml中,返回类型中嵌套别的类eg:domain:eg:mapper:eg:XML:<association property="warnRule" javaType="cn.com.mark.alert.domain.WarnRule" column="ruleId" resultMap="w...原创 2019-08-27 17:40:08 · 1237 阅读 · 0 评论 -
mybatis的xml共用字段抽取里别名传参数
示例:(竟然因为题目中有连着的中和共两个字判定为包含敏感词批量审核未通过!!!)<select id="getHostByIp" resultMap="hostDomain" parameterType="string"> select <include refid="Base_Column_List"> <property name="alias...原创 2019-10-24 12:12:45 · 1470 阅读 · 0 评论 -
TimeUnit用法(线程睡眠——时间转换成不同单位)
一、线程睡眠TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),Thread.sleep()是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有线程中断了当前线程)。但是有一个潜在的问题就是它的可读性。Thread.sleep...原创 2019-04-24 14:44:58 · 6848 阅读 · 0 评论 -
nanoTime()获取纳秒——及System.nanoTime与System.currentTimeMillis比较
System有一个静态的函数nanoTime函数,该函数是返回纳秒的。1毫秒=1纳秒*1000*1000。long nano = System.nanoTime();该函数只能用于计算时间差。System.nanoTime与System.currentTimeMillis比较首先:currentTimeMillis返回的是系统当前时间和1970-01-01之前间隔时间的毫秒数...转载 2019-04-24 14:23:40 · 5409 阅读 · 0 评论 -
主键生成策略
尽量避免采用uuid。uuid有一些弱点:1、不能单调递增;2、效率不如数字类型。CPU做long的比较效率会比字符串比较更快。你按id排序查询时,就可以测量出其性能差别。数据的逻辑主键,一般还是采用long的比较多。...原创 2019-04-22 15:23:28 · 82 阅读 · 0 评论 -
利用 BeanUtils 将 Map 与 Bean 进行相互转换(把 map 值放入 Bean 的属性中)
map -》 BeanBeanUtils.populate(Object bean, Map<String, ? extends Object> properties);Bean -》 MapBeanMap testMap = new BeanMap(Object bean);需要添加的 Maven 依赖 <!-- https://mv...原创 2019-04-04 13:50:26 · 13422 阅读 · 0 评论 -
数据恢复--AssertJ 断言利器的另类用法(防脏数据,测试结束自动销毁测试数据)
源链接:https://testerhome.com/topics/5037前言本来今天的内容没打算放到这个系列里的,但其实这个帖子应该是这个系列的第一篇关于数据管理策略的后续。所以我想了想,还是放在这里面说吧。之前的帖子说过我们有共享数据和隔离数据,并讨论了针对这些数据在框架层面上的处理(如有不清楚的请看这个系列的第一篇帖子)。我们说明了注册式数据管理方式的缺点再于我们只能销毁我们注册进...转载 2019-03-20 11:30:13 · 586 阅读 · 0 评论