java
郑兽兽
睡在哪里都是睡在夜里
展开
-
常见HTTP状态码,都来瞅瞅
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码分类:HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:1** :信息,服务器收到请求,需要请求者继续执行操作2** :成功,操作被成功接收并处理3** :重定向,需要进一步的操作以完成请求4** :客户原创 2020-07-18 00:30:42 · 296 阅读 · 1 评论 -
从输入URL到浏览器显示页面,中间都经历了哪些过程?
从输入URL到浏览器显示页面,中间大概分为两个过程:1.网络通信2.页面渲染站在网络原理的角度看,网络通信差不多经历了以下过程:1. 在浏览器中输入url:用户输入url,例如http://www.baidu.com。其中http为协议www.baidu.com为网络地址,及指出需要的资源在哪台计算机上。一般网络地址可以为域名或IP地址,此处为域名。使用域名是为了方便记忆,但是为了让计算机理解这个地址还需要把它解析为IP地址。2.应用层DNS解析域名:客户端先检查本地是否有对应的IP地址,若找原创 2020-07-17 23:56:04 · 3923 阅读 · 0 评论 -
三次握手(建立连接)四次挥手(断开连接)
三次握手,四次挥手三次握手四次挥手是TCP协议中关于连接管理机制的。在正常情况下, TCP要经过三次握手建立连接, 四次挥手断开连接。那么三次握手及四次挥手到底是怎么一回事呢?一个小问题:为啥要建立连接?1.更好的保证可靠性(建立连接的过程就是在验证通信双方的发送能力和接收能力是否正常)2.协商一些重要参数具体是怎么建立连接的?给大家举一个打电话的例子。这个例子是为了说明连接可以验证双方都具有通信能力。下面这个图就类似于在协商一些重要参数。(比如在TCP中,TCP的序号不是从0开始的,初始原创 2020-07-03 23:09:24 · 354 阅读 · 0 评论 -
[编程题]密码验证合格程序(java)
密码要求:1.长度超过8位2.包括大小写字母.数字.其它符号,以上四种至少三种3.不能有相同长度大于等于2的子串重复输入描述:一组或多组长度超过2的子符串。每组占一行输出描述:如果符合要求输出:OK,否则输出NG示例1题目链接分析:1.通过字符串读取输入的数据,读到后判断长度,如果长度小于等于8,则不满足。2.对于字符串中的每个字符,进行判断,如果不满足3个及以上类型,则不满足3.题目要求不能有大于等于2的相同字符串,那么我们每次截取长度为3的字符串,与它相邻长度为3的字符串比较,原创 2020-07-03 02:17:59 · 849 阅读 · 1 评论 -
Long.toBinaryString和Long.parseLong
写两句话记录一点东西:Long.toBinaryString将一个long类型的十进制数转换为一个二进制的字符串。Long.parseLong(String s,int n)将一个String类型字符串转换为一个n进制的long类型数字public class Main { public static void main(String[] args) { long a = 2; String s = Long.toBinaryString(a);原创 2020-07-02 01:08:18 · 372 阅读 · 0 评论 -
如何实现一个阻塞队列?
阻塞队列的实现原创 2020-06-18 16:03:57 · 3370 阅读 · 2 评论 -
排序算法之冒泡排序
冒泡排序-原理:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。实现:public static void bubbleSort(int[] array) { // 从后往前遍历, 每次原创 2020-05-12 01:02:16 · 131 阅读 · 0 评论 -
排序算法之选择排序
选择排序-原理(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。实现: public static void selectSort(int[] array) { for (int bound = 0; bound < array.length; bound++原创 2020-05-12 00:53:32 · 78 阅读 · 0 评论 -
插入排序之直接插入排序与希尔排序
直接插入排序-原理:整个区间被分为有序区间无序区间 :每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入。基本思想:直接插入插排的基本思想是:当插入第i(i >= 1)时,前面的array[0],array[1],……,array[i-1]已经排好序。这时,用array[cur]的排序码与V[i-1],V[i-2],…的排序码顺序进行比较,找到插入位置即将V[i]插入,原来位置上的元素向后顺移。实现:// 以升序排序为例 public static void in原创 2020-05-12 00:41:26 · 149 阅读 · 0 评论 -
合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。来源:力扣(LeetCode)代码:/** * Definition for a binary tree node. * public class...原创 2020-05-06 22:18:34 · 111 阅读 · 0 评论 -
层序遍历二叉树
分析:层序遍历二叉树借助队列实现,先放入根节点,取队首,遍历根节点,再放入其左子树,右子树,再取,依次遍历。代码:public class TreeTest { static class TreeNode{ TreeNode left; TreeNode right; int val; public TreeNode(i...原创 2020-04-22 22:19:46 · 127 阅读 · 0 评论 -
对称二叉树(力扣习题)
题目描述:给定一个二叉树,检查它是否是镜像对称的。实例:代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; }...原创 2020-04-22 22:03:07 · 102 阅读 · 0 评论 -
平衡二叉树(力扣习题)
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode ...原创 2020-04-22 21:50:19 · 619 阅读 · 0 评论 -
二叉树的最大深度(力扣习题)
题目描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:来源:力扣代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...原创 2020-04-22 21:41:30 · 114 阅读 · 0 评论 -
判断一个树是否为二叉树的子树(力扣习题)
题目描述:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例:来源:力扣(LeetCode)代码:/** * Definition for a binary tree node. * public class TreeNode { * int ...原创 2020-04-22 21:31:27 · 344 阅读 · 0 评论 -
给定两个二叉树,编写一个函数来检验它们是否相同。(力扣习题)
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例:来源:力扣(LeetCode)。代码:** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr...原创 2020-04-22 21:22:58 · 600 阅读 · 0 评论 -
二叉树的后序遍历(力扣题)
给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3]输出: [3,2,1]来源:力扣(LeetCode)代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode righ...原创 2020-04-20 20:53:33 · 266 阅读 · 0 评论 -
二叉树的中序遍历(力扣)
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]来源:力扣(LeetCode)代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeN...原创 2020-04-20 20:49:44 · 172 阅读 · 0 评论 -
求二叉树第K层节点个数(递归)
下面是一个二叉树,我们需要求得第K层的节点个数。代码:public class TestTree { static class Node { public char val; public Node left; public Node right; public Node(char val) { t...原创 2020-04-20 20:25:03 · 3576 阅读 · 0 评论 -
求二叉树的叶子节点个数(递归)
下面是一个二叉树,我们需要编写代码求其的叶子节点个数。分析:一个树的左子树和右子树都为null就是叶子节点,我们需要对每个数进行判断,依次遍历,遇到满足条件的进行计数即可。我在下面用了两种方法,其中一种是借助静态成员变量代码:public class TestTree { static class Node { public char val; p...原创 2020-04-20 20:07:38 · 9756 阅读 · 0 评论 -
求二叉树节点个数(递归)
下面有一个二叉树,求其节点个数。分析:想要得到二叉树的节点个数,我们可以递归遍历这个二叉树,当一个树的根节点不为null时,对其计数。我在下面得代码里写了两种方法,一种是借助成员变量,一种是直接递归计数。代码:public class TestTree1 { static class Node { public char val; public ...原创 2020-04-19 21:15:36 · 7567 阅读 · 0 评论 -
如何自定义异常实现登录?
要求:实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理。分析:我们既然要用自定义异常处理有可能出现的错误,肯定需要定义两个异常,一个用户名错误时抛出,一个用户名正确但密码错误时抛出。代码:public class NameException extends Exception { public NameExc...原创 2020-04-08 00:12:40 · 383 阅读 · 0 评论 -
如何理解java中的多态?
多态:顾名思义, 就是 “一个引用, 能表现出多种不同形态”。Java实现多态有三个必要条件:1.继承:在多态中必须存在有继承关系的子类和父类。2.重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。接下来,我们用一段代码来更清楚直接的理解什么是多态比如,...原创 2020-04-03 22:07:10 · 544 阅读 · 2 评论 -
给定一个链表,判断链表中是否有环(易理解)
代码:/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public cl...原创 2020-03-31 00:16:34 · 302 阅读 · 0 评论 -
删除链表中等于给定值 key 的所有节点
public void removeAllKey(int Key){ Node prev = this.head; Node cur = this.head.next; while(cur != null) { if(cur.data == key) { prev.next = cur.next; cur = ...原创 2020-03-31 00:07:42 · 214 阅读 · 0 评论 -
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
实现类:public class Solution { public ListNode detectCycle(ListNode head) { if(head==null) { return null; } ListNode fast=head; ListNode slow = head; ...原创 2020-03-31 00:04:20 · 161 阅读 · 0 评论 -
编写一个程序,找到两个单链表相交的起始节点。
如下面的链表。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * Lis...原创 2020-03-31 00:00:10 · 225 阅读 · 0 评论 -
链表的回文结构
题目描述:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1返回:true代码:import java.util.*;/*public class ListNode { int ...原创 2020-03-30 23:54:04 · 111 阅读 · 0 评论 -
删除链表中重复的结点
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5代码:/* public class ListNode { int val; ListNode next = null; ListNod...原创 2020-03-30 23:50:24 · 59 阅读 · 0 评论 -
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(in...原创 2020-03-30 23:47:21 · 3250 阅读 · 0 评论 -
无头双向链表的实现
1.链表操作类class LinkedListNode{ public int val; public LinkedListNode prev; public LinkedListNode next; public LinkedListNode(int val) { this.val = val; }}public class Doub...原创 2020-03-29 19:56:25 · 188 阅读 · 0 评论 -
返回链表的中间节点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3示例 2:输入:[1,2,3,4,5,6]输出:此列表中的结点 4代码:class Solution { public ListNode middleNode(ListNode head) { ...原创 2020-03-27 21:14:19 · 154 阅读 · 0 评论 -
反转一个单链表。
示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL代码:class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head; ListNode prev = nul...原创 2020-03-27 21:05:21 · 80 阅读 · 0 评论 -
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前。
题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。public class Partition { public ListNode partition(ListNode pHead, int x) { ...原创 2020-03-27 21:00:37 · 822 阅读 · 0 评论 -
无头单向非链表的实现
//节点类class Node { public int data; public Node next; public Node(int data) { this.data = data; this.next = null; }}//单链表public class MyLinedList { public Node h...原创 2020-03-27 20:56:54 · 85 阅读 · 0 评论 -
java交换两个数的内容(体现封装性)
操作类:public class Swap { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; }}测试类:public class Zheng { //功能实现...原创 2020-03-24 16:31:48 · 167 阅读 · 0 评论 -
实现对动态顺序表的增删改查
增删改查的操作类public class SeqList { public int[] elem; public int usedSize; public static final int DEFAULT_SIZE = 10; public SeqList() { this.elem = new int[DEFAULT_SIZE]; ...原创 2020-03-23 16:17:47 · 91 阅读 · 0 评论 -
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
大家可以去画一下图分析,其实这是一个菲波拉契数列问题,看代码吧!代码:public static void main(String[] args) { int f1=1,f2=1,f; System.out.println(f1); System.out.println(f2); int m=30; ...原创 2020-03-19 00:04:22 · 1220 阅读 · 0 评论 -
给定一个整型数组, 将所有的偶数放在前半部分, 将所有的奇数放在数组后半部分
1.问题分析:从数组两边开始判断,左边的如果是偶数,继续向右判断,如果是奇数,停下来;右边开始的如果是奇数继续向左判断,如果是偶数,停下来,与左边的奇数交换。2.详细代码:public static void transform(int[]arr) { int left=0; int right=arr.length-1; while(left...原创 2020-03-17 23:27:08 · 602 阅读 · 0 评论 -
数组逆置(易理解)
代码:public static void reverse(int[]arr) { int left = 0; int right = arr.length-1; while(left<right) { int tmp=arr[left]; arr[left] = arr[right]; ...原创 2020-03-17 23:19:32 · 222 阅读 · 1 评论