自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 Java密码学

密码学1.1 密码学基本概念密码在我们的生活中有着重要的作用,那么密码究竟来自何方,为何会产生呢?密码学是网络安全、信息安全、区块链等产品的基础,常见的非对称加密、对称加密、散列函数等,都属于密码学范畴。密码学有数千年的历史,从最开始的替换法到如今的非对称加密算法,经历了古典密码学,近代密码学和现代密码学三个阶段。密码学不仅仅是数学家们的智慧,更是如今网络空间安全的重要基础。1.1.1 古典密码学在古代的战争中,多见使用隐藏信息的方式保护重要的通信资料。比如先把需要保护的信息用化学药水写到纸上,

2023-08-09 13:35:01 517

原创 第16章_多版本并发控制

本质也是一种数据结构嘛!在MVCC机制中,多个事务对同一个行记录进行更新会产生多个历史快照,这些历史快照保存在Undo Log里。如果一个事务想要查询这个行记录,需要读取哪个版本的行记录呢?这时就需要用到ReadView了,它帮我们解决了行的可见性问题。ReadView就是事务在使用MVCC机制进行快照读操作时产生的读视图。当事务启动时,会生成数据库系统当前的一个快照,InnoDB为每个事务构造了一个数组,用来记录并维护系统当前活跃事务的ID("活跃"指的就是,启动了但还没提交)。​。

2023-06-18 15:55:50 472 1

原创 第15章_锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),我们就需要保证这个数据在任何时刻最多只有一个线程在访问,保证数据的完整性和一致性。在开发过程中加锁是为了保证数据的一致性,这个思想在数据库领域中同样很重要。在数据库中,除传统的计算资源〈如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。

2023-06-17 15:32:30 640

原创 第14章_MySQL事务日志

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制 实现。而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。REDO LOG 称为,提供,恢复提交事务修改的页操作,用来保证事务的持久性。UNDO LOG 称为,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。有的DBA或许会认为 UNDO 是 REDO 的逆过程,其实不然。

2023-06-17 11:48:36 505

原创 第14章_MySQL事务日志

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制 实现。而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。REDO LOG 称为,提供,恢复提交事务修改的页操作,用来保证事务的持久性。UNDO LOG 称为,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。有的DBA或许会认为 UNDO 是 REDO 的逆过程,其实不然。

2023-06-16 21:12:51 561

原创 第13章_事务基础知识

数据库对象,指的就是数据库、表、视图、存储过程等结构。当我们使用CREATE、ALTER、 DROP等语句去修改数据库对象时,就会隐式的提交前边语句所属于的事务。

2023-06-16 13:33:35 362

原创 第12章_数据库其它调优策略

尽可能节省系统资源,以便系统可以提供更大负荷的服务。(吞吐量更大)合理的结构设计和参数调整,以提高用户操作 响应的速度。(响应速度更快)减少系统的瓶颈,提高MySQL数据库整体的性能。

2023-06-03 19:05:17 529

原创 第11章_数据库的设计规范

第11章_数据库的设计规范1. 为什么需要数据库设计我们在设计数据表的时候,要考虑很多问题。比如:用户都需要什么数据?需要在数据表中保存哪些数据?如何保证数据表中数据的正确性,当插入、删除、更新的时候该进行怎样的约束检查?。如何降低数据表的数据冗余度,保证数据表不会因为用户量的增长而迅速扩张?如何让负责数据库维护的人员更方便地使用数据库?使用数据库的应用场景也各不相同,可以说针对不同的情况,设计出来的数据表可能千差万别。现实情况中,面临的场景:当数据库运行了一段时间之后,我们才发现数据表

2023-06-03 16:31:56 1099

原创 第10章_索引优化与查询优化

理解方式一 :索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。理解方式二︰非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列(即建索引的字段正好是覆盖查询条件中所涉及的字段)。简单说就是,索引列+主键包含SELECT到FROM之间查询的列。

2023-06-03 16:05:43 677

原创 第10章_管理库表(DDL语句)

存储数据是处理数据的第一步。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢?在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是我们要先创建一个数据库,而不是直接创建数据表呢?因为从系统架构的层次上看,MySQL 数据库系统从大到小依次是 数据库服务器 、 数据库 、 数据表 、数据表的 行与列。MySQL 数据库服务器之前已经安装。所以,我们就从创建数据库开始。

2023-06-03 10:25:27 331

原创 1.nginx基础学习笔记

正向代理与反向代理,正向与反向是如何区分的?正向与反向的目标是客户端,是对于客户端来说是正向还是反向。正向代理:有明确目标的请求是从客户端发出的,客户端发起的请求知道明确的目的地,只不过自己访问不到,比如外网,此时就需要借助一个代理服务器帮助从而去访问要访问的目标。正向代理中,被代理的是客户端,服务器端不知道请求是谁发的。反向代理:有明确目标的请求是从服务器发出的。客户端并不知道自己的请求真实的会发送到那已台服务器,而服务器是知道谁发给他的请求的。

2023-05-20 17:31:59 1317

原创 1. 跨域学习

跨域问题

2023-05-10 15:26:09 854

原创 Docker基础学习1

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

2023-04-27 21:46:28 525

原创 Linux入门4之shell编程

HOME、$PWD、$SHELL、$USER等。

2023-04-26 22:16:04 287

原创 Linux入门3

Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。Shell 既是一种命令语言,又是一种程序设计语言。Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的Shell 解释器。

2023-04-26 22:14:39 1327

原创 Linux入门2

在工作中, 要对 服务器上的文件进行 简单 的修改, 可以使用 ssh 登录到远程服务器上, 并且使用 vi编辑器 进行简单的编辑即可需要修改的文件包括源代码配置文件例如: tomcat服务器的配置文件例如: 网卡信息的配置文件在没有图形界面的环境下, 要编辑文件, vi是最佳选择每一个使用linux的程序员,都应该或多或少的学习一些vi的常用命令。

2023-04-26 22:13:01 915

原创 Linux入门1

虚拟机 (Virtual Machine)指通过软件模拟的具有完整硬件系统功能的. 运行在一个完全隔离环境中的完整计算机系统虚拟系统通过生成现有操作系统的全新虚拟镜像, 具有真实操作系统完全一样的功能.进入虚拟系统后, 所有操作都是在这个独立全新的独立的虚拟系统里面进行, 可以独立安装运行软件, 保存数据, 不会对真正的系统产生任何影响而且现有在系统与虚拟镜像之间灵活切换的一类操作系统Linux刚面世时并没有图形界面, 所有的操作全靠命令完成, 如。

2023-04-26 22:11:53 436

原创 12. 图的进阶

有向图是一副具有方向性的图,是由一组顶点和一组有方向的边组成的,每条方向的边都连着一对有序的顶点。由某个顶点指出的边的个数称为该顶点的出度。指向某个顶点的边的个数称为该顶点的入度。由一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点。一条至少含有一条边,且起点和终点相同的有向路径。没有边相连;存在从v到w的边v—>w;存在从w到v的边w—>v;既存在w到v的边,也存在v到w的边,即双向连接;

2023-04-23 16:08:23 611

原创 11. 图的入门

*定义:**图是由。

2023-04-23 16:07:18 698

原创 10. 并查集

一般像计算机这样网络型的数据,我们要求网络中的每两个数据之间都是相连通的,也就是说,我们需要调用很多次union方法,使得网络中所有数据相连,其实我们很容易可以得出,如果要让网络中的数据都相连,则我们至少要调用N-1次union方法才可以,但由于我们的union方法中使用for循环遍历了所有的元素,所以很明显,我们之前实现的合并算法的时间复杂度是O(N^2),如果要解决大规模问题,它是不合适的,所以我们需要对算法进行优化。并查集中剩余的数目,减去1,就是还需要修建的道路数目;每修一条路,就少一个分组。

2023-04-23 16:06:33 694

原创 9. 树的进阶

​ 之前我们学习过二叉查找树,发现它的查询效率比单纯的链表和数组的查询效率要高很多,大部分情况下,确实是这样的,但不幸的是,在最坏情况下,二叉查找树的性能还是很糟糕。 例如我们依次往二叉查找树中插入9,8,7,6,5,4,3,2,1这9个数据,那么最终构造出来的树是长得下面这个样子:​ 我们会发现,如果我们要查找1这个元素,查找的效率依旧会很低。效率低的原因在于这个树并不平衡,全部是向左边分支,如果我们有一种方法,能够不受插入数据的影响,让生成的树都像完全二叉树那样,那么即使在最坏情况下,查找的效率依旧会很

2023-04-23 16:05:34 614

原创 8. 优先队列

在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。​ 步骤一完成后的结果,虽然我们给每个元素关联了一个整数,并且可以使用这个整数快速的获取到该元素,但是, items数组中的元素顺序是随机的,并不是堆有序的,所以,为了完成这个需求,我们可以增加一个数组int[]pq,来。,pq数组需要堆有序,也就是说,可以获取并删除队列中最小的值。

2023-04-23 16:01:47 552

原创 7. 堆的简单学习

堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵。

2023-04-23 16:00:04 244

原创 6. 树的入门

树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是。

2023-04-23 15:56:30 476

原创 5. 符号表(哈希表)

而在实际生活中,有时候我们需要根据键的大小进行排序,插入数据时要考虑顺序,那么接下来我们就实现一下有序符号表。符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将。要根据键排序,键必须是Comparable的子类或实现类。​ 刚才实现的符号表,我们可以称之为无序符号表,因为在。,我们可以根据键来查找对应的值。

2023-04-23 15:54:30 280

原创 4. 线性表

存储货物或供旅客住宿的地方,可引申为仓库、中转站。例如我们现在生活中的酒店,在古时候叫客栈,是供旅客休息的地方,旅客可以进客栈休息,休息完毕后就离开客栈。

2023-04-23 15:51:08 530

原创 3. 排序

由于我们这里要讲排序,所以肯定会在元素之间进行比较。规则的。在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的。所以Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性的大小来确定它们之间的大小关系。一般,Java中通过接口实现两个对象的比较,比较常用就是Comparable接口和Comparator接口。

2023-04-21 17:33:29 603

原创 2. 算法分析

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随着n的变化情况并确定T(n) 的量级。算法的时间复杂度,就是算法的时间量度,记作:T(n)=O(f(n))。它表示随着问题规模n的增大,算法执行时间 的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度,其中f(n)是问题规模n的某个函数。

2023-04-21 14:05:23 625

原创 1. 数据结构与算法概述

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。**大白话:**根据一定的条件,对一些数据进行计算,得到需要的结果。

2023-04-21 14:04:44 810

原创 Redis基础

Redis基础

2023-04-21 14:02:24 1614

原创 第09章_性能分析工具的使用

定位了查询慢的SQL之后,我们就可以使用EXFLAIN或DESCRBE工具做针对性的分析查询语句\textcolor{red}{定位了查询慢的SQL之后,我们就可以使用EXFLAIN或 DESCRBE工具做针对性的分析查询语句}定位了查询慢的SQL之后,我们就可以使用EXFLAIN或DESCRBE工具做针对性的分析查询语句。DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。

2023-04-18 15:55:11 492

原创 第08章_索引的创建与设计原则

① 冗余索引有时候有意或者无意的就对同一个列创建了多个索引,比如: index(a,b,c)相当于index(a)、index(a,b)、index(a,b,c)。我们知道,通过 idx_name_birthday_phone_number 索引就可以对 name 列进行快速搜索,再创建一 个专门针对 name 列的索引就算是一个 冗余索引 ,维护这个索引只会增加维护的成本,并不会对搜索有什么好处。② 重复索引。

2023-04-08 21:00:25 1041

原创 第7章_InnoDB数据存储结构

​ 页a、页b、页c…页n这些页可以不在物理结构上相连,只要通过双向链表相关联即可。每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。:这个属性标记着当前记录是否被删除,占用1个二进制位。值为0:代表记录并没有被删除值为1:代表记录被删除掉了被删除的记录为什么还在页中存储呢?

2023-04-08 20:45:15 307

原创 第06章_索引的数据结构

索引(Index)是帮助MySQL高效获取数据的数据结构。索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方式指向数据, 这样就可以在这些数据结构的基础上实现高级查找算法。​ 索引是在存储引擎中实现的,因此每种存储引擎的索引不一定完全相同,并且每种存储引擎不一定支持所有索引类型。同时,存储引擎可以定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。

2023-04-04 18:16:37 769

原创 第05章_存储引擎

MySQL从3.23.34a开始就包含InnoDB存储引擎。大于等于5.5之后,默认采用InnoDB引擎。InnoDB是MySQL的默认事务型引擎\textcolor{orange}{ 默认事务型引擎 }默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoD。

2023-04-04 16:56:38 382

原创 第03章_用户与权限管理

有一些程序员喜欢使用Root超级用户来访问数据库,完全把权限控制放在应用层面实现。这样当然也是可以的。但建议大家,尽量使用数据库自己的角色和用户机制来控制访问权限,不要轻易用Root账号。因为Root账号密码放在代码里面不安全,一旦泄露,数据库就会完全失去保护。而且,MySQL的权限控制功能十分完善,应该尽量利用,可以提高效率,而且安全可靠。

2023-04-02 18:21:19 800

原创 第02章_MySQL的数据目录

这样的存储引擎都是把表存储在磁盘上的,操作系统用来管理磁盘的结构被称为文件系统,所以用专业一点的话来表述就是:像InnoDB、MyISAM这样的存储引擎都是把表存储在文件系统上的。​ 在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。就是该表的名称,表里边有多少列,每个列的数据类型,约束条件和索引,使用的字符集和比较规则等各种信息,这些信息都体现在了我们的建表语句中了。

2023-04-02 17:25:01 113

原创 第01章_Linux下MySQL的安装与使用

sqLmode会影响MySQL支持的SQL语法以及它执行的数据验证检查。通过设置sqLmode,可以完成不同严格程度的数据校验,有效地保障数据准确性。MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值。5.6的mode默认值为空(即:NO_ENGINE_SUBSTITUTION),其实表示的是一个空值,相当于没有什么模式设置,可以理解为宽松模式。在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。

2023-04-01 17:47:19 978

原创 第09章_子查询

​ 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。

2023-04-01 14:26:34 76

原创 第08章_聚合函数

什么是聚合函数聚合函数作用于一组数据,并对一组数据返回一个值。聚合函数类型AVG()SUM()MAX()MIN()COUNT()聚合函数语法聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。有主键,count(主键列名) 效率最高;没有主键,count(1)效率最高;count(*)效率最高。2.1。

2023-04-01 12:29:22 100

空空如也

空空如也

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

TA关注的人

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