自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(253)
  • 资源 (5)
  • 收藏
  • 关注

原创 Java 对象占用内存大小

Java 对象HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。Java 对象头包括Mark Word,Class Metadata Address,ArrayList(数组对象)三部分。Mark Word(32/64 bit)HotSpot虚拟机的对象头(Object Header)...

2019-03-24 11:30:12 2182 1

原创 Spring FactoryBean应用

Spring 中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean 即 FactoryBean。FactoryBean跟普通Bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBean的getObject方法所返回的对象。本文简单分析工厂FactoryBean的用法。FactoryBean接口定义package org.springframework.beans.fa...

2019-03-24 10:59:58 492

原创 url下载文件(重定向+cookie设置)

很多时候,下载文件时会重定向,并且要求携带cookie才允许下载,这种情况下,如果让下载支持重定向,并且设置cookie呢?下面的代码可以供大家参考。 public static void main(String[] args) throws Exception { String cookie = ""; HttpURLConnection conn ...

2018-05-08 22:28:38 4924 1

原创 guava cache

1、Guava Cache概述 Guava cache是一种本地缓存轻量级的缓存方案,底层依赖于ConcurrentHashMap,但比ConcurrentHashMap提供了更多的功能,比如缓存的回收(但是需要注意的是这种缓存回收机制并不是guava cache主动回收的,而是被动的基于缓存的读写进行回收的,这样的实现机制也是guava cache轻量级的一个原因之一)。2、Guava key回

2017-07-12 11:57:07 1424

原创 Transaction rolled back because it has been marked as rollback-only

我们知道spring事务回滚的机制是需要捕获运行时异常,当然也可以使用rollbackfor指定特殊的unchecked异常。如下代码所示:@Transactional@Overridepublic int getTran() { teamEnrollDao.save(tenroll); userEnrollDao.save(uenroll); return 1;}上面ser

2017-05-16 16:27:00 1286

原创 java session基于redis共享方案

session基于redis共享有两种基本的方案 1、基于容器自身的扩展,比如tomcat的session-manage,可以参考如下 地址进行配置https://github.com/jcoleman/tomcat-redis-session-manager 这个方案只适用tomcat容器,而且容器需要配置,这里不具体展开,有需要的可以参考上面的地址进行配置。但是这个方案有一个好处,可以适用

2017-03-29 15:25:37 12660

原创 docker dockerfile构建tomcat应用

1、Dockerfile文件 [root@node136 dktomcat]# cat Dockerfile FROM ubuntu:12.04 MAINTAINER <@heetian.com> ENV cSoftPath=/usr/local/software WORKDIR /home ADD apache*.tar.gz cSoftPath ADD jdk*.tar.gz cSo

2017-02-27 10:15:53 622

原创 java directmemory监控

DirectBuffer是NIO提供的可以直接使用系统物理内存的结构,目的是提高内存访问速度,但是销毁和创建的成本则比JVM堆内存的大很多,使用的时候需要注意。 当使用nio的DirectBuffer功能时,我们可以通过-XX:MaxDirectMemorySize=100M,指定DirectMemory的最大使用物理内存,一般的可视化监控似乎没有针对物理内存的监控,那如何监控DirectBuff

2016-07-21 16:24:21 3112 1

原创 java jvm shutdownhook

shutdownhook是jvm提供给应用程序在jvm退出时,处理应用程序未处理完的任务的一种安全退出机制,通过这种机制,可以在jvm退出时关闭一些资源,中断一些必须优雅关闭的线程等。 使用方式也很简单,可以在主线程启动的时候使用下面的代码注册,具体如下: Runtime.getRuntime().addShutdownHook(new CleanWorkThread()); /**

2016-05-13 20:51:37 1561

原创 java 线程中断

java并没有提供一种直接中断或者停止线程的方法,实际上我们说的线程中断或者取消都是基于一种协作的机制来实现的,所谓协作即调用中断或者取消方法后,线程会通过检测某个状态位来决定是否要退出正在执行的工作,从而来停止线程的执行。应该说线程中断是没有一种统一的处理方案的,正确的线程中断处理方案都需要考虑线程的具体使用的情景。另外线程中断都不是一个立即执行的动作,前面说了是一种协作机制。下面说说线程的几种使

2016-03-25 14:34:11 660

原创 java ThreadPoolExecutor 自定义线程池优势

java并发线程池建议还是多多使用ThreadPoolExecutor的构造函数来设置自定义的线程池,先来看看这个构造函数的参数列表。 /** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @param corePoolSize th

2016-03-08 16:51:51 3819

原创 java ScheduledExecutorService 使用

ScheduledExecutorService的作用是任务的调动和时间密切相关。最常用的两个方法分别是ScheduleAtFixedRate 和 ScheduleWithFixedDelay,这个两个方法在使用上还是有一些差别的。 ScheduleAtFixedRate,它是线程的执行以一个固定的频率执行,但是需要注意的是,当线程的执行频率快于线程的执行速度,这时下一个线程的执行仍然需要等待当前

2016-03-08 15:32:34 758

原创 java CountDownLatch 多线程文件搜索

基于多线程搜索文件,并且将最终的结果进行打印。这里使用了CountDownLatch线程协作机制,主线程等待多个搜索线程完成,并对最终结果进行打印。具体例子如下:

2016-03-08 00:18:17 1246

原创 java thread join

java多线程编程join的作用是等待线程结束,这个作用可以产生很多特定的场景。 1)A线程中调用B线程的join方法,那么A线程需要等待B线程执行完成后才能完成 2)主线程中依次调用A线程的join方法,B线程的join方法,可以保证A,B线程顺序执行;当主线程需要等待多个线程完成后再继续执行时,join方法可能会产生迷惑作用,虽然这个时候主线程等到了多个线程的完成,但是这时多个线程的执行并不

2016-03-08 00:03:07 773

原创 java 二叉查找树(搜索树、排序树)实现

二叉查找树,又称二叉搜索树,又称二叉排序树,可以是null树。主要思想如下,如树的左子树非空,则左子树的所有节点值都小于根节点值,若树的右子树非空,则右子树的所有节点值都大于根节点值。下面就基于这个思路来实现代码了,代码只实现了几个简单方法,也参考了网上一些实现代码。class BinarySearchTree<E extends Comparable<E>> { Node<E> root;

2016-03-04 15:58:32 666

原创 java 单向链表实现

链表是一种常用的数据结构,理解了链表的结构和原理,我们也可以使用java来实现一个简易的链表,麻雀虽小五脏俱全,o(^▽^)opackage com.basic.alogrithm;public class BasicLink { public static void main(String[] args) { Link<Integer> tests = new Link<I

2016-03-04 14:17:25 554

原创 java hashset 原理

1、首先看它的类结构public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable从类结构来看,它是比较简单的,主要还是实现了Set的相关接口,其他的没有什么特别的地方,这里看它支持clone方法,但是注意所有的集合类型在克隆自定义的对象元素时,实际上都

2016-03-04 10:08:51 565

原创 java hashset 使用

hashset的使用主要是注意以下几个关键点: 1)hashset可以保证元素唯一,并且能快速查找 2)hashset底层的实现是hashmap(key为set的值,value等于固定的Object对象) 3)hashset支持null元素保存 4)自定义对象作为hashset的值需要重新hashcode和equals方法 5)作为set集合,它可以使用foreach的形式遍历元素,但是无

2016-03-04 10:00:31 605

原创 java linkedlist 使用

linkedlist的使用过程主要要注意下面几点 1)linkedlis允许插入null节点 2)删除元素最后基于迭代器操作,可以保障并发安全 3)使用Collections.sort方法对list排序时,在没有比较器的情况下,元素必须非空且可排序,在有比较器的情况下,若比较器考虑了元素为空的情况,则null元素可参与排序 4)可以使用linkedlist实现stack和queue的功能pa

2016-03-03 16:01:43 595

原创 java linkedlist 原理

linkedlist原理分析的过程,主要是从下面几个方面进行 1、类的继承关系public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable从类的继承结构上看,改类实现了List,Deque(Queue

2016-03-03 15:20:35 647

原创 java 序列化字节流解析

定义下面一个类然后执行序列化得到字节流写入文件,解析文件,基于这个过程了解java序列化的原理。package com.heetian.erange.studio.crypt;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io

2016-02-28 23:43:09 2957

原创 java 自定义序列化

如果采用java序列化的方式传输java对象,我觉得最好还是采用自定义序列化的方式来完成。下面就来看看如何利用readObject,writeObject,writeReplace,readResolve这4个私有方法来自定义序列化的过程。 1)第一个场景,我们希望在序列化的过程中改变那些被transient修饰的变量,class TestSer implements Serializable {

2016-02-28 16:20:39 1168

原创 java 序列化

java序列化简单来讲就是将java对象转换为二进制文件的过程;反序列化的过程就是从二进制文件中生成原java对象拷贝的过程。代码实现的基本过程为,通过ObjectOutputStream调用writeObject方法将类的对象序列化为二进制文件;反序列化就是从二进制文件通过ObjectInputStream调用readObject方法生成一个新的对象的过程。 上面简单的描述了java序列化和反序

2016-02-27 21:36:55 434

原创 java 泛型原理

泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是在获取的时候要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的,

2016-02-25 13:05:18 833

原创 java 获取数组元素类型的class对象

每一个类被jvm加载到内存中后,都会生成一个class对象,而且每一个类的实例对象都会有一个引用指针指向该class对象。基于这个class对象我们可以做很多事情,同时它也是整个反射机制的基础。 这里,我只想说一下,如何才能获取到数组元素类型的class对象,这个和普通元素获取的方式还是有区别的,具体看看代码:public class ClientTest { public static

2015-12-23 16:31:10 15711

原创 python iptables库

python是很强大,其中很大一部分的原因是python具有丰富的库支撑,比如我们想实现一个自己控制防火墙的功能来完成某些特定的功能需要,我们就可以使用python的iptables库来很轻松的实现对iptables规则的管理。具体的文档可以参考如下:python iptables 下面来看一个具体的列子吧,基于rpc实现了一个对外接口,可以远程添加iptables规则,另外还有一个周期性调度的功

2015-12-14 14:03:23 7833 2

原创 java 深度克隆

关于java的深度克隆,以及为什么要重写clone方法,这个网上又很多介绍。自己曾经尝试着实现Cloneable接口重写clone方法来实现深度克隆,但是总感觉效果不好,而且非常的繁琐,当我们要深度克隆的对象是一个非常复杂的结构时,要实现这个对象的深度克隆,不但对象本身要实现Cloneable接口,而且对象里面的非基本类型也必须实现Cloneable接口才行,这是极其不方便的。    所以,我

2015-11-26 20:02:07 1100

原创 java intelliJ eclipse 配置文件处理的一点区别

问题背景: 之前在eclipse环境中,我把项目的hbm文件放在了java/main目录的一个package中,然后在spring的配置文件中采用Locations的方式加载hbm的xml文件,加载方式如下:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

2015-11-18 11:39:42 917

原创 java semaphore

java基于semaphore方式实现对资源的并发访问,也是多线程同步的一种方式,它一般是用于实现对多个资源副本的并发访问控制,而synchronized,lock等同步方式不同则用于针对一个资源的并发访问控制,也就是说资源只允许一个线程同时访问,而semaphore则可以控制某几个线程同时访问资源。 当然semaphore它也有一个变种,即二进制信号量,它的作用实际上和synchronized和

2015-10-30 11:50:10 430

原创 java lock condition

针对线程的同步,java提供了很多种方法,比如synchronized关键字,lock方法等,都可以实现对临界区资源的访问保护,防止多个线程并发操作临界区资源而导致的问题。有的时候,光有同步还不够,还需要加入线程之间的通信机制,比如典型的消费者生产者问题。这里,基于lock+condition(条件锁)来实现典型的消费者生产者问题,例子是一个环形数组,当数组满或者空的时候就等待,当非满或者非空就通知

2015-10-30 11:23:43 494

原创 java ThreadGroup

Java并发API里有个方法是把线程分组的,这个方法允许我们按线程组作为一个单位来处理。可以让一些线程做着同样的任务,无论多少线程还在运行,他们都可以以组为单位中断。 下面的例子,展示了一个文件搜索功能,一个线程组搜索一个文件,组中每个线程的基础目录不一样,但搜索的文件名相同,当一个线程搜索到了该文件,就中断其他线程的搜索。通过这个例子的学校,主要是把线程组中线程的unchecked异常处理机制,

2015-10-28 14:33:28 735

原创 java 线程中unchecked exception处理

Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结。最麻烦的是,在线程中抛出的异常即使使用try…catch也无法截获,因此可能导致一些问题出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。JDK5.0之前,不能为单独的Thread设置UncaughtExceptionHandler,也

2015-10-27 16:54:28 1713

原创 jquery post json

jquery ajax调用,有的情况下提交的参数比较多,这时我们希望将这些参数作为一个json对象传递到controller中进行处理,那么就需要使用到post json对象的功能,下面的例子简单说明这个功能的使用。js代码,需要注意contentType:”application/json”,不然会出现415的错误 <script type="text/javascript">

2015-10-27 11:53:36 1121

原创 linux java jdk 环境变量

vi /etc/profileJAVA_HOME=/usr/java/jdk1.7.0_45JRE_HOME=/usr/java/jdk1.7.0_45/jrePATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libexp

2015-08-31 14:28:01 614

原创 python实现linux下抓包并存库功能

最近项目需要抓包功能,并且抓包后要对数据包进行存库并分析。抓包想使用tcpdump来完成,但是tcpdump抓包之后只能保存为文件,我需要将其保存到数据库。想来想去shell脚本似乎不太好实现,于是用了比较热门的python来实现。不得不说,python丰富的第三方库确实是很强大,下面是具体的功能代码。from apscheduler.scheduler import Schedulerimpor

2015-07-10 15:21:37 3890 2

原创 hibernate 映射关系—关系映射(一对多)

映射关系 关系映射 一对多

2015-06-26 11:45:37 1017

原创 hibernate 映射关系—关系映射(一对一)

映射关系 关系映射 一对一

2015-06-25 15:17:11 957

原创 hibernate 映射关系—集合映射

当持久化类中有一个值类型的集合,那么就需要一张额外的数据库表来保存这个值类型集合的数据,这张表被称为集合表。比如有一张学生表,学生可能有很多爱好,就需要一种学生爱好集合表来存储学生的爱好信息。 Hibernate支持大部分重要的JDK集合接口映射,主要有以下几种。

2015-06-19 10:27:36 2157

原创 hibernate 映射关系—基本映射

hibernate的基本映射关系是指持久化类和映射文件之间的对应关系,它们之间的对应是实现ORM的基础,这样我们才可以通过操作持久化类对象来完成对数据库表中记录的增删改查操作。

2015-06-17 11:40:38 528

原创 hibernate 映射关系—总纲

Hibernate映射是Hibernate框架的核心,

2015-06-17 11:04:06 514

FtpNio服务器模型

java nio实现ftp上传下载功能的功能,目前只实现了upload和download已经ls功能。

2013-08-14

Fetion客户端的简单实现

用C++实现的简单飞信客户端,简单的SIP协议

2009-09-10

symbian http实现

在symbian上使用http协议的实现代码。有很好的参考价值。

2009-01-15

Symbian flv播放器

这个是Symbian flv播放器,有需要的朋友可以下载下来看看,帮助Symbian 视频播放器的开发。

2009-01-15

windows mobile ffmpeg dll

提供windows mobile 环境下的ffmpeg格式动态链接库,便于windows mobile平台的开发。

2009-01-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除