自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YellowStar的博客

每天学习一点点,每天提升一点点

  • 博客(137)
  • 资源 (3)
  • 收藏
  • 关注

原创 java集合 -- (6)关于集合的ConcurrentModificationException 异常

一、关于集合中ConcurrentModificationException异常研究过java集合的人应该经常在集合源码中见到下面这段代码:if (modCount != expectedModCount) throw new ConcurrentModificationException();那么为什么会进行这样的处理呢?还有在什么情况下会触发这个异...

2018-11-19 17:15:36 393

原创 java集合 -- (5)集合 Map

前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍Map接口下的两个重要的集合实现类HashMap,TreeMap。关于Map的一些通用介绍,可以参考第一篇文章。由于Map与List、Set集合的某些特性有重合,因此观看本篇文章的会参考到之前的一些内容。如果已经有这方面的基础,那么对Map的学习将会事半功倍。HashMapHashMap 是一个散列表,它存储的内容是...

2018-11-16 17:36:53 372

原创 java集合 -- (4)集合 Queue

今天我们来介绍下集合Queue中的几个重要的实现类。关于集合Queue中的内容就比较少了。主要是针对队列这种数据结构的使用来介绍Queue中的实现类。Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。这种结构就如同我们生活中的排队一样。...

2018-11-16 16:30:20 329

原创 java集合 -- (3)集合 List

第一篇文章中介绍了List集合的一些通用知识。本篇文章将集中介绍了List集合相比Collection接口增加的一些重要功能以及List集合的两个重要子类ArrayList及LinkedList。一、List集合关于List集合的介绍及方法,可以参考第一篇文章。List集合判断元素相等的标准List判断两个对象相等只要通过equals()方法比较返回true即可(关于equal...

2018-11-16 15:51:32 322

原创 java集合 -- (2)集合 Set

上一篇文章介绍了Set集合的通用知识。Set集合中包含了三个比较重要的实现类:HashSet、TreeSet和EnumSet。本篇文章将重点介绍这三个类。一、HashSet类HashSet简介HashSet是Set接口的典型实现,实现了Set接口中的所有方法,并没有添加额外的方法,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素。因此具有...

2018-11-15 15:52:57 254

原创 java集合 -- (1)集合框架 Collection、Map

本篇文章主要对java集合的框架进行介绍,使大家对java集合的整体框架有个了解。具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set,List,Queue。Java集合类简介:Java集合大致可以分为Set、List、Queue和Map四种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合,...

2018-11-15 15:39:57 245

转载 数据结构与算法系列

转载:http://www.cnblogs.com/skywang12345/p/3603935.html

2018-11-15 15:19:54 162

原创 JUC学习笔记 -- (12) Semaphore的用法

在并发编程中,Semaphore也是常用的一个辅助类。Semaphore翻译成字面意思为 信号量,Semaphore可以控制同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。  Semaphore类位于java.util.concurrent包下,它提供了2个构造器://参数permits表示许可数目,即同时可以允许多少...

2018-11-12 16:35:34 166

原创 JUC学习笔记 -- (11) CyclicBarrier介绍及其与CountDownLatch的区别

CyclicBarrier是多线程中一个常用的辅助类,主要用于线程组内部之间的线程的相互等待问题。 CyclicBarrier根据英文拆分翻译可翻译为:可循环利用的屏障。顾名思义,首先,便是可重复利用,说明该类创建的对象可以复用;其次,屏障则体现了该类的原理:每个线程执行时,都会碰到一个屏障,直到所有线程执行结束,然后屏障便会打开,使所有线程继续往下执行。大致功效可以理解为:等待集合继续执行。...

2018-11-12 16:15:19 361

原创 JUC学习笔记 -- (10) 线程池

为什么用线程池 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3>T2,那么是不是说开启一个线程来执行这个任务太不划算了! 正好,线程池缓存线程,可用已有的闲置线程来执行新任务,避免了T1+T3带来的系统开销 线程并发数量过多,抢...

2018-10-25 16:52:38 308

原创 JUC学习笔记 -- (9) ReadWriteLock读写锁的使用

  说到Java并发编程,很多开发第一个想到同时也是经常常用的肯定是Synchronized,但是Synchronized存在明显的一个性能问题就是读与读之间互斥,简言之就是,我们编程想要实现的最好效果是,可以做到读和读互不影响,读和写互斥,写和写互斥,提高读写的效率,这就要用到本章的重点ReadWriteLock读写锁。之前文章已经介绍了Lock的一种实现ReentrantLock的使用,其...

2018-10-24 19:33:54 690

原创 Cannot refer to a non-final variable xx inside an inner class defined in a different method的原因

今天遇到一个小问题,下面是网上摘抄的解释:为了说明这个问题,先得明白说明是局部内部类,局部内部类就是在外部类的方法中定义的类。那么标题中的错误指的是,内部类不能引用该方法中非 final 修饰的变量。那么为什么呢?因为生命周期的原因。方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象。首先,内部类和外部类其实是处于同一个级别,内部类不会因为定义在...

2018-10-24 17:27:22 1099

原创 JUC学习笔记 -- (8) 多线程并发之生产者消费者模式的两种实现

生产者消费者模式是并发、多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据。 真实世界中的生产者消费者模式生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系。比如一个人正在准备食物(生产者),而另一个人正在吃(消费者),他们使用一个共用的桌子用于放置盘子和取走盘子,生产者准备食物,如果桌子上已经满...

2018-10-23 17:49:17 397

原创 JUC学习笔记 -- (7) Condition-线程通信

关于线程通信,使用synchronized时使用wait、notify和notifyAll来实行线程通信。而使用Lock如何处理线程通信呢?答案就是本片的主角:Condition.Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-s...

2018-10-23 17:14:26 191

原创 JUC学习笔记 -- (6) Lock锁初探

首先我们来回忆一下上一节讲过的synchronized关键字,该关键字用于给代码段或方法加锁,使得某一时刻它修饰的方法或代码段只能被一个线程访问。那么试想,当我们遇到这样的情况:当synchronized修饰的方法或代码段因为某种原因(IO异常或是sleep方法)被阻塞了,但是锁有没有被释放,那么其他线程除了等待以外什么事都做不了。当我们遇到这种情况该怎么办呢?我们今天讲到的Lock锁将有机会为此...

2018-10-22 12:05:06 2937

原创 JUC学习笔记 -- (5) 线程创建的第三种方式Callable

创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从Java 1.5开始,就产生了第三种方式:实现Callable接口的方式,可以获取到线程执行的返回值。Callable和Future介绍...

2018-10-22 11:44:37 169

原创 JUC学习笔记 -- (4) CountDownLatch闭锁

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。CountDownLatch类只提供了一个构造器:public CountDownLatch(int count) { }; //参数count为计数值...

2018-10-22 11:22:50 159

原创 JUC学习笔记 -- (3)同步容器类和并发容器类

一、同步容器类包括Vector(实现了一个动态数组,和ArrayList相似,但两者是不同的)和Hashtable。同步容器类的问题:例如:Vector的getLast方法,和deleteLast方法,都会执行“先检查,后执行”操作,每个方法首先都获得数组的大小,然后通过结果来获取或删除最后一个元素。如果线程A调用getLast,线程B调用deleteLast,在线程A调用size和g...

2018-10-22 10:55:24 188

原创 JUC学习笔记 -- (2)并发编程的3个概念 ,原子性,可见性,有序性!

并发编程中的三条性质:原子性,可见性,有序性1.原子性原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。即整体不可分割。在Java中,对基本数据类型(例外就是long和double的非原子协定)的变量的读取和赋值操作是原子性操作。X=10;  //原子性(简单的读取、将数字赋值给变量)Y = x;  //变量之间的相互赋值,不是原子操...

2018-10-21 12:22:38 321

原创 JUC学习笔记 -- (1)Volatile和内存可见性

一、内存可见性可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到。共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。Java内存模型(JMM)Java内存模型(Java Memory Model)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层细节。所有的线...

2018-10-19 17:03:52 335

原创 Java堆溢出产生原因和排查工具MAT的使用

Java堆溢出(OOM for Heap)Java虚拟机内存模型中堆用于存储对象实例,当GC Roots到创建的对象之间有可达路径时,就可以避免垃圾回收机制回收这些对象,那么只要不断地创建这样的对象,当数量到堆的容量限制后就会产生堆内存溢出异常(OOM for Heap)。获取Heap Dump文件Heap Dump 是一个 Java 进程在某个时间点上的内存快照。 Heap Dump...

2018-10-13 17:55:33 2462

原创 I/O - 理解Java中字符流与字节流的区别

1. 什么是流Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流;能够向其写入一个字节序列的对象被称为输出流。2. 字节流Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是In...

2018-09-09 10:55:49 1397

原创 mybatis学习笔记(12):Mybatis批量Insert

Mybatis提供两种方式进行批量插入操作1. 使用foreach标签foreach主要用在构建in条件中,它可以在SQL语句中迭代一个集合。 foreach元素的属性主要有: item,index,collection,open,separator,close。 item表示集合中每一个元素进行迭代时的别名 index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置 ...

2018-07-05 16:24:14 19345

原创 mybatis学习笔记(11):Mybatis分页插件 -- PageHelper

PageHelper一款非常好用的mybatis分页插件。国内牛人的一个开源项目,有兴趣的可以去看源码,都有中文注释。使用起来也非常简单,下面就介绍以下插件的引入和基本常用的使用方法。1. 引入分页插件1).引入 Jar 包 你可以从下面的地址中下载最新版本的 jar 包https://oss.sonatype.org/content/repositories/release...

2018-07-05 15:03:16 526

原创 mybatis学习笔记(10): mybatis逆向工程

什么是逆向工程MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包括mapper.xml、mapper.java、po..)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。使用逆向工程使用MyBatis的逆向工程,需要导入逆向工程的j...

2018-07-04 11:46:55 541

原创 mybatis学习笔记(10): spring整合mybatis

添加依赖:<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope&

2018-07-04 10:31:38 496

原创 mybatis学习笔记(9):缓存

mybatis本身提供了两级缓存机制: 一级缓存 二级缓存 还可以自定义缓存:整合第三方缓存一级缓存一级缓存:又叫本地缓存,默认开启的sqlSession级别的缓存。 对于据库同一次会话期间查询到的数据会放在本地缓存中,以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库; 这个本地缓存是sqlSession级别的一个Map。一级缓存失效情况: 1、sqlS...

2018-07-03 11:16:32 435

原创 mybatis学习笔记(8):动态sql

MyBatis 的强大特性之一便是它的动态 SQL。 动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。我们以 tbl_employee表为例来说明: ...

2018-07-02 17:17:28 586

原创 mybatis学习笔记(7):一对多关联查询

一对多或多对多对于后面的多方使用<collection>标签封装关联数据 准备工作 创建两个表: tbl_employee:员工表,使用dept_id和部门表的id关联 tbl_department:部门表 创建两个实体类: Employee.java:public class Employee { private Integer id; ...

2018-07-01 16:10:59 591

原创 mybatis学习笔记(6):一对一关联查询

在mybatis中,对于一对一、多对一都可以使用<association>标签关联一方。 准备工作,创建两个表: tbl_employee:员工表,使用dept_id关联部门表 tbl_department: 创建两个实体类: Employee.java:public class Employee { private Integer id; pr...

2018-07-01 12:16:09 26115 3

转载 mybatis 配置文件settings属性配置

设置参数描述有效值默认值cacheEnabled该配置影响的所有映射器中配置的缓存的全局开关true | falsetruelazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态true | falsefalseaggressiveLazyLoading当启用时,对任意延迟属性的调用会使带有延...

2018-07-01 10:58:47 1163

原创 mybatis学习笔记(5):Mapper XML中参数接收#{}和${}的区别

 动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别:select * from user where name = #{na...

2018-06-30 16:58:39 2862

原创 mybatis学习笔记(4):执行insert语句的id的返回

1. 自增id的返回方法一: 在SQL 映射文件的select标签中添加useGeneratedKeys="true"属性与keyProperty=" "属性,keyProperty的值表示的是将获取到的自增主键值赋给JavaBean 中的某个字段。<insert id="addEmp" parameterType="com.mybatis.domai

2018-06-30 16:03:34 7716

原创 mybatis学习笔记(3):mybatis参数传递

1. 单个参数的传递方式例如: Employee.java:public Good getEmpById(Integer id);EmployeeMapper.xml :<select id="getEmpById" resultType="com.mybatis.domian.Employee"> select * from tbl_employee wh...

2018-06-30 15:33:56 603

原创 mybatis学习笔记(2):conf文件配置项

在配置文件中配置项必须按一定的顺序配置,否则会报错,顺序如下: propertiessettingstypeAliasestypeHandlersobjectFactoryobjectWrapperFactorypluginsenvironmentsdatabaseIdProvidermappersproperties<properties>元...

2018-06-30 14:53:54 593

原创 mybatis学习笔记(1):环境搭建与CRUD操作

1. 添加依赖<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version></dependency>&lt

2018-06-29 17:26:02 696

原创 Mysql学习笔记(12):常用日期时间运算

今天select * from 表名 where to_days(时间字段名) = to_days(now());昨天SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) = 1近7天SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)...

2018-06-14 16:22:06 3008

原创 Mysql学习笔记(11):流程控制结构

流程控制结构:顺序 :从上往下顺序执行分支:根据条件判断执行相应的语句循环:重复执行循环体一、分支结构1. if函数语法:if(条件,值1,值2)功能:实现双分支。如果条件满足则返回值1,否则返回值2应用范围:在begin end中或外面应用举例:SELECT IF(a>b,'a大','b大') from xx;----------2. case结构case结构有很多种2.1 作为表达式 #...

2018-06-13 17:18:26 629

原创 Mysql学习笔记(10):函数

含义:一组预先编译好的SQL语句的集合,可以理解成批处理语句作用:提高代码的重用性简化操作减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率和存储过程的区别:存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新函数:有且仅有1 个返回,适合做处理数据后返回一个结果一、函数的语法1. 创建DELIMITER $CREATE FUNCTION 函数名(参数列表) RETUR...

2018-06-13 15:39:16 530

原创 Mysql学习笔记(9):存储过程

存储过程和函数:类似于java中的方法好处:1、提高代码的重用性2、简化操作存储过程含义:一组预先编译好的SQL语句的集合,理解成批处理语句1、提高代码的重用性2、简化操作3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率一、存储过程语法1. 存储过程的创建语法:----->CREATE PROCEDURE 存储过程名(参数列表)BEGIN    存储过程体(一组合法的SQL语...

2018-06-12 17:26:29 749

mybatis逆向工程

一个完整的mybatis逆向工程,只需要修改下配置文件中的数据库相关配置就可以直接使用了。3积分你买不了吃亏你买不了上当。。。

2018-07-04

使用spring环境常用jar

使用spring环境常用jar,包括IOC、AOP、事务、C3P0连接池,jUnit单元测试、mysql驱动包等

2018-05-16

springsource-tool-suite-3.7.0.RELEASE-e4.5-updatesite.zip

spring插件springsource-tool-suite-3.7.0.RELEASE-e4.5-updatesite.zip

2018-05-16

空空如也

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

TA关注的人

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