自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 net.sf.json.JSONObject.fromObject(Object)转成json串字段顺序问题

net.sf.json.JSONObject.fromObject(Object)可以把一个对象转成json字符串,但是json-lib-2.4-jdk15.jar包在不同的运行环境下,fromObject方法转换出来的json字符串,其中对象的字段顺序会不一样,如在jdk1.7和jdk1.8中运行同样一段代码,转换具有相同值的对象,结果会不一样,所以在做接口相关的签名的时候需要特别注意。执行代...

2019-02-16 09:45:04 5105 1

原创 无聊的程序员教你如何使用十几行代码练就单身20年的手速(文末彩蛋)

故事背景友女回家学车,今天星期五,明天不上班。正文开始作为一个程序员,在无聊的时候会做点什么呢?大多数的都是会选择玩游戏,今晚我也选择了一个游戏,这个游戏叫反应速度大比拼,如下图 玩法特别简单,就是当你点击开始按钮后,如果看到背景颜色变化了就马上按结束按钮,这期间的耗时便是你的游戏成果。上面说到一句话‘Johnny.R 的为0.11’ ,这个Johnny.R被大家称为狙神,...

2018-07-21 01:06:40 3374 4

原创 eclipse中的maven项目感叹号解决

今天从网上下了两个项目,导入到eclipse中后有感叹号,但是查看configuration path的时候没有发现少jar包或者其他问题,导致一直编译不通过,后面使用eclipse的problems视图才看到错误的地方,原来有个jar包下载出错了,官网上的大小和我本地下载的大小不一致的,可能中间网络出了差错,把本地上的jar包所在的文件夹都删掉,再更新一下工程就好了,记录一下。当eclipse的...

2018-06-13 21:55:40 1679

原创 Base64编码换行问题

Base64编码换行问题一般涉及到金钱的系统都会有签名验证这一步,基本上会将签名的内容进行Base64编码,最近就遇到一个问题,一直在验签失败,最后发现是jar包的问题。对方提供的SDK中所用的Base64工具类是commons-codec-1.10.jar的,这种情况下进行encodeBase64String得到的结果是没有换行的。但我的系统使用的Base64工具类是commons-...

2018-06-06 21:27:14 2258

原创 研读《可靠消息最终一致性方案(独立消息服务)》

前言在上一篇研读《可靠消息最终一致性方案(本地消息服务)》 我介绍了通过本地消息服务来实现分布式事务最终一致性,最后也说了一下这种实现方案的优缺点,现在就来介绍一下如何通过独立消息服务实现分布式事务最终一致性的解决方案。正文在分布式事务中,有很多诸如CAP,BASE等理论,还有2PC,TCC等解决方案,这些我都不会在这里讲,直接进入主题。先假设一个场景,我们在下单买东西的时候,...

2018-04-19 11:34:09 1838 2

原创 研读《可靠消息最终一致性方案(本地消息服务)》

前言这两天看了龙果学院的微服务架构的分布式事务解决方案,其中提到了《可靠消息最终一致性方案(本地消息)》,不过课程虽然讲解的详细,但是PPT里面的插图和描述做的不太好,为了之后复习,做一个笔记。正文在分布式事务中,有很多诸如CAP,BASE等理论,还有2PC,TCC等解决方案,这些我都不会在这里讲,直接进入主题。先假设一个场景,我们在下单买东西的时候,需要扣库存,比如说你买了一...

2018-04-17 10:32:15 2780 5

原创 初学Spring Boot遇到的启动问题

今天刚开始学Spring Boot,谁知道第一个应用就出现了幺蛾子。先贴启动类代码import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Configuration;import org.springframework.ste

2017-09-27 15:38:29 16810 5

转载 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他)

本文原文连接:http://blog.csdn.net/bluishglc/article/details/7585965 对于一般的开发人员来说,很少需要对安全领域内的基础技术进行深入的研究,但是鉴于日常系统开发中遇到的各种安全相关的问题,熟悉和了解这些安全技术的基本原理和使用场景还是非常必要的。本文将对非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS等这些安全领域内的技术进行一番简要

2017-08-06 10:57:15 834

原创 ERP项目介绍——适合刚学完SSH的朋友

前言ERP项目是我学完SSH框架后做的第二个项目练习,第一个是前面介绍的JYUOA,这个项目的业务逻辑要比JYUOA复杂一下,但是在技术方面有很多使用的是类似的,像什么增删改查功能,还有公共功能抽取什么的。但是也有一些差别,你可以发现完成同一件事情会有不同的方法,通过两个项目的对比,你会觉得有些方法会比较好(没有比较就没有伤害~)。比如说在JYUOA中,是采用注解方式扫描bean和注入依赖,而ERP

2017-06-10 09:04:32 9733 2

原创 JYUOA项目介绍——适合刚学完SSH的朋友

前言我最近在复习和汇总以前学习过的知识和做过的东西,JYUOA(JYU全称是Jiaying University)是我在大二刚学完SSH框架的时候,做的第一个SSH的项目。怎么说呢,这可以说是我的启蒙项目,通过这个项目,我学到很多东西,像什么框架之间的整合,还有SSH框架的具体实战使用,还有三层架构设计,以及权限管理等知识,所以我觉得这是一个十分适合刚学完SSH框架的朋友的项目。项目简介OA是Off

2017-06-06 22:19:24 2686 8

转载 对三层和MVC的认识过程

转载http://blog.csdn.net/beijiguangyong/article/details/7029257三层架构就是MVC!起初老师总说三层MVC,MVC三层架构……所以开始的时候脑子就一个概念:三层就是MVC,MVC就是三层架构。而且想想也合理啊,都是“三”。MVC是三个字母,三层架构也是“三”,理所应当的就对应上了。然后就这么一直“错”了很长时间。三层架构绝不是MVC!!后来

2017-06-06 20:40:33 1166

转载 浅析若干Java序列化工具

转载http://blog.csdn.net/u013256816/article/details/50721421#comments   在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有:采用java对象的序列化和反序列化把对象包装成JSON字符串传输Google工具protoBuf的开源 本文章所需要的

2017-05-14 16:48:18 577

原创 自己实现Spring AOP(三)CGLib代理实现AOP

前言在自己实现Spring AOP(二)JDK代理实现AOP我用JDK代理方式实现了AOP功能,现在就要用CGLib方式实现一下。问题其实前面的实现会有两个问题第一个问题就是在edu.jyu.aop.ProxyFactoryBean.createJDKProxy()方法中,我要判断通知的类型,以决定目标方法的执行位置,这样子实在不容易扩展,如果我定义一个新的通知类型,比如说后置通知,那么我就要再另加

2017-05-12 16:20:16 1398

原创 自己实现Spring AOP(二)JDK代理实现AOP

前言上一篇文章自己实现Spring AOP(一)环境搭建及知识准备,我搭建好了项目也写了一个例子,接下来我就要实现这个例子中的AOP功能。在Spring中如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP,如果目标对象没有实现接口,必须采用CGLib(Code Generation Library)方式,下面我就先用JDK的动态代理实现一下。准备工作在实现AOP功能前,先准备好要测试

2017-05-12 13:34:48 1407 1

原创 自己实现Spring AOP(一)环境搭建及知识准备

前言这个项目是基于JSpring IoC的,所以在看下去之前,你要确保看过之前实现JSpring IoC的文章(这些文章在我的博客分类JSpring IoC),不然也不看不出什么意思来,就不用浪费时间往下看了。在做这个项目的时候发生了一件有趣的事,我发现了JSpring IoC的一个Bug……,在 自己实现Spring IoC容器(四)IoC容器的Bug对这个Bug进行了介绍,也没什么,就是写错了一

2017-05-12 12:06:38 1603

原创 详解JUC之锁——LockSupport类(04)

LockSupportLockSupport看名字叫锁支持,这个玩意的功能跟wait和notify很像,它也是可以阻塞一个线程,然后又可以恢复一个线程,不过有个比较大的区别就是,wait让线程阻塞前,必获取到同步锁。而LockSupport这个哥们比较牛逼,随时随地随便阻塞当前线程,你给它一个线程它就敢让那个线程阻塞。它是通过park()方法阻塞当前线程的,park的意思就是停车咯,然后恢复线程就是

2017-05-11 17:25:51 1879

原创 详解JUC之锁——ReentrantLock类(03)

前言在详解JUC之锁——Lock与AQS(02)中我介绍了JUC锁的根基——AQS类还有公平锁和非公平锁,现在就可以正式介绍一下JUC锁家族其中的一个成员——ReentrantLockReentrantLockReentrantLock是一个互斥锁,也是一个可重入锁(Reentrant就是再次进入的意思)。ReentrantLock锁在同一个时间点只能被一个线程锁持有,但是它可以被单个线程多次获取,

2017-05-11 17:18:59 1217 6

原创 详解JUC之锁——Lock与AQS(02)

前言在详解JUC之锁——概述(01)中我对JUC中的锁进行了概述,下面我就介绍一下它们的根基Lock接口和AQS类Lock看名字就知道Lock接口就是JUC中锁的顶级接口,支持语义不同的锁规则,比如说公平锁和非公平锁,独占锁(也可以叫互斥锁)和共享锁等。它最主要的两个方法就是lock()和unlock(),一看就知道是获取锁和释放锁。还有一个比较有趣的方法是boolean tryLock(long

2017-05-11 17:07:03 1622

原创 详解JUC之锁——概述(01)

前言在详解JUC之原子类使用及实现中,我介绍了一下JUC中的原子类的使用和实现,现在我就来介绍一下JUC的重磅武器——锁(Lock)同步锁在说JUC中的锁之前,得先说一下它们的前辈——同步锁,有对比才有伤害嘛~同步锁的概念是,不同的线程可以访问一个同步锁,但是在同一个时间点,这个同步锁只能被一个线程获取,而想要却得不到它的线程就必须等待了,直到获取到它才能继续运行。Java是通过synchroniz

2017-05-11 10:45:35 1607 1

原创 自己实现Spring IoC容器(四)IoC容器的Bug

Bug的发现之前我自己写了一个类似Spring中的IoC容器 自己实现Spring IoC容器(三)完成IoC容器,然后最近想在这个项目基础上把Spring的AOP也实现一下,然后就悲剧的发现了一句错误代码……这个错误代码就在edu.jyu.core.ClassPathXmlApplicationContext类的Object createBeanByConfig(Bean bean)方法中,下面是

2017-05-10 10:53:20 2984 4

原创 详解JUC之原子类使用及实现

前言我在详解JUC之原子类概述这篇文章中介绍了一下原子操作和JUC包下的原子类的类型,现在我就来介绍第一种原子类类型——操作基本类型的原子类操作基本类型的原子类操作基本类型的原子类有3个AtomicInteger:操作int类型AtomicLong:操作long类型AtomicBoolean:操作boolean类型这些操作基本类型数据的原子类的使用是非常简单的,你对基本类型数据的操作,在这些

2017-05-09 12:27:41 1886

转载 JNI简介

转载http://www.cnblogs.com/eesijian/p/5843879.html 1. JNI简介  JNI是Java Native Interface的英文缩写,意为Java本地接口。  问题来源:由于Java编写底层的应用较难实现,在一些实时性要求非常高的部分Java较难胜任(实时性要求高的地方目前还未涉及,实时性这类话题有待考究)。  解决办法:Java使用JNI可以调用现

2017-05-09 09:47:33 620

转载 sun.misc.unsafe类的使用

转载http://blog.csdn.net/fenglibing/article/details/17138079    这个帖子是关于JAVA中鲜为人知的特性的后续更新,如果想得到下次在线讨论的更新,请通过邮件订阅,并且不要忘了在评论区留下你的意见和建议。    Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的。如果你想搞破坏,可以使用Unsa

2017-05-09 09:42:30 603

转载 Java锁的膨胀过程和优化

首先说一下锁的优化策略。1,自旋锁自选锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试。也就是不停循环看是否能等到上个线程自己释放锁。这个问题是基于一个现实考量的:很多拿了锁的线程会很快释放锁。因为一般敏感的操作不会很多。当然这个是一个不能完全确定的情况,只能说总体上是一种优化。举个例子就好比一个人要上厕所发现厕所里面有人,他可以:1,等一小会。

2017-05-08 22:50:36 1446

转载 Java中CAS详解

转载http://blog.csdn.net/ls5718/article/details/52563959在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程

2017-05-08 22:39:32 834

原创 Java8特性系列文章目录

(1)详解Java8特性之Lambda表达式(2)详解Java8特性之方法引用(3)详解Java8特性之接口默认方法(4)详解Java8特性之Optional类(5)详解Java8特性之Stream API(6)详解Java8特性之Stream API补充(7)详解Java8特性之新的日期时间 API(8)详解Java8特性之Stream API并行流(9)详解Java8特性之重复注解其实Java8

2017-05-08 21:43:07 1871 2

原创 详解JUC之原子类概述

原子操作在讲 JUC (java.util.concurrent) 的原子类之前呢,我得先介绍一下原子操作在化学变化中,原子(Atom)是不能再分的一种粒子(在物理上还可以分为质子和电子),计算机中的原子操作是指不能分割成若干部分的操作,表示这个操作在执行过程中,是不能被中断的。比如说int i=0;是一个原子操作。而i++则可以分成两步操作,先是计算i+1的值然后第二步是将第一步的计算结果赋值给i

2017-05-08 18:54:28 1479

原创 一个小细节引起的悲剧——线程执行顺序错误

悲剧的故事今天在写博客的时候,想弄个例子说明一下非原子操作的线程安全问题,下面就是这个例子public class Main { public static void main(String[] args) { Counter counter = new Counter(); // 开启1000条线程让counter的count++,理想结果应该是1000

2017-05-08 17:24:06 748

原创 详解Java8特性之重复注解

重复注解注解(Annotation )是Java 5 推出来的,推出来后使用极其广泛,一些流行的框架基本都会用到注解实现一些功能,代替以前的配置方式,最典型的像Spring。在继续往下讲之前,我先声明你得知道注解的知识,我假设你已经掌握注解知识并能够自定义注解。在Java 8 之前,同一个注解是不能在一个位置上重复使用的,例如我定义了一个注解@MyAnnotationpackage edu.jyu.

2017-05-07 21:57:34 2635 1

原创 详解Java8特性之Stream API并行流

在详解Java8特性之Stream API中,我用的例子使用的都是顺序流,即单线程执行的,其实Stream API还提供了并行流,即多线程执行操作。java.util.Collection<E>新添加了两个默认方法default Stream stream() : 返回顺序流default Stream parallelStream() : 返回并行流可以发现,stream()和paralle

2017-05-07 19:50:28 12277 4

原创 详解Java8特性之新的日期时间 API

吐槽Java 8 提供了一套新的日期时间 API,为什么要这么干呢。因在旧版的 Java 中,日期时间 API 存在很多问题,比如说线程安全问题了, java.util.Date 是非线程安全的,所有的日期类都是可变的;又还有设计乱七八糟,你去看看java.util.Date类会发现它的很多方法都被标记过时了,就知道Sun公司自己人都看不过去了,而且用于格式化和解析日期类的类在java.text包下

2017-05-07 14:09:17 5571 3

原创 Fork/Join框架及其性能介绍

Fork/Join框架介绍Fork/Join框架是Java 7提供了的一个用于并行执行任务的框架, 大概是怎样子的呢,就是一个把大任务分割成若干个小任务,最终把每个小任务结果汇总起来得到大任务结果的框架。有点像是归并排序。下面的图就能很好地体现出来工作窃取模式(work-stealing)在讲Fork/Join框架使用前,得先介绍一下它所使用的线程模式——工作窃取模式,何为工作窃取模式,其实就是指一

2017-05-07 09:19:37 7075 8

原创 详解Java8特性之Stream API补充

上一篇文章我介绍了Java 8的Stream API 详解Java8特性之Stream API,忘记补充一点了,Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream(这样可以链式编程)。看下面例子@Testpublic void test() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6); lis

2017-05-06 18:36:38 833

原创 详解Java8特性之Stream API

前言Java8中有两大最为重要的改变。第一个是Lambda表达式,还不了解的可以去这看看详解Java8特性之Lambda表达式另外一个则是Stream API,在java.util.stream下是什么Stream呢,很多地方说到它是处理集合的关键抽象概念,这样子说实在是太抽象了。这个Stream并不是我们以前认识的IO流,而是一个数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。集合专注的

2017-05-06 18:09:05 2334 3

原创 详解Java8特性之Optional类

Optional类在Java中,可能我们看过最多的异常就是java.lang.NullPointerException,这是使用null引用去调用一个方法或者字段的结果。Java 8中提供了java.util.Optional<T> 类,是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且 可以避免空指针异常。Optiona

2017-05-06 16:44:22 3162

原创 详解Java8特性之接口默认方法

是什么Java8中新增了接口的默认方法,简单来说就是让接口可以自己有实现方法,不许要实现类去实现。有什么用想象一种情况,你定义了一个接口A,假如里面有几个抽象方法。然后什么B,C,D,E…一大堆类去实现了A接口里面的几个抽象方法。那么现在问题来了,如果要在A中新加一个抽象方法,那么所有的实现类都要去实现这个抽象方法,不是很麻烦吗?这个时候默认方法就派上用场了,只需要再A中自己实现这个新添加的方法就好

2017-05-05 16:22:35 1913

原创 详解Java8特性之方法引用

前言在详解Java8特性之Lambda表达式 中我介绍了Java8中的Lambda表达式,通过Lambda表达式我们就可以快速地创建一个函数式接口的实例,可以说是大大简便了我们开发。你以为只能做到这么简便了嘛,big big wrong,大大的错,还可以再简便一点。有请我们今天的主角—方法引用在学习这个之前的得确保你已经学习过Lambda表达式了,因为这个是用在Lambda表达式的。方法引用方法引用

2017-05-05 12:49:15 19084 2

原创 详解Java8特性之Lambda表达式

前言Lambda表达式是Java8的一个特性,而Java8是2014发布的,那时候我刚上大学,还没认识Java呢。过了很长一段时间才学习了Lambda表达式,但是一直没怎么用过,已经忘了差不多了,所以现在特地复习一下。学一个东西我们得知道它是什么,有什么用,怎么用。是什么从不同角度上来说,Lambda表达式是一个语法糖,也可以说是匿名函数。语法糖何谓语法糖,我的理解是语法糖就是方便程序员开发的一个功

2017-05-05 10:09:44 3320

原创 自己实现Spring IoC容器(三)完成IoC容器

上一章自己实现Spring IoC容器(二)读取配置文件我把读取配置文件这一块功能完成了,现在就可以根据配置文件来创建IoC容器了定义接口先模仿一下Spring假装地定义一个BeanFactory接口,虽然对于我这个项目意义不大package edu.jyu.core;public interface BeanFactory { /** * 根据name返回bean *

2017-04-08 10:18:44 1704 2

原创 自己实现Spring IoC容器(二)读取配置文件

上一章自己实现Spring IoC容器(一)概述我对自己要实现的Spring IoC容器简单地介绍了一下,现在就要正式开工,先完成读取配置文件这一块。搭建环境先新建一个Web工程,我把工程命名为JSpring IoC(我的英文名是Jason),工程名你们可以自行选择。然后新建一个lib文件夹导入一些需要用到的jar包commons-beanutils-1.9.3.jar : 注入普通属性的时候要用

2017-04-08 09:42:46 2091

空空如也

空空如也

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

TA关注的人

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