自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

转载 WebSocket与HTTP和socket的区别和联系

目录一、WebSocket产生的背景二、WebSocket与Socket的关系三、WebSocket与HTTP的关系四、WebSocket协议详情1、连接机制2、WebSocket协议小结一、WebSocket产生的背景很多网站为了实现推送技术,所使用的技术都是轮询。所谓的轮询就是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式会带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真

2020-08-21 05:08:58 445 1

原创 Java版图书管理系统完整开发流程

图书管理系统开发环境与技术栈项目功能项目演示开发环境与技术栈Windows/Mac/LinuxMavenServletMySQLJackson项目功能管理学校图书信息,主要是用来管理学生借阅图书的信息。项目演示

2020-08-19 21:47:34 4118 2

原创 红黑树的定义和实现原理浅析以及手写一棵Java版红黑树

目录一、二叉搜索树1、 二叉搜索树的概念2、二叉搜索树查找节点的过程3、查找性能分析4、如何避免二叉搜索树出现查询效率过低的问题?二、AVL树1、AVL树的特点2、为什么有了AVL平衡树还需要红黑树呢?三、红黑树1、红黑树概念2、红黑树的特点3、红黑树的定义4、红黑树中的操作5、红黑树插入情景分析四、手写一棵红黑树1、代码2、插入测试在学习红黑树的实现原理之前,首先要明白为什么会出现红黑树?它是怎么来的?它存在的意义是什么以及解决了什么问题?要搞懂这些问题,就不得不先谈谈二叉搜索树和AVL树了。一、

2020-08-18 00:50:05 560 1

原创 【排序算法】十大经典排序算法Java版

目录一、排序算法概述1、排序的概念2、排序算法的分类3、排序算法的性能分析二、各排序算法的原理及代码实现1、冒泡排序(Bubble Sort)2、快速排序(Quick Sort)3、插入排序(Insertion Sort)4、希尔排序(Shell Sort)5、选择排序(Selection Sort)6、堆排序(Heap Sort)7、归并排序(Merge Sort)8、计数排序(Counting Sort)一、排序算法概述1、排序的概念排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递

2020-08-11 00:06:27 262

原创 基于Java的WebSocket聊天室项目完整开发流程

聊天室项目开发环境与技术栈项目功能项目演示开发准备数据库设计1.数据库关系说明2.创建数据库及数据库表前后端接口约定1.用户注册2.用户登录3.检测登录状态4.新增频道5.获取频道列表6.删除频道7.建立websocket连接8.发送/接收消息代码设计1.设计数据库实体类2.设计工具类3.设计dao层4.设计API接口项目代码结构开发环境与技术栈Windows/Mac/LinuxWebSocketMavenServletMySQLGson项目功能主要业务:实现多人群聊功能,记录并管理所

2020-07-27 08:17:18 3164 1

转载 OSI七层模型及对其简单理解举例

一、概览OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型,是一个逻辑上的定义和规范。把网络从逻辑上分为了7层,每一层都有相关或者相对应的物理设备。OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间

2020-07-21 00:50:25 3920

原创 【多线程】Java多线程中常用方法总结

在Java中,线程使用Thread关键字来表示。所有线程对象,都必须来自Thread类或者Thread类子类的实例,所以掌握Thread类的常用方法就显得尤为重要。静态方法静态方法可以直接通过Thread.来调用1.currentThread()Thread.currentThread()方法会返回对当前正在执行的线程对象的引用。2.activeCount()Thread.activeCount() 方法会返回活动线程的当前线程的线程组中的数量。3.interrupted()测试当

2020-07-02 00:02:58 296

原创 【JVM】Java中的垃圾回收机制以及常见的垃圾回收算法

垃圾回收简介垃圾回收英文全称为Garbage Collection,简称GC。Java进程在启动后会创建垃圾回收线程,来对内存中无用的对象进行回收,释放内存空间。垃圾回收的区域Java运行时内存区域主要划分为:程序计数器,Java虚拟机栈,本地方法栈,方法区和堆五部分。其中程序计数器、Java虚拟机栈、本地方法栈随线程的生命周期或生或灭,栈中的栈帧也随着方法的进入和退出有条不紊地执行着出栈和入栈操作,在方法结束或者线程结束时,内存自然就跟随着回收了。所以垃圾回收的主要区域为方法区和堆。而在方法区

2020-06-26 05:14:03 747

原创 【多线程】Java中死锁的产生条件以及解决方法

什么是死锁死锁是一种特殊的程序状态,简单来说就是两个或多个线程之间循环依赖,互相持有对方需要的锁,导致线程无限期地处于阻塞状态。下面通过一段代码来进一步了解一下死锁:public class DeadlockTest { private static String A = "对象A"; private static String B = "对象B"; public static void main(String[] args) { new DeadlockTe

2020-06-21 03:12:46 566

原创 Java中强引用,软引用,弱引用,虚引用的特点和区别

Java中的引用按强度可依次分为:强引用,软引用,弱引用和虚引用。如上图,除了强引用FinalReference类,其他三种引用类型均为public,可以在应用程序中直接使用。强引用强引用在代码之中是普遍存在的,我们写的代码绝大部分都是强引用。比如:Object o = new Object();String s = new String("hello");强引用的特点:只要某个对象与强引用有关联,那么这个对象就永远不会被回收。即使内存不足,JVM宁愿抛出OOM(内存溢出)异常,也不会去回

2020-05-31 23:55:16 369

原创 【数据结构】Java中二叉树常见问题代码汇总

目录1.二叉树前序递归与非递归遍历2.二叉树中序递归与非递归遍历3.二叉树后序递归与非递归遍历4.1.二叉树前序递归与非递归遍历递归代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right...

2020-04-26 00:35:45 342

原创 【数据结构】Java中的树的基本概念以及二叉树的性质

目录树的基本概念1.定义:2.特点3.基本术语二叉树1.二叉树的特点2.两种特殊的二叉树3.二叉树的性质树的基本概念1.定义:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。如下图就是一棵普通的树:2.特点1.每棵树都有一个特殊的节点,称为根节点,根节点没有前驱节点;2...

2020-04-19 02:01:07 357

原创 【数据结构】Java用两个栈模拟实现队列 + 用两个队列模拟实现栈

1.用两个栈来实现一个队列要求: 完成队列的Push和Pop操作。( 队列中的元素为int类型)对于这个问题,《剑指offer》上有一张图很形象:在图中可以看出它用stack1来模拟入队列,用stack2来模拟出队列。然后注意两点就可以很容易的完成这个问题:1.push( )操作,直接将数据压入stack1即可;2.pop( )操作,将stack1中的数据弹出然后再压入到stack2...

2020-04-15 15:29:51 308 1

原创 【数据结构】Java设计一个循环队列

题目链接:LeetCode 622循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环, 它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。设计一个循环队列,实现以...

2020-04-15 14:58:08 1231

原创 【数据结构】Java中队列的常用方法及模拟实现

概述队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。队列具有先进先出FIFO(FirstIn First Out)的特性。队尾:进行插入操作的端称为队尾队头:进行删除操作的端称为队头Queue从上面类的继承关系图可以看到Queue是一个接口,它的内部主要定义了以下几个方...

2020-04-15 00:38:00 461

原创 【数据结构】栈的经典应用

点击查看关于栈的特性以及常用方法介绍由于栈先进后出的特性,所以很多问题借助栈来处理会变得简单很多。1.括号匹配问题给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。注意:1.左括号必须用相同类型的右括号闭合;2.左括号必须以正确的顺序闭合;3.注意空字符串可被认为是有效字符串。思路:借助栈来完成,遍历字符串。遇见左括号便将其入栈,...

2020-04-14 23:39:37 426

原创 【数据结构】Java中栈的常用方法及模拟实现

目录概述Stack用数组模拟实现一个栈概述栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端称为栈顶,另一端称则为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。入栈:栈的插入操作叫做压栈或进栈。出栈:栈的删除操作叫做出栈。Stack从上面的关系图可以看出Stack继承自Vector类,而Ver...

2020-04-14 02:59:55 334

原创 【多线程】Java线程的三种创建方式比较

一、概述在Java中,线程使用Thread关键字来表示,所有线程对象,都必须来自Thread类或者Thread类子类的实例。Thread中构造方法总览:

2020-03-29 20:37:33 227

原创 JavaSE回顾(六):类和对象详解

2020-03-22 18:46:24 173

原创 剑指offer:旋转数组的最小数字

这个题是《剑指offer》上的第八题。牛客网题目链接:点击直达把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。一般思路拿到这道题最直观的做法就是遍历一遍数组,...

2020-03-19 09:50:51 160

原创 MySQL基础回顾(七):数据查询语言DQL---select查询语句总结(篇二)

由于篇幅问题,查询素材,完整语法,基础查询,字段别名,去重,where子句查询和模糊查询等放在了上一篇。点击直达:目录6.联表查询内联左联右联区别小结拓展7.分页查询和排序8.子查询和嵌套查询9.分组查询和having语句10.select与数据库表达式6.联表查询开始之前先来探讨一个问题:在上面素材中student表里没有学生成绩,而result表里没有学生姓名。此时如果我们想一次...

2020-03-18 15:44:42 343

原创 MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)

目录先建一个数据库和若干张表完整语法1.基础查询2.字段别名3.去重4.where子句查询5.模糊查询6.联表查询7.分页和排序8.子查询和嵌套查询9.分组查询和having语句10.select妙用查询语言算是数据库中最重要的语言了,因为往往开发时查的操作比写的操作要频繁的多。所有的查询操作都可以用Select,简单的查询,复杂的查询它都能做。接下来就让我们来详细的了解一下select语句。...

2020-03-18 15:35:56 343

原创 JavaSE回顾(五):Java中的二维数组

目录简介二维数组内存结构初始化方式遍历方式简介二维数组本质上也是一维数组,只不过每个元素又是一个一维数组 ,所以可以将它看作是一维数组的嵌套。二维数组内存结构如上图所示可以看出二维数组内元素保存的其实是若干个一维数组的引用(或者说内存地址)。在定义二维数组时,会在堆内存为其分配内存空间,所以必须知道二维数组的行数,也就是一维数组的个数,才能够为其分配内存空间。这也是为什么在初始化时可以省...

2020-03-17 15:29:46 293

原创 MySQL基础回顾(五):数据的插入,修改和删除

插入insert,修改update和删除delete都属于数据操纵语言DML。插入insert1.基本语法 insert into 表名(字段名1,字段名2,字段名3) values(值1,值2,值3)

2020-03-16 17:38:38 1552

原创 数组的深拷贝与浅拷贝以及数组拷贝的几种方式比较

深拷贝与浅拷贝解析深拷贝与浅拷贝的中心思想:浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化。深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变。浅拷贝浅拷贝在堆中不会分配新的内存空间,而是增加一个引用变量和之前的引用指向相同的堆空间。import java.util.Arrays;public class...

2020-03-16 11:47:13 1077 1

原创 JavaSE回顾(四):数组和Arrays工具类

数组的定义数组(array)是一种最简单的复合数据类型,它是一组有序数据的集合。数组中所有元素都是相同的数据类型,在Java种数组的数组一旦初始化,则其长度就不可变。数组的创建语法静态初始化数据类型[ ] 数组名 = { }如:int[ ] array = {1,2,3,4,5}动态初始化1.数据类型[ ] 数组名 = new 数据类型[数组长度]如:int[ ] array...

2020-03-16 11:46:37 188

原创 【二叉树的遍历-4】层序遍历

层序遍历所谓层序遍历,就是将二叉树的节点按从上到下,从左往右一层一层遍历。与前面三种常规遍历不同,层序遍历为广度优先遍历,需要借助队列先进先出的特性来完成,而不是栈。思路:仔细观察层序遍历过程,其实就是从上到下,从左到右依次将每个节点放入到队列中,然后按顺序依次打印就可以了。具体做法:首先将二叉树的根节点push到队列中,队列只要不为空,就一直输出队头的元素;判断节点如果有孩子,...

2020-03-14 10:29:44 417

原创 【二叉树的遍历-3】后序遍历(递归与非递归)

后序遍历后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,可记做左右根。后序遍历有递归算法和非递归算法两种。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。所以后序遍历也只要记住一点::左子树–> 右子树 --> 根结点递归实现:和之前的中序遍历和先序遍历差不多,跟套模板一样,改变一下打印的位置就好。具体代码:/** * De...

2020-03-14 10:29:13 1548

原创 【二叉树的遍历-2】中序遍历(递归与非递归)

2020-03-14 10:28:37 418

原创 【二叉树的遍历-1】前序遍历(递归与非递归)

二叉树的前序遍历

2020-03-14 10:28:06 359

原创 判断一棵树是不是完全二叉树

分析假设一棵树是完全二叉树,层数为K,那么可以得到以下结论:1.前k-1层节点肯定都是饱和的,即到达了最大值;2.第k-1层不一定所有的节点都有孩子节点,如果有孩子节点,那么一定是左孩子节点。所以我们要先找到第一个孩子不全的节点,如果只有右孩子节点,那么一定不是完全二叉树。找到第一个不饱和节点后,后续所有节点不能有孩子节点。步骤1.按照层序遍历的方式,找到第一个不饱和节点,判断其孩子...

2020-03-11 01:41:56 567

原创 MySQL基础回顾(四):数据库表的操作

创建表查看表删除表修改和删除数据表字段

2020-03-10 21:41:54 209

原创 青蛙跳台阶问题Java版

一、初级版一只青蛙跳台阶,一次可以跳1阶,可以2阶。那么,台阶为n时,有多少种法?分析由于一次只能跳一阶或者两阶,所以:台阶数为1时:只有一种跳法,f(1)=1;台阶数为2时:可以一阶一阶跳,也可以一次跳上去,所以f(2)=2;台阶数为3时:青蛙最后一步只能从第一阶或者第二阶起跳。这样就把三阶分成了两部分,一部分一阶,一部分二阶,把它俩的跳法加起来就是台阶数为3时的跳法。…台阶数为...

2020-03-10 13:53:43 240

原创 JavaSE回顾(三):方法的基本用法以及重载和递归

一、方法的基本用法方法就是指将一段代码封装在一个结构体之中,实现某种功能,可以被重复调用的代码块。方法的意义模块化的组织代码,使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。基本语法// 方法定义public static 方法返回值 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值];}/...

2020-03-10 11:45:43 278

原创 MySQL基础回顾(三):数据库中的数据类型

一、数值类型1.int型在MySQL中int型是使用频率很高的类型,常用int类型来表示标准的整数,它的大小为四个字节。在mysql的数据类型中是这样定义的:整型类型(显示宽度)所以int(3),这个3不是说最大保存3位数,而是最大显示宽度,比如int(1)可以插入1,11,1111或者更大的数。而int(3)分别插入2,20,200分别显示为002,020,200。所以整型的显示宽度仅...

2020-03-08 10:33:54 589

原创 MySQL基础回顾(二):MySQL的基本命令

一、基本的命令行操作1.启动MySQL服务net start mysql C:\WINDOWS\system32>net start mysqlMySQL 服务正在启动 .MySQL 服务已经启动成功。2.连接数据库mysql -u root -p -- 连接数据库3.设置密码update mysql.user set authentication_string=pa...

2020-03-08 00:48:30 233

原创 JavaSE回顾(二):程序逻辑控制

在Java中程序有三种结构,分别是顺序结构、分支结构、循环结构。一、顺序结构顺序结构顾名思义就是:按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。简单来说,写在前面的先执行,写在后面的后执行。顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构。二、分支结构1.if语句基本语法形式1if(布尔表达式){//条件满足时执行代码}基本语法形式2i...

2020-03-08 00:08:07 221

原创 leetcode199:二叉树的右视图

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

2020-03-07 15:40:35 148

原创 leetcode102:二叉树的层序遍历

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7]:

2020-03-07 15:32:45 158

原创 MySQL基础回顾(一):初识MySQL

什么是数据库?数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。简单来说就是一个专门存放数据的软件。为什么要有数据库?存储数据用文件就可以了,为什么还要弄个数据库呢?因为文件保存数据有以下几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便数据库的分类早期...

2020-03-05 22:14:15 551

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除