Java
文章平均质量分 61
shadon178
很多技术不用就都忘记了,以后要多写博客了,多交流才能印象深刻。
展开
-
LockSupport的park和unpark操作
以前见到过很多次这个类—java.util.concurrent.locks.LockSupport,然而却没有当一回事。一次偶然的机会看到dump文件中很多park操作,这才仔细的研究了一番。LockSupport类似于信号量中的二元信号,主要有如下2个方法: public static void unpark(Thread thread) 释放thread线程的许可证 pub...原创 2018-03-13 18:20:32 · 3644 阅读 · 1 评论 -
私有锁对象模式
// private lock object idiom - thwarts denial-of-service attack private final Object lock = new Object(); public void foo() { synchronized (lock) { ... } }优点:防止其他客户端超时的持有锁对象,从而避免客户端的拒原创 2016-01-05 23:17:30 · 1799 阅读 · 0 评论 -
Java多线程之可阻塞的队列
研究多线程的时候在JDK文档中发现一个实现阻塞队列的好案例,记录下来,也跟大家分享一下! 注意:try...finally...是为了防止线程挂死之后没有解锁。问题:一直没有明白一个问题,就是为什么要2个Condition,觉得一个Condition不会出现任何问题。恳请各位网友能解决小弟的疑问!原创 2014-03-02 21:13:21 · 729 阅读 · 0 评论 -
Dump文件分析
本文主要介绍Dump文件结构,理解Dump文件对于分析线程高占用、死锁、内存溢出等高级问题有非常重要的指导意义。什么是Dump文件Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。 Dump文件是用来给程序编写人员调试程序用的,这种文件必须用专用工具软件打开。如何生成Dump文件使用命令:jstack pid 可以查看到当前运行的java进程...原创 2018-03-13 17:34:39 · 29012 阅读 · 0 评论 -
Collection.synchronized*方法注意事项
引API的一句话:返回指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成所有对底层实现列表的访问。在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步: List list = Collections.synchronizedList(new ArrayList()); ... synchronized(list) {原创 2016-01-05 22:46:20 · 1056 阅读 · 0 评论 -
Java多线程之读写锁经典案例
在Java的JDK文档中发现一个用读写锁写的缓存器,拿来跟大家分享下。原创 2014-03-02 17:58:15 · 1045 阅读 · 0 评论 -
Feign全局配置和局部配置
Feign全局配置和局部配置在使用Feign的时候需要注意是否为全局配置和局部配置,否则可能会导致各种奇怪异常,而且在调试的是否也不容易看出问题。全局配置和局部配置的差别比较微妙,稍不注意可能会出问题。因此,这里总结给大家,防止大家也出现异常的问题。全局配置:@Configurationpublic class FeignConfiguration { @Bean public FeignBasicAuthRequestInterceptor basicAuthRequestInt原创 2021-10-02 13:05:53 · 5053 阅读 · 1 评论 -
Feign 400错误引发的一系列问题
Feign 400错误引发的一系列问题问题介绍在使用Feign进行远程调用的时候出现非常奇怪的400错误,错误信息大概如下:feign.FeignException: status 400 reading并且还带有2个非常奇怪的问题:一个前端请求接口,到达后端的时候会发起2次相同的Feign远程调用,但第一次成功,但是第二次会失败,错误信息如上。一个前端请求接口,达到后端的时候调用Feign接口的时候会卡死。问题定位通过开启debug模式,查看输出日志发现,2个Feign接口都调用成功了原创 2021-10-02 12:22:54 · 1455 阅读 · 0 评论 -
线程上下文类加载器在项目中的应用
项目背景支持多种数据源、多种版本的数据库元信息(表信息、字段信息等)同步功能。为了加快同步效率,用到了线程池以此来加快同步效率。面临的问题因为有不同版本、不同数据库的驱动jar,因此不可能将所有的驱动jar都放在一起,因此使用了动态加载jar的方式来隔离不同的驱动jar。初版设计首先设计了所有数据源共同使用的接口,放在web模块,接口如下:public interface GetDBMetaDao { List<TableInfo> getAllTable(String原创 2021-08-07 12:12:01 · 279 阅读 · 0 评论 -
System.currentTimeMillis()和System.nanoTime()的区别
System.currentTimeMillis()返回的是1970 年 1 月 1 日午夜到目前的毫秒数,建议主要用于获取时间,而不要用于计时,因为在计时的过程中,时间可能受NTP(时间服务器)的影响产生计时误差。System.nanoTime()返回的是一个会不断自增的、精确计时的纳秒数,不受NTP的影响,因此不能用于获取时间,但是非常适合用于精确的计时场景。总结1、System.currentTimeMillis()适合获取时间的场景;2、System.nanoTime()适合计时的场景;原创 2021-07-17 09:33:44 · 856 阅读 · 0 评论 -
Java性能优化建议
大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识。是的,这并不没有错。诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这并不意味着你在没有获得这些经验和知识之前就不能做任何事。下面有几个很容易遵循的建议和最佳实践能够帮你创建一个性能良好的应用程序。这些建议中的大多数都是基于Java的,但是也不一定,也有一些是可以应用于所有的应用程序和编程语言的。在我们分享基于Jav...原创 2019-03-24 22:22:49 · 225 阅读 · 0 评论 -
ArrayList循环遍历并删除元素的陷阱
在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出bug。不妨把这个问题当做一道面试题目,我想一定能难道不少的人。今天就给大家说一下在ArrayList循环遍历并删除元素的问题。首先请看下面的例子:import java.util.Arra...转载 2018-03-15 09:10:25 · 440 阅读 · 0 评论 -
request中参数(parameter)和属性(Attribute)的区别
在JAVA WEB开发中经常遇到获取请求参数的值和在request对象中set或者get属性,初学者往往容易混淆,那么二者之间关系到底如何呢?下面是个人的总结:区别:来源不同: 参数(parameter)是从客户端(浏览器)中由用户提供的,若是GET方法是从URL中提供的,若是POST方法是从请求体(request body)中提供的; 属性(attribut原创 2017-02-05 17:36:53 · 20748 阅读 · 4 评论 -
ArrayList使用小结
最近研究到一个问题,在使用ArrayList的时候发现的,当遍历List的时候不要修改List中的内容,具体可以看看ArrayList的源代码。如果需要更改可以使用CopyOnWriteArrayList。原创 2014-03-07 22:21:21 · 664 阅读 · 0 评论 -
java之代理
Java之代理... 1一. 概念... 1二. jdk的静态代理... 1三. jdk动态代理... 4四. cglib 动态代理... 7五. jdk动态和cglib动态代理比较... 9六. 面向切面编程... 101.几个应用... 132.面向切面的概念...转载 2014-05-03 22:52:28 · 439 阅读 · 0 评论 -
Java之Exception
在用Spring 的AOP进行事务管理的时候原创 2014-05-08 21:16:24 · 590 阅读 · 0 评论 -
浮点型数据经度丢失问题
问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么?来自MSDN的解释:http://msdn.microsoft.com/zh-cn/c151dt3s.aspx为何浮点数可能丢失精度浮点十进制值通常没有完全相同的二进制表示形式。 这是 CPU 所采用的浮点数据表示形式的副作用。为此,可能会经历一些精度丢失,并且一些浮点运算可能会产生意外的结果。转载 2014-05-08 21:34:28 · 1092 阅读 · 0 评论 -
KMP算法原理解析
这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面,我用自己的语言,试图写一篇比较好懂的KMP算法解释。 1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"ABCDABD"的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。 2.转载 2014-07-26 16:52:43 · 424 阅读 · 0 评论 -
Java参数按值传递和按引用传递
参数按值传递:传递到方法中的数据是参数的副本,因此方法内部对参数的修改不会影响外部变量。受影响的参数类型有:8种基本类型和String对象。参数按引用传递:传递到方法中的数据是参数的引用,内部对参数的修改也会作用到外部。受影响的参数类型有:除String对象和8种基本类型的包装类以外其他所有对象类型、数组类型。原创 2015-09-09 21:30:45 · 333 阅读 · 0 评论 -
一笑而过之面试小题
public class Demo01 { public static void change(Integer i) { System.out.println(i); } public static void main(String[] args) { ((Demo01)null).change(10); }}今天出现这样的奇葩面试题,一时没回过神了,虽然还是答原创 2015-09-09 21:47:38 · 318 阅读 · 0 评论 -
MyBatis缓存
Mybatis缓存一、MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。 2. 二级缓存与一级缓存其机制相转载 2015-09-20 21:55:11 · 325 阅读 · 0 评论 -
Java延迟初始化的2种经典模式
静态域的延迟初始化: // Lazy initialization holder class idiom for static fields private static class FieldHolder { static final FieldType field = computeFieldValue(); } static FieldType getField() { r原创 2016-01-05 23:40:46 · 1047 阅读 · 0 评论 -
String在编译时和运行时的不同
废话不多说,上代码:package test.pxd.pongo;public class TestMap { public String get(String a,String b){ return a + b; } /** * @param args */ public static void main(String[] args) { TestMap m原创 2014-03-08 00:32:09 · 952 阅读 · 0 评论