题目描述 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。 注意: 你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 …

2021年9月15日 0条评论 70点热度 1人点赞 agedcat_xuanzai 阅读全文

Redis是内存数据库,它所有的数据都保存在内存里面。如果服务器宕机,服务器中的数据就会丢失。为了解决这个问题,Redis提供了持久化的功能,可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。 Redis的持久化方法分为RDB持久化和AOF持久化两种。 RDB持久化 redis中的RDB持久化方法是以数据快照的方式将某个时间点上的数据库状态保存到一个RDB文件中。 持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过这个文件可以还原生成RDB文件时的数据库状态。 这两个过程如下图: 创建…

2021年9月14日 0条评论 74点热度 2人点赞 agedcat_xuanzai 阅读全文

题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 = "2", num2 = "3" 输出: "6" 示例 2: 输入: num1 = "123", num2 = "456" 输出: "56088" 说明: num1 和 num2 的长度小于110。 num1 和 num2 只包…

2021年9月9日 0条评论 106点热度 2人点赞 agedcat_xuanzai 阅读全文

链表是一种常用的数据结构,因为Redis使用的C语言并没有内置这种数据结构,所以Redis构建了自己的链表实现。 链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。 链表的实现 每个链表节点使用一个 adlist.h/listNode 结构来表示: typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value; } listNode; 多个 li…

2021年9月7日 0条评论 74点热度 1人点赞 agedcat_xuanzai 阅读全文

Redis中的字符串的底层实现并没有简单的使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串的数据结构来表示字符串。 SDS的作用主要有两个:其一是用来保存数据库中的字符串值;其二是被用作缓冲区,比如AOF模块中的AOF缓冲区以及客户端状态中的输入缓冲区。 SDS的定义 SDS结构的定义如下: struct sdshdr{ //记录buf数组中已经使用字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用于保存字符串 …

2021年9月7日 0条评论 134点热度 2人点赞 agedcat_xuanzai 阅读全文

题目描述 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。 例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制…

2021年9月6日 0条评论 112点热度 2人点赞 agedcat_xuanzai 阅读全文

题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 示例 2: 输入:[2,7,9,3…

2021年9月2日 0条评论 124点热度 2人点赞 agedcat_xuanzai 阅读全文

事务概述 事务是数据库中的一个重要概念,也是数据库系统区别于文件系统的重要特性之一。事务是访问并更新数据库中各种数据项的一个程序执行单元。事务可由一条SQL语句组成,也可以由多条SQL语句组成。事务会把数据库从一种一致状态转换到另一种一致状态。在数据库提交工作时,可以确保要么所有的修改都已经完成了,要么所有的修改都没有做,并且保存了事务开始前的状态,以便可以回到开始的状态。 事务包含四个(ACID)特性: 原子性(atomicity) 原子性是指事务是一个不可分割的执行单元。只有使事务中所有的数据库操作都执行成功,…

2021年9月1日 0条评论 138点热度 1人点赞 agedcat_xuanzai 阅读全文

事务的隔离性的提出是为了保证在多用户并发的时候不出现问题,这也就是说如果不保证事务的隔离性的话一定会出现问题。事实上,事务的隔离级别划分为: 读未提交(READ UNCOMMITTED) 读提交 (READ COMMITTED) 可重复读 (REPEATABLE READ) 串行化 (SERIALIZABLE) 除了最后一个级别串行化外,其他级别都会出现一些问题。 需要解决的问题 脏读 脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并…

2021年9月1日 0条评论 148点热度 2人点赞 agedcat_xuanzai 阅读全文

Linux 系统为我们提供五种可用的 IO 模型: 阻塞式 IO 模型 非阻塞式 IO 模型 IO 多路复用模型 信号驱动 IO 模型 异步 IO 模型 IO处理过程 在聊IO模型之前,需要先了解一下Linux系统是怎么进行IO处理的: 当某个程序或已存在的进程/线程(后文将不加区分的只认为是进程)需要某段数据时,它只能在用户空间中属于它自己的内存中访问、修改,这段内存暂且称之为app buffer。假设需要的数据在磁盘上,那么进程首先得发起相关系统调用,通知内核去加载磁盘上的文件。但正常情况下,数据只能加载到内核…

2021年8月25日 0条评论 138点热度 3人点赞 agedcat_xuanzai 阅读全文
1234513