Run-dream Blog

Try Catch Finally

终身成长

理论 两种思维模式 从潜意识或者信念的角度来说, 固定型思维认为能力是固定的 有些东西你生来没有,以后也不会有 而成长型思维则认为能力可以在实践中成长。 人的正确思想是从哪里来的?是从天上掉下来的吗?不是。是自己头脑里固有的吗?不是。人的正确思想,只能从社会实践中来,只能从生产斗争、阶级斗争和科学实验这三项实践中来。 两种类型的人追求的价值是不一致的。 固...

跳表的go语言实现

跳表是什么? 顾名思义,跳表就是 跳 + 表,也就是 多级索引 + 链表。设计的目的是为了解决链表的快速查询的问题。 设计的基础思路就是将多层链表的思想运用到链表上,但是和二叉查找不同的地方在于跳表的索引是基于概率的。 具体的说: 假设现在有一个链表,需要查找到某个值为k的节点。只能遍历整个链表,时间复杂度为 O(n)。 在链表上让每相邻两个节点增加一个指针,让指针指向下下...

从nodejs到redis

从单线程模型说起 真的只是单线程吗? 我们知道 Node.js 和 Redis 都是部分基于单线程模型的。 具体来说, Node.js 只有一个 JavaScript 线程,但是在libuv中仍然存在多个I/O线程。 而 Redis 对核心网络模型和键值的读写是单线程的。Redis v4.0 为了解决删除超大的键值对引起的阻塞问题,引入多线程处理异步任务。Redis v6.0 正式在...

当我们在谈论git时,我们在谈论什么

什么是 Git 简而言之,Git 是一种分布式版本控制系统。 和集中式的版本控制系统 SVN 进行比较,分析这两个关键词: 版本控制 SVN是增量式的版本控制,它不会把各个版本的副本都完整的保存下来,而只会记录下版本之间的差异(diff),然后按照顺序更新或者恢复特定版本的数据。这使得服务端的存储量会非常低。 而Git 是基于快照的版本控制,其实现原...

索引和倒排索引

MySql 索引 索引类似于查字典时,根据页码可以快速的找到整页的数据。 InnoDB的每个索引对应一颗B+树,表本身就是以主键为索引的B+树。节点的大小是页的大小。 因此,索引可以分为两类: 聚集索引 主键,包含了整列的数据 二级索引 非主键索引的叶子节点内容是主键的值。 因此通过非主键索引的查询需要多搜索一次表,这...

Linux虚拟化和容器化

虚拟化 目的 解决资源大小不灵活,资源申请不灵活,资源复用不灵活的问题 方式 完全虚拟化 虚拟化软件会模拟假的 CPU、内存、网络、硬盘,导致的问题是慢 硬件辅助虚拟化 CPU 新增虚拟机状态的标志位,直接在在 CPU 上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这...

Linux网络系统

网络分层 OSI 的标准七层模型 业界标准的 TCP/IP 模型 Linux实际上使用的是这个 二层到四层都是在 Linux 内核里面处理的,应用层例如浏览器、Nginx、Tomcat 都是用户态的。 内核里面对于网络包的处理是不区分应用的。 socket不属于任何一个网络分层,它是操作系统的概念。是用户态空间跟内核态空间的桥梁。 T...

Linux进程通信

IPC 匿名管道 ps -ef | grep <key> 用完了就销毁了 命名管道 mkfifo <pipename> # 此时命令不会结束 echo 'content' > <pip...

Linuxio系统

IO系统基本结构 CPU 并不直接和设备打交道,它们中间有一个叫作设备控制器 所有设备都在 /dev/ 文件夹下面创建一个特殊的设备文件。这个设备特殊文件也有 inode,但是它不关联到硬盘或任何其他存储介质上的数据,而是建立了与某个设备驱动程序的连接。 对于设备文件,ls 出来的内容如果是字符设备文件,则以 c 开头,如果是块设备文件,则以 b 开头。 输入输出设备分类 ...

Linux文件管理

基本功能 按照块来存储 使用inode进行索引 缓存热点文件 用文件夹来组织 用文件描述符来在内核记录使用情况 相关命令 # 格式化 分区文件系统 最大支持2T fdisk -l # 超过2T使用 parted # 挂载 将文件系统挂载到目录下 mount unmount 硬盘文件系统 inode 与块的存储 块...