02 2020 档案

摘要:在多线程编程中,锁是常用地控制并发的机制,对于临界区的资源,需要保证线程之间互斥地访问。 1. 可重入锁 可重入锁,也叫做递归锁,指的是多次对同一个锁进行加锁操作,都不会阻塞线程。实现思路:记录当前锁正在被哪个线程使用,采用计数来统计lock和unlock的调用次数。正常情况下,lock和unloc 阅读全文
posted @ 2020-02-26 19:51 wengle 阅读(967) 评论(3) 推荐(1) 编辑
摘要:乐观锁、悲观锁是从其使用角度来看。(PS:比如ReentrantLock内部实现用到了CAS和自旋来提高性能,但是从其使用角度来看,是用到了悲观锁的思想。) 1. 乐观锁 乐观锁:顾名思义就是在操作时很乐观,认为操作不会产生并发问题(不会有其他线程对数据进行修改),因此不会上锁。但是在更新时会判断其 阅读全文
posted @ 2020-02-26 18:32 wengle 阅读(256) 评论(0) 推荐(0) 编辑
摘要:刷完了LeetCode链表相关的经典题目,总结一下用到的技巧: 1. 技巧 1. 哑节点 哑节点可以将很多特殊case(比如:NULL或者单节点问题)转化为一般case进行统一处理,这样代码实现更加简洁,优雅 2. 两个指针 链表相关的题目一般都需要用到两个指针:prev指针和cur指针 3. 头插 阅读全文
posted @ 2020-02-25 22:08 wengle 阅读(210) 评论(0) 推荐(0) 编辑
摘要:多线程同步问题,都需要用到监视器,用来监视资源是否可用。C++中使用condition_variable,Java中使用Condition来实现同步。 1. 实现思路 1. 需要有一个全局变量控制当前该哪个线程访问资源 2. 调用wait,让出资源使用权 3. 调用notify,通知线程访问资源 2 阅读全文
posted @ 2020-02-25 14:02 wengle 阅读(347) 评论(0) 推荐(0) 编辑
摘要:写博客的时候,经常会出现不知道该用哪个de的情况,所以特意查了一下,记录下来。 三个"de"最主要的功能都是连接前后两个词(或者词组),那么我们只要看它们三个分别连接什么词就可以了。 1. 地:后面是动词或形容词,前面是副词或形容词(词组),前面的词描述后面的 2. 得:前面是动词,后面是形容词,后 阅读全文
posted @ 2020-02-24 20:15 wengle 阅读(1097) 评论(3) 推荐(0) 编辑
摘要:本文介绍如何为自己的终端设置代理,从而实现在命令行中访问Google。 1. 背景 当你使用SS FQ时,大部分浏览器都可以成功访问Google,但是在命令行下执行 时,会超时失败。对于类似的这种情况,本文将解释出现这种现象的原因,并给出有效的解决方案。 2. 原因 1. 启动SS时,会创建两个代理 阅读全文
posted @ 2020-02-23 12:24 wengle 阅读(11557) 评论(2) 推荐(1) 编辑
摘要:本文主要介绍 如何设计一个高效通用的线程池 。详细说明了一个线程池由哪几部分组成,最后通过100行C++代码实现一个高效通用的线程池。 1. 线程池的基础元素 1. std::vector\ workers 2. std::queue\ tasks 3. std::mutex queue_mutex 阅读全文
posted @ 2020-02-22 16:31 wengle 阅读(696) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/lru cache/ 2. 解题思路 1. 为了增删改查都有较高的性能,使用双向链表和哈希表的组合 2. 针对LRU,哈希表对于查询和修改可以实现O(1)的时间复杂度,但是无法在O(1)时间复杂度实现删除操作 3. 双向链表 阅读全文
posted @ 2020-02-20 16:39 wengle 阅读(213) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/reorder list/ 2. 解题思路 1. 找到中间节点,从中间节点位置断开,得到两个链表 2. 对链表的后半截部分进行翻转 3. 将前半截和翻转后的后半截链表进行合并 3. 算法 1. 通过slow、fast指针找到 阅读全文
posted @ 2020-02-19 15:35 wengle 阅读(152) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/copy list with random pointer/ 2. 解题思路 2.1 映射表 1. 建立新旧节点之间的映射表:old new,来解决复制random指针 2.2 克隆链表 1. 创建一个包含新节点的克隆链表: 阅读全文
posted @ 2020-02-19 12:11 wengle 阅读(204) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/swap nodes in pairs/ 2. 解题思路 1. 利用哑节点将边界case转化为一般case,比如head为NULL或者链表只有一个节点的情况都可以被转化 2. 正常情况下,依次创建三个指针:prev,p,q, 阅读全文
posted @ 2020-02-18 21:20 wengle 阅读(185) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/remove nth node from end of list/ 2. 解题思路 1. 利用哑节点将边界case转化为一般case 2. 倒数第n个,也就是顺数第(链表总长度 n+1)个 3. 由于需要删除顺数第(总长度 阅读全文
posted @ 2020-02-16 14:34 wengle 阅读(145) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/rotate list/ 2. 解题思路 1. 对于链表涉及到反转、倒置等操作,一般都需要两个指针:prev、cur 2. 根据翻转的规则,当翻转次数刚好是链表长度list_len的整数倍时,实际上翻转后的链表和未翻转的原链 阅读全文
posted @ 2020-02-15 19:08 wengle 阅读(134) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/remove duplicates from sorted list/ 2. 解题思路 1. 删除链表节点会涉及到两个指针:prev指针和cur指针 3. 算法 1. prev指针和cur指针分别指向前两个节点 2. 从cu 阅读全文
posted @ 2020-02-15 14:04 wengle 阅读(143) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/partition list/ 2. 解题思路 1. 从头到尾的遍历天然维护着节点之间的相对位置 2. 采用两个链表分别记录小于x和大于等于x的节点 3. 算法 1. left_dummy和right_dummy分别代表两个 阅读全文
posted @ 2020-02-15 13:37 wengle 阅读(135) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/reverse linked list ii/ 2. 解题思路 1. 采用头插法进行反转 2. 利用哑节点将边界case转化为一般case 3. 算法 1. head2指针用于进行头插操作的头部指针 2. 首先,将head2 阅读全文
posted @ 2020-02-14 20:56 wengle 阅读(110) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/reverse linked list/ 2. 解题思路 1. 注意:一般情况下,反转操作需要有两个指针 2. 递归思路 1. 递归类似于栈操作的入栈和出栈,关键在于入栈哪些数据? 2. 针对这道题目,由于是反转操作,所以需 阅读全文
posted @ 2020-02-14 20:25 wengle 阅读(164) 评论(0) 推荐(0) 编辑
摘要:主要说明Linux内核中单链表操作的关键思想,需要注意的地方 1. 假设 1. 为了说明关键思想,对数据结构进行了精简 2. 数据结构定义 3. 链表操作 3.1 创建链表 1. 关键思想:链表实际上是通过next指针链接起来的,所以只需要控制next指针里存储什么地址,就可以建立节点之间的链接关系 阅读全文
posted @ 2020-02-11 19:13 wengle 阅读(475) 评论(0) 推荐(0) 编辑
摘要:1. 原题链接:https://leetcode.com/problems/add two numbers/ 2. 解题思路 1. 两个链表相加的解题思路比较直接 2. 需要注意两个链表的长度不同,有些边界情况需要考虑周到 3. 考虑进位的情况 3. 算法 3.1 直观算法 1. 首先,遍历两个链表 阅读全文
posted @ 2020-02-10 22:40 wengle 阅读(92) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示