摘要: 1. 简介 本文介绍使用sync.Once来实现单例模式,包括单例模式的定义,以及使用sync.Once实现单例模式的示例,同时也比较了其他单例模式的实现。最后以一个开源框架中使用sync.Once实现单例模式的例子来作为结尾。 2. 基本实现 2.1 单例模式定义 单例模式是一种创建型设计模式,它 阅读全文
posted @ 2023-03-16 20:02 菜鸟额 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 1. 简介 本文的主要内容是介绍Go中Mutex并发原语。包含Mutex的基本使用,使用的注意事项以及一些实践建议。 2. 基本使用 2.1 基本定义 Mutex是Go语言中的一种同步原语,全称为Mutual Exclusion,即互斥锁。它可以在并发编程中实现对共享资源的互斥访问,保证同一时刻只有 阅读全文
posted @ 2023-03-15 21:36 菜鸟额 阅读(172) 评论(0) 推荐(0) 编辑
摘要: redo log用途 1. 用途 保证数据的更新操作不丢失,同时保证了性能 2. 如何没有redo log,如何保证数据库的更新操作不会由于数据库的宕机而丢失? 对数据库进行修改,应该是先从磁盘读取数据到内存中,然后在内存中对数据进行修改,然后再将数据写入到磁盘中,这样才能数据库 才能返回数据修改成 阅读全文
posted @ 2020-11-29 11:40 菜鸟额 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 这一章的内容是加载内核程序和用户程序的基本流程 关于程序的相关信息一般是放在文件的开头,程序本来就是从最开头的读取,所以放在开头也就符合一般的思维习惯,这本章中,作者创建了一个简单的文件头,用于存储该程序的信息,用于加载程序的使用 在这一章中,作者代码演示的加载内核和用户程序的方式可能与真正的操作系 阅读全文
posted @ 2019-12-12 17:11 菜鸟额 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 1. 简单查询 查询所有字段: SELECT * FROM 表名 查询特定字段: SELECT 字段列表 FROM 表名 2. 查询显示行号 - 在字段列表中加入(@rownum := @rownum + 1) AS rownum - 在FROM子句中加入 (select @rownum:=0)r 阅读全文
posted @ 2019-12-12 13:35 菜鸟额 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 1. 在保护模式下,对每个段的内存访问的偏移量都不能超过描述符中声明的段的偏移量2. 对于数据段和代码段,实际使用段界限为允许访问的最高端地址,对于栈段,实际使用的段界限就是不允许访问的最低端地址 3. 当段的粒度以4KB为单位,描述符的实际段界限为: (描述符的段界限 + 1) * 4KB - 1 阅读全文
posted @ 2019-12-11 22:55 菜鸟额 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 在这一章的主要任务就是从实模式进入保护模式 - 首先创建几个初始化描述符,确保在进入保护模式之后程序能够正常运行, - 将初始化描述符的内容放到GDT表中,此时虽然将GDT表的基地址和大小加载到GDT寄存器中,但是GDT表所在位置已经定义好了 - 接下来将GDT表所在位置和大小全部加载到GDT寄存器 阅读全文
posted @ 2019-12-11 20:04 菜鸟额 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 1. 创建视图 CREATE VIEW 视图名 AS 查询语句 [WITH CHECK OPTION] - 这里WITH CHECK OPTION约束是要求插入或者更新要满足查询语句where后面的条件 CREATE VIEW test AS SELECT * FROM test_db WHERE 阅读全文
posted @ 2019-12-11 12:52 菜鸟额 阅读(1956) 评论(0) 推荐(0) 编辑
摘要: 1. 查看约束条件 - MySQL: SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where table_name = 'book'; - Oracle: SELECT * where table_name = '表名';2. 使约束生效 阅读全文
posted @ 2019-12-10 19:34 菜鸟额 阅读(5933) 评论(0) 推荐(0) 编辑