Floyd算法:浅显外表下的动态规划内核 读者可以根据上面论述继续扩展,细细品味出其中的动态规划内核之精妙,也可以帮助我们更好地理解Floyd算法,避免强行进行记忆。其实对Floyd算法本身,我一直能隐约地感觉到它精巧的设计,对状态的极致合并。今日有机会用自己的想法将其内核具象化,希望对大家有所启发,也欢迎理性探讨。
并发编程:聊聊常用的并发同步模板 我们从一道简单的题出发,覆盖了并发场景下经常会遇到的几种变成模式,这里面的每一种都值得我们细细去理解,并熟练掌握。对于并发包里给出的大量同步工具,我想不同工具会有自己的适用场景,而信号量(Semaphore)是一种必须掌握的工具。其他工具我也会另做总结。
再谈大量数据去重:字典树(Trie)和外排序(External Sorting) 空间、时间是一对孪生兄弟。算法道路上,大家都有一个共识,“时空"可以互换。有没有办法利用更多的时间来换取有限内存下的大量数据去重呢?今天我们再来一探究竟。
[Leetcode 451] Sort Characters By Frequency 451. Sort Characters By Frequency451. 根据字符出现频率排序IntuitionCount all the characters and rebuild the output string by sorting.ComplexityTime: O(nlogn), where n is the length of input string.Space...
[Leetcode 393] UTF-8 Validation 393. UTF-8 Validation393. UTF-8 编码验证IntuitionIt’s obviously a bit manipulation problem. But also there are lots of states need to be considered. An encoded UTF-8 character is possiblely represented...
[Leetcode 1326] Minimum Number of Taps to Open to Water a Garden 1326. Minimum Number of Taps to Open to Water a Garden1326. 灌溉花园的最少水龙头数目IntuitionWe can build a interval for each tap representing the area it covers. Each time we pick an interval, we choose the o...
[Leetcode 979] Distribute Coins in Binary Tree In order to distribute coins, every node has following tasks:take the coins from the subtree who has more coins than nodesgive the coins to the substree who has less coins than nodesdistrubte the ...
[Leetcode 1191] K-Concatenation Maximum Sum 原题直达:K-Concatenation Maximum Sum首先,关于“最大子数组和”问题有一个基于动态规划的经典算法Kadane算法。这个算法使用maxOfEnd表示以当前数组元素结尾的最大和子数组,转移过程也十分简单——要么就是只取当前元素,要么就是拖家带口把前一元素的maxOfEnd一起带上。上图的例子,我们使用以下的Kadane算法,可以得到最大子数组和为55 + 66 = 121...
死磕数据库:聚集索引(Clustered Index) Every InnoDB table has a special index called the clustered index where the data for the rows is stored. Typically, the clustered index is synonymous with the primary key.聚集索引(Clustered Index)与其说是索...
[Leetcode] LRU Cache 题目来源:LRU CacheDesign and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and put.get(key) - Get the value (will always be positive) o...
C/C++与Java异同浅见 目录C/C++与Java异同浅见高级语言(High-level programming language)可移植性(Portable)易用性安全性高性能从源码到程序编译C/C++与Java异同浅见C语言诞生于19世纪70年代,由贝尔实验室的大神Ken Thompson和Dennis M.Ritchie共同缔造。坊间传闻他们只是自己做一个游戏玩Space Travel,却开启了现代计算机语言演进...
抛砖引玉:Java中依赖冲突的解决方法 依赖冲突的解决方法早在去年的一次面试中,我就曾被问及依赖冲突如何解决,当时确实没有遇到过相关的问题,所以似乎并没有给出很满意的答案。因为在通常情况下,构建工具帮你解决了这些问题,好像一切都没有发生过,万事大吉。正所谓,“出来混,总是要还的”——最近在升级Spring版本时又遇到了这个问题,并且断断续续地困扰了我一段时间,到现在为止总算是完整地解决了。故有此文,以告慰我逝去的青春。依赖冲...
源码阅读笔记:并发环境下的HashMap 并发环境下的HashMap本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键线程安全(Thread Safty) Thread safety is a c...
源码阅读笔记:AbstractQueuedSynchronizer 锁是面向使用者的,定义了使用者与锁交互的接口,隐藏了实现细节;同步器是面向所得实现者的,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。AbstractQueuedSynchronizer(以下简称AQS),就是所谓的同步器。更准确地说是队列同步器,描述了线程在获取共享资源时以FIFO的方式依次获取同步状态的一种同步模型。这个模型扩展了CLH同步模型,使得其适用于大部
Kafka与UnknownHostException 今天启动Kafka consumer时遇到了一个很诡异的问题,莫名其妙地抛出了UnknownHostException。同事的提醒下,将/etc/hosts中配置上了VM的主机名的映射,解决了问题。如今日志已不可追溯,但发现StackOverFlow已有此类问题。
读书笔记:从happens-before原则说起 看Java内存模型(JMM, Java Memory Model)时,总有一个困惑。关于线程、主存(main memory)、工作内存(working memory),我都能找到实际映射的硬件:线程可能对应着一个内核线程,主存对应着内存,而工作内存则涵盖了写缓冲区、缓存(cache)、寄存器等一系列为了提高数据存取效率的暂存区域。但是,一提到happens-before原则,就让人有点“丈二和尚摸不
源码阅读笔记:J.U.C CLH lock java.utils.concurrency(J.U.C)中提供了一系列对锁的封装,如ReentrantLock、CountDownLatch等,而这其中用到的实现又都基于AbstractQueuedSynchronizer(AQS)。而CLH算法又是AQS实现的基础,所以网上查阅了一些资料,总结在此。 CLH lock is Craig, Landin, and Hagersten (CLH)
大量数据去重:Bitmap和布隆过滤器(Bloom Filter) 5TB的硬盘上放满了数据,请写一个算法将这些数据进行排重。如果这些数据是一些32bit大小的数据该如何解决?如果是64bit的呢?在面试时遇到的问题,问题的解决方案十分典型,但对于海量数据处理接触少的同学可能一时也想不到什么好方案。介绍两个算法,对于空间的利用到达了一种极致,那就是Bitmap和布隆过滤器(Bloom Filter)。