
源码分析
文章平均质量分 69
zhanglehes
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
g2o -- circle_fit代码解析
***/class VertexCircle : public g2o::BaseVertex { // 顶点包含3个参数public:void setToOriginImpl() override { // 设置顶点的初始值void oplusImpl(const double* update) override { // 增量更新函数/***/原创 2024-03-05 11:15:57 · 496 阅读 · 0 评论 -
g2o -- curve_fit代码解析
***/class VertexParams : public g2o::BaseVertex { // 它包含三个参数public:void setToOriginImpl() override {} // 设定参数的原始值void oplusImpl(const double* update) override { // 增量更新函数,调整当前参数的值// 构造参数增量/***/原创 2024-03-04 20:02:23 · 571 阅读 · 0 评论 -
g2o--icp代码解析
概要个人理解Icp是一种location算法。我们先将全局的事物特征化,提取出特征点。在求解过程中,将观察的的图像,同样进行特征化。将全局点与当前特征点进行匹配,就可以求得观察者当前的位姿。Icp算法通常分为粗匹配和精细匹配两部分。粗匹配是将观察特征点移动到对应全局特征点的附近,而精细匹配这是将一个一个对应的特征点,使用最小二乘优化进行调整。在精细匹配的过程中,特征点对的选取也很重要,icp是一套迭代的算法,每次变换后都需要重新选取特征点对。原创 2024-01-29 17:54:17 · 670 阅读 · 0 评论 -
g2o--ba代码解析
g2o是常用的图优化理论c++库,其自带了很多example讲解如何使用该库文件,本文分析其中ba的示例代码。所谓的图优化,就是把一个常规的优化问题,以图(Graph)的形式来表述。在图中,以顶点表示优化变量,以边表示观测方程。于是总体优化问题变为n条边加和的形式边是约束在具体编写g2o代码时,我们也需要明确哪些是顶点(优化项),哪些是边(约束项)。原创 2024-01-25 17:45:03 · 618 阅读 · 0 评论 -
DWA算法实现
动态窗口算法(Dynamic Window Approaches, DWA) 属于局部路径规划算法,能有效避开障碍物。本文主要介绍dwa算法的一种c++实现,源代码库见(而这段时间是否会和障碍物接触会由开销函数来保证。算法还是希望能高速运行。原创 2023-11-01 20:31:58 · 1037 阅读 · 0 评论 -
Golang HTTP Fileserver
fileserver是静态文件服务,其主要功能是根据提供文件查询与文件传输的功能。由golang标准库提供。原创 2022-07-19 16:36:08 · 2088 阅读 · 0 评论 -
kafka-go源码解析四(Writer)
概要kafka-go区分同步写与异步写。同步写能严格确保写入的顺序,因为在写成功之前它会block住应用程序,同时返回错误信息。有三种控制写入完成的时机,1是消息发送完成即返回,2是leader收到后即返回,3是isr收到后即返回,越往后数据的可靠性更高,它们均是通过配置参数来控制。异步写不用等返回结果,而是传入一个回调函数来接收处理返回结果(同步写也支持返回前回调)。异步写的性能更优异,而且在很多场景下(有一定的额外逻辑)也仍能保证数据的可靠性。为了提升写的性能,无论是同步写还是异步写都是以bat原创 2022-03-23 09:41:45 · 3615 阅读 · 0 评论 -
kafka-go源码解析三(Reader)
概要Reader是暴露给应用程序的接口,前一章提到的Consumer Group是集成在本类型中使用的。之前提到的Consumer Group主要处理消费topic的相关metadata信息,如relabance,commit offset,heartbeat等。而Reader类主要负责从kafka brokers中拉取数据。Reader有两种使用模式,一是单topic单partition的情形,由Application自己去管理offset的信息;而是Consumer Group的情形。因此在代码原创 2022-03-18 09:37:33 · 1442 阅读 · 1 评论 -
kafka-go源码解析二(Consumer Group)
概要Consumer group主要处理协调消费的问题。为了应对变化,消费时按照时间段被切分成不同的generation,在同一时刻所有的group中的clients对应同一个generation,同一时刻只会有一个generation,新的generation需要所有旧generation产生的goroutine结束后才会创建(后面代码分析会做解释)。使用generation的另一个好处是防止旧generation拉取或者提交的数据,保证数据的一致性。理论上讲,当group中的组员发生变化、监原创 2022-03-16 10:21:50 · 2915 阅读 · 0 评论 -
kafka-go源码解析一(Dialer)
概要git 地址 --GitHub - segmentio/kafka-go: Kafka library in GoDialer类型的主要作用是创建与kafka集群的连接。通过分析它的行为,可知它是建立在底层socket之上的,同时它也是作为上层api reader的一个基础组件。物理连接上,它考虑了超时控制,安全连接tls,认证sasl,域名转换,重试机制等。它的另一个重要作用是建立与指定topic partition leader 对应的broker的连接。源码分析类型.原创 2022-03-14 14:37:59 · 3390 阅读 · 0 评论 -
Golang Http RoundTrip解析
概要RoundTrip是发送和接收一次http请求的底层实现逻辑我们可以从中学习到1、如何去实现一个长链接2、如果去提升性能3、如何考虑完备各种边界情况4、http协议请求和连接的关系一个请求肯定会使用一个或者多个连接,通常是一个,但如果异常情况,如刚好连接在使用过程中失效了,则不排除使用多个连接一个连接可以在一次请求后就丢弃(关闭),但是对于长链接的情况,连接可以被放回到闲置连接池中,这样后续的请求到来时,就可以不必再次创建新的连接,而是复用之前的连接。要是到tcp的三原创 2021-12-29 14:29:56 · 5423 阅读 · 1 评论 -
Golang flag包解析
概要flag包属于golang的标准库。本文主要分为两个方面进行介绍,一是使用方法;二是源码解析。使用方法命令行启动服务时,命令行分为三个部分,不同部分不能相互混淆[cmd] [flags] [args]cmd – 进程名称flags – 定义的参数命令行的传参格式形式 解释 -f (只有布尔类型可以使用该格式,等同于 -f=true) -f=x (一个 - 符号,使用等号) -f x (一个 - ...原创 2021-11-23 10:44:17 · 1455 阅读 · 0 评论 -
gengine源码解析
概要关于gengine是干什么的,请参考B站新一代golang规则引擎的设计与实现 - 云+社区 - 腾讯云本文主要通过两部分来解析gengine源码,一是介绍框架代码,理清楚该系统的架构;二是以跟随实际例子,看看在编译环节和执行环节分别做了哪些工作gengine是基于antlr4来实现编译和执行的,之前也对该工具进行过介绍,可以参考Antlr4简介_zhanglehes的专栏-CSDN博客框架代码RuleBuilder.go文件RuleBuilder.go 用于从字符串中解析出具体原创 2021-09-29 19:26:43 · 1580 阅读 · 0 评论 -
golang sort包解析(一)
Go语言的sort.Sort函数不会对具体的序列和它的元素做任何假设。相反,它使用了一个接口类型sort.Interface来指定通用的排序算法和可能被排序到的序列类型之间的约定。与c++中标准库的函数类似,sort包提供的函数也属于泛型函数。接口定义type Interface interface { Len() int Less(i, j int) bool Swap(i, j int)}与c++和java等语言不通的是,golang的继承不需要显示指明基类或接口类。只要类型实现原创 2021-07-29 10:54:26 · 499 阅读 · 0 评论 -
GIN框架解析与源码分析(一)
Router1、支持POST,GET,PUT等多种方法,实现如下:type methodTree struct { method string root *node}type methodTrees []methodTreefunc (trees methodTrees) get(method string) *node { for _, tree := range trees { if tree.method == method { return tree.r原创 2021-07-20 15:02:25 · 572 阅读 · 3 评论 -
熔断器的原理与代码分析
代码https://blog.csdn.net/jfwan/article/details/109328874原理与代码分析核心参数Total – 向下游发送的总请求量Accept – 下游能正常返回的请求量在算法设计中,Total和Accept之前存在一个倍数,当total大于Accept乘以倍数,则表示下游服务出现异常,熔断功能打开,否则会将请求直接发往下游服务。这个倍数就是下面结构体中的参数k。type googleBreaker struct { k floa原创 2021-05-19 14:18:43 · 507 阅读 · 1 评论 -
kiteq架构与代码分析
概要Kiteq是一个分布式消息队列它的实现是一种自组织形式,没有中心控制节点负责topic和consumer的管理,每个server自己将能处理的topic上报给zk,同时在zk上拉取topic与下游group的映射关系。git地址与架构图https://github.com/shineit/kiteq流程如下1. KiteQ启动会将自己可以接受和投递的Topics列表给到zookeeper2. KiteQ拉取Zookeeper上的Topics下的订阅关系(Bingding:原创 2021-05-06 14:38:32 · 316 阅读 · 1 评论 -
gochat源码解析
目录概要源码分析api模块Router.go文件Hander文件夹Rpc.go文件logic模块Logic.go文件publish.go文件Rpc.go文件概要源码地址:https://github.com/LockGit/gochatgochat是一个golang编写的开源im系统,虽然功能并不复制,但实现了最核心的点对点的消息发送(用户对用户)和点对面的消息发送(用户在房间里发送消息)gochat的作者已经对系统架构有了详细的解释,本文可以作为其补原创 2021-04-13 19:38:48 · 2084 阅读 · 0 评论