当前位置: 首页 > 编程日记 > 正文

20135306黄韧 信息安全系统设计基础期中学习总结

信息安全系统设计基础第八周学习总结

知识点总结

第1计算机系统漫游

△计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。计算机内部的信息被表示为一组组的位.它们依据上下文有不同的解释方式。程序被其他程序翻译成不同的形式,开始时是ASCII文本.然后被编译器和链接器翻译成二进制可执行文件。
处理器读取并解释存放在主存里的二进制指令,因为计算机可以把大量的时间用于存储器、I/O设备和CPU寄存器之间复制数据,所以将系统中的存储设备划分成层次结构--CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器在层次模型中,位于更高层的存储设备比低层的存储设备要更快,单位比特开销也更高。层次结构中较高层次存储设备可以作为较低层次设备的高速缓存。
操作系统内核是应用程序和硬件之间的媒介。
它提供三个基本的抽象:1)文件是对I/O的抽象;2)虚拟存储器是对主存和磁盘的抽象:3)进程是对处理器、主存抽象和I/O设备的设备最后,网络提供了计算机系统之间通信的手段。从特殊系统的角度来看,网络就是一种I/O设备。

第2信息的表示和处理

△计算机将信息按位编码,通常组织成字节序列。用不同的编码方式表示整数、实数和字符串。不同的计算机模型在编码数字和多字节数据中的字节排序时使用不同的约定。
C语言的设计可以包容多种不同字长和数字编码的实现。虽然高端机器逐渐开始使用64位字长,但是目前大多数机器仍使用32位字长。大多数机器对整数使用补码编码,而对浮点数使用IEEE浮点编码。在位级上理解这些编码,并且理解算术运算的数学特性,对于想使编写的程序能在全部数值范围上正确运算的程序员来说,是很重要的。
在相同长度的无符号和有符号整数之间进行强制类型转换时,大多数C语言实现遵循的原则是底层的位模式不变。在补码机器上,对于一个W位的值,这种行为是由函数T2Uw和U2Tw来描述的。

第3程序的机器级表示

△在本章中,我们窥视了C语言提供的抽象层下面的东西,以了解机器级编程。通过让编译器产生机器级程序的汇编代码表示,我们了解了编译器和它的优化能力,以及机器、数据类型和指令集。在第5章,我们会看到,当编写能有效映射到机器上的程序时,了解编译器的特性会有所帮助。我们还更完整地了解了程序如何将数据存储在不同的存储器区域中。在第12章会看到许多这样的例子,我们需要知道个程序变量是在运行时栈中,是在某个动态分配的数据结构中,是在某个全局存储位置中。理解程序如何映射到机器上,会让理解这些存储之间的区别容易些。
机器级程序和它们的汇编代码表示,与C程序的差别很大。在汇编语言程序中,各种数据类型之间的差别很小。程序是以指令序列来表示的,每条指令都完成一个单独的操作。部分程序状态,如寄存器和运行时栈,对程序员来说是直接可见的。本书仅提供了低级操作来支持数据处理和程序控制。编译器必须用多条指令来产生和操作各种数据结构,来实现像条件、循环和过程这样的控制结构。我们讲述了C语言和如何编译它的许多不同方面。我们看到C语言中缺乏边界检查,使得许多程序容易出现缓冲区溢出。虽然最近的运行时系统提供了安全保护,而且编译器帮助使得程序更安全,但是这已经使许多系统容易受到入侵者的恶意攻击。

第4处理器体系结构

△我们已经看到,指令集体系结构,即ISA,在处理行为和如何实现处理器之间提供了一层抽象。ISA提供了程序执行器行为的一种顺序说明,也就是一条指令执行完了,下一条指令才会开始。从IA32指令开始,大大简化数据类型、地址模式和指令编码,我们定义了Y86指令集。得到的ISA既有RISC指令集的属性,也有CISC指令集的属性。然后,将不同指令组织放到五个阶段中处理,在此,根据被执行指令的不同,每个阶段中的操作也不相同。据此,我们构造了SEQ处理器,其中每个时钟周期执行一条指令,它会通过所有五个阶段。
流水线化通过让不同的阶段并行操作,改进了系统的吞吐量性能。在任意一个给定的时刻:多条指令被不同的阶段处理。在引入这种并行性的过程中,我们必须非常小心,以提供与程序的顺序执行相同的程序级行为。通过重新调整SEQ各个部分的顺序,引入流水线,我们得到SEQ+,接着添加流水线寄存器,创建出PIIE―流水线。然后,添加了转发逻辑,加速了将结果从一条指令发送到另一条指令,从而提高了流水线的性能。有几种特殊情况需要额外的流水线控制逻辑来暂停或取消一些流水线阶段。
在本章中,我们学习了有关处理器设计的几个重要经验:
1.管理复杂性是首要问题,想要优化使用硬件资源,在最小的成本下获得最大的性能。为了实现这个目的,我们创建了一个非常简单而一致的框架,来处理所有不同的指令类型。有了这个框架,就能够在处理不同指令类型的逻辑中共享硬件单元。
2.我们不需要直接实现ISA。它的直接实现意味着一个顺序的设计。为了获得更高的性能我们想运用硬件能力以同时执行许多操作,这就导致要使用流水线化设计。通过仔细设计和分析,我们能够处理各种流水线冒险,因此运行一个程序的整体效果,同用ISA模型获得的效果完全一致。
3.硬件设计人员必须非常谨慎小心。一旦芯片制造出来,就几乎不可能改正任何错误了。开始就使设计正确是非常重要的。这就意味着要仔细地分析各种指令类型和组合,甚至那些看上去没有意义的情况,例如弹出值到栈指针。必须用系统的模拟测试程序彻底地测试设计。在开发PIPE的控制逻辑中,我们的设计有个细微的错误,只有通过对控制组合的仔细而系统的分析才能发现。

第6存储器层次结构

△基本存储技术包括随机存储器(RAM)、非易失性存储器(即OM)和磁盘。RAM有两种基本类型。静态RAM(SRAM)快一些,但是也贵一些,它既可以用做CPU芯片上的高速缓存,也可以用做芯片下的高速缓存。动态RAM(DRAM)慢一些,也便宜一些,用做主存和图形帧缓冲区。非易失性存储器,也称为只读存储器(ROM)即使是在关电的时候,也能保持它们的信息,它们用来存储固件。旋转磁盘是机械的非易失性存储设备,以每个位很低的成本保有大量的数据,但是访问时间比DRAM更长。固态硬盘(SSD基于非易失性的闪存,越来越变成旋转磁盘对某些应用的具有吸引力的替代产品。
一般而言,较快的存储技术每个位的价格会更高,而且容量较小。这些技术的价格和性能属性正在以显著不同的速度变化着。特别地,DRAM和磁盘访问时间远远大于CPU周期时间。系统通过将存储器组织成存储设备的层次结构来弥补这些差异,在这个层次结构中,较小、较快的设备在顶部,较大、较慢的设备在底部。因为编写良好的程序有好的局部性,大多数数据都可以从较高层得到服务,结果就是存储系统能以较高层的速度运行,但却有较低层的成本和容量。
程序员可以通过编写有良好空间和时间局部性的程序来显著地改进程序的运行时间。利用基于SRAM的高速缓存存储器特别重要。

实验操作

(一)Linux命令

1. man -k

  • man -k k1|grep k2|grep 2

2. cheat

  • 使用du命令对当前目录下的目录或文件按大小排序 的命令是du -sk *| sort -rn
  • To list the content of /path/to/foo.tgz archive using tar ( tar      -jtvf /path/to/foo.tgz )

3. grep

  • 使用grep查找当前目录下*.c中main函数在那个文件中的命令是grep      main *.c
  • grep -nr xxx/usr/include 查找宏
  • ~/test 文件夹下有很多c源文件,查找main函数在哪个文件中可用命令grep      main *.c

4. find

  • 查找当前目录下2天前被更改过的文件find . -mtime +2 -type f -print
  • 查找当前目录下所有目录的find命令是find . -type      d

(二)vi、gcc、gdb、make的使用

1. gcc库选项

  • static 进行静态编译,即链接静态库,禁止使用动态库
  • shared 1.可以生成动态库文件 2.进行动态编译,尽可能地链接动态库,只有当没有动态库时才会链接同名的静态库(默认选项,即可省略)
  • L dir 在库文件的搜索路径列表中添加dir      目录
  • lname 链接称为libname.a(静态库)或者libname.so(动态库)的库文件。若两个库都存在,则根据编译方式(-static 还是-shared)而进行链接
  • $ gcc –g gdb.c -o testgdb 使用gdb调试$ gdb testgdb 启动gdb键入 l命令相当于list命令,从第一行开始列出源码

2. gdb调试器

  • 查看文件: 在gdb 中键入“l”(list)就可以查看所载入的文件
  • 设置断点: 设置断点是调试程序中一个非常重要的手段,它可以使程序运行到一定位置时暂停。因此,程序员在该位置处可以方便地查看变量的值、堆栈情况等,从而找出代码的症结所在。在gdb 中设置断点非常简单,只需在“b”后加入对应的行号即可
  • 查看断点情况: 在设置完断点之后,用户可以键入“info      b”来查看设置断点情况
  • 运行代码: gdb 默认从首行开始运行代码,键入“r”(run)即可(若想从程序中指定行开始运行,可在r 后面加上行号)
  • 查看变量值: 在程序停止运行之后,程序员所要做的工作是查看断点处的相关变量值。在gdb 中键入“p”+变量值即可
  • 单步运行: 单步运行可以使用命令“n”(next)或“s”(step),它们之间的区别在于:若有函数调用的时候,“s”会进入该.数而“n”不会进入该函数。
  • (gdb) break 16 设置断点,在源程序第16行处。
  • (gdb) break func 设置断点,在函数func()入口处。
  • (gdb) info break 查看断点信息。

3. make

  • makefile的好处:自动化编译。make是一个命令工具,是一个及时makefile中命令的工具程序。make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。
  • Makefile的一般写法

test(目标文件): prog.o code.o(依赖文件列表)tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)

4. vi

vi 有3 种模式,分别为命令行模式、插入模式及命令行模式。

(1)命令行模式

用户在用vi 编辑文件时,最初进入的为一般模式。在该模式中用户可以通过上下移动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”等操作,但无法编辑文字。

(2)插入模式

只有在该模式下,用户才能进行文字编辑输入,用户按[ESC]可键回到命令行模式。

(3)底行模式

在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编辑环境,如寻找字符串、列出行号等。

vi的基本流程

(1)进入vi,即在命令行下键入“vi hello”(文件名)。此时进入的是命令行模式,光标位于屏幕的上方

(2)在命令行模式下键入i 进入插入模式

(3)最后,在插入模式中,按“Esc”键,则当前模式转入命令行模式,并在底行行中.入“:wq”(存盘退出)进入底行模式

vi 的各模式功能键

命令行模式常见功能键

i 切换到插入模式,在目前的光标所在处插入输入的文字,已存在的文字会向后退

a 切换到插入模式,并从目前光标所在位置的下一个位置开始输入文字

o 切换到插入模式,且从行首开始插入新的一行

0(数字0) 光标移到本行的开头

G 光标移动到文件的最后

nG 光标移动到第n 行

$ 移动到光标所在行的“行尾”

n<Enter> 光标向下移动n 行

dd 删除光标所在行

ndd 从光标所在行开始向下删除n 行

yy 复制光标所在行

nyy 复制光标所在行开始的向下n 行

u 恢复前一个动作

插入模式常见功能键

插入模式的功能键只有一个,即按“Esc”键可回到命令行模式。

底行模式常见功能键

:w 将编辑的文件保存到磁盘中

:q 退出vi(系统对做过修改的文件会给出提示)

:q! 强制退出vi(对修改过的文件不作保存)

:wq 存盘后退出

:w [filename] 另存一个名为filename 的文件

:set nu 显示行号,设定之后,会在每一行的前面显示对应行号

:set nonu 取消行号显示

自己的收获

第一次接触老师的这种授课方式刚开始的时候有些不适应,毕竟自己的计算机基础不好而且很难对计算机方面的课程产生兴趣,但是还是养成了积累循序渐进的习惯,掌握了一定的计算机系统及Linux指令知识, 这本《深入理解计算机系统》确实是本值得推荐的好书,基本上面面俱到,涉及到了目前所学习内容的方方面面,对任何一门专业课都能起到启蒙作用。其中最大的收获是提高实际操作能力的提高,能够将理论和实践形成统一。

自己的不足

  • 对有的难点问题没有一问到底,有的题只掌握了方法没有掌握原理,在学习过程中接受所学知识比较困难。
  • 没有及时复习,而且并没有很好地理解,看过的知识点会忘记,Linux命令还没有彻底掌握。
  • 编程方面还是有很大的问题,而且有问题问的不够及时,如果问题堆积的话会更不容易解决。

参考资料

  1. 教材《深入理解计算机系统》
  2. 每周测试答案解析 http://group.cnblogs.com/topic/73060.html
  3. 教材学习指导:http://group.cnblogs.com/topic/73069.html

转载于:https://www.cnblogs.com/huangbobo/p/4927849.html

相关文章:

使用SQL Server维护计划实现数据库定时自动备份

在SQL Server中出于数据安全的考虑&#xff0c;所以需要定期的备份数据库。而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行&#xff0c;所以我们不可能要求管理员每天守到晚上1点去备份数据库。要实现数据库的定时自动备份&#xff0c;最常用的方式就是使用SQL S…

AI 医疗公司“战疫”在前线

作者 | Just来源 | CSDN&#xff08;CSDNnews&#xff09;紧急驰援疫区&#xff0c;涉足AI医疗领域的公司也出动了。截止到2月6日&#xff0c;随着新冠病毒肺炎疫情的不断发展&#xff0c;全国累计已有31161例确诊病例&#xff0c;26359例疑似病例。不过&#xff0c;由于医疗资…

动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind

在《内存、性能问题分析的利器——valgrind》一文中我们简单介绍了下valgrind工具集&#xff0c;本文将使用callgrind工具进行动态执行流程分析和性能瓶颈分析。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 之前的《利器》系列中&#xff0c;我们介绍了两种…

CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28

2019独角兽企业重金招聘Python工程师标准>>> 【准备工作】 01 #在编译安装lnmp之前&#xff0c;首先先卸载已存在的rpm包。 02 rpm -e httpd 03 rpm -e mysql 04 rpm -e php 05 06 yum -y remove httpd 07 yum -y remove mysql-server mysql 08 yum -y remove php 0…

GitHub标星14000+,阿里开源的SEATA如何应用到极致?

作者简介&#xff1a;袁鸣凯&#xff0c;家乐福技术总监&#xff0c; 高知特有限技术公司中国区架构师&#xff0c;HP上海研发技术专家&#xff0c;夸客金融首席架构师&#xff0c;现任家乐福中国区技术总监。多年互联网、企业级SOA、微服务、全渠道中台方面的架构设计实战经验…

C++拾趣——有趣的操作符重载

操作符重载是C语言中一个非常有用的特性。它可以让我们比较优雅的简化代码&#xff0c;从而更加方便的编写逻辑。 为什么要使用操作符重载一种常见的用法是重载<<运算符&#xff0c;让标准输出可以输出自定义的类型。比如 #include <iostream>class Sample {friend…

urlparse模块(专门用来解析URL格式)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #urlparse模块&#xff08;专门用来解析URL格式&#xff09;#URL格式&#xff1a; #protocol ://hostname[:port] / path / [;parameters][?query]#fragment #parameters&#xff1a;特殊参数&#xff0c;一般用的很少。#1、url…

使用Boost的Serialization库序列化STL标准容器

使用Boost做对象序列化是非常方便的&#xff0c;本文将介绍一种序列化STL标准容器的方法。这是之前设计的异步框架的一个子功能&#xff1a;过程A将标准容器数据序列化成二进制流&#xff0c;然后将该二进制数据发送到过程B&#xff0c;过程B将数据反序列化为标准容器。&#x…

连登GitHub TOP榜,中国开发者在行动!

作者 | 唐小引数据 | 于瑞洋出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;中国开发者正在走向世界中文开源项目正在不断登上 GitHub TOP 榜不久前&#xff0c;一个名叫「wuhan2020」的开源项目进入了 GitHub Trending TOP 榜&#xff0c;截至到现在&#xff0c;已经…

Merge into的使用

用途 merge 命令可以用来用一个表中的数据来修改或者插入到另一个表。插入或者修改的操作取决于on子句的条件。该语句可以在同一语句中执行两步操作&#xff0c;可以减少执行多条insert 和update语句。merge是一个确定性的语句&#xff0c;即不会在同一条merge语句中去对同一条…

PHP和MySQL Web开发从新手到高手,第8天-创建categories管理页面

1. 创建categories管理页面 主要包含以下几个页面: A. index.php, 准备各种变量数据.供展示页面使用. B. categories.html.php, 显示categories. C. form.html.php, 用于编缉或添加作者的页面. 页面郊果: 2. categories页面的主要流程 2.1 是否已登录 if (!user_is_login()){in…

堆状态分析的利器——valgrind的DHAT

在《堆问题分析的利器——valgrind的massif》一文中&#xff0c;我们介绍了如何使用massif查看和分析堆分配/释放的问题。但是除了申请和释放&#xff0c;堆空间还有其他问题&#xff0c;比如堆空间的使用率、使用周期等。通过分析这些问题&#xff0c;我们可以对程序代码进行优…

cisco2950交换机密码恢复

在实际工作中可能会忘记交换机密码&#xff0c;导致不能对交换机进行配置的情况。cisco提供了密码恢复的方法。以下是关于交换机密码恢复说明&#xff1a;如果忘记密码&#xff0c;这时我们如果要配置交换机就必须在启动时绕过config.text的配置【密码保存在config.text中】然后…

程序员SQL都不会?能干啥?资深研发:别再瞎努力了!

国外有人曾做过调查显示&#xff1a;“SQL的使用人数仅次于JavaScript”。更有统计&#xff0c;世界上一流的互联网公司中&#xff0c;排名前 20 的有 80% 都是 MySQL 的忠实用户。为什么这项技术仍有这么多人在用&#xff1f;又为什么值得我们学习&#xff1f;1、无论你是前端…

OC管理文件方法

1、常见的NSFileManager文件方法 -(NSData *)contentsAtPath:path  //从一个文件读取数据 -(BOOL)createFileAtPath: path contents:(NSData *)data attributes:attr  //向一个文件写入数据 -(BOOL)removeItemAtPath:path error:err  //删除一个文件 -(BOOL)moveItemAtPa…

堆状态分析的利器——gperftools的Heap Profiler

在《内存泄漏分析的利器——gperftools的Heap Checker》一文中&#xff0c;我们介绍了如何使用gperftools分析内存泄漏。本文将介绍其另一个强大的工具——Heap Profiler去分析堆的变化过程。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 我们使用类似于《堆…

亲戚称呼关系表

直系血亲父系曾曾祖父--曾祖父--祖父--父亲曾曾祖母--曾祖母--祖母--父亲母系曾曾外祖父--曾外祖父--外祖父--母亲曾曾外祖母--曾外祖母--外祖母--母亲儿子&#xff1a;夫妻间男性的第一子代。女儿&#xff1a;夫妻间女性的第一子代。孙&#xff1a;夫妻间的第二子代&#xff0…

技术驰援抗疫一线, Python 线上峰会免费学!

截至截止2月9号24时&#xff0c;新型冠状病毒在全国已确诊42714例&#xff0c;疑似病例已达21675例。而专家所说的“拐点”始终未至&#xff0c;受疫的影响&#xff0c;各大公司开启远程办公模式&#xff0c;将返回工作场所办公的时间一延再延。在抗疫前线&#xff0c;中国医疗…

ZeroMq实现跨线程通信

ZeroMq实现跨线程通信 之前在技术崇拜的技术经理指导下阅读了ZeroMq的基础代码&#xff0c;现在就将阅读的心得与成果记录一下&#xff0c;并重新模仿实现了一下经理的异步队列。 1、对外接口 //主要接口&#xff08;1&#xff09;void *ymq_attach (void *ctx_, int oid, voi…

动态执行流程分析和性能瓶颈分析的利器——gperftools的Cpu Profiler

在《动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind》中&#xff0c;我们领略了valgrind对流程和性能瓶颈分析的强大能力。本文将介绍拥有相似能力的gperftools的Cpu Profiler。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 我们依然以callg…

C语言内存管理内幕(二)----半自动内存管理策略

2019独角兽企业重金招聘Python工程师标准>>> C语言内存管理内幕(二&#xff09;----半自动内存管理策略 转载于:https://my.oschina.net/hengcai001/blog/466

无人机巡逻喊话、疫情排查、送药消毒,抗疫战中机器人化身钢铁战士!

整理 | 夕颜责编 | Carol出品 | CSDN&#xff08;ID:CSDNnews&#xff09;这场抗疫战争似乎格外漫长&#xff0c;但回头细数一下才发现&#xff0c;自疫情爆发以来&#xff0c;也不过半月之久。在接下来的几个半月中&#xff0c;抗疫战仍将继续&#xff0c;各方力量也要绷紧神经…

jQuery EasyUI 表单插件 - Datebox 日期框

为什么80%的码农都做不了架构师&#xff1f;>>> 扩展自 $.fn.combo.defaults。通过 $.fn.datebox.defaults 重写默认的 defaults。 日期框&#xff08;datebox&#xff09;把可编辑的文本框和下拉日历面板结合起来&#xff0c;用户可以从下拉日历面板中选择日期。在…

互斥量、读写锁长占时分析的利器——valgrind的DRD

在进行多线程编程时&#xff0c;我们可能会存在同时操作&#xff08;读、写&#xff09;同一份内存的可能性。为了保证数据的正确性&#xff0c;我们往往会使用互斥量、读写锁等同步方法。&#xff08;转载请指明出于breaksoftware的csdn博客&#xff09; 互斥量的用法如下 pth…

一次性同步修改多台linux服务器的密码

如何一次性修改多台linux服务器的密码&#xff0c;这是个问题&#xff0c;我给大家提供一个脚本&#xff0c;是前一段我刚刚写的&#xff0c;希望能对大家有所帮助一 , 需求:linux环境下运行&#xff0c;需要tcl和expect支持原理说明&#xff1a;利用expect的摸拟交互的功能&…

麻省理工学院的新系统TextFooler, 可以欺骗Google的自然语言处理系统及Google Home的音频...

来源 | news.mit编译 | 武明利责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;两年前&#xff0c;Google的AI还不太成熟。一段时间以来&#xff0c;有一部分计算机科学研究一直致力于更好地理解机器学习模型如何处理这些“对抗性”攻击&#xff0c;这些攻…

Oracle VS DB2 数据类型

Oracle VS DB2 本文转自&#xff1a;http://www.bitscn.com/oracle/install/200604/16541.html首先&#xff0c;通过下表介绍ORACLE与DB2/400数据类型之间的对应关系&#xff0c;是一对多的关系&#xff0c;具体采用哪种对应关系&#xff0c;应具体问题具体分析。 OracleDB2/40…

死锁问题分析的利器——valgrind的DRD和Helgrind

在《DllMain中不当操作导致死锁问题的分析--死锁介绍》一文中&#xff0c;我们介绍了死锁产生的原因。一般来说&#xff0c;如果我们对线程同步技术掌握不牢&#xff0c;或者同步方案混乱&#xff0c;极容易导致死锁。本文我们将介绍如何使用valgrind排查死锁问题。&#xff08…

疫情可视化,基于知识图谱的AI“战疫”平台如何做?

来源 | DataExa渊亭科技武汉封城半个月&#xff0c;疫情依然严峻。但与17年前的SARS相比&#xff0c;我国在此次疫情防控工作中展现出了更高的医疗救治水平、更快的防疫反应速度、更透明的信息披露机制、更迅速的数据报送机制。在这场没有硝烟的战役中&#xff0c;社会各界团结…

mysql乐观锁总结和实践

2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章《MySQL悲观锁总结和实践》谈到了MySQL悲观锁&#xff0c;但是悲观锁并不是适用于任何场景&#xff0c;它也有它存在的一些不足&#xff0c;因为悲观锁大多数情况下依靠数据库的锁机制实现&#xff0c;以保证操…