自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

水中加点糖

https://github.com/puhaiyang

  • 博客(181)
  • 资源 (1)
  • 收藏
  • 关注

原创 Frrouting快速入门——OSPF组网(一)

FRR是FRRouting的简称,是一个开源的路由交换软件套件。其作者源自老牌项目quaga的成员,也可以算是的新版本。FRR支持的协议众多,也有较为完备的北向接口。FRR的安装方式多种多样,如仅仅把它当做工具使用,使用docker运行FRR是一个不错的选择。docker方式运行frr时需要注意:较新版本FRR的docker仓库由quay.io维护,并没有在dockerhub中。

2024-07-04 21:06:57 645

原创 聊聊二叉堆、红黑树、时间轮在定时任务中的应用

程序=算法+数据结构。不同的算法与数据结构有着它独特的美,在实际业务运用时也需要从具体的业务出发进行多维度分析,选择一个底层实现最适合的框架,以让您的业务场景运行起来速度又快占用空间又少,岂不美哉。

2024-06-07 23:02:37 1239

原创 一文秒懂cli、snmp、yang、netconf、restconf、openconfig

自以太网诞生以来,各种技术引领着一代代的潮流。星辰闪耀,数不尽的网络承载着各种通信的可能,让我们也不禁感慨网络之浩瀚。前有“云大物移智链边”的风起云涌,后有AI浪潮的大放异彩。上层应用的遍地开花,也迫使着底层网络技术的不断发展。SD-WAN、P4、QUIC、SRV6、SNOIC等一堆和网络相关的技术也应运而生。无论以上种种技术如何的变迁,最终信息的传递还是基础硬件扛下了所有。尽管这些年来也有高性能硬件也在不断诞生,如多年前处理网络数据包速度达到6.5Tb/s的Tofino芯片犹如破竹之势,与传统交

2024-04-06 17:22:38 1500

原创 从vrrp、bfd、keepalived到openflow多控制器--理论篇

在一个网络中,通常会使用vrrp技术来实现网关的高可用。直接使用vrrp由于定时间隔较长存在检测迟缓的问题,融入bfd机制后可实现毫秒级故障检测。在sdn中要实现设备的高可用,实现控制器的集群和高可用是非常有必要的

2024-03-31 22:23:11 904

原创 使用mininet快速入门ONOS路由交换技术与原理-路由篇

但在芸芸网络的世界中,主机间的通信除了二层域外更多的还是纷繁复杂的三层ip路由通信。上篇文章使用mininet搭建了一个简单的网络拓扑,并实现了同一交换机下同网段多主机的通信,其中涉及到的通信知识主要以二层mac地址通信为主。路由协议可分为静态路由协议和动态路由协议,在动态路由协议中,根据路由协议的作用范围主要又分为IGP与EGP。其中EGP中的BGP协议根据其强悍的设计可支撑起各数以亿记的路由条目,同是也是动态路由协议中最为复杂的一个。而本文将结合BGP路由协议,通过一小示例实现SDN下不同网段多主机通信

2024-02-29 21:50:57 1245

原创 使用mininet快速入门ONOS路由交换技术与原理-交换篇

onos-2.7.0ideamininet提供了多种方式模拟openfllow交换机与主机,如命令行和python脚本方式。另外还可使用mininet源码中的miniedit构建需要模拟的拓扑信息,miniedit软件截图如下:如要使用miniedit,可将mininet代码clone,,运行对应位置的miniediy.py即可。

2024-01-18 22:22:10 1374

原创 SDN控制器-ONOS中的最终一致性存储

ONOS中设备信息的存储基于GOSSIP协议实现,节点间进行数据交换主要有定时随机传播和数据变更后主动广播两种方式。通信的实现上基于atomix组件(底层基于NETTY)使得用户无需关心具体的通信过程。在节点数据交换的过程中,主要使用PUSH的方式进行数据交换。首次PUSH时本节点仅传递本节点的摘要信息(基于时间戳)推送到对端节点,对端节点收到摘要数据后进行对比,将新的数据PUSH到源节点。

2023-12-17 17:00:21 311

原创 使用bitmap实现可回收自增id

设计一个方法,每次调用返回一个自增id,同时需要满足以下要求。思路一:如果数据量非常小,直接使用一个集合存储已使用的id,使用循环和维护这个集合即可,但数据量大了,此方法返回数据的时间复杂度和占用的空间都是比较大的。思路二(推荐):建立一个(位图)bitmap,初始时bitmap的每一位都为0,0代表未使用,1代表已使用。每次请求获取id时从此bitmap的第0位开始返回一个未使用的index即可。以一个bitmap长度为65536的bitmap为例,示意图如下:初始时每一个bit位值都为0此时请求id返回

2023-11-09 22:47:14 277

原创 四叉堆在GO中的应用-定时任务timer

在数据量不太大的情况下,四叉堆的综合性能比二叉堆更优GO中time.timer和time.tick是使用四叉堆实现的time.tick的任务每次运行后会重新入堆,time.timer的任务每次运行后会从堆顶删除。

2023-10-15 18:22:39 374

原创 map、sync.map、concurrent-map适用场景与源码解析

在go中进行KV存储时,常用map、sync.map、concurrent-map这3种map实现。项目中选型时具体应该使用哪个需要分析具体的业务场景,可参考sync.map中的这段话:最后,再简单总结一下:项目中选型时,应优先考虑使用原生map进行KV存储;多个协程的并发读写场景,应优先考虑在map中加上互斥锁(Mutex)或读写锁(RWMutex)实现,这样对map的编码方式改动也最小。并发场景为读多写少的场景,则可考虑sync.map;

2023-08-27 23:03:44 440

原创 使用家庭宽带和摄像头,实现公网直播

那天去逛商场看到有个营业厅,本想进去问问有没有存话费送话费的活动,结果被忽悠办了一个19.9升千兆宽带加送一个路由器的业务。

2023-07-03 12:08:24 2420

原创 多网口UDP发包无法收到回包排查与解决

最近几周几乎都是单休,加班很多,也遇到了很多未知的问题,杂事也多时间比较紧张,也没有多少空余来进行一些总结积累。这点让我很是怀念起几年前的日子,任务安排周期长,做技术纯粹又专心。前几天遇到了一个UDP发包无法收到回包的问题,趁着今天不加班来记录回顾一下。

2023-06-30 23:20:32 2041

原创 go中后台启动程序

很多时候,我们想要让某个程序在后台运行,通常会使用nohup来启动这个程序。最常见的用法如下:如果要启动的程序较少,手动使用nohup启动就可以了。但遇到一次需要启动很多程序,那么使用程序脚本来启动这些程度则是一个不错的选择。正好最近公司项目中每次调试时需要启动很多关联程序,每次逐个检查每个程序的运行状态也是一件无聊又枯燥的事。正好最近接触到go,为了偷懒就用go来写个脚本代码,那些费时伤神的事就让go去干吧~

2023-06-17 22:36:37 1142

原创 使用thrift进行RPC通信(附c程序示例)

为了实现不同语言的程序跨进程、跨主机通信,一般可以采用mq或rpc框架来实现。对于异步通知的场景可以使用mq,如zeroMQ。但对于某些实时性较强且同步的应用场景,使用成熟的rpc框架来实现也是一种比较更好的选择。开源的rpc框架有很多,其中跨语言的rpc框架以使用google公司采用protobuf协议的grpc框架,和facebook公司的thrift框架最为知名。

2023-05-17 21:37:22 1029

原创 mongodb使用docker搭建replicaSet集群与变更监听

在mongodb如果需要启用变更监听功能(watch),mongodb需要在replicaSet或者cluster方式下运行。replicaSet和cluster从部署难度相比,replicaSet要简单许多。如果所存储的数据量规模不算太大的情况下,那么使用replicaSet方式部署mongodb是一个不错的选择。

2023-03-30 20:16:47 1729

原创 onos中引入外部依赖

当前版本的onos使用的是bazel进行依赖管理的那么对于外部依赖的管理也由bazel负责在bazel的官方文档中也有对应的说明,详细可参考在ONOS中,通过查看源码根目录下的可以看到关键信息:对于外部依赖的引入是由完成的,此文件存放在项目的路径下,如下图:在此文件中定义了依赖包的具体远程地址每个包的依赖都和maven仓库中的资源对应。

2023-02-15 23:48:21 338

原创 java-raft框架之atomix进行分布式管理

atomix的api远不止本例中的两个,还有其他很多的api。如分布式锁、分布式事务、分布式自增id、分布式队列、分布式信息号等,这些在atomix中都有实现,详细可见atomix的类方法:也正如当前所说,当前基于JAVA实现的atomix已经停止维护了。如果要在生产环境中使用atomix,可以移步atomix的官网,获取在k8s环境下的新版atomix的使用方式,依然很强大。

2023-01-30 22:44:54 850

原创 SDN控制器-ONOS源码编译与mininet快速入门

sdn快速入门,使用ONOS源码方式编译。ONOS-2.7.0+Bazel+Mininet快速入门。

2022-11-21 13:28:09 2656 2

原创 docker下快速部署openldap与self-service-password

通过docker部署slf-service-password,实现ldap下的用户密码自助修改功能

2022-11-01 22:32:02 1187

原创 docker下快速部署openldap与PHPLdapAdmin

在一个组织中,为了简化各种内部系统的账号和密码的管理,往往就需要ldap来进行管理了。对于ldap的实现方式也非常多,但在免费的开源系统中,openldap是ldap的首选系统。同时,在这一切讲究快速的时代,采用docker来进行openldap的部署,也是一个很好的选择。在这里,我们来一起学习体验一下。

2022-10-31 23:44:40 1602

原创 coding上的免费的编译、打包、推镜像工具(cicd)太强了,必须分享一下

免费的持续集成工具,YYDS

2022-09-11 16:28:16 1755

原创 疫情宅在家,研究一下fastjson中字段智能匹配的原理

fastjson智能匹配的原理。fastjson中下划线是如何自动转驼峰的。

2022-09-08 22:32:15 1351

原创 优雅编码之——传统项目中,使用openfeign替换掉项目中的httpclient

用feign来替换到项目中的http工具类,让代码更简单

2022-09-04 20:57:33 2286

原创 花了大半天,写了个springdoc/springfox/swagger文档转word的工具

swagger/springfox/springdoc接口文档导出word,附源码

2022-08-22 16:41:50 1438 4

原创 快速掌握jmeter(二)——控制器与beanshell实现csv自动化测试模板

在我看来,如果代码有了设计模式可以变得美而优雅那么jmeter有了logic controller之后,jmeter就不单单仅是一款性能测试工具

2022-08-08 22:35:02 2488 1

原创 快速掌握jmeter(一)——实现自动登录与动态变量

快速实现jmeter自动登录与动态变量使用。后置处理器,动态变量与函数。

2022-07-31 22:40:52 1260

原创 opencv快速实现任意角度二维码矫正

任意角度二维码图片快速矫正。

2022-05-29 17:06:55 4401 5

原创 为什么不建议使用ON DUPLICATE KEY UPDATE

昨天评审代码时,大佬同事看到我代码里使用了mysql的on duplicate key update语法实现了对数据的save or update,说这个语法有严重的性能和其他隐患问题,让我必须改成先查询一次分出新增集合和修改集合,再分别进行批量新增和批量修改的方式进行,并对批量修改时使用case when的方式实现。对于批量修改,在mybatis中也就是类似这种的xml: <update id="updateByIds"> update tb_user

2022-03-27 13:26:34 3998 1

原创 idea中analysis之analyze data flow功能体验

周末没啥事,就看了看idea的文档,其中发现了一个感觉挺不错的功能,可以用来分析代码的影响范围,在这里分享记录一下官方文档说明地址https://www.jetbrains.com/help/idea/analyzing-data-flow.html其中对于这个功能的描述为:When working with large codebases, it is sometimes difficult to figure out how data is processed and how the work

2022-02-28 20:00:17 2381

原创 春节期间必学算法之-洗牌算法

春节期间免不了聚会,为了打发无聊的时间,免不了和亲朋好友一起打牌。想到这个问题,联想到如果亲朋好友让我这个程序员设计一个发牌的程序,我会怎么做呢?身为一名参加工作4年多的程序员的我,为了不出洋相,决定还是先来提前学习一下。目标先将此问题转为一个面试时很容易被问到的一个面试题:设计一个方法,每次调用时从1-100中返回一个不重复的随机数。常规思路对于上面这个问题,我能想到的最常规最简单的思路便是:每次进行获取一个随机数时先判断是否已经返回过,如果已经返回过则进行重试,重新返回一个新的随机数。这种

2022-01-31 23:04:36 1397

原创 使用antlr快速解析SQL

使用antlr快速解析SQL

2021-12-26 22:04:27 8004 3

原创 spring cloud kubernetes在pod模式下服务调用源码解析

之所以只看pod模式下的服务调用链路,是因为在service模式下不会走缓存,效率低,并且负载均衡模式不能由spring cloud框架所控制,不太灵活需要关注的几个类:DiscoveryClientorg.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClientorg.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBal

2021-11-30 20:38:25 842

原创 快速实现leader选举之Spring Cloud Kubernetes Leader Election

说起节点选举,一般最先想到的就是使用zookeeper或redis来进行实现。但有时因为项目的原因,如果不方便引入其它的中间件,又正好使用了spring cloud kubernetes框架,那么就可以直接使用spring cloud kubernetes leader election来实现节点选举了。The Spring Cloud Kubernetes leader election mechanism implements the leader election API of Spring I

2021-10-23 17:40:09 944

原创 spring cloud kubernetes源码解析之feign与loadbalancer

现在是2021年8月的一个星期四,窗外是刚下过大雨的夜色,伴着几点稀零的灯光。我戴着耳机,在客厅阳台上的书桌前吹着安静的风,耳机中正好播放“夜风凛凛 独回望旧事前尘”张国荣的歌。不知道不觉间,我来公司也已经二年了。二年间匆匆过去,同样也预示着我也从大学毕业正好四年了。在公司这二年间,我见证了公司的微服务从docker->docker swarm->kubernetes迁移的一路历程。同时变化的也还有青涩的自己,从中级JAVA->项目技术负责人->team leade

2021-09-30 20:39:17 1693

原创 快速入门JAVA单元测试——mock

背景为了确保代码的质量,对编写的代码进行单元测试是非常有必要的。在JAVA项目中,一般的项目结构比较复杂、依赖众多。在微服务与spring boot大行其道的今天,单纯靠junit来进行单元测试一般很难完成对模块的单元测试。为了让JAVA项目中的单元测试更加灵活便于编写,各种mock框架应运而生,其中最为常用和经典的mock框架非mockito与powermock莫属。为了快速入门,本文将通过几个实例让大家快速了解mokito与powermock的使用方法。同时将对mokito与powermock

2021-08-28 14:26:29 3434

原创 spring cloud kubernetes项目负载均衡pod模式下,如何实现平滑访问?

如果再回到从前所有一切重演我是否会明白生活重点简介如果spring cloud项目使用kubernetes作为服务的注册中心,最方便快捷的办法就是直接引入spring cloud kubernetes组件,具体的操作办法可以看下以前的文章:spring cloud项目改造为spring-cloud-kubernetes项目spring cloud kubernetes负载均衡方式对说spring cloud kubernetes项目来说,它支持两种负载均衡模式,详情可看loadbalanc

2021-08-08 23:34:55 1013 1

原创 使用spring-integration快速实现mysql分布锁

正如上篇文章spring自带分布式锁-[jdbc-lock-registry]源码解析所说的那样:对于并发不是很高,并对性能追求不是很迫切,又不想引入其他第三方组件的情况下,使用数据库来实现分布式锁也是一种很不错的实现方式。这里将快速演示如何在常见的spring boot项目中,通过引入spring-integration来快速实现一个mysql的分布式锁。依赖引入首先在maven中引入所需要的依赖 <!--mysql数据库驱动--> <depend

2021-07-30 21:01:42 1745 3

原创 spring自带分布式锁-[jdbc-lock-registry]源码解析

在查看spring cloud task源码的时候发现它是通过使用spring自带的分布式锁实现的。分布式锁一直以来都是分布式系统中很重要的一种技术,最常见的主要还是基于redis或zookeeper实现的分布式锁。spring自带的常用分布式锁介绍文档如下:jdbc-lock-registryredis-lock-registryzk-lock-registry对于并发不是很高,并对性能追求不是很迫切,又不想引入其他第三方组件的情况下,使用数据库来实现分布式锁也是一种很不错的实

2021-06-30 15:22:31 2144 1

原创 [源码解析]之-ElasticJob如何做到单分片任务只在一个节点运行的?

这篇文章是之前体验elastic-job时搭了一个elasticjob多节点环境,当时对elasticjob是如何做到多节点中只运行一个定时任务挺疑惑的,所以就跟着源码看了看并做了一个简单的记录。在了解与体验了spring cloud data flow后觉得elasticjob优秀是优秀,但与spring cloud data flow相比能更好地运行在kuernetes上总觉得不怎么适用于当时公司的定时任务场景,于是这篇文章也就没有发出来。但最近由于公司项目由于数据存储那块原有架构感觉快扛不住了,于

2021-04-19 20:47:33 1689

原创 es实现多字段聚合后再分页-附JAVA工具类

因为产品功能需要,需要实现很多数据的统计功能。产品经理在统计某些数据时为了不失用户体验,对于数据量可能大于几十条的数据都设计为了分页查询好巧不巧,上面描述的这个需求的后端开发正好就落在了我的头上刚开始没怎么注意,想着不就是从es提取数据嘛,看看官方API定能分分钟搞定,而且肯定有现成的聚合后再分页的api产品说10天时间让开发完,我想着10天是不是瞧不起我。3天,就3天完全够了,第1天开发接口,还不能下班后在公司逗留、第2天让前端对接接口、第3天走测试。好在产品也是很给我面子,我说3天就3天(此段纯属

2021-04-06 22:24:18 4419 7

系统架构设计师-真题附答案(2013-2018).zip

此资源为软考系统架构设计师考试2013年至2018年的真题,内附答案。

2019-09-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除