ThreadLocal原理分析和拓展

ThreadLocal原理分析和拓展

多线程访问同一个共享变量由于线程的执行顺序和变量的可见性原因会导致并发问题,我们一般会有两种解决思路:

  • 一是对访问的变量进行加锁处理
  • 二是每个线程都访问本线程的变量

本次我们重点分析Java中通过ThreadLocal实现的本地变量

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

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

为什么需要高速缓存

早期 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
DDD领域驱动设计|基础篇

DDD领域驱动设计|基础篇

前言

DDD 全称为 Domain-Driven Design,中文叫领域驱动设计,是一套应对复杂软件系统分析和设计的面向对象建模方法论。

基本概念

DDD 的核心知识体系概念特别多,具体包括:领域、子域、核心域、通用域、支撑域、限界上下文、实体、值对象、聚合和聚合根等概念。

软件架构模式的演进