- 博客(54)
- 资源 (1)
- 收藏
- 关注
原创 总要有一次,为自己疯狂
我们在每一刻都会面临无数个选择,我们在过去无数个选择中的选定绘制出了如今的生活,而站在未来十年、二十年的角度,选择的自己也是一个起点,从现在开始的每一个决定都会不断的改善未来的自己。简单来说就是“种一棵树最好的时间是十年前,其次是现在”,因此从现在这一刻开始,让咱们为了自己感兴趣的事情,疯狂一次吧。
2024-03-16 11:52:32 371
原创 Pulsar IO实战
纸上得来终觉浅,绝知此事要躬行。学习不能仅仅停留在纸面上或者理论,脱离使用去探讨设计或者源码都是不切实际的。因此今天一起体验了一把Pulsar IO,除此之外Pulsar还提供了非常丰富的跟其他系统交互的Connector,详细可以看上面发的下载地址并尝试使用自己感兴趣的Connector感受下实操的快乐~
2024-03-13 19:50:27 876
原创 Pulsar消息路由深入剖析
在有些业务场景,我们需要将自己的业务逻辑“融入”路由策略,因此像Pulsar、Kafka等消息中间件都是支持用户进行路由规则的自定义的。这里为了好玩,咱们尝试将数据按照 1:2:3:4 等比例分别落在四个分区如何?说干就干,自定义路由也是比较简单的,只需要实现Pulsar MessageRouter接口的choosePartition方法即可,实现逻辑如下count++;return 3;
2024-03-13 19:44:34 857
原创 Worker调度管理器原理解析
以上就是Pulsar中Worker的调度过程,这里主要是以Worker独立部署的方式进行讲解的,基于Broker启动的Worker感兴趣的朋友可以自行跟踪下代码。
2024-03-05 19:42:49 1025
原创 万物皆可模块化分解
上面就是模块化的好处,原本看似不可能完成的东西通过模块化分解后都是可以完成的。因此在这里想表达的是,虽然学海无涯,但是对于咱们热爱的事情,可以利用好这个方式,将要做的大任务或者要学习的大的方向进行分解,然后在逐个攻克一个个小单元,因此不用害怕任何事情,大胆折腾起来。
2024-03-05 19:38:58 350
原创 Pulsar3.2 Function的介绍与使用
基于Function接口实现自己的逻辑,打包编译成jar包/***/@Override基于该jar包启动function启动客户端监听test1-output-topic往Topic test1-input-topic 里写入数据消费者打印启动function有时候会遇到下面这个问题,一般都是function命名冲突导致的,修改yaml配置里name在重新create下就可以了。
2024-02-28 18:59:17 1013
原创 一文弄明白KeyedProcessFunction函数
监听本机7777端口读取字符串将每个字符串用空格分隔,转成Tuple2实例,f0是分隔后的单词,f1等于1将Tuple2实例集合通过f0字段分区,得到KeyedStreamKeyedSteam通过自定义KeyedProcessFunction处理自定义KeyedProcessFunction的作用,是记录每个单词最新一次出现的时间,然后建一个十秒的定时器进行触发。
2024-02-21 19:51:37 1030
原创 压制es-hadoop这头野兽的方式来了~
以上就是整个问题的解决过程,我也相信一定有更好,更优雅的解决方式,如果你恰好有好的想法也可以给ES-Hadoop社区提供;但无论黑猫还是白猫,能抓到老鼠的才是好猫,通过方案三快速的解决的问题并且稳定运行了一年,给公司节省下扩容集群的成本,这在我这个菜鸡看来已经够了。如果你也比较赶时间的话,可以考虑直接试下我的jar包,希望能对您有帮助。
2024-02-21 19:09:54 879
原创 欲速则不达,慢就是快!
在最后,跟大家分享一句很喜欢的话,“如果有一天,你不再寻找爱情,只是去爱;你不再渴望成功,只是去做;你不再追求空泛的成长,只是开始修养自己的性情;你的人生一切,才真正开始”
2024-02-20 15:55:37 933
原创 五分钟搭建本地大数据集群
上述组件都是apache旗下的,通过此地址找到对应的版本下载使用即可 https://archive.apache.org/dist/hadoop/common/,但如果下载速度慢的话可以考虑通过这个地址进行加速下载 https://mirrors.tuna.tsinghua.edu.cn/apache/,后面这个地址仅用于学习,请勿用于商用。以上就是搭建一个简单的本地调试环境的流程,最好是都能手动操作一次,对这几个基础服务都有一定的了解。进行服务的后台启动。启动服务即可,通过指令查询可看到已经启动服务。
2024-02-17 16:08:58 490
原创 莽,就完事啦!
随着知识量的增加,有时会减低执行力。小时候很多东西不知道,但是就很莽,大胆的撬开电风扇,哪怕组装回来多了几个零件也很自豪;小时候好奇海的那边有什么,跟着小伙伴们沿着海岸线跑一下午都不觉得累。但是随着对这个世界的了解的增加,我们逐渐变得“理智”,喜欢的人还没开始去追就内心觉得反正也成功不了就放弃了,有些工作还没开始就觉得这个设计方案行不通甚至开发好的代码迟迟不上线,因为不发布就不会有问题等等呢个。为了避免失败,于是乎放弃所有开始,但是今天我想说的是,莽,就完事拉~
2024-02-04 22:35:17 379
原创 手写分布式存储系统v0.3版本
由于咱们的服务是分布式的,那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是,张三家里在全国各地有不少火锅加盟店,那张三肯定要有一个方式知道这些火锅店加盟店的情况。例如上海又新开了一家加盟店,那么这家加盟店肯定要先通过某种方式联系张三,这样张三才能将配方以及食材供应给这家新的加盟店等等。疑问为什么不能通过域名映射的方式来做映射,客户端通过域名调用服务就好了为啥要专门做服务发现。
2024-02-04 17:42:08 1462
原创 手写分布式存储系统v0.2版本
上回说到手写分布式存储系统v0.1版本,已经实现了通过监听TCP端口并将数据写到本地磁盘的功能,今天咱们就继续往上面添砖加瓦
2024-02-02 20:12:45 957
原创 哇塞,这几种Java文件读写性能差距居然这么大?
通过比较能看到在高频写数据到磁盘时,mmap的性能非常显著,有类似的场景时可以优先考虑mmap。当然最好是自己做下基准测试。
2024-02-02 20:03:03 384
原创 手写分布式存储系统v0.1版本
实现一个系统,设计是最过瘾的过程没有之一,类似你搭积木前在脑海设计构建一副大致的“雏形”,只有有了这个东西之后才能够指导最终实现的方向以及确保不会偏离的太差。
2024-02-01 10:09:23 448
原创 瞧瞧,这就是JDK序列化
今天来聊聊JDK自带的序列化,企业级软件开发过程中一定会涉及到数据落盘或者网络传输数据,由于Linux操作系统要数据落盘或者传输数据前需要将数据转为二进制数据流,因此我们需要一套规则来将Java世界中的对象(数据)转化为二进制数据流,而JDK提供的序列化就是这套转换规则。以上就是使用JDK序列化/反序列化的流程,可能工作中我们不会频繁的写序列化代码,但是通信/存储相关的组件里一般都会高频的进行序列化/反序列化操作,因此如果之后我们要自己设计通信/存储的话,掌握序列化是非常有必要的。
2024-01-21 15:44:40 831
原创 仰望星空,也要鲜花与掌声
因此再来看第二种方式,在有目标之后的第一件事是先将其拆分为独立的一个个小任务,每攻克一个小点时,我们都可以适当做下输出,无论是输出技术博客、还是技术分享或者是其他方式,在接受到“鲜花与掌声”后我们会拥有更多的动力对下一个“堡垒”发起进攻,在接受“鲜花与掌声”的同时,我们也能听到更多的反馈,例如可能会评论说你对IOC的某个理解是错误的、领导觉得你的这个方案一可能存在某个缺陷等等,那么在这个基础下,你在开启下一个环是有个更多的“注意事项”,这能让你更有条不紊的朝着最终目标前行。
2024-01-10 10:51:19 370 1
原创 漫画演绎策略设计模式
通过抽象出一层策略层来解耦“妈妈”和教育方式,“妈妈”和教育方式的细节都依赖于策略层,“妈妈“只需要告诉策略层自己要选择哪一种教育方式即可,具体内部复杂的逻辑不需要”妈妈关心“,从而达到了”职责分离“的效果,很好的解决了上面描述的两个问题,具体实现如下。从前有一个妈妈,她有一个叛逆的儿子,妈妈每天除了上下班就是要教育儿子,上下班的内容是固定的,现在每天唯一负责并且可能会变的就是教育儿子的方式,那么我们应该如何设计呢。可以看到改动很小,即便后续有新的教育方式,只需增加新的策略类并改动这一行代码即可。
2024-01-10 10:48:29 654
原创 AQS原来是这么设计的,泰裤辣!
在AQS中可以看到不少优秀的设计,这都要归功于Doug Lea老爷子;除了AQS,在juc里还有很多优秀的设计,如并发性能最好的字典ConcurrentHashMap、无锁高性能队列ConcurrentLinkedQueue等等在品完源码后,你会发现其设计思想丝毫不逊色于各个大数据组件“曾经想征服全世界,到最后回头才发现,这世界点点滴滴全部都是你” ——致JDK。
2024-01-05 10:08:21 980 1
原创 pulsar原来是这样操作topic的
本篇主要讲述pulsar topic部分,主要从设计以及源码的视角进行讲述。在pulsar中,一个Topic的新建、扩容以及删除操作都是由Broker来处理的,而Topic相关的数据是存储在zookeeper上的。本篇文章模拟一个高效的学习流程进行展开在日常对pulsar Topic操作时,咱们常常会用到以下指令更多的操作可以参考 https://pulsar.apache.org/docs/3.0.x/admin-api-topics/在这里列举了针对分区并存储Topic的四个操作指令以上就是使用方式,
2024-01-05 09:58:32 903
原创 学习录
这几年在迷茫中看了不少资料,有觉得写得很棒的,也有写的很糟糕的。所以一直想写这块的总结来进行归纳,同时也希望能给其他处于迷茫中的朋友提供一份高质量的资料列表(也许一个读者也没有),以下清单个人觉得值得反复看以及思考看完的读者会发现,博主通篇没有给任何东西定义对错。应试教育、功利心强、毕业了赚到钱不学习、投机取巧走捷径、只读书不转化为技能、不看完这篇博客或者否定这篇博客中所有的观点,可能都是“对”的。但所谓的对错真的重要吗?
2024-01-05 09:51:11 1096
原创 上帝视角俯视工厂设计模式
是不是回过神来好奇为啥原先的new方式变成了这么复杂的方式,让咱们捋一捋,首先咱们内心要切记一件事,就是每一个设计都是为了解决一个问题,把问题捋清楚了就不怕了。大致的梳理如下大致的演变方式如上图,无需死记硬背,理解就好相同点。
2024-01-04 15:33:22 1001 3
原创 详解bookkeeper AutoRecovery机制
在这里解答下引言小故事张三是通过什么规则被选成“监督者”的?张三是通过zookeeper的Paxos算法选举产生的如果张三也不辞而别呢?大狗和二狗也会通过zookeeper监听张三的状态,如果张三不辞而别的话,大狗二狗会通过zookeeper选举成为新的“监督者”为啥要通过签到本的方式,而不是张三直接去挨个挨个看?通过签到本的方式比较节约张三的时间,否则当员工比较多的时候并且对感知时间比较快的时候,张三就要每隔几分钟就要跑去挨个挨个看,这样没多久张三也要“不辞而别”了。
2024-01-04 15:25:46 1341
原创 LeetCode——2——两数相加
原题地址: https://leetcode-cn.com/problems/add-two-numbers/description/题目:给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 ->...
2018-04-20 21:36:06 214
原创 寻找链表环的问题
寻找链表环的问题一、简介这篇博客主要介绍判断链表是否存在环、寻找环的入口点和计算链表的长度的解决方案,主要是介绍思想,不涉及代码。(因为本萌新的师傅一直教育思想的重要性)这里主要介绍三种解决方案: ① hash存储 ② 反转指针 ③ 快慢指针二、hash存储1、核心思想只要将遍历过的节点都存储下来,然后在遍历下一个节点的时候,使用下一个节点来和所存储的节点进行比较...
2018-04-12 19:20:07 1244 5
原创 两链表相交问题
两单向链表相交问题一、问题分析(1)两个链表相交,那么两个链表中的节点一定有相同地址。(2)两个链表相交,那么两个链表从相交节点开始到尾节点一定都是相同的节点。 (问:为什么? 答:因为每一个节点最多只能有一个下一节点,因此在相交节点之后,链表不可能再分为两个链表)二、问题解法根据两个链表是否存在环来分类讨论1、无环无环的情况有两种比较快速的解决方式,这两种方...
2018-04-11 15:14:01 1380 4
原创 线程池原理
一、线程池优点① 重用线程,提高性能(减少时间/空间开销) ② 控制最大并发数(提高资源利用率、避免过多的资源竞争) ③ 管理线程(使线程的使用简单、高效)二、线程池的框架Executorjava中的线程池是通过Executor框架实现的,Executor 框架包括 线程池接口:Executor和ExecutorService 线程池类:ThreadPoolExecuto...
2018-04-10 17:20:36 210
原创 责任链模式
一、概念 (行为派设计模式) 将能够处理同一类请求的对象连成一条链,使这些对象都有机会处理请求,所提交的请求沿着链传递。从而避免请求的发送者和接受者之间的耦合关系。链上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给链上的下一个对象。直到有一个对象处理它为止。 学过C语言的朋友可以把这个理解为链表,每一个单元都是独立的个体,若是能处理请求就处理,不能请求就将请求发给下一个单
2017-06-02 15:20:04 294
原创 工厂方法模式
一、概念 定义一个创建产品对象的工厂接口,让子类决定实例化哪一个类,将实际创建工作推迟到子类当中。(和简单工厂不同,工厂方法不直接创建对象,而是在它的下面部门也就是子类来创建)二、应用场景 不管是简单工厂模式,工厂方法模式还是抽象工厂模式,他们具有类似的特性,所以他们的适用场景也是类似的。 1、作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是
2017-05-29 19:13:52 397
原创 简单工厂模式
一、概念 简单工厂模式是创建型设计模式,它根据你传入工厂的参数来确定具体实现哪个对象(比如在工厂里面要做一件事,你将一台机器的名字传进来,工厂就能根据这个参数来找到对应的机器来处理要做的事情)二、目的 帮我们把对象实例化的部分提取出来,进而优化系统架构,更好的体现开闭原则(可以帮我们忽略实例化的过程)三、使用场景 在不确定会有多少个处理操作时应该考虑使用简单工厂模式,如针对同样的接收到的数据,
2017-05-29 16:22:50 402
原创 设计模式原则
一、开闭原则 概念:软件实体对拓展开放,对修改关闭(在不修改原有代码上添加新的功能)例子:比如说一个拥有一个‘增’‘删’‘改’的功能模块,现在要增加‘查’的功能,此时只需要去开发一个接口增加该功能即可,不需要改变原有模块的内容(可扩展程度高,可维护性强,使变化的系统有一定的稳定性和延续性)如何实现该原则:区别哪些是变化的部分,哪些是不变化的部分。对于不变的部分,可以将其加以抽象成不变的接
2017-05-28 19:21:19 252
原创 插入排序
输入:n个数的一个序列 输出:输出序列的一个排序插入排序对于少量元素的排列是一个有效的算法思想:插入排序就像是有些人排序手中的扑克牌一样。 首先拿起牌堆的第一张牌放在左手,然后再拿起第二张牌来和左手的牌做比较,若是比左手的牌小就放在其左边,反之亦然。 在左手中有两张牌后,再拿起桌上的第三张牌,从右往左做对比,若是比最右的牌大,则放在其右边;若是比最右的的牌小,则和其左边的牌作比较: 1、左边的
2017-04-26 15:43:29 250
原创 当Myelipse遇上Git(旺旺篇)
让Myelipse姐姐帮忙开发是一件很愉悦的事情。但旺旺最近遇到了一件很苦恼的事情,每次项目做到一定的阶段时,为了防止修改出错,它都要手动的去myeclipse->workplace目录下把项目copy一份出来放在备份文件里面,一开始还没觉得什么,可是越到后面旺旺就开始想觉得累了。一方面不知道修改了哪些地方,一方面效率确实不行。那么有什么好的解决方法呢? 旺旺找上了村里最有智慧的猿猿,猿猿说:你这
2017-04-11 23:52:41 279
原创 SpringMVC_开天辟地
SpringMVC的优点太多,这里暂且不详细说明,就给大家分享一下如何搭建我们的第一个SpringMVC一、新建我们的项目在myelipse下新建Web Project创建我们的项目,然后在src里面分别创建四个包,分别是dao、domain、service、web(具体名字可以自己起)和一个beans.xml文件,这是spring最关键的一个文件,里面将来是要管理几乎项目里所有的
2017-04-06 08:52:21 428
原创 Linux基础
Linux查看所有用户在终端里.查看 /etc/passwd文件groupdel 用户组名 的格式来移除用户组dirname Linux下获得目录路径比较常用的是pwd命令和getcwd()函数了,但是有时候并不能很容易的match一些比较常用的需求。问题来自闪电的一个问题,他写了一个程序放在一个文件夹里面交给客户,这个文件夹里面有若干应用程序和
2017-04-04 15:09:20 319
原创 数据库基础知识
几种数据库连接方式优缺点比较 能成功连接mysql的jdbc: Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","
2017-04-04 15:08:12 316
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人