架构设计
文章平均质量分 82
fpcc
行之苟有恒,久久自芬芳!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计心得—从思想角度看设计
本文探讨了编程中思想与实践的融合路径,强调抽象是通往设计自由的核心。优秀的编程思想需具备完整体系、可实践的学习路线,并能兼容多元编程范式。从“道”到“术”的落地,需经历需求分析、技术选型、语言适配、工程化实现及异常处理等环节。真正的能力在于将抽象思想转化为可复用、可持续的工程体系,通过质量管控、全局视野与知识沉淀,实现从开发者到架构师的跃迁。唯有不断吸收优秀思想并付诸实践,方能在代码世界中追求更高境界。原创 2026-09-15 11:54:09 · 540 阅读 · 0 评论 -
C++编程实践—类的私有化设计
本文探讨了C++中类的私有化管理技巧,主要包括两种实现方式:通过私有化构造函数或final关键字限制继承(实现控制),以及通过内部类或Pimpl模式隐藏设计细节(设计控制)。文章列举了五类典型应用场景:安全验证类、接口稳定性维护、专用基础类、析构保护及性能优化,并提供了私有化构造函数和CRTP模板检查的代码示例。作者指出这些技术虽小却体现了C++的封装思想,能有效维护代码边界,建议开发者在实际项目中灵活运用。(149字)原创 2026-07-29 10:32:30 · 168 阅读 · 1 评论 -
C++编程实践——线程池的设计
本文从设计角度系统分析了线程池的实现要点。线程池设计需平衡效率与资源开销,考虑硬件限制(CPU核心数、内存等)、任务类型(CPU/IO密集型)、性能指标(吞吐量、响应时间)等关键因素。核心设计包括:线程管理(创建/回收策略、拒绝机制)、任务调度策略(公平轮转/优先级队列)、动态调整能力(基于阈值或预测自动伸缩)以及完善的监控体系(线程状态、任务统计)。文章强调应优先使用成熟框架(如Java内置线程池),并提供了C++简易线程池实现示例,展示任务提交、线程动态扩容等基础功能。良好设计的线程池应在简单性、可靠性原创 2026-06-01 10:39:16 · 591 阅读 · 0 评论 -
设计心得——如何设计主线程功
本文探讨了软件开发中主流程设计的关键原则与实践。文章指出主流程设计需要像操作系统一样具备全局视角,强调主次分明、功能解耦和扩展性。主流程应包含六大核心功能:启动初始化、流程管理、资源分配、通信协调、异常处理和优雅退出。通过实时系统、UI系统和CPU密集型系统三个案例,说明不同场景下的设计侧重点。作者提醒开发者要平衡设计思想与执行能力,避免过度理论化或功能堆砌,提倡简单清晰的设计理念。最后指出掌握这些设计要点需要技术功底与表达能力的双重修炼。原创 2026-05-12 11:02:01 · 577 阅读 · 0 评论 -
设计心得—如何简单评估软件设计
本文探讨了软件设计与重构的评估方法。作者提出三个核心评判维度:1)是否遵循基本设计原则;2)设计实现的简洁性;3)实际收益评估。指出设计应立足于当前需求,避免过度设计,特别强调长期收益往往难以实现。建议采用"评判基础是前提,是否优秀看简单,决定使用看收益"的灵活评估思路,同时提醒设计者要兼顾技术与非技术因素。文章认为,在快速变化的互联网环境下,过度追求完美设计反而可能适得其反。原创 2026-04-28 10:27:57 · 185 阅读 · 0 评论 -
C++编程实践—系统级错误的处理
本文探讨了C++中错误处理机制的构建与优化策略。首先对比了C语言错误码与C++异常处理的差异,指出系统底层错误处理无法避免的现实。随后提出三层处理方案:直接映射错误码、封装错误对象、与C++异常机制融合。文章重点分析了三种实现方式:简单枚举映射、可扩展错误对象封装、以及结合std::optional/std::expected的顶层抽象,分别说明其优缺点。最后提出错误处理的四项原则:统一性、可恢复性、可测试性和信息完整性,强调应根据实际需求选择合适方案,并注重文档维护和渐进式改进。全文为C++开发者提供了系原创 2026-03-05 12:25:48 · 381 阅读 · 0 评论 -
设计心得—轮询、事件和异步
本文探讨了软件设计中三种交互处理机制:轮询、事件和异步。轮询是主动周期性检查状态,适用于简单场景;事件是被动触发机制,适合人机交互和解耦设计;异步则强调并行处理,适合高并发场景。三者各有特点,在实际应用中往往需要混合使用。作者强调,设计者需根据需求复杂度、IO/CPU密集程度和资源限制等因素灵活选择机制,并注意细节处理如轮询频率、事件管理和异步实现方式。良好的设计需要在技术特性和实际需求间找到平衡点,通过迭代优化达到最佳效果。文章指出工程实践往往需要综合运用多种技术,而非非此即彼的选择。原创 2026-03-04 10:45:03 · 600 阅读 · 0 评论 -
设计心得—隔离变化的实现方法之适配器
本文探讨了适配器设计模式的实践应用。适配器作为连接不同模块的"胶水",通过抽象层解决接口不兼容问题,典型应用场景包括数据库接口、日志框架等。文章提出适配器设计的四个原则:单一职责、简单性、依赖注入和适度扩展性,并通过数据库适配器代码示例说明实现机制。适配器虽能提高系统灵活性,但需权衡其代价,设计者应根据实际需求谨慎使用,在扩展性与复杂性之间找到平衡点。适配器如同社会中介,并非所有场景都需要,关键在于对整体需求的准确把握。原创 2026-02-26 10:57:58 · 392 阅读 · 0 评论 -
计算机原理—认识和学习线程
本文从多维度探讨了线程的本质与意义。首先通过类比认知过程,强调理解线程需从表象到本质;随后从用户、操作系统和硬件三个视角分析线程的构成要素,包括栈空间、控制结构及硬件支持等;进而指出线程产生的根本原因是资源不足与技术发展的需求;最后阐明线程作为标准执行单元的意义,为软件开发提供了统一的协作基础。全文揭示了线程既是技术演进的产物,也是工业化协作的标准体现,理解其本质有助于开发者更好地运用这一基础概念。原创 2026-02-24 11:05:27 · 493 阅读 · 0 评论 -
设计心得—如何使用多线程开发
多线程开发的核心目标是提升性能、资源利用率和用户体验,同时解耦复杂任务。设计需考虑并发模型选择、任务拆分、线程生命周期管理和通信控制,避免死锁等问题。虽然多线程能充分利用CPU资源,但线程创建和切换成本较高,需权衡效率。开发者应结合具体场景(如IO/CPU密集型任务)和平台特性,合理使用线程库和性能工具,避免过度设计。多线程开发需平衡复杂度与收益,才能实现高效稳定的并发程序。原创 2026-02-09 10:41:52 · 604 阅读 · 0 评论 -
设计心得—单次调用的控制
本文探讨了C++中单次调用机制的概念与应用。单次调用不仅用于生成单实例,也可应用于多实例场景,其核心价值在于避免副作用并确保唯一性调用。文章分析了单次调用的必要性,包括提高效率、线程安全、防止重复初始化等问题,并介绍了四种实现方法:std::call_once、全局显式调用、局部静态变量和同步操作。通过代码示例展示了具体实现方式,强调基础技术灵活组合应用的重要性,指出不同场景需要选择最适合的实现机制。原创 2026-02-06 11:39:15 · 319 阅读 · 0 评论 -
设计心得——API和ABI以及ABI的兼容性
本文探讨了C++开发中动态库升级引发的ABI(应用程序二进制接口)兼容性问题。文章首先分析了工程实践中动态库替换导致程序崩溃的现象,指出ABI兼容是实现热更新的关键。随后详细对比了API与ABI的区别,阐述了ABI包含的指令集、数据类型、函数调用约定等核心要素。通过具体代码示例,说明了类内存布局、虚函数、参数传递等编程方式对ABI的影响,并总结了位域、Pimpl等保持ABI兼容的实用技术。最后指出ABI问题在C++等底层语言中尤为突出,而高级语言通过虚拟机环境规避了这类问题。文章为C++开发者处理动态库兼容原创 2026-02-02 12:44:28 · 745 阅读 · 0 评论 -
设计心得——隔离隐藏的初步实践
本文探讨了软件设计中隔离隐藏细节的重要性及实现方法。作者指出过度暴露实现细节会带来风险,应通过接口最小化和信息屏蔽来确保设计稳定性。文章详细分析了四种隔离方法:基础隔离(适用于小型项目)、接口隔离(包括抽象接口和完全隔离)、设计模式隔离(工厂/单例、桥接/策略等)以及Pimpl技术。通过C++代码示例展示了各种方法的实现方式,并对比了它们的优缺点:Pimpl能减少编译依赖但增加间接访问开销,接口隔离提供多态性但设计复杂度高。最后强调应根据项目规模、ABI兼容需求等因素选择合适的隔离策略组合,在大型项目中往往原创 2026-01-23 07:51:01 · 1296 阅读 · 0 评论 -
C++编程实践——链式调用的实践
本文探讨了C++中链式调用的实现与应用。链式调用通过返回对象引用或指针实现连续函数调用,使代码更简洁直观。文章介绍了四种实现方式:返回对象指针/引用、流畅接口、运算符重载和CRTP技术,并分析了链式调用在设计模式、异步编程等场景中的应用。最后通过观察者模式示例展示了链式调用的实际应用,同时也指出其调试困难和异常处理复杂等缺点。总体而言,链式调用是一种提高代码可读性的有效手段,但需根据具体场景权衡使用。原创 2026-01-04 11:11:47 · 841 阅读 · 0 评论 -
C++编程实践——分布式文件系统
分布式存储技术通过整合网络中的存储资源实现数据分散存储,具有高安全性、可用性、扩展性和透明性等优势。其中分布式文件系统以HDFS、Ceph、GlusterFS等为代表,广泛应用于大数据分析、云存储、高性能计算等领域。不同系统各有特点:HDFS适合大文件批量处理,Ceph支持多种存储接口,GlusterFS无元数据服务器设计,TFS专为电商小文件优化。选择时需结合实际场景需求,综合考虑文件大小、性能要求等因素。随着大数据和云技术的发展,分布式文件系统已成为现代数据存储的重要基础设施。原创 2025-11-10 12:31:54 · 853 阅读 · 0 评论 -
设计心得—一致性的分析
本文探讨了计算机系统中一致性的概念、类型及其实现方式。一致性是确保系统协调统一运行的关键要求,包括严格一致性、顺序一致性和最终一致性三种模型。实现一致性需要硬件、编译器、操作系统和软件共同协作,涉及内存序、分布式算法、数据库事务等多种技术。虽然一致性保证了数据的完备性和操作的正确性,但也会影响系统性能。理解一致性原理对开发者处理复杂并行编程和底层开发至关重要。原创 2025-10-20 12:14:23 · 889 阅读 · 1 评论 -
设计心得——稳定和性能
本文探讨了软件设计的核心目标与平衡艺术。文章指出,软件设计的本质是高效解决复杂问题,关键在于稳定性和性能的辩证统一。稳定性包含可靠性、容错性等7个指标,性能则涉及响应时间、吞吐量等10个维度。作者提出设计者应像厨师或医生般灵活应对:通过资源管理、算法选择等保障稳定性,利用代码优化、平台调优等提升性能。二者关系如同"功法"与"拳术",稳定是基础,性能是目标。最后强调,优秀设计应基于实际需求,在保障一方的前提下适度提升另一方,而非追求绝对极值。全文150字,概括了软件设计原创 2025-10-17 08:09:22 · 652 阅读 · 1 评论 -
设计心得——拆分
本文探讨了软件规模扩大后的拆分策略。当软件功能模块膨胀到一定程度时,拆分成为必要手段,其核心目的是保持软件的可维护性和可扩展性。拆分本质上是再模块化和再分层的过程,但比初始设计更具挑战性。要实现优雅拆分,需明确目的、敢于突破原有设计框架,同时兼顾原有项目特点。优秀的架构师需要同时具备"平地起高楼"的设计能力和"治病救人"的拆分能力,这需要持续锤炼代码能力和设计思想。文章通过家族分家的比喻生动说明了软件拆分的必然性。原创 2025-09-22 18:37:52 · 464 阅读 · 0 评论 -
设计心得——平衡之道
俗话说得好“此一时,彼一时”,它的意思其实就是与时俱进。大千世界,各有不同,同样的经验不可能完全复制,甚至可能上一次的成功的经验是导致下一次失败的原因。人们都明白刻舟求剑的意思,但在实际的工作中,往往跳不出当前的局面,陷入了刻舟求剑的同样的境地。平衡也是如此,千万不能僵化的把上一次平衡的成功设计代入到不同场景,而应该是在不断的发展变化中得到一个趋向于最优结果的平衡设计。中庸之道,不是平庸之道,更不是平均之道,而是平衡之道。中庸之道没有标准,同样平衡之道也没有标准,一切以实际情况为准。原创 2025-09-13 09:04:02 · 573 阅读 · 1 评论 -
GPU中的SIMT
本文介绍了SIMT(单指令多线程)并行计算架构及其在NVIDIA GPU中的应用。SIMT与SIMD的主要区别在于:SIMT允许线程处理不同数据并支持分支处理,更适合GPU大规模并行计算;而SIMD则适合CPU上的向量处理。NVIDIA在GF100系列后转向SIMT架构,通过线程束(Wrap)实现高效并行。虽然二者各有优势,但在实际应用中往往结合使用,如CPU处理数据后交由GPU进行任务并行。技术的进步常源于竞争,不同架构的互补配合才能高效解决复杂问题。原创 2025-09-03 10:45:58 · 866 阅读 · 0 评论 -
设计心得——c++设计中常见的问题
本文探讨了C++语言与设计架构的关系,指出语言特性会影响设计风格。针对C++常见设计问题,提出了8项注意事项,包括避免反射、多继承、过度优化等。建议处理这些问题时需深入理解C++语言模型、善用标准库和开源工具、掌握资源管理机制,并遵循软件设计原则。文章强调设计应结合实际需求,形成自己的编程思想,而非追求业界顶尖设计。最后指出设计学习要带着问题意识,最终目标是建立个人的架构思想体系。原创 2025-08-23 09:12:39 · 393 阅读 · 1 评论 -
设计心得——如何架构选型
对架构的选型进行分析说明原创 2025-08-15 09:53:07 · 1090 阅读 · 0 评论 -
设计心得——网络包的处理
本文从设计角度探讨了网络开发中的粘包和分包问题。TCP/IP作为数据流传输协议,本身不存在粘包分包问题,这些现象源于应用层对数据流的解析需求。作者通过快递运输的比喻形象说明TCP/IP会根据数据大小进行合并或拆分传输。对于处理方案,文章提出三种设计思路:优化数据包大小适配、调整网络通信配置、设计自描述数据格式,但指出最终仍需开发者综合处理。文章强调设计抽象与实际开发的区别,粘包问题需要从协议栈、缓冲区、应用层等多层面整体解决。本文聚焦设计层面分析,未涉及常见的分隔符、消息头等具体实现方案。原创 2025-08-02 09:17:18 · 464 阅读 · 0 评论 -
设计心得——同步和异步
从设计的角度对同步和异步进行分析和说明原创 2025-07-27 13:52:25 · 830 阅读 · 1 评论 -
设计心得——编程范式
理论和实践的关系和重要性往往大家都知道,但真正应用起来,却达不到效果。究其原因,就在于认知程度不够。自己很明白,但实际应用中却往往忽视一个方面或者懈怠于思考,不愿意进行理论和实践的互相印证和融合。这就极大降低了实践的能力和对理论理解的深度。知行合一,方是根本。知行互动,才是目的。原创 2025-06-08 10:35:18 · 650 阅读 · 3 评论 -
设计心得——抽象
摘要:抽象是从具象事物中提取本质特征的思维过程,在计算机领域表现为代码和设计思想的提炼。文章阐述了抽象的发展历程,从文字演化到编程应用;解析了表征性和原理性两种抽象类型;指出编程中抽象的应用价值在于解耦、封装和提升可维护性;强调优秀架构师需要兼具思想抽象和代码抽象能力。最后提出掌握抽象的方法论:持续学习理论并反复实践验证,才能实现从开发到设计的思维跨越。(148字)原创 2025-06-01 17:17:10 · 1124 阅读 · 3 评论 -
设计心得——封装
封装是面向对象编程的三大特性之一,它将数据和操作数据的方法整合在一起,形成一个独立的单元(如类或结构体),并对外隐藏内部实现细节,只暴露必要的接口。封装的意义在于提高代码的安全性、可靠性和可维护性,同时为继承和多态提供支持。通过使用不同的修饰符(如public、private、protected)和归类处理,开发者可以实现有效的封装。封装的应用实例广泛,如银行账户类中的余额管理。掌握封装是编程基础中的关键,只有打好基础,才能进一步提升编程水平。原创 2025-05-18 09:43:36 · 652 阅读 · 7 评论 -
设计心得——数据结构的意义
数据结构本质就是对数据处理的一种抽象,它做到了相对上整体的最优。即无论从访问、操作和存储都达到了一个最佳的平衡。它既是一种数据意义上的建模也是一种解决问题的思维范式,不但满足了数据处理本身的功能又可以为系统设计和工程实现提供了模式化的解决方案。要想做一个优秀的程序员和架构师,数据结构是绕不过去的。要想学好算法,数据结构更是基础。原创 2025-04-26 09:47:18 · 968 阅读 · 3 评论 -
设计心得——状态机
一定要明白状态机的目的和作用,要学会在不同的场景和条件灵活的使用状态机。一般情况下,状态机的设计不要过于复杂,这样不利用状态机的维护。同样过于简单的情况也不一定非得要用状态机。至于如何避免复杂,就记住一句话,拆分状态逻辑,利用中间层处理。状态机和其实现的方式,其实都是重点,重点在于如何将状态机与实际的实现逻辑严格的对应起来,保证状态的稳定和准确,特别是不能忽视某些特定条件的状态转换及行为的细微差异。只要能把握完整的状态流程,状态机的实现也就是一种代码的展开罢了。原创 2025-04-03 22:50:08 · 1309 阅读 · 0 评论 -
设计心得——发布订阅
目前,智能驾驶这个赛道火得很,但其中的车联网系统中就广泛使用了这种机制。所以说,掌握好原理才能更好的拓展一项技术的应用,而不只是机械的模仿。需要说明的是,本篇不是分析发布/订阅机制内部实现的文章,而重点在于将其如何应用于设计当中。尽管篇幅不大,但希望给大家一个另外的角度做为切入点,也就是说,要从不同的角度来看待一个技术问题,才能更好更全面的明白其在整个技术框架中的作用。原创 2025-03-28 20:51:39 · 1126 阅读 · 1 评论 -
设计心得——推拉机制
推和拉本身不难理解,也易于实现。但麻烦就在于实际应用场景中的复杂度和各种异常的处理,这才是重点中的重点。所以大家一定要根据实际情况进行平衡,保证所需。而不是为了应用推拉去实现推拉机制。原创 2025-03-26 11:42:03 · 1052 阅读 · 0 评论 -
设计心得——事件机制的实现
本文主要是给不了解或者想学习事件机制的开发者一个入门的方法,重点在于提供一个初窥门径的视点。在明白了事件机制的原理后,可以根据自己的技术水平的增长和认知思想的不断提高,设计出一个相对更完善更合理的事件系统。万事开头难,临门第一脚。以后有机会在此基础上将一个相对事用的事件系统给大家剖析一下,那么就更容易在事件系统上总结提高。愿与诸君共勉!原创 2025-03-24 13:14:50 · 624 阅读 · 0 评论 -
为什么会有虚拟内存
本文不是讲虚拟内存技术本身或者说其技术的特点。重点是讲述为什么会存在虚拟内存,这是给后来开发者或者说设计者的一个解决问题的思路。活学活用别人的思想,真正领会这些技术架构的思想并学习和吸收成为自己的思想,才能更好的解决面对的问题,进而从整体上提高自己的技术。最后,技术的发展,不是凭空想象的,它一定是实际需求推动的。所以理论和实践相结合,是重中之重!原创 2025-03-23 09:55:25 · 861 阅读 · 0 评论 -
设计心得——安全性和健壮性
程序的开发,往往不是一两个因素影响,而是一个多重的因素整体互相影响确定的。而一个优秀的设计者就是要在这些因素中,找到关键的因素,也就是常说的主要矛盾,并处理在某些情况下,次要矛盾转化为主要矛盾时如何处理(比如程序异常时,保存了部分的文件怎么办)。所以,有丰富的理论和实践形成的指导思想,才是解决问题的关键所在。好医生是在病患未起时就将其消灭。也就是所谓的预防大于治疗。而目前看来,在软件开发中,仍然是以“治疗”为主。希望开发者们能尽量把重心前移,减少亡羊补牢的情况!原创 2025-03-23 09:52:45 · 933 阅读 · 0 评论 -
设计心得——如何实现接口
爱看武侠小说的知道有形意拳这个拳法,形和意,一外一内。而在武林中又有一句话“练拳不练功,到老一场空;练功不练拳,到老也枉然(犹如无舵船)!其实编程也是如此,光明白理论,不进行实践,那么进步就无从谈起;反之,光进行实践不学习理论,则方向无法把握,事倍功半。前面反复提及,计算机编程是一个理论和实践高度结合的技术,理论和实践是互相促进互相发展的,请大家务必明白这一点。既要扎实的推进编程的水平,又要不断的多看一些英文的资料紧跟技术发展的潮流和方向。原创 2025-03-22 21:46:10 · 856 阅读 · 0 评论 -
设计心得——作用域处理
简单的东西,往往意味着灵活。因为简单,所以应用的广泛,应用的广泛就意味着应用的场景丰富。不同的场景下的应用就有可能有细节的不同。而细节的丰富恰恰是C++的一个特点,也是为广大开发者觉得不容易把握的地方。作用域看似简单,但它和代码编写直接结合了起来。往往代码的水平就可以通过作用域的控制窥见一斑。而作用域还有一个特点,即使设计的较差甚至非常差,在一些中小程序中对程序的运行也不会有什么影响。往往就会让大多数中低程序员将其忽视。简单不代表容易把握,切记!原创 2025-03-21 22:47:58 · 1044 阅读 · 0 评论 -
设计心得——多态
勿在浮砂筑高台。只有掌握技术本身,才能更好的在设计上展开应用。换句话说,一个优秀的设计者本身必须是一个优秀的开发者。这也是前一段时间网上经常说的所谓“PPT架构师”的味道。知其然并知其所以然,顺势而为,才可能有一个优秀的设计出来。原创 2025-03-15 19:11:21 · 434 阅读 · 0 评论 -
设计心得——粒度
学习设计就是从这些小的基础的东西一步步走过去的,不要妄想着上来就指挥千军万马并且打胜仗。甘罗八岁拜相,不谈真假,但几千年出不来几个。回头看看世界军事史,有名的军事家都是一枪一枪打出来的。没有人天生就是元帅。软件设计亦是如此,实践出真知。原创 2025-03-09 10:42:01 · 827 阅读 · 0 评论 -
设计心得——继承和实例
设计的学习难度说大很大,说小很小,关键看开发者的知识驾驭程度和水平。条条大路通罗马,但有没有捷径,这种捷径是否适合每个开发者?是不是有更适合具体到某一个人的捷径?这就需要每一个开发者和设计者不断的探索。总体而言,多学习理论知识,多写代码,多看优秀的开源代码和框架,多和优秀的设计者进行有效的交流。在此基础上不断的思考和实践,对大多数开发者来说,是一条不错的提升之路!原创 2025-03-08 09:38:40 · 543 阅读 · 1 评论 -
设计心得——分层和划分模块
设计一个从抽象到具体,从整体到细节,不断具体而微的过程。俗话说得好“教的曲儿唱不得”。设计不像技巧,多问两下多看两下代码就会用了。所以设计中的一些具体的手段和方法,要不断的从不同的角度不同的场景进行分析学习,并不断在实践中进行检验。反思得失,总结教训,形成自己的一套解决问题、处理问题的逻辑和流程。最终升华为自己的设计思想。这一定是一个长期的,不断的否定之否定的过程!愿与诸君共勉!原创 2025-03-07 22:27:56 · 1501 阅读 · 0 评论
分享