自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天行健,君子以自强不息

守住心灵的宁静

  • 博客(283)
  • 资源 (1)
  • 收藏
  • 关注

转载 MySQL的锁解析

目录背景MVCC:Snapshot Read vs Current ReadCluster Index:聚簇索引2PL:Two-Phase LockingIsolation Level一条简单SQL的加锁实现分析组合一:id主键+RC组合二:id唯一索引+RC组合三:id非唯一索引+RC组合四:id无索引+RC组合五:id主键+RR组合六:id唯一索...

2019-08-20 00:33:16 322

Nginx源码解析——连接模块

由于 Nginx 工作在 master-worker 多进程模式,若所有 worker 进程在同一时间监听同一个端口,当该端口有新的连接事件出现时,每个worker 进程都会调用函数ngx_event_accept 试图与新的连接建立通信,即所有worker 进程都会被唤醒,这就是所谓的“惊群”问题,这样会导致系统性能下降。幸好在Nginx 采用了ngx_accept_mutex 同步锁机制,即只...

2019-08-05 03:15:12 489

原创 C++并发编程——同步和并发容器及工具

 ConcurrentHashMap的加锁策略:并不是每个方法都在同一个锁上同步并使每次只能有一个线程访问容器,而是使用粒度更细的加锁机制来实现更大程度的共享,即分段锁机制。ConcurrentHashMap 与其他并发容器一起增强了同步容器类:他们提供的迭代器不会抛出 ConcurrentModificationException ,因此不需要在迭代过程中对容器加锁。   Co...

2019-08-04 02:20:26 799

原创 C++并发编程——线程安全,对象共享和组合

目录线程安全性对象的共享线程封闭对象的发布线程安全性无状态对象一定是线程安全的。要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。线程安全:当多个线程访问某个类时,这个类始终都表现出正确的行为,那么这个类是线程安全的。“重入”意味着获取锁的操作的粒度是”线程”,而不是调用。重入的一种实现方法是,为每一个锁关联一个获取计数值和一个所有者线程。当计...

2019-08-04 00:40:40 523

转载 C++并发编程——闭锁CountDownLatch实现

闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态。闭锁的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当到达结束状态时,这扇门会打开并允许所有的线程通过。当闭锁到达结束状态后,将不会再改变状态,因此这扇门将永远保持打开状态。闭锁可以用来确保某些活动直到其他活动都完成后才继续执行。CountDownLatch是一种灵活的闭锁实现,可以在上述...

2019-08-03 03:44:34 1579

原创 【LeetCode】Best Time to Buy and Sell Stock总结

LeetCode上买卖股票的问题如下:121. Best Time to Buy and Sell Stock 122. Best Time to Buy and Sell Stock II 123. Best Time to Buy and Sell Stock III 188. Best Time to Buy and Sell Stock IV 309. Best Time to...

2019-07-29 00:39:02 254

原创 Nginx源码解析——线程池

nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影响。其实,nginx代码中也提供了一个thread_pool(线程池)的核心模块来处理多任务的。主要放在ngx_thread_pool.c文件中。线程池的数据结构task结构,为单链表组成任务队列,主要成员是event事件和handler回调方法id每次pu...

2019-07-23 02:26:48 722

原创 Nginx源码结构

Nginx源码文件主要放在src文件夹下:.├── core├── event├── http├── mail├── misc├── os└── stream输出结果显示有 6 个目录文件,以下是这些目录文件的功能:core :Nginx的核心源代码,包括常用数据结构的以及Nginx 内核实现的核心代码; event:Nginx事件驱动模型,以及定时器的实现相关...

2019-07-19 02:35:51 408

原创 Nginx源码解析——内存池

目录1.内存池的数据结构2.内存池的操作.创建内存池:销毁内存池重置内存池内存分配cleanup资源方法:内存池就是为了降低程序员犯错几率的: 模块开发者只需要关心内存的分配, 而释放则交由内存池来负责。Nginx内存池思路:把内存分配归结为大内存分配和小内存分配。若申请的内存大小比同页的内存池最大值 max 还大,则是大内存分配,否则为小内存分配。大块内存的分...

2019-07-17 02:46:51 279

原创 STL源码剖析——hash_map解析

目录hash table 的节点定义:hashtable 的迭代器:hashtable 的数据结构rehash和插入操作复制与整体删除C++实现的hashmap简易类STL的的hash_set,hash_map都是基于hash_table实现的,SGI STL 中哈希表采用链接法解决冲突。结构中维护了一个 vector,vector 中每一个元素称为一个桶(bucket...

2019-07-09 02:01:41 654

原创 STL源码剖析——vector的实现

目录vector的数据结构vector的构造与析构vector的插入与删除vector的其他操作reserve()与resize()的区别vector的简单实现vector的扩容系数vector的数据结构vector采用简单的线性连续空间。以两个迭代器start和end分别指向头尾,并以迭代器end_of_storage指向容量尾端。容量可能比(尾-头)还大,多...

2019-07-07 03:17:13 283

原创 STL源码剖析——空间配置器

目录构造和析构基本工具:construct() 和 destroy()空间的配置与释放:std::alloc二级空间配置器简述空间配置函数allocate()空间释放函数deallocate()重新填充free lists内存池多线程环境下内存池互斥访问小结在STL中,空间配置在C++的基础上增加了一些特性。STL allocator 将这两个阶段分开操...

2019-07-07 02:17:08 271

原创 MySQL索引解析

目录1.MyISAM的索引实现2.InnoDB的索引模型3.B-Tree和B+Tree分析4.覆盖索引5.最左前缀原则6.唯一索引和普通索引的性能差异索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,本质上就是用于提高读写效率的数据结构,主要有哈希表、有序数组和搜索树。这里主要讲MyISAM和InnoDB两个存储引擎的索引实现方式。1.MyISAM的索引实...

2019-07-04 02:41:52 199

原创 MySQL事务隔离解析

目录1.隔离级别2.事务隔离的实现3.事务的启动方式4.“快照”在MVCC里的实现5.事务更新的逻辑1.隔离级别SQL标准的事务隔离级别包括: 读未提交( read uncommitted) 、读提交( read committed) 、 可重复读( repeatable read) 和串行化( serializable )。读未提交是指, 一个事务还没提交时,...

2019-07-02 23:52:32 141

原创 【LeetCode】739. Daily Temperatures

Given a list of daily temperaturesT, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which...

2019-07-01 02:00:17 126

原创 【LeetCode】901. Online Stock Span

Write a classStockSpannerwhich collects daily price quotes for some stock, and returns thespanof that stock's price for the current day.The span of the stock's price todayis defined as the maxi...

2019-07-01 01:55:54 177

原创 【LeetCode】42. Trapping Rain Water

Givennnon-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.The above elevation map is represented by array...

2019-07-01 01:41:29 174

原创 【LeetCode】Largest Rectangle in Histogram

Givennnon-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.Above is a histogram where width of ea...

2019-07-01 01:31:04 197 1

原创 【LeetCode】Container With Most Water

Givennnon-negative integersa1,a2, ...,an, where each represents a point at coordinate (i,ai).nvertical lines are drawn such that the two endpoints of lineiis at (i,ai) and (i, 0). Find two...

2019-07-01 01:14:32 145

原创 【LeetCode】239. Sliding Window Maximum

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window ...

2019-07-01 01:00:58 105

原创 【LeetCode】904. Fruit Into Baskets

In a row of trees, the i-th tree produces fruit with type tree[i].You start at any tree of your choice, then repeatedly perform the following steps:Add one piece of fruit from this tree to your b...

2019-07-01 00:53:42 175

原创 【LeetCode】Longest Substring with At Most Two Distinct Characters

给定一个字符串 s ,找出至多包含两个不同字符的最长子串 t 。示例 1:输入: "eceba"输出: 3解释: t 是 "ece",长度为3。示例 2:输入: "ccaabbb"输出: 5解释: t 是 "aabbb",长度为5。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-substrin...

2019-07-01 00:47:50 204

原创 【LeetCode】Minimum Window Substring

Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).Example:Input: S = "ADOBECODEBANC", T = "ABC"Output: "BANC"Note:I...

2019-07-01 00:26:19 128

原创 【LeetCode】713. Subarray Product Less Than K

Your are given an array of positive integers nums.Count and print the number of (contiguous) subarrays where the product of all the elements in the subarray is less than k.Example 1:Input: nums ...

2019-07-01 00:17:05 146

原创 【LeetCode】862. Shortest Subarray with Sum at Least K

Return the length of the shortest, non-empty, contiguous subarray of A with sum at least K.If there is no non-empty subarray with sum at least K, return -1. Example 1:Input: A = [1], K = 1Ou...

2019-06-30 23:57:03 157

原创 【LeetCode】378. Kth Smallest Element in a Sorted Matrix

Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.Note that it is the kth smallest element in the sorted order, not ...

2019-06-30 23:24:32 128

原创 【LeetCode】410. 分割数组的最大值

给定一个非负整数数组和一个整数m,你需要将这个数组分成m个非空的连续子数组。设计一个算法使得这m个子数组各自和的最大值最小。注意:数组长度n满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是...

2019-06-30 22:42:39 359

原创 【LeetCode】1040. 移动石子直到连续 II

在一个长度无限的数轴上,第 i 颗石子的位置为stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作端点石子。每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。值得注意的是,如果石子像stones = [1,2,5]这样,你将无法移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子...

2019-06-30 22:30:39 689

原创 【LeetCode】813. 最大平均值和的分组

我们将给定的数组A分成K个相邻的非空子数组 ,我们的分数由每个子数组内的平均值的总和构成。计算我们所能得到的最大分数是多少。注意我们必须使用 A 数组中的每一个数进行分组,并且分数不一定需要是整数。示例:输入: A = [9,1,2,3,9]K = 3输出: 20解释: A 的最优分组是[9], [1, 2, 3], [9]. 得到的分数是 9 + (1 + 2 + ...

2019-06-30 20:22:24 232

原创 MySQL更新语句执行过程

跟查询流程不一样的是,更新流程还涉及两个重要的日志模块: redo log(重做日志)和 binlog(归档日志)。重要的日志模块: redo log在MySQL里如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程IO成本、查找成本都很高。为了解决这个问题, MySQL的设计者就用了WAL技术, WAL的全称是WriteAhead Logging,它的关键...

2019-06-22 02:09:09 768

原创 MySQL查询语句执行过程

本文主要分析执行一条sql语句所经历的过程。mysql的逻辑架构图如下:MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模...

2019-06-21 02:10:55 420

原创 【LeetCode】SQL语句题解(一)

编写一个 SQL 查询,查找Person 表中所有重复的电子邮箱。示例:+----+---------+| Id | Email |+----+---------+| 1 | [email protected] || 2 | [email protected] || 3 | [email protected] |+----+---------+根据以上输入,你的查询应返回以下结果:+---------+| Emai...

2019-06-17 22:02:27 326

原创 SQL语句join用法

SQL join 用于把来自两个或多个表的行结合起来。下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。首先,连接的结果可以在逻辑上看作是由SELECT语句指定的列组成的新表。左连接与右连接的左右指的是以两张表中的哪一张为基准,它们都是外连接。外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找...

2019-06-17 19:46:59 723

原创 【LeetCode】4. 寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是...

2019-06-15 18:49:08 272

原创 深入理解epoll原理

这里先补充一下三种IO多路复用的应用场景1. select 应用场景select 的 timeout 参数精度为 1ns,而 poll 和 epoll 为 1ms,因此 select 更加适用于实时性要求比较高的场景,比如核反应堆的控制。select 可移植性更好,几乎被所有主流平台所支持。2. poll 应用场景poll 没有最大描述符数量的限制,如果平台支持并且对实时性要求不高,应...

2019-06-03 01:57:07 3452

原创 Linux内存管理解析(一)

虚拟内存管理:在多任务操作系统中,每个进程都运行在属于自己的内虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(通过设置Large-Address-Aware Executables标志也可为1:3)。 虚拟地址通过页表(Page ...

2019-05-29 00:38:58 253

原创 Redis阅读笔记

Redis数据结构类型SDS字符串结构:buf,len,free;内存分配:采用空间预分配,如果需要扩展空间时对于小于1M的分配修改后的len同样大的free,如果free够则不用分配;大于的分配多1M,空间预分配减少连续执行字符串增长操作所需的内存重分配次数;释放空间:惰性释放,不立即释放空间用free保存释放空间优点:跟C字符串相比,获取长度O1,不会造成缓冲区溢出,修改字符串长度...

2019-04-11 00:01:03 293

原创 Segment tree——线段树

线段树一颗线段树的构造就是根据区间的性质的来构造的, 如下是一棵区间[0, 3]的线段树,每个[start, end]都是一个二叉树中的节点。[0, 3]的线段树 区间划分大概就是上述的区间划分。可以看出每次都将区间的长度一分为二,数列长度为n,所以线段树的高度是log(n),这是很多高效操作的基础。上述的区间存储的只是区间的左右边界。我们可以将区间的最大值加入进来,也就是树...

2018-11-18 23:48:27 234

原创 【LeetCode】Maximal Rectangle

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.Example:Input:[ ["1","0","1","0","0"], ["1","0","1&quo

2018-11-18 23:35:15 149

原创 【LeetCode】Add and Search Word - Data structure design

Design a data structure that supports the following two operations:void addWord(word)bool search(word)search(word) can search a literal word or a regular expression string containing only lette...

2018-11-11 00:56:04 144

网易新闻客户端

新闻阅读客户端,界面优美,可离线阅读,代码量大,对于android开发者和android学习人员都有很大的帮助

2015-04-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除