java API 文档的搜索引擎项目

置顶 原创 点赞0 阅读552 收藏0 评论0 2020-07-02

开发模型和测试模型

开发模型 1.瀑布模型(Waterfall Model) 瀑布模型是按线性顺序进行的开发模式,主要有计划、需求分析、设计、编码、测试和运行维护这几个阶段。当每个阶段结束的时候都会进行自我验证,如果出现问题就返回上一个阶段。   优点:强调开发的阶段性;                强调早起计划及需求调查;                强调产品测试。 缺点:依赖早期进行的唯一一次需求调查,不能

原创 点赞0 阅读583 收藏0 评论0 2020-07-31

Java API 搜索引擎项目的测试

注:①此项目不支持模糊搜索的功能,所以如果要查找一个 API 必须准确的输入才能被查找到。②我看了一下官方文档,最短的 API 长度为 3 ,最长的 API 这里先不考虑。 一、功能测试 1.等价类和边界值划分: 有效等价类 无效等价类 三位及三位以上英文字符 三位以下英文字符;数字字符;中文字符;别的特殊字符。2.设计测试用例: 测试用例 期望结果 ArrayList 能被查找到并正

原创 点赞0 阅读577 收藏0 评论0 2020-07-29

堆排序

基本原理堆排序的基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。大致过程:1.建堆(这里是以建大顶堆为例)先把数组中的数转换成二叉树的形式,在这个基础上建堆。这里用到的大顶堆的性质:所有父节点的值要大于其子节点的值。按照这个性质,将无序的二叉树调整成堆。父节点和子节点计算:如图是一个简易的二叉树,蓝色的数字为节点的序号。计算父节点的序号要根据

原创 点赞0 阅读459 收藏0 评论0 2020-06-30

构建乘积数组

题目描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]。不能使用除法。(注意:规定B[0]=A[1]A[2]...A[n-1],B[n-1]=A[0]A[1]...A[n-2];)解法一:暴力法由于B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]

原创 点赞0 阅读115 收藏0 评论0 2020-06-28

层序遍历

什么是层序遍历层序遍历就是从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。例如这样一个二叉树:[3,9,20,null,null,15,7]返回结果为:代码实现:ArrayList<ArrayList<Integer>>Print(TreeNodepRoot){ArrayList<ArrayList<Integer>>res=newA

原创 点赞0 阅读240 收藏0 评论0 2020-06-23

删除链表中重复的结点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5处理后为1->2->5分析:这个题我分了两种情况,一种是头结点不用删除(即头结点和后面结点的值不相等),另一种是头结点需要删除(即头结点和后面结点的值相等)。如果头结点删除了就要重新找新的头结点。对于

原创 点赞0 阅读189 收藏0 评论0 2020-06-20

多线程的实现和常用操作方法

一、多线程的实现1.继承Thread类java.lang.Thread是一个线程操作的核心类。新建一个线程最简单的方法就是直接继承Thread类,而后覆写该类中的run()方法(就相当于主类中的main方法)publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.out.println("MyThreadisrun");}}

原创 点赞0 阅读146 收藏0 评论0 2020-06-16

TCP三次握手

TCP三次握手建立连接过程:①客户端向服务端发送SYN,表示要与服务端建立连接。客户端进入SYN_SENT状态,等待服务器确认。②服务端接收到来自客户端的请求,并返回ACK告诉客户端接收到了,同时向客户端发送SYN,表示服务端也要向客户端建立连接。即发送SYN+ACK包,此时服务器进入SYN_RCVD状态。③客户端接收到了来自服务端的请求,向服务端发送ACK确认建立连接。此时客户端和服务端都进入E

原创 点赞0 阅读210 收藏0 评论0 2020-06-12

两个链表的第一个公共结点

题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)链表形式类似于下面这样(这种是有交点的情况):我的思路是用两个指针,一个是快指针,一个是慢指针,快指针先走两个长度差的步数,然后慢指针再和快指针一起走,指向同一个结点的时候就是两个链表的第一个公共结点。publicListNodeFindFirstCommonN

原创 点赞0 阅读140 收藏0 评论0 2020-06-11

非递归的二叉树遍历

非递归遍历二叉树借用List实现的,具体实现方法如下。前序遍历非递归代码实现:publicList<Integer>preOrder(TreeNoderoot){List<Integer>list=newArrayList<>();if(root==null){returnlist;}list.add(root.val);//根据前序遍历的特性,先将根节点的值加

原创 点赞0 阅读245 收藏0 评论0 2020-06-08

二叉树的遍历

前序遍历NLR:前序遍历(PreorderTraversal)又叫先序遍历。遍历顺序为:根节点—>左子树—>右子树,所以上图前序遍历的结果为ABDECFG代码实现:publicvoidprevOrder(TreeNoderoot){//递归方式if(root==null){return;}System.out.print(root.val);prevOrder(root.left);p

原创 点赞0 阅读144 收藏0 评论0 2020-06-08

OSI七层模型和TCP/IP五层(四层)模型的概念

OSI七层模型概念:OSI(OpenSystemInterconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。第一层:物理层功能:以“0”、“1”代表电压的高低、灯光的闪灭。界定连接器和网络线的规格。第二层:数据链路层功能:互连设备之间传送和识别数据帧。第三层:网络层功能:地址管理和路由选择第四层:传输层功能:管理两个节点之间的数据传输。负责可靠传

原创 点赞0 阅读866 收藏0 评论0 2020-06-06

调整数组顺序使奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。我的思路:这道题和《剑指offer》上的题有一点差别,就是这里多添加了一个条件:保证奇数和奇数,偶数和偶数之间的相对位置不变。所以,解法也有一点改变。对于相对位置不变这个条件,冒泡排序的就有这样一个特性,所以可以参考冒泡排序

原创 点赞0 阅读180 收藏0 评论0 2020-05-28

替换空格

题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为WeAreHappy.则经过替换之后的字符串为We%20Are%20Happy。方法一:publicStringreplaceSpace(StringBufferstr){for(inti=0;i<str.length();i++){if(str.charAt(i)==''){str=str.replace(i

原创 点赞0 阅读237 收藏0 评论0 2020-05-22

JVM运行时的内存

Java堆从GC的角度可以分为:新生代(Eden区、FromSurvivor区和ToSurvivor区)和老年代(java8取消了永久代,采用了Metaspace)。一、新生代是用来存放新生的对象,一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代又分为Eden区、ServivorFrom、ServivorTo三个区。Eden区:Java新对象的出生地

原创 点赞0 阅读183 收藏0 评论0 2020-05-19

JVM内存

一、JVM内存区域JVM内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA堆、方法区】、直接内存。二、线程私有区域线程私有数据区域生命周期与线程相同,依赖用户线程的启动/结束而创建/销毁。程序计数器:是一块较小的内存空间,是当前线程所执行的字节码的行号指示器。正在执行java方法的话,计数器记录的是虚拟字节码指令的地址(当前指令的地址)。如果还是native方

原创 点赞0 阅读103 收藏0 评论0 2020-05-17

JAVA集合总结

一、接口继承关系图如下1.Collection:Collection是集合List、Set、Queue的最基本接口。2.Iterator:迭代器,可以通过迭代器遍历集合中的数据。3.Map:是映射表的基础接口。二、ListJava的list是很常用的数据类型。List是有序的Collection。JavaList有三个实现类:Arraylist、Vector、LinkedList。Arraylis

原创 点赞0 阅读121 收藏0 评论0 2020-05-14

归并排序

一、什么是归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二、图解先将无序数组分割,经过排序,将两个有序数组再拼接。三、原理归并排序的原理就是合并两个有序数组。合

原创 点赞0 阅读263 收藏0 评论0 2020-05-11

关于异常的总结

一、异常的分类java内置异常类之间的继承关系如图:1.Throwable:Throwable是Java语言中所有错误或异常的超类。下一层分为Error和Exception。Error:Error指的是Java运行时内部错误和资源耗尽错误。应用程序不抛出此类异常。这种内部错误一旦出现,除了告知用户并使程序终止之外,再无能无力.。这种情况很少出现。Exception:Exception有两个子类,一

原创 点赞0 阅读158 收藏0 评论0 2020-05-07

快速排序

一、原理1.从待排序区间选择一个数,作为基准值(index);2.Partition:遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;3.采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度==1,代表已经有序,或者小区间的长度==0,代表没有数据。二、图解1.以{1,3,6,5,0,2}为例,将较小的数换在左边

原创 点赞0 阅读76 收藏0 评论0 2020-03-13

冒泡排序

一、冒泡排序的原理冒泡排序:将待排序的一组数分为有序区间和无序区间。先在无序区间通过相邻数的比较,将无序区间的最大数依次冒泡到最上面,持续这个过程,直到整组数有序。二、图解分析以[3,0,5,4,1,2]为例,进行冒泡排序。第一趟:从下往上依次两两比较,将最大数交换到最上面,第一趟完成后橙色部分为已排好的部分。第二趟:比较方法同上,橙色部分为排好的区间,我们发现有序区间比第一趟的有序区间多一个数。

原创 点赞0 阅读381 收藏0 评论0 2020-02-21

选择排序

1.选择排序的基本原理第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。2.图解按从小到大的顺序为例如图,将整个序列分为有序序列和无序序列。蓝色部分是每次进行比较的内容,将相对小的数字交换到前面;橙色部分则是已排好的序列。3.代码实现publicst

原创 点赞0 阅读147 收藏0 评论0 2020-02-12

希尔排序

1.希尔排序希尔排序法又称缩小增量法。是直接排序的优化。2.基本思想希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成一个组,所有距离为一样的记录分在同一组内,并对每一组内的记录进行排序。然后取整数一半的值,重复上述分组和排序的工作。当值到达1时,所有记录在同一组内排好序。3.图解(按从小到大排序,以6个数字为例)①将整个数组分组gap=arr.length/2;如图颜色一样的为一

原创 点赞0 阅读297 收藏0 评论0 2020-02-12

插入排序

1.什么是直接插入排序依次将待排序中的数字直接插入到已按从小到大(或者从大到小)排好的序列中去,直到插完所有数字为止。2.图示表示3.代码实现```publicstaticvoidinsertSort(int[]array){for(intbound=1;bound<array.length;bound++){inttmp=array[bound];intcur=bound-1;//[1,b

原创 点赞0 阅读283 收藏0 评论0 2020-02-10

无头双向链表的实现

1.头插法publicvoidaddFirst(intdata){//头插DLinkedNodenewNode=newDLinkedNode(data);//加入的新节点DLinkedNodenext=head.next;newNode.next=next;next.prev=newNode;head.next=newNode;newNode.prev=head;}2.尾插法publicvoida

原创 点赞0 阅读351 收藏0 评论0 2019-12-03

无头单向非循环链表的实现

链表:是一种物理存储结构上非连续存储结构。无头单向非循环链表示意图:下面就来实现这样一个无头单向非循环的链表。1.头插法publicvoidaddFirst(intelem){LinkedNodenode=newLinkedNode(elem);//创建一个节点if(this.head==null){//空链表this.head=node;return;}node.next=head;//不是空链

原创 点赞1 阅读284 收藏0 评论0 2019-11-20

顺序表的实现

顺序表:是用一段物理地址连续的存储单元依次存储数据元素的线性结构。它的空间是连续的。下面以数组存储的形式实现顺序表(增删查改)1.先定义变量,并实现打印顺序表privateint[]data=newint[10];privateintsize=0;//size表示当前数组中有多少个有效元素publicvoiddisplay(){//打印顺序表System.out.print("[");//以数组的

原创 点赞1 阅读130 收藏0 评论0 2019-11-12

对Java方法、方法重载的理解

一、方法1.什么是方法方法就是一个代码片段,在其他地方被引用,类似于C语言当中的“函数”。2.方法的命名规则必须以字母、下划线或‘$’符号开头;可以包括数字,但不能以他开头。3.方法的基本语法//方法定义publicstatic方法返回值方法名称([参数类型形参...]){方法体代码;[return返回值];}//方法调用返回值变量=方法名称(实参...);注意:方法定义时的参数称为"形

原创 点赞1 阅读277 收藏0 评论0 2019-11-03

Java运算符的基本知识点

一.基本算术运算符基本算术运算符包括:加(+)、减(-)、乘()、除(/)、模(%)注意:模运算符(%)不仅用于整数除法取余数,还能用于浮点数。(在C/C++中模运算符%仅用于整数类型)。二.关系运算符关系运算符主要有:==、!=、<、>、<=、>=注意:关系运算符的表达式返回值都是boolean类型。三.逻辑运算符常见的逻辑运算符有:&&、||、!、&am

原创 点赞2 阅读671 收藏0 评论0 2019-09-16
  • 1
  • 2