自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 资源 (1)
  • 收藏
  • 关注

原创 【并发】CAS原子操作

CAS是Compare And Swap的缩写,直译就是比较并交换。CAS是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令,这个指令会对内存中的共享数据做原子的读写操作。其作用是让CPU比较内存中某个值是否和预期的值相同,如果相同则将这个值更新为新值,不相同则不做更新。本质上来讲CAS是一种无锁的解决方案,也是一种基于乐观锁的操作,可以保证在多线程并发中保障共享资源的原子性操作,相对于信号量或锁来说,是一种轻量级的实现方案。

2024-02-24 23:34:56 418

原创 容器镜像详解

打开content/sha256目录下以镜像ID命名的文件,我们可以看到镜像的元数据信息(config文件内容),包括了镜像架构、操作系统 、默认配置、创建时间、历史信息和rootfs等。因此虽说这两种 ID 都表示 镜像层 hash ID,但一个是压缩的,一个是解压缩的,所以 hash 运算后不一致。tree /var/lib/docker/image/overlay2/imagedb可以查看此目录的结构。以docker镜像为例,下载的镜像文件保存在/var/lib/docker/目录下面。

2024-02-24 23:27:46 858

原创 限流算法

下面对常见的限流算法进行讨论。目前,常用的限流算法主要有三种:计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。

2024-02-24 23:15:16 1580

原创 TSL四次握手

RSA 和 ECDHE 握手过程的区别:● RSA 密钥协商算法「不支持」前向保密,ECDHE 密钥协商算法「支持」前向保密;● 使用了 RSA 密钥协商算法,TLS 完成四次握手后,才能进行应用数据传输,而对于 ECDHE 算法,客户端可以不用等服务端的最后一次 TLS 握手,就可以提前发出加密的 HTTP 数据,节省了一个消息的往返时间;● 使用 ECDHE, 在 TLS 第 2 次握手中,会出现服务器端发出的「Server Key Exchange」消息,而 RSA 握手过程没有该消息;

2024-02-23 23:46:15 1138

原创 Linux 进程虚拟地址空间与虚拟内存

无论是何种体系结构,虚拟地址空间的分布方式都有以下几个成分当前运行的二进制代码程序使用的动态链接库的代码存储全局变量和动态产生的数据的堆用于保存局部变量和实现函数/过程调用的栈环境变量和命令行参数的栈将文件内容映射到虚拟地址空间中的内存映射系统中的各个进程都具有一个struct mm_struct的实例,可以通过task_struct访问,这个实例保存了进程的内存管理信息/* mmap 区域的基地址 */ unsigned long task_size;

2023-07-03 11:32:18 845

原创 QEMU-KVM CPU虚拟化

KVM自内核2.6.20起被合入Linux,作为Linux的一个内核模块,在Linux启动时被动态加载。KVM利用了硬件辅助虚拟化的特性,能够高效的实现CPU和内存的虚拟化。实际上,KVM无法单独使用,因为它既不提供I/O设备的模拟,也不支持对整体虚拟机的状态状态进行管理。它向用户态程序(如QEMU)暴露特殊的设备文件/dev/kvm作为借口,允许用户态程序利用它来实现最为关键的CPU和内存虚拟化,但还缺少I/O虚拟化需要的设备模型(Device Module),而QEMU正好可以弥补这块功能。

2023-02-10 15:16:12 1811 1

原创 Intel Trust Domain Extensions(TDX)介绍

通过Intel TDX提供的功能,可以构造出区别于传统VM的TD(Trusted Domain)TD运行在SEAM的non-root模式下,TDX module运行在SEAM的root模式下,通过调用SEAM call可以让CPU进入SEAM root模式,并且加载TDX module。

2022-11-11 21:14:54 2386

原创 【云原生】机密容器介绍

数据在整个生命周期有三种状态:At-Rest(静态)、In-Transit(传输中)和 In-Use(使用中)。在这个世界上,我们不断地存储、使用和共享各种敏感数据:从信用卡数据到病历,从防火墙配置到地理位置数据。保护处于所有状态中的敏感数据比以往任何时候都更为重要。如今被广泛使用的加密技术可以用来提供数据机密性(防止未经授权的访问)和数据完整性(防止或检测未经授权的修改),但目前这些技术主要被用于保护传输中和静止状态的数据,目前对数据的第三个状态“使用中”提供安全防护的技术仍旧属于新的前沿领域。。

2022-11-11 12:14:54 1500 1

原创 cgroups的实现

每个内核的子系统如果想要挂载到cgroup系统中,必须要先拥有一个对象,通过这个对象将对子系统资源的操作函数以接口的形式进行约定,各个子系统再根据自己的需求去实现这些接口,除了这些函数指针,结构体还包括id,name,early_init等属性,分别表示该子系统在数组中的索引,子系统名称,在系统启动时是否需要尽早初始化等。除了这些,还有一个指向cgroup_root类型的root指针,cgroup_root表示一个cgroup hierarchy的根,

2022-11-07 17:16:07 572

转载 【云原生】安全容器 Kata Containers

出于对传统容器安全性的担忧,Intel 在 2015 年启动了它们以虚拟机为基础的容器技术:Clear Container。Clear Container 依赖 Intel VT 的硬件虚拟化技术以及高度定制的 QEMU-KVM(qemu-lite)来提供高性能的基于虚拟机的容器。在 2017 年,Clear container 项目加入了 Hyper RunV,这是一个基于 hypervisor 的 OCI 运行时,从而启动了 Kata 容器项目。

2022-10-24 21:14:00 2195

原创 【云原生】容器技术发展

云原生技术有利于各组织在等新型动态环境中,构建和运行的应用。云原生的代表技术包括。”聊容器技术避不开云原生,聊云原生也避不开容器技术。容器技术和云原生就是一对双螺旋体,。从2013年docker(container)技术诞生,到2015年CNCF这个云原生领域重量级联盟便成立,这不是历史的巧合而是历史的必然。作为云原生关键技术之一的容器,从2013年诞生以来一直是行业关注的焦点之一。

2022-10-19 16:02:13 755

原创 【容器底层技术】cgroup v2使用与测试

如果输出只有cgroup,说明内核还未挂载cgroup v2或者内核不支持cgroup v2出现了cgroup v2说明内核是支持的,可以继续接下来的操作对于使用 systemd 引导的系统,可以在引导文件的中添加如下一行,启用 v2 版本可以使用防止cgroup v1抢占所有controller,体验纯cgroup v2环境最后再进行重启,就可以使用cgroup v2了。

2022-10-06 15:17:36 4772

原创 Linux内核源码中最常见的数据结构之【mutex】

互斥锁(英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全域变量)进行读写的机制。该目的通过将代码切片成一个一个的**临界区域(critical section)**达成。临界区域指的是一块对公共资源进行存取的代码,并非一种机制或是算法。...

2022-07-09 11:05:20 1217

原创 【容器底层技术】 namespaces详解

namespaces是 Linux 内核的一项功能,它对内核资源进行隔离,让一组进程只能看到与自己相关的一部分资源,而另一组进程看到另一组资源, 使得处于不同 namespaces 的进程拥有独立的全局系统资源,改变一个 namespaces 中的系统资源只会影响当前 namespaces 里的进程,对其他 namespaces 中的进程没有影响。该功能通过为一组资源和进程使用相同的namespace来工作,不同的namespace会引用不同的资源, 有些资源可能存在于多个空间中,比如进程 ID、主机名、用

2022-07-08 14:19:00 1219

原创 Linux内核源码中最常见的数据结构之【Spinlock】

在软件工程中,自旋锁是一种锁,它使试图获取它的线程在循环中原地等待(“自旋”),同时反复检查锁是否可用。由于线程保持活动状态但没有执行有用的任务,因此使用这种锁是一种忙等待。一旦获得,自旋锁通常会一直保持直到它们被显式释放,尽管在某些实现中,如果正在等待的线程(持有锁的线程)阻塞或“进入睡眠状态”,它们可能会自动释放。因为它们避免了操作系统进程重新调度或上下文切换的开销,所以如果线程可能只在短时间内被阻塞,自旋锁是有效的。出于这个原因,操作系统内核经常使用自旋锁。如果长时间持有自旋锁,则会变得浪费,因为它们

2022-07-05 16:25:51 923

原创 Linux内核源码中最常见的数据结构之【hlist_head】

在上一篇中,我们详细介绍了list_head,这篇文我们介绍hlist_head、hlist_node

2022-06-30 17:17:40 689

原创 Linux内核源码中最常见的数据结构之【list_head】

可以说是Linux内核使用的最多的数据结构之一了,它让开发人员能以双向链表的形式快速将当前结构链接起来,同时对链表进行基本操作。其定义如下:使用方法就是将以成员变量的形式添加到其他数据结构中。假设现有一群学生在排队获取同学S其前面一位同学的方式为,是不是很简单?但是你可能会问,获取的是前一位同学的成员变量,那还是不能访问前一位同学自身结构啊?问得好,我们接着介绍…宏定义,获取类型结构体中成员的偏移量,PS:指针的地址为也是Linux内核中常用的宏定义之一,其作用就是通过某个结构体的成员变量获取该结构体

2022-06-12 21:32:55 520 1

原创 硬核解析Linux文件系统底层【VFS文件系统】

Linux一直强调一切皆文件,除了普通的文件和目录,块设备、管道、socket等都被Linux视为文件。所以理解了文件系统,对于深入理解Linux非常重要,接下来就让我们从设计和源码双角度了解Linux文件系统。Linux内核通过虚拟文件系统(Virtual File System,VFS)管理文件系统。VFS是Linux内核文件系统的一个极其重要的基础设施,VFS为所有的文件系统提供了统一的接口,对每个具体文件系统的访问要通过VFS定义的接口来实现,所有Linux的文件系统也必须按照VFS定义的方式来实现

2022-06-06 17:24:22 1624

原创 Python:爬取软科排名的历年所有数据

import tracebackfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common import exceptionsimport timeimport xlsxwriterimport osclass ShangHaiRanking: __SHANGHAIRANKING_ROOT = './shranking' indicator_list

2022-04-19 17:07:53 1464 1

原创 Linux虚拟内存与线性地址翻译

1. 虚拟内存对于操作系统的使用者而言,内存就像是一个一排排按照从0到n被编好数字的收纳柜,每个柜子可以存放8个bit,也就是一个字节,我们将需要存放的信息切成若干个字节,放到连续的柜子中。以后我们只需要知道所使用的第一个柜子的编号,以及所用的柜子的数目,就可以完整的取出我们所保存的数据。知道地址就可以找到我们要的数据,然后从内存读到处理器就可以进行操作了,整个流程如下所示但问题真的这么简单吗?当然不可能,假设以下情况情景1:假如我调用一个软件为进程A,在内存0x11111111处开始存了若干

2022-01-24 23:15:03 629

原创 [二分查找] 二:二分查找的经典例题

1.何时应该会使用二分查找当题目中出现有序数组时当时间复杂度要求为log(n)时搜索范围可以一次缩小一半时2. 经典例题1给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:

2022-01-22 16:13:10 2801

原创 证明n阶方阵A可相似对角化的充要条件是A有n个线性无关的特征向量

证明n阶方阵A可相似对角化的充要条件是A有n个线性无关的特征向量证明:必要性:已知A可以相似对角化,则存在可逆矩阵PP−1AP=(λ1λ2…λn)AP=P(λ1λ2…λn)对P的每列进行分块,有P=[x1∣x2∣…∣xn],于是有A[x1∣x2∣…∣xn]=[x1∣x2∣…∣xn](λ1λ2…λn)[Ax1∣Ax2∣…∣Axn]=[λ1x1∣λ2x2∣…∣λnxn]有Axi=λixi因为P可逆,所以xi线性无关,可知A有n个线性无关特征向量充分性:已知A有n个线性无关的特征向量,Axi=λixi,xi线性无

2021-11-23 22:54:06 5485 2

原创 [二分查找] 一:子区间界限应当如何确定

普通的二分查找先引入一个最简单的二分查找吧int binarySearch(int* nums, int numsSize, int target){ int left = 0, right = numsSize-1; while(left <= right){ int mid = left + (right - left)/2; if(nums[mid] == target){ return mid; } else if(nums[mid] > target){

2021-03-12 13:31:26 963

原创 C/C++/Java 的基本数据类型

变换类型CC++Javachar c --> int ii = c - ‘0’i = c - ‘0’i = c - ‘0’int i --> char cc = i + ‘0’c = i + ‘0’c = i + ‘0’char *s(String s) --> int ii = atoi(s)i = stoi(s)i = Integer.parseInt(s)char *s(String s) --> float ff ...

2021-01-27 19:05:41 260

原创 参数估计与假设检验—拒绝域的数学证明(手写)

2020-11-20 21:17:48 4975 1

原创 Spring中Controller层、Filter层、Interceptor层全局统一异常处理

Controller层、Filter层、Interceptor层全局统一异常处理SpringBoot为异常处理提供了很多优秀的方法,但是像我这种新手在处理异常时还是会觉得一头包,终于我痛定思痛,总结了一下统一异常处理的办法,让异常处理变得上流。本片文章较长,我先定义以下后面会用到的类/** * @author ht113 * * 错误dto,就是从后端返回到前端的错误信息,下面这个作为例子比较简单 */@Datapublic class ErrorInfo { String d

2020-07-03 18:30:02 3916 4

原创 Servlet架构初解析

通过源码解析Servlet架构1.Servlet和ServletConfigpublic interface Servlet { //生命周期方法 //init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用 void init(ServletConfig var1) throws ServletException; //getServletConfig() 方法返回一个 ServletConfig 对象,该对象用来返回初

2020-07-02 16:36:56 329

原创 Winpcap进行抓包,分析数据包结构并统计IP流量

计算机网络实验,直接把电饭锅塞嘴里一.实验目的随着计算机网络技术的飞速发展,网络为社会经济做出越来越多的贡献,可以说计算机网络的发展已经成为现代社会进步的一个重要标志。但同时,计算机犯罪、黑客攻击、病毒入侵等恶性事件也频频发生。网络数据包捕获、监听与分析技术是网络安全维护的一个基本技术同时也是网络入侵的核心手段。通过基于网络数据包的截获和协议分析,对网络上传输的数据包进行捕获,可以获取网络上传输的非法信息,对维护网络安全起到重大作用。本次实验的主要目的有:理解协议在通信中的作用;掌握抓包软件的开

2020-07-01 10:31:09 14173 56

原创 B树、B+树其实很简单,看不懂你找我

文章目录

2020-05-07 15:05:11 1820

原创 JVM自动化的内存分配与内存回收

文章目录一.内存分配二.内存回收一.内存分配二.内存回收

2020-05-01 00:50:06 583

原创 经典常用算法/常用算法思维---附伪代码以及实现

AlgorithmsSorting AlgorithmsBucket SortBUCKET_SORT(A)n = A.lengthlet B[0...n-1] be a new arrayfor i = 0 to n-1 make B[i] an empty listfor i = 1 to n insert A[i] to B[A[i]]for i = 0 to n sor...

2020-04-18 18:02:32 3045 3

原创 你必须会的启发式搜索算法--A*算法

文章目录一.算法原理1.评估函数2.待测点与已测点的存储二.算法实现三.实验测试测试一测试二一.算法原理A* 算法,就是解决在一个平面 grid地图中寻找起点到终点的最短路径问题的算法,类似于Dijkstra算法和BFS算法一样,属于广度优先搜索。实际上它还是一个启发式搜索算法,什么叫启发式搜索算法?不同于BFS和DFS在子节点选择上其实是盲目的,启发式搜索就是利用评估函数在平面中对所有的待搜...

2020-04-17 16:01:30 1882

原创 JMM内存模型如何为并发保驾护航

文章目录

2020-04-17 00:30:05 307

原创 从JVM看类的加载过程与对象实例化过程

文章目录一. 类的加载过程1. 类的加载过程大致是个什么过程?2. 类的具体加载过程2.1 加载(Loading)2.2 验证(Verification)2.3 准备(Preparation)2.4 解析(Resolution)2.5 初始化(Initialization)3.类的加载器3.1 启动类加载器(Bootstrap)3.2 扩展类加载器(Extension)3.3 系统类加载器(Sys...

2020-04-10 16:30:22 790 1

原创 红黑树,看不懂你找我

文章目录一:什么是红黑树二:关于红黑树的一般操作1.查找操作2. 插入操作2.1 新节点:我是红色的,我爹是红色的,我叔叔是黑色的2.2 新节点:我是红色的,我爹是红色的,我叔叔也是红色的3.删除操作3.1替代点是红色的3.2替代点是黑色的3.2.1 替代点的兄弟节点是红色3.2.2替代点的兄弟节点是黑色3.2.2.1 当兄弟节点的两个儿子也都是黑色3.2.2.2 当兄弟节点的左儿子是红色的,右儿...

2020-03-26 21:27:20 1529 4

原创 你了解欧拉回路吗?(附Java实现代码)

文章目录一:什么是欧拉回路?二: 无向图中欧拉回路存在的条件三:如何得到起点终点重合的欧拉回路四:Java实现一:什么是欧拉回路?不知道你有没有玩过这样一种叫“一笔画”,从某一点开始画一个图形或图案,期间笔不能从纸上离开而且每条边只能画一次。下面有三个例子,你可以先试一试看看能不能“一笔画”第一个图其实是根本画不出来的,第二个图可以画出,但是不存在起点和终点为同一点的情况,第三个图可......

2020-03-21 02:04:22 1557

原创 Python写爬虫只需三步

文章目录一:爬虫基本原理一:爬虫基本原理爬虫就是获取网页并提取和保存信息的自动化程序如果把互联网比喻为一张大网,那么每个网页就是这张大网的一个节点,网页与网页之间的链接就相当于节点之间的连线,爬虫每到一个节点就获取他的信息,然后通过连线爬到另一个节点,这样整个网的所有节点的数据就都可以被爬取下来了。爬虫的自动化的操作流程:发送HTTP请求获取网页源码从返回的网页的源码种提取信息把提...

2020-02-18 18:56:53 604

原创 再来一次的C语言贪吃蛇小游戏(三)

8.游戏的不同界面为了便于实现主要功能,之前我们所有的状态控制都是放在游戏中,但实际上我们应该把这些状态控制抽离出来,通过菜单来控制,以便在不同游戏界面间切换。菜单界面游戏界面排行榜游戏结束界面其他一些扩展界面enum state { in_menu, //菜单界面 gaming, //游戏界面 rank,//排行榜界面 snake_dead,//游戏结束界面 to_q...

2020-01-15 01:00:56 749

原创 再来一次的C语言贪吃蛇小游戏(二)

5.游戏地图贪吃蛇的游戏地图由一个个方格组成,每一格方格可以表示地面,墙,食物,蛇的身体等等,蛇只能在地面上行动,吃到食物则生长一节蛇身,撞到墙就GG。我们可以同样可以使用枚举来表示地图上的不同物体//game.htypedef enum stuff_mark { wall, ground, food, _snake}Stuff_Mark;为了便于表示我们创建一个物品结构体...

2020-01-12 14:57:23 806

原创 再来一次的C语言贪吃蛇小游戏(一)

学习编程也有两三年时间了,中间也玩(学校安排学习)过很多东西 ,从汇编到C到Java和python,用Java和Python也就图一快,真要体会编程乐趣还得看我C语言(开玩笑 )为什么要用C语言写一个贪吃蛇游戏呢,其实这是我大一时候万姐布置的一个课设,当时就是这个课设,逼着我一个星期“学会了”C语言,但是这段回忆是非常充实有趣的,现在我掌握了新的语言,新的编程思想,回过头来重新做一遍这个课设,感...

2020-01-12 01:52:38 4626 2

微信小程序自定义组件----地址选择器中 所需的城市信息,以及部分util.js的代码

微信小程序自定义组件----地址选择器中 所需的城市信息,以及部分util.js的代码

2019-09-26

空空如也

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

TA关注的人

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