- 浏览: 332450 次
- 性别:
- 来自: 北京
最新评论
-
bbls:
有用有用有用
java-jvm-jstack-(监视器和锁的概念) -
王新春:
小侠有点帅哦 写道此流怎么关闭新春这个实现 可以不关闭的,哈哈 ...
源码剖析之java.io.ByteArrayOutputStream -
小侠有点帅哦:
此流怎么关闭新春
源码剖析之java.io.ByteArrayOutputStream -
cumt168:
写的很好为什么初始化参数,年轻代-Xmn10M def new ...
jvm之内存申请过程分析 -
ronin47:
应该是跟共享域名思路差不多,根据cookie的key作判断
跨域:一种通过服务端解决跨域的实现
文章列表
Linux中用stat命令查看文件时3个时间点解析:
access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间
modify time:表示我们最后一次修改文件的时间
change time:表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等。
结论:
1,当我们仅仅只是读取文件时,access time 改变,而modify,change time 不会改变
2,当修改文件时,access,modify,change time 都会跟着改变
3,当修改文件属性时,change time 改变,而access,modify time 不变。
4,ls -l显示 ...
面试题目:
I lover your name 变成: name your lover I
我的做法:(我是考虑到传递的分割串可能为多个字符)
package com.data;
/**
* 字符串反转 源字符串:I lover your name 反转后:name your lover I
*
* 思路:从name 的e开始检索lenth长度为sep的字符串,比较和sep是否一致
* @author xinchun.wang
*
*/
public class ReverseString {
/**
* 字符串反转
...
快速排序算法:是排序算法中最常用的算法之一。
复杂度:o(nlog2(n))
思想:随即找某一个位置的值为n,把n放在应该所在的位置index,把数组中小于n的值放在index之前,大于n的值放在index之后。然后对index之前的的数组递归以上逻 ...
- 2013-05-27 08:24
- 浏览 2156
- 评论(4)
基数排序:是针对特定规则的数据进行优化的一种排序算法,效率应该是所有算法中最高的排序算法,它不再考虑数据整体的大小,而是考虑整体的分解后的部分大小和整体大小之间的关系而形成的一种算法,分解后的部分为m,那么复杂度为o(m*n),因为m一般很小为常量,所以复杂度近似为o(n)!!!
实现的思想:先排个位,然后排序十为,然后百位,因为位数越高,就越能决定数据的位置!!
下面这个小例子是通过补位的方式实现的一个算法,注意仅仅为了演示这种排序的逻辑,有更稍加改进就会有效率提升!!(改进版很快给出O(∩_∩)O)
package cn.horizon.sort;
import java.u ...
ConcurrentModificationException 异常是使用java集合类经常抛出的一种异常。
这种异常常被描述为:快速失败异常,一般是我们程序错误使用导致的,很少会故意允许这种异常发生已保证逻辑上的完整。
那下面讨论什么时候会发生这种异常呢? 以ArrayList为例!
1、单线程中,一边遍历(forEach 和 list.iterator()),一遍删增数据。
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<10;i++){
...
关于hash
https://www.oschina.net/translate/how-to-implement-javas-hashcode-correctly
jdk提供的线程安全的类似HashMap实现的数据结构:ConcurrentHashMap
功能特点:
1、具备HashMap的一般规范,和HashMap的基本实现原理一致。(底层数据结构:数组+链表)
2、和HashTable(底层基于:当前对象锁)相比,有更高的并发效果。(ConcurrentHashMap底层基于:分段锁)
内部数据结构:ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 ...
CopyOnWriteArraySet :是基于CopyOnWriteArrayList 的实现。只是在添加之前先判断是否已经存储相关记录。
注意:此Set的实现和普通的HashSet 已经相差甚远了。HashSet 是基于HashMap的实现。 从实现的角度就能看出CopyOnWriteArraySet 的使用条件和list的血缘更近,使用的场景也更近!!
它最适合于具有以下特征的应用程序:
set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。
它是线程安全的。
因为通常需要复制整个基础数组,所以可变操作(add、set 和 remove 等等)的开销 ...
CopyOnWriteArrayList:jdk1.5新增的线程安全的ArrayList实现。
使用场景:读取频繁,写较少。
理由:底层的安全性 本质上是依赖于线程读取的数据副本来实现的。因此每次写都是要复制底层数组数据的,如果写频繁势必会造成大量的性能消耗。
如果写非常频繁,那么可以根据实际情况选择:vector 或者Collections.synchronizedList获取同步保证。
1、底层的支持数据接口是数组,volatile 限制了array对象的可见性。
private volatile transient Object[] array;
2、查询类函数的线程安全保证。由于查 ...
单例模式:
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
单例模式的特点:
单例类只能有一个实例。
单例类必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。
单例模式是最简单的设计模式,但是完全使用java构造一个线程安全的高效的单例,是需要有一定线程安全理论基础的,甚至需要理解java的内存模型!
JDK中的使用案例:
java.lang.Runtime
java.lang.NumberFormat
下面是三种最常用的构造单例的形式,并一一分析使用场景!
1、非延迟加载的单例类(饿汉式单例类)。 ...
单位的应用都是基于spring的框架,maven做项目管理。原来我们的单元测试很麻烦,尤其是controller层的测试,常常需要copy WEB-INF下的IOC配置文件。
其实不用copy,可以通过file的形式进行加载。
描述:maven管理的javaEE项目 ,用spring 的SpringJUnit4ClassRunner做controller层的单元测试。
问题的来源:一般情况下(得益于spring的父子容器),父容器一般包含Service,Dao层的ioc配置 ,一般放在src/main/resources下,由org.springframework.web.context.C ...
前两天去面试 有一道题目,答的很不满意。先是理解错题意,后是感觉做不出索性交卷,在等待面试中想清楚了这道题的思路。
当时那会真是糊涂,最初想的是考察join的含义, 题目写了一半感觉不对头,后来考虑 java 5 提供的各种多线程控制组件(好久不用,不熟悉了啊),也没想出办法,其实用最基本的wait notify 就能实现了,真真不该早叫卷。。。
join:是等待另外一个线程的完全结束。现在需要循环打印,显然是不行的。
题目想考察的是线程间的交互控制,即 wait notify 来实现的交互
题目:启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC....
...
java io流的分类:
1、从io流的两大操纵数据的形式分类。input stream 、output stream
2、从io流的操纵的最细粒度分类。byte(stream)、char(Reader)。
3、从使用场景的角度分类。
过滤流的概念:
FilterInputStream :输入过滤流,此流的任何继承者都必须提供underlying input stream。
FilterOutputStream:输出过滤流,此流的任何继承着都必须提供数据输出的underlying output stream 。
类似的有:FilterReader,FilterWriter
其特殊之处: ...
与缓冲输入流java.io.BufferedInputStream 对应的输出缓冲流为:java.io.BufferedOutputStream
功能是缓冲输出。再次强调缓冲的本质是:byte数组操作。
源码分析如下:
package java.io;
/**
* 缓冲输出流。实现此类,必须提供一个underlying ou ...
java 提供了读写缓存api。
byte:java.io.BufferedInputStream 、 java.io.BufferedOutputStream
char: java.io.BufferedReader、java.io.BufferedWriter
好处:
1、可以避免一次性写入大量的数据,这样可能瞬间造成内存占用太多,导致系统不稳定。
2、可以对写入较少的数据进行缓冲,避免写入输入承载终端太过频繁。
缺点:几乎没有。
所以几乎任何时候我们都有必要使用缓存的流进行包装。
记得刚学习java io时,听到缓存,感觉很神秘。其实java提供的缓存实现的数据结构就是数组,jav ...
对应于 java.io.ByteArrayInputStream 的byte内存输入流,jdk同样提供了java.io. ByteArrayOutputStream byte[]输出流的概念。
功能很简单,就是通过write方法 把字节写入到 byte[]中,取的时候直接toByteArray或者toString() 即可。
注意:此类是线程安全的。
实现方式:通过对方法 添加synchronized 关键字实现,另外Reader 顶层类则是通过Lock 锁,锁定当前流对象实现的。
功能分析如下:
package java.io;
import java.util.Arrays; ...