记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去我也不懂,皆大欢喜!
作为程序员,要有“刨根问底”的精神。知其然,更要知其所以然。这篇文章希望能抽丝剥茧,还原背后的原理。
知易行难
记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去我也不懂,皆大欢喜!
作为程序员,要有“刨根问底”的精神。知其然,更要知其所以然。这篇文章希望能抽丝剥茧,还原背后的原理。
Graphviz 是 AT&T 实验是开发一款开源的绘图工具,它通过绘图语言来进行绘图,这点和 Markdown 比较相似,通过和 Markdown 结合,使用起来非常流畅,Hexo 也提供了相关的插件来支持 Graphviz,本文主要介绍插件的安装,使用教程可以参考网上其他文章。
最近同事在项目中遇到一个需求,要求将在两个显示器上显示同一个摄像机的内容,其实最简单的办法,就是在显示器设置中,将复制主屏的画面,对于更多的屏幕的输出,可以采用分屏器等硬件设备来实现,但是如果想对一个屏幕输出结果做一些处理,这种方法就么有办法解决了,实现的办法有很多种,本文主要介绍一种基于 RenderTexture 的方法。
递归更加利于理解,因此某些情况下我们更喜欢使用递归(比如归并排序、或者树的操作),但是随着递归深度不断加深,就可能出现栈溢出,很多大神可能都已经知道如何通过堆栈和循环来避免栈溢出,但是,我觉得提供一种简单、通用的方法来替换递归,对于新手来说是非常棒的想法。
前面已经介绍了暴力匹配算法、BM 算法、KMP 算法等几种单模式字符串匹配算法,在实际项目开发中,也经常会遇到多模式匹配需求,比如敏感词过滤功能,虽然使用单模式匹配算法也能够实现,但是下面介绍一种更加高效多模式匹配算法 - AC 自动机。
在前面的文章中介绍了暴力匹配算法和 BM 算法,下面再介绍另一种匹配算法 - KMP 字符串匹配算法,之所以单独将它拿出来介绍,主要是它解释和理解起来都非常困难,为了更好的理解下面的内容,建议先看理解一下暴力匹配算法和 BM,这两者相对容易理解一些,可以当做一个预热。
平时在进行上网搜索时,都会有搜索提示功能,能够根据我们输入,自动的给出相应的提示内容,那么这个功能应该如何来实现呢,当搜索词库数据量很少时,采用什么办法效率上可能差别不大,但是随着词库的不断增长,查询效率就是我们需要考虑的问题了,单词查找树就是这么一种解决方案。
在日常开发中,经常会和字符串打交道,字符串匹配功能的使用频率也很高,比如 C# 中的 IndexOf()、Python 的 find(),它们背后实现就是字符串匹配算法,字符串匹配算法多种多样,如暴力匹配算法(BF),BM 算法、RK 算法、KMP 算法,本节主要介绍暴力匹配算法、BM 算法。