- 博客(50)
- 收藏
- 关注
转载 自己动手实现MQTT协议
写在前面前段时间弄IoT相关的东西,系统学习了一下 MQTT 协议,在此分享出来。本文先是对 MQTT 协议做了简单的介绍;接着是对 MQTT协议的内容做了较为全面的解读;最后使用 Python 语言去实现一个简单的 MQTT 客户端和服务器。简介MQTT 全称是 Message Queue Telemetry Transport,翻译成中文意思是“遥测传输协议”。它最先是由IB...
2019-08-15 20:39:00
989
转载 GoodNotes 模板分享
画了一个A4纸模板,分享出来:模板下载原始PSD下载转载于:https://www.cnblogs.com/dongkuo/p/10986440.html
2019-06-06 18:25:00
17839
转载 自己动手写表达式解释器
写在前面最近需要实现自定义报表的功能,其中有一个需求是要计算用户输入的公式。比如用户输入公式:A1 + A2 * 2.4,我们需要将A1和A2替换成对应的值,然后算出结果;公式中还可能包含括号,比如:A1 * (A2 - 3);再进一步,公式中还可以有我们内置的的几个函数(SUM, MIN, MAX, AVG, COUNT),如:B1 * SUM(A1, A2 + 1.2)。总的来说,...
2018-10-21 19:40:00
332
转载 100行代码实现“跳一跳”辅助程序
写在前面好久没写博客了,今天来一发吧。分享一下今天下午用python写的“跳一跳”小游戏的辅助程序。之前是准备用树莓派操控一个“机械手指”来代替人的触摸操作,但该方案还在酝酿中,实现了再分享。接下来要分享的是用“纯软件”的方法来玩“跳一跳”。原理原理其实很简单,按如下步骤操作即可:每次跳跃之前,截取一下手机屏幕,并将截图保存到本地电脑中;计算截图中人偶的位置与将要跳至的台面中...
2018-01-15 00:27:00
556
转载 斐波那契堆——算法导论(26)
1. 写在前面在很久之前学习过堆这种数据结构。这次再来学习一种比较特别的“堆”——斐波那契堆。下文首先会介绍斐波那契堆的结构,然后会介绍在其上的操作,最后再分析这些操作的效率,以及一些理论的证明。2. 结构斐波那契堆是一系列具有最小堆序的有根树的集合,即斐波那契堆中的每棵树均遵循最小堆性质。所谓最小堆性质是指:树中的每个结点的关键字大于或等于它的父结点(若存在)的关键字。具有最...
2017-10-03 16:11:00
750
转载 自己动手实现DNS协议
1. 主要内容不说废话,直接进入正题。先说说本文本文的主要内容,好让你决定是否看下去:介绍DNS是干什么的;介绍DNS是如何工作的;介绍DNS请求与响应的消息格式;编程实现一个简单的DNS服务器;2. DNS是啥关于DNS是啥,想必学过计算机网络的应该都知道,它是Domain Name System的简写,中文翻译过来就是域名系统,是用来将主机名转换为ip的。事实上,除...
2017-04-15 13:38:00
713
转载 用Angular2+Express快速搭建博客
1. 写在前面昨天花了1天的时间把自己的博客从以前的Express换成了Angular2+Express,遂记录于此。博客Demo在这里,你也可以点击这里查看完整代码。第一次使用Angular2,还是遇到了不少问题,比如ng-cli(1.0.0-rc.1)自动生成的项目直接跑起来报错;采用前端路由,刷新页面出现404;用webpack打包后端项目要注意什么;使用Angula...
2017-03-19 23:12:00
315
转载 为你的博文构建目录
1. 写在前面这要从前几天看Hibernate的用户手册说起。这份手册确实挺长,而且还是全英文,对于刚过四级的我来说,看着确实有些“吃力”。这种“吃力”表现在,我经常看着看着就忘了自己看到哪了,对于前面看过的内容的印象特别模糊,于是我就在思考为什么会这样。是有许多不认识的单词或不懂的语法吗?应该不是。事实上,一般技术文档除了一些专业术语外基本都是一些常见词汇,除了一些约定的或者是有...
2017-03-02 17:51:00
156
转载 机器学习实战笔记(1)——k-近邻算法
1. 写在前面近来感觉机器学习,深度学习神马的是越来越火了,从AlphaGo到Master,所谓的人工智能越来越NB,而我又是一个热爱新潮事物的人,于是也来凑个热闹学习学习。最近在看《Machine Learning IN ACTION》(作者:Peter Harrington)这本书,感觉非常不错。该书不是单纯的进行理论讲解,而是结合了许多小例子深度浅出地进行实战介绍。本博文作为学习...
2017-01-26 22:58:00
243
转载 Angular学习笔记(2)——TODO小应用
1. 写在前面之前我们跑了Angular的Hello World,你是不是对它有点感觉了呢?这一篇将结合一个TODO程序来继续学习Angular的用法。梳理一下之前的Hello World程序。我们写了一个main.ts来引导模块AppModule,而该模块又包含组件AppComponent,这是一个Angular应用最基本的结构。下面再来简单地看看Angular各部件的含义。先看...
2017-01-09 22:07:00
264
转载 Angular2学习笔记(1)——Hello World
1. 写在前面之前基于Electron写过一个Markdown编辑器。就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成;但就代码而言,之前主要使用的是jQuery,由于本人非专业前段,代码写的自己都感觉是“一塌糊涂”,十分混乱。现在看到Angular2十分火爆,跑了跑它的The Tour of Heroes的例子,感觉非常不错,代码组织的井井有条,于是乎决...
2017-01-07 16:10:00
180
转载 消息队列——RabbitMQ学习笔记
1. 写在前面昨天简单学习了一个消息队列项目——RabbitMQ,今天趁热打铁,将学到的东西记录下来。学习的资料主要是官网给出的6个基本的消息发送/接收模型,或者称为6种不同的使用场景,本文便是对这6种模型加以叙述。2. Tutorials在学习6种模型之前,我们首先需要安装RabbitMQ。RabbitMQ支持多种系统平台,各平台的安装方法可以点此查看。安装好之后,我们使用如下...
2016-10-26 20:27:00
233
转载 B树——算法导论(25)
1. 简介在之前我们学习了红黑树,今天再学习一种树——B树。它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别。从功能上看,B树是为磁盘或其他存储设备设计的,能够有效的降低磁盘的I/O操作数,因此我们经常看到有许多数据库系统使用B树或B树的变种来储存数据结构;从结构上看,B树的结点可以有很多孩子,从数个到数千个,这通常依赖于所使用的磁盘的单元特性。如...
2016-10-06 19:38:00
280
转载 NiceMark——我的Markdown编辑器
闲来无事,写了一个Markdown编辑器。基于electron,完全采用Web前段技术(Html,css,JavaScript)实现。代码已托管在Github上,欢迎下载使用。下面上几张截图:转载于:https://www.cnblogs.com/dongkuo/p/5860476.html...
2016-09-10 22:21:00
119
转载 摊还分析(2)——算法导论(24)
1. 动态表先来介绍动态表的概念。我们在使用数组时,通常都是先创建一个大小固定的数组,然后再将数据填充进去。这时难免会遇到创建的数组过小或过大的情况。过小则满足不了存储需求;过大则浪费存储空间。于是我们对普通数组进行包装,创造出一种叫做动态表的数据结构。所谓动态,就是它能够自动地进行表的扩张(在数组容量不够时)与收缩(在数组容量过大时)。具体地,它通常会采取这样的策略:在插入数据时...
2016-08-31 17:25:00
254
转载 摊还分析(1)——算法导论(23)
摊还分析(amortized analysis)是一种分析一个操作序列中所执行的所有操作的平均时间分析方法。与一般的平均分析方法不同的是,它不涉及概率的分析,可以保证最坏情况下每个操作的平均性能。下面介绍瘫痪分析中的最常用的三种技术。1. 聚合分析1.1 栈操作先来看对栈进行操作的例子。通常,栈能够进行push(S, x)与pop(S)操作,其时间复杂度均为O(1)。现在定义一...
2016-08-30 23:01:00
659
转载 贪心算法(2)——算法导论(22)
1. 写在前面在上一篇博客中,我们通过选择问题了解了贪心算法。这一篇博客将继续介绍贪心算法,主要谈谈贪心算法的原理,并简单分析一下背包问题。2. 贪心算法原理通过上一篇博客中的选择问题,我们看到,贪心算法可以由如下几个步骤来实现:确定问题的最优子结构;设计一个递归算法;证明如果我们做出一个贪心选择,则只剩下一个子问题;证明贪心选择是安全的;设计并实现贪心算法。对比动...
2016-06-18 16:30:00
190
转载 贪心算法(1)——算法导论(21)
1. 写在前面在之前的5篇博客中,我们学习了动态规划算法。我们可以看到,在求解最优化问题的算法中,通常需要经过一系列的步骤,在每个步骤中都面临多种选择。对于许多最优化问题,使用动态规划算法来求解最优解有些杀鸡用牛了,可以使用更加简单的算法。贪心算法(greedy algorithm)就是其中之一:它在每一步做出的选择都是当时看起来的最优选择。也即是说,它总是做出局部最优选择,以此希望这...
2016-06-14 16:49:00
164
转载 动态规划(5)——算法导论(20)
1. 提出问题假设我们要设计一个将英语翻译成法语的程序,即对英文文本中出现的每个单词,我们需要查找其对应的法语单词。为了实现这一查找操作,我们可以构建一棵二叉搜索树,将n个英文单词作为关键字,对应的法语单词作为关联数据。通过使用红黑树或其他平衡搜索树结构,我们可以做到平均搜索时间为O(lgn)。但需要注意到的是,每个单词的出现频率是不一样的,并且这种频率的差异还是比较大的。比如像 "...
2016-06-12 15:04:00
179
转载 动态规划(4)——算法导论(19)
1. 写在前面在前三篇博客中,分别介绍了钢条切割问题,矩阵链乘法问题,以及对动态规划问题做了一个小结。在这篇博客中,将继续介绍一个动态规划问题:最长公共子序列问题。2. 提出问题我们有时候会遇到比较两个字符串“相似度”的问题,例如:比较给定字符串X和Y的相似度,其中X = ABCBDAB,Y = BDCABA。根据需要的不同,我们可以给出不同的“相似度”的定义。比如,我们可以定义:...
2016-06-08 22:32:00
94
转载 动态规划(3)——算法导论(18)
1. 写在前面我们已经用动态规划的方法解决了两个问题,但可能还是弄不清应该在何时使用动态规划。本篇,我们对动态规划方法做一个总结,重点关注适合应用动态规划方法求解的最优化问题应该具备的两个要素:最优子结构和子问题重叠。2. 最优子结构用动态规划方法求解最优化问题的第一步就是刻画最优解的结构。如之前的两个问题如果一个问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构性...
2016-06-05 14:27:00
184
转载 动态规划(2)——算法导论(17)
写在前面在上一篇博客中,学习了钢条切割问题。这一篇博客再来学习另一个典型的动态规划问题:矩阵乘法链问题。提出问题我们知道,矩阵的乘法是满足结合律的,即对于矩阵A,B,C 满足(A B) C = A (B C) 。但不同的结合方式会导致最终所作的乘法总次数不同。例如:对于矩阵 A(规模为10 x 100),B(100 x 5),C(5 x 50),如果按照( ( A B ) C )...
2016-04-28 15:37:00
155
转载 Base64编码
写在前面今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发现,对相同的数据,采用相同的密钥加密时,得到的密文是不同的,而加密的代码是完全一样的,只是在加密最后,对加密结果进行Base64编码时,API的调用略有不同。在Android上,ASE加密是这样写的:pu...
2016-04-02 22:37:00
138
转载 动态规划(1)——算法导论(16)
我们先从两个问题入手,来学习动态规划。1. 钢条切割问题1.1 提出问题某公司想要把一段长度为n的钢条切割成若干段后卖出,目前市场上长度为i(0<i<10,i为整数)的钢条的价格行情如下:长度i12345678910其他价格pi15891017172024300不考虑切割的成本(即切割成多少段随意),...
2016-03-26 12:49:00
150
转载 gradle学习笔记(1)
1. 安装 (1) 下载最新gradle压缩包,解压到某处。地址是:Gradle web site; (2) 添加环境变量: 1) 变量名:GRADLE_HOME变量值:刚才解压的地址,如:E:\gradle-2.8。 2) 为Path变量添加一个值:GRADLE_HOME/bin ...
2015-11-17 15:37:00
83
转载 HashMap与TreeMap源码分析
1. 引言 在红黑树——算法导论(15)中学习了红黑树的原理。本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Java这么久,也写过一些小项目,也使用过TreeMap无数次,但到现在才明白它的实现原理)。因此本着“不要重复造轮子”的思想,就用这篇博客来记录分析TreeMap源码的过程,也顺便瞅...
2015-11-12 22:53:00
133
转载 抽象工厂模式——创建型模式03
1. 定义抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。抽象工厂模式又称为Kit 模式,它是一种对象创建型模式。2. 问题 现有这么一个需求:我们现在要为某软件定制2套皮肤,一套是Spring风格,一个是Summer风格,以后会继续扩展更多的皮肤。对于每种风格...
2015-11-09 20:03:00
139
转载 工厂方法模式——创建型模式02
1. 简单工厂模式 在介绍工厂方法模式之前,先介绍一下简单工厂模式。虽然简单工厂模式不属于GoF 23种设计模式,但通常将它作为学习其他工厂模式的入门,并且在实际开发中使用的也较为频繁。(1) 定义简单工厂模式(Simple Factory Pattern):定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例一般具有共同的父类。因为在简单工厂...
2015-11-05 15:16:00
124
转载 红黑树——算法导论(15)
1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树。但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快;即当树的高度较高(甚至一种极端情况是树变成了1条链)时,这些集合操作并不比在链表上执行的快。 于是我们需要构建出一种“平衡”的二叉搜索树。 红黑树(red-black tree)正是其中...
2015-10-29 22:47:00
199
转载 二叉树的友好实现
1. 引言 前些天数据结构课讲到了二叉树。学校使用的教材是《数据结构(Java版)(第4版,叶核亚)》。总觉得书中给出的二叉树(包括之前学的线性表)的实现方式不太“优雅”(面向对象),比如线性表的链式存储和实现一节中给出的SinglyList的插入方法:public Node<T> insert(int i, T t);比如在二叉树的链式存储和实现的插入方法:pub...
2015-10-20 18:19:00
79
转载 单例模式——创建型模式01
1. 名称 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类。单例模式是一种对象创建型模式。2...
2015-10-19 21:10:00
75
转载 UML类图与面向对象设计原则
1. 引言 从大一开始学习编程,到如今也已经有两年了。从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具。学习过程中也无意识的了解了一些所谓的设计模式,如今打算系统的学习。学习以书《设计模式的艺术——软件开发人员内功修炼之道/刘伟著》为主。 所谓设计模式,即是前人对某类相似问题的抽象给出的解决方案。书中给出了2...
2015-10-15 14:18:00
287
转载 二叉搜索树——算法导论(14)
1. 什么是二叉搜索树 顾名思义,二叉搜索树是以一棵二叉树来组织的。如下图,这样的一棵树可以使用一个链表数据结构来表示,其中的每一个节点是一个对象。除了key和卫星数据之外,每个节点还包含属性left(左孩子)、right(右孩子)、和p(双亲)(若不存在,则值为NIL)。 二叉搜索树中的关键字总是以满足二叉搜索树性质的方式存储:设x是二叉搜...
2015-10-10 20:10:00
310
转载 Windows 批处理
1. 引言 在Windows上,经常需要做一些重复的工作。比如在不同的工作场所需要切换不同的ip;比如有时需要对一堆文件按1~n进行重命名;再比如我们需要删除一大堆文件,这些文件名字都差不多,但不在同一个目录呆着…第一次可以忍忍,手动完成了,但次数多了,将会觉得特麻烦和无聊;于是开始用某种编程语言写程序来处理,比如java,c++等,但写完后才发现花的时间比手动处理还多...
2015-10-06 15:25:00
98
转载 爬虫入门——02
1. 引言 在上一篇中,我们简单的了解了爬虫的工作流程,也简单的实现了一个爬虫,并且在文末简单分析了目前存在的问题。这一篇博客将会对上一篇分析出的问题,给出改进方法。我们将从以下几个方面加以改进。2. 改进(1) Bloom Filter 我们首先利用Bloom Filet来改进UrlQueue中的visitedSet。 在上一篇中,...
2015-10-05 22:01:00
88
转载 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作。散列表(hash table)是实现字典操作的一种有效的数据结构。2. 直接寻址表 在介绍散列表之前,我们先介绍直接寻址表。 当关键字的全域U(关键字的范围)比较小时,直接寻址是一种简单而有效的技术。我们假设某应用要用到一个动态集合,其...
2015-10-03 12:14:00
142
转载 爬虫入门——01
1. 引言 从今天开始系统的学习网络爬虫。写这篇博客的目的在于,一来记录下自己的学习过程;二来希望可以给像我一样不懂爬虫但又对爬虫十分感兴趣的人带来一些帮助。 昨天去图书馆找有关爬虫书籍,居然寥寥无几,且都是泛泛而谈。之后上某宝淘来淘去,只找到一本相关书籍《自己动手写网络爬虫》,虽然在某瓣上看到此书的无数差评,但最终还是忍痛买下…… 对我而言,学习爬...
2015-10-01 23:24:00
105
转载 基本数据结构(2)——算法导论(12)
1. 引言 这一篇博文主要介绍链表(linked list),指针和对象的实现,以及有根树的表示。 2. 链表(linked list) (1) 链表介绍 我们在上一篇中提过,栈与队列在存储(物理)结构上都可以用数组和链表来实现。数组和链表都是线性存储结构,其中的各元素逻辑上都是按顺序排列的。它们的不同点在于:数组的线性顺序由数组的下标决定;...
2015-09-29 10:44:00
121
转载 基本数据结构(1)——算法导论(11)
1. 引言 从这篇博客开始,来介绍一些基本的数据结构知识。本篇及下一篇会介绍几种基本的数据结构:栈、队列、链表和有根树。此外还会介绍由数组构造对象和指针...
2015-09-27 20:12:00
97
转载 选择问题——算法导论(10)
1. 引言 这一篇我们来探讨选择问题。 它的提法是:输入:一个包含n个(互异)数的序列A和一个数i(1≤i≤n)。输出:元素x(x∈A),且A中有i-1个元素比x小。简单的说,就是在A中找到第i小的数。2. 期望为线性时间的选择算法(1) 算法描述与实现 我们先给出算法的伪代码描述:其主要思想与我们前面介绍的快速排序...
2015-09-27 14:31:00
143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人