模板方法模式和策略模式
模板方法模式有多个相似的类,找到他们的共性,抽象出来,放入公共的抽象父类,作为模板。 策略模式1.将算法封装成算法类,变抽象为形象(让不同的算法【抽象】,变成一个个算法策略【形象】)2.将算法选择逻辑与算法本身解耦(由算法内部if-else代码级耦合【难以维护】,变为客户端选择算法类实例的耦合【灵活】) 不用策略模式:123456if(客户=="老客户"){ price*=0.8;}else if(客户=="大客户"){ price*=0.9;}return price; 用策略模式:12345678910class OldCustomer implements Strategy{ public int getPrice(int price){ return price*0.8; }}class BigCustomer implements Strategy{ public int getPrice(int ...
Echarts坑-动态折线图更新时跳动
用Echarts做动态折线图,参照->这个demo每次新插入一个点并删除最前面的点,实现随着时间平滑移动。但遇到一个问题,更新数据时会产生跳动。 一番试验找到原因,是定义的data格式问题。是我把demo中的randomData()函数改了个格式 12345function randomData() { var now = new Date(); var value = 1 + (Math.random() - 0.5) * 2; return [now, value*1000]} 改完虽然能运行,能实时更新数据,但每次插入一个数据,绘图呈现的效果就是重新绘制全图一样,有一个从水平线扩展成折线图的感觉,所以造成了图形不停跳动。当然,demo中并没有这样的跳动,是很稳定的平移。 解决方法:改成以下格式,也就是demo给出的格式 1234567891011function randomData() { now = new Date(); value = Math.random() * 21 - 10; ret...
群视频课笔记——码农翻身
笔记 六个月,能否学好web开发? 不够,六个月只够学习一门技能。 跟对老板、师傅,能有更多收获,不用重视薪资。 在做普通项目中脱颖而出? 做好项目本身尽量主动,比如重构代码。忌讳让做什么只做什么 如何看源码? 1.跑起来2.看业务 Redis集群如何学习 难以模拟实际应用的大量数据,项目遇到再深挖较好。否则只搭建没用。 为何跳槽? 不想只做SSH,找喜欢的方向深入(做引擎) 重基础: 操作系统&网络 大数据: 建模更重要 如何表述做过的项目? 1.业务2.架构3.做的工作 JDBC:必会 混合开发能否代替原生APP? 不能 反射常用吗? 直接不常用,间接常用(框架中) 需要掌握全部设计模式。 如何学习框架? 1.书2.项目 编译原理:不需深入了解,除非写语言 PHP:Facebook,新浪 Java:生态繁荣,适合大规模团队协作 数据结构用处? 锻炼思维,分析算法实现过程,注重效率即可,不需背记复杂数据结构 需要定制Nginx——学C语言的好机会 学习资源 网站:imooc...
Hexo+GitHub Pages多终端同步
2016年11月8日更新:11月3日下午Github Pages升级了Jekyll,导致了next主题下source/vendors路径下的部分js和css无法访问。解决:在.deploy_git目录中加入名为.nojekyll的空文件。 原文: 博客用Hexo+GitHub Pages搭建,托管在GitHub的一个仓库中,仓库分两个分支:hexo和master。hexo作为默认分支,存放博客源代码,master分支存放博客生成页面。如何实现多终端同步? 为了筛选出配置文件、主题目录、博文等重要信息,作为需要GItHub管理的文件,配置.gitignore文件如下: 1234567.DS_StoreThumbs.dbdb.json*.lognode_modules/public/.deploy*/ 需要多机同步时,只需将hexo分支clone到本地,再进入目录安装npm即可。处理命令如下: 1234git clone https://github.com/xiaobai050/xiaobai050.github.io.gitcd xiaobai050.githu...
青蛙过河问题
LeetCode:403. Frog Jump 版本一深度优先搜索:从头至尾遍历石头,从每个石头上分别以k-1,k,k+1的力量向前跳一下,如果这三个力量范围内没有石头,则返回;否则继续先前跳一下……直至到达最后一个石头。 没有记忆功能,每次遍历需全盘重新计算,时间复杂度O(3^n),石头多了会超时。于是加入记忆搜索,有了版本二。 版本二迭代+记忆搜索:加入记忆搜索,为每块石头建立一个力量表,每到达一块石头,就把这一跳所用的力度记录在这块石头的力量表中。这样一来,一块石头是否可以到达,取决于这块石头的力量表是否为空。 题目要求第一跳力度为k=1,则在石头1上记录力量k=1,然后从第二块石头开始遍历: 对于第i个被遍历的石头,判断从石头1到石头(i-1)范围内的每一个石头上,是否存在跳到石头i上的力量,如果存在(代表能跳到石头i上),则在石头i的力量表中添加这个力量值。 所有石头遍历完,判断最后一块石头的力量表是否为空,则得出是否能到达最后。 12345678910111213141516171819202122232425262728293031323...
LeetCode答题框架(Java+Eclipse)
记录我的LeetCode答题框架。我在LeetCode中答过的题代码全部托管在GitHub:xiaobai050/leetcode 最初在LeetCode上学习在线编程时,由于不熟练,脑中还没有答题的框架,测试用例、待提交代码、入口方法之间的耦合过大,添加、修改测试用例需要修改源代码,导致调试效率过低,不够优雅。 为了尽可能方便调试,高效编辑,分离测试用例和算法实现,改进整理出了自己顺手的答题框架,记录下来。万事开头难,如果能帮助到想我当初一样迷茫的初学者,就更好不过了:) 目录结构: LeetCode ——项目名称,方便Eclipse内置Git对代码进行管理和多终端同步 pid1 ——题目包,每个题目封装在一个单独的包中,包名用LeetCode题目编号表示 Solution.java ——算法类,注意到LeetCode每道题目的代码类名为Solution Main.java ——包含主函数(控制逻辑、测试用例数组)、测试函数(测试结果输出、算法耗时) pid2 Solution.java Main.java 以具体题目为例:96. Unique...
平衡二叉树学习
平衡二叉树平衡二叉树的特点是,小的值在左边,大的值在右边。 用VisuAlgo画一个简单的平衡二叉树: 再随机生成一个: 可以发现规律:整棵树中,所有节点的值从左至右逐渐增大。 什么是高度平衡(AVL)二叉树?WiKi解释如下: 在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。 高度平衡树经常涉及到旋转这个概念,简单来说就是高度平衡树插入或删除某个节点可能破坏平衡,这时就需要旋转一些(3个)节点来恢复树的平衡。旋转哪三个呢?实际上只有四种情况,根据不同情况选择不同的旋转方法。很多人讲得很详细,不搬运了,可以参考这里:高度平衡的二叉搜索树(AVL树)-逝者如斯,不舍昼夜。 AVL树的四种旋转 由于整棵树中,从左至右逐渐增大,旋转可理解为左右顺序不变,垂直映射到
递归学习
递归、循环的区别: 循环:循环嵌套层数由代码结构决定,维度不可变。 递归:能产生循环嵌套,可以扩展循环层数。 举例:遍历所有组合—— C6取3# [1,2,3] [1,2,4] [1,2,5] [1,2,6] [1,3,4] [1,3,5] [1,3,6] [1,4,5] [1,4,6] [1,5,6][2,3,4] [2,3,5] [2,3,6] [2,4,5] [2,4,6] [2,5,6][3,4,5] [3,4,6] [3,5,6][4,5,6] 循环: 123456789for(int i=1;i<=4;i++) for(int j=i;j<=5;j++) for(int k=j;k<=6;k++){ temp.set(0, i); temp.set(1, j); temp.set(2, k); rtn.add(temp); } 每个数组有三个元素,用三层for循环。 递归: 123456789101112131415//计算C6取3//遍历数字范围:s...