自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tanyunlong_nice的专栏

纸上得来终觉浅,绝知此事要躬行

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

原创 mybatis拦截器学习

目录最近项目中需要开发对指定规则的一组sql进行拦截操作,如果添加在业务层中会增加耦合性,后期的扩展和维护也会很麻烦,因此想到之前用过的mybatis 拦截器,这里学习记录一番。MyBatis拦截器介绍官方介绍从官网我们介绍我们可知:MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。MyBatis允许你在已映射语句执行过程中的某一点进行...

2018-11-22 15:37:31 337

转载 JAVA中锁的介绍及使用建议

锁是解决并发冲突的重要工具。在开发中我们会用到很多类型的锁,每种锁都有其自身的特点和适用范围。需要深刻理解锁的理念和区别,才能正确、合理地使用锁。常用锁类型乐观锁与悲观锁悲观锁对并发冲突持悲观态度,先取锁后访问数据,能够较大程度确保数据安全性。而乐观锁认为数据冲突的概率比较低,可以尽可能多地访问数据,只有在最终提交数据进行持久化时才获取锁。悲观锁总是先获取锁,会增加很多额外的开销,也增加了死锁的几...

2018-05-28 18:20:06 753

原创 数据库拆分之垂直拆分

     当单机数据库遇到瓶颈后,我们最常见的就是读写分离和主从同步,那么当再遇到瓶颈后怎么办呢?我们的解决办法就是垂直拆分。一、什么是垂直拆分       数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。垂直拆分就是把一个数据库的不同业务单元的数据分到不同数据库中。二、优缺点优点:拆分后业务清晰,拆分规则明确。系统之间整合或扩展容易。数据维护简单。缺点:部分业务表无法j...

2018-04-03 17:12:35 1221

原创 聊聊 springmvc 异常处理

在做WEB项目中,无论是接口服务还是前后分离的web项目,对于RunTimeException异常和业务异常的处理是很重要的一部分,若不处理,业务异常抛出会给用户不友好的访问体验,DAO层的异常会暴露数据库的一些信息从而使得服务不安全等等,幸运的是JAVA依赖于强大的spring生态,springmvc 已经为我们准备了成熟的解决方案。     springMVC提供的异常处理主要有两种方式,

2018-01-17 14:47:37 383

原创 wait,notify实现两个线程交替打印

package /** * Created by on 2017/10/10. */public class ThreadTest { public static void main(String[] args) { final flag flag = new flag(); final AddPrint addPrint = new Ad

2017-10-10 16:38:59 1205

原创 Java8 stream使用体验

最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,学习了下发现有很多值得整理的用法,这里记录下。一、什么是streamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据

2017-09-25 15:33:08 2238

原创 Joda-time的使用

在实际的开发过程中,对于日期的操作,往往很头疼,一次操作可能就要多行代码或者调用很多API,很多时候可能会出错,最近了解了一个很不错的类库Joda-time,这里学习记录下。一、什么是Joda-TimeJoda-Time 令时间和日期值变得易于管理、操作和理解。事实上,易于使用是 Joda 的主要设计目标。其他目标包括可扩展性、完整的特性集以及对多种日历系统的支持。并且 Joda 与 JD

2017-09-12 14:59:00 618

原创 BigDecimal使用总结

过去的工作开发中,有时候会使用到BigDecimal去定义一些变量,一直不了解具体的使用场景,这里学习记录一下。一、使用背景     借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要

2017-08-31 14:30:50 1213

原创 mybatis-plugin IDEA破解 mac

最近了解到一个好用的插件 mybatis-plugin ,虽然plugin库提供了free版本,但是觉得太难看,于是开始破解,折腾了一下午发现mac的很难破解,这里记录一下。       大致的思路都是从git上下载源码 ,找到对应的版本com 文件 替换 ,并重新打包。1.先放上git地址:https://github.com/myoss/profile 下载zip 解压或者clone

2017-08-22 17:21:25 3869

转载 LIST、MAP、SET总结

List、Set 和 Map 都是实现了 Collection 接口的接口。本文将讨论 Java 语言中这三者之间的区别。List Vs Set Vs Map1) 重复性List 允许有重复元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到 List。Set 不允许重复。Set 以及所有实现了 Set 接口的类都不允许重复值的插入。Map 以键值对的形

2017-08-09 17:24:28 314

原创 浅谈单例设计模式探索

最近在和朋友聊技术时,讨论到了设计模式,发现简单的单例设计模式并不简单,多线程是我们在JAVA开发中常见的场景,在多线程环境下接触的单例模式可能并不单例,下面来详细学习一下单例模式。一、什么是单例模式       单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对

2017-08-08 00:14:48 573

原创 Redis分布式锁

最近在学习Redis 过程中,了解到redis的可以作为分布式锁的使用,这里学习记录下。一、背景介绍:       在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等。大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对redis的连接并不存在竞争关系。其次Redis提供一些命令SETNX,GET

2017-07-18 18:38:31 562

原创 StopWatch任务执行时间监控

在最近代码codereview中,发现代码中大量使用了StopWatch 这个类去监视执行的时间。这里总结一下大概的介绍。StopWatch 在spring中和apache中均提供了类似的功能,这里分别介绍一下。一、Apache下的StopWatch      StopWath是apache commons lang包下的一个任务执行时间监视器,具体位置是org.apache.co

2017-07-18 14:54:09 2212 1

转载 java_try,catch,finally return之间的执行顺序

掌握下面几条原则就可以完全解决“当try、catch、finally遭遇return”的问题。原则:1、finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行。           2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。           3、函数必须确

2017-06-22 11:49:59 371

原创 JAVA-POI 导入导出EXCEL(含JSON)

最近做了几个很有意思的功能,女朋友公司需要收集北京互联网的信息,第一反应就是爬虫,但是又不太擅长,因此想到了用正则解析转换为JSON格式导出为EXCEL。恰好工作内容也要做一个把数据库中的数据导入导出并发送邮件的定时任务,因此这里详细学习了一下操作excel的一些内容。现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI。这里我们用Apache

2017-04-24 15:59:16 7344 1

原创 JAVA枚举小结

最近在项目中看见了一种新的定义常量形式,了解了下JAVA的枚举类。一、什么是枚举   枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。二、为什么不用静态变量代替枚举类 public static final int SEASON_SPRING = 1; public static

2017-03-16 15:21:37 362

转载 Mybatis小结之动态sql

什么是动态SQLMyBatis的一个强大特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件串联SQL字符串在一起是多么地痛苦,确保不能忘了空格或者在列表的最后的省略逗号,动态SQL可以彻底处理这种痛苦。通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL

2017-03-09 17:32:58 375

原创 Mybatis小结之详解Mapper.xml

最近换了个新的工作环境,新的项目中使用的是SSM框架,其中Mybatis在之前工作中一直没有使用过,为了能够尽快的开发,在这里先详细学习了下最长使用的mapper.xml,能够实现基本的增删改查。     一、什么是MyBatis      MyBatis是一款支持普通SQL查询、存储过程和高级映射的持久层框架。MyBatis消除了几乎所有的JDBC代码、参数的设置和结果集的检索。MyBa

2017-03-09 11:14:43 645

原创 线程小酌之JAVA中的阻塞队列

BlockingQueue

2017-02-06 18:15:16 367

原创 线程小酌之理解线程池

一、引言       在学习JAVASE部分中,我们都学习到了基本的线程创建继承THREAD类或实现Runnable接口,在正常负载情况下,为每个任务分配一个线程这种方法能够提升串行执行的性能。只要请求的导弹速率不超出服务器的请求处理能力,那么这种方法可以同时带来更快的响应性和更高的吞吐率。但是在实际开发过程中,开发环境和测试环境因数据流量并没有达到实际请求流量,并不能发现实际的问题,在生产环

2017-02-01 23:33:00 1166 2

原创 Memcached全攻略

最近在项目中进行核心业务模块的重构,涉及对系统接口性能的改造,随着系统业务的发展,原有系统接口响应速度已并不能满足业务需求,内部调用接口时间过段,为此,设计将多次访问查询操作的数据改为使用memcached

2017-01-21 15:17:08 3219

原创 缓存那些事之缓存简介

一、缓存概念       WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户访问延迟增大,WWW服务质量日益显现出来。缓存技术被认为是减轻服务器负载、降低网络拥塞、增强WWW可扩展性的有效途径之一,其基本思想是利用客户访问的时间局部性(Temproral Locality)原理,将客户访问过的内容在Cache中存放一个副本,当该内容下次被访问时,不必连接到驻留网站

2017-01-09 15:57:41 586

原创 JAVA自定义注解的使用和定义

最近有所了解到自定义注解的应用,因此学习了一下,在项目后台接口开发中,数据的传输经常有对数据内容格式及一些信息规则的校验,应用注解在数据进入后台的开始使用自定义注解是一种比较可靠的方案。一、注解的概念及分类       1.首先我们来看一下什么是注解:       注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编

2016-12-10 20:06:23 7112

转载 IDEA(jetbrain通用)优雅级使用教程

前面写过一篇IDEA的入门级文章,但是只学会了那些配置啊什么的并不能提高我们的开发效率。事实上,如果你IDEA用的足够熟练,就可以把鼠标扔了。 附入门级教程传送门: http://blog.csdn.net/qq_31655965/article/details/52788374实时代码模板(Live Templates)我们先来看一个gif图: 大兄弟,你看清

2016-12-02 15:37:20 1245

转载 IDEA使用教程汇总

上个月,idea的使用量超越eclipse的消息席卷了整个IT界,idea到底好在哪里呢?最智能的IDEIDEA相对于eclipse来说最大的优点就是它比eclipse聪明。聪明到什么程度呢?我们先来看几个简单的例子。智能提示重构代码如果你写的代码过于复杂,或者有更好的方式来替代你写的代码,那么IDEA会给你一个提示,告诉你还可以有更好的方式。如下图:这个是说你使用了没

2016-12-02 15:35:22 2504 2

原创 Spring整合Quartz框架定时任务

最近项目中经常用到队列和定时任务及线程的整合应用,涉及的场景是当多人访问系统时需要回调客户系统处理结果时,如何减少服务器压力并能处理业务需求,这里用到了队列减少服务器压力加入定时任务发送机制,使用的是Spring框架整合 Quartz框架实现的定时任务,因此学习了一下Quartz的前因后果 在此记录学习一下。一、引入      你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11

2016-11-29 15:44:01 10677

原创 WebService学习汇总

Web Service基本概念Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。XML:(Extensible Markup Language)扩展型可标记语

2016-11-04 15:16:32 988

转载 EHCache的学习

从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对

2016-11-01 15:07:21 618

原创 MAVEN学习之旅

由于最近工作学习,总是能碰到Maven的使用。在项目中管理一下代码的SVN和版本控制中,经常发现一些同事对MAVEN的使用掌握并不是特别清楚。经常会导致问题。这篇文章不是一个全面的Maven解析,而是一个简单的介绍,整理了网上一些资料加上自己平时工作中的一些体验和学习总结,基本能满足日常工作所需,如果对MAVEN感兴趣可以参考MAVEN权威指南这本书。一、Maven的基本概念Mav

2016-10-31 23:01:40 358

原创 Struts2实现文件下载功能

最近项目中需要做一个开发平台,第一个功能就是实现文档对外提供下载功能,项目中用到的是Struts2框架,因此写了一个简单的ACTION在此记录学习。首先需要新建一个ACTION:import ins.framework.web.Struts2Action;import org.apache.commons.codec.binary.Base64;import java.io.File

2016-10-27 23:29:30 1886 1

转载 Axis2开发WebService客户端 的3种方式

第一RPC方式,不生成客户端代码第二,document方式,不生成客户端代码第三,用wsdl2java工具,生成客户端方式调用Java代码  package samples.quickstart.client;    import javax.xml.namespace.QName;  import org.apache.axiom.om.O

2016-10-20 23:25:55 438

原创 加密方式之MD5

最近项目中设计加密解密的技术应用场景比较多,因此总结一下JAVA中常见的加密技术。今天总结一下MD5加密。一、MD5的必要性以及实际应用场景MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原

2016-10-20 10:05:32 8230

原创 加密方式之BASE64

最近开发中,遇到业务场景,需要通过接口获取XML报文中一个长度为3000字符串类型的IO图片流,了解后知道是通过BASE64加密的,学习了下BASE64加密。一、BASE64简介Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java

2016-10-18 22:52:08 710

转载 java中的缓存技术该如何实现

1缓存为什么要存在?2缓存可以存在于什么地方?3缓存有哪些属性?4缓存介质?搞清楚这4个问题,那么我们就可以随意的通过应用的场景来判断使用何种缓存了.1. 缓存为什么要存在?一般情况下,一个网站,或者一个应用,它的一般形式是,浏览器请求应用服务器,应用服务器做一堆计算后再请求数据库,数据库收到请求后再作一堆计算后把数据返回给应用服务器,应用服务器再作一堆计算后把

2016-09-28 18:46:33 454

原创 关于HTTP请求的那些事

最近项目做接口服务中用到了两种请求方式,一种是webservice,另一种是HttpPost就Http请求方式详细的学习和了解了下一、TCP/IP1. 协议a. TCP/IP整体构架概述TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这

2016-07-11 17:07:42 2713

原创 设计模式之单例设计模式

今天学习了单例设计模式单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化

2016-07-08 01:49:13 331

转载 Hbibernate 基础学习

Hibernate 是一个是一个对象/关系映射的解决方案,简单地说就是将Java中对象与对象之间的关系映射至关系数据库中的表与表之间的关系。 1.1 概述:  1.1.1、ORM简介:  对象/关系映射ORM(Object-Relation Mapping) 是用于将对象与对象之间的关系映射至数据库中的表与表之间的关系的一种模式。  ORM 可以理解成一种规范,它概述了这类框架

2016-06-29 19:14:53 440

转载 Eclipse Debug不为人知的秘密

Debug视图认识debug视图,红色部分框为线程堆栈视图,黄色部分框为表达式、断点、变量视图,蓝色部分为代码视图。 线程堆栈视图分别介绍一下这几个按钮的含义:1.表示当前实现继续运行直到下一个断点,快捷键为F8。2.表示打断整个进程3.表示进入当前方法,快捷键为F5。4.表示运行下一行代码,快捷键为F6。5.表示退出当前方法,返回到调用层,快捷键为F7。6

2016-05-29 16:13:23 376

转载 主键和外键

一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如  学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识

2016-05-19 23:41:58 359

转载 数据库中关于左连接,右连接,内连接,外连接

记住一句话:左连接就是左边全部保留按条件查出右边,右连接就是右边全部保留按条件查出左边在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚。这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下。希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助。(发这么菜的教程,各位大大们别笑话偶了,呵:D ) 有两个表A和表B。表A结构如下:

2016-04-24 20:27:33 465

空空如也

空空如也

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

TA关注的人

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