- 博客(50)
- 资源 (1)
- 收藏
- 关注
原创 二分查找、常用的排序算法(冒泡、选择、插入、快速)
二分查找(必须是在有序数组的基础上做二分才有意义)public static int binarySearch(int[] sort, int target) { if (target < sort[0] || target > sort[sort.length - 1]) return -1; int low = 0; int high = sort.length - 1; int mid = 0; whil
2020-08-27 10:45:06
196
原创 JAVA锁(乐观锁、悲观锁、自旋锁、可重入锁、公平锁、非公平锁)
乐观锁(认为读多写少)乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有更新这个数值,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java中的乐观锁基本上都是通过CAS(比较和交换,Compare and Swap)操作实现的,CAS是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失效。悲观锁(认为写
2020-08-25 08:28:23
270
原创 查找树ADT-二叉查找树-二叉排序树
二叉排序树 删除结点的 三种情况第一种情况:删除叶子节点 (比如:2, 5, 9, 12)思路(1) 需求先去找到要删除的结点 targetNode(2) 找到targetNode 的 父结点 parent (3) 确定 targetNode 是 parent的左子结点 还是右子结点(4) 根据前面的情况来对应删除左子结点 parent.left = null右子结点 parent.right = null;第二种情况: 删除只有一颗子树的节点 比如 1...
2020-08-24 21:54:58
248
原创 剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *
2020-08-22 10:41:21
104
原创 剑指 Offer 24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNo..
2020-08-22 10:27:12
66
原创 剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5./** * Definition for singly-linked list. * public class ListNode {.
2020-08-22 09:40:43
101
原创 剑指 Offer 39. 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000class Solution { public int majorityElement(int[] nums) { //这题让人困惑的地方可能是 //一上来的思路是把数组里所...
2020-08-21 20:21:19
73
原创 剑指 Offer 30. 包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0...
2020-08-21 19:49:51
86
原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums =[1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:1 <= nums.length <= 500001 <= nums[i] <= 10000class Solution { public int[] exchange(int[] nums) { ...
2020-08-21 16:17:36
78
原创 剑指offer-leetcode 第十五题
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 0000000000..
2020-08-21 16:08:09
98
原创 剑指offer-leetcode 第十一题
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0class Solution { //临界点的题 二分 public int minArray(int[] numbers) { //3 4...
2020-08-21 13:26:16
105
原创 Mybatis中的多对一、一对一、一对多
首先在数据库创建3个表,老师表、学生表和课程表其中1 某一课程和老师是一对一的关系2 所有课程和老师是多对一的关系3 某一课程和学生是一对多的关系表和表中的数据sql语句/*Navicat MySQL Data TransferSource Server : localhostSource Server Version : 50729Source Host : localhost:3306Source Database :
2020-08-20 22:33:51
98
原创 TCP协议
TCP协议的特点1TCP是面向连接(虚连接)的传输层协议。2每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。3TCP提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重。4TCP提供全双工通信: 发送缓存:准备发送的数据&已发送但未收到确认的数据 接受缓存:按序到达但尚未被接受应用程序读取的数据&不按序到达的数据5TCP面向字节流:TCP把应用程序交下来的数据看成仅仅一连串的无结构的字节流。(...
2020-08-20 11:49:58
293
原创 用户数据报协议UDP
UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组成一份待发送的IP数据报。UDP只是在IP数据报服务上增加了很少功能,即复用分用和差错检测功能。UDP的主要特点:1UDP是无连接的,减少开销和发送数据之前的时延。2UDP使用最大努力交付,即不保证可靠交付。3UDP是面向报文的,适合一次性传输少量数据的网络应用。4UDP无拥塞控制,适合很多实时应用。5UDP首部开销小,8B。TCP首部20B。应用层给UDP多长的报文,UDP就照样
2020-08-19 10:35:14
160
原创 网络控制报文协议ICMP
ICMP协议支持主机或路由器:在一些实际的分组过程中,总会出现一些错误,出错的部分在网络层的处理就是将它丢弃掉,但是丢弃就结束了吗?当然不能!所以我们要针对具体的错误发送一个特定的ICMP的差错报告报文。ICMP报告报文分为ICMP差错报告报文和ICMP询问报告报文。ICMP差错报告报文(5种):1终点不可达:当路由器或者主机不能交付数据报时就向源主机发送终点不可达报文。(无法准确交付)2源点抑制:当路由器或者主机由于拥塞而丢弃数据报时,就像源点发送源点抑制报文,使源点知道应当把数据报的
2020-08-19 09:50:03
292
原创 IP报文格式解读
上面是IP的报文格式,接下来我们先说明各个字段的意义。然后,用Etheral软件转包分析IP的报文格式。1.版本:ip报文中,版本占了4位,用来表示该协议采用的是那一个版本的ip,相同版本的ip才能进行通信。一般此处的值为4,表示ipv4。2.头长度:该字段用四位表示,表示整个ip包头的长度,其中数的单位是4字节。即二进制数0000-1111(十进制数0-15),其中一个最小长度为0字节,最大长度为60字节。一般来说此处的值为0101,表示头长度为20字节。3.Tos服务字段:该字段用8位表..
2020-08-18 20:48:37
330
原创 虚拟机的类加载机制学习笔记
虚拟机的类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行检验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类的生命周期类从类加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析统称为连接。
2020-08-17 16:26:19
188
1
原创 Spring+SpringMVC+Mybatis基础环境搭建
首先我们搭建好mybatis基础环境并测试放入一些固定的jar包版本信息<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.com
2020-08-05 03:15:24
196
1
原创 mysql数据库一些常用操作
mysql命令行语句一定要加;结束,不然就算你enter以后还是需要输入命令的。ALTER TABLE 原表名 RENAME TO 新表名 //修改表名mysql -u root -p //登陆create database xhkdb;//创建数据库drop database xhkdb;//删除数据库use database(库名) ; //用某个库//连接数据库show tables;//查看这个库里的表create table t_table2( uid int(10...
2020-08-05 00:07:20
124
原创 剑指offer-leetcode 第九题
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]代码实现:class Solution { public int[] printNumbers(int n) { if(n<1){ int[] arr = new int[0]; return arr;
2020-05-28 12:55:16
98
原创 剑指offer-leetcode 第八题
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5代码实...
2020-05-28 12:38:42
168
原创 剑指offer-leetcode 第七题
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendTai..
2020-05-28 11:57:24
169
原创 剑指offer-leetcode 第六题
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为1的第三个节点,那么在调用了你的函数...
2020-05-28 10:32:06
118
原创 剑指offer-leetcode 第五题
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7代码实现:/** * Definition for a binary tree node. * public class TreeNode { * ...
2020-05-28 10:25:50
112
原创 剑指offer-leetcode 第四题
链接:剑指offer-leetcode版输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。输入:head = [1,3,2]输出:[2,3,1]/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution
2020-05-27 23:11:11
115
原创 剑指offer-leetcode 第二题
链接:剑指offer-leetcode版在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30...
2020-05-27 22:43:53
104
原创 循环链表的方式解决约瑟夫问题
package com.cxq.linkedlist;/** 根据用户的输入:* 1 需求创建一个辅助指针helper,事先应该指向环形链表的最后一个节点* 补充:小孩报数前,先让first和helper移动k-1次* 2 当小孩报数时,让first和helper指针同时的移动 m-1 次* 3 这时就可以将first指向的小孩节点出圈* first = first.next* helper.next = first* 原来first指向的节点就没有任何引.
2020-05-27 22:23:50
101
原创 数组实现循环队列
package com.cxq.queue;import java.util.Scanner;public class CircleQueueDemo { public static class CircleQueue { private int maxSize;//表示数组的最大容量 //front变量的含义做了一个调整:front就指向了队列的第一个元素,也就是说arr[front]是队列的第一个元素 private int front;.
2020-05-27 22:22:02
89
原创 数组实现队列
package com.cxq.queue;import java.util.Scanner;public class ArrayQueueDemo { public static class ArrayQueue { private int maxSize;//表示数组的最大容量 private int front;//队列头 private int rear;//队列尾 private int[] arr; //该数组用于.
2020-05-27 22:21:10
96
原创 双向链表-java
代码实现:package com.cxq.linkedlist;public class DoubleLinkedListDemo { public static void main(String[] args){ DoubleLinkedList doubleLinkedList = new DoubleLinkedList(); doubleLinkedList.add(new HeroNode2(4, "林冲", "豹子头"));// ..
2020-05-27 22:18:09
99
原创 单链表-java
代码实现:package com.cxq.linkedlist;import java.util.Stack;import static javafx.scene.input.KeyCode.H;public class SingleLinkedListDemo { public static void main(String[] args) { //进行测试 SingleLinkedList singleLinkedList = new Singl..
2020-05-27 22:06:11
97
原创 剑指offer-leetcode 第一题
链接:剑指offer-leetcode版找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 class Solution { public int findRepeatNumber(int[] nums) { int[] arr = new i
2020-05-27 21:34:04
113
原创 懒汉式单例在多线程环境下的问题,顺便提饿汉式单例
单线程懒汉式package com.cxq.multiThreadSingleMode;public class singleMode { public static void main(String[] args){ for(int i =0;i<10000;i++){ Boss.getBoss(); } }}class Boss{ private Boss(){ System.out.p
2020-05-13 20:13:52
110
原创 死锁及其死锁解决办法浅析
死锁package com.cxq.diedLock;public class diedLockTest { public static void main(String[] args) { Runnable runnable1 = new Runnable() { @Override public void run() { synchronized ("A") {
2020-05-13 19:41:06
166
原创 线程安全问题(临界资源问题)的理解及其解决方案
线程安全与线程不安全如果有多个线程同时运行同一个实现了Runnable接口的类,程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的;反之,则是线程不安全的。用动物园售票的程序来演示临界资源问题(线程不安全问题)package com.cxq.threadsecurity;public class Ticket implements Runnable{ private static int tickets = 10; @Over
2020-05-13 18:41:41
399
原创 对线程的生命周期的总结
线程的生命周期:新建(NEW):通过new的方式,创建一个新的线程。 可运行状态(RUNNABLE):就是调用的线程的start()方法后,进入可执行状态,这时候又分为两种状态,ready和running,分别是就绪和运行状态。就绪状态是线程已经调用了start()方法,等待jvm的调度,这时候的线程并没有运行;运行状态:线程对象获得jvm调度,如果存在多个cpu,那么运行多个线程并行运行。 阻塞(BLOCKED):正在运行状态的线程,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep
2020-05-13 09:25:24
117
原创 对java多线程基础知识的总结
进程与线程线程是进程的一个子集,一个进程可以有很多线程,每条线程并行的执行不同的任务。打个比方,把医院看成是一个进程,那么挂号、就诊、缴费等活动就可以看成是一个个的线程。多线程:多个线程在同一个时间段同时执行,这样就形成了并发操作。线程的创建方式:继承Thread类 实现Runnable接口 实现Callable接口 线程池继承Thread类package com.cxq.one;//继承Thread的类以后需要实现run方法,线程启动的时候就会执行run方法public
2020-05-12 22:00:36
104
原创 妙算2-G(manifold 2-G)刷机记录(因为这个"the system is running in low-graphics mode")
起因今天,妙算2-g就在我的玩耍当中突然出现了"the system is running inlow-graphics mode"的提示框,我按照网上的方法,按了ctrl+alt+F1进入了纯命令行模式,然后系统让我输入ubuntu系统的账号密码,我输入对了也没进入可以操作的命令行,而是无限循环的让我输入账号密码,我意思到情况不对,可能只能重装系统了,那么接下来就开始重装系统了。刷机过程...
2019-11-27 19:32:06
2562
7
原创 java中形式参数、返回值类型、链式编程和权限修饰符的作用
形式参数:类名:需要该类的对象抽象类名:需要继承了该类的具体子类对象接口名:需要实现了该接口的具体实现类对象返回值类型:类名:返回的是该类的对象抽象类名:返回的是继承了该类的具体子类对象接口名:返回的是实现了该接口的具体实现类对象链式编程:对象.方法1().方法2().方法3()........方法n();这种用法在对象每一次调用一个方法以后返回的还是一个对...
2019-11-05 09:15:39
118
原创 对java中的接口的一些个人理解
接口:形象的说就是一个大类中本没有的,通过后天的训练出来的新方法,这种额外的功能,java提供了接口来表示。接口的特点:定义接口格式:interface 接口名 {}用类实现接口格式:class 类名 implements 接口名 {}接口是不能实例化的package test;interface A { //成员变量:只能是常量 默认修饰符 public static...
2019-11-04 22:21:21
118
attendance.zip
2019-07-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人