jQuery的简单模拟实现 <div>demo element</div><script type="text/javascript">function jQuery(selecor) { let doms = document.querySelectorAll(selecor); for (var i = 0; i < doms.length; i++) { this[i] = doms[i]; } this.length = doms.length;}funct
B树和B+树简介 B树特性B树,又称多路平衡查找树,B树中所有节点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:树中每个节点至多有m棵子树,即至多含有m-1个关键字。若根节点不是终端节点,则至少有两棵子树。除根节点外的所有非叶节点至少有ceil(m/2)棵子树,即至少含有ceil(m/2)-1个关键字。所有非叶节点的结构如下:|n|P0|K1|P1|K2|P2|…|Kn|Pn|其中,Ki(i=1,2,…,n)为节点的关键字,且满足K1 < K2 <
平衡二叉树及PHP实现~ 性质平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),除了具有二叉查找树的性质,还具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树也是平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。平衡因子一个节点的平衡因子就是该节点左子树的高度减
KMP算法及PHP实现 简介模式匹配(Pattern Matching) 即子串定位运算(Index函数)。算法目的:确定主串中所含子串第一次出现的位置(定位) ——即如何实现 Index(S,T,pos)函;初始条件:串S和T存在,T是非空串,1≤pos≤StrLength(s) 操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0。注:S称为被匹配的串,T称为模式串。若S包含串T,则称“匹配成功”。否则称 “匹配不成功” 。对于KMP算法,看代码比看各种介
霍夫曼树分析及PHP实现 概念路径:树中一个结点到另一个结点之间的分支序列构成两个结点间的路径路径长度:路径上的分支数目树的路径长度:树根到每个结点的路径长度的和结点带权路径长度:结点到树根的路径长度与结点的权的乘积树的带权路径长度:树的带权路径长度为树中所有叶子节点的带权路径长度之和,通常记作WPL=∑WkLk。假设有n个权值{w1,w1,…wn},试构造一棵有n个叶子节点的二叉树,每个叶子节点带权为wi,则其中带权路径长度WPL最小的二叉树称作最优二叉树或霍夫曼树。前缀编码:设计长短不等的编码,必须是任一字符的编
掌握了数据存储方式基本上就掌握了数据结构 线性表顺序存储// 静态分配typedef struct{ ElemType data[MaxSize]; int length;} SqList;// 动态分配typedef struct{ ElemType *data; // 存储空间基址 int MaxSize; // 当前分配的存储容量 int length; // 当前长度} SqlList;链式存储// 单链表typedef struct LNode{ ElemType data; struct LNod
红黑树原理分析及PHP实现 简介红黑树二叉搜索树中的一种,可以保证在最坏情况下基本动态集合操作(SEARCH、PREDECESSOR、SUCCESSOR、MINIMUM、MAXIMUM、INSERT、INSERT)的时间复杂度为O(log n)。红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。红黑树的应用比较广泛,主要是用它来存储有序的数
一句话解释:闭包 闭包可以理解成“定义在一个函数内部的函数“。该函数作为返回值返回,该函数可以调用所在函数体的变量。所以说在本质上,闭包是将函数内部和函数外部连接起来的桥梁。由于调用该函数一直没有被释放,所以其所调用的变量也不被释放。...
一句话解释:协程与普通线程有何不同? 协程与普通线程不同之处在于,在同一时间可以有多个线程处于运行状态,但对于协程来说只能有一个,其它的协程都会处于暂停的状态。此外,普通线程是抢占式的,哪个线程能得到资源由操作系统决定,而协程是协作式的,执行权由用户态自行分配。补充注释:1.协程:协程是一种轻量级的线程,由用户代码来调度和管理,而不是由操作系统内核来进行调度,也就是在用户态进行。可以直接的理解为就是一个非标准的线程实现,但什么时候切换由用户自己来实现,而不是由操作系统分配 CPU 时间决定。...
咱重新过一下几个专业基础概念吧 1.程序程序是指令和数据的集合。2.算法算法就是求解问题的方法和步骤。算法的五大特性:输入: 算法具有0个或多个输入输出: 算法至少有1个或多个输出有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成确定性: 算法中的每一步都有确定的含义,不会出现二义性可行性: 算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成3.数据结构数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。4.面向对
看山是山,看山不是山,看山还是山--技术经验需要不断实践、学习、总结 刚开始学习计算机的时候感觉计算机是个神奇的东西。在大学里学东西也感觉理论性太强,不切实际,有的东西感觉可能一辈子都用不上。特别是计算机组成原理、操作系统、计算机网络、数据结构、编译原理等,感觉都是没用的东西,唯有java编程能在工作上用到。后来开始接触业务,刚开始更多的工作也是配置开发环境,写出"Hello, world!", 然后做一些crud业务编程,感觉软件开发不过如此。随着对业务慢慢熟悉,业务操作越来越复杂,慢慢地开始用到了一些计算机网络协议分析(特别是http协议),一些简单算法和开发技巧。
重构,重构 有些工作,看似你没有专门腾出时间来着手处理,实际上你可能已经默默完成了(特别是你对代码一直在追求完美的情况下)。这个工作就是代码重构。重构(Refactoring)就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。软件产品最初制造出来,是经过精心的设计,具有良好架构的。但是随着时间的发展、需求的变化,必须不断的修改原有的功能、追加新的功能,还免不了有一些缺陷需要修改。为了实现变更,不可避免的要违反最初的设计构架。经过一段时间以后,软件的架构就千疮百孔了
3大类型、23种设计模式简要介绍 设计模式3大类型一、创建型模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。简单工厂模式(Simple Factory Pattern):就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。分三种:普通简单工厂–通过对参数进行条件判断返回不同实例对象、多方法简单工厂–提供多个工厂方法,分别创建对象、静态方法简单工厂–将多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。工厂模式(Factory Pattern):定义一个创建对象的接口
python模拟请求代码最简示例 import requests,json url = 'url'params = {'key1': 'value1', 'key2': 'value2'}headers = {'key1': 'value1', 'key2': 'value2'}# r =requests.post(url, params=json.dumps(params), headers=headers)r =requests.post(url, json=params, headers=headers)# pr
手有点生了,写个javascript类吧 super关键字用于访问和调用一个对象的父对象上的函数,注意其位置。class Person{ constructor(name, gender) { this.name = name; this.gender = gender; } sayName() { console.log(this.name); } set age(newAge) { this._age = newAge; } get age() { return this._age; }}
好用的async/await、generator/yield async/awaitasync函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。await 操作符用于等待一个Promise 对象。它只能在异步函数 async function 中使用。代码示例:function resolveAfterManySeconds(duration) {.
CentOS下安装pdf转图片的imagick扩展,附示例 sudo yum -y install ImageMagicksudo yum -y install ImageMagick-develsudo yum -y install ghostscriptsudo wget http://pecl.php.net/get/imagick-3.4.3.tgzsudo pecl install imagick-3.4.3.tgz #imagick-3.4.3.tgz是下载后的压缩包在php.ini添加 extension=imagick.so关键代码.
什么是软件工程化?什么是“前端工程化“? 软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。软件工程包括两方面内容:软件开发技术和软件项目管理。软件开发技术包括软件开发方法学、软件工具和软件工程环境。软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。软件工程是指将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件过程。【参考】百度知道...
javascript整理(二) 由于浏览器会先解析完不使用defer属性的<script>元素中的代码,然后再解析后面的内容,所以一般应该把<script>元素放在页面最后,即主要内容后面,<body>前面。使用defer属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。使用async属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。由于不存在函数签名的特性,ECMAScript函数不能重载。一个函数由这么几部分组.