自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql where 条件 查询varchar类型的字段 加‘‘和不加‘‘的区别

mysql where 条件 查询varchar类型的字段 加''和不加''的区别

2022-08-05 16:59:04 808 1

转载 MySQL 排序 输出序号

MySQL 排序 输出序号https://blog.csdn.net/JngKang/article/details/121206575

2022-03-23 17:30:33 481

原创 BlockingQueueDemo阻塞队列(种类、底层数据结构、使用场景)

栈和队列栈 :先进后出,后进先出队列 :先进先出阻塞队列阻塞:必须要阻塞/不得不阻塞阻塞队列是一个队列,在数据结构中起的作用如图:当队列是空的,从队列中获取元素的操作将会被阻塞。当队列是满的,...

2020-11-14 16:37:50 406

原创 JAVA锁的膨胀过程

一、背景在 Java 语言中,使用 Synchronized 是能够实现线程同步的,即加锁。并且实现的是悲观锁,在操作同步资源的时候直接先加锁。加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以总共有4种锁状态,级别由低到高依次为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。这几个状态会随着竞争情况逐渐升级,此过程为不可逆。所以 synchro

2020-11-14 15:31:34 966

原创 如何实现让类加载器去加载网络上的资源文件?怎么自定义类加载器?自定义的加载器还符合双亲委托机制吗?怎么打破双亲委托机制?

为什么要自定义加载器首先我们来了解一下创建自定义加载器的原因:1、存放在自定义路径上的类,需要通过自定义类加载器去加载。【注意:AppClassLoader加载classpath下的类】2、类不一定从文件中加载,也可能从网络中的流中加载,这就需要自定义加载器去实现加密解密。3、可以定义类的实现机制,实现类的热部署,如OSGi中的bundle模块就是通过实现自己的ClassLoader实现的,如tomcat实现的自定义类加载模型。总结:要让类加载器去加载网络上的资源文件,就得创建自定义加载器。

2020-11-12 22:55:20 299

原创 Spring中事务@Transactional失效场景(6大种)

1、@Transactional 应用在非 public 修饰的方法上如果Transactional注解应用在非public 修饰的方法上,Transactional将会失效。之所以会失效是因为在Spring AOP 代理时,如上图所示 TransactionInterceptor (事务拦截器)在目标方法执行前后进行拦截,DynamicAdvisedInterceptor(CglibAopProxy 的内部类)的 intercept 方法或 JdkDynamicAopProxy 的 invoke 方

2020-10-29 20:24:20 590

原创 Mybatis 与 JDBC 编程的比较

1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。解决:在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。2. Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 java 代码。解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。3. 向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需

2020-10-19 18:47:10 88

原创 #{}与${}的区别

#{}表示一个占位符号通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,#{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类型值, #{}括号中可以是 value 或其它名称。表示拼接sql串通过{} 表示拼接 sql 串通过表示拼接sql串通过{}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, ${

2020-10-19 18:34:15 138

原创 从设计的目的谈接口和抽象类的区别

接口的设计目的,是对类的行为进行约束(更准确的说是一种“有”约束,因为接口不能规定类不可以有什么行为),也就是提供一种机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。对“接口为何是约束”的理解,我觉得配合泛型食用效果更佳。而抽象类的设计目的,是代码复用。当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行为的实现方式一致时(A的非真子集,记为B),可以让这些类都派生于一个抽象类。在这个抽象类中实现了B,避免让所有的子类来实现B,这就达到了代码复用.

2020-10-15 08:54:33 361

原创 聚簇索引和非聚簇索引的区别

聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置在innodb中,在聚簇索引之上创建的索引称之为辅助索引,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。辅助索引叶子节点存储的不再是行的物理位置,而是主键值,辅助索引访问数据总是需要二次查找。InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法

2020-10-14 23:46:33 351

原创 什么是浅拷贝和深拷贝?

在Java中,除了 基本数据类型之外,还存在 类的实例对象这个引用数据类型,而一般使用 “=”号做赋值操作的时候,对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际还是指向的同一个对象。而浅拷贝和深拷贝就是在这个基础上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员

2020-10-11 10:55:03 324

原创 谈谈对Volatile的理解

JUC(java.util.concurrent)进程和线程进程:后台运行的程序(我们打开的一个软件,就是进程)线程:轻量级的进程,并且一个进程包含多个线程(同在一个软件内,同时运行窗口,就是线程)并发和并行并发:同时访问某个东西,就是并发并行:一起做某些事情,就是并行JUC下的三个包java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks谈谈对Volatile的.

2020-10-10 10:52:33 71

原创 SpringMVC 工作原理

原理如下图所示:流程说明(重要):客户端(浏览器)发送请求,直接请求到 DispatcherServlet。DispatcherServlet 根据请求信息调用HandlerMapping,解析请求对应的 Handler。解析到对应的 Handler(也就是我们平常说的 Controller控制器)后,开始由 HandlerAdapter 适配器处理。HandlerAdapter 会根据 Handler来调用真正的处理器来处理请求,并处理相应的业务逻辑。处理器处理完业务后,会返回一个 M

2020-10-09 20:59:34 61

原创 各种排序算法的介绍、图解以及代码的实现(Java版)

1.排序算法的介绍排序也称排序算法(SortAlgorithm),排序是将 一组数据,依 指定的顺序进行 排列的过程。2 排序的分类:内部排序:指将需要处理的所有数据都加载到 内部存储器( 内存)中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助 外部存储( 文件等)进行排序。常见的排序算法分类(见右图):3.内部排序3.1插入排序直接插入排序1插入排序法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2插

2020-09-29 21:24:56 185

原创 try-catch-finally的使用

try 块: 用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。 catch块: 用于处理 try 捕获到的异常。 finally 块: 无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行。在以下 4 种特殊情况下,finally 块不会被执行:在 finally 语句块第一行发生了异常。 因为在其他行,finally.

2020-09-29 09:15:43 1442

原创 Mysql存储引擎之MyISAM和InnoDB的区别

查看命令查看MySQL提供的所有存储引擎mysql> show engines;查看MySQL提供的所有存储引擎从上图我们可以查看出 MySQL 当前默认的存储引擎是InnoDB,并且在5.7版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。查看MySQL当前默认的存储引擎我们也可以通过下面的命令查看默认的存储引擎。mysql> show variables like '%storage_engine%';查看表的存储引擎sho

2020-09-27 21:56:36 124

转载 Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型擦除 。 更多关于类型擦除的问题,可以查看这篇文章:《Java泛型类型擦除以及类型擦除带来的问题》 。List<Integer> list = new ArrayList<&gt

2020-09-27 10:43:49 862

原创 Java中的集合

Java集合1.Java集合框架概述一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另 一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型数组在存储数据方面的弊端:数组初始化以后,长度就不可变了,不便于扩展数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,

2020-09-27 10:24:18 432

原创 continue、break、和return的区别是什么?

在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:continue :指跳出当前的这一次循环,继续下一次循环。break :指跳出整个循环体,继续执行循环下面的语句。return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:return; :直接使用 return 结束方法执行,用于没有返回值函数的方法return value; :return 一个特定

2020-09-27 09:53:53 251

空空如也

空空如也

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

TA关注的人

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