<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[binling的专栏]]></title><description><![CDATA[主要是备忘性质的笔记和零言碎语]]></description><link>https://blog.youkuaiyun.com/binling</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; binling]]></copyright><item><title><![CDATA[LeetCode 827 最大人工岛 题解]]></title><link>https://blog.youkuaiyun.com/binling/article/details/126919147</link><guid>https://blog.youkuaiyun.com/binling/article/details/126919147</guid><author>binling</author><pubDate>Sun, 18 Sep 2022 16:39:49 +0800</pubDate><description><![CDATA[给你一个大小为 n x n 二进制矩阵 grid。最多 只能将一格 0 变成 1。返回执行此操作后，grid 中最大的岛屿面积是多少？岛屿 由一组上、下、左、右四个方向相连的 1 形成。经典的图论中连同分量的题目。]]></description><category></category></item><item><title><![CDATA[预处理在快速判断两个单词是否有相同字符的应用]]></title><link>https://blog.youkuaiyun.com/binling/article/details/126270987</link><guid>https://blog.youkuaiyun.com/binling/article/details/126270987</guid><author>binling</author><pubDate>Wed, 10 Aug 2022 17:50:51 +0800</pubDate><description><![CDATA[这里面利用到单词的字符集是有限的这一特性，比如，英文单词就是26个字母，可以把一个单词包含的字母的情况，转化为一个26位的位图，两个单词如果有相同的字母，那么相应的bit位置上就同为1。把位图当成一个数，两个位图做一个“与”操作，结果为0就得出对应的单词无重复字符。，一般的做法是，采用辅助的集合类容器，先遍历一个字符串，把它的字符放到集合中；如果是一个单词的集合，需要判断两两判断两个单词是否有重复字符，按照上面的算法，总的复杂度变为 O(n * len), len是字符串长度的上限。...]]></description><category></category></item><item><title><![CDATA[二叉树非递归后序遍历的4种优雅解法]]></title><link>https://blog.youkuaiyun.com/binling/article/details/124388400</link><guid>https://blog.youkuaiyun.com/binling/article/details/124388400</guid><author>binling</author><pubDate>Sun, 24 Apr 2022 18:51:56 +0800</pubDate><description><![CDATA[方法1：状态机法
状态由两个部分组成

当前树的根节点root
辅助Stack的状态

算法就是根据当前的状态，不断跳转到下一个状态，直到root和Stack都为空。Stack里存的是当前树遍历之后再处理的节点，也就是当前树的父亲节点。
class Solution {
    public List&lt;Integer&gt; postorderTraversal(TreeNode root) {
        List&lt;Integer&gt; output = new ArrayList&lt]]></description><category></category></item><item><title><![CDATA[理清Java中的各种内部类]]></title><link>https://blog.youkuaiyun.com/binling/article/details/122359081</link><guid>https://blog.youkuaiyun.com/binling/article/details/122359081</guid><author>binling</author><pubDate>Fri, 07 Jan 2022 10:30:11 +0800</pubDate><description><![CDATA[中文都是说内部类，英文原文其实分的很清楚

top level class
nested class

static class: declared as a static member of another class
inner class: declared as a instance member of another class

local  inner class: declared inside an instance method of anther class
anonymous inn]]></description><category></category></item><item><title><![CDATA[Shell Programming的一些常见问题]]></title><link>https://blog.youkuaiyun.com/binling/article/details/121949032</link><guid>https://blog.youkuaiyun.com/binling/article/details/121949032</guid><author>binling</author><pubDate>Wed, 15 Dec 2021 12:32:50 +0800</pubDate><description><![CDATA[引号


单引号 v.s. 双引号
单引号不进行变量替换，双引号会进行变量替换


变量是否加引号
一个保险的做法是变量总是加引号， 因为变量的值有可能带空格
[[ ]]内会把变量替换后的值当成一个整体，但[ ]不会


[ ] 和 [[ ]]

[ 等于 test， 是一个程序，会把] 当成参数列表里最后一个参数
[[ ]] 是bash specific的，是bash关键字。
[ -f “a.txt” ] &amp;&amp; [ -f "b.txt ] 中的&amp;&amp;是连接两个命令的运算符；[]]></description><category></category></item><item><title><![CDATA[代数思维训练之一：二分查找]]></title><link>https://blog.youkuaiyun.com/binling/article/details/120287359</link><guid>https://blog.youkuaiyun.com/binling/article/details/120287359</guid><author>binling</author><pubDate>Tue, 19 Oct 2021 10:50:21 +0800</pubDate><description><![CDATA[代数思维要点
identify变量
确定变量之间的关系
状态如何转移，驱动变量（自变量），因变量
循环不变式
有界，收敛
二分问题
输入是一个区间和一个值，要收敛到区间一个具体位置
1 标准二分

变量：区间[l, r]， 查找值x。衍生变量mid
循环不变式：如果有解，必在[l, r]中
状态转移：

进行状态转移的条件：[l,r]不为空: l &lt;= r
驱动变量: x, A[mid]
规则：x和A[mid]比较大小
收敛：[l, r]每次都变小



int search(vector&lt;in]]></description><category></category></item><item><title><![CDATA[Coding的心态]]></title><link>https://blog.youkuaiyun.com/binling/article/details/120283934</link><guid>https://blog.youkuaiyun.com/binling/article/details/120283934</guid><author>binling</author><pubDate>Tue, 14 Sep 2021 12:06:57 +0800</pubDate><description><![CDATA[这里写自定义目录标题新的改变功能快捷键合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
dddd11# 欢迎使用Markdown编辑器
你好！ 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑]]></description><category></category></item><item><title><![CDATA[基于代数思维的coding]]></title><link>https://blog.youkuaiyun.com/binling/article/details/119567415</link><guid>https://blog.youkuaiyun.com/binling/article/details/119567415</guid><author>binling</author><pubDate>Tue, 10 Aug 2021 13:15:24 +0800</pubDate><description><![CDATA[大概有两种思维，一种是面向过程的，就是想象一个数据结构上的操作步骤，推演一下，看看能不能接近一个solution。这种思维有诸多弊端：

1）靠灵光一现的乱试，不可控，不可重复

2）面向过程，比较复杂、麻烦，易出错

3）逻辑性不强，为什么这么操作一番就能得出解？ 这个问题很难回答，缺乏一种确信感。离散，不易证明



代数的特点是什么？都是变量和公式推导，从不需要带入离散的具体值去验证，是自证明的，或者说你可以代入任何具体值，都是成立的，逻辑性非常强。比如求斐波那契数列的代数式算法：

```

def]]></description><category></category></item><item><title><![CDATA[LeetCode 32 Longest Valid Parentheses 2种优雅解法]]></title><link>https://blog.youkuaiyun.com/binling/article/details/104922670</link><guid>https://blog.youkuaiyun.com/binling/article/details/104922670</guid><author>binling</author><pubDate>Tue, 17 Mar 2020 15:28:44 +0800</pubDate><description><![CDATA[思路一 递归DP
定义子问题 :  f(i) 为 以s[i] 结尾的子串的原问题，有:

如果s[i] == ‘(’：f(i) = 0
如果s[i] == ‘)’：

如果s[i - 1]  == ‘(’：f(i) = f(i - 2) + 2
如果s[i -  1] == ‘)’：令 l = f(i -1),  如果s[ i - l - 1] == ‘(’，那么f(i) = f(i - 1) +...]]></description><category></category></item><item><title><![CDATA[c++ 二进制兼容本质]]></title><link>https://blog.youkuaiyun.com/binling/article/details/76021144</link><guid>https://blog.youkuaiyun.com/binling/article/details/76021144</guid><author>binling</author><pubDate>Mon, 24 Jul 2017 16:35:41 +0800</pubDate><description><![CDATA[总的一条就是让client只依赖“名字”，而不依赖任何"实现"。
“实现” 具体的就是2类
1）函数体，code
2）任何内存块大小，layout细节
为什么会有二进制兼容问题，就是因为一般的c++头文件并不是单纯的接口声明，其中也还包括了“实现细节”，因为成员变量就是一种内存layout，就属于实现细节。对于函数，也有2种情况使得client依赖了实现：
1）inline functi]]></description><category></category></item><item><title><![CDATA[Elastic Search 的分布式特点(和MongoDB对比）]]></title><link>https://blog.youkuaiyun.com/binling/article/details/53948828</link><guid>https://blog.youkuaiyun.com/binling/article/details/53948828</guid><author>binling</author><pubDate>Sat, 31 Dec 2016 01:24:54 +0800</pubDate><description><![CDATA[Elastic Search 的分布式特点(和MongoDB对比）回顾一下mongoDB的分布式：
  
  replica set：若干mongod组成，只有一个master可写，自动选举 。
  sharding: 若干mongos 作为前端router，每个shard对应一个replica set，还有一个replica set作为sharding metatadata的存储（config s]]></description><category></category></item><item><title><![CDATA[MongoDB 的分布式属性（replication and sharding)]]></title><link>https://blog.youkuaiyun.com/binling/article/details/53152283</link><guid>https://blog.youkuaiyun.com/binling/article/details/53152283</guid><author>binling</author><pubDate>Tue, 15 Nov 2016 17:18:33 +0800</pubDate><description><![CDATA[Cluster  and Replicate
和mysql 类似，全局级的replicate 配置（cassandra 是每个key space可以独立配置） ，一个master，多个secondary，写只能在master上
一致性：写操作返回可以配置为
1）全部副本写成功（complete），2）多数（majority），3）只是primary写成功，4）仅仅是成功交给primary（f]]></description><category></category></item><item><title><![CDATA[资源调度器的一些基本问题]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52959486</link><guid>https://blog.youkuaiyun.com/binling/article/details/52959486</guid><author>binling</author><pubDate>Fri, 28 Oct 2016 21:04:02 +0800</pubDate><description><![CDATA[1 调度算法
Capacity based， DRF(dominant recourse fairness)，label based等
多态化，插件化，可以多种策略一起工作，对应于不同Job （优先级，job特性，service or batch job)


2 容错，HA
调度器一般处在一个中心位置，存在SPF问题。可以采用类似HDFS，JobTracker的HA方案
1）act]]></description><category></category></item><item><title><![CDATA[redis中hashtable 的 rehash/ resizing 策略]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52935272</link><guid>https://blog.youkuaiyun.com/binling/article/details/52935272</guid><author>binling</author><pubDate>Wed, 26 Oct 2016 16:36:17 +0800</pubDate><description><![CDATA[依赖于连续存储的数据结构（具体的，就是依赖array）都有一个resizing问题。对于vector，一般的策略就是满的时候double and copy，降到1/4时候 half 。
Hashtable也可以这么做，均摊的复杂度模型是一样的。比如load factor （number of entry / hash table size) 大于5的时候触发 resize，创建一个double]]></description><category></category></item><item><title><![CDATA[文件洞的处理]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52921177</link><guid>https://blog.youkuaiyun.com/binling/article/details/52921177</guid><author>binling</author><pubDate>Wed, 26 Oct 2016 16:01:49 +0800</pubDate><description><![CDATA[存储引擎经常要面对的一个问题，就是洞的处理。


1）Segment File：
2）segment file 之间整理
3）Copy]]></description><category></category></item><item><title><![CDATA[自己动手写一个key value store]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52779602</link><guid>https://blog.youkuaiyun.com/binling/article/details/52779602</guid><author>binling</author><pubDate>Mon, 10 Oct 2016 18:08:41 +0800</pubDate><description><![CDATA[一涉及到persistent， 哪怕只是最基本的需求，很多人都会依赖数据库，或是其他现成的库或工具。确实，对于文件，大部分人很少直接打交道，或者只是诸如整体反序列化/序列化、按行读取、append new line等有限的操作。


一个persistent store最基本的问题是如何组织数据，也就是access method, 大致有：
1）队列（定长记录 or 不定长记录): kaf]]></description><category></category></item><item><title><![CDATA[有限自动机总结]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52669187</link><guid>https://blog.youkuaiyun.com/binling/article/details/52669187</guid><author>binling</author><pubDate>Mon, 26 Sep 2016 13:07:10 +0800</pubDate><description><![CDATA[有限自动机A用来识别字符串，它由5部分组成：
1）alphabet，字符集
2）states，状态集合
3）init，初始状态
4）trans(s, ch)，状态转移函数
5）end 可接受state 集合
A(str) == true的意思是，A可以接受字符串str，即从初始状态init读入str所有字符之后所达到的状态属于集合end， tran(init, str) 属于 end]]></description><category></category></item><item><title><![CDATA[爬虫，索引，PageRank，搜索，综合例子]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52639025</link><guid>https://blog.youkuaiyun.com/binling/article/details/52639025</guid><author>binling</author><pubDate>Fri, 23 Sep 2016 16:34:56 +0800</pubDate><description><![CDATA[indexer 主要包含：
html parser，word generator， url id generator，inverted index（keyword->[docId]，docs table（url, id, refCount)
word generator的职责是输入一个text文本，返回一个word iterable。具体参数有，最小word长度，exclude list，]]></description><category></category></item><item><title><![CDATA[再谈Parser]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52589974</link><guid>https://blog.youkuaiyun.com/binling/article/details/52589974</guid><author>binling</author><pubDate>Mon, 19 Sep 2016 22:41:10 +0800</pubDate><description><![CDATA[Parser的作用就是把一个字符串（一维，流）parse成一个数据结构。
Parser的写法大概有2种方式
1）递归下降(recursive descend)
2）事件驱动的状态机。状态就是一些表明当前状态的变量和最终要parse出的data structure。


xml parser， json parser，key value pair parser, 都是第二种方法，其中所谓]]></description><category></category></item><item><title><![CDATA[TrieMap 实现]]></title><link>https://blog.youkuaiyun.com/binling/article/details/52578940</link><guid>https://blog.youkuaiyun.com/binling/article/details/52578940</guid><author>binling</author><pubDate>Sun, 18 Sep 2016 23:14:48 +0800</pubDate><description><![CDATA[最大问题是占空间，R ＝ 256，插入百万数量级的key就 OutOfMemory了。在key的数目比较小的情况下，正如理论指出的一样，性能高于HashMap；但到了占内存比较多的时候由于影响系统整体运行，性能不如HashMap。


用HashMap而不是大小为256的数组作为link的时候，占内存少的多，几千万级的都不会OutOfMemory。仔细算一下 256-way Trie的一个N]]></description><category></category></item></channel></rss>