自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ACID是什么?

ACID是什么?ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称

2022-03-24 14:43:21 7014 2

原创 JAVA中的线程池

1、什么是池化技术?池化技术 (Pool) 是一种很常见的编程技巧,在请求量大时能明显优化应用性能,降低系统频繁建连的资源开销。我们日常工作中常见的有数据库连接池、线程池、对象池等,它们的特点都是将 “昂贵的”、“费时的” 的资源维护在一个特定的 “池子” 中,规定其最小连接数、最大连接数、阻塞队列等配置,方便进行统一管理和复用,通常还会附带一些探活机制、强制回收、监控一类的配套功能。简介**提前保存大量的资源,以备不时之需以及重复使用。**池化技术应用广泛,如内存池,线程池,连接池等等。内存池相关的

2022-03-18 11:54:53 513

原创 生产者消费者问题

什么是生产者消费者问题?生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多进程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。要解决该问

2022-03-17 11:28:10 1734 2

原创 Swagger的初使用

Swagger是什么?Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。简单来说Swagger就是一个用于测试后端接

2022-03-15 11:24:53 4643

原创 浅谈AOP

1、什么是AOP在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP是一直编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将

2022-03-10 12:49:17 162

原创 代理模式原来是这样的

1、什么是代理模式(Proxy pattern)代理模式(Proxy pattern):给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。通用类图:上图中,Subject是一个抽象类或者接口,RealSubject(被代理类)与Proxy(代理类)共同实现接口或继承抽象类,Cliebt(客户端),只和代理类打交道不需要访问被代理类代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。代理模式的优缺点优点:协

2022-03-09 13:09:32 202

原创 原来JAVA是这样进行垃圾回收的

1、什么是垃圾回收机制(GC)在C/C++程序中,程序员在内存中主动开辟一段相应的空间来存值。由于内存是有限的,所以当程序不再需要使用该内存空间时,就需要销毁对象并释放其所占用的内存资源,好重新利用这段空间。在C/C++中,释放无用内存空间的事情需要由程序员自己来处理。就是说当程序员认为空间没用了,就手动地释放其占用的内存。但是这样显然非常繁琐,如果有所遗漏,就可能造成资源浪费甚至内存泄露。当软件系统比较复杂,变量多的时候程序员往往就忘记释放内存)或者在不该释放的时候释放内存了。有了GC,程序员就不需要

2022-03-08 11:18:42 707

原创 初识JVM

JVM是什么JVM(Java Virtual Machine(Java虚拟机))Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。JVM内存图jvm的必要性Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在

2022-03-06 23:30:37 67

原创 使用枚举进行单例

今天在将mybatis封装为一个工具类时,使用单例模式进行封装,而完成单例模式常用的方式有懒汉式,饿汉式。在第一次封装时我使用的是懒汉式的双重判定来做的,后来发现有一种更加简介的方式来实现单例模式,那就是使用枚举类来完成单例模式,下面我们就来看看为什么枚举可以完成单例枚举类的本质我们在将一个枚举类的class文件利用javap -v命令进行反编译后可以看到如下内容在这里我们可以清除的看到枚举其实就是一个继承了Enum的类,而我们在没枚举中所声明的常量,就是一个个对象,这些对象都是静态的,不可修改的

2022-03-04 00:35:27 488

原创 JAVASE-复习①

1、什么是Java语言?简单来说,java是sun公司在1995年推出的一门面向对象的程序设计语言。2010年sun公司被Oracle公司收购,之后由Oracle公司负责java的维护和版本升级。按照应用范围java分为三个体系:①Java SE (Java Platform Standard Edition,Java 平台标准版)以前称为 J2SE,它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支 持 Java Web 服务开发的类,并为

2022-02-24 13:34:34 135

原创 MyBatis介绍及教程

MyBatis简介MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。MyBatis的优缺点优点:简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习

2022-02-15 14:31:42 1498

原创 Cookie和Session

1、Cookie是什么?Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 。一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所

2022-02-11 13:48:41 1037 1

原创 JavaWeb三大组件之Filter过滤器

1、什么是Filter过滤器Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器Filter 过滤器它是 JavaEE 的规范。也就是接口Filter 过滤器它的作用是:拦截请求,过滤响应。拦截请求常见的应用场景有: 1、权限检查 2、日记操作 3、事务管理 ……等等2、Filter 的生命周期Filter 的生命周期包含几个方法1、构造器方法2、init 初始化方法 第 1,2 步,在 web 工程启

2022-02-10 14:26:32 177

原创 理解TCP/IP

TCP/IP介绍:TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。TCP与UDP的区别:TCP(Transimision Control Protocal)

2022-02-06 13:52:57 6493

原创 JAVA反射机制

1、什么是反射?在java开发中有一个非常重要的概念就是java反射机制,也是java的重要特征之一。反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力,通过反射可以调用私有方法和私有属性,大部分框架也都是运用反射原理的。Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。一个类有多个组成部分,例如:成员变量、方法、构造方法等

2022-02-04 23:44:05 692 1

原创 JAVA-JSP

JSP是什么JSP的全称是 java server pages,直译就是“运行在服务器端的页面”JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。JSP = HTML+Java代码JSP页面本质上就是一个 Servlet 程序。JSP的产生产生过程:上古时代,通常情况是美工写好html

2022-01-29 14:09:31 1063

原创 JAVA-Servlet

Servlet是什么?Servlet(Server+ applet):表示服务器端小程序。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。Servlet是sun公司提供的一门用于开发动态web资源的技术,在服务器端运行。它可以接收客户端发送过来的请求,并响应数据给客户端。注:编写 Servlet 代码需要遵循 Java 语法,一个 Servle

2022-01-29 12:11:52 695

原创 数据结构—排序二叉树

介绍:二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点例如: (7, 3, 10, 12, 5, 1, 9) ,对应的二叉排序树为:package com.xawl.tree.BinarySortTree;p

2022-01-28 10:07:16 421

原创 同步异步,并发并行的区分

同步与异步定义:同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用比方说:你去商城买东西,你看上了一款手机,能和店家说你一个这款手机,他就去仓库拿货,你得在店里等着,不能离开,这叫做同步。现在你

2022-01-21 14:39:23 145

原创 ListIterator和Iterator

Iterator简介:Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。LIstIterator简介:LIstIterator是一个更加强大的Iterator的子类型,它只能用于各种List类的访问Iterator中的常用方法:hasNext():boolean如果迭代器指向位置后面还有元素,则返回 true,否则返回falsenext():E返回集合中Iterator指向位置后面的元素remove():

2022-01-21 14:05:37 575

原创 JAVA多线程

一、有关多线程的概念1、程序、进程、线程JAVA程序(programm)概念:是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码。进程(process)概念:程序的一次执行过程,或是正在运行的一个程序。说明:进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域线程(thread)概念:进程可进一步细化为线程,是一个程序内部的一条执行路径。说明:线程作为调度和执行的单位,每个线程拥独立的运行栈和程序计数器(pc),线程切换的开销小。2、并

2022-01-16 17:47:59 125 3

原创 leetcode-左叶子之和

计算给定二叉树的所有左叶子之和。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, Tr

2022-01-15 23:42:09 91

原创 排序算法—堆排序

介绍:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;堆排序是一种**选择排序,**它的最坏,最好,平均时间复杂度均为O(nlogn),它是不稳定排序。下面这个

2022-01-14 15:26:01 97

原创 leetcode-路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNo

2022-01-14 15:06:08 134

原创 leetcode-反转二叉树

翻转一棵二叉树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode r

2022-01-14 15:04:51 63

原创 数据结构—线索化二叉树

简介对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种下面的二叉树,进行中序线索二叉树,图示:说明:当线索化二叉树后,Node节点的 属性left 和right,有如下情况:(1)left 指向的是左子树,也可能是指向的前驱节点. 比如 1 节点 left 指向的左子树, 而 10 节点的 left 指向的

2022-01-13 15:37:50 53

原创 数据结构—顺序二叉树

简介数组存储方式和树的存储方式可以相互转换二叉树的顺序存储结构就是一维数组存储二叉树中的节点,并且节点的存储位置,也就是数组下标要能体现节点之间的关系,比如双亲和孩纸的关系。左右兄弟关系等。顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树数组中下标为n的元素的左子节点对应在数组中的下标为 2 * n + 1数组中下标为n的元素的右子节点对应在数组中的下标为 2 * n + 2数组中下标为n的元素的父节点对应在数组中的下标为 (n-1) / 2代码实现:package com.xa

2022-01-13 15:35:14 301

原创 数据结构—二叉树

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

2022-01-13 15:32:55 280

原创 leetcode-二叉树的最小深度

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。**说明:**叶子节点是指没有子节点的节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val

2022-01-13 13:22:25 115

原创 leetcode-二叉树的最大深度

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。class Solution { public int maxDepth(TreeNode root) { //终止条件 if(root == null) return 0; //单层逻辑 int left = maxDepth(root.left); int right = maxDe

2022-01-13 13:21:14 110

原创 JAVA中File类的使用

关于File类的几点说明:java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。File对象可以作为参数传递给流的构造器构造器:public File(String pathname)以path

2022-01-12 21:53:05 468

原创 leetcode-对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) return true; return check(root.left,root.right); } boolean che

2022-01-12 20:30:54 94

原创 leetcode-多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。使用mapclass Solution { public int majorityElement(int[] nums) { //使用一个map存储,key存数组中的数,val存每个数字出现的次数 Map<Integer,Integer> map = new HashMap<&gt

2022-01-10 13:26:16 70

原创 leetcode-罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情

2022-01-10 13:24:24 65

原创 数据结构—哈希表

基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的[数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表图示代码package com.xawl.hashtab;import java.util.Scanner;public class HashTabDemo { public static void main(String[] args) {

2022-01-07 14:40:25 472 1

原创 leetcode-替换所有的问号(使用递归)

给你一个仅包含小写英文字母和 ‘?’ 字符的字符串 s,请你将所有的 ‘?’ 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。注意:你 不能 修改非 ‘?’ 字符。题目测试用例保证 除 ‘?’ 字符 之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。class Solution { public String modifyString(String s) {

2022-01-06 11:44:22 88

原创 常见的查找算法

查找查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算。常见的查找算法:顺序(线性)查找二分查找(折半查找)插值查找斐波那契查找1、顺序(线性)查找顺序查找也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。代码实现:package com.xawl.search;//线性查找public class SeqSearch {

2022-01-06 11:41:37 2012

原创 常见的排序算法(JAVA)

排序排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序:指将需要处理的所有数据都加载 到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分类常见排序算法的时间复杂度对比:相关术语解释:稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;

2022-01-05 14:14:37 209

原创 leetcode-斐波那契数列(使用递归)

斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。class Solution { public int fib(int n) { /** * 思路:要是n小于2的话直接返回, * 要不然递归(往

2021-12-31 20:59:36 255

原创 leetcode-从尾到头打印链表(使用递归)

从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 List<Integer> list = new ArrayList<>(); public int[] reversePrint(ListNode head) { recur(head); //把list转化为数组 int[] res = new int[list.size()]; for (int i = 0

2021-12-31 12:41:19 292

空空如也

空空如也

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

TA关注的人

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