自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Map集合--LinkedHashMap1.8

文章目录LinkedHashMap(1.8)存储结构构造器添加LRU 算法afterNodeAccess()afterNodeInsertion()LRU 缓存LinkedHashMap(1.8)LinkedHashMap 继承了 HasahMap,并且它的存储结构也是继承了 HashMap 的 Node 类;LinkedHashMap 是一个非线程安全的集合,使用用双向链表的结构,把所有存储在 HashMap 中的数据连接起来,LinkedHashMap 的默认实现是按插入顺序排序的(只是用前后指

2020-08-30 20:41:17 433

原创 JUC辅助类-CountDownLatch,CyclicBarrier和Semaphore学习

文章目录JUC 辅助类CountDownLatchCyclicBarrierSemaphore总结参考敖丙,传送门JUC 辅助类CountDownLatch它是一个同步辅助器,允许一个或多个线程一直等待,直到一组在其他线程执行的操作全部完成;它的构造方法,会传入一个 count 值,用于计数;public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"

2020-08-27 17:00:01 333

原创 学习JVM-虚拟机栈,程序计数器和本地方法接口与本地方法栈

文章目录运行时数据区概述及线程概述程序计数器(PC寄存器)PC 寄存器中常见的面试问题虚拟机栈概述栈的存储单位栈帧中的存储结构局部变量表Code 属性LineNumberTable 属性LocalVariableTable 属性Slot 的理解Slot 的重复利用问题操作数栈代码追踪动态链接方法的调用虚方法与非虚方法方法返回地址一些附加信息虚拟机栈相关面试本地方法接口与栈本地方法栈大家可以去尚硅谷学习JVM,传送门运行时数据区概述及线程概述当类的字节码文件加载进入到方法区后,就开始了运行时数据区的

2020-08-15 16:25:28 495

原创 学习JVM-类加载子系统

文章目录类加载子系统类的加载过程加载(Loading)链接(Linking)初始化(Initialization)类加载器分类引导类加载器(BootStrap ClassLoader)扩展类加载器(Extension ClassLoader)系统类加载器(AppClassLoader)用户自定义类加载器关于 ClassLoader双亲委派机制其它大家可以去尚硅谷学习JVM,传送门目前复习的是类加载子系统,属于内存与垃圾回收;类加载子系统类加载子系统简介类加载子系统负责从文件系统或者网络中加

2020-08-13 08:19:37 478 1

原创 记录TCP粘包及处理

文章目录TCP粘包问题处理粘包问题一篇很好的文章,传送门TCP粘包问题TCP 粘包就是指发送方发送的若干数据包到达接收方时粘成了一包,从接收缓冲区来看,后一个数据包的头紧接着前一个数据包的尾。出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。造成粘包的原因?发送方原因TCP 默认使用 Nagle 算法(主要作用:减少网络中报文段的数量),而 Nagle 算法主要做两件事:只有上一个分组得到确认,才会发送下一个分组;收集多个小分组,在一个确认到来时一起发送该多个分组,

2020-08-11 12:32:45 135

原创 记录应用层--HTTPS

文章目录HTTP 与 HTTPS对称加密与非对称加密HTTP1.0,HTTP1.1 和 HTTP2.0学习敖丙,传送门HTTP 与 HTTPSHTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题;HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 应用层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输;HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输;而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程

2020-08-07 15:42:04 168

原创 记录学习ConcurrentHashMap(1.7和1.8)

文章目录概述ConcurrentHashMap1.7存储结构常用属性构造函数put 方法ensureSegment()方法scanAndLockForPut()方法rehash 方法ConcurrentHashMap1.8put 方法initTable() 方法transfer 方法大家可以去他那里学习,传送门:敖丙概述HashMap 并不是一个线程安全的集合,那么可以使用 HashTable,但是 HashTable 的话不管是存储还是读取元素,都是加入了 synchronized 关键字,因此,

2020-08-01 16:47:25 386

原创 计算机网络--应用层(HTTP,DNS解析等)

文章目录DNS域名的层级关系域名解析的工作流程FTPARP 解析 MAC 地址DHCPHTTP概述状态码概述常见字段GET 和 POST请求的 HTTP 协议格式GET 请求POST 请求响应的 HTTP 协议格式HTTP 与 HTTPSDNS我们在上网的时候,通常使用的是域名,而不是 IP 地址,因为域名方便人类记忆;那么实现这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址;域名的层级关系DNS 中的域名都是用句点来分隔的,比如 www.server.com

2020-07-30 16:54:22 1142

原创 计算机网络-传输层(TCP和UDP,三次握手,拥塞控制)

文章目录UDP 和 TCP 的特点UDP首部格式TCP首部格式TCP 三次握手TCP 四次挥手TCP 可靠传输TCP 流量控制TCP 滑动窗口TCP 拥塞控制慢开始和拥塞避免快重传和快恢复记录网络基础协议的学习,参考1,CyC2018UDP 和 TCP 的特点用户数据报协议 UDP(User Datagram Protocol)是无连接的(减少开销),尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部,适合一次性传输少量数据的网络应用),支持一对一

2020-07-30 16:46:08 565

原创 Java设计模式--代理模式,适配器模式,装饰者模式

适配器模式适配器模式(Adapter Pattern,其别名为包装器(Wrapper))将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作;适配器模式属于结构型模式;主要分为三类:类适配器模式,对象适配器模式,接口适配器模式;工作原理:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容;从用户的角度看不到被适配者,是解耦的 ;用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法;用户收到反

2020-07-25 16:45:26 470

原创 Java设计模式--建造者模式

文章目录概述第一种方式静态内部类方式概述工厂类模式提供的是创建单个类的模式,也就是它注重创建实例的结果,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是抽象工厂模式和最后的客户端使用结合起来得到的。建造者模式的四个角色Product(产品角色): 一个具体的产品对象;Builder(抽象建造者): 创建一个Product对象的各个部件指定的 接口/抽象类;ConcreteBuilder(具体建造者): 实现接口,构建和装配

2020-07-25 12:21:55 195

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

文章目录概述简单工厂模式抽象工厂方法概述参考示例:需要多种发送信息的工具;如,Mail 和 SMS 信息的发送;要便于发送工具的扩展,并且便于维护;工厂模式属于创建型模式;工厂模式更注重对象的创建结果,而不是建造者模式注重过程;简单工厂模式建立一个工厂类,对实现了同一接口(行为,Action)的一些类进行实例的创建(使用 SenderFactory 类来创建对应的实例),如下图:Sender 接口public interface Sender { void send(

2020-07-23 18:17:15 123

原创 Java设计模式--单例模式

文章目录概述饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全)双重检查(线程安全)静态内部类(线程安全)枚举概述单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法);单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等);单例模式的八种实现方式(4

2020-07-23 17:50:07 107

原创 Spring复习--IoC,AOP以及循环依赖

Spring概述Spring 是什么​ Spring 是一个轻量级的 IoC 和 AOP 容器框架,是为 Java 应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于 XML 的配置,基于注解的配置,基于 Java 的配置;Spring 的优点方便解耦,简化开发 ;Spring 的 DI(依赖注入) 机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;Spring 提供了 AOP 技术,支持将一些通

2020-07-21 11:13:17 1071

原创 Java并发包--JUC学习(上)

JUCjava.util.concurrent 是 Java 的并发工具包;进程与线程进程(Process) 是系统进行资源分配和调度的基本单位,是操作系统结构的基础。线程(thread) **是操作系统能够进行运算调度的最小单位。**它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;一个进程由一个或多个线程组成,线程是一个进程中代码的不同执

2020-07-21 11:05:57 346

原创 线程的ThreadLocal详解

文章目录概述及存储结构set 方法get 方法remove 方法内存泄漏问题总结概述及存储结构学习参考敖丙ThreadLocal文章ThreadLocal 不是线程,更不是本地线程,而是 Thread 的局部变量;ThreadLocal 是每个线程独享的本地变量,每个线程都有自己的 ThreadLocal,它们是线程隔离的。上图中基本描述出了 Thread,ThreadLocalMap 以及 ThreadLocal 三者之间的包含关系。Thread 类对象中维护了 ThreadLocalMap

2020-07-21 10:56:46 936

原创 平衡二叉树(AVL树)Java语言实现

​ 参考:《数据结构与算法分析》和《算法(第四版)》文章目录概述旋转左旋转右旋转右左双旋转(RL)左右双旋转(LR)判断是否平衡方法 balance所有代码概述之前的二分搜索树可能会出现最坏的情况,如果添加的元素为:1,2,3,4,5 和 6 ,那么,二分搜索树就会像链表一样,插入速度没有影响,但是查询速度明显降低(因为需要依次比较),不能发挥 BST 的优势,因为每次还需要比较左子树,其查询速度比单链表还慢;因此,需要使用 平衡二叉树来解决此问题:平衡二叉树也叫平衡二叉搜索树(Self-b

2020-06-27 10:38:23 417

原创 SpringMVC--运行流程

概述Spring MVC 是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,在 Spring MVC 中,请求发送至前端控制器时,也就是请求会发送到 DispatcherServlet 类中的 doDispatch 方法中,然后就会主要在该方法中进行请求的处理;doDispatch 方法protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exce

2020-06-26 12:07:55 138

原创 Java集合--HashMap(1.7与1.8)底层实现

文章目录MapHashMap(1.7 了解)存储结构Entry 结点基本属性构造器put 方法(重点)putForNullKey 方法addEntry 和 createEntry 方法确定桶下标计算 hash 值确定下标(为什么这样处理)总结上述问题扩容MapMap 集合是有 Key 和 value 的(键值对),Collection 集合是只有 value;Map 接口并不是 Collection 下的;TreeMap:基于红黑树实现;HashMap:基于哈希表(数组+链表+红黑树(1.8

2020-06-15 09:51:40 1000

原创 Java集合--List(ArrayList,LinkedList和Vector底层实现)

ListList 接口继承了 Collection ,List 中的元素有序可重复;List 接口的实现类主要有 ArrayList,LinkedList 和 Vector;ArrayListArrayList 是 List 使用中最常用的实现类,它的底层数据结构是数组,ArrayList 查询速度快,效率高,但是增和删较慢,并且是线程不安全的集合;基本属性ArrayList 底层是一个数组,其默认的初始容量为10 //数据对象存放的数组,当前对象不参与序列化(主要是关键字trans

2020-06-13 08:56:16 1103

原创 SpringBoot--配置拦截器

下面是项目结构:在SpringBoot中,已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来,那么在SpringBoot中对于Web场景的位置当然在WebMvcAutoConfiguration中,类似于其它的场景都是 xxxAutoConfiguration,因此只需要观察xxxAutoConfiguration类中到底添加了什么或者配置了哪些组件即可。在WebMvcAutoConfiguration中关于静态资源的是其中的静态内部类WebMvcAutoConfiguratio

2020-06-12 20:46:42 289

原创 LeetCode题解-双指针

88.合并两个有序数组给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]

2020-06-08 09:27:01 255

原创 Spring源码解析:BeanFactory和Bean创建流程

概述BeanFactory是个Factory,也就是IOC容器或对象工厂;在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。我们先创建一个类,用创建的类来研究Spring是如何创建的该类的实例以及整个容器的流程(创建的bean实例是使用注解完成的,如果是xml文件形式,和注解的流程类似): @Test public void test(){...

2020-05-04 23:17:25 1687 1

原创 二分搜索树(二叉排序树)Java实现

二分搜索树(二叉查找树)​ 参考:《数据结构与算法分析》和《算法(第四版)》特性​ 二分搜索树(Binary Search Tree,BST,后面全用BST代替)也可叫做二叉查找树。它不仅可以查找数据,还可以高效地插入、删除数据。​ 特性:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;...

2020-05-03 21:12:44 457

原创 Java基础-异常

参考《Java核心技术卷Ⅰ》和《Java程序员面试笔试宝典》异常在Java中,所有的异常都是从Throwable继承而来的,是所有异常的共同祖先;Throwable有两个子类,是Error和Exception。Error类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误,是程序无法处理的错误,表示运行应用程序中较严重问题。Exception是另外一个非常重要的异常子类,这个层次...

2020-02-21 18:22:51 212

原创 字符匹配KMP算法Java实现

KMP算法​ KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。暴力匹配​ 现在需要确定一个字符串needle是否在另一个字符串haystack里面,可以使用最简单得暴力匹配...

2020-02-08 18:46:47 190

原创 循环队列的顺序存储结构Java

循环队列的顺序存储结构在上次,我们讲到的是,队列的顺序存储结构也是由ArrayList实现的,从此就可以看出,在入队时候的时间复杂度为O(1),但是在出队时候的时间复杂度为O(n),这是因为,每次在出队后要将数组后面的有效元素前移一位。所以,这里就会用到循环队列,显然,这种队列也是顺序存储结构,在这个循环队列中也会去实现接口Queue。首先,我们要想到的是如何将一般的队列改变为循环队列。...

2019-12-19 16:33:54 3143

原创 队列的顺序和链式存储结构Java实现

队列的顺序存储结构对于队列,是只允许在一端进行插入操作,在另一端进行删除操作的线性表。首先,我们先看一下Queue的接口实现:public interface Queue<E> extends Iterable<E>{ //获取队列中的元素个数 int getSize(); //判空 boolean isEmpty(); /...

2019-12-17 21:00:09 287 1

原创 线性表的链式存储结构Java

线性表的链式存储结构我们接着上次的顺序表来讲这次的链表。n个结点链结成一个链表,即为线性表的链式存储结构,因为此链表的每个结点中只包含一个指针域,所以叫做单链表。我们将链表中的第一个结点的存储位置叫做头指针。为了方便对链表进行操作,会在单链表的第一个结点前附设一个结点,叫做头结点。上图是一个带有虚头结点的单链表。首先看一下单链表的存储实现。/** * @author 七夏 * @...

2019-12-17 20:35:29 437 1

原创 普利姆(Prim)算法Java语言描述

普利姆算法把构造连通网的最小代价生成树称为最小生成树。我们通过构造一个图来说明这个算法。对这个图写出其arc邻接矩阵:在之前的图的存储就够中,已经有了一个存储结构为MGragh的邻接矩阵,其中,INFINITY代表∞,我们用数字65535来表示。现在,我们来看其核心代码:public void MinSpanTree(){ int min,j,k; int[] adjvex = ...

2019-10-23 10:45:40 252

原创 栈的顺序存储和链式存储结构Java

在之前的线性表的存储结构中,会有顺序存储结构和链式存储结构,对于栈和队列来说,也是一样的。对于栈,是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。对于队列,是只允许在一端进行插入操作,在另一端进行删除操作的线性表。栈的顺序存储结构在栈的顺...

2019-10-23 08:58:14 446 1

原创 线性表的顺序存储结构Java

线性表的顺序存储线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表(a1,a2,a3,…,an)的顺序存储示意图如上图。首先,介绍一下线性表的顺序存储结构:Java语言(其他语言一样)种用一维数组来实现顺序存储结构,即第一个元素存放到数组中下标为0的位置上,当然也可以是下标为1,这个都可以。然后把线性表相邻的元素存储在数组中相邻的位置。线性表的顺序存储...

2019-10-16 11:04:16 436 2

原创 图的存储以及图的深度,广度优先遍历Java语言

图的深度优先遍历深度优先遍历(Depth_First_Search),也有称为深度优先搜索,简称为DFS。这种遍历方法,从图中的某一个顶点开始遍历搜索,首先访问该顶点V(我们可以将其打印),然后从V开始寻找未被访问过的邻接顶点,将遍历后的顶点的状态设置为已访问,如果某个顶点已经访问过,则返回“上层”其实就是一种递归(它相当于树的前序遍历),直至图中的所有都被访问(或打印)。对于邻接矩阵形式...

2019-10-15 09:27:31 398 1

原创 数据结构与算法之图和图的存储结构Java语言描述

图(Graph)是由顶点的又穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。线性表中把数据元素称为元素,树中称为结点,而在图中数据元素称为顶点。图按有无方向分类的话,可以分为:无向图和有向图。图按边的多少分类的话,可以分为:稀疏图和稠密图。如上图,G1来说,该图就是一个无向图;无向图顶点的边数叫做度,分为入度和出度...

2019-10-14 21:38:50 430

原创 Java语言程序设计 对象和类

为对象定义类:面向对象程序设计(OOP)就是使用对象进行程序设计。对象(object)代表现实世界中可以明确标识的一个实体。每个对象都有自己独特的标识、状态和行为。一个对象的狀态(state,也称为特征(property)或属性(attribute))是由具有当前值的数据域来表示的。例如:圆对象具有一个数据域 radius, 它是标识圆的属性。一个矩形对象具有数据域 width 和 hei...

2019-08-05 19:18:37 479

原创 LeetCode数组练习题

LeetCode136:一个给定的数组中,只有某一个数字是单独一个,其余数字均是两个,输出那个单独的数字class LeetCode136{ public static void main(String[] args){ int[] arr={1,2,1,4,2}; //1 1 2 2 4 System.out.print(singleNum...

2019-08-01 18:25:47 311

原创 递归解决八皇后问题 Java语言

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。在这里,我们将会使用二维数组和递归的方法来解决这个复杂的问题。 第一种方法是通过复制最开始的棋盘arr(开始的棋盘是一个二维数组,当然初始化...

2019-07-31 18:10:48 677

原创 Java语言程序设计.基础篇 第六章 方法

下面附带一些第六章习题定义方法的语法如下所示:修饰符 返回值类型 方法名(参数列表 ){ // 方法体;}函数重载 重载函数是函数的一种特殊情况,为方便使用,Java允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。重载函数常用来实现功能类似而所处...

2019-07-29 08:52:24 477

原创 汉诺塔递归问题 Java语言描述

Java递归汉诺塔问题汉诺塔问题:大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。在这里,我们开始的时候就只先看第一个柱子上只有3个盘子的情况。首先,如果我们要将这三个盘子从start柱子移动到to上,所以就...

2019-07-27 18:26:12 243 2

原创 Java语言程序设计.基础篇 第五章 循环

for,while的应用- 最下面附上一些练习题while循环while 循环的语法如下:while(循环继缞条件){ // 循环体 语句(组); } 一些while循环,我们可以让他们成为一个“死循环”,如:while(true){}然后我们在循环体内可以进行while循环的退出。do-while循环do{ // 循环体;语句(组); } while(循环继...

2019-07-23 19:18:52 1944

空空如也

空空如也

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

TA关注的人

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