「算法笔记」二叉树的宽度
#### 问题描述  给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。<br><p></p>  每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。<br><p></p> **示例 1**:<br> ``` 输入………
「Linux/UNIX 系统编程」信号机制:高级特性
### 一、传递、处置及处理相关的特殊信号 #### 1. SIGKILL 和 SIGSTOP  `SIGKILL`的默认行为是终止一个进程,`SIGSTOP`的默认行为是暂停一个进程。<br><p></p>  二者的默认行为均无法改变,试图通过`signal()`/`sigaction()`改变处置时总是返回错误,同时也无法将这两个信号阻塞。 > `SIGKIL………
「Linux/UNIX 系统编程」信号机制:信号处理器函数
<br> ### 一、信号处理器简介  信号处理器指当信号传递给进程时,进程响应此信号而调用运行的一个函数,其基本形式为: ```c void handler(int sig){ /* code for handler */ } ```  其中`sig`为引发调用的信号编号。<br><p></p>  当对应信号到达时,内核会派生出一个新的线程执行处理器函数,并暂停………
「Linux/UNIX 系统编程」信号机制:基本概念与使用
#### 一、信号的本质  信号是 **软件中断**,其与硬件中断的相似之处在于打断了程序执行的正常流程。<br><p></p>  信号的系统数据结构是一个唯一的 **小整数**,由 1 开始顺序展开,`<signal.h>`以`SIGxxx`形式的符号名对这些整数做了定义。<br><p></p>  信号分为两大类: - 标准信号:内核向进程通知事件; - 实时信………
「算法笔记」二叉树的最近公共祖先
#### 问题描述  给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。<br><p></p> **示例 1:**<br> <center><img src="/media/blog_image/微信截图_20201201012959814.png"></center> ``` 输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q =………
「计算机网络」HTTPS 原理及流程
 HTTP 报文都是通过明文传输的,这将带来敏感数据泄露的风险。为解决这个问题,Netscape 公司制定了 HTTPS 协议。<br><p></p>  HTTPS协议 = HTTP协议 + SSL/TLS协议: <center><img src="/media/blog_image/file_1608025528000.png" width="460px" style="m………
「算法笔记」二叉树的层序遍历
#### 问题介绍  即获取二叉树每一层的节点。<br><p></p>  如给定二叉树:`[3,9,20,null,null,15,7]`<br> <img src="/media/blog_image/file_1615516974000.png" style="margin-left:50px;margin-top:10px;margin-bottom:12px"><br………
「算法笔记」实现 LRU 缓存机制
 LRU 是 Least Recently Used 的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。<br><p></p>  LRU 缓存机制常借助双向链表实现,以下通过一道 LeetCode 算法题介绍一种 LRU 机制的实现。 <br><br> #### 问题描述  原题地址:https://leetcode-c………
「计算机网络」常见 HTTP 状态码
### 状态码分类 |状态码|类别|原因短语| |---|---|---| |1xx|信息型状态码|接受的请求正在处理| |2xx|成功状态码|请求正常处理完毕| |3xx|重定向|需要附加操作以完成请求| |4xx|客户端错误|客户端发送的请求出错,服务器无法处理| |5xx|服务器错误|服务器处理请求出错| <br><br> ### 常见状态码 #### 1. 2………
「计算机系统」虚拟内存
 为有效地管理内存,现代系统提供了对主存的抽象:虚拟内存。虚拟内存指在磁盘上虚拟出程序运行所需的内存。<br><p></p>  虚拟内存提供了三个重要能力: 1. 将主存看成磁盘的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,从而高效地使用主存; 2. 为每个进程提供一致的地址空间,从而简化内存管理; 3. 保证了每个进程的地址空间是独立的,不………
「算法笔记」0-1 背包问题
 经典的 0-1 背包问题描述如下: ``` 给你一个可装载重量为 W 的背包和 N 个物品,其中第 i 个物品的重量为 wt[i],价值为 val[i],现在让你用这个背包装物品,最多能装的价值是多少。 ```  题目中的物品不可以分割,要么装进包里,要么不装。<br><p></p>  0-1 背包问题的状态有二:当前可选的物品`n`与当前的背包容量 `w`。(将………
「算法笔记」动态规划解题模板
#### 解题思路  动态规划的一般形式是求最优解,其本质其实就是穷举法。但其目的在于缓存重叠子问题的解,用子问题的解来解决全局问题。<br><p></p>  动态规划的解题思路一般如下: - 找出问题的子结构 - 列出正确的状态转移方程,而写出正确的状态转移方程一般需要明确以下几点: 1. base case 2. 子问题的状态 3………
「数据库」组合索引
 当`WHERE`子句存在多个条件查询的时,若只对各条件字段使用单列索引,则检索时只会走某个字段上的索引(若有),因为 MySQL 只会选择它认为最有效率的单列索引,并建立中间结果集,再在中间结果集上进行后续字段的筛选,即做一个全表扫描。而在中间结果集上是无法利用索引进行检索的。<br><p></p>  因此,为了提高条件组合时的检索,可以使用组合索引。 <br> ………
「数据库」MySQL 索引与索引优化
 索引可以提高数据库的检索速度,分为 **单列索引** 与 **组合索引**。<br><p></p>  在创建索引时,需要确保该索引会频繁应用在 SQL 查询语句的条件中(一般用在`WHERE`子句中)。<br><p></p>  由于索引是以索引文件的形式保存的,故建立索引会占用磁盘空间;此外,当对表进行更新操作时(`INSERT`、`UPDATE`、`DELE………
「C++」动态内存管理
 一般在程序中用到的内存分为三种:静态内存、栈内存与堆内存。<br><p></p>  分配在静态内存或栈内存中的对象由编译器自动创建与销毁。其中,静态内存用来保存: 1. 全局变量 2. `static`对象(全局与局部) 3. 类`static`数据成员  栈对象又称自动变量,其仅在定义的程序块运行时存在,在控制流进入变量作用域时系统自动为其分配存储空间,并………
「计算机网络」网络层与 IP 协议
 网络层位于传输层与链路层之间,网络层主要的协议有: - 网际协议 IP - 地址解析协议 ARP:解决物理地址跟网络 IP 地址转换问题 - 网际控制报文协议 ICMP:错误消息通知 - 网际组管理协议 IGMP:Internet 组管理 <br> ### 一、IPv4 协议主要特点   IP 是 TCP/IP 协议体系中网络层的协议。其主要特点如下: 1. **………
「读书笔记」《程序员的自我修养:链接、装载与库》
## [第一部分] 简介 ### 1. 简介 #### 北桥南桥  计算机中,三个最重要的部件为:中央处理器 CPU、内存、I/O 控制芯片。<br><p></p>  **北桥芯片**是为了协调 CPU、内存和高速图形设备间的频率,以便它们之间可以高速地交换数据。<br><p></p>  于此同时,由于北桥芯片的速度非常高,所有相对低速的设备若直接连接到北桥,北桥同………