队列和Hash
队列和Hash 1. LeetCode 232. 用栈实现队列 题目地址:LeetCode 解题思路: 加入队尾 push() : 将数字 val 加入栈 A 即可 获取队首元素 peek() : a. 当栈 B 不为空: B 中仍有已完成倒序的元素,因此直接返回 B 的栈顶元素 b. 否则,当 A 为空: 即两个栈都为空,无元素,因此返回…
应用层
应用层 1. 概述 我们在浏览器的地址中输入某个网站的域名后,就可以访问该网站的内容,这个就是万维网 WWW 应用,其相关的应用层协议为超文本传送协议 HTTP 用户在浏览器地址栏中输入的是“见名知意”的域名,而 TCP/IP 的网际层使用 IP 地址来表示目的主机,从域名到 IP 地址的装转换,由属于应用层范畴的域名系统DNS,在后台帮用户完成 …
二叉树
二叉树 1. LeetCode 102. 二叉树的层序遍历 题目地址:LeetCode [ [3], [9,20], [15,7] ] 解题思路: 特例处理:当根节点为空,则返回空列表[] 初始化:打印结果列表res = [],包含根节点的队列 queue = [root] BFS 循环:当队列 queue 为空时跳出 a. 新建一个临时列表 …
栈
栈 1. LeetCode 20. 有效的括号 题目地址:LeetCode 解题思路: 创建一个栈(这里用 Stack<Character> 类型的 stack 变量)用来存储遍历过程中遇到的开括号; 遍历输入字符串 s 中的每个字符 c; 如果 c 是开括号('('、'{' 或 '['),则将其压入栈 stack; 如果 c 是闭括号…
运输层
运输层 1. 概述 之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程 如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议 进程之间的通信 从通信和…
数组
数组 1. LeetCode 896. 单调数列 题目地址:LeetCode /** * 一次遍历 * * @param nums * @return */ public boolean isMonotonic(int[] nums) { boolean inc = true, dec = true; int n = nums.length; fo…
日志
日志 我们在讲解数据库事务时,讲过两种日志:重做日志、回滚日志 对于线上数据库应用系统,突然遭遇数据库宕机怎么办?在这种情况下,定位宕机的原因就非常关键。我们可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息,包括了错误、警告和注释等信息。比如:从日志中发现某个连接中的 SQL 操作发生了死循环,导致内存不足,被系统强行终止了。明确了…
多版本并发控制
多版本并发控制 1. 什么是 MVCC MVCC(Multi Version Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的 并发控制 。这项技术使得在 InnoDB 的事务隔离级别下执行 一致性读 操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它…
锁
锁 1. 概述 锁 是计算机协调多个进程或线程 并发访问某一资源 的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),我们就需要保证这个数据在任何时刻 最多只有一个线程 在访问,保证数据的 完整性 和 一致性 。在开发过程中加锁是为了保证数据的一致性,这个思想在数据库领域中同样…
事务
事务 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失 1. 概述 1.1 存储引擎支持情况 SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务 能看出在 My…