- 博客(697)
- 资源 (21)
- 问答 (1)
- 收藏
- 关注
原创 设计心得——状态机
一定要明白状态机的目的和作用,要学会在不同的场景和条件灵活的使用状态机。一般情况下,状态机的设计不要过于复杂,这样不利用状态机的维护。同样过于简单的情况也不一定非得要用状态机。至于如何避免复杂,就记住一句话,拆分状态逻辑,利用中间层处理。状态机和其实现的方式,其实都是重点,重点在于如何将状态机与实际的实现逻辑严格的对应起来,保证状态的稳定和准确,特别是不能忽视某些特定条件的状态转换及行为的细微差异。只要能把握完整的状态流程,状态机的实现也就是一种代码的展开罢了。
2025-04-03 22:50:08
924
原创 跟我学C++中级篇——In-Place Construction 和placement new
技术的进步不是一朝一夕完成的,它一定是从需求出发,不断的进行完善,然后被抽象出来。无论是RVO还是各种的内存优化,当然也包括今天提到的就地构造等,它们都是对追求效率和安全的一种演进过程。不管是开发者还是设计者,都要多学习这种优秀的经验,不断的融会贯通,提高自己的整体的水平。既要拿来主义,又要明白主义,博采众家之长,这才是学习的最终目的。
2025-04-03 22:47:28
771
原创 设计心得——发布订阅
目前,智能驾驶这个赛道火得很,但其中的车联网系统中就广泛使用了这种机制。所以说,掌握好原理才能更好的拓展一项技术的应用,而不只是机械的模仿。需要说明的是,本篇不是分析发布/订阅机制内部实现的文章,而重点在于将其如何应用于设计当中。尽管篇幅不大,但希望给大家一个另外的角度做为切入点,也就是说,要从不同的角度来看待一个技术问题,才能更好更全面的明白其在整个技术框架中的作用。
2025-03-28 20:51:39
863
2
原创 设计心得——推拉机制
推和拉本身不难理解,也易于实现。但麻烦就在于实际应用场景中的复杂度和各种异常的处理,这才是重点中的重点。所以大家一定要根据实际情况进行平衡,保证所需。而不是为了应用推拉去实现推拉机制。
2025-03-26 11:42:03
818
1
原创 设计心得——事件机制的实现
本文主要是给不了解或者想学习事件机制的开发者一个入门的方法,重点在于提供一个初窥门径的视点。在明白了事件机制的原理后,可以根据自己的技术水平的增长和认知思想的不断提高,设计出一个相对更完善更合理的事件系统。万事开头难,临门第一脚。以后有机会在此基础上将一个相对事用的事件系统给大家剖析一下,那么就更容易在事件系统上总结提高。愿与诸君共勉!
2025-03-24 13:14:50
452
1
原创 为什么会有虚拟内存
本文不是讲虚拟内存技术本身或者说其技术的特点。重点是讲述为什么会存在虚拟内存,这是给后来开发者或者说设计者的一个解决问题的思路。活学活用别人的思想,真正领会这些技术架构的思想并学习和吸收成为自己的思想,才能更好的解决面对的问题,进而从整体上提高自己的技术。最后,技术的发展,不是凭空想象的,它一定是实际需求推动的。所以理论和实践相结合,是重中之重!
2025-03-23 09:55:25
633
1
原创 设计心得——安全性和健壮性
程序的开发,往往不是一两个因素影响,而是一个多重的因素整体互相影响确定的。而一个优秀的设计者就是要在这些因素中,找到关键的因素,也就是常说的主要矛盾,并处理在某些情况下,次要矛盾转化为主要矛盾时如何处理(比如程序异常时,保存了部分的文件怎么办)。所以,有丰富的理论和实践形成的指导思想,才是解决问题的关键所在。好医生是在病患未起时就将其消灭。也就是所谓的预防大于治疗。而目前看来,在软件开发中,仍然是以“治疗”为主。希望开发者们能尽量把重心前移,减少亡羊补牢的情况!
2025-03-23 09:52:45
696
原创 设计心得——如何实现接口
爱看武侠小说的知道有形意拳这个拳法,形和意,一外一内。而在武林中又有一句话“练拳不练功,到老一场空;练功不练拳,到老也枉然(犹如无舵船)!其实编程也是如此,光明白理论,不进行实践,那么进步就无从谈起;反之,光进行实践不学习理论,则方向无法把握,事倍功半。前面反复提及,计算机编程是一个理论和实践高度结合的技术,理论和实践是互相促进互相发展的,请大家务必明白这一点。既要扎实的推进编程的水平,又要不断的多看一些英文的资料紧跟技术发展的潮流和方向。
2025-03-22 21:46:10
654
原创 跟我学C++中级篇——std::not_fn
std::not_fn这个模板函数非常有意思,在前面我们学习过wrapper(包装器),其实它就是通过封装一个包装器来实现返回值的非。/* 未指定 */ not_fn( F&& f );(1) (C++17 起)(C++20 起为 constexpr)constexpr /* 未指定 */ not_fn() noexcept;(2) (C++26 起)这里面的f参数是一个Callable对象。
2025-03-21 22:49:26
714
1
原创 设计心得——作用域处理
简单的东西,往往意味着灵活。因为简单,所以应用的广泛,应用的广泛就意味着应用的场景丰富。不同的场景下的应用就有可能有细节的不同。而细节的丰富恰恰是C++的一个特点,也是为广大开发者觉得不容易把握的地方。作用域看似简单,但它和代码编写直接结合了起来。往往代码的水平就可以通过作用域的控制窥见一斑。而作用域还有一个特点,即使设计的较差甚至非常差,在一些中小程序中对程序的运行也不会有什么影响。往往就会让大多数中低程序员将其忽视。简单不代表容易把握,切记!
2025-03-21 22:47:58
930
原创 Debain12安装——手动磁盘分区
记得当初安装系统时,看到LVM还有组、卷什么的,当时就晕了。为了赶进度,只好回到自动分配。不过当对Linux系统越来越熟悉后,还是想手动搞一把,上面就是对手动安装过程的一次总结,可以为大家的借鉴。网上很少有这种手动处理的过程,也算是一种总结供大家参考吧。
2025-03-16 09:06:57
926
2
原创 跟我学C++中级篇——void处理
老生常谈,其实就是一个原则。在合适的场景下应用合适的方法,不教条不僵化。尽量减少使用不是强制不使用,难免有各种场景下不得不用,那么就需要认真的处理即可。有隐患不是说就一定会出现,只要把握内部的机理,就不会出现问题。
2025-03-16 08:09:19
722
原创 设计心得——多态
勿在浮砂筑高台。只有掌握技术本身,才能更好的在设计上展开应用。换句话说,一个优秀的设计者本身必须是一个优秀的开发者。这也是前一段时间网上经常说的所谓“PPT架构师”的味道。知其然并知其所以然,顺势而为,才可能有一个优秀的设计出来。
2025-03-15 19:11:21
354
原创 设计心得——粒度
学习设计就是从这些小的基础的东西一步步走过去的,不要妄想着上来就指挥千军万马并且打胜仗。甘罗八岁拜相,不谈真假,但几千年出不来几个。回头看看世界军事史,有名的军事家都是一枪一枪打出来的。没有人天生就是元帅。软件设计亦是如此,实践出真知。
2025-03-09 10:42:01
620
原创 设计心得——继承和实例
设计的学习难度说大很大,说小很小,关键看开发者的知识驾驭程度和水平。条条大路通罗马,但有没有捷径,这种捷径是否适合每个开发者?是不是有更适合具体到某一个人的捷径?这就需要每一个开发者和设计者不断的探索。总体而言,多学习理论知识,多写代码,多看优秀的开源代码和框架,多和优秀的设计者进行有效的交流。在此基础上不断的思考和实践,对大多数开发者来说,是一条不错的提升之路!
2025-03-08 09:38:40
419
2
原创 设计心得——分层和划分模块
设计一个从抽象到具体,从整体到细节,不断具体而微的过程。俗话说得好“教的曲儿唱不得”。设计不像技巧,多问两下多看两下代码就会用了。所以设计中的一些具体的手段和方法,要不断的从不同的角度不同的场景进行分析学习,并不断在实践中进行检验。反思得失,总结教训,形成自己的一套解决问题、处理问题的逻辑和流程。最终升华为自己的设计思想。这一定是一个长期的,不断的否定之否定的过程!愿与诸君共勉!
2025-03-07 22:27:56
943
原创 设计心得——如何应用继承
一种技术如果不放到具体的场景中,谈不到优与劣,更谈不上对与错。技术的出现就是为了服务于现实的需求,如果脱离开这种需求技术的意义就没有多大了。如果实际的网络需求永远不会超过100K,那么光纤就可能不会被应用到网络传输上。合适的是最好的,但要明白,这个合适是动态发展、不断变化的。与诸君共勉!
2025-03-01 09:05:42
650
1
原创 跟我学C++中级篇——定时器的设计
文章写得有点粗糙,主要是不知道如何有一个更好的切入点来分析定时器。不过也算对前面各种定时器的实现的一个笼统的概括,以后有机会再认真的综合整理一下。思考的不到位,有一种火候欠佳的感觉!
2025-02-28 21:01:37
732
2
原创 设计心得——依赖注入控制反转和依赖倒置
在设计的过程中,最主要的目的就是实现“高内聚低耦合”。其实不耦合是最好的,但正如人是群体性动物一样,不和别的人发生各种关系是不可能的。而把这种发生的各种关系移植到代码上,就可以称之为依赖。这种依赖越少,就说明耦合程度越低(即解耦);反之则耦合程度越高。高内聚则是指,单元(一个函数,一个类等都可以是一个单元)内功能的依赖关系越紧密越好,也可以理解为相关功能关联度越紧密越好。
2025-02-23 09:29:39
920
2
原创 设计心得——解耦的实现技术
设计是一个不断沉淀的过程,没有人可能一下就掌握了设计的全部精髓。这就和一个人的成长一样,从婴儿到成为一个健硕的青年,中间可能会经过无数的大大小小的错误,既有身体疾病上的成长的过程,也有思想不断成熟的过程。所以,设计只是一个人思想的外延。它既受主观的影响也爱外面客观的实践的影响。
2025-02-22 11:10:42
585
原创 设计心得——接口
接口的应用是极其广泛的,即使没有任何开发经验的初学者,可能第一个程序都会遇到接口的调用。一个开发者既要明白接口是什么,又明白常见的API和接口有什么关系。既要学会使用别人的接口,又能很好的设计自己给别人提供的接口。只有掌握了接口的真正本质,才可能适应在不同的场景接口的应用!
2025-02-21 21:41:29
352
原创 firefox的升级
firefox经常遇到这种情况,意外退出,重启后打不开原来打开的网页,导致一大堆的问题,特别是对有些强迫症的人来说,是场小灾难。从目前使用来看,Google的浏览器是最好的,自从使用到现在这么多年,记忆里没有类似的情况发生。搜狗浏览器发生过一两回,很少,而且后来用很放心,估计是做了什么保护。只有这个firefox,用得不算多,但基本上每年都要出一回妖蛾子。算是总结一回给自己一个教训给同学们一个借鉴吧。能不用firefox尽量避免吧!
2025-02-15 09:52:44
855
2
原创 C++17中的字符转换
简单方便是一种趋势。虽然有人诟病C++现在是个大缸,啥都往里面放。但不可否认,新标准在不断的提高着语言整体的易用性,这也给开发者们一个思路,也就是常说的“简约但不简单”。
2025-02-15 09:33:29
318
原创 C++17中的clamp函数
AI在发展,库也在发展,会不会到最后,大家只要碎碎念一下,一个程序就出来?这种不是没有可能。但是这种可能,大概率可能需要相当长的时间。其实如果真到了那个地步,为什么还要写程序?机器人自己就搞定自己了。人类就享受一切即可。不过到那时,可能大多数人活得更不如意!
2025-02-14 21:33:02
812
原创 跟我学C++中级篇——C++命名规范
命名规范的意义就在于标准化,不管这种标准化是否先进。标准化就意味着尽量消除了成员间的某种程度上的差别,这和工厂中标准件的行为是一致的。新手和后来者以及维护者都能迅速的进入状态,最大可能的消除因为代码名称的问题导致的时间浪费。当软件工程发展到一两个人甚至一个小团队都无法搞定需求时,命名规范的意义也就真正的体现出来了。
2025-02-10 10:23:16
456
2
原创 跟我学C++中级篇——C++编码的几点建议
C++是一门较难学习和使用的语言,对于初中级开发者来说,养成一个好的编码习惯,对自己和对团队都有着非常大的益处。尤其是对于开发者自己,不断的学习和适应不同风格的团队,养成自己的一套原则体系,然后再根据实际的情况动态处理即可。而在学习不同的优秀框架时,开发技术的提高其实也在潜移默化的影响着自己对编程风格的灵活适应性;而不同的风格下见到不同的大牛们的代码,同样反过来也影响自己在某一时期的编码的形式。形式是表象,内容是根本。二者互相影响,正如佛家所说“相由心生”。
2025-02-10 10:13:12
1106
原创 跟我学C++中级篇——流的应用技巧
C++中的流的应用其实并不多普遍。很多的大牛其实对流的诟病不少,但还是那句话,用到合适的地方就可以了,有就比没有强。当然,开源的可能有更优秀的处理框架,这个大家可以根据自己的实际情况去选择,或者干脆使用C语言中的文件操作方式也未必不可。总之,要善于学习使用新的技术,更要善于把知识与实践有机的结合起来。
2025-02-09 12:21:11
412
原创 C++20中的std::atomic_ref
看到std::atomic_ref,其实就想到了智能指针,二者应用的方式何其相似。从目的上来讲就是为了让开发变得简单,特别是在多线程状态下的开发,能简单一些是一些。另外就是为了兼容更多的原有的应用让其都能使用std::atomic的功能。或者从另外一个角度看,std::atomic_ref只是一个过渡的功能,以后会出现一个更强大的类或接口,让原子操作更简单。让我们拭目以待!
2025-02-09 10:40:44
705
原创 跟我学C++高级篇——CRTP的高级应用
CRTP是一种静态多态的实现方法。说的直白一些就是在正常的认知中,子类继承的是父类,但是如果父类是一个模板类,此模板类中的模板参数是子类的这种特殊情况。CRTP在前面说过两次,如果有对此技术不清楚的可以查看一下“跟我学c++中级篇——CRTP”以及“显式this的应用”中都进行过分析说明。CRTP本身就是一种很小众的技术应用,而它的一些应用,可能应用范围更小,下面就一些细节进行分析,扩展一下CRTP的更多的应用场景,给大家提供一些应用上的思路。CRTP的应用,相对来说就是一种比较复杂的应用。在前面将其基础
2025-02-08 21:13:38
596
原创 设计心得——平衡和冗余
软件设计不光是技术的问题,纯技术流往往会产生一种唯技术论的现象。软件的设计是一种现实与计算机交互融合的过程,往往涉及到技术之外的经济性、效率性、公平性等等具体的社会问题。软件设计是把软件的实现与实现世界结合起来,服务于现实世界,而不是一种独立存在。要始终明白,实际的需求才是软件技术发展的根本动力!
2025-02-01 21:05:23
998
2
原创 工具的应用——安装copilot
copilot是一个AI辅助编程的助手,作为需要拥抱AI的程序员可以从此尝试进入,至于好与不好,应当是小马过河,各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题,然后把它总结下,供人借鉴。工作的环境为ubuntu22.04,主要需要适配Qtcreator和VsCode。如果使用更高的版本安装会更简单,具体细节请参看下面的表述。综上所述,版本的问题始终是一个非常麻烦的问题。此处如果是高版本的Ubuntu(同事是较新的Debian),安装就简单了许多。
2025-01-26 10:43:11
1468
5
原创 跟我学C++中级篇——64位的处理
对大多数开发者来说,这种警惕性可以有,但并不迫切。如果真得有机会搞到底层或硬件相关,再深入的学习和分析才是正解。但仍然在开发中要保持对不同位数系统的敏感,这才能避开系统引入的各种雷区。
2025-01-26 10:36:55
614
原创 跟我学C++中级篇——C++初始化的方式
在实际的开发中,一般说很难固定使用哪一种初始化的方式。但总体的原则还是要把握住,以简单方便为前提,安全高效为核心,不必过分拘泥于形式。只要是能够让代码更清晰,符合编码规范,可以各种方式一起上。抓住耗子的猫才是好猫。
2025-01-25 13:47:13
791
原创 跟我学C++中级篇——容器的连接
其实编程就是从这些小的功能一点点的把基础打好的。正如前面的容器中的insert,push_back和后来的emplace_back。STL库中为什么要有这么多的方法来处理元素的插入?把这些细节把握住就深刻明白了C++中容器组织的过程。从另外一个角度打开学习的途径。人生而有涯,而学之也无涯!
2025-01-25 13:42:56
736
原创 设计心得——代码复用
代码复用除了从设计角度看,其实也可以从重构的角度来看。重构的一个重要目的就是减少冗余代码,那么做好代码复用当然冗余就会大幅降低。所以说,一件事,如果从不同的维度和不同的应用方向来看,就会有不同的效果。这就又回到文中的“编程思想” 了,思想是什么?其实就是现实抽象的结果。
2025-01-19 11:33:18
915
1
原创 设计心得——解耦
前面提到过封装和相关设计的一些分析,在它们的实践的过程中,解耦其实就已经悄然的不请自来。面向对象开发中最重要一个方法是封装,可封装的优劣如何判定呢?其中一个重要的方法就是看封装的耦合度。解耦就是封装一开始就必须考虑的问题。设计和开发实践是体现开发者解耦能力的一个验证器。而将解耦设计好与坏,可能在当下并不会产生多大的效果,但在二次开发和完善修改时,就会发现,解耦的重要性。人教人很难学会,事儿教人一次就会。一个道理!
2025-01-18 09:41:14
927
2
原创 跟我学C++中级篇——基础的宏技巧
这里不是强调大量使用宏或者推广宏的应用,而是在应该用的场景下坚定的引入宏。合适的就是最好的,不能因噎废食,更不能搞绝对化。原则上仍然是不建议在开发中广泛而大量的应用宏,用就要用到刀刃上。
2025-01-17 21:36:59
245
原创 跟我学C++中级篇——字节序
在谈字节序前讲个小故事,在小说《格列佛游记》中,有两派势力为了吃鸡蛋的时候儿到底是先打破大的一端还是打破小的一端展开了战争,而且这场战争持续了很久。后来,1980年,Danny Cohen在论文"On Holy Wars and a Plea for Peace"中引用了这个故事来处理一场关于数据传输时字节该以什么样的顺序进行传送的争论,所以在计算机的世界中也才有了字节序这个概念。
2025-01-12 10:58:30
838
1
原创 跟我学C++中级篇——栈和堆的形象说明
这种形象的说明可能准确性有些不足,但对于普及一些基础知识,让一些小白有一个较清醒的认知,其实反而更容易达到。不要说普通人,就是一部分开发者,可能终其职业一生,也可能对堆栈也是了解不多。能干好当前的活儿就是最大的目的。
2025-01-12 10:42:02
268
原创 跟我学c++中级篇——this指针
this是一个隐式的,默认的,自动的生成的一个指针,它通过编译器在编译行为期间进行控制而不需要开发者自己控制。可以将其理解为向开发者提供了一个可以更好的访问对象的接口。但在实际的开发中,很多开发者其实并没有很好的利用this指针。这就需要开发者们能充分认识到它的作用,发挥它的长处,形成一个好的开发习惯。
2025-01-11 15:47:02
842
1
大数阶乘算法的一个例子
2018-10-06
朗新WEBSERVER接口(南网和天津电网)
2009-03-16
AndroidStudio使用NDK生成静态库的方法?
2015-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人