- 博客(168)
- 资源 (7)
- 收藏
- 关注
转载 Java工程师成神之路
一、基础篇1.1 JVM1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id=133http://ifeve.com/jmm-faq/1.1.2. 了解JVM各种参数及调优1.1.3. 学习使用Java工具jps,jstack, jmap, jconsol
2016-04-28 11:01:31 486
转载 Java NIO系列教程(12)Java NIO与IO
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。 IO
2016-04-27 19:40:51 549
转载 Java NIO系列教程(11)Pipe
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:1Pipe pipe = Pipe.open();向管道写数据要向管
2016-04-27 19:35:15 536
转载 计算机组成原理
目录计算机概述数据总线CPU存储器输入/输出设备计算机的时标系统计算机概述计算机的基本组成:存储器: 实现记忆功能的部件用来存放计算程序及参与运算的各种数据运算器: 负责数据的算术运算和逻辑运算即数据的加工处理控制器: 负责对程序规定的控制信息进行分析,控制并协调输入,输出操作或内存访问输入设备: 实现计算程序和原始
2016-04-27 09:55:15 35709 2
转载 java代码优化(长期更新)
前言2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化。在修改之前,我的说法是这样的:就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了。代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了。这个观点,在现在看来,是要进行代
2016-04-26 17:55:48 513
转载 切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法:public static void main(String[] args){ List arrayList = new ArrayList();
2016-04-26 17:34:28 3490
转载 多线程上下文切换
前言本文来自方腾飞老师《Java并发编程的艺术》第一章。并发编程的目的是为了让程序运行得更快,但是并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题,本文要研究的是上下文切换的问题。什么是上下文切换即使是单核CPU也支持多线程执行
2016-04-26 17:18:54 2813 1
转载 Java Socket
什么是SocketSocket的概念很简单,它是网络上运行的两个程序间双向通讯的一端,既可以接收请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。所以简而言之,Socket就是进程通信的端点,Socket之间的连接过程可以分为几步:1、服务器监听服务器端Socket并不定位具体的客户端Socket,而是处于等待连接的状态,实时监控网络状态2、客户端请求客户端S
2016-04-26 17:13:30 227
转载 ReentrantLock实现原理深入探究
前言这篇文章被归到Java基础分类中,其实真的一点都不基础。网上写ReentrantLock的使用、ReentrantLock和synchronized的区别的文章很多,研究ReentrantLock并且能讲清楚ReentrantLock的原理的文章很少,本文就来研究一下ReentrantLock的实现原理。研究ReentrantLock的实现原理需要比较好的Java基础以及阅读代码的能力,有
2016-04-26 16:49:13 3257
转载 Unsafe与CAS
Unsafe简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。这个类尽管里面的方法都是public的,但是开发者是无法使用它的,JDK API文档也没有提供关于这个类的方法解析。对于Unsafe类的使用都是受限制的,只有授信的代码才能获得该类的实例,当然
2016-04-26 16:39:06 634
转载 查缺补漏
前言Java的部分有基础、设计模式、IO、NIO、多线程,之后有时间还会把集合这部分补上去,这么多内容里面,难免有一些知识点遗漏,本文主要是讲解这些遗漏的知识点。这些知识点,不是特别大的难点,所以没有必要专门写一篇文章讲解;但是这些知识点,也不是一两句话就说得清楚的,所以放在这里。查漏补缺系列文章,每篇5个知识点,只要有值得研究的问题就会写上来。Thread.sleep(XXX)方法消
2016-04-26 16:33:00 668
转载 自己写一个java.lang.reflect.Proxy代理的实现
前言Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的。本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口、代理内容,生成代理。抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,
2016-04-26 16:22:26 447
转载 Java类中继承、接口实现的一些细节
前言在Java中,子类继承父类,类实现接口是属于常识性的内容了,作为一个Java程序员应该也比较熟悉。不过子类继承父类,类实现接口中还是有一些小细节值得注意一下,本文就从个人工作、学习中入手,总结一些细节性的内容,以更进一步地掌握继承、实现的关系。现在只是写一些目前碰到的内容,以后只要想到了、碰到了任何继承、实现相关问题,都会保持更新此文。接口A有void C()方法,接口B有int
2016-04-26 10:02:54 528
转载 接口好抽象类
接口interface的作用接口是对于行为的抽象,在小项目、小设计中接口带来的好处可能不会特别明显,但是项目一旦庞大起来,接口的优势就很明显会体现出来了:1、对于一个庞大的项目,从设计的角度来说,接口的存在可以帮助理清楚业务,利用接口不仅可以告诉开发人员需要实现哪些业务,而且也将命名规范限制住了,从而防止开发人员随便命名导致项目组别的开发者无法看明白:public inte
2016-04-26 09:56:15 204
转载 枚举
枚举枚举是一个小功能,但是却带来了大方便。一个星期有七天,我们平时定义这七天为常量的时候,会这么写:public final static String SUNDAY = "0";public final static String MONDAY = "1";public final static String TUESDAY = "2";public final stati
2016-04-26 09:54:48 260
转载 Java异常
异常概述异常也称为例外,是在程序运行过程中发生的并且会打断程序正常执行的事件,比如算术异常、空指针异常、文件找不到异常。所以在程序设计时,必须考虑到可能发生的异常事件,并做出相应的处理。这样才能保证程序可以正常运行。Java的异常处理机制也秉承着面向对象的基本思想,在Java中,所有的异常都是以类的形式存在,除了内置的异常类之外,Java也可以自定义异常类。此外,Java的异常处理机制也允
2016-04-26 09:54:13 295
转载 Java语法糖4:内部类
内部类最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类。内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.class。所以内部类的名字完全可以和它的外部类名字相同。内部类分为四种:成员内部类、局部内部
2016-04-26 09:53:10 330
转载 Java语法糖3:泛型
泛型初探在泛型(Generic type或Generics)出现之前,是这么写代码的:public static void main(String[] args){ List list = new ArrayList(); list.add("123"); list.add("456"); System.out.println((Stri
2016-04-25 11:55:25 398 1
转载 Java语法糖2:自动装箱和自动拆箱
前言一开始想学学自动拆箱和自动装箱是被这个名字吸引到,听上去好像很高端的样子,其实自动拆箱、自动装箱是很简单的内容。自动拆箱和自动装箱Java为每种基本数据类型都提供了对应的包装器类型。举个例子:public class TestMain{ public static void main(String[] args) { Integer
2016-04-25 11:45:48 241
转载 Java语法糖1:可变长度参数以及foreach循环原理
语法糖 接下来几篇文章要开启一个Java语法糖系列,所以首先讲讲什么是语法糖。语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用了。这些语法糖虽然不会提供实质性的功能改进,但是它们或能提高性能、或能提升语法的严谨性、或能减少编码出错的机会。Java提供给了
2016-04-25 11:37:57 845
转载 反射
反射的作用Java反射描述的是,在运行状态中:1、对于任意一个类,都能够知道这个类的所有属性和方法2、对于任意一个类,都能够调用它的任意一个属性和方法之所以强调属性、方法,是因为属性、方法是开发者对于一个类最关注的两个部分。实际上通过反射,不仅仅可以获知类的属性、方法,还可以获知类的父类、接口、包等信息至于反射的原理,不难,Java类加载机制一文中讲到了,一个类在加载的时候,会
2016-04-25 11:30:25 189
转载 Cloneable接口和Object的clone()方法
为什么要克隆为什么要使用克隆,这其实反映的是一个很现实的问题,假如我们有一个对象:public class SimpleObject implements Cloneable{ private String str; public SimpleObject() { System.out.println("Enter SimpleO
2016-04-25 11:21:44 2573
转载 说说WeakReference弱引用
WeakReference弱引用概述http://www.cnblogs.com/xrq730/p/4836700.html,关于Java的四种引用状态具体请参看此文Java里一个对象obj被创建时,被放在堆里。当GC运行的时候,发现没有任何引用指向obj,那么就会回收obj对象的堆内存空间。但是现实的情况时,写代码的时候,往往通过把所有指向某个对象的引用置空来保证这个对象在下次GC运
2016-04-25 11:14:04 435
转载 为什么要写Class.forName("xxx")
Class.forName(String name)接上一篇JDBC。本来这个内容是放在前面的一篇里面的一起的,后来发现越写越多,想想看就算了,还是单独开一篇文章好了,这样也能写得更加详细点。上一篇文章的第4点,getConnection()方法里面,我把从.properties里面获取mysqlpackage的地方替换成实际的value值,那么替换后的应该是Class.forName("
2016-04-25 10:59:46 641 1
转载 jdbc使用
什么是JDBCJDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,根据这种基准可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。总而言之,JDBC做了三件事:1、与数据库建立连接2、发送操作
2016-04-25 10:53:27 271
转载 Comparable和Comparator的区别
初次碰到这个问题是之前有一次电话面试,问了一个小时的问题,其中有一个问题就问到Comparable和Comparator的区别,当时没答出来。之后是公司入职时候做的一套Java编程题,里面用JUnit跑用例的时候也用到了Comparator接口,再加上JDK的大量的类包括常见的String、Byte、Char、Date等都实现了Comparable接口,因此要学习一下这两个类的区别以及用法。
2016-04-25 10:47:54 310
转载 自定义类加载器
为什么要自定义类加载器类加载机制:http://www.cnblogs.com/xrq730/p/4844915.html类加载器:http://www.cnblogs.com/xrq730/p/4845144.html这两篇文章已经详细讲解了类加载机制和类加载器,还剩最后一个问题没有讲解,就是自定义类加载器。为什么我们要自定义类加载器?因为虽然Java中给用户提供了很多类加载器,但是
2016-04-25 10:41:43 379
转载 谈谈HashCode的作用
前言Object提供给我们了一个Native的方法“public native int hashCode();”,本文讲讲Hash是什么以及HashCode的作用Hash先用一张图看下什么是HashHash是散列的意思,就是把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值。关于散列值,有以下几个关键结论:1、如果散列表中存在和散列原始输入K相等的
2016-04-25 10:22:16 28021 4
转载 从为什么String=String谈到StringBuilder和StringBuffer
前言有这么一段代码:1 public class TestMain2 {3 public static void main(String[] args)4 {5 String str0 = "123";6 String str1 = "123";7 System.out.println(str0 == st
2016-04-25 10:08:07 1065
转载 System.load(String filename)和System.loadLibrary(String libname)的区别
言之前一篇文章在写Native方法的时候,第一个步骤里面有这么一段代码?static{ System.load("D:"+ File.separator + "Hello.dll");}其实JDK提供给用户了两个方法用于载入文件,一个是System.load(String filename)方法,另外
2016-04-25 09:57:57 502
转载 自己实现的一个Native方法的调用
JNI开始本篇的内容之前,首先要讲一下JNI。Java很好,使用的人很多、应用极广,但是Java不是完美的。Java的不足体现在运行速度要比传统的C++慢上许多之外,还有Java无法直接访问到操作系统底层如硬件系统,为此Java提供了JNI来实现对于底层的访问。JNI,Java Native Interface,它是Java的SDK一部分,JNI允许Java代码使用以其他语言编写的代码和代码库
2016-04-25 09:49:53 3386
转载 Java对象表示方法2:XStream实现对象的XML话
上一篇文章讲到了使用Java原生的序列化的方式来表示一个对象。总结一下这种对象表示方式的优缺点:1、纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持2、多语言环境下,使用Java序列化方式进行存储后,很难用其他语言还原出结果3、占用的字节数比较大,而且序列化、反序列化效率也不高前面也提到过,对象表示有各种各样的方式,序列化只是其中的
2016-04-25 09:33:08 280
转载 Java对象表示方法1:序列化、反序列化和transient关键字的作用
平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态。一个Java对象的表示有各种各样的方式,Java本身也提供给了用户一种表示对象的方式,那就是序列化。换句话说,序列化只是表示对象的一种方式而已。OK,有了序列化,那么必然有反序列化,我们先看一下序列化、
2016-04-25 09:27:23 736
转载 枚举
枚举枚举是一个小功能,但是却带来了大方便。一个星期有七天,我们平时定义这七天为常量的时候,会这么写:public final static String SUNDAY = "0";public final static String MONDAY = "1";public final static String TUESDAY = "2";public final stati
2016-04-25 09:15:51 178
转载 static关键字的作用
之前讲到final关键字的作用是每次面试的时候我必问求职者的两个问题之一,另外一个问题就是文本会写到的static。final和static一样,都是一个小问题可以看到一个人的基础是否扎实以及平时是否有钻研精神。静态变量和静态方法static关键字最基本的用法是:1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来2、被static修饰的方
2016-04-25 09:05:20 309
转载 谈谈final的作用
前言一直想写写这个话题。代表公司也面试过一些求职者,每次面试我必问的两个问题之一就是“请你谈一谈对于final关键字的理解”。这是一个简单的小问题,但是不要小看它,通过对这个问题的回答以及一些简单的扩展就能看出一个求职者的基础是否扎实以及是否有钻研精神。OK,开始进入主题。final关键字的作用相信对于final的用法,大多数人都可以随口说出三句话:1、被final修饰的类不可
2016-04-25 08:57:55 2517 1
转载 谈谈多态
概述我们都知道面向对象有四个基本特性:抽象、封装、继承、多态。这四个特性,概括起来可以这么理解,抽象、封装、继承是多态的基础,多态是抽象、封装、继承的表现。多态,是Java中非常重要的一个部分,所以今天来谈一下多态(Polymorphism)。什么是多态不同类的对象对同一消息作出不同的响应就叫做多态。就像上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样。
2016-04-25 08:49:08 300
转载 Java NIO系列教程(10):DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:12DatagramChannel channel = DatagramCha
2016-04-24 17:10:11 286
转载 Java NIO系列教程(9):ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:12345678910ServerSocketChann
2016-04-24 17:09:15 292
转载 Java NIO 系列教程(8):SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:
2016-04-24 17:07:26 296
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人