自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 HashMap的实现

一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复杂度为O(n),当然,对于有序数组,则可采用二分查找,插值查找,斐波那契查找等方式,可将查找复杂度提高为O(logn);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n)线性链表:对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结

2020-09-14 11:06:46 1588

原创 OS监控项目

OS监控项目描述:用来监控主机的CPU使用率;核心功能:采集需要监控主机的CPU使用率并上报给服务器,然后通过服务器将数据发送给客户端;项目技术:网络理论 + 网络中的Soket编程(TCP/UDP)并发编程Server部署到公网ip位置,部署到云服务器上,Linux操作Client是图形化编程——JavaFX整体架构:主体架构采用Agent + Server + Client架构;Server架构UDPServer + TcpServer + Listener

2020-09-05 21:40:20 368 1

原创 用户信息管理系统

基于Java Servlet 构建的用户信息管理系统核心功能登录、注册添加用户信息删除某一个用户信息删除选中的用户信息分页查询所有用户信息模糊查询用户信息更新用户信息重要知识点简单的Web服务器设计能力Java 操作 MySQL 数据库数据库设计json 的使用强化 HTTP 协议的理解Servlet 的使用Java集合的使用前端知识的简单使用,比如:HTML+CSS+JS整体架构项目整体基于HTTP协议,前端使用HTML+CSS+JS构建页面整体布局,后端采用

2020-09-02 16:31:46 7784 8

原创 网络原理之TCP/UDP协议

UDP协议UDP协议端格式16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度;如果校验和出错, 就会直接丢弃UDP的特点UDP传输的过程类似于寄信.无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;面向数据报: 不能够灵活的控制读面向数据报应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;UDP的

2020-09-01 15:16:25 666

原创 Java内存区域与内存溢出异常

Java内存区域与内存溢出异常JVM会在执行Java程序的过程中把它管理的内存划分为若干个不同的数据区域。这些数据区域各有各的用处,各有各的创建与销毁时间,有的区域随着JVM进程的启动而存在,有的区域则依赖用户线程的启动和结束而创建与销毁。一般来说,JVM所管理的内存将会包含以下几个运行时数据区域线程私有区域:程序计数器、Java虚拟机栈、本地方法栈线程共享区域:Java堆、方法区、运行时常量池程序计数器(线程私有)程序计数器是一块比较小的内存区域,可以看做是当前线程所执行字节码的行号指示器

2020-08-31 23:12:46 93

原创 OSI七层网络模型及其功能

OSI七层模型应用层作用:给应用程序提供接口服务负责提供数据接口标准,提供的服务包括文件的传输,文件的管理以及电子邮件的信息处理表示层作用:数据格式的转换表示层是应用程序和网络之间的翻译官。在表示层,数据需要按照网络所能理解的方案的进行格式化。这种格式化因为使用网络的类型的不同而不同。表示层管理数据的加密和解密,例如银行账户,账户数据发送前加密,接受的时候对账户进行解密。会话层作用:管理通信会话(建立连接,维护连接,重连)会话层负责在网络中的两节点之间建立,维持和终止通信,在这层协议中,

2020-08-31 10:28:34 2279

原创 Java中的反射,枚举

反射定义Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。反射基本信息Java程序中许多对象在运行时会出现两种类型:运行时类型(RTTI)和编译时类型,例如Person p = newStudent();这句代码中p在编译时类型为Person,运行时类型

2020-08-30 21:14:52 275

原创 Java的异常体系

认识异常所谓异常指的就是程序在 运行时 出现错误时通知调用者的一种机制;错误在代码中是客观存在的. 因此我们要让程序出现问题的时候及时通知程序猿. 我们有两种主要的方式LBYL:Look Before You Leap.操作之前充分检查;EAFP:It’s Easier to Ask Forgiveness than Permission.先操作,遇到问题了再处理异常的核心思想就是 EAFP除以 0System.out.println(10 / 0);// 执行结果Exception in

2020-08-28 23:32:00 122

原创 Java中抽象类和接口的区别

抽象类**概念:**在Java中,包含抽象方法的类称为抽象类。abstract class Shape { abstract public void draw();}在 draw 方法前加上 abstract 关键字, 表示这是一个抽象方法. 同时抽象方法没有方法体(没有 { }, 不能执行具体代码).对于包含抽象方法的类, 必须加上 abstract 关键字表示这是一个抽象类注意事项抽象类不能直接实例化.Shape shape = new Shape();// 编译出错Erro

2020-08-28 17:57:00 101

原创 Java设计模式之工厂模式

简介工厂模式是一种创建模式,因为此模式提供了更好的方法来创建对象。在工厂模式中,我们创建对象而不将创建逻辑暴露给客户简单来说就是工厂模式就是用来封装创建对象的工具类的。工厂模式一共分为三种,简单工厂(静态工厂) ,工厂方法 ,抽象工厂简单工厂(静态工厂)有一个工厂类拥有一个静态的方法, 用来产生产品实例, 通过传递参数的不同来区分生成哪个产品实例.先来看看它的组成: 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品 2) 抽象产品角色:它一般是具

2020-08-27 12:26:17 158

原创 Java中的super和this关键字

super关键字super其实就是一个引用,用来引用直接父类对象java super关键字的用法如下: 1. super可以用来引用直接父类的实例变量。 2. super可以用来调用直接父类方法。 3. super()可以用于调用直接父类构造函数。super可以用来引用直接父类的实例变量。class Animal { String name = "动物";}class Dog extends Animal{ String name = "狗"; public vo

2020-08-24 18:21:11 144

原创 Java中的static关键字

static关键字static关键字一般用来修饰方法和成员变量,有时还会修饰static代码块;static的主要作用就是它可以不用创建类对象就可以调用方法和成员变量;static变量static修饰成员变量会让该变量成为静态成员变量(类变量),成为静态成员变量之后,它的生命周期就和类一样,在整个应用程序执行期间都有效。静态变量和非静态变量的区别:静态变量属于类,非静态变量属于对象,静态变量在类加载的时候被创建且在内存中只有一份,而非静态成员变量是创建对象的时候被创建,内存中有可能存在多个副本。

2020-08-24 10:37:41 125

原创 Java排序之归并排序及排序算法总结

归并排序算法思想: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并过程演示代码实现public class InsertionSort { public static void insertSort(int[] array) { for(i

2020-08-10 16:27:58 123

原创 Java排序之快速排序及优化

快速排序核心思想:从待排序区间选择一个数,作为基准值(pivot);Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度 == 0,代表没有数据过程演示代码实现public class QuickSort { public static void quickSort(int[] a

2020-08-09 00:03:13 124

原创 Java排序算法之堆排序(前期准备)

前期准备堆的概念:1. 堆逻辑上是一棵完全二叉树2. 堆物理上是保存在数组中3. 满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆堆的存储方式:使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。 建堆前提:左右子树必须已经是一个堆,才能调整。说明:1. array 代表存储堆的数组2. size 代表数组中被视为堆数据的个数3. index 代

2020-08-08 18:06:45 107

原创 Java排序算法之选择排序和冒泡排序

选择排序- 算法思想: 每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据 元素排完 。过程演示第一趟选择排序,会确定一个最大或者最小的数值,第二趟就会确定一个此最大或次最小的数值,即每趟排序都会找见无序区间的最大或最小值。依次类推,进行n-1趟排序就可以将数组中的所有数字进行排序。代码实现public class SelectSort { public void selectSort(int[] array){

2020-08-06 23:46:41 344 2

原创 Java排序算法之插入排序和希尔排序

插入排序算法思想: 逐个和前边元素比较,找到比自己小的的元素插入最坏时间复杂度: O(n^2)-最好时间复杂度: O(n)空间复杂度: O(1)特点 :数据越有序,排序越快

2020-08-06 21:40:29 125

原创 Java多线程之线程不安全的原因

抢占式执行抢占式调度:抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。JVM的实现:JVM规范中规定每个线程都有优先级,且优先级越高越优先执行,但优先级高并不代表能独自占用执行时间片,可能是优先级高得到越多的执行时间片,反之,优先级低的分到的执行时间少但不会分配不到执行时间。java使用的线

2020-06-08 09:59:10 851

原创 JavaIO - 字节,字符流,序列化与反序列化

什么是字节流,字符流File类不支持文件内容处理,如果要处理文件内容,必须要通过流的操作模式来完成。在java.io包中,流分为两种:字节流与字符流字节流:数据流中最小的数据单元是字节 。InputStream、OutputStream字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。Reader、Writer字节流拷贝拷贝文件的四个步骤打开文件读取文件内容写入文件内容关闭连接import java.io.*;public.

2020-06-03 18:11:01 511

原创 Java多线程之Synchornized定义,底层实现原理,以及锁对象

synchornized关键字首先我们先了解一下什么是synchornized,及synchornized的作用我们先看一个示例 ,假如两个线程同时都对n进行自加操作package Synchornized;public class TestSynchornized1 { int n = 0; public void func(){ n++; } public static void main(String[] args) throws Interr

2020-05-31 19:39:28 565

原创 Java多线程之手动实现简易线程池

线程池为什么需要线程池呢?想象这么一个场景:在学校附近新开了一家快递店,老板很精明,想到一个与众不同的办法来经营。店里没有雇人,而是每次有业务来了,就现场找一名同学过来把快递送了,然后解雇同学。这个好比如我们平时来一个任务,建一个线程进行处理的模式。很快老板发现问题来了,每次招聘 + 解雇同学的成本还是非常高的。老板还是很善于变通的,知道了为什么大家都要雇人了,所以指定了一个指标,公司业务人员会扩张到 3 个人,但还是随着业务逐步雇人。于是再有业务来了,老板就看,如果现在公司还没 3 个人,就雇一个人

2020-05-31 17:48:36 252

原创 Java多线程之手动实现定时器(Timer)

定时器我们先来说要实现一个定时器都需要什么东西保存待执行任务的优先级阻塞队列描述让任务的任务类扫描队列头是否达到执行时间的扫描线程我们先写一个Task任务类class Task implements Comparable<Task>{ private Runnable command = null; private long time = 0; public Task(Runnable command, long time)

2020-05-31 17:48:12 685

原创 Java多线程之实现单例模式

什么是单例模式首先我们先了解一下什么是单例模式,其实单例模式是创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)其实最简单的理解就是顾名思义,单例模式就是只有一个实例化对象。单例模式的实现方式饿汉模式饿汉模式就是再类加载的时候就把对象创建好,不管用不用都会被创建class Test{ //单例模式之饿汉模式 private static Test t = new

2020-05-31 17:47:22 218

原创 Java中的方法重载与方法重写

方法重载(过载)/ 方法重写(覆盖)的概念方法重载方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)(返回值不同,其它都相同不算是重载。)class Dog{ String name; int age; public Dog(String name) { this.n...

2019-12-28 16:54:39 539

原创 Java中的String字符串不可变

当我第一次看到这个问题的时候也很想知道答案,就去网上搜了搜,看到好多人的回答都是,因为他是首先我们先看一下string类的源码在这里插入代码片我们可以看到用来存储字符串的是一个byte数组而且是一个...

2019-12-28 15:34:55 324 2

原创 Java中final关键字的理解和使用

final关键字final的作用就是声明 “一个东西不能变”final修饰基本类型当final修饰一个基本类型的时候,就是声明了这个基本类型的变量不可以在改变,这个基本类型的变量就成了一个常量。` public static void main(String[] args) { final int i = 1; //! i= 10; }...

2019-11-30 15:37:09 584

原创 对于Java中只有值传递的理解

什么是值传递值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。什么是引用传递引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。注意: 值传递是把实际参数复制了一份传给形参,而引用传递是直接把实参的地址传了过去,并没有复制实参;好了,当我们搞清楚 值传递和引用传递的概念之后,我们...

2019-11-25 18:50:48 114

原创 java递归实现,斐波那契数,青蛙跳,,青蛙变态跳,汉诺塔。

斐波那契数斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,...

2019-11-23 12:25:46 193

原创 一步一步模拟实现strcpy(字符串拷贝函数)和strlen(字符串长度计算函数)

strcpy的实现函数功能:将一个字符数组中的字符串内容复制到另一个字符数组中注:自己模拟实现的函数名字不要和库函数相同首先要改变两个数组的内容,我们采用址传递的形式,在函数的形参中定义两个char类型指针变量接收传过来的数组地址char* my_strcpy(char* Str_treget, const char* Str_souce)//函数的声明这里返回类型定义成char*...

2019-11-10 22:20:35 682

原创 C语言二分法查找算法详解

前言假如给你一组有序的数字,让你从中找出某个元素,我们可能首先想到的是利用循环从第一个元素开始试,直到找出来这个数或者没有找到循环结束。因为这样的方法查找次数比较多,耗费时间长。所以我们想到了另外一种比较节省时间且效率高的二分算法。二分算法/折半查找算法我们先说一下什么是二分算法,假如给出一个这样的一组有序数字1,2,3,4,5,6,7,8,9,10。让你从中找出数字7。我们先找出这组数字的...

2019-11-03 18:55:51 9740 9

原创 关于不用第三个变量或者临时变量实现两个变量值的交换

解决问题思路首先我们看到这个问题就应该先想如何解决这道题,解决这道题的思路是什么,有了思路我们才可以用代码去实现它。如果没有不许用第三个变量的限制条件,我们可能都会做,觉得非常简单。一旦有了限制条件,我们就要考虑到直接赋值会让一个变量的值丢失,只要我们把这个值丢失的问题解决了,我们就可以解决掉这道题。我们可先让变量a和变量b进行一种运算(例如+,-,^),把运算结果存储到a和b随...

2019-10-28 19:03:38 457 3

空空如也

空空如也

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

TA关注的人

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