
java闲谈
文章平均质量分 92
神笔馬郎
这个作者很懒,什么都没留下…
展开
-
Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、ThreadLocal、枚举)
Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。单例模式好处:它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间; 能够避免由于操作多个实例导致的逻辑错误。 如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择。单例模式有很多种写法,大部分写法都或多或少有一些不足。下面将分别对转载 2020-07-03 17:38:06 · 357 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatil转载 2020-07-03 09:29:43 · 127 阅读 · 0 评论 -
Java多线程——Condition条件
简介Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的notifyAll()方法。不同的是,Object中的wait(),notify(),notifyAll()方法是和"同步锁"(synchronized关键字)捆绑使用的;而Condition是需要与"互斥锁"/"共享锁"捆绑使用的。简单应用:Cond.转载 2020-07-02 11:41:45 · 860 阅读 · 1 评论 -
Java内存模型
简述Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。定义模型的目标Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。这里说的变量包括实例字段、静态字段和构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的,不会共享,也就不存在竞争的问题。主内存与工作内存转载 2020-07-02 10:44:32 · 317 阅读 · 1 评论 -
Java中Volatile关键字详解
一、基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile转载 2020-07-02 10:23:13 · 268 阅读 · 0 评论 -
Maven学习总结(八)——使用Maven构建多模块项目
在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层)、dao(数据库访问层)、service(业务逻辑层)、web(表现层),这样分层之后,各个层之间的职责会比较明确,后期维护起来也相对比较容易,今天我们就是使用Maven来构建以上的各个层。 项目结构如下: system-parent |----pom.转载 2016-10-25 22:45:51 · 992 阅读 · 0 评论 -
Java利用QRCode.jar包实现二维码编码与解码
1.二维码图片类实现package com.zhaochao.code;import java.awt.image.BufferedImage;import jp.sourceforge.qrcode.data.QRCodeImage;public class TwoDimensionCodeImage implements QRCodeImage { BufferedImag转载 2016-09-22 00:51:55 · 12244 阅读 · 0 评论 -
Java利用QRCode.jar包实现二维码编码与解码
1.二维码图片类实现package com.zhaochao.code;import java.awt.image.BufferedImage;import jp.sourceforge.qrcode.data.QRCodeImage;public class TwoDimensionCodeImage implements QRCodeImage { BufferedImag转载 2016-09-22 00:51:30 · 453 阅读 · 0 评论 -
使用Spring MVC统一异常处理实战
1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 那么,能不能将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护?答案是肯定的。下面转载 2016-08-11 15:30:45 · 441 阅读 · 0 评论 -
【Log4j】Jboss下配置log4j简记
该文件在Jboss容器的目录为:${JBOSS_HOME}\server\default\conf下。下面就是基于log4j默认配置的一些基本修改和注释:xml version="1.0" encoding="UTF-8"?>log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">转载 2016-08-11 12:05:39 · 1107 阅读 · 0 评论 -
对称加密与非对称加密
想要在网络中传输数据,往往信息安全是首先要考虑的问题。一般来说,重要的信息在网络中传播都需要加密,接收方拿到信息之后需要解密。加密/解密算法大致可以分为对称加密和非对称加密两类:对称加密定义采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送转载 2016-08-18 18:20:50 · 518 阅读 · 0 评论 -
解密ThreadLocal
相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的共享问题。如果你也这样认为的,那现在给你10秒钟,清空之前对ThreadLocal的错误的认知!看看JDK中的源码是怎么写的:This class provides thread-lo转载 2016-08-18 18:16:57 · 260 阅读 · 0 评论 -
基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Trasactional注解的事务管理,但在通过基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务是有区别的,我们接下来看看到底有哪些区别。 一、基础工作首转载 2016-08-18 17:15:24 · 317 阅读 · 0 评论 -
Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的。现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应。第一:介绍Dubbo背景 大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过转载 2016-06-21 01:11:07 · 636 阅读 · 0 评论 -
AOP 那点事儿(续集)
本文是《AOP 那点事儿》的续集。在上篇中,我们从写死代码,到使用代理;从编程式 Spring AOP 到声明式 Spring AOP。一切都朝着简单实用主义的方向在发展。沿着 Spring AOP 的方向,Rod Johnson(老罗)花了不少心思,都是为了让我们使用 Spring 框架时不会感受到麻烦,但事实却并非如此。那么,后来老罗究竟对 Spring AOP 做了哪些改进呢?转载 2016-05-27 11:57:10 · 370 阅读 · 0 评论 -
AOP 那点事儿
又是一个周末,刚给宝宝喂完牛奶,终于让她睡着了。所以现在我才能腾出手来,坐在电脑面前给大家写这篇文章。 今天我要和大家分享的是 AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之。翻译过来就是“面向方面编程”,可我更倾向于翻译为“面向切面编程”。它听起有些的神秘,为什么呢?当你看完这篇文转载 2016-05-27 11:55:53 · 311 阅读 · 0 评论 -
利用HttpClient发送Get和Post请求
package JanGin.httpClient.demo; import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List; import org.apache.htt转载 2016-03-30 21:49:02 · 354 阅读 · 0 评论 -
J2EE如何生成验证码图片和点击刷新验证码
验证码图片生成步骤创建BufferedImage对象。获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象。调用Graphics对象的setColor()方法和fillRect()方法设置图片背景颜色。调用Graphics对象的setColor()方法和drawLine()方法设置图片干扰线。调用BufferedImaged对象的setRGB(转载 2016-10-28 01:58:57 · 1981 阅读 · 0 评论 -
大规模分布式存储系统: 问题, 概念, 及领域语言
问题域分布式存储解决的是单机存储的性能, 单点故障问题, 容量一开始到还在其次, 但随着应用规模的发展, 要解决容量也得必须分布式了.分布式存储解决容量问题即可扩展性的方式, 就是数据分片. 可扩展性是分布式的已经解决的问题, 任何关于分布式存储的现存问题的讨论, 都不会再涉及可扩展性.数据分片也能部分的解决性能问题. 而解决性能问题的方法还包括数据复制.分布式存储解决单点故障问题的手转载 2016-11-01 20:27:25 · 1169 阅读 · 0 评论 -
Maven打包可执行Jar的几种方法
一、无依赖其他任何jar org.apache.maven.plugins maven-jar-plugin 2.4转载 2017-04-01 01:01:10 · 442 阅读 · 0 评论 -
基于JWT的token身份认证方案
https://www.cnblogs.com/xiangkejin/archive/2018/05/08/9011119.html转载 2019-03-27 21:13:27 · 344 阅读 · 0 评论 -
Java中将InputStream读取为String, 各种方法的性能对比
如下, 一共存在11种实现方式及其对应的性能测试结果:使用IOUtils.toString (Apache Utils)String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);使用CharStreams (guava)String result = CharStreams.toString(new...转载 2019-03-27 20:56:19 · 770 阅读 · 0 评论 -
Socket通信原理(收藏)
Socket通信原理https://www.cnblogs.com/wangcq/p/3520400.html转载 2019-03-01 16:26:35 · 171 阅读 · 0 评论 -
spring的@Transactional注解详细用法
概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。Spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects)支持声明式...转载 2019-01-16 18:16:41 · 217 阅读 · 0 评论 -
加密:DigestUtils与java MessageDigest
1.使用Spring的DigestUtilspublic class StringUtilTest { static final String TARGET = "changeme"; /* * 不可逆算法 MD5 */ @Test public void Md5() { String...转载 2018-07-09 14:07:19 · 1883 阅读 · 0 评论 -
Http Response Code[整理]
HTTP协议状态码表示的意思主要分为五类 ,大体是 : ~~~~~~~~~~~~~~~~~~~~~~~~ 1×× 保留 2×× 表示请求成功地接收 3×× 为完成请求客户需进一步细化请求 4×× 客户错误 5×× 服务器错误 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)101 Switching ...转载 2018-06-15 11:17:35 · 4687 阅读 · 0 评论 -
理解ThreadLocal
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作转载 2017-11-30 18:17:03 · 196 阅读 · 0 评论 -
java的byte数组的不同写法
经常看到Java中对byte数组的不同定义,粗略整理的一下:一个字节(byte)=8位(bit),“byte数组”里面全部是“byte”,即每一个byte都可以用二进制、十六进制、十进制来表示。首先八位二进制数0000 0000 ~1111 1111,一共可以表示2^8=256位数,如果想要表示无符号整数,可以表示0~255。如果想要表示有符号整数,就要将最转载 2017-08-18 17:34:56 · 2829 阅读 · 0 评论 -
Session一致性架构设计
一、缘起什么是session?服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。 Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。 什么是session一致性问题?只要用户不重启浏览器,每次http转载 2017-07-12 00:56:31 · 302 阅读 · 0 评论 -
<context:annotation-config/>,<mvc:annotation-driven/>和<context:component-scan>之间的关系
现在常用框架中SpringMVC.xml配置是:和那么呢?首先看一下三个注解各自定义:① 1.如果你想使用@Autowired注解,那么就必须事先在 spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。2.如果想使用@Resource 、@PostConstruct、@PreDestroy等注解就必须声明Comm转载 2017-07-12 00:47:48 · 270 阅读 · 0 评论 -
RBAC权限管理
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图)角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员转载 2017-06-02 11:25:42 · 344 阅读 · 0 评论 -
Java数据库连接池的几种配置方法(以MySQL数据库为例)
Java数据库连接池的几种配置方法(以MySQL数据库为例) 一.Tomcat配置数据源:前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中1.方法一:在WebRoot下面建文件夹META-INF,里面建一个文件context.xml,如下: type="javax.sq转载 2016-03-30 21:41:36 · 733 阅读 · 0 评论 -
关于 tomcat 集群中 session 共享的三种方法
前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享。 建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session ,还可以做其他用途,一举几得啊。1、使用 filter 方法存储这种方法比较推荐,因为它的服务器使用范围比较多,不仅转载 2016-02-02 17:42:38 · 463 阅读 · 0 评论 -
Spring 3 AOP 概念介绍
AOP概念AOP(Aspect Oriented Programming),即面向切面编程(也叫面向方面编程,面向方法编程)。其主要作用是,在不修改源代码的情况下给某个或者一组操作添加额外的功能。像日志记录,事务处理,权限控制等功能,都可以用AOP来“优雅”地实现,使这些额外功能和真正的业务逻辑分离开来,软件的结构将更加清晰。AOP是OOP的一个强有力的补充。AOP术语AOP的术语不太转载 2016-02-02 17:15:13 · 396 阅读 · 0 评论 -
集成Dubbo服务(Spring)
Dubbo是什么?Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含:远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程转载 2015-08-01 18:01:41 · 387 阅读 · 0 评论 -
使用Eclipse Memory Analyzer分析Tomcat内存溢出
一次使用Eclipse Memory Analyzer分析Tomcat内存溢出博客分类:JAVA 前言在平时开发、测试过程中、甚至是生产环境中,有时会遇到OutOfMemoryError,Java堆溢出了,这表明程序有严重的问题。我们需要找造成OutOfMemoryError原因。一般有两种情况:1、内存泄露,对象已经死了,无法通过垃圾收集器进行自动转载 2015-07-20 14:59:22 · 380 阅读 · 0 评论 -
温故而知新-Steel Mdp 笔记(原理篇)
同样的客观存在的事物,在不同的阶段我们对它们的认知程度是不一样的。因为认知主体在变化,外界环境在变化、客观事物本身也可能在变化。温故而知新,近日再次翻出之前看过的steel-mdp源码,再次仔细拜读,又有不一样的收获。在感叹写这个框架的人如此诣熟Spring框架的同时,也随手记录下心得及这个框架的运行原理。先借用一下Martin大师的两张MDP 客户端和服务端的图来异常一下STEEL原创 2015-07-20 19:59:46 · 1580 阅读 · 0 评论 -
Spring深入挖掘:Spring在Web容器中是如何启动的
引言 记得刚刚接触Spring时,只是知道在web.xml配一个ContextLoaderListener,再通过contextConfigLocation配置一个配置文件就可以了。具体容器启动时到底做了些什么?Spring窗口是如何启动的?一直觉得是很底层很高深的东西。在那时,容器启动时出了问题往往是一头雾水,更不用说通过扩展插手Spring的启动过程了。典型的Spring Web原创 2015-07-20 19:21:33 · 5064 阅读 · 1 评论 -
spring深入发掘-IOC容器解读系列-BeanFactory
API和SPI提到API,我们所有人都熟悉,但是提到SPI,相信就有人挠头了。要了解Spring的BF和AC体系,区分这两个概念比较重要。API是"应用编程接口",Application Programming Interface;SPI是"服务提供者接口",Service Provider Interface。API是面向使用者而言的接口,使用者调用接口来完成需求;SPI是面向实现者的接原创 2015-07-20 19:22:53 · 673 阅读 · 0 评论 -
Spring RMI
Spring整合RMI的原理客户端的核心是RmiProxyFactoryBean,包含serviceURL属性和serviceInterface属性。通过JRMP访问服务。JRMP JRMP:java remote method protocol,Java特有的,基于流的协议。 服务端暴露远程服务RmiServiceExporter把任何Spring管理的Bean输出成一个转载 2015-07-29 01:05:56 · 346 阅读 · 0 评论