- 博客(65)
- 收藏
- 关注
原创 【python数据结构与算法】列表实现栈及栈的应用
栈的数据结构Python的基本数据类型list是实现栈的基础通过使用列表的方法,可以实现栈的特性:列表访问实际上就是对数组的访问,python数组访问非常方便,可以直接通过指定下标分片。因此,我们有两种实现方式:将列表首端作为栈顶或列表尾端作为栈顶。这两种实现的算法复杂度是不一样的,因为列表的内存地址是连续的,列表对象寻址实际上是找到列表开始的元素所在的内存地址,尾端实现的栈可以直接在列表尾端追加或删除元素,首端实现的栈,需要将所有元素在内存中移动一遍,因此算法复杂度是O(n)尾端实现栈顶的p
2020-12-05 18:27:15 576
原创 B站学习资源整理
课程搬运up主:逆风微笑的代码狗https://space.bilibili.com/97139894讲算法的小哥哥:正月点灯笼https://space.bilibili.com/24014925
2020-12-03 09:37:03 697
原创 【Python语法】理解装饰器(预备知识:闭包)
1. python的开放封闭原则:开放:可以为函数增加新功能封闭:不能改变原函数的代码;要通过原函数的函数对象来调用函数尝试实现下面这个需求:为huaping()函数新增功能,保证其满足开放封闭原则def huaping(): print('插花功能')尝试1:直接在函数中新增功能,违反了封闭原则中不能改变原函数代码的要求def huaping(): print('插花功能') print('观赏功能’) huaping()尝试2:定义一个新的函数,新的函数去
2020-11-30 17:41:27 357
原创 【Python语法】可迭代对象、迭代器对象、迭代器、生成器:从傻傻分不清楚到清清楚楚
目录1. 可迭代对象2. 迭代器对象3. 迭代器4. 生成器1. 可迭代对象可以转换为不依赖索引取值的容器,通过__ iter __()方法生成迭代器对象列表、字典、集合、字符串、元组,这类容器都是可迭代对象# 定义不同的容器,他们都是可迭代对象test_dict = {1: 'a', 2: 'b', 3: 'd'}test_list = [100, 200, 300, 400]test_set = {21, 22, 23, 24}# 可迭代对象,通过__iter__()方法获得对应的可迭
2020-11-28 16:44:11 297
原创 【Python语法】循序渐进理解闭包
循序渐进理解闭包1. 闭包初接触1.1 闭包基本语法结构:1.2 明确变量作用域:2. 从for循环开始2.1 python for循环特性:没有域的概念2.2 修改代码,让返回的flist具有递增相乘的结果:2.3 使用闭包3. 玩棋盘游戏4. 闭包特性的另一种实现1. 闭包初接触在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。1.1 闭包基本语法结构:# 外部函数返回内部函数def outside(attr1): # 内
2020-11-26 22:47:30 468
原创 【Python语法】Max,Min函数从入门到精通
Max函数入门查看源代码def max(*args, key=None): # known special case of max """ max(iterable, *[, default=obj, key=func]) -> value max(arg1, arg2, *args, *[, key=func]) -> value With a ...
2020-02-13 17:21:21 531
原创 【Pyhon语法】一行代码把单词列表拼接成字符串
字符串的处理千姿百态,有时候会遇到这样一个需求:输入:[‘a’,‘p’,‘p’,‘l’,‘e’]输出:[apple]我们知道字符串变量可以直接用运算符’+‘连接,所以我们没有必要用for循环对元素进行累加:seq=[]list=['a','b','c','d','e']word = ''for item in list: word += itemseq.append(wor...
2020-02-12 00:12:22 859
原创 输入序列的两种方式:input()与readline()
处理空格分隔的序列输入的文本将作为字符串存入变量中,如果我们处理的是数字序列,需要在赋值给列表变量时,转化成int类型的变量 sn=list(map(int,input('Please input some numbers: \n').split()))print(sn,'\n')处理回车分隔的序列要把换行输入的序列存入变量,需要使用循环语句。split()函数不可少,不带任何参数表示按...
2020-02-09 18:18:33 1771
原创 【Python语法】reduce函数运算优先级的问题
reduce函数常用来对序列求和,但是在使用过程中,出了点小问题首先看一个正常的求和表达式:reduce(lambda x,y:x+y,range(1,101)) #对1~100的数求和如果我想求1~10的平方和呢:reduce(lambda x,y:x**2+y**2,range(1,11))运行后发现结果不对:25800022600047052140012507345164607...
2020-02-08 21:18:44 251
原创 【XML】DOM—JAXP 解析
DOM 解析器文档对象模型(Document Object Model),规定了解析文档的接口,各种语言都可以按照DOM规范去实现这些接口,DOM规范可以解析的文档和广泛,包括XML文件和HTML文件。语言绑定:在特定语言中,使用DOM规范需要定义DOM规范制定的接口,并给出实现接口的类的集合。Sun公司提供了JAXP,实现了DOM规范的Java语言绑定。
2016-12-30 18:21:49 641
原创 【XML】SAX 解析
1. XML SAX解析1.1 SAX解析器SAX(Simple API for XML)是一种XML文档解析标准是一个公共的基于事件的解析器SAX作为接口,是事件驱动型XML解析的标准接口,对文档进行顺序扫描,当扫描到document开始,element开始与结束,document结束等地方时,通知事件处理函数作出相应的动作。与DOM相比,SAX占用的系统资源更少1.2 SAX API事件
2016-12-30 15:21:42 480
原创 【XML】文档结构与语法规则
XML定义XML=Extensible Markup Language,可扩展标记语言,适合Web传输,设计宗旨是为了传输数据。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据,XML标签没有被预定义,需要开发者根据需要自行定义标签。
2016-12-30 15:18:21 608
原创 网络数据包捕捉工具jNetPcap学习笔记(一)
Java平台本身不支持底层网络操作,需要第三方包利用JNI封装不同系统的C 库来提供Java的上层接口。常用的类库包括 JPcap,JNetPcap等,他们都是基于TcpDump/LibPcap的Java封装。本文对jNetPcap官网的Tutorial教程做了分析,欢迎大家指正。
2016-12-28 22:40:54 9800 5
原创 【高级特性】String,StringBuffer,StringBuilder
1.String1.1 String的创建方式常用创建方式:String str=”thisi is a string“ 相同的字符串只创建一次,多个字符串常量可以同时对其内存空间引用。 不常用的创建方式:String str=new String(“this is a string”) 针对每一个字符串变量,栈内存都要开辟新的空间存储变量,即使变量是完全相同的。1.2 String对象的特点
2016-12-26 21:26:03 539
原创 【Eclipse的正确打开方式】从StarUML到GEF到AmaterasUML
因为要写论文,想找个优雅一点的姿势画类图,当时不知道怎么想的,在viso和StarUML里选了后者(是的,我就是有自虐倾向),后来在一抹黑的界面上捣鼓了半天才知道现在能用的只有破解版……StarUML确实功能齐全有强大,但是画多了还是神烦,尤其是照着源代码画的时候,我感觉我在做史上最无聊的事情!!!就在这时,这篇帖子拯救了我: Eclipse UML插件AmaterasUML的配置及使用 时隔多年
2016-12-23 21:37:58 5307
原创 【重构】使用简单工厂模式重构Switch语句
Code Smell:Switch StatementsSwitch语句的问题在于,一旦有新case出现,Switch语句块就要加上这条case。如果Switch语句块很多且散布在不同的地方,找到并修改它们将是非常恐怖的事
2016-12-23 12:29:27 7549 2
原创 【Eclipse的正确打开方式】从Libraries中的jar包到源代码和API连接
Eclipse是一个通用型的开发环境,在学习过程中,对Eclipse配置原理的深入理解有助于我们更好的使用这个强大的开发工具。
2016-12-22 12:43:18 3049 1
原创 【JUnit实战】为应用程序Controller设计单元测试
在本章中,我们为一个简单但完整的应用程序controller创建了一个测试用例。测试用例并不是测试单个的组件,而是检验多个组例,如何一起工作。我们从一个可以用于任何类的简单测试用例开始.然后把新的测试逐个添加到测试用例中,直到所有初始的组件都被测试到。由于断言变得越来越复杂、因此我们通过Hamcrest匹配器找到了一种简化断言的方法。我们预期这个包会日益增长,所以我们为测试类创建了另一个源代码目录。
2016-12-20 22:44:25 3173
原创 【设计模式】装饰模式
定义:表示动态的给一个对象添加一些新的功能,但是比生成子类方式更灵活。(当然利用子类继承父类也可以实现,但是不推荐)核心:动态地扩展一个实现类的功能。(装饰模式是继承关系的一个替换方案,不管装饰多少层,返回的对象构件角色)
2016-12-16 12:14:40 277
原创 【IO流】字节输入输出流
0. 字节流框架1. InputOutputStreanm 字节输入输出流字节流类用于向字节流读写8位二进制的字节,一般的,字节流类主要用于读写注入图像或声音等多媒体的二进制数据.
2016-12-14 21:49:22 882
原创 【IO流】File类及递归算法访问文件
1. File类File类的对象表示了磁盘上的文件或目录File类提供了平台无关的方法对磁盘上的文件或目录进行操作File类直接处理文件和文件系统,比如删除文件,获取文件长度大小等信息File类没有提供方法从文件读取或向文件存储信息
2016-12-14 12:19:55 389
原创 【IO流】IO框架
流是一个很形象的概念,当程序需要读取数据的时候,会开启一个通向数据源的流。这个数据源可以是文件,内存,或是网络连接。类似的。当程序需要写入流的时候就会开启一个通向目的地的流。
2016-12-14 10:57:07 532
转载 【多线程】多线程编程:线程通信
线程通信:线程通信使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。线程通信的实现方式:1. 通过共享对象通信2. 忙等待3. wait(),notify()和 notifyAll()4. 丢失的信号5. 假唤醒6. 多线程等待相同信号
2016-12-14 10:34:06 294
原创 【多线程】多线程编程:线程同步
线程同步:为什么需要同步?线程同步是为了防止多个线程访问一个数据对象时,对数据造成破坏。线程的同步是保证多线程安全访问竞争资源的一种手段同步和锁:Java中每个对象都有一个内置锁获得一个对象的锁也称为:获取锁;锁定对象;在对象上锁定;在对象上同步一个对象只有一个锁,所以如果一个线程获得该锁,该对象上的其他线程就没有可以获得的锁,直到第一个线程释放锁。
2016-12-14 10:02:14 542
原创 【多线程】Java线程模型
程序:安装在磁盘上的一段指令的集合,是静态的。进程:是运行中的程序,是动态的。每个进程有独立的资源空间。线程:又称轻量级进程,是程序执行流的最小单元,是程序中单一的顺序控制流程。线程是进程中的一个实体,是被系统独立调度和分派的基本单位。多线程:在单个程序中,可以同时运行多个不同的线程执行不同的任务
2016-12-13 12:02:08 334
原创 【异常】案例讲解:医生给病人看病
案例介绍:工作者在工作过程中可能会生病,医生监控此病人的状态,如发现工作者生病了就给医治。案例设计:1. 创建工作者类,封装相应的属性和方法。工作者是生病的主体,所以由工作者类抛出自定义异常。2. 创建医生类,封装相应的属性和方法。医生医治疾病,可以再医生类里捕获自定义异常。3. 创建自定义异常类,当工作者生病的时候就抛出此自定义异常。
2016-12-13 11:28:34 1358
原创 【异常】自定义异常
Java提供的异常体系不可能预见所有希望加以报告的错误:1. 自定义异常类必须从已有的异常类继承2. 自定义异常是不是受查异常(非受查异常)就看父类是不是受查异常(非受查异常)3. 建立新的异常类型最简单的方法就是让编译器产生默认构造方法4. 对异常来说,最重要的部分就是它的类名,抛出后可以通过类名判断发生异常的原因5. 可以为异常类定义一个接收字符串参数的构造方法,字符串参数描述异常信息
2016-12-13 11:17:58 505
原创 【异常】异常的概念,分类和处理机制
异常是指程序运行过程中发生的一些不正常事件(如除0溢出,数组下标越界,所要读取的文件不存在) 抛出异常:Java程序的执行过程中如果出现异常事件,可以生成一个异常类对象,该对象封装了异常事件的信息,并将其提交给Java运行系统,这个过程称为抛出异常,不出力的话会直接导致程序中断。设计良好的程序应该在程序异常发生时提供处理这些异常的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果
2016-12-13 11:02:55 13768 2
原创 【泛型】案例讲解:自定义一个可以存放指定数据的容器
案例介绍:要求自定义一个容器,次容器可以存放指定类型的数据,通过泛型来实现案例设计: - 设计定义一个泛型类 - 设计add方法给容器添加数据 - 设计get方法获取容器中指定位置的数据 - 设计size方法获取容器中数据的多少 - 要求容器超过容量要自动扩容
2016-12-12 22:43:30 1576
原创 【泛型】泛型方法
泛型只涉及到某个方法中的参数声明时,使用泛型方法而不是泛型类。定义:不仅类可以声明泛型,类中的方法也可以声明仅用于自身的泛型,这种方法叫做泛型方法。泛型可用于返回类型声明,参数类型声明,局部变量的类型声明格式:访问修饰符<泛型列表> 返回类型 方法名(参数列表){ 实现代码}
2016-12-12 17:51:35 357
原创 【泛型】类型通配声明
同一泛型类,如果实例化时,给定的实际类型不同,则这些实例的类型是不兼容的,不能相互赋值。泛型类实例之间的不兼容性,会带来使用的不便。我们可以使用泛型通配符(?),声明泛型类的变量就可以解决这个问题。
2016-12-12 15:47:35 385
原创 【泛型】限制泛型可用类型
默认创建的类型是没有任何限制的,如果想显示泛型的数据类型,通过extends关键字指定该类型必须是继承某个类或者实现某个接口,这时候泛型就被限制在父类及其所有子类或者接口及其实现类中的数据类型范围中。
2016-12-12 15:45:51 3358
原创 【更新中】黑客与画家读书笔记
我读的是精装本,译者阮一峰的序前面有详细介绍保罗的生平,一个非常令人钦佩的创业者。他的求学生涯看似迷茫混沌,但他对多个维度知识领域的追求却成就了他之后的事业发展丰碑。从他的阅历我们似乎可以看到一模一样的事情在中国互联网领域正在发生,而他的思想和决策在当时硅谷的创业圈敢得了伟大的成功。相信他的智慧同样对今天中国的互联网从业者们有借鉴意义。
2016-12-10 21:11:29 572
原创 【泛型】泛型简介和泛型类
在泛型引入之前,如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员变量的类型不同,那么我们只能创建多个类文件,给每个类的成员变量设置不同的数据类型。这么做会导致类的膨胀,重用性太差。一种方式是对将Object作为变量类型,但是需要对获取的数据进行强制类型转换,这个过程可能导致类型转换异常。另一种方式,泛型是解决上述问题的有效方法。
2016-12-10 20:54:16 481
原创 【内部类】案例讲解:使用内部类开发一个存放数据的容器
案例介绍:开发一个容器用来存放键值对,键用来存放英文名字,值用来存放中文名字,对键值对使用内部类进行封装。案例设计:使用静态内部类封装键值对数据容器默认容量大小为5,超过就扩容2倍通过调用entryArray方法返回容器中的数据
2016-12-10 17:13:26 469
原创 【内部类】局部内部类及应用
定义在代码块,方法体内的类叫局部内部类局部内部类访问外部类的成员使用:外部类名.this.成员名对外部世界完全隐藏,只在其作用域内生成对象局部类不能加访问修饰符,因为它们不是类成员成员内部类不能与外部类重名局部内部类访问作用域内的局部变量,该局部变量需要使用final修饰
2016-12-10 16:59:13 3152 3
原创 【内部类】匿名内部类及应用
是没有名称的内部类,没有办法引用它们。必须在创建时,用new语句的一部分来声明并创建他们的实例必须继承一个类(抽象的,非抽象的都可以)或者实现一个接口。如果父类或接口是抽象类,匿名内部类必须实现其所有的抽象方法在匿名内部类中可以定义代码块,用于实例的初始化,但是不能定义静态代码块
2016-12-10 16:51:19 457
原创 【内部类】静态内部类及应用
特点:使用static修饰的成员内部类静态内部类和外部类没有任何关系,只是在生成类名和类定义时有影响静态内部类可以看做是与外部类平级的类创建静态内部类实例: 外部类名.内部类名 实例名=new 外部类名. 内部类构造方法(参数)限制:静态内部类不能与外部类重名静态内部类不能访问外部类的非静态成员,外部类不能访问内部类的非静态成员
2016-12-08 21:24:06 449
原创 【内部类】内部类的概念及成员内部类
内部类的主要特点内部类可以很好的实现隐藏,使用private,protected关键字。而这些,外部类是不能使用的。内部类可以直接访问外部类的所有成员,包括私有的成员外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才能访问内部类可以解决一些问题,比如间接地实现多继承,可以避免修改接口而实现同一个类中两种同名方法的调用(一般不这么做)
2016-12-08 21:14:15 489
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人