搜索到与相关的文章
编程技术

【排序结构4】 归并排序

归并排序O(N*logN)是另一种效率很高的排序方法。"归并"的含义就是将两个或两个以上的有序表组合成一个有序表。加入两个有序表的长度分别为m、n,则一次归并的时间复杂度为O(m+n)。我们可以用"归并"的思想来实现排序。假如待排序列含有n个关键字,则可看成是n个有序的子序列,每个序列长度为1,然后两两归并,得到[n/2]个长度为2或1的子序列,在两两归并....,知道得到一个长度为n的有序序列为止。这就是2-路归并算法。下图就是2-路归并排序的一个例子:

系统 2019-08-29 21:59:43 2049

编程技术

大话重构连载15:采用Mock技术完成测试

第五次重构我们引入了数据库的设计,用户信息要从数据库中读取,问候语库存储在数据库中,并支持添加与更新。数据库的引入使自动化测试变得困难了,因为数据状态总是变化着的,而这种变化使得测试过程不能复现,这是我们不愿看到的。因此,我们在设计时将业务与数据库访问分离,形成了UserDao与GreetingRuleDao。此时,我们的设计应当遵从“依赖反转”原则,即将UserDao与GreetingRuleDao设计成接口,并编写它们的实现UserDaoImpl与Gr

系统 2019-08-29 21:59:03 2049

编程技术

一堂如何提高代码质量的培训课

今天这堂培训课讲什么呢?我既不讲Spring,也不讲Hibernate,更不讲Ext,我不讲任何一个具体的技术。我们抛开任何具体的技术,来谈谈如何提高代码质量。如何提高代码质量,相信不仅是在座所有人苦恼的事情,也是所有软件项目苦恼的事情。如何提高代码质量呢,我认为我们首先要理解什么是高质量的代码。高质量代码的三要素我们评价高质量代码有三要素:可读性、可维护性、可变更性。我们的代码要一个都不能少地达到了这三要素的要求才能算高质量的代码。1.可读性强一提到可读

系统 2019-08-29 21:58:58 2049

编程技术

XSS 前端防火墙 —— 天衣无缝的防护

上一篇讲解了钩子程序的攻防实战,并实现了一套对框架页的监控方案,将防护作用到所有子页面。到目前为止,我们防护的深度已经差不多,但广度还有所欠缺。例如,我们的属性钩子只考虑了setAttribute,却忽视还有类似的setAttributeNode。尽管从来不用这方法,但并不意味人家不能使用。例如,创建元素通常都是createElement,事实上createElementNS同样也可以。甚至还可以利用现成的元素cloneNode,也能达到目的。因此,这些都

系统 2019-08-12 09:30:32 2049

编程技术

23种设计模式(3):抽象工厂模式

文章来源:http://blog.csdn.net/zhengzhb/article/details/7359385定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,

系统 2019-08-12 09:30:25 2049

编程技术

Flex学习资料大全

原文地址:http://mambotango.bloggerspaces.com/2007/07/flex-2-flex.html1个半月前,我参加了BEA公司在西安人民大厦举行的Dev2DevTeachDays。会上有幸聆听了Adobe公司马健(音)先生关于Flex2及相关技术的演讲。他通过介绍YahooMap强大的功能,使我第一次了解到FLex。演讲虽然只有短短的半个小时,但是我却深深的被Flex强大的表现力所吸引。随后的日子里我对比了当前诸多RIA,

系统 2019-08-12 09:30:03 2049

编程技术

从输入网址到显示页面:浏览器工作原理拆解分析

从输入网址到显示页面:浏览器工作原理拆解分析本文将深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~1.首先嘛,你得在浏览器里输入网址:2.浏览器查找域名的IP地址导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:浏览器缓存–浏览器会缓存DNS记录一段时间。有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。系统缓存–如果在浏览器缓存里没有找到需要的记录,浏览器

系统 2019-08-12 09:29:54 2049

Python

Python3 系列之 并行编程

进程和线程进程是程序运行的实例。一个进程里面可以包含多个线程,因此同一进程下的多个线程之间可以共享线程内的所有资源,它是操作系统动态运行的基本单元;每一个线程是进程下的一个实例,可以动态调度和独立运行,由于线程和进程有很多类似的特点,因此,线程又被称为轻量级的进程。线程的运行在进程之下,进程的存在依赖于线程;开胃菜基于Python3创建一个简单的进程示例fromthreadingimportThreadfromtimeimportsleepclassCoo

系统 2019-09-27 17:57:01 2048

Python

python基础语法

第一个Python程序交互式编程交互式编程不需要创建脚本文件,是通过Python解释器的交互模式进来编写代码。linux上你只需要在命令行中输入Python命令即可启动交互式编程,提示窗口如下:$pythonPython2.7.6(default,Sep92014,15:04:36)[GCC4.2.1CompatibleAppleLLVM6.0(clang-600.0.39)]ondarwinType“help”,“copyright”,“credits”

系统 2019-09-27 17:56:51 2048

Python

LeetCode 腾讯50题Python实现之《二叉树的最大深度》

题目给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],3/920/157返回它的最大深度3。思路BFS广度优先搜索,使用双端队列deque(因为性能比另外两种Queue好得多),在大循环内对二叉树的每个层做一次遍历,range(len(queue))使只遍历当前的层,每次大循环ans加1。由于每个节点仅访问一次,所以时间

系统 2019-09-27 17:56:23 2048