自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

日拱一卒,玉汝于成

想多了都是问题,做多了都是答案

  • 博客(79)
  • 收藏
  • 关注

原创 Linux 中根据关键字查找某一文件

要查找包含特定文本内容的文件,可以结合使用find和grep命令。要在Linux系统中根据关键字查找某个文件,你可以使用find命令结合grep命令来实现。根据你的具体需求选择合适的为你实际的查找路径和关键字。命令,并替换方括号中的内容。

2024-04-29 14:44:36 152

原创 编程新手如何快速提升编码能力?

首先,确保你对所学编程语言的基础概念有深刻理解,包括变量、数据类型、控制结构(如循环、条件语句)、函数、类和对象(面向对象编程语言)等。:通过GitHub等平台,阅读和分析优秀的开源项目代码,了解高手是如何组织代码结构、处理异常、优化性能的。这不仅能提升你的编码技巧,还能培养良好的编码习惯。:每次完成一个项目或解决一个问题后,花时间反思代码的优缺点,总结学到的新知识和技能。记住,编程技能的提升没有捷径,需要时间和持续的努力。:编程学习是一个长期的过程,可能会遇到挫折和困难,保持耐心,坚持不懈,逐步提升。

2024-04-29 10:36:28 227

原创 GN 编译系统简介

与其他编译方式相比,GN 在特定领域(如Google的Chromium项目)有着明显的优势,但也可能在灵活性上有所牺牲,尤其是在需要高度定制的构建流程中。GN(Generate Ninja)是由 Google 开发的一个元构建系统,它的主要职责是生成 Ninja 构建文件,进而驱动 Ninja 构建工具完成实际的编译、链接等工作。:GN 使用声明式语言,使得构建规则更容易理解和维护。:相比之前的 GYP,GN 由 C++ 编写,运行速度更快,可以显著减少生成构建文件的时间,尤其是在大型项目中。

2024-04-29 10:31:35 302

原创 软件重构的要点及注意事项

重构是软件开发过程中改进现有代码结构和设计而不改变其外在行为的过程。良好的重构实践可以提高代码质量、可读性、可维护性,并促进后续的开发工作。

2024-04-28 14:25:45 517

原创 Channel Session架构简介

"Channel Session架构" 是指在分布式系统、即时通讯、网络编程等领域中,结合了"Channel"(通道)和"Session"概念的一种设计模式。这种架构强调的是高效、安全地管理客户端与服务器之间的通信会话,尤其是在需要维持长时间连接和双向通信的场景下。

2024-04-28 14:23:00 468 1

原创 用C++实现单例模式

在C++中实现单例模式,可以采用多种方式,这里我将展示几种常见的实现方法,包括饿汉式、懒汉式(含双重检查锁定)、以及静态内部类方式(C++中没有直接的静态内部类,但可以通过命名空间或者嵌套类模拟)。单例模式(Singleton Pattern)是一种常用的软件设计模式,它保证一个类在整个应用程序中仅有一个实例,并提供一个全局访问点来获取这个实例。以上展示了C++中实现单例模式的几种方式,每种方式都有其适用场景和优缺点,开发者应根据实际需求选择最合适的实现。

2024-04-27 22:53:42 412 2

原创 常用设计模式简介

设计模式是在软件设计中常见问题的通用可重用解决方案。它们分为三大类:创建型模式、结构型模式和行为型模式。

2024-04-27 22:27:00 730

原创 PID (Process ID) 和 thread_id (Thread ID) 的区别

在一个进程中,每个线程的 thread_id 是唯一的,但不同的进程可以拥有相同 thread_id 的线程。: thread_id 是 Thread Identifier(线程标识符)的缩写,它是由操作系统为每个线程赋予的唯一数字标识。简而言之,PID 与 thread_id 分别代表操作系统中进程和线程的唯一身份,它们各自服务于进程管理和线程调度的不同层面。它在进程内部必须是唯一的,但在不同进程中可以重复,且线程结束时不会被同一进程内的其他线程复用。等)管理和跟踪进程。

2024-04-26 11:05:19 706 2

原创 Linux 抽象命名空间(Abstract Namespace)详细介绍

相比于传统的 Unix 域套接字(文件系统命名空间和临时文件命名空间),抽象命名空间具有独特的特性,使其在某些应用场景中尤为适用。总结起来,Linux 抽象命名空间是一种高效的、轻量级的、跨用户空间隔离的 Unix 域套接字类型,适用于需要快速创建和销毁、跨用户通信或避免文件系统开销的进程间通信场景。抽象命名空间不受文件系统的权限模型约束,不同用户或用户组间的进程可以直接通过相同的抽象命名空间名称进行通信,无需考虑文件的所有权和权限问题。当最后一个引用该命名空间的套接字关闭后,内核会自动清理该命名空间。

2024-04-25 11:19:46 862

原创 Linux 抽象命名空间(Abstract Namespace)简介

与传统的 UDS 不同,抽象命名空间并不在文件系统中创建实际文件,而是仅存在于内核内存中,其名称以 localabstract: 作为前缀。在这个例子中,我们创建了一个名为 my_abstract_namespace 的抽象命名空间,并将其绑定到了刚创建的 Unix 套接字上。要在 Linux 系统中生成一个抽象命名空间,通常需要使用编程语言的套接字 API 来创建一个 Unix 域套接字,并将其绑定到一个以 localabstract: 开头的特殊路径。

2024-04-25 11:10:04 583 1

原创 优秀软件开发大佬的技能树!

开发人员是软件项目的核心力量,他们负责将设计转化为可运行的代码,实现业务逻辑,确保系统的稳定、高效运行。

2024-04-24 10:51:35 875 4

原创 软件测试人员所需技能!

测试人员作为软件质量保障的重要角色,需要具备一系列专业技能和软素质以有效地执行测试任务、发现并报告缺陷、提供有价值的反馈,从而提升软件产品的质量和用户满意度。

2024-04-24 10:47:12 273

原创 项目开发中的注意事项,帮你少走很多弯路,必读!!

遵循以上注意事项,可以有效提升项目开发的质量、效率和成功率,降低项目风险,确保项目目标的顺利达成。在实际操作中,应根据项目特性和团队实际情况灵活运用,持续改进项目管理实践。

2024-04-23 22:00:04 523

原创 项目开发的详细步骤(精华版)

项目开发是指从项目启动到项目交付的全过程,涵盖了需求分析、设计、编码、测试、部署等多个环节。

2024-04-23 21:58:43 1012

原创 需求开发的详细步骤

需求开发是软件开发生命周期中的关键阶段,它涉及从原始想法到明确、可实施的需求规格的全过程。

2024-04-23 21:54:25 755

原创 软件开发的一般步骤

软件开发一般遵循一套标准化的流程,旨在确保项目的高效实施、产品质量可控以及最终用户满意度。

2024-04-23 21:52:11 445

原创 回环接口(Loopback Interface)简介

回环接口(Loopback Interface),又称 Loopback 接口或环回接口,是一种特殊的网络接口,它是完全在软件层面实现的虚拟网络接口,不与任何物理硬件设备关联。: 数据包发送到回环接口后,不会离开本地主机。总之,回环接口是一种在软件层面实现的虚拟网络接口,它为本地主机提供了一种与自身内部服务进行网络通信的方式,具有稳定性高、可靠性强的特点,广泛应用于网络服务绑定、诊断、路由配置、日志与监控等多种场景。: 回环接口是逻辑上的接口,它不是实际的物理设备(如网卡)的一部分。

2024-04-23 17:35:48 722

原创 端口转发中的master和slave

(主节点):通常指控制端或发起端,负责管理和控制端口转发的过程。(从节点):通常指被控制端或响应端,接受主节点的指令并执行端口转发。

2024-04-23 11:08:50 140

原创 冒烟测试(Smoke Testing)简介

如果冒烟测试失败,即发现了阻碍软件正常运行的重大缺陷,测试团队通常会拒绝接受这个版本,将其退回给开发团队进行修正,而不是继续投入更多资源进行详尽的测试。简而言之,冒烟测试之所以得名,是因为其与硬件行业中通过观察电路板通电后是否“冒烟”来快速判断其基本功能是否正常的实践相类比,寓意着软件在短时间内接受一次快速检查,确认是否存在足以阻断后续测试进程的重大问题。: 当开发团队提交新的代码变更或修复已知问题时,冒烟测试用来检测这些变更是否引入了新的故障,尤其是是否破坏了与之相关的现有功能。

2024-04-22 11:38:44 705

原创 句柄(Handle)简介

在现代操作系统中,特别是那些采用虚拟内存技术的系统,实际的物理内存地址可能随时间变化(如由于内存页面替换、地址空间布局随机化等机制),而句柄作为稳定的中间层,由系统维护其与实际资源的映射关系,确保即使资源地址变动,程序仍能通过不变的句柄正确访问资源。: 系统通过句柄可以跟踪资源的使用情况,并在适当的时候(如程序不再需要该资源时)释放或回收资源。: 句柄作为资源的抽象化引用,允许程序通过它来操作具体的资源,如文件、窗口、进程、线程、数据库记录、图形对象、网络连接等,而无需直接使用物理地址或详细的资源描述。

2024-04-18 17:11:37 487

原创 __UINT8_TYPE__ 和 __UINT16_TYPE__

是 C++ 中预定义的整数类型别名,它们通常由编译器提供,用于确保与特定平台上的原生无符号整数类型相匹配。这些类型别名通常出现在编译器的。头文件中,用于提供标准、跨平台的整数类型定义。

2024-04-18 14:24:16 400

原创 为什么要将原始数据从bufPtr复制到data中

中是为了构建一个完整的待发送数据包,其中包含了额外的头部信息(如数据大小),并确保数据包在内存中连续存放,便于后续一次性发送。中,可以确保即使原始数据所在的内存区域在发送完成后被释放或重用,待发送数据包依然有效。中是为了构建一个包含额外头部信息且内存连续的待发送数据包,便于高效发送,并简化了内存管理、错误处理和代码结构。中,确保了待发送数据(包括头部信息和原始数据)在内存中是连续的,可以直接通过一次系统调用或API函数(如。这样,发送函数无需关心原始数据的位置、大小以及如何与头部信息合并,简化了发送逻辑。

2024-04-17 17:45:33 302

原创 Linux “ tail -f [选项] 文件名 ” 指令介绍

命令是一个强大的实时监控工具,特别适用于跟踪日志文件或其他持续更新的文本文件的尾部内容。它允许用户实时查看文件的新追加数据,无需频繁手动检查或重新运行命令,极大地简化了日志分析、系统监控等工作。

2024-04-16 17:23:56 182 1

原创 Linux 在后台执行 shell 指令的方法

Shell 指令后台运行是指在Linux或Unix操作系统中执行一个Shell命令或脚本时,使其在后台模式下运行,即在不占用当前终端会话的交互性、不影响用户在该终端进行其他操作的情况下持续执行。综上所述,Shell指令后台运行意味着该指令在不占用用户交互式终端会话的情况下被执行,用户可以继续在终端中进行其他操作,同时后台任务能够在一定程度上独立于用户的登录状态持续运行。: 这些终端复用器提供了持久的会话环境,用户可以在其中启动后台任务,即使断开连接后,只要重新连接到同一个会话,就能看到任务仍在运行。

2024-04-16 17:18:51 561

原创 pty shell 简介

例如,在 SSH(Secure Shell)连接中,客户端通过创建一个伪终端并与服务器端的 shell 关联,使得用户能够在一个安全加密的通道上与远程系统的 shell 进行实时交互。在这种情况下,一个程序(通常是一个攻击工具、自动化脚本、远程访问软件等)创建并控制一个伪终端主设备,然后在这个伪终端上启动一个 shell(如。总结来说,pty shell 是通过伪终端技术实现的、具备完整交互特性的命令行 shell,常用于远程访问与控制、自动化脚本执行等场景,为用户提供如同操作本地物理终端一样的体验。

2024-04-15 15:20:08 278

原创 端口转发及安卓ADB forward的原理

对于安卓ADB的端口转发,这一过程是通过ADB工具及其代理服务器在PC端与Android设备之间协调完成的,实现了PC端应用程序与Android设备上应用程序之间的网络通信。: 目标设备接收到数据包后,基于目标端口信息将其分发给相应端口上监听的服务。端口转发是一种网络技术,允许网络通信从一个端口(源端口)在一台设备上被重定向到另一个端口(目标端口)在另一台设备上。: 目标设备(这里是Android设备)上需要有一个应用程序或服务在目标端口(如22222)上运行,并处于监听状态,准备接收来自源设备的数据。

2024-04-12 17:33:27 1147

原创 白盒测试(White-box Testing)简介

白盒测试(White-box Testing),也称为结构测试、透明盒测试或逻辑驱动测试,是一种软件测试方法,它侧重于测试软件的内部结构、逻辑和实现细节,而非仅仅关注其外部行为或用户界面。在白盒测试中,测试人员基于对程序内部工作原理的了解,设计并执行测试用例,以验证代码的正确性、完整性、健壮性以及符合设计规格的程度。

2024-04-11 14:21:08 557

原创 插桩模式简介

插桩模式是指在软件开发和测试过程中,对目标代码进行的一种干预手段。它涉及到在现有程序的特定位置插入额外的代码片段(称为“探针”或“桩代码”),以便在程序运行时收集信息、监控行为、进行性能分析、实现调试目的,或者实现诸如热修复、插件化等功能。插桩可以发生在源代码级别、编译时或运行时,其主要目的是在不影响原有程序逻辑的前提下,增强对程序内部工作状态的理解和控制。: 插桩通过在源代码、中间代码或二进制文件中插入额外代码来实现。这些插入的代码可能包括日志记录语句、计数器、断言、条件检查、性能测量代码等。

2024-04-11 14:18:32 629

原创 详细讲解 C 语言标准库中的 strncmp 函数

strncmp是 C 语言标准库提供的一个函数,用于比较两个字符串的前若干个字符是否相等。以下是关于strncmp。

2024-04-10 20:05:31 1191

原创 PID(Process ID)、UID(User ID)、Channel ID 和 Session ID 简介

PID(Process ID)和UID(User ID)是操作系统中用来标识进程和用户的独立概念,而Channel ID通常是与特定通信机制或协议相关的概念,用于标识通信通道。虽然它们各自服务于不同的目的,但在某些特定的通信场景中,PID、UID与Channel ID可能会有所关联。下面分别介绍这三个概念,并探讨它们可能存在的关系:定义与作用:定义与作用:定义与作用:Session ID 和 Channel ID 是两个在不同领域和上下文中使用的标识符,它们分别服务于不同的目的,但在某些特定的应用场景下,二

2024-04-09 14:33:03 1274

原创 客户端(client)fork 一个服务器(server)进程

客户端可以迅速创建一个与自身环境相同(如已有的配置信息、安全上下文等)的新进程,只需稍作调整(如绑定监听端口、设置服务逻辑等)就能快速变为一个临时服务器。快速创建一个本地服务器进程,开发者可以在同一台机器上方便地进行客户端与服务器的交互测试,无需依赖外部服务器或复杂的网络配置。创建一个具有适当权限的服务器进程,客户端可以在保持自身权限较低的同时,委托服务器进程执行这些特权操作。一个服务器(server)进程出来,这样的设计通常出现在特定的应用场景中,具有特定的目的和理由。从客户端(client)

2024-04-09 14:19:56 717

原创 Windows系统中类似于Linux grep的命令

的功能,但如果您追求与Linux命令行的一致性或需要更强大的正则表达式支持,可以考虑使用Cygwin、MSYS2或WSL等解决方案。在Windows命令提示符(CMD)或PowerShell中,使用。具体来说,Windows提供的相应命令是。综上所述,虽然Windows自带的。

2024-04-09 11:26:06 535 1

原创 Rust 中 #[allow(unreachable_code)] 简介

然而,在某些情况下,虽然编译器根据其静态分析认为某段代码不可达,但实际上在特定的运行时条件或特定的设计意图下,该代码可能是可达的。如果编译器认为存在某些代码在任何情况下都无法被执行到(比如在一个永远为真的条件判断之后或在一个永远返回的函数调用之前),它会发出一个“unreachable code”(不可达代码)警告,提示开发者可能存在逻辑错误或不必要的代码。将其放置在函数、模块、结构体、枚举、trait、impl 块等任何可应用属性的项之前,作用范围内的所有看似不可达的代码都将被编译器放过,不会引发警告。

2024-04-08 20:45:18 452

原创 Unix Domain Sockets (UDS) 简介

是一种进程间通信(IPC, Inter-Process Communication)机制,特别适用于在同一台主机操作系统上运行的多个进程之间进行高效的数据交换。它是基于文件系统路径或者匿名内存区域创建的套接字(socket),使得进程间可以直接通过内核进行通信,而不涉及网络层。下面详细介绍UDS的特点、工作原理以及在进程间通信中的应用。

2024-04-07 20:06:55 590

原创 Rust 中的 assert_eq! 宏

assert_eq!是 Rust 语言中的一个宏,用于在测试代码中断言两个值是否相等。如果两个值相等,则 assert_eq!宏不做任何事,程序会继续执行;若两个值不相等,则宏会触发 panic,并打印出一条包含实际值和预期值的消息,这对于调试和测试非常有用。

2024-04-02 10:15:05 141

原创 Rust 中 .expect()用法

开发者表达的是对这个操作成功的预期,即他们认为这个函数不应该失败。如果确实发生了错误,Rust 程序将 panic 并打印出 “set_nodelay call failed” 这样的错误消息,同时停止程序运行。或其他错误处理机制来适当地处理 Result 类型的值,而不是简单地让程序 panic。类型的一个方法,当 Result 值是 Ok(T) 类型时,它会返回其中包含的有效值。,表示没有具体的值(因为这是一个空元组),仅表示操作顺利完成;类型时,它会 panic,并打印出作为参数传入的错误信息。

2024-04-02 10:03:54 473

原创 sockets API 中的 SO_LINGER 选项

函数关闭一个套接字时,如果套接字缓冲区中仍有待发送的数据(即所谓的“残余数据”),操作系统通常会尽可能地将这些数据发送出去,这一过程被称为正常关闭(Graceful Shutdown)。字段指示了在关闭套接字之前应该等待多长时间(以秒为单位),等待期间会尝试将所有待发送的数据发送完毕。在某些情况下,如需快速关闭套接字并忽略残余数据,可以通过设置 SO_LINGER 选项并设置较短的 linger 时间来实现。如果设置为0,则禁用 SO_LINGER 选项,关闭套接字时会立即返回,而不考虑是否有残余数据;

2024-04-01 20:05:58 272

原创 RUST 中什么情况下要使用 .unwrap ( )

这两种类型常用于处理可能会出现错误或缺失值的情况。: 当你有一个 Result 类型的变量,并且你知道或者期望它一定是 Ok 值(即不包含错误)时,可以使用。: 当你有一个 Option 类型的变量,并且你知道或者期望它一定是 Some 值(即包含值)时,可以使用。它会提取并返回 Some 包含的值。但如果该 Option 是 None 值(不包含值),它会提取并返回 Ok 包含的值。但如果该 Result 是 Err 值(包含错误),,并停止程序执行,同时打印出错误信息。操作符来处理可能的错误或缺失值。

2024-04-01 19:40:18 563

原创 I/O 多路复用简介

I/O多路复用(I/O Multiplexing)是一种高效的网络编程技术,它允许单个进程或线程同时监控多个文件描述符(通常是网络套接字),检查是否有网络I/O事件(例如,读就绪或写就绪)发生。通过I/O多路复用技术,应用程序可以避免为每一个新的连接创建新线程带来的内存开销和上下文切换成本,进而极大地提高了系统的并发能力和资源利用率。函数:它是Linux特有的高效I/O多路复用API,通过事件驱动的方式工作,仅通知那些真正有事件发生的描述符,且添加和删除监控的描述符更加高效,尤其适合大规模并发连接场景。

2024-04-01 17:20:11 196

原创 Unix 网络编程, Socket 以及bind(), listen(), accept(), connect(), read()&write()五大函数简介

Unix网络编程是针对类Unix操作系统(包括Linux、BSD以及其他遵循POSIX标准的操作系统)进行网络通信开发的技术领域。网络编程涉及创建和管理网络连接、交换数据以及处理不同层次网络协议栈上的各种网络事件。以上流程是典型的基于 BSD Socket API 的网络编程基础流程,在实际的 Tokio 异步环境中,这些操作会有对应的异步版本(如。总之,Unix网络编程不仅限于实现基本的网络通信功能,还包括了提高网络应用性能、健壮性和安全性的众多策略和技术。等),以支持非阻塞式、事件驱动的编程风格。

2024-04-01 17:03:06 1823

空空如也

空空如也

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

TA关注的人

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