- 博客(97)
- 资源 (2)
- 收藏
- 关注
原创 zookeeper实现分布式锁Demo
分布式锁的产生原因,单服务集群或者分布式开发的环境下,多个JVM无法进行锁操作。实现方式又Redis 或者zookeeper。实现原理:在zookeeper上创建临时节点,因为只有一个系统可以创建成功,创建不成功的话会报不存在的错误。当一个拿到锁得系统执行完之后,.close()方法。即关闭临时节点。其它线程可以创建即拿到锁。这个过程利用事件通知zookeeper的handleDataDeleted当节点删除时触发事件,可以用于通知其它线程拿锁。Redis和zk实现分布式锁的区别:Redis是n..
2021-07-13 10:12:12 201
原创 ConcurrentHashMap1.7源码详细解读
1.首先看构造函数public ConcurrentHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);}其中
2021-06-10 17:02:06 179
原创 谷歌建议框架 EventBus 理解源码
写这个建议框架为了便于观察者模式:一 ,实现第一个类import com.google.common.base.Preconditions;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * 观察者综合类 */public class ObserverAction { private Object target;//表示观察者的类 priva
2021-02-02 14:11:52 153
原创 byte[]转换成压缩流
1.当我们拿到一个文件之后,我们会把它压缩然后压缩,然后读取流。这样中间会有很多次落地成文件很不方便。有一个简单的办法如下方法。别人拿到这个压缩后的byte[] 可以之间转换成zip的压缩文件。/** * 源流 转换成ZIP流 * * @param sourceData * @return byte[] */public byte[] getZipByte(byte[] sourceData, String name) { ByteArrayOutputStream bos =
2021-01-22 09:07:19 1285
原创 程序员社招面试,从行为,人性的角度分析如何面试。
我想每个人都多多少少遇到很心酸的面试经历吧,从小白的时候面试,满怀期待的去了,面试完了发现是培训机构,说你这个水平不行啊,我们公司培训你一下....。工作了1,2年感觉有经验了,去面试好几个问题没答上来,好点的说一句啊,今天到这里吧。不好的直接开启人生导师模式....我今天写的这篇文章目的是,不是告诉你面试背题,刷题,什么jvm原理,hashMap原理,而是从另一个方面告诉你该如何面试。假如有下边这样一个场景,程序员A,程序员B面试同一个职位,假如面试官问了一道题,A程序员正好在做地铁.
2020-05-29 13:41:05 714 3
原创 大小顶锥动态求解中位数以及如何动态求解TopK
有这样一个问题,一个有序数组(从大到小) 长度为13 中位数为 18int arr[] = new int[]{1, 3, 5, 6, 11, 14, 18, 21, 27, 29, 31, 56, 59}但是我们这个数组是动态的,每次都插入一个数据,这样没插入依次中位数就要破环,而且还要每次排序,这样会很慢。我们思路是这样维护一个大小,顶堆。大顶堆:堆顶元素是整个集合中最大的元素,同理 小顶堆是整个集合最小的元素。这里 我们采用数组形式实现顶锥(另一种实现方式是链表形式)...
2020-05-24 14:14:16 455
原创 Redis以二进制形式存储对象
代码已测试 直接测试就可以 ,注意 实体类一定要 实现 Serializable 接口 不然会报错import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import javax.annotation.Resource;i...
2020-01-15 17:01:34 6210
原创 外包和直招的区别,谁能学到东西
你有没有自己思考过一个问题,外包和直招的本质区别,为什么会存在外包,你可能会想,很简单啊活多人少,多找几个外包人员.找过工作的人都知道遇到外包的岗位,多是一些公司在社会上临时找的,然后安排你去甲方公司面试,首先你跟本不是这家公司的员工,只是你发了个简历他联系到你,然后派你去甲方公司面试对不对.稍有点杠精的人就会问为什么,甲方公司不自己面试你,非要中间倒这么一手,关键你不也是社会上找工作的吗,又...
2019-07-03 15:12:06 12396
原创 最近接到一个大项目,给公司设计抢商品代金劵业务
我们系统上线之后,咋说呢 还是有问题,具体过程心酸~,后来我们该用预约方法(这样可以提前预知多少数据请求),因为我们公司业务较特殊,很多客户和业务员让他们预约的话,有些繁琐,具体细节不赘述了。而epoll 多了一个回调,主动通知,但是呢 不是主动通知你,而是主动放到一个完成队列里边去 ,就是完成的都放到一起,你自己处理。举一个例子,比如你干一件事,这件事中有很多过程,你时间上无法控制的,比如你去买星巴克咖啡,下完单之后他给你制作,你不会在哪里等,你跑到卖炸鸡的那边 再买炸鸡。这样可以支持很高的。
2024-03-18 14:05:07 945
原创 有趣的链式调用
今天在公司接收一个其他人做的项目,发现一个有趣的链式调用。先看下这个链的chou'xianpublic abstract class AbstractHandler { protected String uuid; protected String code; protected String logMessagePrefix; protected String logMessageFormat = "[%s]-[%s-%s]-[接口%s]-[%s]--
2022-03-28 09:47:22 144
原创 MySql行级锁的一些实用小思考
mysql的引擎是InnoDB你有没有遇到过这种场景, 你有一个收款表, 表里边有一个余额字段 , 然后 这个余额字段 频繁的update,我们假设很多人往你余额里边充钱, 当然也有很多人在你这里取钱,也就是说这行余额不断的加减运算,不断的更新。那么 高并发下 会锁表 是不是会非常慢(你这一行属于是典型的热点行数据) 那么我们怎么提高 并发能力呢。先说一个比较好的办法,就是 你把这个余额 分成好几行,然后 让每个往里存钱的 或者取钱的事务 随机访问 余额行就可以,这样就能提高并发能力, 比较好的做.
2022-03-04 14:52:25 519
原创 数据库建立索引要考虑回表问题
这个文章我们略过很复杂的技术细节,直接告诉你怎么用,如果你有兴趣可以自己查下资料学习。毕竟知识只有自己总结过的才是自己的。注:我们讨论的是你的数据库引擎是InnoDB什么是回表:看下边的sql,其中表user 且name 建立索引select * from user where name='张三';这条sql 语句因为name 建立了 索引,索叶子节点是保存的主键id(你可以这样理解就是索引下边挂着注主键),然后 拿到主键id之后 在查询user 所有信息。注意这里 拿索引下边的
2022-03-03 16:35:03 482
原创 关于流的关闭方式自动方式写法
大家先看下这个方法 try catch 后边final 还要 里边继续try catch 关闭流:public static byte[] obj2byte(Object obj) { if (obj == null) return null; byte[] ret = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream out = null; tr.
2022-02-22 10:23:57 776 1
原创 最新的XXL_JOB正确使用
springboot 整合xxljob 首先你需要启动一个xxl_job的管理中心 就这这个页面。一般公司都会给你配置好你的项目如何整合:在spring boot的配置文件中加上如下配置,注意 1:admin.addresses 就是你xxljob的管理页面地址。2: 下边这个端口号 自己写一个9097,这个端口号就是 你执行器的端口号,一会要配置到管理页面上 zhxxl: job: admin: addresses: http://localhost:8.
2022-01-05 15:48:07 3802
原创 注意Mybatis-Plus IN操作数组的时候不能使用基本数据类型。
看下这个操作 如果你 status 接收到的是一个int[]数组 ,Java 基本数据类型你实际上是查不到数据的public List<Test> queryByOrderNoAndStatus(String orderNo, int... status) { wrapper.eq("order_no", orderNo).in(status != null, "status", status); List<Test> testList= mapper.sele.
2021-12-09 19:36:18 674 1
原创 接口隔离原则的设计
我们在做java 开发中,要做到单一职责原则,也就是我不必要的依赖不需要引入。我们举个例子有一个类Modem, 有以下四个方法,但是如何我们有没有办法做到,一部分人调用能看到一部分方法。public class Modem{public void dial(String pno) {}public void hangup() {}public void send(char c) {}public void recv() {}}接口隔离设计:1.增加接口Connectio
2021-10-26 15:56:26 82
原创 工厂枚举设计模式
工厂设计模式我们制单,但是我在开发中遇到一位同事他用的这种方式挺有意思。废话不多说直接上代码。以下以FTP文件操作为demo定义枚举类@AllArgsConstructor@Getterpublic enum FileTypeEnum { UNKNOWN(0, "/upload/insurance", "", "未知"), A_FILE(1, "/upload/insurance/A_FILE", "A文件前缀", "A类文件"), B_FILE(2, "/u
2021-09-28 14:27:08 2198
原创 多线程下SimpleDateFormat为什么报错?
我们有一个工具类提供了一个简单的解析方法:代码如下class SimpleDateFormatTest implements Runnable { private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void run() { try { tr...
2021-09-06 11:09:31 445
原创 Nacos的分布式配置中心一些配置细节操作
1.首先要明确你是基于SpringBoot 操作nacos 还是基于Spring Cloud 操作Nacos这是 Naocs 的官网Open API 指南 (nacos.io)2.如果基于Spring Cloud操作一定注意要在bootstrap.yml 配置不要在application.yml配置nacos信息,如下图所示,不然会失败,bootstrap是整个项目全局的配置优先级最高,而application时基于SpringapplicationContext 的配置,配置一下基础信..
2021-07-22 10:23:41 168
原创 读写锁简单Dome
读写锁一般用于项目中清理缓存,下边就是一个小的Demo.当线程操作写方法时,读线程等待。publicclassCache {staticMap<String, Object> map= newHashMap<String, Object>();staticReentrantReadWriteLock rwl= newReentrantReadWriteLock();staticLock r= rwl.readLock();staticLock...
2021-07-09 11:34:58 96
原创 SpringBoot服务器Tomcat转换undertow服务器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId><-- 排除tomcat服务依赖 --> <exclusions> <exclusion> <groupId>org.spr.
2021-07-06 16:56:54 309
原创 SpringAOP的执行方式
SpringAOP 的整体涉及是递归方式 +责任链设计模式下面我们通过模拟Spring 源码方式 看下如何调用的/** * 调用链接口 */public interface MethodInterceptor { Object invoke(MethodInvocation invocation) throws Throwable;}/** * 前置通知接口 */public class MethodBeforeAdviceInterceptor implemen
2021-04-22 17:15:12 126
原创 SpringBean的全生命周期
SpringBean完整生命周期我们先执行一个测试,然后在分析源码/** * Bean 全生命周期 */@Componentpublic class JxdSpringBean implements BeanNameAware, BeanFactoryAware,InitializingBean,DisposableBean, ApplicationContextAware { public JxdSpringBean(){ System.out.println("1
2021-04-14 10:50:22 102
原创 SpringBean 三种初始化和销毁方法
当Bean在执行完构造函数的时候,可以默认执行 初始化和销毁的方法,即当SpringBean执行完构造方法后可以默认执行一个初始化方法,当销毁的时候可以执行一个销毁方法。上代码:方法一注解方式:@Bean(initMethod = "initMethod",destroyMethod = "destroyMethod")public User getUser() { return new User("jxd", 28);}看下我们的Userpublic class U
2021-04-11 11:36:51 203
原创 Spring 如何依据Linux或者Win环境注入不同的Bean
1.我们首先建一个JxdCondition 类 实现Condition 接口import org.springframework.context.annotation.Condition;import org.springframework.context.annotation.ConditionContext;import org.springframework.core.env.Environment;import org.springframework.core.type.Annotate
2021-04-09 14:09:59 279
原创 访问者模式一种工厂模式升级版
工厂模式很多人都了解,但是如果工厂里边的类非车多20个以上这样代码会非车繁琐。下面我介绍一下访问者模式我们设想一个场景,对PDF,PPT, WORD文档进行 压缩功能或者提取功能。/** * 压缩 */public class Compressor implements Visitor { @Override public void visit(PPTFile pptFile) { System.out.println("Compressor PPT."
2021-02-19 14:31:48 109
原创 计算机思维解决12个小球找坏球问题
有这么一道题,很多人都知道,12个小球外观一模一样,但是有一个小球的重量未知,只知道比其他小球重或者轻。现在有一个天平我们要通过三次称量,不管用什么方法找到它,并且要知道这个小球到底是重还是轻。下面我通过计算机的思维来分析下这个问题。我们姑且把这个重量不一样的小球称为坏球。在信息论里边我们必须通过尽可能多的信息来消除不确定性。12个小球一共有 24种可能性,我们要在这24中可能性中找到这个一坏球。(24中可能性是 指每一个小球有两种可能 或轻 或者重 12 乘以2 =24)我们一...
2021-01-22 10:22:03 1298
原创 Builder建造者模式-讲义
当我们要创建一个类的时候我们会怎么做,你会想到new 吧。但是 有些情况我们创建的这个类有一些条件约束。例如ResourcePoolConfig类中有几个成员变量private String name;private int maxTotal = 8;private int maxIdle = 8;private int minIdle = 0;我们这样要求:name 必传,maxTotal,maxTotal,minIdle 为可选项,但是有限制条件1.如果用户设置了 maxTot.
2020-12-01 15:13:55 100
原创 RabbitMQ-headers连接方式详解
RabbitMQ-headers 链接方式:他是一种交换机 通过 Key-value 匹配queues 。也是忽略routingKey的一种路由方式。一、首先看下这个图片: any: 只要在发布消息时携带的有一对键值对headers满足队列定义的多个参数arguments的其中一个就能匹配上,注意这里是键值对的完全匹配,只匹配到键了,值却不一样是不行的; all:在发布消息时携带的所有Entry必须和绑定在队列上的所有Entry完全匹配。all 也就是Q2所有的都key-value都
2020-11-18 15:32:00 1961 2
原创 Dubbo 整合过程中注意的版本问题
dubbo大家不陌生,但是 注意整合过程中一些版本的冲突问题,我们还是以官方文档中给出去的版本作为参考。其中我在看官方文档中,看到一条很重要的信息就是dubbo核心 用到的是java SPI技术具体可以百度查下。注:http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html (这是duboo官方文档可以看下 )废话不多说看代码:我们以Spring Boot 整合dubbo 以XML文件方式整合。在启动类中 加上dubbo.
2020-10-30 09:39:19 762
原创 Idea 社区版配置Smart Tomcat一定注意
Idea 社区版 配置Smart Tomcat 一定注意一点,看下图这是正常配置。注意:千万不要,选择Templates里边的Smart Tomcat 不然 ,会有一个红叉 启动不了。
2020-08-26 18:02:04 8812
原创 Java多态的理解
Java开发的三大特性,封装,继承,多态,很多人都会背,都会背。我想说一下我对多态的理解。多态,即多种状态,为什么多种状态,即不同环境下的表现出多种状态。子类实现父类或者接口的抽象方法,程序在使用抽象父类或者接口编程,运行期间注入不同的子类,程序就表现出不同的状态,是为多态。思考一下——为什么要在不同环境下表现多种状态?先思考,为什么要抽象假如有这个场景,你们公司想完成一个项目,比如给长城贴瓷砖,首先需要1.买瓷砖,2贴瓷砖,3打扫卫生。我们定义一个接口名字叫 CangChengT.
2020-07-06 14:12:47 120
原创 线程池中创建多少线程合适
通俗一点,如何让你的系统处理更快,(降低延迟,提高吞吐量)。对应方法进本两个方向,一个算法,另一个将硬件性能发挥极致。 提升性能就是,提升硬件的利用率。也就是提升i/o的利用率和cpu的利用率。你线程池的创建线程条数直接影响你系统的性能。思考问题一,分工产生效能在单核cpu时代,假如你用多线程的话,主要就是用来平衡cpu和I/O设备,如果你的程序只设计cpu计算,没有I/O操作的话,多线程不但不会提升性能,还会是性能变的更差,原因就是线程的切换成本。我给你举个例子,你公司就你..
2020-06-18 09:31:58 455
原创 如何优雅解决回调等待问题
先设想一个场景,你中午吃饭,不知道吃什么好,想着去食堂吃呢还是点外卖,但是因为公司愿意食堂不一定每次都开门,于是你跟同事说,这样吧你去食堂,如果开门了你告诉我我就过去,如果没有开门我就点外卖。这就是一个等待回调问题,你做一个事件A,中间 需要等待事件B的回调结果,才可以继续下一步。开发中这样的场景很多吧。那么如何解决能?别告诉我,写一个死循环,while() 然后 sleep 然后 break这样肯定不对的。一个是 你时间上有时间差,也并发的情况下会造成死循环。那么如何优雅解决回调等待问
2020-06-12 10:56:17 801
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人