- 博客(649)
- 资源 (34)
- 问答 (1)
- 收藏
- 关注
原创 Aqs独占/共享模式
表示结点等待在Condition上,当其他线程调用了Condition的signal()方法后,CONDITION状态的结点将从等待队列转移到同步队列中,等待获取同步锁。如果线程T对数据A加上排他锁后,则其他线程不能再对A加任何类型的锁。如果线程T对数据A加上共享锁后,则其他线程只能对A再加共享锁,不能加排它锁。当timeout或被中断(响应中断的情况下),会触发变更为此状态,进入该状态后的结点将不会再变化。:共享模式下,前继结点不仅会唤醒其后继结点,同时也可能会唤醒后继的后继结点。
2023-09-23 22:19:20
687
原创 Java Semaphore使用例子和流程
CAS操作消耗一个信号量;如果没有信号量可消耗了,就死循环等待了。release增加信号量;acquire减少信号量。semaphore.acquire()的反向操作。输入如下:可以看到同时最多只有2个线程能得到执行。
2023-09-19 22:52:44
238
原创 CountDownLatch 使用例子和代码流程
当每个被计数的线程完成任务后,计数器值减一,当计数器的值为0时,表示所有线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行。join方法的本质调用的是Object中的wait方法实现线程的阻塞,即有monitor锁的概念。输出如下: main线程只等待业务线程的业务逻辑结束就行。如下,main线程和其它线程运行时序不定,达不到其它线程都结束后main县城再结束的效果。A线程中执行 B.join(),则A线程阻塞住,直到线程B完成,A线程才能再继续。单词2: latch。
2023-09-17 10:10:24
131
原创 读余华小说《兄弟》
李光头利用偷看女人屁股的谈资给母亲李兰弄到了板车,椅子等等,让李兰生命的最后感到对这个儿子的欣慰。宋钢对苏妈说“你会有善报的” ,而苏妈也被戴高帽批斗了。宋凡平为看妻子李兰履行承诺,最终被活活打死。李光头、宋钢捉虾做饭,吃大白兔奶糖。孙伟父亲把钉子扣进了脑袋自杀而亡。宋凡平直接跳进粪坑背出刘山峰。上部读完的一些笔记和思考。: 文革前,文革,文革后。李兰为宋凡平七年不洗头发。宋凡平小腿折断塞进棺材。
2023-09-03 15:21:33
282
原创 Java复习重写equals方法必须重写hashcode方法
A对象在业务上看来是一个对象,相等的;但是equals方法和hashcode方法都没有重写,实际是不等的,hashcode也不同;即每次业务都是合理的,某个对象只有一个存储到map中,以最后的更新值为准,不会出现什么意外。只重写了equals方法,两个对象相等,但是hashcode不同,在HashMap中是两个key存储, 取出来不同;综合上述的例子,也就说明了为什么重写equals方法必须重写hashcode方法。那么只重写equals方法,两个相等对象会出现一样的hashcode产生误解吗;
2023-08-19 16:10:30
117
原创 Spring循环依赖-实践&三级缓存的再次理解
Areturn b;this.b = b;Breturn a;this.a = a;return c;this.c = c;Creturn a;this.a = a;关于理解为什么需要三级缓存以及三级缓存的作用,通过本文实际例子是可以充分说明的。只有A,B的相互依赖,二级缓存就够了;只需要存储一个中间对象:A 创建依赖B, B创建依赖A,从这个中间缓存取就能完成创建B, 那么A也创建完成了,这样之后A,B都加入到一级缓存singletonObjects中,很完美。
2023-08-12 16:55:32
202
原创 负载均衡概念理解和相关算法
负载均衡(Load balance,LB),是一种计算机技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。通俗点理解有点类似于常说的一句话,一碗水端平。如果我们只有一个碗,那么无论有多少水,那么我们只能装一碗水。在单服务器的应用场景,碗就是服务器,而水就是流量。所以我们知道,一旦水(流量)过大时,一个碗肯定是不够用的。这时候就需要多来几个碗(服务器)来支撑更多的水(流量)。
2023-08-02 22:50:29
1468
原创 HTTPS概念&wireshark分析
第一,发送方在发送信息前,需先与接收方联系,同时利用公钥加密信息,信息在进行传输的过程当中一直是处于密文状态,包括接收方接收后也是加密的,确保了信息传输的单一性,若信息被窃取或截取,也必须利用接收方的私钥才可解读数据,而无法更改数据,这也有利保障信息的完整性和安全性。第二,数字证书的数据签名类似于加密过程,数据在实施加密后,只有接收方才可打开或更改数据信息,并加上自己的签名后再传输至发送方,而接收方的私钥具唯一性和私密性,这也保证了签名的真实性和可靠性,进而保障信息的安全性。私钥是不公开的,解密时使用。
2023-07-18 23:15:36
2407
原创 wireshark抓包实践
r,从后面接的文件将数据包数据读出来。那个「文件」是已经存在的文件,并且这个「文件」是由 -w 所制作出来的。-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。-A,数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。-c,监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听,-q,仅列出较为简短的数据包信息,每一行的内容比较精简。
2023-07-09 18:20:22
567
转载 Java ClassLoader类loadClass/findClass
符号引用就是我们运行时数据区在类加载阶段,还未对类进行布局时,我们通过符号引用访问class文件中数据的实际内存地址,加载进运行时数据区进行布局。准备阶段不分配类中的实例变量的内存,实例变量将会在对象实例化时随着对象一起分配在 Java 堆中。* 字节码验证:是整个验证过程中最复杂的一个阶段,通过验证数据流和控制流的分析,确定程序语义是否正确,主要针对方法体的验证。* 文件格式验证:验证字节流是否符合 Class 文件的规范,如主次版本号是否在当前虚拟机范围内,常量池中的常量是否 有不被支持的类型.
2023-07-08 15:42:52
882
原创 OSGI-Bundle:概念和入门
简单的来说就是平台应用和bundle应用,如何将平台应用和bundle应用整个的运行起来,其中最关键的就是对bundles的控制,包括bundle安装、开启、关闭、更新和卸载。: bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且jar包的物理边界也同时是运行时逻辑模块的封装边界。实际工作中可以理解为bundle是一个小应用,一般是业务扩展方维护这个应用,里面有各种自身的业务逻辑和对平台应用的扩展。
2023-07-01 09:43:30
378
原创 规则引擎--函数式编程和and/or操作符的设计
如果第一个结果是false,那么直接返回该结果(因为 r.equals(shortcut) 这句会满足),如果第一个结果是true,那么直接返回该结果(因为 r.equals(shortcut) 这句会满足),即只要有一个False就是false, 为执行未知和异常情况单独处理,否则返回true。即只要有一个True就是true, 为执行未知和异常情况单独处理,否则返回false。上面解释了and ,or的Combiner都是正确的,再来看其执行。, 重点分析一下And, Or操作符的设计。
2023-06-23 11:46:04
435
原创 规则引擎--规则逻辑形如“1 & (2 | 3)“的抽象设计
规则下逻辑表达和条件的抽象对于任何一个规则,包括多个条件,都可以抽象成如下的json形式1,2,3分别代表3个条件,这个规则如何执行,则是"1 & (2 | 3)"
2023-06-22 18:05:29
483
转载 规则引擎 -- rete算法
Not节点等,Join节点包括两种输入,左部输入事实列表,称为元组(Tuple),右部输入一个事实对象,对象与元组在Join节点按照类型间约束进行Join操作,将符合的事实加入到元组中,并继续传入下一个beta节点。Type节点:又叫ObjectType节点,就是我们的Fact,也就是我们规则所用到的POJO,用于选择事实的类型,即针对事实进行类型检查,引擎只让匹配该类型的对象到达后续节点,将符合本节点类型的事实向后继的Alpha节点进行传播,一个Fact对应一个Type节点;
2023-06-14 22:07:52
292
原创 规则引擎--QLExpress:ql的一些使用场景
*** 定义连加的操作符int r = 0;} return r;} }使用//定义表达式,相当于1+2+3+4 String exp = "addN(1,2,3,4)";//定义方法addN,其实现为AddNOperator runner . addFunction("addN" , new AddNOperator());Assert . assertEquals("操作符执行错误" , 10 , r);" + "};
2023-06-11 12:55:13
1352
原创 规则引擎-穿插知识点
即符合了LRU(Least Recently Used),即最近最少使用,即选择最近最久未使用的予以淘汰。访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。代理类都继承了Proxy, 由于java的单继承,所以要想扩展一个类,则必须基于接口;访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。
2023-06-05 23:10:21
142
原创 规则引擎架构-基于easy-rules
来看,就是一个一个的对象组成了事实)。(只要在规则条件真正执行前,能明确这些事实就行)事实简单就是key、value对, 某个事实的名称,和事实的属性特征(以。在规则执行的过程中,可以做各种操作。可以看成规则的扩展点。:一个功能强大的基于Java应用程序的表达式语言。注解构造的规则是使用RuleProxy构造的。默认的规则引擎直接遍历规则去执行,如果。,你买到了酒就装包里走人,:Spring表达式语言。去酒店买酒,需要判断。,成年人才能购买酒,执行命中后,则去执行。
2023-05-27 13:52:42
2148
原创 java.lang.IncompatibleClassChangeError 常见错误
最近开发中遇到类冲突报错 java.lang.IncompatibleClassChangeError,遂了解并复现一些casejava.lang.IncompatibleClassChangeError 解释错误解释package java.lang;/** * Thrown when an incompatible class change has occurred to some class * definition. The definition of some class, on w
2022-05-02 10:32:09
2180
原创 抽样随机算法
水塘抽样/蓄水池抽样算法(Reservoir Sampling)问题:对一个数量未知的样本,希望只经过一次遍历就完成随机抽样,即时间复杂度O(n)。因为样本数量未知,因此就不能通过random函数直接随机抽样。解法:我们总是选择第一个对象,以1/2的概率选择第二个,以1/3的概率选择第三个,以此类推,以1/m的概率选择第m个对象。当该过程结束时,每一个对象具有相同的选中概率,即1/n第m个对象最终被选中的概率P=选择m的概率*其后面所有对象不被选择的概率,即选择m的概率 : 1 / mm后某个
2022-04-25 22:54:15
1309
原创 Java Function & Supplier 的实际例子对比感受抽象和懒加载
Supplier以 人使用交通工具出行为例, 如下:很自然的代码,没有任何问题interface Vehicle { void drive();}class Car implements Vehicle { public Car() { System.out.println("new Car()"); } @Override public void drive() { System.out.println("car...
2021-11-28 16:43:23
1017
原创 Java日常编码小知识点
LinkedHashMap日常工作通常都是HashMap,有时候与前端对接返回,按顺序显示map结果,这时需要考虑有序;而java.util中提供了LinkedHashMap, 可参考学习:linked_hash_map反射的小应用属性类,json存到数据库中,可能有增减; 与前端对接时,希望一个json传递过来设置,而后端也最好不用麻烦的写个中间DO转换设置import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray
2021-10-06 13:56:20
119
原创 Java类加载器不同导致SPI加载报错: Provider ... not a subtype
如下图整段代码如下,当注释掉myThread.setContextClassLoader(myClassLoader);后才正常运行package com.hotload;import java.util.ServiceLoader;class MyThread extends Thread{ @Override public void run() { try{ ServiceLoader<A> serviceLoader
2021-09-25 16:31:35
4240
1
原创 java new对象的类加载器是谁?
关于java new 对象使用的流程我们都知道如下图所示但是究竟是谁(即那个类加载器)完成【加载】的呢?如下两个类:Testpackage com.hotload;/** * @Author mubi * @Date 2020/7/27 08:49 */public class Test { public Test() { } public String hello(String msg){ return "hello:" + msg;
2021-09-25 16:01:56
839
原创 类加载器不同导致类型强制转换报错:java.lang.ClassCastException
直接看如下错误例子com.hotload.Test cannot be cast to com.hotload.Test,因为com.hotload.Test的类加载器是MyComOtherClassLoader,而非默认的 sun.misc.Launcher$AppClassLoader如下则正常
2021-09-25 15:24:26
1836
原创 maven plugin 简单介绍和实战 (2021-05-29)
maven plugin 开发: https://maven.apache.org/plugin-developers/index.html什么是plugin?“Maven” is really just a core framework for a collection of Maven Plugins. In other words, plugins are where much of the real action is performed, plugins are used to: create
2021-05-29 14:54:55
1227
原创 Mockito 动态代理 & ByteBuddy
现在说动态代理:总是想到Spring AOP的JDK动态代理(基于反射) & Cglib代理(当然这两种都是新增一个新的class)完成动态代理;其实各种mock也有不少使用的动态代理技术的,比如Mockitomock例子public interface HelloService { String say(String what);}import com.example.service.HelloService;import org.junit.Assert;import
2021-03-14 16:40:48
1488
wireshark tcp三次握手
2016-08-03
mvc servlet jdbc web框架
2015-06-26
java web session失效
2016-05-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人