- 博客(29)
- 收藏
- 关注
转载 Java堆结构PriorityQueue完全解析
在堆排序这篇文章中千辛万苦的实现了堆的结构和排序,其实在Java 1.5版本后就提供了一个具备了小根堆性质的数据结构也就是优先队列PriorityQueue。下面详细了解一下PriorityQueue到底是如何实现小顶堆的,然后利用PriorityQueue实现大顶堆。PriorityQueue的数据结构PriorityQueue的逻辑结构是一棵完全二叉树,存储结构其实是一个数组。逻辑结构层次遍历...
2018-04-23 17:34:02 212
转载 Callable接口解析
1.接口的定义:public interface Callable<V> { V call() throws Exception; } 12342.Callable和Runnable的异同先看下Runnable接口的定义public interface Runnable { public abstract void run();}123Callabl...
2018-04-23 17:09:34 341
转载 由装饰者模式来深入理解Java I/O整体框架
前言Java里面的I/O这一部分看过很多遍,每次看完之后特别混乱,又是输入流,又是输出流,又是字符流,又是字节流,还有什么过滤流,缓冲流。每次看得我如入云里雾里,直到后面看了设计模式这一块,才算真正的对Java I/O这一块有了整体的了解,理解起Java流也就容易许多。这篇博客先介绍装饰者模式,然后结合Java流看看装饰者模式如何应用到Java流中的。装饰者模式装饰者模式:动态地将责任附加到对象上...
2018-04-23 16:26:58 215
转载 Java clone方法深拷贝浅拷贝完全解析
Java中对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1 使用new操作符创建一个对象2 使用clone方法复制一个对象那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时...
2018-04-23 11:10:57 169
转载 Java内存溢出(OOM)异常排查指南
这也许是目前最为完整的Java OOM异常的解决指南。1、java.lang.OutOfMemoryError:Java heap spaceJava应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:Heap space(堆空间)和Permgen(永久代):JVM内存模型示意图这两个区域的大小可以在JVM(Java虚拟机)启动时通过参数-Xmx和-XX:MaxPermSize设置,...
2018-04-19 16:27:19 1456
转载 内存泄露、内存溢出
内存泄露是指你的应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源,这是一种状态描述而内存溢出是指你的应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃,这事一种结果描述而且通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。...
2018-04-19 16:09:13 155
转载 异常、堆内存溢出、OOM的几种情况
1、堆内存溢出【情况一】: java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决: < jvm-arg>-Xms3062m < / jvm-arg> < jvm-arg>-X...
2018-04-19 16:04:00 304
转载 JNDI 的理解
JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之中的一个,不少专家觉得,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。 那么,JNDI究竟起什么作用?//带着问题看文章是最有效的 要了解JNDI的作用,我们能够从“假设不用JNDI我们如何做?用了JNDI后我们又将如何做?”...
2018-04-18 17:08:58 127
转载 缓存雪崩,缓存穿透解决方案
1. 缓存穿透:查询一个必然不存在的数据。比如文章表,查询一个不存在的id,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响。解决办法:对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。2.缓存失效:如果缓存集中在一段时间内失效,DB的压力凸显。这个没有完美解决办法,但可以分析用户行为,尽量让失效时间点均匀分布。 缓存雪崩缓存雪崩可能是因为数据未加载到缓存中,...
2018-04-18 17:03:41 449
转载 JAVA常量池
java常量池技术 java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,常量池存在于方法区中。String类也是java中用得多的类,同样为了创建String对象的方便,也实现了常量池的技术。测试代码如下:public class Test{pub...
2018-04-13 17:39:59 312
转载 String,StringBuffer与StringBuilder的区别|线程安全与线程不安全
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字...
2018-04-13 17:33:59 294
转载 HTML5的sessionStorage和localStorage
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage。sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除...
2018-04-12 17:22:28 132
转载 MySQL优化技巧
1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例: 复制...
2018-04-12 17:21:00 114
转载 Oracle迁移PostgreSQL总结
序号项目OraclePostgreSQL1当前时间SYSDATE可全部使用current_timestamp替换2序列SEQNAME.NEXTVALNEXTVAL('SEQNAME')3固定值列SELECT '1' AS COL1SELECT CAST('1' AS TEXT) AS COL14NVLNVL函数NVL可以用COALESCE函数替换5类型自动转换Oracle某些情况下支持类型自动转换...
2018-04-12 17:18:27 3125
转载 Struts2与SpringMVC区别
1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restfulurl,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标...
2018-04-12 17:14:35 142
转载 cron表达式
Cron 表达式包括以下 7 个字段:· 秒· 分· 小时· 月内日期· 月· 周内日期· 年(可选字段)特殊字符Cron 触发器利用一系列特殊字符,如下所示:· 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。· 问号(?)...
2018-04-12 17:13:25 181
原创 double-checked locking
publicstatic HttpClient getInstance() { try{ if(httpClient == null) { synchronized(_lock) { ...
2018-04-12 17:11:57 108
转载 GET、POST提交参数获取
1. get方式 get方式提交的话,表单项都保存在http header中,格式是 http://localhost:8080/hello.do?name1=value1&name2=value2这样的字符串。server端通过request.getParameter是可以取到值的。 2.post方式(enctype为缺省的application/x-www-form-urlenc...
2018-04-12 17:10:48 669
原创 TRUNCATE、DROP、DELETE区别
TRUNCATE TABLE 在功能上与不带 WHERE子句的 DELETE语句相同 二者均删除表中的全部行。但 TRUNCATE TABLE 比DELETE速度快,且使用的系统和事务日志资源少。 DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一项;TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,D...
2018-04-12 17:08:35 113
转载 关于InstantiationException错误的原因
could not initialization Dammanage:com.ibatis.dao.client.DaoException: Errorwhile configuring DaoManager. Cause: com.ibatis.dao.client.DaoException: Error configuringDAO. Cause: java.lang.Instantiat...
2018-04-12 17:06:27 16716
转载 Java多线程问题总结
1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都
2018-04-12 17:04:35 175
转载 SSO单点登录
SSO单点登录SSO英文全称Single Sign On.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。 SSO技术实现机制 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中...
2018-04-11 16:05:17 107
转载 Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
tomcat 的Connector 有三种模式:bio,nio.apr;下面来说一下他们各自的特性:Java BIO、NIO、AIO同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API...
2018-04-11 16:04:21 195
转载 WebLogic时控制台输出中文乱码解决方法
1.找到weblogic安装目录,当前项目配置的domain 2.找到bin下的setDomainEnv.cmd文件 3.打开文件,从文件最后搜索第一个setJAVA_OPTIONS=%JAVA_OPTIONS%(应该是倒数第四行,空行除外),修改为setJAVA_OPTIONS=%JAVA_OPTIONS% -Dfile.encoding=utf-8 4.保存文件,重新启动服务...
2018-04-11 15:57:43 829
转载 高并发操作、查询oracle数据库设计建议
(1)使用分布式垂直切分。由于已经使用了Oracle RAC 提供分布式的集群服务。所以对于产生大数据和高并发的表,可以采用数据库垂直分片(比如1-500号集中器的数据采集到数据库A、500-1000到B)。数据分片,是将整体数据分摊在多个存储设备上,这样每个存储设备的数据量相对就会小很多,以此满足系统的性能需求。分区可以提高可管理性、性能与可用性,从而给各种各样的应用程序带来极大的好处。当然一个...
2018-04-11 15:54:53 1637
转载 透彻理解NIO、BIO、AIO框架的原理
概述同步: 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。异步: 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API)。阻塞: ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回)。非阻塞: 柜台取款,取个号,然后坐...
2018-04-11 15:46:32 830 1
原创 SQl 的隐式转换
什么叫做隐式转换? 显示转换,就是你使用转换函数进行操作。 隐式转换,就是你不使用转换函数,默认就给转换了。比如定义一个int型的变量@a,然后给变量符值 set @a = '2' ,这个就会隐式转换,把字符转换成数字了。Oracle 隐式转换1 Oracle 隐式转换 Oracle中对不同类型的处理具有显式类型转换(Explicit)和隐式类型转换(Implicit...
2018-04-11 15:40:38 4194
原创 常用正则表达式
只能输入1个数字 表达式 ^\d$ 描述 匹配一个数字 匹配的例子 0,1,2,3 不匹配的例子 只能输入n个数字 表达式 ^\d{n}$ 例如^\d{8}$ 描述 匹配8个数字 匹配的例子 12345678,22223334,12344321 不匹配的例子 只能输入至少n个数字 表达式 ^\d{n,}$ 例如^\d{8,}$ 描述 匹配最少n个数字 匹配...
2018-04-11 15:28:42 142
转载 23种设计模式详解
一、设计模式定义: 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。二、设计模式分类:(1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。(2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
2018-04-11 15:20:56 153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人