自定义博客皮肤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

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

原创 结合理论与实践,聊下为什么有时http2比http1.1还慢

突然提出了一个质疑:http2一定比http1.1快吗?中学老师经常告诉我们,当题中有“一定”这个关键词时,这个题基本都是错的。那么对于“http2一定比http1.1快吗?”这个问题也是如此,在很多场景下http1.1仍然比http2快。具体在哪些场景下http2比http1.1慢,在了解了http1.1和http2的原理后,便可很容易列举几个,再配合实验验证即可。

2024-09-19 19:15:00 740

原创 NGINX开启HTTP3,给web应用提个速

如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了可靠性的特点,在大多数场景下可提高web应用的访问速率。关于http3和quic的介绍网上资料有很多,这里不再过多赘述。自nginx的1.25.0版本开始,nginx首次对http3进行了正式支持,这也为我们在WEB服务器上部署http3提供了极大的便利。本文以重实践角度出发,使用web服务器——NGINX,分享下如何在NGINX中开启HTTP3。在浏览器中通过ip或域名访问搭建的站点。

2024-09-08 12:16:43 1456

原创 还在人工代码review?reviewdog和PMD了解一下

一般来讲,通过代码review可发现的问题主要有以下几类:代码规范,如常量名应使用大写驼峰命名……代码漏洞,如代码空指针……业务代码缺陷,如用户登录成功后应提示“登录成功”实际代码为“登录失败”……本文将介绍一种代码merge request提交后自动进行代码review的方案。通过既定的规则扫描,实现对增量代码的代码自动review与评论,为项目中的代码review提个速

2024-08-05 22:40:37 829

原创 使用frrouting、gns3、pim实现ipv6组播(三)

ipv6下实现组播收发包。ospfv3、pimv6、pim sm asm。模拟器支持私有vm、qemu、virtalbox、docker镜像、kvm等各种镜像,丰富的网络与GUI可视化界面解压kvm包,然后执行如下命令启动。

2024-07-28 16:54:37 733

原创 Frrouting快速入门——北向接口事务cli与gRPC(二)

在前文中我们使用frrouting内置的CLI工具vtysh实现了ospf组网通信。使用cli的方式配置网络的过程稍微有一点繁琐,但它整体还算简单且可靠,也是目前配置frrouting使用最多的方式。比如在sonic中,sonic的配置模块与FRR通信也使用的是CLI的方式进行配置的传递。

2024-07-15 21:42:36 1071

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

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

2024-07-04 21:06:57 1006

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

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

2024-06-07 23:02:37 1276

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

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

2024-04-06 17:22:38 1947

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

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

2024-03-31 22:23:11 991

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

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

2024-02-29 21:50:57 1405

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

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

2024-01-18 22:22:10 1604

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

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

2023-12-17 17:00:21 364

原创 使用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 311

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

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

2023-10-15 18:22:39 419

原创 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 489

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

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

2023-07-03 12:08:24 2768

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

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

2023-06-30 23:20:32 2323

原创 go中后台启动程序

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

2023-06-17 22:36:37 1239

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

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

2023-05-17 21:37:22 1114

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

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

2023-03-30 20:16:47 1796

原创 onos中引入外部依赖

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

2023-02-15 23:48:21 370

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

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

2023-01-30 22:44:54 946

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

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

2022-11-21 13:28:09 2878 3

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

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

2022-11-01 22:32:02 1300

原创 docker下快速部署openldap与PHPLdapAdmin

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

2022-10-31 23:44:40 1740

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

免费的持续集成工具,YYDS

2022-09-11 16:28:16 1825

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

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

2022-09-08 22:32:15 1428

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

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

2022-09-04 20:57:33 2324

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

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

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

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

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

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

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

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

2022-07-31 22:40:52 1305

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

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

2022-05-29 17:06:55 4589 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 4140 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 2486

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

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

2022-01-31 23:04:36 1411

原创 使用antlr快速解析SQL

使用antlr快速解析SQL

2021-12-26 22:04:27 8306 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 857

原创 快速实现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 1017

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

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

2021-09-30 20:39:17 1727

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

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

2021-08-28 14:26:29 4046

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

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

2019-09-10

空空如也

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

TA关注的人

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