自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 wsl操作

WSL操作

2022-07-29 10:21:11 237 1

原创 (18) 读写分离

1 介绍读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。通过MyCat可轻易实现上述功能,不仅可以支持MySQL,也可以支持Oracle和SQL Server。2 一主一从2.1 原理MySQL的主从复制,是基于二进制日志(binlog)实现的。2.2 准备备注:主从复制的搭建,可以参考之前文章中 主从复制 章节中的步骤操作。3 一主一从读写分离MyC

2022-04-19 14:30:27 471

原创 (17) 分库分表

1 介绍链接:百度网盘 请输入提取码([提取码:0429],下面将会使用到的脚本资源文件)1.1 问题分析随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。 CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。为了解决上述问题,需要对数据库进行分库分表处理。...

2022-04-19 12:45:27 1334

原创 (16) 主从复制

1 概述主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志(binlog)传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。MySQL 复制的优点主要包含以下三个方面:主库出现问题,可以快速切换到从库提供服务。 实现读写分离,降低主库的访问压力。(主库负责增删改请求,从库负责查询请求) 可以在从库中执行备份,以避免备份期间.

2022-04-17 14:16:09 198

原创 (15) 日志

1 错误日志错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中 发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。查看日志位置:showvariableslike'%log_error%';2 二进制日志2.1 介绍二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。...

2022-04-17 13:02:30 74

原创 (14) MySQL管理

1 系统数据库Mysql数据库安装完成后,自带四个数据库,具体作用如下:2 常用工具1)mysql该mysql不是指mysql服务,而是指mysql的客户端工具。语法 :mysql [options] [database]选项 :-u,--user=name #指定用户名-p,--password[=name] #指定密码-h,--host=name #指定服务器IP或域名...

2022-04-16 18:37:31 1154

原创 (13) InnoDB引擎

1 逻辑存储结构​1)表空间表空间是InnoDB存储引擎逻辑结构的最高层, 如果用户启用了参数 innodb_file_per_table(在8.0版本中默认开启),则每张表都会有一个表空间(xxx.ibd),一个mysql实例可以对应多个表空间,用于存储记录、索引等数据。2)段段分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback segment),InnoDB是索引组织表,数据段就是B+树的叶子节.

2022-04-16 13:15:12 872

原创 (12) 锁

1 概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。MySQL中的锁,按照锁的粒度分,分为以下三类:全局锁:锁定数据库中的所有表。 表级锁:每次操作锁住整张表。 行级锁:每次操作锁住对应的行数据。2 全局锁2.1 介绍全局锁就是对整个数据库实例加锁

2022-04-14 19:17:18 878

原创 (11) 视图/存储过程/触发器

1 视图1.1 介绍视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。1.2 语法1)创建CREATE [OR REPLACE] VIEW视图名称[(列名列表)]ASSELECT语句 [ WITH [CASCADED | LOCAL ] CHECK OPTION...

2022-04-13 21:48:59 700 1

原创 (10) SQL优化

1 插入数据1.1 insert如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化:insertintotb_testvalues(1,'tom');insertintotb_testvalues(2,'cat');insertintotb_testvalues(3,'jerry');.....1)批量插入数据insertintotb_testvalues(1,'Tom'),(2,'Cat'),(3,'Jerry');2)手动...

2022-04-12 20:38:21 837

原创 (9) 索引

1 索引概述1.1 介绍索引(index)是帮助MySQL高效获取数据的数据结构 (有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。2.2 演示表结构及其数据如下:假如我们要执行的SQL语句为 : select * from user where age = 45 ;1)无索引情况在无索引情况下,就需要从第一行开始扫描,一直扫描到最后一行,我们

2022-04-11 13:14:50 887 1

原创 (8) 存储引擎

1 MySQL体系结构​1)连接层最上层是一些客户端和链接服务,包含本地socket通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。2)服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分

2022-04-09 13:47:31 330

原创 (7) 事务

1 事务简介事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作 "作为一个整体" 一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。例: 张三给李四转账1000块钱,张三银行账户的钱减少1000,而李四银行账户的钱要增加1000。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败。正常情况:转账这个操作 需要分为以下这么三步来完成:异常情况:转账这个操作, 也是分为以下这么三步来完成:(在执行第三步是报错了, 这样就导致张三减少100

2022-04-08 21:45:42 136

原创 (6) 多表查询

1 多表关系项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一) 多对多 一对一1.1 一对多例:部门 与 员工 的关系关系:一个部门对应多个员工,一个员工对应一个部门实现:在多的一方建立外键,指向一的一方的主键1.2 多对多例:学生 与 课程 的关系关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择实现:建立第三张中间表.

2022-04-08 12:37:25 2805 1

原创 (5) 约束

1 概述概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性。分类:注:约束是作用于表中字段上的,可以在 创建表 / 修改表 的时候添加约束。案例例:根据需求,完成表结构的创建。需求如下:对应的建表语句为:CREATETABLEtb_user(idintAUTO_INCREMENTPRIMARYKEYCOMMENT'ID唯一标识',namevarchar(10)NOT...

2022-04-05 22:17:30 730 1

原创 (4) 函数

MySQL中的函数主要分为以下四类:字符串函数、数值函数、日期函数、流程函数。3.1 字符串函数MySQL中内置了很多字符串函数,常用的几个如下:1)concat : 字符串拼接selectconcat('Hello','MySQL');2)lower : 全部转小写selectlower('MySQL');3)upper : 全部转大写selectupper('MySQL');4)lpad : 左填充selectlpad('My...

2022-04-04 16:29:49 584

原创 (3) 图形化界面工具DataGrip

通过DDL语句执行在命令进行操作,主要存在以下两点问题:会影响开发效率 ; 使用起来,并不直观,并不方便 ;所以在日常的开发中,会借助于MySQL的图形化界面工具,来简化开发,提高开发效率。而目前mysql主流的图形化界面工具,有以下几种:这里选择的是最后一种DataGrip,这种图形化界面工具,功能更加强大,界面提示更加友好,是我们使用MySQL的不二之选。1 安装1)下载相应安装包。安装包网址:https://download.jetbrains.com.cn/datagri

2022-04-03 21:39:09 2763 6

原创 (2) SQL

全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作 关系型数据库 的统一标准。1 SQL通用语法1)SQL语句可以单行或多行书写,以分号结尾。2)SQL语句可以使用 空格/缩进 来增强语句的可读性。3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。4) 注释:单行注释:--注释内容 或#注释内容多行注释:/* 注释内容 */2 SQL分类S...

2022-04-03 19:21:59 1316

原创 (1) MySQL概述、安装

1 数据库相关概念2 MySQL数据库2.1 版本官方:MySQLMySQL官方提供了两种不同的版本:社区版本 (MySQL Community Server): 免费, MySQL不提供任何技术支持 商业版本 (MySQL Enterprise Edition): 收费,可以使用30天,官方提供技术支持2.2 下载下载地址:MySQL :: Download MySQL Installer (Archived Versions)2.3 安装1)双击官...

2022-04-03 19:20:00 569

原创 Linux 常用命令和快捷键

(1) Ubuntu快捷键打开活动搜索界面:Super​打开终端窗口:Ctrl+Alt+T锁屏:Super+L 或 Ctrl+Alt+t显示桌面:Super+D 或 Ctrl+Alt+D显示应用程序菜单:Super+A在运行中的应用程序间切换:Super+Tab 或 Alt+Tab移动窗口位置:Super+箭头切换到通知栏:Super+M切换输入法:Super+空格运行控制台:Alt+F2关闭应用程序窗口:Ctrl+Q

2022-03-22 23:40:15 4138 1

原创 31天刷完剑指offer——(第4天) 查找算法

剑指offer 03. 数组中重复的数字 (easy)#pragmaonce#include<vector>#include<algorithm>#include<unordered_set>usingstd::unordered_set;usingstd::vector;/*排序,双指针(时间复杂度N*logN,空间复杂度1)classSolution{public:intfindRepeatNumber(vect...

2021-09-01 10:04:49 136 3

原创 31天刷完剑指offer——(第3天) 字符串

剑指offer 05. 替换空格 (easy)#pragmaonce#include<string>usingstd::string;/*利用辅助字符串存储结果classSolution{public:stringreplaceSpace(strings){stringstr;for(autoch:s){if(ch==''){s...

2021-08-31 18:12:44 77

原创 31天刷完剑指offer——(第2天) 链表

剑指offer 06. 从尾到头打印列表 (easy)#pragmaonce#include<vector>#include<stack>usingstd::vector;usingstd::stack;structListNode{intval;ListNode*next;ListNode(intx):val(x),next(NULL){}};/*(先反转链表(迭代)后打印)classSo...

2021-08-30 16:29:33 162

原创 31天刷完剑指offer——(第1天) 栈和队列

剑指offer 09. 用两个栈实现队列 (简单)#pragmaonce#include<stack>usingstd::stack;//使用辅助栈classCQueue{private:stack<int>in;//入队列的值都push到栈in中(in栈顶元素正好是队列中最后一个元素,in出栈顺序与出队正好相反)stack<int>out;//将栈in中的值出栈并同时p...

2021-08-29 19:09:11 132

原创 操作系统——(1) Linux内核 vs Windows内核

1. 内核计算机是由各种外部硬件设备组成的,如果每个应用都要和 这些硬件设备 对接通信协议,那编写应用程序的工作 将会非常繁杂。因此,内核以中间人的身份 作为应用连接硬件设备的桥梁,应用程序只需关心与内核交互,而无需关心硬件的细节。现代操作系统中,内核⼀般会提供 4个基本能力:管理进程、线程,决定哪个进程、线程使用CPU,也就是进程调度的能⼒。 管理内存,决定内存的分配和回收,也就是内存管理的能⼒。 管理硬件设备,为进程与硬件设备之间提供通信能⼒,也就是硬件通信能⼒。 提供系统调用..

2021-08-28 17:28:01 945

原创 硬件结构——(7) 为什么 0.1 + 0.2 不等于 0.3?

1. 为什么负数要用补码表示?⼗进制数转⼆进制 采用除 2 取余法。例如:数字8转⼆进制的过程如下图:整数类型的数字 在计算机中的存储方式,就是将十进制数 转换成⼆进制。以int 类型的数字为例,int类型大小为32位,其中最高位作为 "符号标志位"(正数的符号位是0,负数的符号位是1),剩余的31位 表示二进制数据。例如:int类型的数字1 的⼆进制数表示如下图:负数在计算机中 用"补码"表示,补码就是将正数的二进制 全部取反再加1。例如:int类型的数字-1 的⼆进制数表示...

2021-08-28 11:02:34 344

原创 硬件结构——(6) 软中断

1. 中断是什么?在计算机中,中断是 系统用来响应硬件设备请求 的一种机制。操作系统收到 硬件的中断请求后,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。中断是⼀种异步的事件处理机制,可以提高系统的 并发处理能力。操作系统收到了中断请求后,会打断其他进程的运行。所以中断请求的 响应程序,也就是中断处理程序,要尽可能快的执行完,这样可以减少 对正常进程运行调度 的影响。而且,中断处理程序在响应中断时,可能还会"临时关闭中断"。这意味着,在中断处理程序 执行完之前,系...

2021-08-27 12:45:44 1730

原创 硬件结构——(5) CPU 是如何执行任务的?

1. CPU 如何读写数据的?(1) CPU框架:先认识CPU架构,才能更好地理解 CPU是如何读写数据的,现代CPU的架构图 如下图所示:可以看到,⼀个CPU中通常会有 多个CPU 核心,比如上图中的 1号和2号CPU核心,并且每个CPU核心 都有自己的L1 Cache和L2 Cache。L1Cache通常分为 dCache(数据缓存) 和 iCache(指令缓存),L3 Cache是多个核心所共享的,这就是CPU典型的缓存层次。上面提到的都是 CPU内部的Cache,CPU之外 ..

2021-08-26 20:56:11 794

原创 硬件结构——(4) CPU 缓存⼀致性

1. CPU Cache 的数据写入CPU Cache通常分为三级缓存:L1 Cache、L2 Cache、L3 Cache,级别越低的Cache 离CPU核心越近,访问速度越快,但存储容量相对会更小。在多核心的CPU中,每个核心都有自己的 L1/L2 Cache,而 L3 Cache 是所有核心共享使用的。CPU Cache由多个Cache Line组成,CPU Line(缓存块) 是CPU从内存读取数据 的基本单位,CPU Line由各种 标志+数据块 组成。对数据的操作 除..

2021-08-26 09:41:18 217

原创 硬件结构——(3) 如何写出让 CPU 跑得更快的代码?

1. CPU Cache 有多快?问:为什么有了内存,还需要 CPU Cache?根据摩尔定律,CPU的访问速度 每18个月就会翻一倍,相当于每年增长60%左右。虽然内存的速度 也在不断增长,但增长的速度 远小于CPU,平均每年增长7%左右。因此,CPU与内存的访问性能的差距 不断拉大,为了弥补 CPU与内存 之间的性能差距,所以在 CPU内部引入了CPU Cache,即⾼速缓存。)在Linux系统中,可以使用下图的方式 来查看各级CPU Cache的大小:(比如这台服务器,离CPU核心..

2021-08-24 17:43:44 445

原创 硬件结构——(2) 存储器金字塔

1. 存储器的层次结构场景:周六去图书馆学校,通常会把一些常⽤的书 放在桌⼦上,当需要⼀本桌上没有的书,则去书架上找。另外,看书时 ⼤脑会思考问题,也会记忆知识内容。可以把CPU 比喻成大脑。⼤脑思考的内容,就好比 CPU寄存器中的数据,能存储的数据是最少的,但处理的速度是最快的。(毕竟大脑不能同时思考太多的事情)⼤脑中的记忆,就好比 CPU Cache(CPU⾼速缓存),处理速度相对寄存器 要慢⼀点,但能存储的数据 相对要多⼀点。CPU Cache 通常会分为 L1、L2、L3 三层...

2021-08-23 13:49:54 840

原创 硬件结构——(1) CPU 是如何执行程序的?

1. 图灵机的工作方式​图灵机的基本组成如下:有⼀条纸带,纸带由⼀个个连续的格⼦组成,每个格⼦可以写⼊字符,纸带就好⽐内存,⽽纸带上的 格⼦中的字符 就好⽐内存中的数据或程序。 有⼀个读写头,读写头可以读取 纸带上任意格⼦中的字符,也可以把字符写⼊到纸带的格⼦中。 读写头上有⼀些部件,⽐如存储单元、控制单元、运算单元:存储单元:⽤于存放数据。 控制单元:⽤于识别字符 是数据还是指令,以及控制程序的流程等。 运算单元:⽤于执⾏运算指令。例:简单运算 1+2 的执行过程...

2021-08-19 23:45:40 1319

原创 C++Primer——第11章(关联容器)

关联容器和顺序容器的区别:关联容器中的元素 是按照关键字来保存和访问的。关联容器支持 通过关键字 来高效地查找和读取元素,基本的关联容器类型是map和set。关联容器类型:按关键字有序保存元素: map 关联数组:保存关键字-值对 set 关键字即值,即只保存关键字的容器 multimap 支持同一个键多次出现的map multiset 支持同一个键多次出现的set 无序集合: unordered_map 用哈希函数组织的map ...

2021-08-06 18:20:43 225

原创 C++Primer——第10章(泛型算法)

10.1 泛型算法概述本章提到的泛型算法:find InputItfind(InputIt first, InputIt last,constT&value); first,last ,value分别为 两个标记范围的迭代器、目标查找值。 返回值:如果找到给定目标值,返回对应的迭代器,否则返回第二个参数,即标记结尾的迭代器。 accumulate Taccumulate(InputIt first, InputIt last, T init); ...

2021-07-31 14:07:04 240

原创 C++Primer——第九章(顺序容器)

9.1 顺序容器概述顺序容器:为程序员提供了 控制元素存储和访问顺序 的能力。这种顺序不依赖于 元素的值,而是与元素加入容器时 的位置相对应。顺序容器类型 介绍 vector 可变大小数组。支持快速随机访问。在尾部之外的位置 插入或删除元素可能很慢。 deque 双端队列。支持快速随机访问。在头尾位置 插入/删除速度很快。 list 双向链表。只支持双向顺序访问。在list中任何位置 进行插入/删除操作速度都很快。 forward_list 单向链表。只

2021-07-28 16:53:56 227

原创 C++Primer——第8章(IO库)

8.1 IO类之前章节用过的IO库设施:istream:输入流类型,提供 输入操作。 ostream:输出流类型,提供 输出操作。 cin:一个istream对象,从标准输入 读取数据。 cout:一个ostream对象,向标准输出 写入数据。 cerr:一个ostream对象,向标准错误 写入消息。 >>运算符:从一个istream对象中 读取输入数据。 <<运算符:向一个ostream对象中 写入输出数据。 getline函数:从一个给定的istream对象

2021-07-26 00:20:45 149

原创 C++Primer——第七章(类)

7.1 定义抽象数据类类背后的基本思想:数据抽象 和 封装。数据抽象:是一种依赖于接口和实现分离的编程技术封装:将类的内部成员 设置成外部不可见,但提供部分接口给外面类成员:必须在类的内部声明,不能在其他地方增加成员。 成员可以是数据,函数,类型别名。类的成员函数:成员函数的声明 必须在类的内部;成员函数的定义 既可以在类的内部也可以在外部。 对象使用运算符(.)调用成员函数。 默认实参:Sales_item(const std::string &book): ...

2021-07-25 01:23:21 295

原创 C++Primer——第六章(函数)

6.1 函数基础函数定义:包括返回类型、函数名字和0个或者多个形参组成的列表和函数体。 调用运算符:调用运算符的形式是一对圆括号(),作用于一个表达式,该表达式是函数或者指向函数的指针;圆括号内是用逗号隔开的实参列表。函数的调用完成两项工作:用实参初始化函数对应的形参 将控制权转移给被调用函数。(此时,主调函数的执行被暂时中断,被调函数开始执行)注:形参和实参:形参和实参的个数和类型必须匹配上。尽管实参与形参存在对应关系,但是并没有规定实参的求值顺序。 返回类型:void表示函数.

2021-07-22 16:10:03 299

原创 C++Primer——第五章(语句)

5.1 简单语句表达式语句:一个表达式末尾加上分号,就变成了表达式语句。 空语句:只有一个单独的分号。 复合语句(块):用花括号{ } 包裹起来的语句和声明的序列。一个块就是一个作用域。5.2 条件语句if-else语句中,else匹配离它最近且尚未配对的if。switch语句中,case标签必须是整型常量表达式。注:如果需要为某个case分支 定义并初始化一个变量, 我们应该把变量定义在块内,从而确保后面的所有case标签 都在变量的作用域之外。casetrue:..

2021-07-20 15:34:58 193

原创 C++Primer——第四章(表达式)

4.1 基础运算对象转换:小整数类型会被提升为较大的整数类型 。(如 bool b=true; bool b2 = -b; b在求值(-b)之前会转换为int类型,即b=1) 重载运算符:当运算符作用在类类型的运算对象时,用户可以自行定义其含义。 左值和右值:当一个对象被用作右值的时候,用的是对象的值(内容);被用做左值时,用的是对象的身份(在内存中的位置)。优先级:高优先级运算符的运算对象要比低优先级运算符的运算对象更为紧密地组合在一起。如果优先级相同,则其组合规则由结合律确定。 算.

2021-07-19 16:01:51 181

空空如也

空空如也

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

TA关注的人

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