随笔分类 - CS
摘要:在C语言中我们会使用malloc来动态地分配内存,这样做的一个主要理由是有些数据结构的大小只有在运行时才能确定。例如,如果你正在编写一个程序,需要用户输入一些数据,但你不知道用户会输入多少数据,那么你就需要使用动态内存分配。而堆是一种用于动态内存分配的数据结构,当程序员使用 malloc 或其他动态
阅读全文
摘要:这篇写一下计算机系统中的缓存Cache应用场景和实现方式介绍。 Memory hierarchy 在讲缓存之前,首先要了解计算机中的内存结构层次Memory hierarchy。也就是下图金字塔形状的结构。 从上到下,内存层次结构如下: 寄存器:这是计算机中最快速的存储区域。它们位于处理器内,用于存
阅读全文
摘要:缓冲区溢出是指当数据写入某个缓冲区(buffer)时,超出了为该缓冲区分配的内存空间,从而导致覆盖了相邻内存区域的情况。这种现象可能导致程序崩溃、数据损坏,甚至引发安全漏洞,允许攻击者利用这一漏洞执行恶意代码。 typedef struct { int a[2]; double d; } struc
阅读全文
摘要:栈其实就是计算机系统内存中的一小块。栈是一块特殊的内存区域,栈在内存中的增长方向是向低地址扩展,%rsp寄存器存储栈的最低地址,即栈顶元素的地址。这种栈结构在程序中的应用有助于实现函数调用、局部变量的管理以及递归等功能。 Push和Pop指令 内存中中的栈可以进行push和pop指令,如果你学过数据
阅读全文
摘要:上篇写了machine code基本知识概念,这篇再总结一下其中的流控制、条件判断,循环等实现。 一段machine code引出 在machine code中,通场使用jmp指令来跳转到某个代码块。比如一个机器码可能长这样: decision: subq $8, %rsp testl %edi,
阅读全文
摘要:这篇文章写一下X86系统中的ISA(instruction set architecture)指令集架构,machine code以及汇编代码assembly code相关的内容。 一个简单的overview: 不用一下子全看得懂,先有个大致的概念,因为后面还会细讲其中一些部分。 总的来说,程序执行
阅读全文
摘要:shell是Linux系统中的一个程序,用于接收键盘的命令,可以算作是用户和操作系统之间的接口CLI。 Directories目录 pwd:Print Working Directory 的缩写,这个命令将显示你当前所在的目录。 cd: Change Directory 的缩写,这个命令让你可以切换
阅读全文
摘要:这篇文章梳理一下Bits, Bytes and Integers——二进制unsigned以及Two-complement表示,十六进制这些事儿。 计算机中所有数据都是用二进制的0和1组成的,直接上知识点。 二进制 Unsigned以及Two-complement 同样的一串二进制数,按照有符号或者
阅读全文
摘要:这篇文章是继Git概念介绍,常用命令与工作流程整理 配图_TranSad的博客-CSDN博客 之后的一些补充,学习总结一些额外Git操作中的比较常用的操作。所以这篇文章假设你已经有了前面的基础,我就直接说一些没有提到过的部分。 Detached HEAD 在Git中我们通常把HEAD当成是指向当前分
阅读全文
摘要:什么是Test Doubles In software testing, we developed unit tests and integration tests to test the code's functionality. However, in the real world, it is
阅读全文
摘要:首先附一张Git的cheat sheet 作为开始,方便查阅:https://education.github.com/git-cheat-sheet-education.pdf Git简介 Git大家肯定都不陌生了,象征性地再介绍一下:Git是一个版本控制系统,换句话说,它可以在整个开发过程中对我
阅读全文
摘要:API(应用程序编程接口)是一种规范,定义了不同软件组件之间如何进行交互。API 描述了一组操作、输入和输出,这些操作独立于实现,使得开发人员可以访问其他程序、库或框架的功能,而无需了解其底层实现细节。API 是一种在软件系统中实现模块化和解耦的方式。通过定义清晰的边界和接口,API 使得各个组件或
阅读全文
摘要:不可变性(Immutability)在设计模式中是指一个对象在创建后其状态就不能改变。这是一种编程思想和设计原则。在某些情况下,使用不变对象可以带来许多好处: 简化代码 make things very simple:不可变对象在创建后状态不会改变,因此无需考虑对象状态的变化,这使得代码更简单,更容
阅读全文
摘要:Template Method Pattern 和 Strategy Pattern 是两种常用的行为设计模式。他们分别用了继承inheritance和委托delegation两种不同的实现方法,因为上篇文章讲过了UML图,所以这篇顺便可以把两种不同模式的UML图都带出来一起说明。 Template
阅读全文
摘要:UML图(Unified Modeling Language,统一建模语言)是一种用于描述、可视化、构建和记录软件系统的标准化建模语言。在UML中,有很多类型的图,其中包括领域模型(Domain Model)、对象模型(Object Model)和系统顺序图(System Sequence Diag
阅读全文
摘要:这篇文章梳理一下Java软件测试中的Secification test和Structure test。 Specification Test 规范测试(specification test):又称黑盒测试(black-box testing)或需求驱动测试(requirements-driven t
阅读全文
摘要:这篇文章想讲一下JavaScript中同步与异步操作在一个简单的示例中的应用。我们将以制作汉堡为例,展示如何使用同步方法、回调函数(callbacks)和Promise与async/await来实现该过程。 让我们想象一下我们正在制作汉堡: 1. 获取原料(比如beef) 2. 烹饪牛肉 3. 获得
阅读全文
摘要:In modern cryptography exist the concept of symmetric and asymmetric cryptography. Symmetric cryptography means that you use the same key for encrypti
阅读全文