自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fpcc的专栏

于细微处见精神,从宏观里学态度。行之苟有恒,久久自芬芳。

  • 博客(493)
  • 资源 (21)
  • 问答 (1)
  • 收藏
  • 关注

原创 跟我学c++高级篇——动态反射之二动态列表

在上文说过,本来这篇是和上一篇打算合在一起,可是又觉得它们有点不同的意思,就拆分了开来。其实说来归去,重点是理解如何进行反射前的准备,把相关的字段名称都准备出来,只是同一个基础的应用,却可以在上层写出不同的反射方法来,这也是c++总被称为难的原因。因为其灵活,不容易掌握,而每个方法又有长处和不同的适应场景,这都需要开发者自己权衡,这就是难的原因。见仁见智,各取所需吧。

2023-12-03 12:49:08 115 2

原创 跟我学c++高级篇——动态反射之一遍历

这篇内容就有点接近正常理解的反射的意思了,本来这篇想把一个动态表生成的方式也分析了,但是又觉得太长了,还是分到下一篇再一起分享。慢慢来,不要急。

2023-12-02 19:00:55 75 1

原创 希尔伯特和包络变换

对这些信号处理是基础入门,有些名词和算法不太清楚,所以找了些资料进行入门,学习一下信号的基础定义。实际的工作场景中有时会遇到,不求学得多深,只要一些基础的应用能看得明白即可。小白入门,可能有谬误之处,大家共同讨论进步。

2023-11-28 11:00:04 92 1

原创 跟我学c++高级篇——静态反射实现之一

反射写起来非常头痛,一个是不知道如何说起更有系统性;另外一个就是哪种反射更有利于实际的应用。所以反射这个系列可能会是一个很长期的总结过程,大家不要着急,一定会把坑慢慢填好。

2023-11-26 12:38:57 87 1

原创 跟我学C++中级篇——STL的并行算法

最近工程上可能会优化一些代码用到这些并行的库函数,所以提前分析整理一下,到时候儿看用到哪个就用哪个。“不打无准备之仗”这句话非常有道理,与诸君共勉。

2023-11-25 22:00:17 300 1

原创 DPDK系列之三十七IO处理

如果一条通信链路要想达到最优的效果,一定是整体上每个环节都要有最佳的节奏协调控制而不一定是每个环节都是最优。这个在计算机的数据处理上就更是明显。一般来说,IO的速度是最低的,至少在可见的时光里要想超越CPU和内存还是很难的。以网卡通信为例,网卡本身就IO传输,然后通过总线传输进入内存,内存进缓存,缓存到CPU,然后再原路一个反馈。学过计算机的一般都知道,这里面涉及到的几个部分,数据的处理速度那是有着量层级上的差异的。所以在处理问题上有三条思路:一是把短板补齐,也就是那个慢把哪个速度提起来。

2023-11-25 19:12:53 185

原创 c++23中的新功能之十九继承的CTAD

从目前看来,标准越是向前推进,相关的完善和填坑的动作也越多。那么相对来说,使用起来的通用性越好。而这也代表着编程相关对来说简单不少,毕竟少了不少的特异性的处理后,只要一般的应用即可。不用总想着这个特例那个特例。简单才是王道!c++23系列到这篇,基本就终止了。以后再写可能就是偶尔补充一下了。可能也就是c++26的新功能新属性了,变化才是永恒啊!

2023-11-19 08:37:03 208 1

原创 DPDK系列之三十六报文转发

学习这种功能知识点,最重要的是把握整体逻辑和处理流程。算法和框架可以先放到一边,待了解清楚整体流程后,再深入到其中进行学习,能更好的理解和掌握相关的知识体系。学习要有学习方法,要有清晰的思路。万不可一上来就陷入细节,出力甚多却所得甚少。

2023-11-18 18:34:56 76

原创 跟我学c++中级篇——模板的调试

在写完这篇文章后,发现调试其实有时间可以整体上的讲一遍,就和抖音教人买高铁票啥的一样,很多人可能觉得这个很LOW,其实,有非常多的人不会或者根本不知道怎么能在些更进一步。从0到1,从外行到初窥门径,对于相当多数人来说,其实真得需要有人来带一下,戳破一下这层窗户纸。毕竟写文章的目的是让喜欢编程的人用更小的阻力进入编程的这个世界。

2023-11-18 14:09:57 209

原创 跟我学c++中级篇——再论全局和静态智能指针

在实际的开发,尽量不要在构造和析构函数中做比较复杂的动作,比如开辟内存之类的东西。如果有必要建议专门有一个初始化函数。同样,析构也是如此,如果需要处理更多的东西,建议还是有一个专门的类似stop之类的函数来清理业务逻辑,然后再释放相关资源。智能指针更是如此(毕竟复杂的对象中内部对象释放顺序的不同有可能引起一些异常),越是不需要自己动手控制的,越是要尽量让其简单,这样才会更安全。一个好的习惯可能看上去代码不是多么优雅,但工作起来确实相对优雅许多,安全性的增加,是每个程序员的工作的前提。

2023-11-11 14:48:08 123 3

原创 网络服务退出一个问题的解析

其实,正如前面的分析,解决问题的思路其实就是基础知识的检查过程。在这次解决问题的过程中,数次发现和基础知识理解对不上,所以否定了自己的想法(比如析构函数的顺序)。只要按照标准和规则来,解决问题一定是水到渠成的。不要总想着弯道超车,没有大量的基础知识做底子,超车也是运气的结果。这次解决这个问题,正是一次比较多面的对基础知识的一次综合运用,收获颇丰。

2023-11-05 16:06:53 449 2

原创 c++23中的新功能之十八新增的属性

c++23的新功能基本就要介绍完了,其中一些代码由于无法运行,可能会存在着一些错误。这些大家都可以先明白标准提出的目的。也欢迎大家提出各种批评和意见,大家共同进步。真理越辩越明,技术越讨论就明晰。等到各大平台的编译器基本支持c++23的主流功能后,这些新功能才有可能应用到实际的工程中去。现在很多公司都在升级c++标准,至少c++17主流的编译器目前都已经进行了支持,所以新的标准不断的在新项目中采用,大家还是有序跟进不要掉队。

2023-11-04 13:40:47 267 1

原创 DPDK系列之三十五DPDK网络数据发送

DPDK的设计精髓在分析的流程中,逐渐变得越来越清晰。还是那句话,重点是借鉴DPDK的设计思想和具体实现方法为我所用。拿来主义,好的,就得要拿来,不但拿来,还要消化吸收。intel能发起这个项目,也正是因为自身有这方面的需求。而国内的开发者也可以从这个角度来学习并从中有所启发,搞好自己的项目。

2023-11-03 21:25:53 190 2

原创 跟我学C++中级篇——Pimpl中的unique_ptr

而这个自动生成的过程,就是前面出现问题的原因。说到此处,还得再说一下,二者调用删除的内在方式也有不同,shared_ptr是判断refcount也就是引用计数器,其为0则调用删除器(然后再调用析构函数),而unique_ptr就是直接析构函数,标准规定了, NULL,nullptr是不需要调用析构的。在上面的代码中,如果在main.cpp中注释掉相关的头文件,则会发现,如果没有给前向声明的指针赋值为nullptr,编译运行没有问题,但赋值后,如果没有头文件的包含,则直接报文章开始的不完全定义类型错误。

2023-10-29 07:30:55 118 2

原创 Linux中的信号应用

对于信号这种古老的应用,还是要理清其原理,在实际应用中根据场景来决定应用的情况。比如前面提到的在测试性能的场景下使用,有一两次问题也无所谓。而对于应用场景非常高的情况下,尽量还是谨慎应用。还是那句话,没有最好,只有最合适。

2023-10-28 17:21:15 177

原创 跟我学C++中级篇——右值引用和万能引用

细节决定成败,这句话不是没有道理的。一些小的基础的问题,往往是解决一些疑难问题的入手之处。综合运用各种基础技术就可以形成更高层次的抽象应用,这个在模板元编程中体现的就非常明显。往往很多方法都知道什么意思,但组合起来就不知道了,这其实还是基础不太牢靠,只是僵硬的学会了而没有活学活用。

2023-10-28 16:56:47 98

原创 c++23中的新功能之十七显式this的应用

学以致用,用才是关键。学而不用,和不学没有什么区别。具体到计算机的技术上,学而不用,简单来说时间长会忘记,另外一个问题是,计算机技术的迅速更迭,导致形成自身的技术断层,甚至某些技术直接就被淘汰了。这样,再想形成一个完整的知识体系,就非常困难了。同样,也不利于快速的跟进新技术的发展。

2023-10-22 13:31:40 197

原创 std::any和枚举类转换

有些细节在应用开发时,可能还会费一些精神。其实重点不是这些细节多难,而是有时候儿遇到之时才会认真去追究这些细节的实现。实践出真知,诚不我欺。

2023-10-21 19:20:11 125

原创 DPDK系列之三十四DPDK并行机制的同步控制

锁的机制在不同的层次上有着不同的表述和表现形式,在不同的语言上可能又会衍生出不同的形式。这就需要开发者去仔细的分析其真正使用的哪种锁,从而能更好的对其进行应用。可以试着看一下Mutex在内核中是如何实现的(futex机制),其实就明白了上面的话的意思。底层建设一直是重要的环节,侯捷老师说过:勿在浮沙筑高台。

2023-10-15 11:25:59 157

原创 跟我学c++中级篇——Pimpl

其实多读书,多实践对学计算机的人来说真得非常重要。很多人只看书,很少实践或者干脆反过来,结果就是进步太慢并且固步自封。同样,多读书,指的是多读精品的书籍而不是什么样的书都读(当然读优秀的代码也可以看成一种读书)。国内的书籍缺点往往是走两个极端,一个是学院派,只讲道理,实践很少或者干脆没有;或者是很多一线的人员写的书籍倾向于实战,理论不足。特别是理论和实践相结合的书籍更是少之又少,这也是往往推荐初学者去学习国外经典的原因。

2023-10-14 14:15:31 228 1

原创 跟我学c++高级篇——多重模板的扩展

在软件工程中,无论是设计、架构还是模块开发,甚至到具体的每一个小功能开发,整体的实现方向是简便为主。也就是说,在这些过程中,如果出现过于复杂的实现,那么极大概率是设计和思路出现了偏差。举一个简单例子,如果实现某个功能需要使用三级指针或者某个函数写了三四千行,除了极个别的特殊情况外,应该是思路出了偏差。其实软件重构就是对原来的设计思路和实现方法的一种重新思考和再实现的过程。

2023-10-14 08:14:26 153

原创 DPDK系列之三十三DPDK并行机制的底层支持

在前面介绍了DPDK中的上层对并行的支持,特别是对多核的支持。但是,大家都知道,再怎么好的设计和架构,再优秀的编码,最终都要落到硬件和固件对整个上层应用的支持。单纯的硬件好处理,一个核不够多个核,在可能的情况下把CPU的频率增加,加大缓存等等。在现有水平的范围内,这些都是可以比较容易做到的。但是另外一个,就是在CPU上如何最终运行指令(也可以叫做固件设计),这个就需要设计人员动脑子了。

2023-10-06 10:24:39 144 2

原创 Linux新的IO模型io_uring

这里没有更细节展开谈IO模型和同步异步以及阻塞非阻塞的问题,这些基础的问题,不明白的需要去查阅相关资料。这篇文章只是一个开始,以后有机会的话,会将整个网络开发进行整体的分析说明和具体应用。技术的进步一定是向前发展的,开发者们一定睁开眼睛,瞭望世界,不要固守一隅,夜郎自大。

2023-10-05 15:55:17 224

原创 DPDK系列之三十二DPDK并行机制及弹性扩展分析

需要引起重视的是,并不能简单的认为多核、亲和性等技术就一定会带来整体效能的提升,这仍然需要在实际场景下的判定。任务的并行,也不是简单的多个人干不同的工作,大量的应用场景中仍然需要并行任务间的合作,这就极大的限制了并行任务的线性扩展。而在DPDK中采用的一系列技术,正是通过降低并行任务中的冲突并尽量减少不可并行的部分来保证并行任务的最大化。即使如此,大家仍然需要占在网络通信这个具体的场景中进行分析,来汲取其中的可借鉴部分。

2023-10-02 19:45:16 137

原创 跟我学c++中级篇——完美转发的异常情况

前面不是提到过,引入新标准就会有新的问题,这个完美转发就是一个例子。这里就看利弊的取舍和应用了,完美转发的实际应该情况已经回答了这个问题。至于在以后的标准中会不会有什么对些完善和更新的,只有看标准的发展了。

2023-10-01 19:49:32 99

原创 c++23中的新功能之十六std::forward_like

前面说过,c++标准其实是分成两块推进的。一块是语言标准,另外一块是应用库标准。线程同步还麻烦呢,别说两个组的大佬,不同步的现象肯定会出现。在老的标准里还比较少,在c++11以后经常发现,后续版本会对前面的版本打补丁,其实好多就是因为这种情况。在前面分析过很多通过完美转发来实现的例子,比如才分析过的单例。在c++11以后,使用完美转发加上右值引用几乎可以用来常见的参数处理和转发控制(当然还是有一些是有问题的)。但是这里会有一个应用场景出现(总有但是),如果想转发类型内部成员怎么办?int d;

2023-09-30 16:32:54 193

原创 DPDK系列之三十一DPDK的并行机制简介

DPDK的内存机制基本告一段落,那么高效的另外一个重点就是并行。以目前的计算机资源的使用来看,没有一个高效的并行框架基本上是无法达到榨干资源的可能的。就如资本一样,不浪费每一个资源,每一个资源的每一部分,是计算机开发者的终极目标。整体上要推进资源的技术进步,在无法短时间内实现技术进步的前提下,组合应用各种技术把对资源的利用达到极致,这就是计算机技术的宏观的目的。DPDK就是这其中一个典型的代表,所以,这个并行的机制,就不得直面对待。

2023-09-29 17:32:23 146

原创 跟我学c++高级篇——模板的ADL

一个问题的解决,可能就代表着另外一个新的问题的出现。这是一种常见的现象,只是看成本的大小罢了。写程序越多,发现这玩意儿真得上升到了哲学的角度上了。越是深入对标准的审视,就越是明白c++的难度所在。那动辄一千多页的标准文档制定起来,确实不容易啊。

2023-09-24 10:39:24 99

原创 DPDK系列之三十内存中的环形队列

DPDK中的环形队列只要掌握了其基本的内存管理知识和应用场景,就会很容易的掌握其中的内在的设计逻辑。从此处再推代码,互相印证,则可事半功倍。千万不要一开始就陷入代码的海洋,看似用功很多,则收效甚微。甚至学习不久就被劝退。整体把握,细节推敲,接口调配,三者共同推进,则学习别人的代码就会变得简单很多。

2023-09-23 12:42:06 156

原创 c++23中的新功能之十五类tuple类型的完全支持

人们总是希望新标准能解决问题,但没想到的是,往往新的标准又会引入新的问题。这本身就是一个动态循环的问题,已经是一个众人皆知的现象,但人们仍然还是抱有一种希望吧。不过,新的标准会把一些急切的问题解决并引领开发者不断的向着更好的方向发展,这才是标准发展的意义。

2023-09-22 21:47:45 147

原创 DPDK系列之二十九大页内存的优化

读比较大的框架的源码,有三个主要问题:一是宏观上流程怎么搞清楚,这个非常重要,否则就会陷入局部理解,它可以对自己的设计架构和思想理念产生影响;二是细节如何实现,它会直接影响阅读者对代码的理解和一些技术及技巧的学习应用;三是如何在细节模块实现与宏观流程的挂接上,也即分层和API连接设计上,这体现了另外的一种思想,即设计思想转化成实践思想的一个过程。

2023-09-17 09:18:32 108

原创 c++23中的新功能之十四输入输出指针

在c++的发展过程中,无论如何发展,c++都尽量保持着与C语言的兼容,当然这也是它的一个特点。在实际的应用中,开发者经常遇到的一个问题是,如何把一个指针的值给传出来?有人会说,简单啊,直接返回不就行了。当然,这样是可以的,但是如果不想通过返回值返回呢(返回值另有它用)?a =10;return a;指针是不是也可以这样做呢?*p1 = 'c';return 0;这在许多的开源框架中,经常看二级指针的原因。

2023-09-16 15:59:49 171

原创 守护进程的实现方法

写守护进程使用哪种方式,看实际情况来定。永远记住一点,简单即真理。这个简单不只是技术简单,如果有熟练的使用过某种技术的开发者来说,那也是一种实现上的简单。复杂的技术和方法,一定会慢慢被简化,这是一种大趋势。

2023-09-14 12:46:45 145

原创 C++中对命令行参数的处理

首先说明这一是一篇大杂烩,没有什么技术点,重点只是对在常见的命令行参数解析库进行使用说明。更详细的官方都有文档,本文只是给一个方向和切入点,引导开拓一下思路。很多经验告诉我们,做一件事,单纯的按规划来,其实非常简单。但实际情况是,很多异常和特殊情况需要处理,这就极大的增加了复杂度。就如上面的命令行,如果大家只是写程序只带一两个参数,那么就没必要用这些库,也就没人写。可实际上呢?这种需求是现实的而且广泛的,能不用么?还是那句话,学习别人的框架和库,要善于为已所用。

2023-09-12 09:20:03 252

原创 跟我学c++中级篇——c++中的Abominable Function Types

今天分析的这个令人讨厌的函数类型和c++11中的引用限定符,都是比较少使用的,在实际工程中估计绝大多数国内的c++程序员都无法用到。那就了解一下,省得再看国外的框架代码时遇到这样的问题,搞不清楚。消除这种令人讨厌的函数类型有很多种,最简单的就是禁止它们。但这又无法兼容旧得版本标准,这本身就是一个非常不好体验。那么只能选择完善它,在c++23中就对其进行了处理,比如使用this(前面分析过的Deducing This)来处理一些等效的操作等。

2023-09-03 14:28:43 255

原创 跟我学c++中级篇—c++11时间库实现定时器和延时

这里面有一疑问的可以看一下下面的程序,对sleep_for和sleep_until的使用是延时和定时器的主要方式,它们都是延时,一个到点,一个停止一段。有的资料说sleep_for会导致整个进程的所有线程阻塞,但在标准文档写的是当前线程阻塞,下面的代码就可以验证是哪种。//sleep(1);i < 10;t1.join();t3.join();return 0;

2023-09-03 09:38:26 809 2

原创 DPDK系列之二十八内存分配启动和初始化

DPDK框架中对内存的管理基本上已经针对自己的应用场景做到了尽量有上佳的表现。但是,不断DPDK在演进,它依赖的内核和相关库也都在演进,甚至硬件也在演进,故而其对内存管理的演进是必然的。这也从新老版本中体现出来了。一根杆子捅到底,接下来,将会继续分析DPDK对相关内存管理(分配使用和回收等)相关的细节和流程。

2023-09-02 16:56:43 201

原创 C++23中的新功能之expected和optional

库的强大,其实就意味着这种语言向简单化在发展。为什么Java等语言编写起来相对简单,主要原因就是除有强大的库,还有无数的可以看作库的框架。C++在这方面几乎没法和这些高级语言相比,但总体上C++也在朝着这个方向不断的前进,这就是好事。或许再过十年,当开发者们回头看C++代码时,可能发现,这是我初学时的C++么?

2023-08-28 17:44:07 499

原创 跟我学c++中级篇——模板的基础术语说明

这些术语有些是比较为通用的,有的是比较少用的,但在某些书籍中又比较权威,所以了解一些还是有用的。特别是侯捷老师的书里,用法有些不同大家可以对比来印证就知道了什么意思。这里面其实每个都可以单独拿出来讲很多,本篇主要是综合一下,做一个纲领性的说明。以后如果标准继续更迭,可能会继续在此基础上不断的完善。

2023-08-26 19:06:23 245 3

原创 c++23中的新功能之十三Ranges的as系列

在前面反复提到过,c++编程的语法也越来越向着自然语言方向发展,今天这个as_函数就是如此,一般学习过英文的都知道as是啥意思。非常容易理解,所以c++23中用这个词来描述函数,其实也是非常走心了。这两个函数没有什么难点,但是如果用来起来还是非常方便的,可以通过管道直接进行STL中的容器的操作,慢慢的就也有相当一部分变成函数式编程了。不过这也不错,只要朝着简单的方向走,大方向肯定没有错。

2023-08-25 21:22:22 274

linux设备驱动开发

本书从浅到深介绍了LINUX操作系统上的驱动开发的过程,值得推荐。

2018-11-17

masstree算法论文

目前的底层的分布式数据库如ROCKSDB等都使用的LSM的算法,本文使用了masstree这种算法来优化其处理。

2018-11-17

虹膜开源的算法

本文是国外的一款开源的虹膜识别框架的介绍,它的源码是可以直接使用的,但是需要优化。

2018-11-17

BTN的白皮书

BTN链是提供商业使用的软硬扩展的去中心化商业级应用(DAPP)开发平台。它的主要特点是去中心化计算和去中心化的存储。

2018-10-11

mixin白皮书

mixin是一个闪电交易快速的点点对的数字交道项目,它拥有非常好的技术栈。

2018-10-11

steamr白皮书

steamr是一个用来做数据去中心化的网络和市场相关的区块链项目,主要提供去中心化的云服务。

2018-10-11

阿希链白皮书

阿希链是一个用javascript写的侧链,主要用来完成多链间的通信,有一定的特色,可以借鉴。

2018-10-11

大数阶乘算法的一个例子

小数的阶乘比较好做,但是阶乘的数量变化非常快,很快会溢出,这里采用一种变通的方法,可以实现相当大的数的阶乘,如果在这个基础上进一步扩展,能进行更大的阶乘算法。

2018-10-06

Sql批量操作数据

在SQLSERVER的多条数据操作时,使用SQLBULKCOPY等几种方式的对比,这篇文档就是整理了这些使用的方法。

2018-10-05

电网闪变信号的小波分析

本文利用小波分析来对电网的闪变信号进行处理,有很高的借鉴价值。

2018-10-05

电能质量闪变的测量

电能质量是电力行业一个重要的部分,本论文从实际出发,论证了闪变测量的方法。

2018-10-05

安卓编译JAR包和SO

这个是用ECLIPSE编译JAR包和SO的一个教学录像,非常适合对c++不熟悉的人编译使用。

2018-10-01

JAVA并发编程设计原则与模式

一本比较老的书,讲得多线程和并发技术,是一个入门的比较浅显的书籍。

2018-10-01

代码管理核心技术及实践

代码管理是开发过程一个重要的环节,好的代码管理可以为团队的开发提供安全的保护和合作,本书就是讲述在不同环境中如何使用主流的代码管理软件和方式。

2018-09-30

IOTEX白皮书

物联网和区块链的结合,实现了链中链和跨链的通信,通过特有零知识证明来解决用户隐私问题。

2018-09-30

bancor协议白皮书

bancor协议是目前区块链研究的一个重要方向,跨链不同的TOKEN之间的兑换一直是一个问题,这里给出一个解决的方案。

2018-09-29

以太坊上PBFT的实现

针对以太坊的POW算法的一种改进方式,引入了PBFT的算法,论文主要从原理上阐述了实现的过程。

2018-09-29

DERP白皮书

DREP区块的白皮书,是一个新的区块链的技术,如果大家对这个感兴趣,可以下来看看。

2018-09-29

朗新WEBSERVER接口(南网和天津电网)

适用于朗新目前的所有接口,平台语言C#,主要是对电力系统SG186的跨平台调用。也适于于同样的WEBSERVER工程跨平台使用。使用说明书已打在压缩包里。

2009-03-16

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

TA关注的人

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