自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hanlin_zhao的博客

卷一点是一点

  • 博客(45)
  • 收藏
  • 关注

原创 【无标题】

SpringBoot

2023-07-24 16:11:25 124

原创 Spring相关知识点

Spring知识点

2023-01-30 17:51:17 690 2

原创 Java高并发知识点

java并发编程

2023-01-06 17:56:54 944 2

原创 Sping面试题

Sping

2022-11-22 17:38:38 424

原创 Java JVM相关

JVM

2022-11-22 16:02:47 270

原创 Java面试题相关

java面试基础

2022-11-21 17:58:28 185

原创 docker 数据卷

docker数据卷

2022-08-21 05:20:06 83 1

原创 docker镜像

docker 镜像相关

2022-08-21 01:22:57 233 1

原创 docker run命令做了什么

docker常用命令

2022-08-20 19:29:55 315 1

原创 docker 启动报错01

docker info

2022-08-20 16:04:00 707

原创 @AutoConfigurationPackage自动包规则原理

@AutoConfigurationPackage自动配置包

2022-07-30 19:18:22 1405

原创 代码圈复杂度

codeCheck

2022-07-29 00:16:38 1446

原创 【多线程间几种通信方式】

java线程通信

2022-07-09 21:10:45 1697 1

原创 【HashMap遍历相关】

HashMap

2022-07-09 19:38:44 86

原创 Java 8 的 Optional解决NullPointerException异常

JAVA8 Optional

2022-07-09 18:58:26 639

原创 spring相关知识理解之IOC

1,Spring5 框架1,Spring5 框架概述Spring 是轻量级的开源的 JavaEE 框架Spring 可以解决企业应用开发的复杂性Spring 有两个核心部分:IOC 和 AopIOC:控制反转,把创建对象过程交给 Spring 进行管理Aop:面向切面,不修改源代码进行功能增强Spring 特点方便解耦,简化开发Aop 编程支持方便程序测试方便和其他框架进行整合方便进行事务操作降低 API 开发难度2,测试通过spring创建一个类导入spr

2022-05-22 00:10:07 96

原创 java8特性

java8特性一,Lambda表达式###1,Lambda表达式介绍Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以 传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。2,Lambda表达式使用1,举例说明:(o1,o2)-> Integer.compare(o1,o2)2,格式:->:Lambda操作符号或者箭头操作符->:左边:Lambda形参列表(

2022-05-22 00:04:31 112

原创 java中动态代理简单理解

1,Java动态代理相关APIProxy :专门完成代理的操作类,是所有动态代理类的父类。通过此类为一 个或多个接口动态地生成实现类。提供用于创建动态代理类和动态代理对象的静态方法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kS29WBvV-1652275886273)(C:\Users\Think\AppData\Roaming\Typora\typora-user-images\1652274619957.png)]2,动态代理实现案例如何根据

2022-05-11 21:33:31 198

原创 java反射机制

1,Java反射机制概述Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期 借助于Reflection API取得任何的内部信息,并能直接操作任意对象的内 部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个 类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可 以通过这个对象看到类的结构。动态语言 vs 静态语言1、动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以 被引进,已有

2022-05-11 21:27:55 69

原创 java线程相关

java中的线程1,基本概念:程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径2,线程的创建和使用方式一:继承Thread类定义子类继承Thread类。子类中重写Thread类中的run方法。创建Thread子

2022-05-11 01:14:21 83

原创 Map接口之HashMap

Map接口map接口的介绍和实现类map接口的继承树Map接口概述Map与Collection并列存在。用于保存具有映射关系的数据:key-valueMap 中的 key 和 value 都可以是任何引用类型的数据Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 valueMap接口的常用实现类:HashM

2022-05-10 22:34:56 352

原创 Collection子接口之二:Set接口

Collection子接口之二:Set接口Set接口概述Set接口是Collection的子接口,set接口没有提供额外的方法Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set 集合中,则添加操作失败Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals() 方法##理解Set的无序性和不可重复性(以HashSet为例)无序性,不等于随机性。存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值来添加不可重复性:添加的元素按照eq

2022-05-10 22:31:10 61

原创 Collection子接口之一:List接口

#Collection子接口之一:List接口List接口概述鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。ArrayList、LinkedList和Vector三种异同相同点三个

2022-05-10 22:28:34 52

原创 Collection接口

1,集合和数组的简单对比集合,数组都是对数据进行存储操作的数据结构,简称Java容器数组在存储数据时的特点数组一旦初始化之后,长度就确定了数组一旦定义好之后,其存放的数据类型也就确定了数组在存储数据时的缺点数组一旦初始化之后,长度就确定了数组中提供的方法非常有限,非常不方法,并且效率不高数组存储数据的特点,有序,可重复,对于无序,不可重复的需求不能满足获取数组中实际元素的个数,数组没有对应的方法和属性集合存储的有点解决数组存储数据的缺点2,Java集合框架概述

2022-05-10 22:27:06 105

原创 栈的相关操作

栈的介绍1,基础概念栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除2,出栈(pop)示意图[外链图片转存失败,源站可能有

2022-05-09 23:31:42 92

原创 数组相关操作

二,二维数组与稀疏数组实现二维数组与稀疏数组转换1,创建一个二维数组public static int[][] chessArry1(){ int chessArray1[][]=new int[11][11]; chessArray1[1][2]=2; chessArray1[2][3]=1; chessArray1[4][5]=9; return chessArray1; }/** * 遍历输出数

2022-05-09 23:29:35 97

原创 环形链表操作

3,环形链表单向环形链表单向环形链表介绍案例:与瑟夫问题(josephu)设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。代码实现:/** * 构建一个单向环形链表的思路 * 1,先创建第一个节点,让first指向该节点,并形成环状 * 2,后面每创建一个节点,就把该节点加入到已经创建好的环形链表中 *

2022-05-09 23:18:22 93

原创 双向链表操作

2,双向链表介绍1,双向链表的新增/** * 实现双向链表的添加操作(不管编号顺序) * * @param headNode_02 */ public void addDoubleList(HeadNode_02 headNode_02) { HeadNode_02 temp = head; //遍历链表,找到最后一个节点 while (true) { if (temp.next ==

2022-05-09 23:17:04 113

原创 单链表操作

一,Java中的链表链表是有序的列表,但是它在内存中是存储如下总结:链表是以节点的方式来存储,是链式存储。每个节点包含 data 域, next 域:指向下一个节点。如图:发现链表的各个节点不一定是连续存储。链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。1,单链表介绍1,单链表(带头结点) 逻辑结构示意图如下:2,单链表的CRUD操作案例2.1,定义一个头节点做为单链表的开始,其中头节点不做数据处理,只是单链表的开始代码:/** * 定义一

2022-05-09 23:14:21 275

原创 二叉树-删除节点

删除的思路判断当前节点的子节点是否需要删除,而不是去判断当前节点是否需要删除如果当前节点的左子节点不为空,并且左子节点就是要删除的节点,就将this.left=null,并且返回,结束递归如果当前节点的右子节点不为空,并且右子节点就是要删除的节点,就将this.right=null,并且返回,结束递归如果2,3没有完成删除节点,则需要向左子树进行递归删除如果4没有完成删除节点,则需要向右子树进行递归删除如果树是空树,树只有一个root节点,则等价将二叉树置空package com.hanl

2022-05-08 20:41:01 626

原创 二叉树-查找指定节点

使用前,中,后序的方式来查询指定节点元素前序查找思路先判断当前节点的no是否等于查找节点的no,如果相等,则返回当前节点如果不相等,则判断当前节点的左子节点是否为空,如果不为空则递归查找如果左递归前序查找,找到了节点,则返回,否则继续判断当前节点的右子节点是否为空,如果不为空,则继续向右递归查找中序查找思路判断当前节点的左子节点是否为空,如果不为空,则向左递归中序查找如果找到,则返回,如果找不到,就和当前节点比较,如果等于当前节点则返回,否则继续进行右递归中序查找如果当前节点的右子节点

2022-05-08 19:48:20 1734

原创 二叉树遍历应用实例(前序,中序,后序)

思路:前序遍历先输出当前节点(初始的时候是root节点)如果左子节点不为空,则递归继续前序遍历如果右子节点不为空,则递归继续前序遍历中序遍历如果当前节点的左子节点不为空,则递归中序遍历输出当前节点如果当前节点的右子节点不为空,则递归中序遍历后序遍历如果当前节点的左子节点不为空,则递归后序遍历如果当前节点的右子节点不为空,则递归后序遍历输出当前节点代码实现package com.hanlin.tree;public class BinaryTree..

2022-05-08 19:44:58 551

原创 进程/线程相关理论知识

进程/线程进程:进程就是正在运行的程序,它会占用对应的内存区域,由CPU进行执行与计算线程:操作系统OS能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.一个操作系统中可以有多个进程,一个进程中可以包含一个线程(单线程程序),也可以包含多个线程(多线程程序)串行是指同一时刻一个CPU只能处理一件事,类似于单车道并行是指同一时刻多个CPU可以处理多件事,类似于多车道线程状态与代码对照:线程生命周期,主要有五种状态:1,新建状态(Ne..

2022-05-08 01:46:08 188

原创 java处理浮点数运算不精确的问题

处理浮点数运算不精确的问题BigDecimal对象(该类常用来解决浮点数运算不精确的问题)代码测试:package cn.tedu.api;import java.math.BigDecimal;import java.util.Scanner;public class TestBigDecimal { public static void main(String [] args){ f1();//使用普通的四则运算 f2();//使用BigDe

2022-05-07 23:00:26 542

原创 基数排序实现案例

1,基数排序(桶排序)介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort)是桶排序的扩展 基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个

2022-05-07 22:54:05 188

原创 归并排序实现案例

1,归并排序介绍归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。2,归并排序思想示意图1-基本思想说明:可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程。归并排序思想示意图2-合并

2022-05-07 22:51:27 787

原创 快速排序实现案例

1,快速排序法介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2,快速排序法示意图3,代码实现/** * 快速排序(效率比希尔排序快) * @param arr 数组 * @param left 数组的开始位置 0 * @par

2022-05-07 22:49:33 136

原创 希尔排序(插入排序的优化)

1,希尔排序法介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。2,希尔排序法基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止3,希尔排序法的示意图4,希尔排序分步演变过程(交换)/** * 希尔排序逐步演变过程 */public

2022-05-07 22:44:26 174

原创 插入排序实现过程

1,插入排序法介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2,插入排序法思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。3,插入排序思路图4,逐步演变过程/** *

2022-05-07 01:02:59 78

原创 插入排序实现过程

1,插入排序法介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2,插入排序法思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。3,插入排序思路图4,逐步演变过程/** *

2022-05-07 00:59:58 446

空空如也

空空如也

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

TA关注的人

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