自定义博客皮肤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)
  • 收藏
  • 关注

原创 equal、hashcode、==

1、==java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型byte,short,char,int,long,float,double,boolean   他们之间 的比较,应用双等号(==),比较的是他们的值。 2.引用类型(类、接口、数组)   当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的...

2019-02-25 22:29:51 272

原创 Java集合:ArrayList和LinkedList区别?

ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 Arra...

2019-02-25 19:04:47 339

原创 多线程:AQS的一些心得

AQS作为JUC并发组件实现的核心。全称是AbstructQueuedSynchronizer,也就是同步队列器。其内部实现主要的是一个state状态标识和基于FIFO一个同步队列。这个状态标识表明当前的资源是否是可以争取的,当state=0是,表示资源没有加锁;当state>0时,表示资源加锁。关于这个队列,有几个属性:1)队列是基于双向链表的,因此具有定制的节点结构...

2019-02-25 16:04:54 315

原创 多线程:AQS源码分析

AQS 源码分析 概述Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制),但是它却缺少了获取锁与释放锁的可操作性,可中断、超时获取锁,且它为...

2019-02-25 13:39:54 188

原创 Java面向对象基础整理

面向过程与面向对象的区别:面向对象,将跟对象有关的功能都封装在其内面向对象三大特征:封装,继承,多态找对象,创建对象,使用对象,并维护对象之间的关系类:对现实中事物的描述对象:就是实实在在 存在的事物映射到java中,描述就是class定义的类具体对象就是对应java在堆内存中new建立的实体类与对象:设计图纸就是类,里面包含对象的描述:比如说车的颜色,轮胎...

2019-02-24 20:22:36 132

原创 Java基础看这一篇就够了

一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。java语言是跨平台,jvm不是跨平台的。JRE(Java Runtime Environment):java的运行环境,包括jvm+java的核心类库。JDK(Java Development Kit):java的开发工具,包括jre+开发...

2019-02-24 20:20:51 400

原创 MYSQL:MYSQL索引为什么选择B+树?

带有顺序访问指针的B+Tree一般在数据库系统或文件系统中使用的B+Tree结构都在经典B+Tree的基础上进行了优化,增加了顺序访问指针。图4如图4所示,在B+Tree的每个叶子节点增加一个指向相邻叶子节点的指针,就形成了带有顺序访问指针的B+Tree。做这个优化的目的是为了提高区间访问的性能,例如图4中如果要查询key为从18到49的所有数据记录,当找到18后,只需顺着节点和指...

2019-02-24 17:35:27 1021 2

原创 B树和B+树的不同

多路查找树:和之前学习的二叉树不同的是,多路树的每一个节点的孩子数可以多于两个!同时每个孩子节点可以存储多个元素。多路查找树有4种特殊形式:2-3树、2-3-4树、B树、B+树2-3树每个节点都具有2个孩子(称之为2节点)或者3个孩子(称之为3节点)。一个2节点包含一个元素和两个孩子(或没有孩子)。一个3节点包含两个元素和三...

2019-02-24 17:09:47 248

原创 二叉搜索树(BST)?平衡二叉树(AVL)?

二叉搜索树:中序遍历序列是有序的。二叉查找树,也称有序二叉树,是指一棵空树或者具有以下性质的二叉树:左子节点的值比父节点小 右子节点的值比父节点大 任意节点的左右字树也分别为二叉查找树 没有键值相等的点  在理想情况下,二叉查找树增删改查的时间复杂度为O(logN);二叉搜索树的查找使用递归!如果key小于当前节点,向当前节点的左子树往下进行递归查找!如果key大于当...

2019-02-24 15:40:03 233

原创 数据库:数据库的连接池原理及实现

对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用...

2019-02-21 23:47:12 7378

原创 数据库:数据库水平切分?垂直切分?整合方案?可能存在的问题?

前言通过MySQLReplication功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术。不但要切开分到不同的DB,还要尽量减少各个DB之间的关联何谓数据切分可能很多读者朋友在网上或者杂志上面都已经多次见...

2019-02-21 23:44:02 1751

原创 数据库:B+树索引和Hash索引得区别

导读在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议。二者区别备注:先说下, 在MySQL文档里,实际上是把B+树索引写成了BTREE ,例如像下面这样的写法:CREATE TABLE t(aid int unsigned not null auto_increment,userid int unsigned ...

2019-02-21 22:35:07 908

原创 数据库:MySQL索引总结

20多条数据源随机生成200万条数据,平均每条数据源都重复大概10万次,表结构比较简单,仅包含一个自增ID,一个char类型,一个text类型和一个int类型,单表2G大小,使用MyIASM引擎。开始测试未添加任何索引。执行下面的SQL语句:mysql> SELECT id,FROM_UNIXTIME(time) FROM article WHERE a.title='测试标题'...

2019-02-21 21:16:01 142

原创 Java集合:ConcurrentHashMap(JDK 1.7 & JDK 1.8)

ConcurrentHashMap(JDK 1.7) HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,...

2019-02-21 17:38:51 566

原创 Java集合:HashMap线程不安全?有哪些表现?

HashMap是线程不安全的!主要表现在多线程情况下:1)hash冲突时,put方法不是同步的,先存的值会被后存的值覆盖。(1.7和1.8都有的表现)2)在resize的时候,可能会导致死循环(环形链表)(仅1.7会有的表现,因为其头插法导致)让我们先来了解一下HashMap的底层存储结构,HashMap底层是一个Entry数组,一旦发生Hash冲突的的时候,HashMap采用拉链法解...

2019-02-21 15:49:06 1470

原创 Java集合:JDK7与JDK8中HashMap的实现

JDK7中的HashMapHashMap底层维护一个数组,数组中的每一项都是一个Entrytransient Entry<K,V>[] table;我们向 HashMap 中所放置的对象实际上是存储在该数组当中; 而Map中的key,value则以Entry的形式存放在数组中static class Entry<K,V> implements Map...

2019-02-21 13:32:03 171

原创 JVM:四种引用总结

在JVM的GC中,我们使用引用计数器算法和可达性分析算法来确定一个对象是否gg了!这里都提到了引用!什么是引用?其实引用就是一个内存地址,它保存着另一个对象在内存中的起始地址!由于引用只有 被引用、没有被引用 两种状态!那么有一类现象:内存空间足够的时候,我们希望引用的对象能够保存,内存紧张的时候,可以抛弃这些对象!这个怎么搞????(软引用)因此扩充引用概念!将引用分...

2019-02-19 20:55:41 188

原创 JVM:7种垃圾回收器总结

这里讨论的收集器基于JDK1.7Update 14之后的HotSpot虚拟机,这个虚拟机包含的所有收集器如下图3-5所示: 上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。所谓垃圾收集器在准确完整回收垃圾对象内存的基础上,所追求的目标是1)缩短Stop-The-World 的停顿时间2)尽可能使得垃圾收集线程和用户线程同时并发执行!!!...

2019-02-19 20:23:38 254

原创 JVM:-Xmx和-Xms应该维持什么样的比例?

-Xmx和-Xms应该维持什么样的比例?首先并不是虚拟机内存越大就越好,大概原因是因为:内存越大,JVM 进行 Full GC 所需的时间越久,由于 Full GC 时 stop whole world 特性,如果是用于响应HTTP 请求的服务器,这个时候就表现为停止响应,对于需要低延迟的应用来说,这是不可接受的。对于需要高吞吐量的应用来说,可以不在乎这种停顿,比如一些后台的应用之类的,那么内...

2019-02-19 16:01:04 4082

原创 JVM:堆中对象的创建?定位?可达性?

对象的创建指针碰撞:若是堆中的内存是绝对规整的,所有用过的内存放在一边,空闲的放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离。指针碰撞要求堆中所采用的GC搜集器是带有“压缩整理”功能的!空闲列表:与指针碰撞相反,堆的内存空间是无序的,已使用内存和空闲内存交错,那便要使用一个空闲列表来记录堆中空闲内存的情况!根...

2019-02-18 23:38:38 278

原创 JVM:JVM内存划分、主内存、工作内存

java内存模型中的主内存只是JVM内存的一部分。每条线程拥有自己的工作内存。线程的工作内存中保存了该线程使用到的变量的主内存中的副本拷贝。java内存模型中的主内存、工作内存与之前JVM内存分布不是一个层次上的内存划分,这两者基本上是没有关系的。如果非要勉强对应,那从变量、主内存、工作内存的定义来看,主内存主要是对应于Java堆中的对象实例部分。工作内存则对应于虚拟机栈中的部分区域。...

2019-02-18 23:14:56 917

原创 多线程:happens-before 先行发生原则

下面就来具体介绍下happens-before原则(先行发生原则):这8条规则中,前4条规则是比较重要的,后4条规则都是显而易见的。  下面我们来解释一下前4条规则:  对于程序次序规则来说,我的理解就是一段程序代码的执行在单个线程中看起来是有序的。注意,虽然这条规则中提到“书写在前面的操作先行发生于书写在后面的操作”,这个应该是程序看起来执行的顺序是按照代码顺序执行的,因为虚拟机...

2019-02-18 22:54:27 231

原创 二分查找算法总结

二分查找有N多种写法,有各种各样的形式,选一种合适自己,自己能够理解记住的才是最好的。对于最最最原始的二分查找,即给出一个Key,查找出key值的索引号。 最经典的二分查找对返回来的索引号没有任何要求,只要其对应的值是Key就可以了!!!!使用二分查找算法的序列必须是有序序列核心代码:int binarySearch(int a[],int key,int left,int ri...

2019-02-18 20:07:08 255

原创 Java集合:HashMap

各种Map总结 就比如问你HashMap 是不是有序的?你回答不是有序的。 那面试官就会可能继续问你,有没有有序的Map实现类呢?你如果这个时候说不知道的话,那这块问题就到此结束了。如果你说有 TreeMap 和 LinkedHashMap。 那么面试官接下来就可能会问你,TreeMap 和 LinkedHashMap 是如何保证它的顺序的?如果你回答不上来,那么到...

2019-02-18 17:52:33 256

原创 Java中 String的反转

先将String转化为char数组String s = "www.runoob.com";char [] c = s.toCharArray();然后自定义反转函数:  //完成翻转功能    private void reverse(char[] c,int begin,int end){    while(begin<end){        char tem...

2019-02-18 17:42:00 651

原创 Collections.sort()自定义排序方式

Java中Collections.sort()的使用!在日常开发中,很多时候都需要对一些数据进行排序的操作。然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中。他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是 可比较的。怎么让一个对象是 可比较的,那就需要该对象实现 Comparable<T> 接口啦...

2019-02-17 23:23:23 5169

原创 ArrayList:获取最大元素?获取最大元素索引?

ArrayList<Integer> list = new Arraylist<Integer>();ArrayList获取最大元素?int maxElement = Collections.max(list);ArrayList获取最大元素索引?//此处注意,当list为空时,会抛出空指针异常,因此需要先进行list是否为空的判断int indexOf...

2019-02-17 22:29:48 12925

原创 框架:Spring之Aware相关接口

一、Aware相关接口对于应用程序来说,应该尽量减少对Sping Api的耦合程度,然而有些时候为了运用Spring所提供的一些功能,有必要让Bean了解Spring容器对其进行管理的细节信息,如让Bean知道在容器中是以那个名称被管理的,或者让Bean知道BeanFactory或者ApplicationContext的存在,也就是产让该Bean可以取得BeanFactory或者Applica...

2019-02-17 21:22:12 178

原创 使用redis实现异步消息队列

 实现InitializingBean、AppalicationContextAware 接口.在Spring加载EventConsumer类并且实例化之后,调用此方法,初始化config属性

2019-02-17 21:18:09 224

原创 排序算法稳定性分析

分析一下常见的排序算法的稳定性,每个都给出简单的理由。 冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。 ...

2019-02-17 13:05:24 149

原创 排序算法总结

排序算法稳定性的定义?假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。1.1冒泡排序的思想对相邻的元素进行两两比较,顺序相反则进行交换。这样每一趟将最小或最大的元素浮到顶端。最终达到完全有序。冒泡排序一般是将...

2019-02-16 23:16:00 549

原创 java集合:LinkedList

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。LinkedList类是双向链表,单向队列,双向队列,栈的实现类: LinkedList类实现单向队列和双向队列的接口,自身提高了栈操作的方法,链表操作的方法.在LinkedList类中存在很多方法...

2019-02-16 16:50:51 179

原创 Java集合:数组的使用

Java中对Array数组的常用操作目录:声明数组; 初始化数组; 查看数组长度; 遍历数组; int数组转成string数组; 从array中创建arraylist; 数组中是否包含某一个值; 将数组转成set集合; 将数组转成list集合; Arrays.fill()填充数组; 数组排序; 复制数组; 比较两个数组; 去重复; 查询数组中的最大值和最小值;...

2019-02-16 16:15:04 99

原创 java集合:ArrayList

一、ArrayList的遍历方式ArrayList是List接口的实现类。ArrayList的遍历方式较多主要有通过下标遍历和叠加器遍历。如下List<String> list = new ArrayList<String>();        list.add("a");        list.add("b");        //方法1        ...

2019-02-16 15:16:08 171

原创 Java:四种取整的方法

java 中取整操作提供了四种方法:分别是: public static double ceil(double a)//向上取整      第一种:ceil是天花板的意思,表示向上取整。   测试: System.out.println(Math.ceil(1.01));System.out.println(Math.ceil(-1.01))...

2019-02-07 08:58:30 3220

原创 框架:Hibernate和Mybatis的区别

Mybatis和hibernate不同,Mybatis不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活...

2019-02-04 23:15:11 307

原创 框架:mybatis的缓存机制

一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),...

2019-02-04 22:59:18 158

原创 框架:Mybatis中使用sql几种特殊情况

1   动态sql1.1  什么是动态sqlmybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装(上一篇讲解的常用的标签)。1.2  需求用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。1.3  mapper.xml1.4  测...

2019-02-04 22:49:14 190

原创 框架:mybatis常用标签(refid、foreach、trim)

1、mybatis中refid是什么意思1、首先定义一个sql标签,一定要定义唯一id<sql id="Base_Column_List" >name,age</sql>2、然后通过id引用<select id="selectAll">select <include refid="Base_Column_List" />

2019-02-04 22:28:17 1857

原创 框架:Mybatis开发规范及输入输出映射配置时注意事件

程序员需要编写mapper.xml映射文件程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。1.开发规范:1、在mapper.xml中namespace等于mapper接口地址2、mapper.java接口中的方法名和mapper.xml中statement的id一致 3、mapper.java接口中的方法输入参数类型...

2019-02-04 22:06:09 203

空空如也

空空如也

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

TA关注的人

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