java
文章平均质量分 88
Danny_idea
热爱技术,热爱生活,一步一个脚印。
更多宝贵知识记录可以关注个人公众号:Idea的技术分享
展开
-
知识体系整理 -- Java的IO
Java领域的io模块是一个非常庞大的知识体系,在大家求职面试的过程中通常也是被问到比较多的一个模块,今天我特意整理了一份关于IO知识体系相关的干货和大家分享,希望各位读者们喜欢。如何理解io流io可以理解为是input 和 output的两个缩写,分别代表了数据的**”输入“和”输出“**。io流则是描述了将数据从内存和数据源之间拷贝的一个过程。输入:数据从数据源加载到内存。输出:数据从内存写回到数据源。这里我所说的数据源是一个比较泛的名称,它可以是指 txt,图片,SQL,mp4等格式的文件。原创 2022-04-09 15:45:18 · 762 阅读 · 1 评论 -
基于Redis6.0 部署迷你版本消息队列实战
技术研究背景由于目前的研发团队处于公司初创阶段,尚未有能成熟的运维体系,对于市面上常见的成熟MQ搭建维护能力不足,但是又希望能有一款轻量级的消息系统供研发团队的成员使用,因此开展了对该方面相关的技术调研工作。通过相关的技术调研后,决定挑选基于Redis实现消息系统。具体技术选型原因:团队内部已经有搭建相关的Redis服务,并且具备一定的运维能力,可以节省技术成本业界有较多关于Redis搭建消息系统方面的技术文章目前的系统的整体吞吐量并不高,接入消息系统的主要目的只是为了实现系统之间的解耦原创 2022-02-13 22:19:02 · 333 阅读 · 0 评论 -
微服务系列--深入理解RPC底层原理与设计实践
在微服务系统当中,各个服务之间进行远程调用的时候需要考虑各种各样的场景,例如以下几种异常情况:超时调用失败重试服务下线通知服务上线通知服务分组请求队列等等…国内也有一些有先见之明的技术专家们对于这些技术有了较早的认知,因此很早便开始了关于远程服务调用中间件的开发。慢慢地,一些国内大厂自研的RPC调用框架开始变做了一款产品向市面上去进行推广。今年年初的时候,我花了大概一个半月的业余时间自己打磨了一套RPC框架,通过实践尝试后发现,要想真正地落地一款给公司内部使用的原创 2022-01-06 23:34:32 · 2356 阅读 · 0 评论 -
微服务系列--聊聊微服务治理中的一些感悟
今年的大多数技术工作基本都是在围绕着技术功能开发进行,关于微服务治理相关部分从事了较多的研究,今晚想做个自己过去一段时间中遇到过的微服务治理问题做一些总结。微服务的调用链路思考自己所在的公司采用的微服务远程调用技术主要是基于Dubbo这款RPC开源框架,所以大部分的项目结构都基本是consumer,provider,interface这样的三个模块。然后早期在做微服务治理的时候,需要观测不同的微服务之间的调用了链路分析,于是就需要深入到各个微服务内部去研究。微服务的调用链路通常都会呈现如下图所示:原创 2021-10-23 14:39:12 · 356 阅读 · 0 评论 -
线程池的经典应用场景
在日常的开发工作中,我们经常会需要使用到线程池这类型的组件。例如下边几种应用场景:线程池经典应用场景异步发送邮件通知发送一个任务,然后注入到线程池中异步发送。心跳请求任务创建一个任务,然后定时发送请求到线程池中。类似的场景有很多,我们下边一步一步地来介绍不同的应用场景下,线程池的具体使用案例:异步发送邮件场景定义一个简单的邮件发送接口:public interface SendEmailService { /** * 发送邮件 * * @param e原创 2021-10-19 10:11:07 · 12509 阅读 · 4 评论 -
如何落地一款重试组件
背景介绍在实际的项目应用场景中,经常会需要遇到远程服务接口的调用,时不时会出现一些接口调用超时,或者函数执行失败需要重试的情况,例如下边的这种场景:某些不太稳定的接口,需要依赖于第三方的远程调用,例如数据加载,数据上传相关的类型。方案整理基于try catch机制这种方式来做重试处理的话,会比较简单粗暴。public void test(){ try{ //执行远程调用方法 doRef(); }catch(Exception e){原创 2021-10-09 19:12:50 · 273 阅读 · 1 评论 -
大话Redis系列--实战案例总结(上)
在工作中总会有遇到过使用Redis的场景,除了最简单的JWT案例之外,Redis还有很多丰富的应用落地案例,这个周末特意整理了一批经典的Redis使用案例。电商购物车模型电商网站中的购物车就是一个经典的可以使用Redis来进行实现的案例,(这里我只是说可以使用,不排除有些电商平台的购物车是用其他分布式缓存组件实现的)。这里我截取了某东的购物车界面:其实可以发现,这里的很多操作细节正好可以借助Redis的map结构来进行实现。添加商品hset cart:1001 10088 1增加数量hi原创 2021-07-04 23:23:08 · 621 阅读 · 0 评论 -
深入挖掘Spring系列 -- Spring内部的事件机制
相信在使用Spring框架的过程中,很多小伙伴都发现内部提供了一种叫做事件的机制,今天的文章主要重点给各位读者系统地介绍关于事件的部分知识点。其实事件并非是Spring官方专门创造出来的,在早期的JDK中就已经有事件设计的影子了。JDK内部提供的事件机理package org.idea.spring.framework.event;import java.util.EventListener;import java.util.EventObject;import java.util.Obse原创 2021-06-04 22:41:54 · 410 阅读 · 3 评论 -
深入挖掘Spring系列 -- 从设计模式角度看Spring
Spring的生态演进变化Spring是一款伟大的框架产品,在发展过程中一直都是靠一家叫做Pivotal的技术公司在背后支撑。Spring真正流行的时间是在2007年11月份,发布了2.5版本的时候。Spring Source 在3.0升级为了后续的发展所以拆分为了Spring Framework4.0 发布于2013年,随后Spring Boot发布于2014年,和传统的Spring Framework有所不同,SpringBoot是一款完全独立的产品路线,很多设计都是在为了简化对于Spring.原创 2021-06-04 22:19:23 · 388 阅读 · 1 评论 -
深入挖掘Spring系列 -- 实现一个简易版本的aop
在正式进行aop模块的介绍之前,我们需要先弄懂一些基本的术语概念。在软件业,AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP可以用于解决什么问题?代原创 2021-05-09 20:18:53 · 207 阅读 · 0 评论 -
JVM系列 -- 深入剖析垃圾收集器
前边的一篇文章中我们讲解了Hotspot中垃圾收集的常用算法,标记删除,标记复制,标记整理这三种主要的管理思路。如果说算法只是一种理论模型,那么垃圾收集器就是这种理论模型的实践产物了。本文主要讨论的垃圾收集器是基于JDK1.8版本的Hotspot虚拟机下的实践。在Hotspot虚拟机中,其实出现了很多具有代表性特色的垃圾收集器产品。在实际工作中,通常会在系统中针对不同的年龄代使用不同的垃圾收集器组合搭配,因此对它们有一个系统的认识愈加重要。并行垃圾收集和并发垃圾收集的区别并行垃圾收集首先解释一下什原创 2021-02-07 23:12:04 · 293 阅读 · 0 评论 -
JVM系列--内存回收
在前边的文章中我们介绍了Java的虚拟机是如何进行内存管理的,以及一个对象的内存分配过程。今天这篇文章将会介绍下关于jvm里面的垃圾回收过程相关细节点。如何判断一个对象是否存活简单来讲,判断一个对象是否存活的算法主要有以下两类:引用计数算法根可达算法引用计数算法根据一个引用计数器来计算对象被引用的次数,如果引用加一,则计数器+1,反之计数器-1。这个算法虽然实现思路比较简单,但是默认的jvm并不使用这种算法,因为无法解决相互引用的问题。根可达算法通过一系列名为“GC Roots”的原创 2021-02-05 17:08:38 · 650 阅读 · 0 评论 -
JVM系列--对象内存分配技术分析
上一篇文章中我们有说到过关于tlab技术相关的内容点,这期我们就来深入一起了解关于对象内存分配背后的技术原理。什么是TLAB在上一篇文章中我们有提及到对象在JVM中的内存管理,大部分情况下对象的分布都是存储在Java堆中存储的,但是如果从JVM设计的角度来思考,直接分配在一个处于高度竞争环境下的公共内存区域是否合理呢?如下方代码所示:public class AllocObj { public User alloc(int id, String name) { User原创 2021-02-05 16:58:59 · 220 阅读 · 0 评论 -
JVM系列--虚拟机的内存管理
Java语言和其他语言在内存管理的区别对比其他语言,例如C语言,在内存管理方面,Java要做得更加“智能”一些。主要是因为Java语言提供了相关的虚拟机进行内存管理。通常在C语言里面,创建一个对象之后需要手动进行对象内存的delete,free处理。例如这段代码:#include <iostream>using namespace std;int main() { cout << "free begin " << endl; void* p原创 2021-02-05 16:34:42 · 212 阅读 · 0 评论 -
JVM系列--趣谈Java历史发展的故事
java技术体系的一些发展故事你好我是idea。本专栏我们来一起聊聊关于java虚拟机家族发展的故事内容,本文可能不会讲解过多关于技术原理相关的内容,更多的相关知识点会比较有趣味些。在1990年的时候,有几个技术宅开始在研究一种能够支持跨平台的系统。为什么C语言不具备有较好的跨平台特性?使用C语言编辑出来的文件最终是二进制格式的,但是不同的cpu对于这些二进制识别的规则不一致,这就容易导致C语言写出来的东西在A-cpu上边可以运行,但是在B-cpu中不能运行,所以说C语言在跨平台方面做的不够完善。原创 2021-01-10 23:30:09 · 463 阅读 · 0 评论 -
Dubbo实现不同分支不同测试环境
在对于dubbo的路由机制和注册机制有所了解之后,我们来分析一下如何实现dubbo服务的不同环境隔离。这一用法的大致思路为:正常的测试环境中存在着api-consumer调用user-provider的这么一个调用关系,这里我们暂时称之为default版本。假设某一天,业务方突然有一个a需求需要开发改动这个两个模块,此时就应该有这么一个关系链路出现,这里我们暂且称之为 version-a 版本。但是由于version-a版本还是待完善阶段,可能还有一些影响主流程的bug存在,直接发布到测试环境替原创 2021-01-01 17:47:19 · 673 阅读 · 2 评论 -
使用redis的scan指令详解
在生产环境中使用了keys指令之后容易导致出现短时间内的请求堵塞,这种情况在高并发环境中是比较致命的存在,因此需要尽可能地避免这种情况发生。常用的查询某些key的指令:scanjedis使用方式:public List<String> scanAll(String cursor, String pattern, Integer limit) { try (Jedis jedis = iRedisFactory.getConnection()) { List<原创 2020-12-24 18:53:57 · 2331 阅读 · 1 评论 -
实战--分布式id发号器
在经过了众多轮的面试之后,小林终于进入到了一家互联网公司的基础架构组,小林目前在公司有使用到架构组研究到分布式id生成器,前一阵子大概看了下其内部的实现,发现还是存在一些架构设计不合理之处。但是又由于适用于当前的业务场景,所以并没有做过多的优化,这里记录一些相关的技术笔记。研发背景在分布式服务中,各种复杂的业务场景需要有一个用于做唯一标识的id,例如订单业务,支付流水,聊天通信等业务场景。尤其是在分库分表场景中,分布式id生成器的使用频率更高。因此分布式id组件的设计应该要能支持以下几个特性:1.全局原创 2020-12-22 17:16:57 · 912 阅读 · 0 评论 -
rocketmq部署外网访问容易踩的坑汇总
对外开放端口:rockemq有9876非vip通道端口:10911vip通道端口:1090910909是VIP通道对应的端口,在JAVA中的消费者对象或者是生产者对象中关闭VIP通道即可无需开放10909端口原创 2020-12-17 11:01:03 · 1578 阅读 · 0 评论 -
可视化Dubbo测试工具iubbox 2.0版本发布啦
不知道你是否在工作中有遇到过类似情况:dubbo接口调试复杂,需要通过telnet命令或者通过consumer调用来触发。telnet语句参数格式复杂,每次编写都要小心谨慎,一旦出错又需重来。复杂对象参数传参调用接口复杂,编写java api调用接口时间成本较高。上述这些坑我在工作中都有遇见过,发现大部分耗时都会卡在调用dubbo服务做自测的阶段,所以后来花费了写业余时间写了一款高效的dubbo测试工具开源给大家使用。这款工具目前已在实际工作中应用半年多,基本功能已经成熟,后续依旧会进行版本维原创 2020-11-28 10:07:18 · 1216 阅读 · 4 评论 -
分布式事务之超详细的Seata实践记录
前两周花了些时间在研究tcc分布式事务的一些相关基础上边,这周来写一篇关于seata的实践文章。网上关于seata落地的demo其实也蛮多的,自己在结合案例和相关文章进行实际落地的过程中踩了不少坑,所以这篇文章主要记录关于落地案例中遇到的困难。技术选型SpringBoot + Dubbo + JdbcTemplate + MySQL + Seata + Nacos使用场景购买商品的时候,扣减库存并且同时插入一条订单数据。ps:简单的模拟场景,没有做锁定库存相关的复杂操作,只是为了验证seata能原创 2020-11-15 16:59:15 · 1833 阅读 · 0 评论 -
一文带你深入浅出zookeeper
zookeeper的基本概念zookeeper是一款开源的分布式协调服务框架,为分布式环境提供了一致性服务的功能,常见应用场景有:发布订阅,主动通知,文件管理,集群管理,分布式锁等功能。zk在设计的时候满足了cp两要素,即一致性和分区容错性。zookeeper的设计理念这里我参考以往的一些经验,将其简单囊括为了以下几点:一致性如下图所示,所有的客户端一旦连接到了集群环境中,不论访问的zk是leader角色还是follower角色,每个zk节点的数据都是相同的。假设某一时刻,zk的某个节点数据被修改原创 2020-11-14 10:47:05 · 292 阅读 · 0 评论 -
谈下我对TCC的一些理解
上一篇文章中讲解到了一些关于分布式事务模型2pc的简单介绍。2pc协议更多是应用于并发访问量不大的跨库场景中。但是由于其使用了大事务的原理,会在性能层面上造成一定的损失。下边来介绍一下另外一种技术方案:tcc。在过去的一周时间内,自己利用了一些碎片时间,大概地实践了下tcc这种设计思路在分布式事务应用中的落地实现。在讲解tcc之前,我们先来说说分布式环境中的一些必备理论基础内容点:CAP理论CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足以下3个属原创 2020-11-09 09:07:07 · 2036 阅读 · 0 评论 -
分布式事务之2PC
最近在工作中接触到了一些数据源切换的任务,需要处理到一些和分布式事务相关的模块,于是今天特意来总结一些关于分布式事务内容的技术要点,方便以后做技术分析的时候能够多考虑一些应用场景。本地事务某个业务场景中,需要往同一个数据库的多张表执行写操作,一旦有任意环节出现了异常,所有的写操作都需要执行回滚操作,保证数据的一致性和准确性,这一致性的保证我们一般称之为“事务”。所以也可以说”事务“是保证数据准确和一致的一种手段。业界常用的数据库如:MySQL,Oracle,SqlServer,Postgre Sql都原创 2020-11-01 22:45:13 · 685 阅读 · 0 评论 -
ByteBuf 和 ByteBuffer的比对
最近在写一些中间件底层的模块,经常需要和netty相关的内容打交道,偶尔会回顾到一些关于nio的知识点,今天正好有空,抽空整理了一些关于nio和netty经常要用到的两个类:ByteBuff 和 ByteBuffer。ByteBufferByteBuffer是属于nio的一款字节缓冲区类,属于原生jdk内置的。常用到的方式为:1.首先创建基本对象2.调用filp方法切换为读模式3.读取之前写入的数据4.调用clear或者compact进行缓冲区的数据清除工作代码案例: public s原创 2020-10-09 23:26:44 · 727 阅读 · 0 评论 -
小林求职记(五)深入分布式缓存
在之前王哥的辅助之下,小明的简历成功被内推进到了王哥所在公司。由于一面就是王哥自己,所以简单聊聊了便过去了。接下来,二面的面试官来了。二面面试官看上去比较年轻的消瘦,戴着一副眼镜,头发比较稀疏,看上去像是有十多年经验的样子,两人在一处安静的地方坐了下来,开始了第二轮面试。面试官:嗯嗯,你好,请先简单自我介绍一下自己吧。小林:嗯嗯,你好,我是XXXX,之前在XXX(此处省略200字介绍)面试官点了点头,一副迷之微笑的表情,然后低头过了一遍简历的内容。直到看见了“负责过电商系统的秒杀项目后端开发模块,原创 2020-08-08 14:28:05 · 380 阅读 · 0 评论 -
小林求职记(四)不会吧不会吧,面试还真会问这些呀
经历了好几次求职失败的经历,小林最终找到了自己以前一起工作合作的老同事王哥,并向前请教面试技巧。小林: 王哥,我最近面试了好几家公司,但是面试都挂了,我觉得自己好多知识点似乎都学得不是很深入啊,自己都快“裂”开了啊。王哥 :哦,你平时大多数时间都是怎么学习的啊?会定期自己的做一些知识脑图的梳理工作吗?小林 :啥,下班时间一般我都是很晚了,回到家也基本没有时间去学习。就算有休息时间一般也是陪朋友打打农药,吃吃鸡之类的。王哥 :嗯嗯,就这???小林 :不然呢,不会吧不会吧,你平时工作也挺忙的样子,居然原创 2020-08-01 17:47:16 · 338 阅读 · 0 评论 -
小林求职记(三)面试不易,全程高能
二面的面试官来到来我的跟前,开始对我的简历进行了一番打量然后就开始了技术提问。面试官: 看了下你在简历上边有写到过关于电商系统的设计,那我想深入问下你在电商系统设计的几个问题哈。小林: 好的。面试官: 你们电商系统的每天的日活量大概在多少呢?小林: 嗯,日活用户数目在5万左右,搞促销活动的时候还会涉及到一些大流量的访问。面试官: 嗯嗯,那么接下来我问你几个系统内部设计的场景吧。小林: 嗯嗯。(表面风平浪静,内心还是会有些慌张)面试官: 你刚才提到了促销活动,那么在搞促销活动之前,你们应该会有一原创 2020-07-25 22:21:53 · 380 阅读 · 0 评论 -
小林求职记(二):说好的问基础,为啥一点也不基础呢?
在上一轮的面试中,小林在mysql方面因为作答不够完善,被面试官吊打了一番。经过两天的自我复习之后,新的一轮面试又开始了。面试官:你好,请简单介绍下自己吧。小林:你好,我是xxxxxx,之前在深圳的xxx公司负责了xxx系统的研发设计。面试官:嗯嗯,那我先来问你一些基础问题吧。小林:嗯嗯,好的。面试官:你了解arraylist吧,请说下内部的一些特性。小林此时心里一下子乐开了花,这个简单啊。小林:arraylist的底层主要是由数组组成,它和普通数组不太一样,arraylist具有自动扩容的功原创 2020-07-18 10:16:57 · 301 阅读 · 0 评论 -
小林求职记(一):面试官:什么是大事务?小林哥:就是 很大...的...事务??
最近疫情期间跳槽不易,在外包公司工作了5年的小林在某直聘软件上边投递了好几家互联网公司的java工程师岗位。在经历了快半年的无人问津之后,终于被一家公司的技术leader叫去了面试。到了南山科技园的某栋大楼地下,看了下时间,距离面试约定时间还有大概15分钟。小王慢慢悠悠地步入了这栋科技大楼,在前台坐下后,过了不久,面试官便赶来了。面试官你好,请自我介绍一下吧。小林你好,我是xxxxx面试官扫了下我的简历,发现了简历上的一点:熟悉mysql数据库。这时候面试官笑了笑,仿佛心里头在盘算着后边该怎么问原创 2020-07-15 07:28:55 · 644 阅读 · 1 评论 -
深入剖析观察者模式
前段时间在工作中使用了观察者模式来做代码段解耦工作,依赖的是通过消息时间处理,但是由于使用的是第三方的依赖,所以将消息的订阅和发布给屏蔽了一部分。今天特意来深入了解一下这方面的知识内容点。对于观察者来说,必定会有事件源和观察事件源的观察者。简单来说,观察者模式就是多个观察者关注同一个事件源,当事件源发生改动的时候,多个观察者都能立马获取到响应。通常我们可以将这种关系用下图来表示:对于设计的代码里面来说,通常我们会定义一个叫做事件源的模块,并且在让观察者和事件源之间为了能有更好的关联,内部一般都会原创 2020-07-12 11:24:35 · 336 阅读 · 0 评论 -
nacos服务注册剖析
最近正在整理关于使用nacos的一些笔记,最近进行一番文档的输出。使用版本 nacos-1.1.4版本nacos注册中心的简单介绍nacos其实是一款阿里巴巴开源的注册中心+配置中心,除此之外nacos还有很多强大的功能。nacos的文件目录在nacos安装包底下,我们可以大概看到nacos包含了以下几类文件夹,不同的文件底下存储了不同的数据信息。最后在target文件夹底下发现了nacos的jar包,因此我好奇地将其打开来一探究竟。发现内部的jar将nacos的管理台源代码给打包了一份。原创 2020-07-08 08:31:50 · 1366 阅读 · 0 评论 -
开源一款超实用的一套Dubbo测试工具
不知道你是否在工作中有遇到过类似情况:dubbo接口调试复杂,需要通过telnet命令或者通过consumer调用来触发。telnet语句参数格式复杂,每次编写都要小心谨慎,一旦出错又需重来。复杂对象参数传参调用接口复杂,编写java api调用接口时间成本较高。上述这些坑我在工作中都有遇见过,发现大部分耗时都会卡在调用dubbo服务做自测的阶段,所以后来花费了写业余时间写了一款高效的dubbo测试工具开源给大家使用。这款工具目前已在实际工作中应用半年多,基本功能已经成熟,后续依旧会进行版本维护原创 2020-06-17 22:48:43 · 1160 阅读 · 1 评论 -
关于营销系统的一些实战心得
营销系统是一个动态的、有机地结合的系统,经常会随着业务的不断变化发生调整,因此从事这一业务的开发可让我头疼了。之前在工作中就不乏一次遇到过随意调整营销策略的情况,在部分场景下由于使用了硬编码的方式来实现,因此在调整策略的时候显得特别不灵活。下边我列举一个曾经遇到过的应用场景:业务部门需要上线一款新型的产品,用户在线上购买了对应的产品,然后下单支付之后需要享受不同的服务内容,这些服务包含了赠送...原创 2020-05-14 15:54:58 · 580 阅读 · 0 评论 -
结构型设计在工作中的一些经验总结
关于设计模式的一些实战总结 – 常见的结构型设计模式在设计模式里面,有一种叫做适配器的设计模式 Adapter Design Pattern ,这类适配器模式通常应用于做不同接口之间的适配和调整,常见的应用场景例如:对一些不同实现的接口做统一整合,对一些接口的设计“缺陷”做一定的补救措施。举个栗子来说,假设某个业务场景里面的遇到了一个人脸识别的功能:公司内部接入了多个第三方的认证接口,具体的接口设计如下:public interface IFaceRecognitionService {原创 2020-05-14 12:55:03 · 381 阅读 · 0 评论 -
深入挖掘Spring系列 -- 重新认识ioc
本文的主要讲解是关于spring里面的ioc发展以及对于ioc的理解学习任何知识点都不应该是直接去扣它的细节,而是应该先去从脉络上去熟悉相关知识点。什么是ioc?从spring容器的创建到销毁,每个bean都会有自己独立的生命周期。而ioc容器主要是用于配置,定位,实力化这些个bean的相关信息。个人的认识里面,ioc更多的是一种思想,原先我们创建一个bean的时候,都需要手动的去对这个b...原创 2020-04-19 23:12:37 · 446 阅读 · 1 评论 -
基于aop+自定义注解来构建多数据源的切换
针对微服务架构中常用的设计模块,通常我们都会需要使用到druid作为我们的数据连接池,当架构发生扩展的时候 ,通常面对的数据存储服务器也会渐渐增加,从原本的单库架构逐渐扩展为复杂的多库架构。当在业务层需要涉及到查询多种同数据库的场景下,我们通常需要在执行sql的时候动态指定对应的datasource。而Spring的AbstractRoutingDataSource则正好为我们提供了这一功能点,...原创 2020-03-09 21:53:29 · 672 阅读 · 0 评论 -
zookeeper源码分析--序列化篇
其实很多时候我们都在使用zkclient这款jar包对zk进行相关的操作,但是在zkclient里面到底发生了什么,我们却并不是很清楚。对zk的了解出了简单的节点创建,删除,监听以外,我们还可以加深对它的思想理解。下边我们来深入探讨一下zk的内部机制:其实我们清楚一点,zk是采用了java语言进行编写的,因此关于zk这部分的内容对于java程序员来说是比较好接受的。现在让我们来看下zk里面序...原创 2019-10-27 19:56:52 · 377 阅读 · 0 评论 -
数据的异构实战(二)手写迷你版同步工程
首先在我们讲解RocketMQ之前,先从他的前身开始讲起—JMS。什么是Java消息服务?两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持JAVA应用程序开发。在J2EE中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务连接起来,可以达到解耦的效果,我们将会在接下来的教程中详细...原创 2019-10-20 23:05:44 · 315 阅读 · 0 评论 -
ARTS-24 字符串互异
概述:左耳朵耗子专栏《左耳听风》 用户自发每周完成一个ARTS:1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思考的技术文章请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。给定一个stringiniS...原创 2019-10-14 23:47:42 · 185 阅读 · 0 评论