- 博客(18)
- 收藏
- 关注
原创 【设计模式】建造者模式
建造模式属于创建型设计模式。当有一个复杂对象,在对其进行构造时需要对其繁多的成员变量和嵌套对象进行初始化。这些初始化代码会在客户端代码的多个位置,并且构造函数参数会变得异常复杂。建造模式适用于对象包含多个独立组件,并且构建时需要按照固定的步骤。并且每个组件可能有不同类别,多种类别可以相互替换。用户只需要获得最终建造出来的结果,而无需关注建造过程。
2025-10-28 16:41:35
265
原创 【面向对象】抽象
抽象的作用是隐藏方法的具体实现,让调用者只需要关心提供了哪些功能,而不需要知道这些功能是如何实现的。在面向对象编程中,我们通过编程语言提供的接口类机制来实现抽象特性。抽象是面对复杂系统的处理方式,它帮助我们屏蔽了非关键性的信息,只关注功能不关注实现。所以当我们在定义类方法的时候,也要注意不要暴露太多的实现细节。
2025-10-10 20:04:26
214
原创 【面向对象】多态
多态(Polymorphism)是面向对象的四大特性之一,表示同一接口在不同对象上表现不同行为的能力。多态简化了代码逻辑,提高代码的拓展性和复用性,同时多态也是很多设计模式、设计原则、编程技巧的实现基础。
2025-10-10 19:40:15
639
原创 Linux虚拟内存管理
磁盘文件中一些只读的Section如.text、.rodata会被映射到内存的一个只读可执行的Segment(代码段)中。一些可读写的Section如何.data、.bss会被映射到内存中一个可读写的Segment(数据段、BSS段)中。这些二进制文件的布局也是一段一段的(Section),在进程运行之前会被加载并映射到内存中的段中(Segment)。二进制文件,这个二进制文件包含了程序运行所需要的元信息,包括程序机器码、全局变量和静态变量等。这样进程的整个虚拟内存布局就被描述出来了,在这里通过。
2025-09-29 22:40:26
1022
原创 《设计模式之美》| 导论
在实践中,我们把可维护性、可读性、可拓展性、可复用性当作最重要的衡量代码的标准。我们的目标是写出高质量的代码,而代码的质量是由这几个标准所衡量的,所以我们就用一些方法在这几个方面上去提高代码的质量,最经典的手段就是面向对象、编码规范、设计模式、设计原则、持续重构。如果有可以衡量代码质量的标准,我们就可以知道一个好的标准是什么,我们可以有一个正确的方向。为了增加代码的质量,我们就可以用面向对象、编码规范、设计模式、设计原则、持续重构这些手段来达到这个目标。首先,需要具体阐释一下这些标准的具体含义。
2025-09-20 16:18:21
304
原创 【设计模式】导论
设计模式是在特定场景下问题的典型解决方案,通常以设计原则作为指导思想,解决哪些反复出现的设计问题,主要满足代码质量当中的可拓展性要求。设计模式与算法都是特定问题的典型解决方案。而算法是问题的明确解决步骤,而设计模式是解决问题的蓝图,它可以在不同的程序中有不同的表达。
2025-09-20 16:12:35
348
原创 如何进行DeBug?
bug指的是程序的运行结果不符合预期的一种情况。编译时错误,程序无法编译成功,代码语法正确,但违反了编码语义规则。运行时错误,程序在运行时发生错误,导致程序异常终止。逻辑错误边界情况错误配置错误。
2025-07-29 14:13:02
371
原创 日志等级的区别
记录可能导致潜在问题的警告信息,通常不会直接影响程序的执行,但可能表明某个地方的配置不完善或系统存在某些潜在问题。日志是系统运行状况的最直接的反映,是排查错误、优化性能、确认系统状态、保障安全的重要工具。日志级别的设置决定了日志输出的详细程度,不同级别的日志可以帮助开发者在不同场景下关注不同的内容。是日志中最为详细的级别,用于记录极为详细的程序执行路径,如每个方法的进入、退出、每个变量的值等。:适用于生产环境,帮助开发和运维人员了解系统的当前状态,如启动、配置加载、任务执行等。:用于开发和测试阶段。
2025-07-14 11:21:32
340
原创 多线程编程
在多线程编程中,最经典的问题就是多个线程在同时访问同一数据是会出现“竞态条件”。为了解决这个问题,就需要线程之间进行同步,常用的同步手段有锁、信号量等。分离线程,让线程在后台自己运行,直到自己的任务完成。但是如果主程序结束了,分离线程会被强制终止。线程之间之间的同步,有时候是需要一个线程等待某个条件,这时候就需要条件变量。函数返回系统上可用的处理器核心数量,表示可以并行执行的最大线程数。阻塞当前线程,直到目标线程执行完毕。检查线程是否可以被等待。
2025-07-04 14:20:54
435
原创 【设计模式】单例模式
单例模式是一种设计模式,确保一个类只能创建一个实例。它常用于解决资源访问冲突和表示全局唯一类的问题。实现方式包括饿汉式(类加载时初始化,线程安全但不支持延迟加载)、饱汉式(支持延迟加载但性能较低)、双重检测(高并发但可能乱序执行)和现代实现(利用C++11静态局部变量)。单例模式存在违反OOP特性、隐藏依赖关系、拓展性和可测试性差等问题。替代方案可通过静态方法、工厂模式或IOC容器实现。
2025-06-16 16:15:08
781
原创 CMakeLists语法
本文介绍了CMake构建系统的基础知识和常用命令。CMake通过逻辑目标定义可执行文件、库文件及自定义目标,并通过依赖关系确定构建顺序。主要内容包括:1) CMake构建流程(编写CMakeLists.txt、生成Makefile、执行编译);2) 核心操作如添加可执行文件(add_executable)、创建库文件(add_library)、管理源文件和头文件;3) 常用命令如project设置项目、set定义变量、option配置选项等。文章还涉及子目录管理(add_subdirectory)和跨平台特
2025-05-27 18:45:36
909
原创 环境变量介绍
环境变量是操作系统中用于存储和传递系统配置信息的键值对,能够简化路径和地址的设置。环境变量分为全局变量(对整个系统生效)、用户级变量(对当前用户生效)和进程级变量(对特定进程生效)。常用的环境变量包括PATH(可执行文件搜索路径)、HOME(用户主目录)、USER(当前用户名)和TMPDIR(临时文件目录)等。环境变量可以通过临时设置(使用export命令)或永久设置(修改用户级或系统级配置文件)来配置。临时设置仅在当前会话中有效,而永久设置则通过修改.bashrc、/etc/environment等文件实
2025-05-14 10:52:45
706
原创 【程序运行问题】链接的时候加上了动态库,但是在运行的时候显示找不到对应库位置
在Linux系统中,编译时链接动态库并不保证运行时能正确加载该库。动态库在运行时由操作系统的动态链接器加载,若找不到库,程序将出错。解决方法包括:1) 将动态库放置在系统默认搜索路径(如/lib、/usr/lib等);2) 使用ldconfig命令更新动态链接库缓存,支持自定义库路径;3) 通过设置LD_LIBRARY_PATH环境变量临时或永久指定动态库搜索路径。这些方法确保程序在运行时能够正确找到并加载所需的动态库。
2025-05-12 17:56:52
827
原创 交叉编译简介
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。本机编译:例如在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这个过程称为本机编译。交叉编译:这个概念的出现和流行是和嵌入式系统的广泛发展同步的。
2025-04-27 19:10:58
355
原创 极限编程简介
极限编程为管理人员和开发人员提供了一种指导日常实践的方式,这种实践方式意味着接受并鼓励某些特别有价值的方式。这些在传统的软件工程中看起来是极端的实践,将会使得开发过程比传统方法更好地响应用户需求,因而更加敏捷,更好地构建出高质量的软件。
2025-04-26 11:39:23
1246
原创 敏捷开发简介
敏捷不是银弹,不能包治百病。大写的Agile是原教旨主义,要求按照官方的敏捷教义开展工作。小写的agile是一种形容词,一种做事的方式。敏捷是一种哲学,而不是一种商业惯例。它用四颗子弹勾勒出一种思维方式,一种将项目的所有复杂部分进行优先排序的框架,它并不告诉你如何安排每天的团队会议。
2025-04-25 21:28:57
1358
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅