自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 死锁

一:什么是死锁死锁是由于两个或以上的线程互相持有对方需要的资源,导致这些线程处于等待状态,无法执行。举个例子:有一碗面条,A有一根筷子,B有一根筷子,A和B都想吃,都不愿放弃自己手中的筷子,导致谁也吃不到。二:产生死锁的四个必要条件 1.互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占有,直到释放。 2.请求和保持条件:一个线程对请求被占有资源发生阻...

2020-03-23 17:04:18 155

原创 JDBC

一:什么是JDBCJDBC是 java数据库连接(Java DataBase Connectivity)技术的简称,由一组使用java语言编写的类与接口组成,可以为多种关系数据库提供统一访问。二:为什么要有JDBCJDBC是一套java连接数据库的规范 以前没有JDBC的时候java程序员想要连接数据库必须要了解该数据库的具体驱动程序 有了JDBC后你只要了解JDBC就可以了。1.JDBC...

2020-03-16 10:38:32 162

原创 线程池

一:什么是线程池线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。二:为什么要有线程池1.避免了在处理短时间任务时创建与销毁线程的代价:线程过多会带来调度开销,进而影响缓存...

2020-03-10 20:05:28 171

原创 数据库

一 :什么是数据库(DB)数据库实际上就是一个文件集合,是一个存储数据的仓库,本质就是一个文件系统,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作;二 :为什么要有数据库文件保存数据有以下几个缺点:1.文件的安全性问题2.文件不利于数据查询和管理3文件不利于存储海量数据4.文件在程序中控制不方便数据库存储介质:1.磁盘2.内存为了解决上述问题,专家...

2020-03-07 15:14:49 242

原创 单例模式

一:什么是单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对...

2020-03-07 11:05:09 69

转载 synchronized 和 volatile

synchronized----监视器锁monitor lock1.当线程释放锁时,JMM会把该线程对应的工作内存中的共享变量刷新到主内存中2.当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取共享变量。3.synchronized同步块对同一条线程来说是可重入的,不会出现自己把自己锁死的问题;4.同步块在已进入的线程执行完之前,会...

2020-03-06 17:38:37 91

原创 多线程安全问题

本文从操作系统谈起,结合原子性,可见性,代码重排序,阐述多线程的不安全。目录:1.OS2.进程与线程3.多线程3.1 什么是多线程3.2 为什么使用多线程3.3 多线程的缺点3.4 理解线程不安全3.5 保证线程安全的思路OS(Operating System,简称OS)一:概念OS是Operating System的缩写,中文翻译就是操作系统,意思就是计算机管理控制程序,...

2020-03-06 17:11:37 332

原创 cookie 和 session

一:cookieHttp 是一个无状态的协议,但是访问有些资源的时候往往需要经过认证的账户才能访问,而且要一直保持在线状态,所以,cookie是一种在浏览器端解决的方案,将登陆认证之后的用户信息保存在本地浏览器中,后面每次发起http请求,都自动携带上该信息,就能达到认证用户,保持用户在线的作用,具体如下图:设置cookie的方法在 Http 的 Response 报头中可以携带 Set-C...

2020-02-21 22:22:48 88

原创 HTTP协议

一:HTTP 介绍HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:(1)客户与服务器建立连接;(2)客户向服务器提出请求;(3)服务器接受请求,并根据请求返回相应的文件作为应答;(4)客户与服务器关闭连接。客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这...

2020-02-21 21:21:39 206

原创 HashMap

一:哈希表1.什么是哈希表哈希表是一种数据结构。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则...

2020-02-21 16:34:44 98

原创 TCP & UDP

目录:TCP 协议;一:TCP协议段格式二:确认应答(ACK)机制三 : 超时重传机制四:连接管理机制五:滑动窗口六:流量控制七:拥塞控制八:延迟应答九:捎带应答十:面向字节流十一:粘包问题十二:TCP异常情况UDP协议1.协议段格式2.UDP特点由于本文篇幅较长,特在此做一些总结,读者可根据目录,按需查看( **TCP可靠性的内容:**校验和,序列号(按序到达)...

2020-02-20 17:04:59 266

原创 三次握手 & 四次挥手

前言:三次握手与四次挥手是TCP协议中的一个连接管理机制,在正常情况下, TCP要经过三次握手建立连接, 四次挥手断开连接先来一张图整体感知一下:解释为啥是三次握手才能建立连接:一些解释:ISN:初始化序列号ACK:TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=...

2020-02-20 13:36:35 2937

原创 线程的创建及线程的状态

一:创建多线程方法一:继承Thread类可以通过继承 Thread 来创建一个线程类,该方法的好处是 this 代表的就是当前线程,不需要通过Thread.currentThread() 来获取当前线程的引用。class MyThread extends Thread { @Override public void run() { System.out.println("这...

2020-02-18 21:52:06 221

原创 进程与线程 并发与并行

一:进程与线程1.先来一张图,直观了解一下进程与线程的关系总结:进程是系统分配资源的最小单位,线程是系统调度的最小单位。一个进程内的线程之间是可以共享资源的。每个进程至少有一个线程存在,即主线程二:进程的状态就绪:进程处于可运行的状态,只是CPU时间片还没有轮转到该进程,则该进程处于就绪状态。运行:进程处于可运行的状态,且CPU时间片轮转到该进程,该进程正在执行代码,则该进程处于运行...

2020-02-18 21:16:35 1184

原创 ArrayList 和 LinkedList

数组和链表的特性差异,本质是:连续空间存储和非连续空间存储的差异。主要有下面两点:ArrayList:底层是Object数组**(动态数组**)实现的:由于数组的地址是连续的,数组支持O(1)随机访问;数组在初始化时需要指定容量;数组不支持动态扩容,像ArrayList、Vector和Stack使用的时候看似不用考虑容量问题(因为可以一直往里面存放数据);但是它们的底层实际做了扩容;数组扩容代价...

2020-02-14 23:59:30 91

原创 重载和重写的比较

2020-02-14 16:45:33 89

原创 多态

多态目录:java中多态性解释Java 实现多态有的3必要条件动态绑定的理解多态的好处java中多态性解释:1、多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。2、对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法...

2020-02-14 16:19:55 182

原创 继承

继承基本语法class 子类 extends 父类 {}1.使用 extends 指定父类.2.Java 中一个子类只能继承一个父类 (而C++/Python等语言支持多继承).3.子类会继承父类的所有 public 的字段和方法.4.对于父类的 private 的字段和方法, 子类中是无法访问的.5.子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的...

2020-02-14 15:58:31 78

原创 Java 四种访问权限private protected public 以及默认的包访问权限

1.private: 类内部能访问, 类外部不能访问2.默认(也叫包访问权限): 类内部能访问, 同一个包中的类可以访问, 其他类不能访问.3.protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问.4.public : 类内部和类的调用者都能访问注意:我们希望类要尽量做到 “封装”, 即隐藏内部实现细节, 只暴露出 必要 的信息给类的调用者.因此我们在使用...

2020-02-14 15:56:47 941

原创 JAVA 关键字 static private super this

Java关键字目录:1:static关键字2:private关键字3:this关键字static关键字a) 修饰属性:Java静态属性和类相关, 和具体的实例无关. 换句话说, 同一个类的不同实例共用同一个静态属性.b)修饰方法 :静态方法属于类而不属于类的对象静态方法可以直接调用静态方法,无需创建类的实例静态方法可以访问静态数据成员并可以更改静态数据成员的值,但不可以直接使用非...

2020-02-14 15:20:54 194

原创 优先级队列--堆

二叉树和数组–结合(堆)一:存储方式使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示。二: 下标关系已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知孩子(不区分左右)(ch...

2019-12-20 10:54:15 82

原创 二叉树

树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树 。1.节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:...

2019-12-06 19:17:54 103

原创 二叉搜索树

二叉搜索树:概念:二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下 性质的二叉树:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3.它的左右子树也分别为二叉搜索树二叉搜索树的操作一:查找原理:如果查找值小于当前节点的值,就去该节点的左子树去查找,如果查找值大于当前节点的值,就去该节点...

2019-12-04 16:45:27 188

原创 快速排序

原理从待排序区间选择一个数,作为基准值(par);Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长==1,代表已经有序,或者小区间的长度 == 0,代表没有数据。非递归方法public static int partion(in...

2019-12-03 15:07:36 53

原创 归并排序

归并排序原理:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。递归方法public static void merg(int[] array,int low,...

2019-12-03 14:50:21 72

原创 堆排序

原理:基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。注意: 排升序要建大堆;排降序要建小堆。方法:交换堆顶元素与最后一个元素-》向下调整 //向下调整(一次调整) public static void adjustDown(int[]elem , int root,int len) { int parent ...

2019-12-02 18:12:36 64

原创 直接选择排序

原理:每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据元素排完 。public static void selectSort(int[] array) { for (int i = 0; i < array.length; i++) { for (int j = i+1; j < array.l...

2019-12-02 18:02:31 90

原创 直接插入排序和希尔排序

原理:整个区间被分为有序区间无序区间每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入public static void insertSort(int[] array) { for (int i = 1; i < array.length; i++) { int tmp = array[i]; int j...

2019-12-02 17:52:30 281

原创 抽象类和接口

1,抽象类与抽象方法概念包含抽象方法的类称为抽象类,抽象类用来描述一种类型应该具备的基本特征与功能, 具体如何去完成这些行为由子类通过方法重写来完成。抽象方法指只有功能声明,没有功能主体实现的方法,即抽象方法没有方法体(没有 { }), 不能执行具体代码。2.注意事项1) 抽象类不能直接实例化.Shape shape = new Shape(); // 编译出错Error:(30, ...

2019-11-10 11:04:01 145

原创 字符串对象的构造方法及通过代码理解字符串在内存中的存储

通过代码理解字符串在内存中的存储import java.lang.reflect.Field;import java.util.Arrays;/** * Created with IntelliJ IDEA. * Description: * User: GAOBO * Date: 2019-11-04 * Time: 11:35 */import java.lang.re...

2019-11-08 09:11:47 115

原创 字符串的常用方法的理解

String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.StringBuffer与StringBuilder大部分功能是相似的StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作1.字节和字符串2.字符数组和字符串的转化3.字符串访问指定字符串元素import java.util....

2019-11-08 00:15:31 152

原创 快慢法在单链表中的应用

例题1和2为其他题的基础着重体会例题2的一段代码while (k - 1 > 0) {if(fast.next != null) {fast = fast.next;k–;}else {System.out.println(“没有这个节点!”);return null;}}1.给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第...

2019-11-07 23:48:56 94

原创 单链表习题

class LinkedList{ public Node head; //头插法 public void addFirst(int data){ Node node = new Node(data); //如果单链表为空 if(this.head == null) { this.head = nod...

2019-11-07 23:21:05 357

原创 Java 包的理解

包的概念包是组织类的一种方式使用包的主要目的是为了保证类的唯一性包的理解包就是Java中的文件夹。你在代码中写了一个 Test 类. 然后你的同事也可能写一个 Test 类. 如果出现两个同名的类, 就会冲突, 导致代码不能编译通,如同在电脑上两个相同的文件放在一起会提示是否要覆盖,如果不覆盖,只能改名字了。还有个方法,就是放在不同文件夹中。java项目中也是可以分不同文件夹的。只不过ja...

2019-10-30 15:36:40 525

原创 java类与对象总结

类和对象*理解类与对象类相当于一个产品的模子,而对象就相当于这个模子具体生产出来的产品,一个模子可以生产无数个产品,一个类也可以生产无数个对象。类:限定了它所拥有的成员,定义一个类并没有分配实际的内存空间类的实例化(用new创建对象的实例):一个类中实例化的对象,占有实际的物理空间,存储类成员变量//通过类Animal实例化两个对象:dog,cat.class Animal{ ...

2019-10-22 22:14:05 312

原创 方法

方法:1.1定义:方法就是一个代码片段. 类似于 C 语言中的 “函数”.方法存在的意义( 重在体会):是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置使用.让代码更好理解更简单.直接调用现有方法开发, 不必重复造轮子.1.2 方法定义语法基本语法:// 方法定义public static 方法返回值 方法名称([参数类型 形参...

2019-10-20 20:55:29 88

原创 拷贝数组

调用函数的方法import java.util.Arrays;public class toCopy { public static void main(String[] args){ int[] arr = {1,2,3,4,5}; int[] newArr = Arrays.copyOf(arr,arr.length); Syste...

2019-10-18 17:18:38 56

原创 一维数组小结

数组一.数组的属性数组是相同类型数据的集合,内存是连续的二.数组的定义方法1.int[] array = new int[]{1,2,3,4};2.int[] array = new int[10];//没有初始化,默认值为03.int[] array = {1,2,3,4};三.遍历数组的方法以及输出数组内容1.for循环int[] arr = {1, 2, 3};for (...

2019-10-18 17:14:02 429

原创 判断一个数组是否有序(从小到大)

//判断一个数组是否有序(从小到大)public class isSorted { public static boolean isSorted(int arr[]){ for (int i = 0; i <arr.length-1; i++) { if(arr[i]>arr[i+1]){ return ...

2019-10-18 16:16:32 3673

原创 冒泡排序

import java.util.Arrays;public class bubbleSort{public static void bubbleSort(int arr[]){ for (int i = 0;i<arr.length;i++) for (int j = 0; j < arr.length - i - 1; j++) { ...

2019-10-18 10:52:22 45

空空如也

空空如也

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

TA关注的人

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