java
joenqc
这个作者很懒,什么都没留下…
展开
-
BigDecimal 舍入模式(Rounding mode)介绍
原文链接:https://my.oschina.net/sunchp/blog/6709091 RoundingMode介绍package java.math;public enum RoundingMode { UP(BigDecimal.ROUND_UP), DOWN(BigDecimal.ROUND_DOWN), CEILING(BigDecima...转载 2018-10-29 11:59:16 · 3853 阅读 · 1 评论 -
java数据库连接池实现原理
原文:http://blog.csdn.net/frightingforambition/article/details/25464129 一、为什么在连接数据库时要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性转载 2017-07-22 17:52:07 · 746 阅读 · 0 评论 -
java中阻塞队列BlockingQueue的用法
原文:http://blog.itpub.net/143526/viewspace-1060365/在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。转载 2017-07-18 16:56:46 · 276 阅读 · 0 评论 -
Callable和Future
原文: http://blog.csdn.net/ghsau/article/details/7451464接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功转载 2017-07-29 15:48:30 · 324 阅读 · 0 评论 -
jedisLock—redis分布式锁实现
jedisLock—redis分布式锁实现一、使用分布式锁要满足的几个条件:系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者NoSQL)同步访问(即有很多个进程同事访问同一个共享资源。没有同步访问,谁管你资源竞争不竞争)二、应用转载 2017-06-15 15:17:18 · 347 阅读 · 0 评论 -
该让log4j退休了 - 论Java日志组件的选择
1.日志异步化,使用日志缓存,满了之后再进行IO操作刷到磁盘中。2.slf4j使用 桥接模式 和适配器模式。桥接模式解决了一些项目或框架中,由于一些原因无法将jcl(commons logging)直接替换掉的问题,提供桥接jar包,将日志桥接到slf4j上;适配器模式,或者说门面模式(Facade),slf4j是一个“日志门面”(Logging Facade),而不是一个完整的日转载 2017-07-04 15:57:41 · 400 阅读 · 0 评论 -
一个velocity的#set指令赋值null的坑
#set($price = $item.sku.price) 如果在一个两次循环里 item.sku.price第一次是5.0,第二次是null,那么$price的值为两个5.0,因为默认情况下给velocity变量使用#set指令赋值时,如果等式右边为null,那么不会解除等式左边变量的引用。 If the RHS is a property or method reference tha原创 2017-06-29 19:03:39 · 1764 阅读 · 0 评论 -
Enum使用及原理
首先,直接继承抽象类Enum而不选择使用enum关键字创建枚举类是行不通的,通不过编译:所有enum都继承了java.lang.Enum抽象类,该类的声明为public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable该抽象类中实现的 oridinal、equals、hashCo原创 2017-05-20 22:05:19 · 6051 阅读 · 0 评论 -
Cloneable接口与Clone方法
Object类中有一clone()方法,定义如下:protected native Object clone() throws CloneNotSupportedException;为native方法,且访问权限为protected(包内及其子类)。jdk官方文档建议,对于任意对象x,表达式 x.clone() != x 为true、x.clone().equals(x) 为true、x.clon原创 2017-05-07 20:46:40 · 644 阅读 · 0 评论 -
一个StackOverFlowError
public Class SOFE{ private SOFE sofe = new SOFE(); public static void main(String args[]){ SOFE s = new SOFE(); }}Exception in thread "main" java.lang.StackOverflowError at SOF原创 2017-05-07 20:24:54 · 310 阅读 · 0 评论 -
大端BigEndian、小端LittleEndian与字符集编码
BigEndian(大端):低字节在高内存地址 LittleEndian(小端):低字节在低内存地址也就是看低字节在高内存地址还是低内存地址,也就是看低字节在前还是高字节在前,低字节在前自然是小端,高字节在前就是大端。所谓大小端,是指字节存储或传输时的顺序。注:最小寻址单位是指特定的计算机硬件机构所支持的最小数据访问块大小。以个人电脑为例,内存机构的最小寻址单位为1个字节(1 Byte)即8个bi原创 2017-05-04 18:34:00 · 10580 阅读 · 0 评论 -
深入了解java中的编码和字符集
参考资料: Java中的字符集编码入门 java编译器编码和JVM编码问题?Unicode是一个字符集,就好像一个字典一样,收录了全世界的文字啥的,英文是charset;ascii、gbk、utf-8、utf-16叫字符集编码,英文是encoding,例如utf-8和utf-16编码是Unicode字符集的实现,规定了字符在计算机中的具体编码规则,也就是二进制到底是什么样的,在计算机中的意思是,原创 2017-02-06 12:58:50 · 2890 阅读 · 2 评论 -
关于hashCode你必须要知道的三件事
在java中,hashCode()和equals( )要遵守的规范:Objects that are equal must have the same hash code within a running process在运行时,相互equals的对象必须拥有相同的hash code逆命题:相同hash code的对象相等(equals)。 否命题:不相等的的对象(equals)拥有不同的has翻译 2017-05-02 20:55:37 · 537 阅读 · 0 评论 -
jdk、第三方jar中有关工厂模式或单例模式
Tomcat中StringManager类,工厂模式,通过StringManager.getManager(Constants.Package) ,根据包名获取相应的StringManager对象,即每个包共享一个或几个StringManager对象(因为Locale国际化原因,一个包可能共享多个StringManager对象)原创 2017-04-15 14:15:44 · 610 阅读 · 0 评论 -
jdk、第三方jar中WeaReference的应用
1 ThreadLocal.ThreadLocalMap的Entry继承了WeakReference< ThreadLocal > ,即ThreadLocal对象为弱引用,Entry以ThreadLocal对象的弱引用为key:static class Entry extends WeakReference<ThreadLocal> { /** The value associated wi原创 2017-04-15 14:02:46 · 245 阅读 · 0 评论 -
commons pool2对象池入门
apache commons pool,官方称之为 Generic object pooling component,即通用的对象池组件。 The Apache Commons Pool open source software library provides an object-pooling API and a number of object pool implementations. 既原创 2017-07-23 20:23:40 · 371 阅读 · 0 评论 -
commons pool2 之GenericObjectPool(未完)
commons pool2 的org.apache.commons.pool2.impl包下提供了一个对象池的具体实现GenericObjectPool。类内部使用一个ConcurrentHashmap存储所有的objects:private final Map<IdentityWrapper<T>, PooledObject<T>> allObjects = new Concurr原创 2017-07-23 22:58:05 · 646 阅读 · 0 评论 -
动态代理在mybatis中的应用
mybatis最令人印象深刻的特性恐怕就是interface与mapper的映射了。开发者只需要声明接口,并编写对应在xml中的sql,一个可以提供服务的dao层功能就完成了,竟然不需要编写interface的实现类。这个感觉起来非常神奇也令人疑惑不解的特性正是利用jdk的动态代理技术实现的。事实上,mybatis内部使用了多种动态代理技术,包括jdk自带、javassist、cglib等,这篇文...原创 2018-05-08 00:08:05 · 3169 阅读 · 2 评论 -
偏向锁、轻量级锁、重量级锁之间的变迁
对象锁共有四种状态:无锁、偏向锁、轻量级锁、重量级锁,锁竞争程度依次加重。对象锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。自旋是一种获取锁的策略,存在于获取轻量级锁的过程中,不是一种锁,java的对象锁只有上述四种。假设现在有一个对象O,刚刚被新建,处于无锁状态。此时线程A尝试获取对象锁,如果此时jvm已经开启了偏向锁,那么线程A会尝试CAS操作将自己的线程Id...原创 2018-02-27 11:55:16 · 917 阅读 · 0 评论 -
linux下查看程序日志的一些总结
在开发中,我们经常在代码中添加日志,主要作用是程序在服务器上跑出bug时方便进行问题排查,因为在服务器上不可能像在本地运行程序那样debug,所以日志对于我们非常重要,几乎就是解决问题唯一能依赖的东东。在查看服务器日志时,经常使用以下几条命令:tail -300f xxx.log | grep "userId"tail -300f xxx.log | grep "userId" -B 20 -C原创 2017-03-09 15:50:23 · 14121 阅读 · 0 评论 -
Unsafe与CAS
原文 :http://www.cnblogs.com/xrq730/p/4976007.htmlUnsafe与CASUnsafe简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。这个类尽管里面的方法都是public的,但是转载 2017-06-05 14:32:23 · 335 阅读 · 0 评论 -
java集合类总结
集合接口java集合接口被分为了两大组,最基本的接口 java.util.Colllecttion,拥有如下的派生接口:java.util.Set 不重复的集合java.util.SortedSet 有序不重复集合java.util.NavigableSet 有序不重复集合,能够返回视图的能力java.util.Queue 队列java.util.concurrent.BlockingQu原创 2017-08-23 16:43:41 · 353 阅读 · 0 评论 -
jvm参数总结
http://blog.csdn.net/csujiangyu/article/details/52071473http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html转载 2017-08-27 19:56:39 · 322 阅读 · 0 评论 -
直接内存DirectBuffer
原文:http://blog.csdn.net/dustin_cds/article/details/50857727直接内存大小设置:http://blog.csdn.net/cloud_ll/article/details/50815671直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是这部分内存转载 2017-08-27 17:59:45 · 1294 阅读 · 0 评论 -
转:Leaf——美团点评分布式ID生成系统
好文章 https://tech.meituan.com/MT_Leaf.html转载 2017-08-26 18:23:22 · 919 阅读 · 0 评论 -
springmvc拦截器工作源码
当一个请求到达后,会调用DispatcherServlet的doDispatch( )方法,在此方法中调用拦截器,调用方法栈如下:doDispatch( )方法源码如下:protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HandlerEx原创 2017-08-22 15:06:56 · 1080 阅读 · 0 评论 -
深入理解Java之线程池
原文:http://www.importnew.com/19011.html在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并转载 2017-08-05 14:58:24 · 293 阅读 · 0 评论 -
mysql批量导入数据遇到的问题
最近项目中有一个需求,需要把大概150W条数据导入mysql数据库中,一共六张表,数据最多的表大概有100W条数据。 因为是一次性导入,不会经常使用,因此计划写成一个小程序,使用原生JDBC,打成jar包,放到服务器上运行。第一次写完,用maven打jar包,打出的jar包不包含mysql驱动等第三方jar,并且java -jar 时没有程序入口,需要在pom.xml文件中加入如下plugin:<原创 2017-07-28 16:41:52 · 1620 阅读 · 0 评论 -
正确理解Threadlocal类以及内存泄漏问题
2017.8.5更新:tomcat低版本在reload或者stop一个web app时(一个tomcat可以运行多个web app),如果tomcat线程池中的线程中的threadlocalmap持有了由某个web app classloader加载的类,那么该web app classloader是无法被回收的,在tomcat7.0中,引入了ThreadLocalLeakPreventionLis原创 2017-03-12 21:59:55 · 1541 阅读 · 3 评论 -
如何实现一个简单的rpc框架
一、RPC简介RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议。它允许像调用本地服务一样调用远程服务。它可以有不同的实现方式。如RMI(远程方法调用)、Hessian、Http invoker等。另外,RPC是与语言无关的。 RPC示意图如上图所示,假设Computer1在调用sayHi()方法,对于Comp转载 2017-08-15 17:52:34 · 5639 阅读 · 0 评论 -
关于Integer类和Long类对值的缓存问题
这是个老生常谈的问题了,在此不展开细说,具体细节大家看下jdk源码就可以了。 1. Integer和Long都默认缓存值从-128到127的对象,缓存工作在静态块完成,在类生命周期(loading verify prepare resolving initial using unload)的初始化阶段执行。 2. Integer的缓存上界high可以通过jvm参数-XX:AutoBoxCache原创 2017-08-01 14:02:44 · 1686 阅读 · 0 评论 -
隐藏极深的空指针- -
最近测试反馈了一个bug,经过查看日志发现是mq消息重复消费导致的,一开始连续重试,等重试了一会,后来就变成了每隔两分钟重试一次。这应该是mq框架的功能,遇到某种情况,mq框架认为消费者没有能成功把消息消费掉,所以一直不断尝试,重新消费。最大的可能就是业务代码抛异常了,一路抛给了mq框架,所以mq框架才会如此鬼畜。但是在项目日志中完全没看到异常日志啊?怎么回事。可能正是因为异常一路抛出去了,在业务代原创 2017-04-13 18:41:00 · 320 阅读 · 0 评论 -
通过Tomcat源码学习ClassLoader
…原创 2017-04-17 20:32:37 · 242 阅读 · 0 评论 -
图解sendRedirect,include,forward的区别
原文:http://blog.csdn.net/java2000_net/article/details/3002763最近遇到几个人出现了和这三个有关的问题,特别是sendRedirect使用request.getAttribute的问题。我这里给出三个的主要区别并提供一个图形参考。一、sendRedirect原文:http://www.java2000.net/p1转载 2017-02-25 13:44:07 · 320 阅读 · 0 评论 -
servlet规范之ServletRequest中getAttribute和getParameter方法的区别
先把文档贴出来:/** * * Returns the value of the named attribute as an <code>Object</code>, * or <code>null</code> if no attribute of the given name exists. * * <p> Attributes can be set two ways.原创 2017-02-25 14:37:35 · 1100 阅读 · 0 评论 -
tomcat、apache、nginx之间的关系
参考资料: https://www.zhihu.com/question/32212996简要说明:tomcat通常用作servlet容器,而apache和nginx通常用作http servertomcat通过servlet动态生成内容并返回给客户端,而apache和nginx通常用作静态服务器,比如将静态html页面、js、css等文件直接返回给客户端,而不将此类静态请求转发给后端的t原创 2017-02-24 17:45:59 · 1837 阅读 · 0 评论 -
关于服务器时钟不同步的问题
测试测试时,发现一个bug,订单的xx支付时间比下单时间早一秒。经过查看代码,发现生成下单时间的方式是在java中new Date( ),然后将值插入数据库,然后xx支付时间是在mybatis的xml中使用数据库now( )函数在数据库服务器生成的,由于java应用服务器和数据库服务器时钟不同步,所以造成了这种不确定性问题。解决方法:同步java应用服务器和数据库服务器的时钟,这个需要运维写脚本维原创 2017-03-03 17:40:15 · 3524 阅读 · 0 评论 -
.class文件的version问题
大家都知道,java编译器在编译.java文件时,会在.class文件中写入编译的版本信息,供jvm进行检查。比如一个版本为1.7的jvm读到一个经1.6编译器编译的.class文件,它会接受,因为java语言是 向后兼容的,但是读到一个经1.8编译器编译的.class文件,它就不接受了,因为这个.class文件里的语法或所用jdk类库等在1.7中不支持。下面来实践一下。首先了解一下jdk编译器版本原创 2017-02-23 12:54:09 · 1113 阅读 · 0 评论 -
web项目中实现从网页导出Excel的功能
实现Spring的 AbstractExcelView 抽象类因为 AbstractExcelView 使用了Apache的POI库进行Excel处理,因此实现类也使用POI处理Excel在Controller中返回一个new ModelAndView(AbstractExcelView的子类)原创 2017-02-20 16:47:45 · 3056 阅读 · 0 评论 -
两个开发中碰到的sql错误
select * from table1 o , table2 i left join table3 p on o.id=p.id结果报错 [Err] 1054 - Unknown column 'o.order_id' in 'on clause'原因是left join 连接的时左右相连的两个table,连不到table1 oselect * from table where column >原创 2017-02-20 16:10:50 · 321 阅读 · 0 评论