自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘剑峰的博客

一起交流技术,谦虚学习

  • 博客(251)
  • 资源 (4)
  • 收藏
  • 关注

原创 Effective Java 总结

前言读完了Effective Java,对这本书总结一下,结合自己在实际中的使用,这里只记录部分我觉得重点的点,顺便加上自己平时注意到的点一、对象创建和销毁1:考虑用静态工厂方法替换构造器静态工厂方法的惯用名称:valueOf——该方法返回的实例与它的参数具有相同的值,实际上是类型转换方法; getInstance——返回的实例是通过方法的参数来描述的,对于单例模式(Singleton)来说,该方

2017-03-12 21:15:32 9813 3

转载 一分钟掌握数据库垂直拆分

一、缘起当数据库的数据量非常大时,水平切分和垂直拆分是两种常见的降低数据库大小,提升性能的方法。假设有用户表:user(uid bigint,name varchar(16),pass varchar(16),age int,sex tinyint,flag tinyint,sign varchar(64),intro

2017-03-11 19:19:53 375

原创 MySQL性能优化

一、MySQL优化前言为什么要优化? MSYQL是基于文件的,因此当打开文件数达到一定限制,就会进行导致频繁的IO操作,这是属于系统配置可以从哪些方面着手优化?如何发现有问题可优化的SQL? 当我们打开慢查日志文件,就可以看到我们的SQL语句的具体信息,例如: 每一项的含义: 但是如果慢查日志SQL很多的时候,直接看日志文件就很吃力,因此可以通过工具来分析:例如mysqldumpslow

2017-03-11 18:55:21 469

转载 MYSQL性能优化的最佳20+条经验

1. 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的

2017-03-11 11:14:05 593

原创 探析Spring AOP(三):Spring AOP的底层实现原理

一、前言  前面第一篇我们讲到了AOP的概念和使用,第二篇也讲到了 AOP的实现机制,在第一篇,讲到了joinpoint,pointcut,aspect,weave等AOP的核心概念,接下来我们详解分析他们的实现原理!   在动态代理 和 CGLIB 的支持下, Spring AOP 框架的实现经过了两代。从 Spring AOP 框架第一次发布,到 Spring 2.0 发布之前的 AOP 实现

2017-03-10 21:07:47 26061 1

原创 探析Spring AOP(二):Spring AOP的实现机制

Spring AOP 属于第二代 AOP, 采用动态代理机制和字节码生成技术实现 。   与最初的 AspectJ 采用编译器将横切逻辑织入目标对象不同,动态代理机制和字节码生成都是在运行期间为目标对象生成一个代理对象,而将横切逻辑织入到这个代理对象中,系统最终使用的是织入了横切逻辑的代理对象,而不是真正的目标对象。 一、动态代理  我们可以为指定的接口在系统运行期间动态的生成代理对象, 从而帮助

2017-03-10 19:58:14 3936 1

转载 Java并发编程:Callable、Future和FutureTask

在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。  这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。  如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。  而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕

2017-03-09 17:36:15 398

转载 线程间协作的两种方式:wait、notify、notifyAll和Condition

以下是本文目录大纲:  一.wait()、notify()和notifyAll()  二.Condition  三.生产者-消费者模型的实现  若有不正之处请多多谅解,并欢迎批评指正。  请尊重作者劳动成果,转载请标明原文链接:  http://www.cnblogs.com/dolphin0520/p/3920385.html 一.

2017-03-09 17:17:46 700

原创 Ajax常用网络与处理函数

一、处理方法1、each方法用来处理对象和数组的遍历语法:jQuery.each(array, callback )jQuery.each( object, callback )实例:// 遍历数组元素,i为索引,item为值$.each(['Brown', 'Tom'], function(i, item) { //处理元素});// 遍历对象属性,callback中第一个值为属性

2017-03-05 19:00:48 392

原创 Leetcode Tree Problem 树问题合集

树问题规律总结出现树问题,多数情况都是需要递归遍历(dfs和bfs),并且要根据题目要求,来思考相关的树的性质: 二叉树的一些性质问题汇总1. Leet Code OJ 101. Symmetric Tree程序:/** * Definition for a binary tree node. * public class TreeNode { * int val; * T

2017-02-28 17:06:09 1223

原创 Leet Code OJ 70. Climbing Stairs(爬楼梯问题)

题目You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?这是一个爬楼梯问题,给定楼梯层数n,每一步只能走1层或者2层,问上到楼

2017-02-28 14:01:37 665

转载 深入分析AbstractQueuedSynchronizer共享锁的实现原理:CountDownLatch

转自:深度解析Java 8:AbstractQueuedSynchronizer的实现分析AQS共享功能的实现在开始解读AQS的共享功能前,我们再重温一下CountDownLatch,CountDownLatch为java.util.concurrent包下的计数器工具类,常被用在多线程环境下,它在初始时需要指定一个计数器的大小,然后可被多个线程并发的实现减1操作,并在计数器为0后

2017-02-23 19:35:38 1882

原创 深入分析AbstractQueuedSynchronizer独占锁的实现原理:ReentranLock

一、ReentranLock  相信我们都使用过ReentranLock,ReentranLock是Concurrent包下一个用于实现并发的工具类(ReentrantReadWriteLock、Semaphore、CountDownLatch等),它和Synchronized一样都是独占锁,它们两个锁的比较如下:   1. ReentrantLock实现了Lock接口,提供了与synchroni

2017-02-23 18:06:30 3159

转载 非阻塞同步算法与CAS(Compare and Swap)无锁算法

锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用

2017-02-23 13:23:24 629

原创 JDK7下ConcurrentHashMap源码分析

一、ConcurrentHashMap出现的原因  我们之前学过HashMap,也知道HashMap不是线程安全的,在多线程环境下,HashMap的put方法有可能引起死循环。于是HashTable这个类出现,它在大量的方法前都加了内置锁Synchronized,这就保证了它的线程安全性,但是这种方法太极端,导致效率低下。当一个线程访问了HashTable的同步方法时,其它线程就只能等待该线程释放锁

2017-02-22 20:30:44 5065 5

转载 分布式架构的演进

分布式架构的演进系统架构演化历程-初始阶段架构<img data-rawheight="367" data-rawwidth="516" src="https://pic4.zhimg.com/13bd5a6612620fdf51c8987ab3eb1273_b.jpg" class="origin_i

2017-02-21 11:09:35 1115

转载 IntelliJ IDEA 提交代码到 GitHub

一、设置相关绑定Settings—>Version Control—>Git(提前下载好)—>Path to Git executable—>选择你提前下载好的的 git.exe 安装目录Settings ——Version Control——GitHub(Host:github.com,Login:账号,Password:密码 )二、配置远程

2017-02-20 18:38:46 32286 2

原创 高并发秒杀系统分析

本文是学习了immoc网视频之后的个人理解和知识汇总 项目源码:https://github.com/jeff-leo/SpikeSystem,希望大家能star和fork一、秒杀系统中存在高并发的点  一个秒杀系统的基本流程基本如上所示   用户请求详情页,系统时间,请求秒杀接口,执行秒杀操作都是位于服务端,都会被大量访问,那么我们优化系统高并发就是从这四点着手1. 请求详情页的优化  详情页

2017-02-20 16:50:07 18153 13

原创 idea + Maven + Spring + myBatis的单元测试

背景利用Idea和Maven搭建了一个SSM的web项目,对子模块进行测试是非常重要的,此时我的工程结构如下: Maven中,src下有main和test两个目录,main是用来存放我们的工程文件,而test是用来存放测试文件的,此时我完成了Spring + myBatis的整合,并且要对SeckillMapper接口文件进行单元测试public interface SeckillMapper

2017-02-19 13:09:50 5662

原创 mybatis 异常:org.apache.ibatis.binding.BindingException

异常org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'seckillId' not found. Available parameters are [1, 0, param1, param2]分析异常的大概意思就是,

2017-02-19 12:58:47 20763 2

转载 深入理解Java:注解(Annotation)--注解处理器

如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement):  Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Anno

2017-02-17 17:12:09 432

转载 深入理解Java:注解(Annotation)自定义注解入门

元注解:  元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:    1.@Target,    2.@Retention,    3.@Documented,    4.@Inherited  这些类型和它们所支持的类在java.lang

2017-02-17 17:10:24 524

转载 Spring常用注解汇总

@Controller:注册一个bean到spring(一般用于Controller层)@Service:注册一个bean到spring(一般用于service层)@Repository:注册一个bean到spring(一般用于dao层)@Component (不推荐使用):注册一个bean到spring,一般使用前三个来指示不同层的bean@Autowired

2017-02-16 21:18:47 4900 1

原创 Could not resolve bean definition resource pattern [classpath:spring/applicationContext-*.xml]

问题:用Maven搭建spring、springmvc、mybatis时,运行报错: org.springframework.beans.factory.BeanDefinitionStoreException: Could not resolve bean definition resource pattern [classpath:spring/applicationContext-*

2017-02-16 20:52:54 22471 5

转载 Java容器(十):subList的陷阱

我们经常使用subString方法来对String对象进行分割处理,同时我们也可以使用subList、subMap、subSet来对List、Map、Set进行分割处理,但是这个分割存在某些瑕疵。一、subList返回仅仅只是一个视图        首先我们先看如下实例:[java] view plain copy public st

2017-02-12 11:33:09 484

转载 Java容器(九):Map接口总结

直通车:        1. Java容器(四):HashMap(Java 7)的实现原理        2. Java容器(五):LinkedHashMap实现原理        3. Java容器(六):从容器出发探讨hashCode和equals        4. Java容器(七):TreeMap源码分析一、Map概述        首先先看Map的结构示

2017-02-12 11:29:07 698

转载 Java容器(八):List接口总结

直通车:        1. ArrayList的实现和Arrays类的使用       2. Java容器(二):强大的LinkedList       3. Java容器(三):LinkedList源码分析一、List接口概述        List接口,成为有序的Collection也就是序列。该接口可以对列表中的每一个元素的插入位置进行精

2017-02-12 11:24:54 983

原创 Java容器(七):TreeMap源码分析

TreeMap内部是使用红黑树的数据结构来实现的,同时,TreeSet的内部各方法的原理都是通过TreeMap来操作的,所以要想弄懂TreeMap,红黑树一定要要懂,懂了红黑树,再来看TreeMap的源码,还是很容易的!   看此篇文章前,请看我的另一篇红黑树文章:红黑树精讲一、红黑树的要点红黑树的4个规则:(必须牢记)  1.每个节点不是红色就是黑色的;   2.根节点总是黑色的;   3.

2017-02-11 23:30:25 924

转载 红黑树精讲

首先需要理清一个概念,二叉树,平衡二叉树(AVL),二叉搜索树 (BST):数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)    红黑树基于平衡二叉树,它是一个自平衡的二叉搜索树,二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入的是有序或者逆序的数据,那么二叉搜索树的执行速度就变得很慢。因为当插入数值有序时

2017-02-11 21:03:40 741

原创 Java容器(六):从容器出发探讨hashCode和equals

一、容器中的hashcode和euqals  Java容器框架中有List和Set,其中List允许有重复元素,而Set则不允许有重复元素,Set是如何处理这里重复元素的?肯定是与equals相关,通过迭代来equals()是否相等,但是当数据量大的时候,假如我们往HashSet中添加10000个元素,equals()10000次,效率岂不是很低?我们来看看HashSet是如何实现的 publ

2017-02-10 13:22:12 794

原创 Java容器(五):LinkedHashMap实现原理

从之前的LinkedList源码分析来看,带有Linked的,其实就是和双链表相关,毫无疑问,LinkedHashMap就是HashMap再多加一个双向链表,其内部的存储规则和HashMap是一样的,但是在迭代中,HashMap是无序的,LinkedHashMap是有序的   LinkedHashMap维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映

2017-02-09 20:52:07 992

原创 Java容器(四):HashMap(Java 7)的实现原理

一、HashMap的定义和构造函数public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable  HashMap继承自AbstractMap,AbstractMap是Map接口的骨干实现,AbstractMap中实现了Map中最重要最常用和方法,这样Has

2017-02-09 13:48:08 35099 17

原创 Java容器(一):容器总结

Java容器家族图容器从最大的概念来分:分为Collection和Map,区别就是Collection是一个槽的,Map是两个槽的(键值对) Collection划分为:List,Set,Queue List接口常见有:ArrayList,LinkedList,AbstractList, CopyOnWriteArrayList, Vector,StackSet接口常见有:HashSet,T

2017-02-08 20:29:35 2987 2

原创 数组(二):ArrayList的实现和Arrays类的使用

一、数组是否可以变长?我们都知道,数组时定长的,初始化时一定要给定长度,由于这个长度的问题,我们在实际的开发中,会更倾向于使用容器,如ArrayList等,使用容器类时,无需考虑长度问题,因为容器已经帮我们处理了,那么数组就没有办法变长了吗?当然不是,ArrayList就是基于数组实现的,我们可以看看ArrayList是如何处理的二、ArrayList的实现原理ArrayList用一个Object数

2017-02-08 17:41:15 964

原创 数组(一):Java数组基础

一、定义数组数组的定义有三种方式:方式1:推荐 type[] a = new type[元素个数];方式2:c语言方式 type a[] = new type[元素个数];方式3:直接初始化 type[] a = new type[]{逗号分隔的初始化值}; 例如:int[] a = new int[]{1,2,3,4,5};当数组存放的元素不是基本数据类型时,数组内存放的是对象的引用二、数

2017-02-08 16:56:17 889

原创 Leet Code Stack Problem 栈问题合集

总结栈问题通常和对称联系起来,一个出现,必须和另一个出现才合法,例如,出现“(”,就要出现“)”才合法,当遇到对称的问题时,可以考虑是不是栈问题1. Leet Code Oj 20. Valid ParenthesesGiven a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if

2017-02-07 23:10:43 405

原创 Leet Code OJ 14. Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.编写一个函数来查找字符串数组中最长的公共前缀字符串。代码public String longestCommonPrefix(String[] strs) { if(strs == null || strs.length =

2017-02-07 23:01:25 306

原创 Leet Code OJ 17. Letter Combinations of a Phone Number

Given a digit string, return all possible letter combinations that the number could represent.A mapping of digit to letters (just like on the telephone buttons) is given below.Input:Digit string “23”

2017-02-07 22:50:08 428

原创 Leetcode Linked List Problem 链表问题合集

1. Leet Code OJ 2. Add Two NumbersYou are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit.

2017-02-07 22:45:07 3083

原创 LeetCode Two Point & Array Problem 两点问题汇总

问题:Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two

2017-02-07 20:35:03 666

java爬虫完整代码

java爬虫完整代码,数据挖掘

2016-11-12

java爬虫代码

java爬虫代码

2016-11-11

android java日期计算工具

android java日期计算工具

2016-08-11

安卓版本检测工具类

用于检测版本是否需要更新,换掉url地址直接可以用

2016-08-10

空空如也

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

TA关注的人

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