深入理解高速缓存工作原理

深入理解高速缓存工作原理

为什么需要高速缓存

早期 CPU 相比现在的 CPU 比较简单,没有 Cache 的计算机系统的简化模型,CPU在执行时需要的指令和数据通过内存总线和系统总线由内存传送到寄存器,再由寄存器送入ALU)。

Read more
Attack Lab

Attack Lab

介绍

主要分为两种不同类型的攻击:

  • Buffer overflow attacks
  • ROP attacks
Read more
Bomb Lab

Bomb Lab

介绍

邪恶博士在我们的班级机器上植入了许多“二进制炸弹”。二进制炸弹是一个由一系列阶段组成的程序。每个阶段都要求你在 stdin 上输入入特定的字符串。如果你输入正确的字符串,则该阶段将被消除,炸弹将进入下一个阶段。否则,炸弹通过打印“ BOOM !!!”而爆炸。然后终止。当每个阶段都已消除时,炸弹便已消除。

Read more
汇编入门

汇编入门

从 C 语言到机器码

先从一个非常简单的程序来看编译过程中发生了那些步骤。

#include <stdio.h>

int main() {
printf("hello world\n");
return 0;
}

我们在 Unix 系统上终端上使用 GCC 进行编译:

> gcc -o hello hello.c
Read more
浮点数在计算机中的表示

浮点数在计算机中的表示

前言

相信大家在编程过程中都有使用过浮点数,但是浮点数总是给我带来预期不一样的结果,下面展示了在 C 语言中的精度问题,发现使用浮点数总是会带来精度缺失。在学习和工作当中总能听到不能使用浮点数来表示金钱,会有精度缺失。

Read more
Data Lab

Data Lab

前言

CSAPP 这本书买了好几年,最近抽出一些时间开始重头读这本书,发现这些基础知识比较重要,边看书边跟着视频课程过了一遍,有些东西还是比较模糊。本文开始做 CSAPP Lab 实验,加强巩固书的内容。

Read more
Spring 的复杂类型注入
深入理解 synchronized 关键字

深入理解 synchronized 关键字

如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字,是用来保证被锁定了代码同一时间只能有一个线程执行,那么synchronized关键字的实现原理是怎样的呢?

Read more
Dubbo SPI源码分析

Dubbo SPI源码分析

对于一个优秀的框架需要很好的扩展性,给出一个接口,自己可以给出默认实现,同时也允许其他人实现拓展。即“对扩展开放,对修改封闭”的原则。Dubbo 采用微内核+插件的方式来实现,微内核架构中,内核通常采用 Factory、IoC、OSGi 等方式管理插件生命周期,Dubbo 最终决定采用 SPI 机制来加载插件,Dubbo SPI 参考 JDK 原生的 SPI 机制,进行了性能优化以及功能增强。

Read more
Understanding Object Oriented Programming

Understanding Object Oriented Programming

这是一篇很早的文章,讲的关于面向对象,原文地址:Understanding Object Oriented Programming。这里有关于这篇文章的评论如此理解面向对象编程,很有有趣。我觉得这篇作为一篇入门讲面向对象的例子还是很不错的,通过不同的例子讲述了不同人的实现想法。最后用策略模式+工厂模式来实现,来达到消除if-else。

Read more