自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java六大设计原则

子类只能通过新添加方法来扩展功能,父类和子类都可以实例化,而子类继承的方法和父类是一样的,父类调用方法的地方,子类也可以调用同一个继承得来的,逻辑和父类一致的方法,这时用子类对象将父类对象替换掉时,当然逻辑一致,相安无事。2> 如果继承的目的是为了多态,而多态的前提就是子类覆盖并重新定义父类的方法,为了符合LSP,我们应该将父类定义为抽象类,并定义抽象方法,让子类重新定义这些方法,当父类是抽象类时,父类就是不能实例化,所以也不存在可实例化的父类对象在程序里。定义:建立单一接口,不要建立臃肿庞大的接口。

2024-10-21 21:16:26 303 1

原创 java ${}和#{}区别

一、 1 select * from user where name = #{name}; 动态解析为: 1 select * from user where name = ?; 一个 #{ } 被解析为一个参数占位符 ? 。 而${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。 例如,Mapper.xml中如下的 sql: 1 select *

2021-10-28 21:47:28 1294

原创 List.add(index,element)方法

List.add(index,element)方法 index必须在集合已有元素的size之内,如果集合为空(size为0),调用该方法报错。 index有效的话会替换原有元素的位置(原有元素index会靠后一个下标-->index + 1); /** * Inserts the specified element at the specified position in this * list. Shifts the element currently at that position (if.

2020-09-03 17:03:14 4327

原创 为什么要在成员方法里用一个局部变量对象操作全局变量对象

问题:java源码中为什么这么写呢? 直接操作this.items 有什么问题吗,我看很类都是这样写法,方法操作全局变量时,都会重新定义变量使用final修饰 测试过程: 解答:性能上会有优化 如果在成员方法里不用一个新的数组对象指向全局变量时,每次使用全局变量都会去getfield获取全局变量 如果使用一个成员数组对象指向全局变量时只再第一次getfield,后面操作对象只有aload操作 这个成员变量和全局变量加不加final修饰都一样,只要是成员变量指向全局变量时只在第一次getfield,

2020-08-08 11:48:21 602 1

转载 String、StringBuffer与StringBuilder之间区别

String、StringBuffer与StringBuilder之间区别 String StringBuffer StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,...

2020-06-30 19:36:49 167

转载 Java中队列的解析

Java中队列的解析 定义 队列是一种特殊的线性表,遵循的原则就是“先入先出”。在我们日常使用中,经常会用来并发操作数据。在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列通常有两种方式:一种是使用阻塞队列,另一种是使用线程同步锁。 什么是阻塞队列? 假设有一个面包房,里面有一个客人吃面包,一个师傅烤面包。篮子里面最多放2个面包,师傅考完了面包放到篮子里,而客人吃面包则从篮子里面往外拿,为了保证客人吃面包的时候篮子里有面包或者师傅烤面包的时候篮子不会溢出,这时候就需要引用出来阻塞队列的

2020-06-30 19:29:54 205

转载 String StringBuffer StringBuilder区别与联系

String StringBuffer StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 可变类,速度更快 ...

2020-06-28 13:39:29 182

原创 HashMap tableSizeFor()源码解析

tableSizeFor的功能(不考虑大于最大容量的情况)是返回大于输入参数且最近的2的整数次幂的数。比如10,则返回16。如果大于等于最大容量的话返回最大容量。该算法源码如下: static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>>

2020-06-18 09:44:55 211

原创 HashMap put()方法源码解析

HashMap put()方法总结: ①.判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容; ②.根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向⑥,如果table[i]不为空,转向③; ③.判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,这里的相同指的是hashCode以及equals; ④.判断table[i] 是否为treeNode,即table[i] 是否是红

2020-06-17 19:17:43 477 1

转载 java队列

java队列——queue详细分析 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。 Queue的实现 1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQue...

2020-04-16 09:52:15 324

转载 一张图彻底搞懂MySQL的 explain

一张图彻底搞懂MySQL的 explain explain关键字可以模拟MySQL优化器执行SQL语句,可以很好的分析SQL语句或表结构的性能瓶颈。 explain的用途 1. 表的读取顺序如何 2. 数据读取操作有哪些操作类型 3. 哪些索引可以使用 4. 哪些索引被实际使用 5. 表之间是如何引用 6. 每张表有多少行被优化器查询 ...... explain的执行效果 mysq...

2020-03-26 20:41:51 365

转载 StringBuilder和StringBuffer的区别

StringBuilder和StringBuffer的区别在哪里? 当接触这个问题的时候,我们可能第一反应就是,StringBuilder是线程不安全的,StringBuffer是线程安全的 为什么StringBuilder是线程不安全,StringBuffer是线程安全? 针对这个问题,大部分的人可能就无言以对了,我们只知道StringBuilder是线程不安全的,StringBuffer是线...

2020-03-20 14:26:24 292

转载 Spring中的aware接口

Spring中的aware接口 Spring中有很多继承于aware中的接口,这些接口到底是做什么用到的。 awre.png aware,翻译过来是知道的,已感知的,意识到的,所以这些接口从字面意思应该是能感知到所有Aware前面的含义。 先举个BeanNameAware的例子,实现BeanNameAware接口,可以让该Bean感知到自身的BeanName(对应Spring容器...

2020-03-20 10:43:05 119

原创 Java中Cloneable的使用

Java中Cloneable的使用 1. Cloneable的用途 Cloneable是标记型的接口,它们内部都没有方法和属性,实现 Cloneable来表示该对象能被克隆,能使用Object.clone()方法。如果没有实现 Cloneable的类对象调用clone()就会抛出CloneNotSupportedException。 2. 克隆的分类 浅克隆(shallow clone...

2020-03-20 10:37:19 961

转载 Windows下查看进程及结束进程命令

Windows下查看进程及结束进程命令 1)查看占用8080端口的进程号 >netstat –aon | findstr“8080” 结果:TCP0.0.0.0:80800.0.0.0:0LISTENING3500 可知,进程号为3500的进程占用了8080端口 可以使用命令tasklist | finds...

2019-12-06 16:02:30 746

转载 分布式系统进化历史

一个成熟的大型分布式系统,并不是在其开始时,就设计为这样,而是在之后的不断优化,迭代而不断的进化成熟的。 在一个系统刚开始运行时,可能用户数,业务处理等都还比较简单,因此由一台服务器就能支撑起其正常的业务处理。其系统架构模型可能如下所示: 1,单应用架构 其应用服务和数据库服务,都部署在同一台服务器上。此时应用的实现简单,能够快速上线,为用户提供服务。比如很简单的可以使用Tomcat+M...

2019-09-25 17:32:28 216

原创 对SQL语句中case when...then...else...end的理解

SQL利用Case When Then多条件判断 CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 WHEN 条件3 THEN 结果3 WHEN 条件4 THEN 结果4 ......... WHEN 条件N THEN 结果N ELSE 结果X END Case具有两种格式。简单Case函数和Case搜索函数。 ...

2019-08-21 14:41:25 672

原创 Mysql中变量的定义

MySql中的变量定义 根据mysql手册,mysql的变量分为两种:系统变量和用户变量。但是在实际使用中,还会遇到诸如局部变量、会话变量等概念。根据个人感觉,mysql变量大体可以分为四种类型: 一、局部变量。 局部变量一般用在sql语句块中,比如存储过程的begin/end。其作用域仅限于该语句块,在该语句块执行完毕后,局部变量就消失了。 局部变量一般用declare来声明,可以使用d...

2019-08-21 14:39:48 717

原创 Oracle中的SQL分页查询原理和方法详解

版权声明:http://blog.youkuaiyun.com/anxpp https://blog.youkuaiyun.com/anxpp/article/details/51534006 本文分析并介绍Oracle中的分页查找的方法。 Oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号),即使我们使用DESC...

2019-07-26 20:41:22 227

原创 File构造方法总结

File构造方法有3种: File f1 = new File("F:/file/f1.txt");后面直接跟绝对路径,前提是F/flle路径存在,否则会报错; File f2 = new File("F:/file","f2.txt");2个参数,第一个参数写文件路径(可以是前面定义好的,也可以是存在的前面没定义的(C:/));第2个参数为文件名字。 File f3 = new File(Fil...

2019-07-19 15:30:56 3593

原创 Oracle数据库第一范式、第二范式、第三范式区别

第一范式: 一个表中,每个【列的值是不能再分割的】. 例如:我们设计的表中有一个列是:爱好 这个列的值可能会是这样:足球篮球乒乓球 但是这值是可以再分割的:足球、篮球、乒乓球 所以这种设计是不满足第一范式 第二范式: 第二范式是在满足第一范式的基础上 表中的【非主键列都必须依赖...

2019-07-19 15:27:50 1974

原创 list set map归纳总结

Arraylist 和 Linkedlist 都是按顺序存储,可以重复。单列集合 HashSet 存放基本数据类型自动排序,不能存放重复数据,存放引用数据类型是按hashcode方法和equals方法存放(无序,按hashcode方法); LinkedHashSet 存放基本数据类型和引用数据类型时按顺序排序,不能存放重复数据。(是否重复用hashcode方法和equals方法) TreeSe...

2019-07-19 15:08:22 165

空空如也

空空如也

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

TA关注的人

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