自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

十年一梦的博客

记录自己的学习历程

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

原创 HashMap解析

首先hashmap的继承图当链表下方数据过多时,hashmap在1.8改为数组加红黑树进入hashmap的成员变量 private static final long serialVersionUID = 362498820763181265L; /**默认容量,1向左移位4个,00000001变成00010000,也就是2的4...

2019-11-01 22:59:22 316

原创 handler拦截器的介绍与源码

boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;在目标方法前调用,返回boolean,return true.chain.dofilter放行,return false 不放行void postHa...

2019-10-04 16:01:26 351

原创 springMVC视图解析流程

任何方法的返回值都会封装成modelAndViewdispatchSeverlet这一段代码处理返回到页面的请求进入下面方法前在上面处理请求方法后return “xx”已然携带了视图名,自动拼装成../../xx再進入下方進行解析 processDispatchResult(processedRequest, response, mappedHandler, mv, dispat...

2019-10-03 14:36:49 658

原创 DispatcherServlet流程大致解析

dispatchServlet大概流程结构图以下是其方法protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExec...

2019-10-02 19:13:51 522

原创 spring ioc获取bean源码查看

ApplicationContext a=new ClassPathXmlApplicationContext("bean.xml"); Object aa = a.getBean("aa"); System.out.println(aa);进入查看源码三个参数分别对应下面三个this代表调用自己的带参构造函数端点对refres...

2019-10-01 23:54:43 308

原创 java装饰者模式代码

装饰者模式:动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了 开闭原则(ocp)。对于手机,普通手机,智能手机,vivo,彩铃功能。如果其他类都是继承手机类的话,对于可能出现的各种组合需要一直继承下,导致类爆炸,如果又新出现一种新的功能,又要重新组合。导致很复杂,所以出现装饰者模式,对某一项简单的功能层层包装,实现复杂功能,修饰类与被修饰类需要实现同一接口或...

2019-07-29 20:03:47 521

原创 java桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。用手机举例子:手机品牌有vivo 小米手,机有翻盖机折叠机。传统方法时抽象一个手机类,vivo 小米分别继承手机类,翻盖机折叠机分别继承小米,vivo。导致后面的类越来越多,新加一个手机时要新增好多东西。现在创建一个接口brand...

2019-07-28 19:39:44 102

原创 java适配器模式

1、 基本介绍1) 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本 因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper2) 适配器模式属于结构型模式 3) 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 工作原理:1) 适配器模式:将一个类的接口转换成另一种接口.让原本接...

2019-07-27 23:31:57 102

原创 java建造者模式

建造者模式基本介绍:1) 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出 来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。2) 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们, 用户不需要知道内部的具体构建细节。 建造者模式的四个角色 :...

2019-07-22 23:43:09 153

原创 java原型模式

现在要获取一只相同的猫十只,传统模式是直接new 相同的对象new 十次,每次都要传参,总是需要重新初始化对象,而不是动态地获得对象运行时的状态, 不够灵活 。现在用原型模式,继承cloneable接口,直接调用方法进行复制。cat类public class cat implements Cloneable{private String name;private int age;...

2019-07-22 17:42:27 131

原创 java工厂模式

工厂模式可以将大量实现某个共同接口的类实例化,工厂模式可以动态的决定哪个类的实例化,不必事先知道需要实例化哪个类。分为:简单工厂模式,又分为静态方法工厂模式 工厂方法,抽象工厂简单工厂模式:Animal抽象类public abstract class Animal { abstract void bark();}dog cat 类publ...

2019-07-21 20:04:23 102

原创 设计模式七大原则

单一职责原则:一个类只负责一项职责,如果类A负责两个不同的职责,职责1与职责2,当职责1需求变更改变A时,可能造成职责2执行错误,所以将A的粒度分解为A1,A21) 降低类的复杂度,一个类只负责一项职责。 2) 提高类的可读性,可维护性 3) 降低变更引起的风险 4) 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中 方法数量足够少,...

2019-07-19 23:18:59 309

原创 mysql死锁

当出现两条语句当出现事务一第一条语句执行,事务2第二条语句执行第一条时,他们接下来都会等待对方的锁进行释放,从而导致死锁。为了解决这些问题,mysql采取了死锁检测与死锁超时机制。越复杂的系统就越能检索到死锁的循环依赖,比如说innodb引擎,避免了死锁导致查询很慢。还有一种就是锁等待超时的设定放弃锁请求,通常来说不太好。innodb目前的方法将持有最小行级的事务进行回滚。锁的...

2019-07-17 23:05:04 127

原创 关于幻读,可重复读,读已经提交

都是从网上看来,不对之处欢迎批评。幻读意思为读到了别人已经提交的数据,但在RP隔离级别下,因为MVCC版本机制导致一个事务中读的数据都是一样的,所以感觉没有幻读的情况。因为select普通读为快照读,当进行select lock in share mode时则为当前读,会读到别人插入的数据。解决办法用间隙读防止别人插入数据保证数据的一致性。当对主键索引先进行查找时,若没有进行间隙锁,当...

2019-07-16 13:40:23 1816

原创 杂记

mysql可重复读,指的是同一个事务读取的一致,别的事务提交了就不一样了,底层读取的事务艾迪不会自动更新,读已提交则会更新,导致读的不一样。mysql底层hash查找精确查找可以范围查找不行mysql读已提交底层有事务编号,等某事物提交好,编号更新,即可读取脏读:指的是读到了别人还未提交的数据不可重复读:指的是别人已经提交数据,在一次事务中读到的数据不一样。幻读:读到了别人插入的数据。...

2019-07-15 18:46:24 235

原创 mysql子查询与join的区别

两者区别:思想上的区别:子查询理解:①先知道需要查询并将数据拿出来(若from 后的表也是一个子查询结果)。②在去寻找满足判断条件的数据(where,on,having 后的参数等)。而这些查询条件通常是通过子查询获得的。子查询是一种根据结果找条件的倒推的顺序。比较好理解与判断例题中:“人物”在t_emp 表中,所以第一个from 是t_emp 表。(也可以直接将子查询方法 from 后面...

2019-07-14 12:38:23 4433

原创 mysql 锁机制

锁的分类:读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但是管理锁是很耗资源的事情(涉及获取,检查,释放锁等动作),因此数据库系统需要在高并发响应和系统性能两方面进行平衡,这样就产生了“锁粒...

2019-07-14 00:14:53 109

原创 mysql索引结构

BTree索引:【初始化介绍】一颗b树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99...

2019-07-12 17:02:44 139

原创 mysql索引优化(二)

单表优化: CREATE TABLE IF NOT EXISTS `article` (`id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,`author_id` INT(10) UNSIGNED NOT NULL,`category_id` INT(10) UNSIGNED NOT NULL,`views` I...

2019-07-11 23:13:51 186

原创 mysql索引优化(一)

性能下降SQL慢 执行时间长 等待时间长 可能原因:查询数据过多关联了太多的表,太多join没有利用到索引:索引针对列建索引。但并不可能每一列都建索引 索引并非越多越好。当数据更新了,索引会进行调整。也会很消耗性能。 且 mysql 并不会把所有索引都用上,只会根据其算法挑一个索引用。所以建的准很重要。服务器调优及各个参数设置(缓冲、线程数等)索引:MySQL官方对索引的...

2019-07-10 21:02:08 723

原创 mysql两种引擎对比

对比 myisam innodb 主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,只操作一条数据也会锁表,不适合高并发 行锁,操作时只锁某一行,不对其他操作有影响,适合高并发 缓存 只缓存索引不缓存真是数据 缓存索引与真实数据,对内存性能要要求较高,且内存对性能有决定性影响 表空间 小 大 关注...

2019-07-10 12:34:35 231

原创 mysql设置字符集

1 查看字符集show variables like 'character%';show variables like '%char%';看看出现的结果:默认的是客户端和服务器都用了latin1,所以会乱码。2 修改my.cnf在/usr/share/mysql/ 中找到my.cnf的配置文件,拷贝其中的my-huge.cnf 到 /etc/并命名为my.cn...

2019-07-10 10:37:33 142

转载 Redis 主从复制

我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。可以读写分离,容灾恢复。主从库的配置:配从不配主,从库配置:slaveof 主库IP 主库端口四种模式:一主二仆:当slave第一次连到主机时是全量复制,后面主机进行写操作时slave为增量操作。可以从配置文件设定是否只读。主机挂了,从机原地待命。...

2019-07-07 14:20:48 92

翻译 redis 事务

可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。与传统的mysql不一样,mysql是执行了还支持回滚,Redis是将要操作命令放入队列依次执行。可以·一个队列中,一次性、顺序性、排他性的执行一系列命令。multi开启事务,然后挨个输入命令,exec进行执行,discard取消指令。以下为五种情况:1正常执行...

2019-07-07 13:26:23 107

转载 redis aof

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。aof配置文件:①、appendonly:默认值为no,也就是说redis 默认使用的是rdb方式持久化,如果想要开启 AOF 持久化方式,...

2019-07-07 12:38:35 137

翻译 Redis rdb持久化

rdb持久化在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是...

2019-07-07 12:07:57 120

原创 Redis基础

Redis是什么?是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。Redis与其他key-value缓存特点?1.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用2.Redis不...

2019-07-07 11:12:17 129

原创 mysql数据库dml与DDl与TCL语言

1.插入一、方式一语法:insert into 表名(字段名,...) values(值,...);特点:1、要求值的类型和字段的类型要一致或兼容2、字段的个数和顺序不一定与原始表中的字段个数和顺序一致但必须保证值和字段一一对应3、假如表中有可以为null的字段,注意可以通过以下两种方式插入null值①字段和值都省略②字段写上,值使用null4、字段和值的个数必须一致5、...

2019-06-12 23:59:16 212

原创 mysql数据库查询DQL

DB:database存储数据的仓库。DBMS:数据库管理系统SQL:专门与数据库通信的语言对于最大最小的查询可以用limit加排序形成查询日期之后的datadiff(bordate,1999-02-10)>01基础查询一、语法select 查询列表from 表名;二、特点1、查询列表可以是字段、常量、表达式、函数,也可以是多个2、查询结果是一个虚拟表三...

2019-06-11 00:24:40 238

原创 java8新增

堆内存中的永久区取消了。方法区静态常量划分到物理内存中。hashmap底层变为数组加链表加红黑树了lambda表达式 TreeSet<Integer> t=new TreeSet<Integer>((x,y)->x-y); t.add(1); t.add(31); t.add...

2019-06-05 23:29:10 608

原创 java反射与类加载

//final修饰的常量变为宏常量。在下面进行编译时会自动进行替换成他的值,即使静态的代码块也不会执行,下面初始化不会打印出来class test{ static{ System.out.println("初始化"); } static final String str="java疯狂讲义";}class test1{ public static void main(Strin...

2019-06-04 23:39:04 382

原创 java网络编程

TCP传数据class server { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(44444); Socket accept = serverSocket.accept();//阻塞式 InputStream in...

2019-06-04 00:11:58 126

原创 java nio

io:面向流。阻塞式IO,将他的输入输出看成水流NIO:面向缓冲区,非阻塞式,将他的通道看成铁路,缓冲区拿数据,底层是数组package test;import java.nio.ByteBuffer;//缓冲区,除了boolean类型都有对象的缓冲区//如bytebuffer//通过allocate分配缓冲区的大小//通过put或者get存放数据//caoacity:容...

2019-06-02 20:29:14 199

原创 java多线程

实现多线程的方式:使用一个类继承Thread使类成为一个线程类 实现runnable接口重写run方法,将实现类的子类当target传入Thread(数据是可以共享的)(实现类可以继承)线程的创建方式比较熟悉的是通过集成Runnable接口或者集成Thread类来实现,但是这两种方法都在线程执行完成后无法获取到执行结果,如果想...

2019-06-01 00:05:58 119

原创 java集合

hashset :不同步的,插入与读取顺序不一样,集合元素值可以为null,当hashset中存取元素时,会调用对象的hashcode方法得到对象的hashcode值,然后根据值查找元素,如果两个元素通过equals方法返回true但他们的hashcode方法不同也可以添加成功,所以hashset判断两个对象的标准是通过equals方法比较相等,并且两个对象的hashcode值也相等。再添加新类时...

2019-05-28 00:07:35 124

原创 hashset性能分析

hash表可以存储元素位置为桶,通常一个桶只有一个元素,hash算法在计算时出现hash冲突时会在一个桶下装两个以上的元素。hashmap与hashset包含如下属性:容量:hash桶中的数量。初始化容量:创建表时桶的数量。尺寸:(size)hash中记录的数量负载因子:负载因子等于size/capacity 。负载因子为0表示空表。hash表中有个负载极限,负载极限是0-...

2019-05-27 19:58:16 1342

原创 java对象与垃圾回收

GC垃圾回收机制在CPU空闲或内存不足时自动进行垃圾回收,程序员无法控制回收的时间与顺序。缺点事影响开销性能,Java虚拟机必须跟踪哪些是有用的对象或者无用的对象。只能回收内存资源,io 数据库资源不能回收。为了更快让垃圾回收机制回收那些对象,可以将引用变量设置为NULL,暗示垃圾回收器回收。垃圾回收是不可预知性的,即使system.gc是建议回收。垃圾回收精确性包括两个方面:1.精确的标记着活的...

2019-05-27 00:17:19 400

原创 java单例模式

1.懒汉式(单线程不安全)class singleton{ private static singleton st; private void singleton() { } public static singleton getSingleton(){ if(st==null){ st=new singleton(); } return st; }2多线程保...

2019-05-25 23:18:11 106

原创 java内部类

class inner{ private int num=10; private class outer{//在成员位置为成员内部类,一般为私有不允许访问用static修饰是为了方便访问 public void show(){ System.out.println(num);//内部类可以访问私有变量 } } pub...

2019-05-25 18:38:02 86

原创 Java基础知识——来源Java书籍

GC垃圾回收机制在CPU空闲或内存不足时自动进行垃圾回收,程序员无法控制回收的时间与顺序。缺点事影响开销性能,Java虚拟机必须跟踪哪些是有用的对象或者无用的对象。只能回收内存资源,io 数据库资源不能回收。为了更快让垃圾回收机制回收那些对象,可以将引用变量设置为NULL,暗示垃圾回收器回收。垃圾回收是不可预知性的,即使system.gc是建议回收。垃圾回收精确性包括两个方面:1.精确的标记...

2019-05-25 00:52:11 272

空空如也

空空如也

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

TA关注的人

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