java
文章平均质量分 81
Hunaiyo
本人为广工一苦逼呈虚猿。
展开
-
生产者/消费者问题的多种Java实现方式
生产者/消费者问题的多种Java实现方式 实质上,很多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式,而这是恰恰是在本科操作系统课堂上老师反复讲解,而我们却视而不见不以为然的。在博文《一种面向作业流(工作流)的轻量级可复用的异步流水开发框架的设计与实现》中将介绍一种生产者/消费者模式的具体应用。生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作转载 2016-02-24 13:39:12 · 535 阅读 · 0 评论 -
class.forName的官方用法说明
原文地址:http://yanwushu.sinaapp.com/class_forname/使用jdbc方式链接数据库时会经常看到这句代码:Class.forName(String className)。本文将浅显地解读这句代码的含义。看这篇文章之前应该对java的反射机制有所了解,至少是对Class类有一定的了解。官方文档初始原创 2015-07-29 16:28:14 · 660 阅读 · 0 评论 -
三种常见的编码:ASCII码、UTF-8编码、Unicode编码等字符占据的字节数
ASCII码: 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。 UTF-8编码: 一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。 Unicode编码: 一个英文等于两个字节,一个中文(含繁体)原创 2015-08-24 10:56:58 · 18773 阅读 · 0 评论 -
Java集合类详解
Java容器类Collection、List、ArrayList、Vector及map、HashTable、HashMap区别 Collection是List和Set两个接口的基接口 List在Collection之上增加了"有序" Set在Collection之上增加了"唯一" 而ArrayList是实现List的类...所以他是有序的. 它里转载 2015-07-15 19:36:09 · 435 阅读 · 0 评论 -
java同步方法和同步代码块详解(通俗地讲解)
打个比方:一个object就像一个大房子,大门永远打开。房子里有很多房间(也就是方法)。这些房间有上锁的(synchronized方法),和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。另外我把所有想调用该对象方法的线程比喻成想进入这房子某个房间的人。所有的东西就这么多了,下面我们看看这些东西之间如何作用的。在此我们先来明确一下我们的前提条件。该对象转载 2015-08-07 16:18:38 · 1068 阅读 · 0 评论 -
解惑内部类(结合代码,一解就懂)
内部类有两种情况:(1) 在类中定义一个类(私有内部类,静态内部类)(2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中内部类的两个特点: (1) 在外部类的作用范围内可以任意创建内部类对象,即使内部类是私有的(私有内部类)。即内部类对包围它的外部类可见。转载 2015-07-02 18:14:37 · 528 阅读 · 0 评论 -
JAVA对象创建的过程(简单粗暴明了)
假设有个名为Cat类:1、即使没有显示地使用static关键字,构造器实际上也是静态方法。因此在创建类型为Cat的对象时,或者Cat类的静态方法/静态域被首次访问时(被引用),java解释器必须查找类途径(classpath上查找),以定位Cat.class文件。2,、然后类加载器载入Cat.class,有关静态初始化的所有动作都会执行。并且,静态初始化只在Class对象首次加载时进行一次原创 2015-07-02 01:28:15 · 1514 阅读 · 0 评论 -
关于乐观锁和悲观锁的介绍
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人原创 2015-06-19 18:50:59 · 922 阅读 · 0 评论 -
四种垃圾回收器的比较
说起垃圾回收,许多人都了解它的概念,也在日常的编程中有所应用。尽管如此,仍有许多我们不太了解的东西,而这正是痛苦的根源。关于JVM最大的误解就是认为它只有一个垃圾回收器,而事实上它有四个不同的回收器,每个都各有其长短。JVM并不会自动地选择某一个,这事还得落在你我的肩上,因为不同的回收器会带来吞吐量及应用的暂停时间的显著的差异。这四种回收算法的共同之处在于它们都是分代的,也就是说它们将托管的堆转载 2015-05-14 20:45:04 · 762 阅读 · 0 评论 -
HTTP协议详解
一、什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。二、HTTP协议的版本 H转载 2015-05-15 17:08:34 · 380 阅读 · 0 评论 -
“==“与equal的比较。
“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】 equal用于比较两个对象的值是否相同【不是比地址】 【特别注意】Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较原创 2015-04-21 15:29:27 · 472 阅读 · 0 评论 -
volatile和synchronized的区别:
关于可见性的问题:可见性:即当读写两个线程同时访问同一个变量时,用于确保写线程更新变量后,读线程再访问该 变量时可以读取到该变量最新的值。volatile和synchronized的区别:1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。2.vo原创 2015-04-10 18:13:00 · 560 阅读 · 0 评论 -
jdk的动态代理源码解析
先看一下JDK的动态是怎么用的。 Java代码 package dynamic.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /**原创 2015-07-29 16:47:04 · 960 阅读 · 0 评论 -
数组跟集合的区别
数组跟集合的区别 A:长度区别 数组的长度固定,实例化时必须规定数组长度。(不可变) 集合长度可变 B:内容不同 数组存储的是同一类型的元素 集合可以存储不同类型的元素 C:元素的数据类型问题 数组可以存储基本数据原创 2015-07-30 11:43:29 · 772 阅读 · 0 评论 -
聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index)介绍
微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)…… (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索转载 2015-07-31 16:58:00 · 1186 阅读 · 0 评论 -
为什么volatile不能保证原子性而Atomic可以
转载自:http://www.cnblogs.com/Mainz/p/3556430.html在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的转载 2016-01-25 12:02:21 · 683 阅读 · 0 评论 -
Java中对类的主动引用和被动引用
在Java代码中,有些类看上去初始化了,但其实没有。例如定义一定长度某一类型的数组,看上去数组中所有的元素已经被初始化,实际上一个都没有。对于类的初始化,虚拟机规范严格规定了只有对该类进行主动引用时,才会触发。而除此之外的所有引用方式称之为对类的被动引用,不会触发类的初始化。虚拟机规范严格地规定了有且仅有四种情况是对类的主动引用,即必须立即对类进行初始化。四种情况如下:转载 2015-12-22 12:39:31 · 715 阅读 · 0 评论 -
利用反射获得类信息,以获得泛型为例
java源文件编译成.class字节码。运行时加载类的时候就是加载.class文件。这也是java为什么可以一次编译多次运行!只要我们得到.class文件那就可以获得类信息!可以利用反射!方式一:对象.getClass()方法是 根对象Object的方法。 是其他类继承Object的getClass方法。方式二:类名.class,你可以理解为字节码本身就是静态的,类加载的时字节原创 2015-12-21 11:28:59 · 1523 阅读 · 0 评论 -
抽象类(Abstract)和接口的不同点、共同点(Interface)。
相同点: (1) 都可以被继承 (2) 都不能被实例化 (3) 都可以包含方法声明 (4) 派生类必须实现未实现的方法 区 别: (1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。 (2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接口总是后http://weibo.com/huangyiweix原创 2015-08-24 10:05:14 · 1394 阅读 · 0 评论 -
java.util.concurrent介绍
(本文由 blog博主Caoer(草儿)原创,此处为转载。 ) java.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性转载 2016-01-03 08:54:51 · 490 阅读 · 0 评论 -
Collection集合的总结以及如果选择适合的集合(包括对List和Set的对比)
Collection |--List 有序,可重复 |--ArrayList 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高 |--Vector 底层数据结构是数组,查询快,增删慢。 线程安全,效率低 |--LinkedList 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高 |--Set 无序,唯一 |--HashSet 底层数据结构是哈希表。 如何保证元素唯一性的呢? 依赖两个方原创 2015-08-05 16:50:58 · 1467 阅读 · 0 评论 -
HashSet如何保证元素的唯一性-跟踪源码解析
自己的理解:HashSet的底层结构用的是HashMap,当往HashSet上添加一条元素时。调用HashMap的put方法先调用hashCode()方法判断key的hash值是否一样,再调用对象的equals方法。原创 2015-08-05 16:16:50 · 1898 阅读 · 0 评论 -
java泛型的内部原理:类型擦除以及类型擦除带来的问题
参考:java核心技术一、Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出(type erasure)。Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参转载 2015-08-17 15:10:19 · 469 阅读 · 0 评论 -
for 、foreach和iterator的区别
相同点: 三个都可以用来遍历数组和集合不同点:1.形式差别 for的形式是 for(int i=0;i foreach的形式是 for(int i:arr){...} iterator的形式是原创 2015-08-04 17:24:18 · 839 阅读 · 0 评论 -
java内存机制说明(简单明了)
Java虚拟机在执行Java程序的过程中会把它所管理的内存区域分为若干个不同的数据区域。这些区域都有各自的用途,有的区域随虚拟机进程启动而存在,有的区域则依赖用户线程启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域。程序计数器程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器,字节码解释器工作时就原创 2015-08-04 10:33:31 · 585 阅读 · 0 评论 -
sql语句的性能优化问题
很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:select * from table1 where name='zhangsan' and tID > 10000和执行:select * from table1 where tID > 10000 and name='zhangsan'一些转载 2015-07-31 15:50:42 · 423 阅读 · 0 评论 -
Spring+hibernate整合
一、概述。一、概述。 Spring与Hibernate的集成在企业应用中是很常用的做法通过Spring和Hibernate的结合能提高我们代码的灵活性和开发效率,下面我就一步一步的给大家讲述Spring如何和Hibernate集成的。二、代码演示。导入Hibernate的jar包Hibernate-3.2/lib原创 2015-04-28 01:00:40 · 577 阅读 · 0 评论 -
java基础---J2EE十三个规范
J2EE十三个规范一、十三个规范总结二、API 1.JDBC JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。简单的说就是处理数据库的一个API库。 2. JNDI JNDI是一组在Java应用中访问命名和目录服务的API。命名服务将名称和转载 2015-04-27 16:44:06 · 416 阅读 · 0 评论 -
java基础---static关键字
一、概述 static 关键字是声明静态变量,静态方法用的。static的含义是属于类且不属于类对象的变量和函数。二、static的产生。 在创建对象的时候除非用new创建那个类的对象,否则实际上并没有获得任何对象只有当执行new来创建对象时数据存储空间才被分配,其方法才供外界调用。但是有两种情况上述方法时无法解决的第一种只想为某特定域分配单一存储空间而不原创 2015-04-27 16:39:41 · 417 阅读 · 0 评论 -
深入理解Java String#intern() 内存模型
大家知道,Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,就会在字符串常量池中创建该字符串然后再返回。字符串常量池是一个固定大小的HashMap,桶的数量默认是1009, 从Java7u40开始,该默认值增大到60013。在Java6当中,字符串常量池是放在Perm空间的,从Java7开始,字符串常量池被移到Heap空间。下面,我们通过测转载 2015-03-22 22:10:00 · 582 阅读 · 0 评论 -
Java锁机制
问:为什么说java的syncronized关键字的效率很低?这是因为,java中线 程是映射到操作系统的原生线程上的。如果要唤醒或者是阻塞一条线程需要操作系统的帮忙。这就需要从用户态转换到核心态。因此,状态转换需要相当长的时间。 所以说syncronized关键字是java中比较重量级的操作。虚拟机本身会做一些优化。比如,在通知操作系统阻塞线程之前,加入一段自旋等待过程, 避免频繁的切入转载 2015-03-21 10:08:14 · 403 阅读 · 0 评论 -
在Java中正确使用注释
Java提供了3种类型的注释:单行注释(C++风格)在Java中最简单的注释是单行注释。它以两个正斜杠开始并到行尾结束。例如:// this is a single-line commentx = 1; // a single-line comment after code多行注释(C风格)Java同样提供跨越多行的注转载 2015-03-09 22:22:33 · 622 阅读 · 0 评论 -
深入理解Proxy机制
动态代理其实就是java.lang.reflect.Proxy类动态的根据您指定的所有接口生成一个class byte,该class会继承Proxy类,并实现所有你指定的接口(您在参数中传入的接口数组);然后再利用您指定的classloader将 class byte加载进系统,最后生成这样一个类的对象,并初始化该对象的一些值,如invocationHandler,以即所有的接口对应的Method转载 2015-03-08 15:20:35 · 548 阅读 · 0 评论 -
java面试宝典
笔试题之Java基础部分基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他。有些题来自网上搜集整理,有些题来自传智播客学员面试后的反馈,说真的,少数一些网上的面试题,我真怀疑其是否还有存在价值!1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?可以有多个类,但只转载 2015-03-08 13:12:15 · 879 阅读 · 1 评论 -
死锁产生的原因及四个必要条件
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进转载 2015-03-08 23:59:23 · 413 阅读 · 0 评论 -
【java】深入理解异常处理机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码,“猜猜”它执行后的结果会是什么?不要往后看答案、也不许执行代码看真正答案哦。如果你的答案是正确,那么这篇文章你就不用浪费时间看啦。转载 2015-03-08 12:49:45 · 1282 阅读 · 3 评论 -
Jacob解决Word文档的读写问题
Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为:http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368配置:(1转载 2015-03-16 11:16:44 · 796 阅读 · 0 评论 -
struts2拦截器详解
struts2拦截器详解 在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack, 如下(这里我是引用了struts2自带的checkbox拦截器): 0 (必须加,否则出错) 也可以改为对全局Action设置自己需要的拦截器,如下: 在struts.xml里面定义全局的配置设置转载 2014-12-24 12:18:41 · 1104 阅读 · 0 评论 -
JSP中文乱码解决
解决JSP中文乱码问题 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来:Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和J转载 2014-10-21 16:41:41 · 387 阅读 · 0 评论 -
基于JDK的RSA算法实现数字签名
数字签名借助RSA算法实现,由于RSA算法的特点是非对称类算法,同时将破解的风险转移到数学难题(分解公因数)上,使其难以破解。由于算法有公钥和私钥,私钥就是私有的,仅自己能够知道,公钥就是公开给别人的。那如果我用我的私钥加密然后你用我的公钥解密,这就能唯一确定这个东西我是发给你的。 这是基于jdk的数字签名, 代码如下:import java.security.KeyFac原创 2015-03-08 19:36:22 · 1471 阅读 · 0 评论