自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大魔王

编程技术爱好者

  • 博客(33)
  • 资源 (2)
  • 收藏
  • 关注

原创 动手写操作系统10----内存管理实现

本节实现操作系统可用内存的检测,分析以及简单的链表内存管理1.可用内存检测的实现使用BIOS 15h中断来检测内存,具体步骤如下:1: 将寄存器ax 赋值为 0E820h2 : 将寄存器ebx 初始化为0,该寄存器的内容会被BIOS修改,须保证内存查询过程中,该寄存器不会被修改。3: es:di 指向一块足够大的内存地址,BIOS会把有关内存的信息写到这个地址,内存信息是一种数...

2020-02-28 16:10:37 742

转载 服务端高并发分布式架构演进之路

1. 概述本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径2. 基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概...

2020-02-21 14:22:22 272

原创 动手写操作系统9----键盘&鼠标中断实现

键盘&鼠标中断实现本节主要实现键盘中断和鼠标中断,键盘中断实现将键盘数据显示到屏幕;鼠标中断实现鼠标位置的移动。 键盘中断通过主8259A的IRQ1触发,鼠标中断通过从8259A的IRQ4触发CPU通过中断向量号来寻址待执行的中断代码中断向量号 = 起始向量号 + 中断请求号...

2020-02-19 18:13:33 3753 1

原创 MySQL实战45讲学习笔记----分区表

分区表分区表的组织形式,创建一个表t:CREATE TABLE `t` ( `ftime` datetime NOT NULL, `c` int(11) DEFAULT NULL, KEY (`ftime`)) ENGINE=InnoDB DEFAULT CHARSET=latin1PARTITION BY RANGE (YEAR(ftime))(PARTITION p...

2020-02-18 16:00:44 273

原创 MySQL实战45讲学习笔记----grant权限控制

介绍grant语句和flush privileges语句原理创建一个用户:create user 'ua'@'%' identified by 'pa';这条语句的逻辑是创建一个用户’ua’@’%’,密码是pa。注意,在MySQL里面,用户名(user)+地址(host)才表示一个用户,因此 ua@ip1 和 ua@ip2代表的是两个不同的用户。这条命令做了两个动作: 磁...

2020-02-18 15:38:40 434

原创 动手写操作系统8----内核中断机制实现

内核中断实现21321#include<stdio.h>#include "io.h"#include "ascii_font.h"//定义调色板颜色#define COL8_000000 0#define COL8_FF0000 1#define COL8_00FF00 2#define COL8_FFFF00 3#define COL8...

2020-02-17 14:33:25 863

原创 MySQL实战45讲学习笔记----复制表

复制表的方法,将数据从一张表复制到另一张表创建一个表db1.t,并插入1000行数据,同时创建一个相同结构的表db2.tcreate database db1;use db1;create table t(id int primary key, a int, b int, index(a))engine=innodb;delimiter ;; create procedure...

2020-02-17 11:40:48 201

原创 MySQL实战45讲学习笔记----insert语句锁

insert语句的锁有 自增锁 行锁 间隙锁MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。insert … select 语句表t和t2的表结构、初始化数据语句如下CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL, `d`...

2020-02-17 11:11:40 370

原创 MySQL实战45讲学习笔记----自增主键不连续分析

自增主键不能保证连续递增,什么情况下自增主键会出现 “空洞”?创建一个表t,其中id是自增主键字段、c是唯一索引。CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), ...

2020-02-16 09:44:15 238

原创 MySQL实战45讲学习笔记----内存表

内存表的数据组织结构假设有以下的两张表t1 和 t2,其中表t1使用Memory 引擎, 表t2使用InnoDB引擎。create table t1(id int primary key, c int) engine=Memory;create table t2(id int primary key, c int) engine=innodb;insert into t1 value...

2020-02-16 09:35:31 271

原创 MySQL实战45讲学习笔记----group by原理

group by 执行流程select id%10 as m, count(*) as c from t1 group by m;这个语句的逻辑是把表t1里的数据,按照 id%10 进行分组统计,并按照m的结果排序后输出。它的explain结果如下:图4 group by 的explain结果在Extra字段里面,我们可以看到三个信息:Using index,表示这个语...

2020-02-14 09:53:45 790

原创 MySQL实战45讲学习笔记----临时表

join查询的时候如果连接字段没有建索引,可以通过创建临时表,给临时表添加索引来优化join语句执行create temporary table temp_t like t1;alter table temp_t add index(b);insert into temp_t select * from t2 where b>=1 and b<=2000;select * ...

2020-02-13 11:12:31 838

原创 动手写操作系统7----绘制内核字体&鼠标指针

本节实现绘制内核字体以及鼠标指针。内核图形绘制原理通过将指定位置的像素点设置成给定颜色而形成的最终图形,如下图: 把一块图形区域先全部染成白色,然后在将某个位置的像素点的颜色设置成黑色,那么,字体就显示出来了。如果我们把字体的大小限定在一个8*16的长方形区域,那么我们在这个区域内,将特定位置的像素点设置成黑色,其他...

2020-02-10 22:04:14 676

原创 动手写操作系统6----调色板

本节实现调色板功能,之前开启显存的图形模式,对于每一个像素点利用8位数字来表示颜色,可以得到256种颜色,颜色丰富度不够,因此使用调色板功能来增强颜色显示,使用RGB模式,表示一个RGB颜色需要24位数。调色板功能简单实现 调色板原理:把多种RGB颜色的24位数值放入到一个数组中,原来的八位数不再对应一个颜色值,而是变成这个数组的下标,硬件在显示像素颜色时,从...

2020-02-09 16:47:08 1088

原创 动手写操作系统5----C语言实现绘制系统界面

本节实现C语言与汇编互相调用,利用C语言实现系统界面绘制功能。之前显示字符串等功能都是使用显卡的字符界面模式,接下来需要打开显卡的图形模式,打开显卡图形模式需要使用BIOS INT 0x10中断 ;设置屏幕色彩模式 mov al, 0x13 mov ah, 0 INT 0x10其中al 的值决定了要设置显卡的色彩模式,下面是一些常用的模式设置:0x0...

2020-02-09 14:10:25 2995

原创 MySQL实战45讲学习笔记----join原理与优化

join语句执行原理NLJ,SNL,BNL,BKA算法创建两个表t1和t2,存储过程idata()往表t2里插入了1000行数据,在表t1里插入的是100行数据。CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY K...

2020-02-09 09:43:01 900

原创 动手写操作系统4----实现保护模式

这里实现引导区和内核区分离以及保护模式功能。1.引导区和内核区分离实现 前面实现制作虚拟软盘,引导扇区写入代码来实现helloworld,系统启动来加载软盘的引导扇区即第一个扇区,由于第一个扇区只有512Byte,而操作系统内核必定大于512B,因此一般都将引导扇区作为内核加载器来使用,将操作系统代码放置于软盘的后续扇区中,当系统启动时,首先加载引导扇区,由引导扇...

2020-02-08 14:12:01 682

原创 MySQL实战45讲学习笔记----查询结果返回过程分析

全表扫描时,客户端查询服务端数据库中大量数据,查询结果是如何返回给客户端的。全表扫描对server层的影响mysql -h$host -P$port -u$user -p$pwd -e "select * from db1.t" > $target_fileInnoDB的数据是保存在主键索引上的,所以全表扫描实际上是直接扫描表t的主键索引。这条查询语句由于没有其他的判断条件,...

2020-02-08 10:04:32 1531

原创 MySQL实战45讲学习笔记----误删数据

与MySQL相关的误删数据分类如下: 使用delete语句误删数据行; 使用drop table或者truncate table语句误删数据表; 使用drop database语句误删数据库; 使用rm命令误删整个MySQL实例 误删行如果是使用delete语句误删了数据行,可以用Flashback工具通过闪回把数据恢复回来。Flashback恢复数...

2020-02-08 09:41:22 312

原创 动手写操作系统3----软盘读写逻辑实现

系统从软盘启动,加载软盘第一个扇区作为引导扇区来加载操作系统,第一个扇区大小为512byte,一般用来跳转到操作系统代码起始处,第一个扇区称为引导区,现在来研究一下软盘的物理结构,引导扇区的数据格式以及软盘的读写逻辑实现。软盘物理结构软盘的物理结构,以及软盘的数据读取方法 软盘的物理结构如上图,一个盘面被划分成若干个圆圈...

2020-02-07 17:09:57 1751

原创 动手写操作系统2----环境搭建&OS HELLO WORLD

利用virtualBox虚拟机来模拟操作系统运行过程,主要使用工具1.virtualBox2.Ubuntu在windows上安装virtualBoxhttps://www.virtualbox.org/wiki/Downloads在virtualBox上安装ubuntu操作系统https://ubuntu.com/download 可以下载最新桌面版Ubuntu 19...

2020-02-07 11:40:19 473

原创 MySQL实战45讲学习笔记----读写分离主备延迟

一主多从主要应用与读写分离,一般情况下写主库,从多个从库读数据,主库与从库之间进行数据同步,但是由于主从同步之间有延时,这样在主库写完数据,从从库查询数据可能会出现过期读问题。读写分离的基本结构客户端直连 图1 读写分离基本结构读写分离的主要目标就是分摊主库的压力。图1中的结构是客户端(client...

2020-02-07 09:06:15 389

原创 动手写操作系统1----学习资源整理

最近学习了《30天自制操作系统》一书,深受启发,想自己也玩一下操作系统,之前也简单学习过,但是只是停留在表面,现在想动手实践一下,为此先总结有关操作系统的一些学习资源,个人觉得要想学习和理解好操作系统应该首先掌握好一下课程:1.计算机组成原理2.C语言基础3.汇编语言基础4.操作系统原理计算机组成原理参考资料1.计算机组成原理 ...

2020-02-06 16:17:00 638

原创 MySQL实战45讲学习笔记----一主多从主备切换问题

在一主多从架构下,主库故障后的主备切换问题 图1 一主多从基本结构 图2主库发生故障,主备切换后的结果图中,虚线箭头表示的是主备关系,也就是A和A’互为主备, 从库B、C、D指向...

2020-02-06 09:43:01 840 1

原创 MySQL实战45讲学习笔记----备库并行复制

主备延迟的原因有备库机器性能差 、备库压力大以及大事务的影响,同时还有备库的并行复制能力的影响,偶发性的查询压力对备库延迟的影响一般是分钟级的,而且在备库恢复正常以后都能够追上来。但是,如果备库执行日志的速度持续低于主库生成日志的速度,那这个延迟就有可能成了小时级别。而且对于一个压力持续比较高的主库来说,备库很可能永远都追不上主库的节奏。备库并行复制机制主备同步过程 ...

2020-02-06 09:12:58 302

原创 MySQL实战45讲学习笔记----主备切换

MYSQL高可用原理 主备切换的过程以及问题解决总结。在一个主备关系中,每个备库接收主库的binlog并执行。正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是,MySQL要提供高可用能力,只有最终一致性是不够的。主要介绍主备延迟的原因、解决策略以及主备切换时机的判断。双M结构的主备切换流程图 ...

2020-02-05 09:44:19 3133

原创 MySQL实战45讲学习笔记----主从同步

binlog可以用来归档,也可以用来做主备同步,MYSQL几乎所有的高可用架构,都直接依赖于binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。MySQL主备的基本原理如图1所示就是基本的主备切换流程。 图 1 MySQL主备切换流程在状态1中,客户端的读写都直接...

2020-02-05 09:18:00 244

原创 MySQL实战45讲学习笔记----binlog和redo log写入机制

只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复。binlog的写入机制事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。一个事务的binlog是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。这就涉及到了binlog cache的保存问题。系统给binlo...

2020-02-04 12:01:56 974 1

原创 MySQL实战45讲学习笔记----性能优化2

业务高峰期,生产环境的MySQL压力太大,没法正常响应,需要短期内、临时性地提升一些性能。短连接风暴正常的短连接模式就是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重连。如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然暴涨的情况。MySQL建立连接的过程,成本是很高的。除了正常的网络连接三次握手外,还需要做登录权限判断和获得这个连接的数据读写权限。在数据库压力比...

2020-02-04 11:29:28 240

原创 MySQL实战45讲学习笔记----加锁规则

参考资料:MySQL实战45讲--林晓斌 https://www.cnblogs.com/wangjiming/p/10410904.html学习一下InnnoDB在可重复读隔离级别下的加锁规则,基于mysql版本 5.x系列<=5.7.24,8.0系列 <=8.0.13可重复读隔离级别下加锁规则next-key lock = 间隙锁 + 行锁 原则1:加锁的基...

2020-02-03 10:28:27 584 1

原创 MySQL实战45讲学习笔记----幻读

幻读 在可重复读级别下,指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。InnoDB是用行锁和间隙锁来解决幻读问题的。建表和初始化语句如下CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PR...

2020-02-03 09:53:56 213

原创 MySQL实战45讲学习笔记----查询性能优化1

分享一些由于锁等待而导致查询性能慢的情况 MDL锁 flush 行锁 一致性读构造一个表,有两个字段id和c,在里面插入了10万行记录。mysql> CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;...

2020-02-01 09:41:47 326

原创 MySQL实战45讲学习笔记----索引2

对索引字段做函数操作,可能会破坏索引值的有序性,优化器放弃索引搜索功能。总结一些由于直接或者间接对于索引字段函数操作而导致索引失效的情况条件字段函数操作一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。表的建表语句如下:mysql> CREATE TABLE `tradelo...

2020-02-01 09:29:05 322

openjdk编译过程日志记录

具体编译过程可以参考https://blog.csdn.net/u014106644/article/details/89316483

2019-04-17

多线程应用

多线程的应用,采用C++编程实现两个不同进程的实现

2015-03-17

空空如也

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

TA关注的人

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