遍历

WC.exe(C++)

ⅰ亾dé卋堺 提交于 2020-03-25 02:51:33
Github项目地址:https://github.com/z472/code_all/blob/master/test1.cpp PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 0 · Estimate · 估计这个任务需要多少时间 四天 五天 Development 开发 · Analysis · 需求分析 (包括学习新技术) 360 780 · Design Spec · 生成设计文档 0 0 · Design Review · 设计复审 (和同事审核设计文档) 0 0 · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 0 · Design · 具体设计 60 120 · Coding · 具体编码 480 720 · Code Review · 代码复审 240 360 · Test · 测试(自我测试,修改代码,提交修改) 360 360 Reporting 报告 60 未知 · Test Report · 测试报告 0 0 · Size Measurement · 计算工作量 0 0 · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 120 合计 1620 2460

图形数据库Neo4j基本了解

二次信任 提交于 2020-03-24 14:30:06
3 月,跳不动了?>>> 原文出处 : http://www.yund.tech/zdetail.html?type=1&id=f519df57f29b22863d2a6a79326bd22b 作者 :jstarseven 在深入学习图形数据库之前,首先理解属性图的基本概念。一个属性图是由顶点(Vertex),边(Edge),标签(Lable),关系类型和属性(Property)组成的有向图。顶点也称作节点(Node),边也称作关系(Relationship);在图形中,节点和关系是最重要的实体,所有的节点是独立存在的,为节点设置标签,那么拥有相同标签的节点属于一个分组,一个集合;关系通过关系类型来分组,类型相同的关系属于同一个集合。关系是有向的,关系的两端是起始节点和结束节点,通过有向的箭头来标识方向,节点之间的双向关系通过两个方向相反的关系来标识。节点可有零个,一个或多个标签,但是关系必须设置关系类型,并且只能设置一个关系类型。Neo4j图形数据库的查询语言是Cypher,用于操作属性图,是图形语言中事实上的标准。 一、图形数据库的基本概念 Neo4j创建的图(Graph)基于属性图模型,在该模型中,每个实体都有ID(Identity)唯一标识,每个节点由标签(Lable)分组,每个关系都有一个唯一的类型,属性图模型的基本概念有: 实体(Entity) 是指节点(Node

HtmlParser

☆樱花仙子☆ 提交于 2020-03-24 11:06:12
一,数据组织分析:   HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略了。    Node 是 形成树结构表示HTML的基础,所有的数据表示都是接口Node的实现,Node定义了与页面树结构所表达的页面Page对象,定义了获取父、子、兄弟节 点的方法,定义了节点到对应html文本的方法,定义了该节点对应的起止位置,定义了过滤方法,定义了Visitor访问机制。    AbstractNode 是Node的一种具体的类实现,起到构成树形结构的作用,除了同具体Node相关的accetp方法,toString,toHtml,toPlainTextString方法以外,AbstractNode实现了大多基本的方法,使得它的子类,不用理会具体的树操作。    Tag 是 具体分析的主要内容。Tag分成composite的Tag和不能包含其他Tag的简单Tag两类,其中前者的基类是CompositeTag,其子类包 含BodyTag,Div,FrameSetTag,OptionTag,等27个子类;而简单Tag有BaseHrefTag、 DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag 这八类。   

Python专题——详解enumerate和zip

China☆狼群 提交于 2020-03-24 10:27:55
本文始发于个人公众号: TechFlow ,原创不易,求个关注 今天是 Python专题的第7篇 文章,我们继续介绍迭代相关。 enumerate 首先介绍的是enumerate函数。 在我们日常编程的过程当中,经常会遇到一个问题。 在C语言以及一些古老的语言当中是没有迭代器这个概念的,所以我们要遍历数组或者是容器的时候,往往只能通过下标。有了迭代器之后,我们遍历的过程方便了很多,我们可以直接用一个变量去迭代一个容器当中的值。最简单的例子就是数组的遍历,比如我们要遍历items这个数组。我们可以直接: for item in items: 通过迭代器的方式我们可以很轻松地遍历数组,而不再需要下标,也不需要计算数组的长度了。但是 如果我们在循环体当中需要知道元素的下标该怎么办 ? 难道我们真的只能在下标和迭代器当中选择一个吗,比如在循环体的外面添加一个变量来记录下标? idx = 0for item in items: operation() idx += 1 这样可以解决问题,但是很麻烦,一点也不简洁,用专业的话来说一点也不 pythonic (符合Python标准的代码)。为了追求pythonic,于是有了enumerate函数,来解决了我们又想直接迭代又需要知道元素下标的情形。 它的用法也很简单,我们把需要迭代的对象或者迭代器传入enumerate函数当中,它会为我们

Ehcache计算Java对象内存大小

最后都变了- 提交于 2020-03-24 06:25:00
在EHCache中,可以设置maxBytesLocalHeap、maxBytesLocalOffHeap、maxBytesLocalDisk值,以控制Cache占用的内存、磁盘的大小(注:这里Off Heap是指Element中的值已被序列化,但是还没写入磁盘的状态,貌似只有企业版的EHCache支持这种配置;而这里maxBytesLocalDisk是指在最大在磁盘中的数据大小,而不是磁盘文件大小,因为磁盘文中有一些数据是空闲区),因而EHCache需要有一种机制计算一个类在内存、磁盘中占用的字节数,其中在磁盘中占用的字节大小计算比较容易,只需要知道序列化后字节数组的大小,并且加上一些统计信息,如过期时间、磁盘位置、命中次数等信息即可,而要计算一个对象实例在内存中占用的大小则要复杂一些。 计算一个实例内存占用大小思路 在Java中,除了基本类型,其他所有通过字段包含其他实例的关系都是引用关系,因而我们不能直接计算该实例占用的内存大小,而是要递归的计算其所有字段占用的内存大小的和。在Java中,我们可以将所有这些通过字段引用简单的看成一种树状结构,这样就可以遍历这棵树,计算每个节点占用的内存大小,所有这些节点占用的内存大小的总和就当前实例占用的内存大小,遍历的算法有:先序遍历、中序遍历、后序遍历、层级遍历等。但是在实际情况中很容易出现环状引用(最简单的是两个实例之间的直接引用

Js深度克隆解析

北城以北 提交于 2020-03-23 18:29:59
Js克隆(clone),就是数据拷贝,包括基础类型的数据和引用类型的数据,而深度克隆(deepClone)就是针对引用类型,如数组和对象。 两种拷贝的区别在于:浅拷贝时,拷贝出的对象指向原对象的地址,当其值发生改变时,原对象的值也发生改变;          深度拷贝,拷贝出的对象指向一个新的地址,当其值发生改变时,原对象的值不受影响。 下面列出深度拷贝的代码及其详细注释: var obj = {//待拷贝的对象 name:"abc", age:"123", card:['visa','master'], wife:{ name:"bcd", son:{ name:"aaa" } }, a:function(){} } function deepclone(origin , target){ var target = target || {}, tostr = Object.prototype.toString,//使用Object.prototype.toString.call方法进行对象和数组的区分,所以先将其进行存储以便使用 arr = '[object Array]'; for(var prop in origin){ if(origin.hasOwnProperty(prop)){//防止拷贝的对象从原对象的原型上取值 if(origin[prop] !== "null"

聊聊IO多路复用之select、poll、epoll详解

南笙酒味 提交于 2020-03-22 23:41:55
IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: 当客户处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用。 当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。 如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用。 如果一个服务器要处理多个服务或多个协议,一般要使用I/O复用。 与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。 目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,pselect,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。 对于IO多路复用机制不理解的同学,可以先行参考《聊聊Linux 五种IO模型》,来了解Linux五种IO模型。

对象的扩展

£可爱£侵袭症+ 提交于 2020-03-22 01:18:32
本文为学习笔记; 原文链接 <<<<转载请注明原文出处! 对象( object )是 JavaScript 最重要的数据结构。ES6 对它进行了重大升级,本章介绍数据结构本身的改变 属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同于 const baz = {foo: foo}; 上面代码表明: ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。 下面是另一个例子。 function f(x, y) { return {x, y}; } // 等同于 function f(x, y) { return {x: x, y: y}; } f(1, 2) // Object {x: 1, y: 2} 除了属性简写,方法也可以简写。 const o = { method() { return "Hello!"; } }; // 等同于 const o = { method: function() { return "Hello!"; } }; 下面是一个实际的例子。 let birth = '2000/01/01'; const Person = { name: '张三', /

Leetcode题解——数据结构之树

戏子无情 提交于 2020-03-21 09:06:04
递归 1. 树的高度 2. 平衡树 3. 两节点的最长路径 4. 翻转树 5. 归并两棵树 6. 判断路径和是否等于一个数 7. 统计路径和等于一个数的路径数量 8. 子树 9. 树的对称 10. 最小路径 11. 统计左叶子节点的和 12. 相同节点值的最大路径长度 13. 间隔遍历 14. 找出二叉树中第二小的节点 层次遍历 1. 一棵树每层节点的平均数 2. 得到左下角的节点 前中后序遍历 1. 非递归实现二叉树的前序遍历 2. 非递归实现二叉树的后序遍历 3. 非递归实现二叉树的中序遍历 BST 1. 修剪二叉查找树 2. 寻找二叉查找树的第 k 个元素 3. 把二叉查找树每个节点的值都加上比它大的节点的值 4. 二叉查找树的最近公共祖先 5. 二叉树的最近公共祖先 6. 从有序数组中构造二叉查找树 7. 根据有序链表构造平衡的二叉查找树 8. 在二叉查找树中寻找两个节点,使它们的和为一个给定值 9. 在二叉查找树中查找两个节点之差的最小绝对值 10. 寻找二叉查找树中出现次数最多的值 Trie 1. 实现一个 Trie 2. 实现一个 Trie,用来求前缀和 递归 一棵树要么是空树,要么有两个指针,每个指针指向一棵树。树是一种递归结构,很多树的问题可以使用递归来处理。 1. 树的高度 104. Maximum Depth of Binary Tree (Easy)