07 2019 档案

摘要:面向对象: 需求变换是必然的,那么尽管无法预测会发生什么,但通常可以预测哪里会发生变化,面向对象的优点之一是可以封装这些变化的区域,从而更容易的将代码与变化产生的影响隔离开。代码可以逐步演进,新代码可以影响较少的加入。经典的设计模式是可以复用的面向对象设计方法。 书的配套code分析,回头补上 1. 阅读全文
posted @ 2019-07-30 23:36 demianzhang 阅读(296) 评论(0) 推荐(0) 编辑
摘要:1. 动态规划的适用场景 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。 2. 动态规划的基本思想 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。通常许多子问题非常相似, 阅读全文
posted @ 2019-07-28 22:51 demianzhang 阅读(526) 评论(0) 推荐(0) 编辑
摘要:操作: 单点更新,区间求和 区间求和:如sum [3,10) 需要对19,5,12,26节点求和即可。 观察可知,左端点为右子节点(奇数)时直接相加,右端点为左子节点(偶数)时直接相加,两边向中间移动并求其父节点。 Refer: Codeforces blog 树状数组解法 所有的奇数位置的数字和原 阅读全文
posted @ 2019-07-27 02:26 demianzhang 阅读(261) 评论(0) 推荐(0) 编辑
摘要:随机性问题 水塘抽样算法可保证每个样本被抽到的概率相等 使用场景:从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况 Knuth洗牌算法 拿起第i张牌时,只从它前面的牌随机选出j,或从它后面的牌随机选出j交换即可 阅读全文
posted @ 2019-07-24 18:54 demianzhang 阅读(292) 评论(0) 推荐(0) 编辑
摘要:1、使用场景 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接字),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TC 阅读全文
posted @ 2019-07-23 13:22 demianzhang 阅读(316) 评论(0) 推荐(0) 编辑
摘要:表锁: MySQL服务器端会使用读写锁实现表锁,忽略存储引擎的锁机制 行锁: 在存储引擎使用的锁机制,并发效果更好 事务:一组原子性的SQL查询,要么全部执行成功,要么全部执行失败 ACID:原子性,一致性,隔离性,持久性 隔离级别:未提交读(用的少),提交读(不可重复读),可重复读(出现幻读),可 阅读全文
posted @ 2019-07-18 11:39 demianzhang 阅读(93) 评论(0) 推荐(0) 编辑
摘要:天际线问题,参考自: 百草园 天际线为当前线段的最高高度,所以用最大堆处理,当遍历到线段右端点时需要删除该线段的高度,priority_queue不提供删除的操作,要用unordered_map来标记要删除的元素。从heap中pop的时候先看有没有被标记过,如果标记过,就一直pop直到空或都找到没被 阅读全文
posted @ 2019-07-13 20:18 demianzhang 阅读(263) 评论(0) 推荐(0) 编辑
摘要:线程有join和detach两种结束方式,join:主线程等待该线程结束,detach:主线程不等待该线程结束,让其在后台运行。join需要注意选择适当的位置,在线程启动后可能会抛出异常,在try/catch中也应该考虑join(一种方式是使用“资源获取即初始化方式”(RAII,Resource A 阅读全文
posted @ 2019-07-07 13:59 demianzhang 阅读(150) 评论(0) 推荐(0) 编辑
摘要:CAS( compare and swap) 原子操作,保证了如果需要更新的地址没有被其他进程(线程)改动过,那么它可以安全的写入。而这也是我们对于某个数据或者数据结构加锁要保护的内容,保证读写的一致性,不出现dirty data。可在循环中不断执行CAS,如果共享变量没有改变,那么swap,在当前 阅读全文
posted @ 2019-07-06 10:05 demianzhang 阅读(5032) 评论(0) 推荐(0) 编辑

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