自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 跳跃表详解

跳跃表[SkipList]是一种基于有序链表的扩展,简称跳表,其就是使用关键节点作为索引的一种数据结构怎样能更快查找到一个【有序链表】的某一节点呢?可以利用类似【索引】的思想,提取出【链表】中的【部分关键节点】比如:给定一个长度是7的有序链表,节点值依次是1->2->3->5->6->7->8 那么我们可以取出所有值为【奇数的节点】作为关键点。此时如果要插入一个值是4的新节点,不再需要和原节点8,7,6,5,3逐一比较,只需要比较关键节点7,5,3。

2023-06-26 19:04:23 451

原创 锁机制总结

轻量级锁在虚拟机内部,使用一个称为BasicObjectLock的对象实现,这个对象内部由一个BasicLock对象和一个持有该锁的Java对象指针组成。也就是说,若某一线程别锁获得后,就会进入偏向模式,当线程再次请求这个锁时,则无需进行相关的同步操作,从而节省了操作时间。若果复制成果,那么加锁成功,否则认为加锁失败,那么轻量级锁就可能被膨胀为重量级锁。可以使线程在没有获取锁时,不被挂起,而转而去执行一个空循环,在若干空循环后,线程若果可以获得锁,则继续执行,若线程依然不能获取锁,则被挂起。

2022-09-07 19:40:52 340 1

原创 JVM-垃圾回收

1.1.1垃圾标记阶段引用计数算法给对象中添加一个引用计数器,

2022-08-04 15:05:44 197

原创 JVM初识

运行时常量池常量池是.calss文件中,当该类被加载,她的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址。常量池就是一张表,虚拟机指令根据这张常量池表,要找到执行的类名、方法名、参数类型、字面量等信息。方法区内存溢出1.8之前会导致永代区内存溢出1.8之后元空间内存溢出。每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存。每个进程只有一个活动栈帧,对应着当前正在执行的那个方法。特点线程是私有,不会存在内存移除。栈帧每个方法运行时需要的内存。3、jconsole工具。...

2022-07-19 01:45:01 248

原创 Redis事务_锁机制 _主从复制

Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断Redis事务的主要作用就是串联多个命令防止别的命令插队从输入Mulit命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行组队过程中可以通过discard来放弃组队组队中某个命令出现了报告错误,执行时整个的所有队列都会被取消如果执行阶段某个命令报出了错误,则只有报错的命令不会被执行,而其他的命令都会执行,

2022-07-05 14:25:21 172

原创 Redis概述及常用数据类型

Redis是一个开源的key-value存储系统和Memcached类似,它支持存储的value类型相对更多,包括String(字符串)、list(链表)、set(集合)、zset(sorted set—有序集合)和hash(哈希类型)这些数据类型都支持puesh\pop、add\remove及时取交集并集和差集及更丰富的操作,而且这些操作都是原子性的在此基础上,redis支持各种不同方式的排序为保证效率,数据都是缓存在内存中redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件并且再次基

2022-07-04 23:41:23 259

原创 关于<tx:attributes>报红 未声明bound to namespace 解决办法

仔细检查以上代码和自己的有什么区别!!!!是否有 http://www.springframework.org/schema/tx

2022-06-28 12:16:33 155

原创 SpringMVC小记

springmvc

2022-06-28 00:46:08 104

原创 Mybatis动态代理实现

动态代理存在的意义在三层架构中,业务逻辑层要通过接口访问数据访问层的功能,动态代理可以实现。动态代理实现规范:1)UsersMapper.xml文件与UsersMapper.java的接口必须同一个目录下2)UserMapper.xml文件与UserMapper.java的接口的文件名必须一致,后缀不管3)UserMapper.xml文件中标签的id值与UserMapper.java的接口中方法的名称完全一致4)UserMapper.xml文件中标签的paramType的属性值与UserMapper.jav

2022-06-21 17:52:29 328

原创 代理模式详解

加强对代理模式的理解

2022-06-21 01:15:00 113

原创 EL表达式 JSTL标签库

什么是EL表达式? 作用?全称是Expression Langue 是表达式语言EL表达式的作用主要是替代jsp页面中的表达式脚本在jsp页面中方进行输出,因为EL表达式在输出数据的时候,要比jsp的表达式脚本简洁得多。示例EL表达式的格式是:${表达式}EL表达式输出null值得时候,输出的是空串jsp表达式脚本输出null值的时候,输出的是null字符串EL表达式搜索域数据的顺序EL表达式主要是在jsp页面中输出数据主要是输出与对象中的数据顺序: pageContext、reques

2022-06-20 14:34:11 130

原创 javaweb复习

仅供个人复习

2022-06-20 00:41:47 89

原创 转发和重定向的区别

1. 重定向与转发的区别:1.重定向访问服务器两次,转发只访问服务器一次。2.转发页面的URL不会改变,而重定向地址会改变3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径。4.转发相当于服务器跳转,相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,前后页 共用一个request,可以通过此来传递一些数据或者session信息,request.setAttribute()和 request.getAttribute()。而

2022-05-05 18:01:22 28953 3

原创 蓝桥杯常用算法模板---基础篇

写在前面:距离蓝桥杯省赛还有不到半月,个人整理一些常用算法,分享给大家。最小公倍数gcd、最大公约数lcmpublic class LeastCommonMultiple { //使用欧几里得算法求解数m和数n最大公约数 public int getGcd(int m,int n){ while(n > 0){ int temp = m % n; m = n; n = temp;

2022-03-26 21:05:53 2355 1

原创 哈希表(解决哈希冲突)

哈希表是一种存储记录的连续内存通过哈希函数的应用,通过哈希函数的应用,可以快速存取与查找数据。所谓哈希法(Hashing),就是将本身的键(Key)通过特定的数学函数运算或使用其他的方转化成对应的数据存储地址。注:哈希法所使用的数学函数称为“哈希函数”(Hashing Function)。另外,Key在不混淆“键值对”时也可称之为键值。先来了解一下有关哈希函数的相关名词·Bucket(桶):哈希表中存储数据的位置,每一个位置对应唯一的地址(Bucket Address)桶就好比存在一个记录的位置

2022-03-24 21:19:24 919

原创 Web.xml 4.0

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee .

2022-03-20 20:09:21 2827

原创 log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging

使用log4j时不起作用,每次执行完出现以下提示:log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info

2022-03-09 19:05:20 1500

原创 修改mysql的root密码

方法1: 用SET PASSWORD命令首先登录MySQL。格式:mysql> set password for 用户名@localhost = password('新密码');例子:mysql> set password for root@localhost = password('123');方法2:用mysqladmin格式:mysqladmin -u用户名 -p旧密码 password 新密码例子:mysqladmin -uroot -p123456 password 12

2022-03-01 20:32:48 110

原创 MyBatis 空指针异常 静态资源过滤PersistenceException

大坑 这两个问题耗费了一晚上的时间 被自己蠢哭了555Maven静态资源过滤问题如果Mapper.xml文件没有放到resources目录(项目默认资源文件)下,而是放到java目录下,它在运行时会无法被导出或者生效。解决<resources> <resource> <directory>src/main/java</directory> <includes> <.

2022-02-28 21:37:49 364

原创 MyBatis概述

1.三层架构MVC:web开发中,使用mvc架构模式。m:数据,v:视图,c:控制器。c控制器:接受请求,调用service对象。显示请求的处理结果。当前使用servlet作为控制器v视图:现在使用jsp,html,css,js。显示请求的处理结果,把m中的数据显示出来m数据:来自数据库mysql,来自文件,来自网络mvc作用:1)实现耦合2)让mvc各负其职3)使得系统扩展更好。更容易维护三层架构1.界面层(视图层):接受用户的请求,调用service,显示请求的处

2022-02-19 16:57:48 127

原创 洛谷P1115JAVA

题目描述给出一个长度为 nnn 的序列 aaa,选出其中连续且非空的一段使得这段和最大。输入格式第一行是一个整数,表示序列的长度 nnn。第二行有 nnn 个整数,第 iii 个整数表示序列的第 iii 个数字 aia_iai​。输出格式输出一行一个整数表示答案。输入输出样例输入 #172 -4 3 -1 2 -4 3输出 #14说明/提示样例 1 解释选取 [3,5][3, 5][3,5] 子段 {3,−1,2}\{3, -1, 2\}{3,

2022-02-11 18:14:52 521

原创 Spring5:AOP

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

2022-02-08 15:27:19 302

原创 Spring5从入门到入坟:静态/动态代理模式

AOP的底层机制就是动态代理代理模式:静态代理、动态代理静态代理角色分析:抽象角色:一般使用接口或者抽象类来实现真实角色:被代理的角色代理角色:代理真实角色;代理真实角色后,一般会做一些附属的操作客户:使用代理角色来进行一些操作代码实现Rent.java 抽象角色public interface Rent { public void rent();}Proxy.java 代理角色public class Proxy implements

2022-02-01 13:26:44 65

原创 Spring5从入门到入坟:使用注解开发

jdk1.5开始支持注解,spring2.5开始全面直接注解准备工作:利用注解的方式注入属性1、在spring配置文件中引入context文件头<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xm

2022-01-29 22:24:56 367

原创 Spring5从入门到入坟:自动装配

自动装配说明:·自动装配是使用Spring满足bean依赖的一种方法·spring会在应用上下文中为某个bean寻找其依赖的beanSpring中bean有三种装配机制,分别是(1)在xml中显式配置(2)在java中显式配置(3)隐式的bean发现机制和自动装配Spring自动装配需要从两个角度来实现,或者说是两个操作:1、组件扫描:spring会自动发现应用上下文中所创建的bean;2、自动装配:spring自动满足bean之间的依赖,也就是我们说的IOC/DI组

2022-01-28 19:26:12 609

原创 斐波那契查找法

import java.util.Arrays;public class FibonacciSearch { public static int maxSize = 20; //斐波那契数列 public static int[] fib() { int[] f = new int[maxSize]; f[0] = 1; f[1] = 1; for (int i = 2; i < maxSize; i++..

2022-01-28 15:41:19 303

原创 插值查找法

插值查找法又称为插补查找法,是二分查找法的改进版,按照数据位置的分布,利用公式预测数据所在的位置,再以二分法的方式渐渐逼近。使用插值查找法时,假设数据平均分布在数组中,而每一项数据的差距相当接近或有一定的距离比例。插值查找法的公式为:mid=low+((key-data[low])/(data[high]-data[low]))*(high-low)其中,key是要查找的键值,data[high]、data[low]是剩余待查找记录中的最大值和最小值。假设数据项数为n,其插值查找法的步骤如下:(

2022-01-27 21:47:42 1004

原创 Spring5从入门到入坟:依赖注入

依赖注入(Dependency Injection ,DI)依赖:指Bean对象的创建依赖于容器,Bean对象的依赖资源。注入:指Bean对象所依赖的资源,由容器来设置和装配1、构造器注入:见上篇博客2、Set注入要求被注入的属性必须有set方法,set()方法的方法名由set+属性首写字母大写,如果属性是boolean类型,没有set方法,是isAddress.javapublic class Address { private String address;

2022-01-27 15:24:46 305

原创 八皇后问题Java

思路分析: 把第一个皇后放到第一行第一列(1)把第二个皇后放到第二行第一列,进行判断,如果不行,放在第二列,进行判断,如果不行,放在 第三列,进行判断,一次把所有列进行尝试,直至找到合适位置(2)把第三个皇后放到第三行第一列,同步骤2(3)........(4)直至第8个皇后也能放到合适位置,此时第一个符合要求摆法便找到。(5)当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯。把第一个皇后在第一行第一列...

2022-01-26 23:25:04 730

原创 Spring5从入门到入坟01

Spring 框架概述Spring 使创建 Java 企业应用程序变得容易。它提供了在企业环境中使用 Java 语言所需的一切,并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需求灵活地创建多种体系结构。从 Spring Framework 5.0 开始,Spring 需要 JDK 8(Java SE 8),并且已经为 JDK 9 提供了现成的支持。Spring 支持广泛的应用场景。在大型企业中,应用程序通常存在很长时间,并且必须在升级周期不受开发人员控制的

2022-01-26 19:58:59 301

原创 堆排序Java实现

堆排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序时间。堆排序法用到了二叉树的技巧,是利用堆排序来完成排序的。堆积树是一种特殊的二叉树,可分为最大堆积树和最小堆积树两种最大堆积树满足以下3个条件:1、它是一颗完全二叉树2、所有的节点的值都大于或等于它左、右节点的值3、树根是堆积树中最大的。最小堆积树满足以下3个条件1、它是一颗完全二叉树2、所有节点的值都小于或等于它左、右子节点的值3、树根是堆积树中最小的原理实现图:代码实现:.

2022-01-25 21:35:03 247 1

原创 JAVA-反射学习

Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API获得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对量就包含了整个的类的结构信息,我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以我们形象的称之为:反射正常方式:引入需要的“包类名称”-->通过new实例化-->取得实例化对

2022-01-25 18:06:12 248

原创 用链表来实现二叉树

二叉树最多只能有两个子节点,也就是说分支度小于或等于2.所谓二叉树的链表表示法,就是利用链表来存储二叉树。使用链表来表示二叉树的好处是节点的增加与删除操作相对容易,缺点是很难找到父节点,除非在每一节点多增加一个指向父字段。代码实现:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * @author admin $ * @title $ *

2022-01-24 13:26:39 1231

原创 用数组来创建二叉树

首先来看看使用一维数组建立二叉树的表示方法以及数组索引的设置从图中可以看出次一维数组中的索引值有以下关系 :* 左子树索引值是父节点索引值乘以二* 右子树索引值是父节点索引值乘以二加一接着看一下如何以一维数组建立二叉树,实际上就是建立一棵二叉查找树。这是一种很好地排序应用模式,因为建立二叉树的同时数据就经过了初步的比较判断,并按照二叉树的建立规则来存放数据。二叉查找树具有以下特点:(1)可以是空集合,若不是空集合,则节点上一定要有一个键值。(2)每一个树根的值需大于左子树的值

2022-01-24 12:37:59 4698 2

原创 快速排序和归并排序(JAVA)

快速排序是有C.A.R.Hoare提出来的。快速排序又称为分割交换排序法,是目前公认最佳的排序法,也是使用“分而治之”的方式,会在数据中找到一个虚拟的中间值称为基准,并按此基准将所有打算排序的数据分为两部分。其中小于基准的数据放在左边,而大于基准的数据方在右边,再以同样的方式分别处理左、右两边的数据,直到排序完成为止。算法分析:(1)在最好情况和平均情况下,时间复杂度为O(n);在最坏情况下(每次挑选中间值不是最大就是最小)下,其时间发复杂度为O()。(2)快速排序不是稳定排序算法。(3)在

2022-01-24 02:32:18 168

原创 JAVA泛型深入学习理解

1、为什么要有泛型集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来 解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。Collection,Li...

2022-01-24 00:12:58 382

原创 希尔排序JAVA实现

实现原理动态图解:import java.util.Arrays;public class ShellSort { public static void shellSortSmallToBig(int[] data) { int j = 0; int temp = 0; int jmp=data.length/2; for ( jmp = data.length / 2; jmp > 0; jmp /= 2) {

2022-01-22 19:34:54 257

原创 选择排序和插入排序(JAVA)

选择排序:算法分析:(1)无论是最坏情况、最好情况和平均情况都需要找到最大值(或最小值),因此其比较次数为(n-1)+(n-2)+(n-3)+...+2+1=n(n+1)/2次;时间复杂度为O()(2)由于选择排序是以最大值或者最小值直接与最前方未排序的键值交换,数据排列顺序很有可能被改变,因此它不是稳定排序(3)因为需要一个额外的空间,所以空间复杂度为最佳(3)比较适用于数据量小或者由部分数据已经排过序的情况实现原理动态图:/** * @author admin $ *

2022-01-21 22:43:27 391

原创 冒泡排序法

前言:本篇参考《图解算法》冒泡排序法又称为交换排序法,是从观察水中气泡变化构思而成的,原理是从第一个元素开始,比较相邻元素大小,若大小顺序有误,则对调后再进行下一个元素的比较,就仿佛气泡从水底开始逐渐升到水面一样。如此通过扫描一次之后就可以确保最后一个元素位于正确的顺序。接着进行第二次扫描,直到完成所有元素的排序为止。动态效果图:/** * @author admin $ * @title * 冒泡排序 * @description $ * @updateTime $ 20.

2022-01-21 21:08:49 405

原创 JAVA多线程深度学习

线程与进程所有的操作系统都支持进程,当一个程序进入内存时就变成了一个进程。进程就是处于运行过程中的程序,并且具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单元。进程包含如下3个特征:独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个进程不可以直接访问其他进程的地址空间。 动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合。进程具有自己的生命周期和各种不同的状

2022-01-21 20:08:46 1123

空空如也

空空如也

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

TA关注的人

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