自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (6)
  • 收藏
  • 关注

原创 深入理解Java volatile关键字

以下内容均摘自 《Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A: System Programming Guide, Part 1》2.8.5 Controlling the Processor…The LOCK prefix invokes a locked (atomic) read-modify-write operation when modifying a memory operand. T

2020-07-25 14:26:02 1761 2

原创 vscode+docker搭建linux c开发环境

步骤如下:第1步、构建自定义的docker镜像。Dockerfile如下:FROM ubuntu:18.04# 替换为阿里云镜像,如不需要可以去掉本部分RUN printf '\n\deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse \n\deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted uni

2022-05-15 14:49:00 1459

原创 draw.io使用技巧

本文的使用技巧总结自 draw.io 官方的 YouTube频道 以及 交互式教程。一、常用快捷键以下为mac系统的快捷键,windows系统需要将option替换为altresize时:按住ctrl 或 ctrl + shift 可以保持图形中心不变option + shift + 箭头:在当前图形的上/下/左/右快速创建图形复制形状:按住cmd鼠标拖动形状替换形状:选中形状 —> 按住shift —> 左侧点选目标形状二、高级特性1、插入 —> 布局只需点

2022-05-11 21:10:47 10326

原创 docker-compose搭建kafka集群

version: '2'services: zoo1: image: bitnami/zookeeper:3.7 container_name: zoo1 restart: always hostname: zoo1 ports: - "2181:2181" volumes: - ./zoo1/data:/bitnami/zookeeper - ./zoo1/log:/opt/bitnami/zookeeper/lo

2022-03-10 20:19:48 3326

原创 Mac Docker Failed to ping backend API 错误解决

解决步骤如下:Command + 空格,搜“活动监视器”打开,在活动监视器中搜索docker相关进程强制关闭cd ~/Library/Group\ Containers/group.com.dockerrm -rf settings.json重新打开docker,根据相关提示进行操作即可成功运行参考:Docker - Failed to ping backend...

2021-08-22 13:43:39 1049 1

原创 分布式系统中的一致性模型

下面的图展示了各种一致性之间的关系:分布式数据存储分布式数据存储 Distributed Data-Store [1]数据存储 (data store) 是对可以存储数据的服务的抽象。这里的数据存储可以是:共享内存 (shared-memory)、数据库、文件系统、对象和Web服务器等等。数据存储存储的是一个个的数据项 (data items)。对于不同的数据存储,数据项可以有不同的含义,例如内存的一个页面、数据库的一条记录、文件系统的一个文件、对象的一个变量和一个网页等等。客户端 (cli

2021-07-02 21:32:47 1575

原创 Spring @PropertySource用法和源码分析

用法https://mkyong.com/spring/spring-propertysources-example/[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nh5bKk0V-1620551204402)(C:\Users\Lv Hao\AppData\Roaming\Typora\typora-user-images\image-20210509144724369.png)]核心类Properties[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下

2021-05-09 17:06:55 580

原创 Class和ClassLoader的getResource方法详解与源码分析

classpathJava中有两个classpath,一个是bootrap classpath,另一个是classpath。classpath有如下两种形式 [4]:JAR files(JAR文件的全路径),andPaths to the top of package hierarchies.(顶级目录路径)bootrap classpathboot class path对应于启动类加载器,根据类加载的双亲委派模型,Java程序运行时首先会由启动类加载器加载boot class path下的

2021-03-09 23:02:47 3537

原创 InnoDB的行格式

MySQL中,由存储引擎负责数据的存储和读取,数据在不同存储引擎中的存储格式一般是不同的。下面将主要讲述InnoDB中数据的存储结构。InnoDB的页InnoDB按页组织数据,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为16KB。InnoDB的行格式行格式,也叫记录格式。InnoDB中支持4种行格式:CompactRedundantDynamicCompressed可以通过如下命令指定或修改行格式:create table 表名 (列信息) row_format

2020-09-10 22:57:58 479

原创 MySQL explain命令总结

explain有什么用(执行计划)https://dev.mysql.com/doc/refman/8.0/en/explain-output.htmlexplain命令支持SELECT, DELETE, INSERT, REPLACE, UPDATE语句,它可以输出SQL语句的执行计划,通过执行计划我们可以了解MySQL是如何执行给定的SQL语句的。具体来说,explain的输出包含如下信息:对于SELECT语句中使用到的每张表,输出一行对应的信息表信息的顺序就是MySQL处理该语句时读取

2020-09-05 14:15:09 278

原创 ReentrantReadWriteLock源码分析

一、ReentrantReadWriteLock官方文档https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.htmlpublic class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable1. 锁的获取顺序对于获取获取锁的顺序,该类并没有特殊的偏向读者或写者

2020-08-21 13:53:59 205

原创 AQS框架-谈谈对AQS框架的理解

AQS是一个框架,基于它我们可以实现锁和同步器,J.U.C.包中和很多锁和同步器都是基于AQS实现的。使用AQS的方式通常不是让锁或同步器直接继承AQS类,而是将AQS的子类作为锁或同步器类的一个辅助内部类,锁或同步器的方法调用AQS子类对象的方法完成同步操作。(图片来自网络)state字段AQS中最重要的一个字段就是同步状态字段state,锁和同步器的实现都是围绕着这个字段的修改展开的,AQS中也暴露出了一些方法供我们重写以操作这个字段,例如tryAcquire, tryRelease, try

2020-08-19 20:30:11 3049

原创 Thread.sleep, Object.wait 和 LockSupport.park 的区别

Thread.sleep, Object.wait 和 LockSupport.park 的对比

2020-08-15 14:53:36 268

原创 Spring之循环依赖

所谓循环依赖,顾名思义,就是类 A 依赖类 B,类B同时也依赖类A。Spring解决了基于setter注入和基于field注入的单例bean的循环依赖问题,没有解决基于构造器的注入以及原型作用域的bean的循环依赖问题。一、三级缓存三级缓存对循环依赖的解决至关重要,Spring中的三级缓存在DefaultSingletonBeanRegistry中定义:/** Cache of singleton objects: bean name to bean instance. * 一级缓存: 存放完整的b

2020-08-10 19:25:18 276

原创 Java final关键字在JMM中的含义

参考:[1] JSR 133 (Java Memory Model) FAQ[2] The JSR-133 Cookbook for Compiler Writers一、properly constructed / this对象逸出在开始讲之前final之前,先了解一个概念,叫做 “properly constructed”。其含义是:在构造器创建对象的过程中,正在被创建的对象的引用没有发生 “逸出(escape)” 。public Test { private final int

2020-07-29 21:02:23 659 2

原创 内存一致性模型笔记 (Memory Consistency Model)

参考文档:[1] Multiprocessors should support simple memory consistency models[2] Shared MemoryConsistency Models:A Tutorial一、什么是内存模型?内存模型 (memory model),也叫内存一致性模型 (memory consistency model),它可以简单的理解为一系列对内存读写操作的规定,包括针对内存读写操作的重排序规则、可见性规则(一次读操作能否看到最近一次写入的结果?

2020-07-27 21:28:29 3770 2

原创 UNIX环境高级编程笔记

输入输出I/O… (更新中)

2020-07-22 13:06:42 833

原创 UNIX环境高级编程之一:IO

fopen FILE *fopen(const char *pathname, const char *mode);第二个参数mode:在遵守POSIX规范的系统中,b模式修饰符会被忽略。如果要考虑兼容C89或者程序移植性,可以加上b只看开头的模式,传入rw相当于r,传入r+w相当于r+r和r+模式要求文件必须已经存在void *指针可以赋值给任意类型的指针类型,无须显示进行类型转换。Q:fopen返回的文件指针指向的内容位于内存中的哪个区域?fopen返回一个FILE指针,FIL..

2020-07-22 12:08:33 818

原创 JNI之一:什么是JNI (Java Native Interface)

JNI,即Java本地接口 (Java Native Interface),它是连接Java代码和本地代码之间的桥梁,其中,本地代码可以是C,C++,Fortran等语言编写的。JNI允许我们在Java代码中调用本地代码,也允许本地代码调用Java代码。我们都知道,在Java中存在本地方法(native method),这种方法用native关键字进行修饰。本地方法底层是用C/C++语言实现的。调用本地方法和调用普通的Java方法的语法一样。Java代码会被编译成平台无关的字节码,而用C/C++编写的.

2020-07-11 19:41:51 1114

原创 x86_64汇编之六:系统调用(system call)

本文将主要讲述如何在汇编语言代码中调用Linux的系统调用。一、32位系统的系统调用在32位x86 Linux系统中,可用的系统调用定义在/usr/include/asm/unistd_32.h头文件中。每个系统调用都对应一个编号 以及 若干个参数。如果想使用汇编语言调用系统调用,那么在调用之前,需要将系统调用编号存到%eax,将参数依次存到%ebx, %ecx, %edx, %esi, %edi, %ebp中,然后再执行int $0x80指令即可。每个系统调用的编号和参数列表可以参考:https:

2020-07-10 15:39:40 6442

原创 x86_64汇编之一:AT&T汇编语法

汇编语法主要有两大派系:AT&T语法 和 Intel语法。GAS (GNU Assembler) 编译器默认是基于AT&T语法;MASM、NASM等编译器默认基于Intel语法。需要说明的是,GAS汇编器除了支持AT&T语法之外,自己也定义了一些额外的directives,用于辅助完成汇编操作。关于GAS汇编器及其语法可以参考GAS的官方文档:https://sourceware.org/binutils/docs/as/由于AT&T语法在Linux平台上使用比较广泛,

2020-07-10 09:33:17 8481 1

原创 x86_64汇编之五:System V AMD64调用约定下的函数调用

之前提到了,System V AMD64调用约定是x86_64 Linux系统上使用最广泛的调用约定,gcc/g++等编译器都默认使用该调用约定。凡是遵循System V AMD64调用约定的汇编代码,都有一定的固定模式,比如函数开头做哪些处理,函数末尾做哪些处理等等。遵循该约定的函数一般是如下的模式。Caller的操作在调用callee之前,通常有以下操作:步骤1:设置参数到寄存器/栈中 mov xxx, %rdi # 第一个参数 mov xxx, %rsi # 第二个参数 mov xxx,

2020-07-09 19:33:21 2293

原创 x86_64汇编之四:函数调用、调用约定

一、栈栈一般从高地址往低地址生长,每个函数都在栈空间中对应一个栈帧。关于栈帧有两个重要的指针——栈基址指针BP和栈顶指针SP。其中,除了在函数的开头和结尾(后面会讲到),BP指针一般是固定不变的,通常以它为基准来寻址参数和局部变量,例如将第一个参数放入栈中的汇编代码可以是movq %rdi, -8(%rbp)。和栈相关的两个指令是push和pop。在x86_64架构的计算机上,push operand指令的作用是:将栈顶指针rsp减去8(即8字节)然后将目标操作数放入更新后的rsp所指向的地址

2020-07-09 18:26:09 10779

原创 x86_64汇编之二:x86_64的基本架构(寄存器、寻址模式、指令集概览)

一、x86_64中的寄存器x86_64架构中的寄存器可分为以下几类:通用寄存器 (General-Purpose registers)状态和控制寄存器(RFLAGS register)指令寄存器 (RIP)XMM、YMM、ZMM寄存器浮点控制和状态寄存器 (MXCSR)如下图所示:通用寄存器通用寄存器主要用于完成一些通用的功能,包括算数运算、逻辑运算、比较运算、数据转移、地址计算,还可以临时存放常量、中间结果、指针等内容。x86_64中的通用寄存器如下:x86_64中的一个通用

2020-07-08 13:28:16 11795 1

原创 x86_64汇编之三:x86_64汇编和x86_32汇编的区别

顾名思义,x86_64汇编是64位机器上使用的汇编,而x86_32汇编是32位机器上使用的汇编。1. 地址、操作数、寄存器使用上的区别x86_32汇编中的大部分指令在x86_64中都有对应,功能相同,只不过x86_64上的对应指令可能支持操作64位的地址、操作数和寄存器。需要注意的是,x86_64中操作的地址不一定非得是64位,也可以是32位的。例如,x86_64支持下面的指令:mov r10, [eax]其中,eax的内容就是地址,这个32位的地址前面会被补上32位的0,也就是说,eax 只能

2020-07-08 10:59:40 3203

原创 C语言目标文件概述 (Object File)

C程序的编译过程结束后,会为每个c文件生成一个对应的目标文件。目标文件由一系列的section组成,最常见的section包括:.text:存放代码.data:存放初始化过的数据.bss:存放未初始化的数据其他一些更特殊的section,例如存放调试信息的section等等在链接过程,会将各个目标文件的.text都拼在一起,.data都拼在一起,.bss都拼在一起… 最终生成一个可执行文件,该可执行文件也包含.text, .data, .bss等section。目标文件中每个sect

2020-07-07 16:07:41 2711

原创 Makefile教程 (一) —— 如何编写一个简单的Makefile

在详细介绍Makefile之前,我们先来看一下一个Makefile文件长啥样,对它有一个直观的认识。下面是一个Makefile的例子,摘自 https://makefiletutorial.com/:blah: blah.o gcc blah.o -o blahblah.o: blah.c gcc -c blah.c -o blah.oblah.c: echo "int main() { return 0; }" > blah.cclean: rm -f blah.o blah.

2020-07-06 22:37:40 1177

原创 SC-DRF

本文参考了Sarita V. Adve和Mark D. Hill的Weak Ordering - A New Definition And Some Implications一、顺序一致性(Sequential Consistency, SC)顺序一致性最早是由Lamport定义的,其定义如下:“… the result of any execution is the same as ...

2020-02-07 23:26:05 736

原创 偏序关系和全序关系

一、关系 (relation)https://www.youtube.com/watch?v=FI6j5QZNVx0&list=PLDDGPdw7e6Ag1EIznZ-m-qXu4XX3A0cIz&index=48https://web.stanford.edu/class/archive/cs/cs103/cs103.1132/lectures/06/Slides06.pd...

2020-02-06 18:29:01 7684 1

原创 SOLID设计原则之里氏替换原则

1. 引入SOLID设计原则的之中的开闭原则(Open/Closed Principle, OCP)主要是基于抽象和多态实现的。而实现抽象和多态的关键机制之一就是继承。如何设计继承体系才能使得抽象和多态正常的发挥作用,并且不违背开闭原则呢? 这是里氏替换原则(Liskov Substitution Principle, LSP)要解决的问题。2. 定义里氏替换原则的定义如下:Funct...

2019-05-02 16:44:50 416

Spring 5.2.4版本官方文档英文pdf(Spring Core + Spring MVC + ...)

Spring 5.2.4版本官方文档英文,带书签。包含全套Spring技术文档:Spring Core + Spring Testing + Spring MVC + Spring Data Access + Spring Integration + Spring Languages

2020-03-09

python机器学习 中文版 Sebastian Raschka

python机器学习 中文版 Sebastian Raschka python机器学习 中文版 Sebastian Raschka

2018-02-04

信息安全技术基础和安全策略(薛质)

信息安全专业参考书,考研参考书.

2015-07-11

Dafydd Stuttard

目录 第1章 Web应用程序安全与风险 1.1Web应用程序的发展历程 1.1.1Web应用程序的常见功能 1.1.2Web应用程序的优点 1.2Web应用程序安全 1.2.1“本站点是安全的” 1.2.2核心安全问题:用户可提交任意输入 1.2.3关键问题因素 1.2.4新的安全边界 1.2.5Web应用程序安全的未来 1.3小结 第2章 核心防御机制 2.1处理用户访问 2.1.1身份验证 2.1.2会话管理 2.1.3访问控制 2.2处理用户输入 2.2.1输入的多样性 2.2.2输入处理方法 2.2.3边界确认 2.2.4多步确认与规范化 2.3处理攻击者 2.3.1处理错误 2.3.2维护审计日志 2.3.3向管理员发出警报 2.3.4应对攻击 2.4管理应用程序 2.5小结 2.6问题 第3章 Web应用程序技术 3.1HTTP 3.1.1HTTP请求 3.1.2HTTP响应 3.1.3HTTP方法 3.1.4URL 3.1.5REST 3.1.6HTTP消息头 3.1.7cookie 3.1.8状态码 3.1.9HTTPS 3.1.10HTTP代理 3.1.11HTTP身份验证 3.2Web功能 3.2.1服务器端功能 3.2.2客户端功能 3.2.3状态与会话 3.3编码方案 3.3.1URL编码 3.3.2Unicode编码 3.3.3HTML编码 3.3.4Basc64编码 3.3.5十六进制编码 3.3.6远程和序列化框架 3.4下一步 3.5问题 第4章 解析应用程序 4.1枚举内容与功能 4.1.1Web抓取 …… 第5章 避开客户端控件 第6章 攻击验证机制 第7章 攻击会话管理 第8章 攻击访问控制 第9章 攻击数据存储区 第10章 测试后端组件 第11章 攻击应用程序逻辑 第12章 攻击其他用户 第13章 攻击用户:其他技巧 第14章 定制攻击自动化 第15章 利用信息泄露 第16章 攻击本地编译型应用程序 第17章 攻击应用程序架构 第18章 攻击Web服务器 第19章 查找源代码中的漏洞 第20章 Web应用程序黑客工具包 第21章 Web应用程序渗透测试方法论

2015-07-11

空空如也

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

TA关注的人

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