魔鬼的二分查找
滑动窗口算法
原理
滑动窗口算法的思路是这样:
1、我们在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。
2、我们先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求(包含了 T 中的所有字符)。
3、此时,我们停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的字符串不再符合要求(不包含 T 中的所有字符了)。同时,每次增加 left,我们都要更新一轮结果。
4、重复第 2 和第 3 步,直到 right 到达字符串 S 的尽头。
动态规划
最近在做题的时候遇到了递归,隐约感觉与动规有点相似,但自已又说不清楚,于是找了很多文章,这里摘录一片最基础但也是最清楚的文章,原文链接是这个。
原理
动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等。
既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值呗。
动态规划就这么简单,就是穷举就完事了?我看到的动态规划问题都很难啊!
首先,动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。
路由协议
有了IP地址以及路由表的设计之后,我们就要继续考虑如何去获取路由信息,也就是路由器之间如何去交换信息,如如何表达自己对其他路由器的可达性,获取路由信息之后,我们还要想办法构造路由表。
微服务入门笔记
微服务简介
单片应用
应用程序的核心是业务逻辑,该业务逻辑由定义服务,域对象和事件的模块实现。围绕核心的是与外部世界接口的适配器。适配器的示例包括数据库访问组件,生成和使用消息的消息传递组件以及公开API或实现UI的Web组件。
尽管具有逻辑模块化的体系结构,但该应用程序却作为一个整体打包和部署。实际格式取决于应用程序的语言和框架。例如,许多Java应用程序打包为WAR文件,并部署在诸如Tomcat或Jetty之类的应用程序服务器上。其他Java应用程序打包为独立的可执行JAR。
成功的应用程序具有随着时间的流逝并最终变得庞大的习惯。在每次冲刺期间,开发团队都会实施更多Story,这当然意味着要添加许多行代码。几年后,小型,简单的应用程序将变得庞然大物。