
Java
文章平均质量分 63
小白的学习笔记
这个作者很懒,什么都没留下…
展开
-
用PriorityQueue解决选择最小的K个数问题
Java 中的PriorityQueue是一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。此队列的头是按指定排序方式确定的最小元素。如果多原创 2016-03-19 15:26:28 · 5397 阅读 · 0 评论 -
Java使用Protocol Buffers入门四步骤
Protocol Buffers(简称protobuf)是谷歌的一项技术,用于将结构化的数据序列化、反序列化,经常用于网络传输。这货实际上类似于XML生成和解析,但protobuf的效率高于XML,不过protobuf生成的是字节码,可读性比XML差。类似的还有json、Java的Serializable等。protobuf支持各种语言。本文以Java为例,简单介绍protob转载 2016-04-15 16:45:37 · 533 阅读 · 0 评论 -
关于finalize()方法(总结)
finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,gc都能搞定,一般情况下我们又不会用new以外的方式去创建对象),所以一般是不需要程序员去实现finalize的。 特殊情况下,需要程序员实现finalize,当对象被回收的时候释放一些资源,比如:一转载 2016-05-11 19:05:34 · 11287 阅读 · 1 评论 -
Java 7之基础 - 强引用、弱引用、软引用、虚引用(总结的很好)
转载请注明出处:http://blog.youkuaiyun.com/mazhimazh/article/details/197524751、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:[java] view plain copy print?转载 2016-05-11 19:41:17 · 605 阅读 · 0 评论 -
JDK动态代理示例
Java动态代理可以动态地创建代理并动态地处理对所代理方法的调用。下面用《Java编程思想》中的一个例子说明: 首先是接口类,目标类要实现的接口:public interface Interface { void doSomething(); void somethingElse(String args);}再就是目标类,也可以成为真实类,继承上面的接口并实现其中的方法:publ原创 2016-04-29 21:08:02 · 1626 阅读 · 0 评论 -
Cglib生成动态代理(有改动)
Cglib(Code Generation Library)动态代理 [对没有实现接口的普通类做代理]1、概述: Cglib是一个优秀的动态代理框架,它的底层使用ASM(JAVA字节码处理框架)在内存中动态的生成被代理类的子类。使用CGLIB即使被代理类没有实现任何接口也可以实现动态代理功能。但是不能对final修饰的类进行代理。2、原理: 通过字节码技术为一转载 2016-04-29 22:14:26 · 540 阅读 · 0 评论 -
Java内存模型
Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。如果你想设计表现良好的并发程序,理解Java内存模型是非常重要的。Java内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。原始的Java内存模型存在一些不足,因此Ja转载 2016-04-30 20:50:49 · 453 阅读 · 0 评论 -
Java用wait() notify()实现线程间通信
博客 线程间协作:wait、notify、notifyAll讲了这几个方法的使用,这篇博客举例说明。要解决的问题是: 实现两个线程A,B,A打印5个奇数,B打印5个偶数,交替进行,如此循环50次。要点: 1. 在同一个类中实现打印奇数和打印偶数的方法,并且这两个方法都需要被synchronized修饰,因为wait() notify()只能在synchronized修饰的代码块中运行。 2.原创 2016-03-20 11:46:10 · 546 阅读 · 0 评论 -
Spring AOP之 java 动态代理(Proxy 与 InvocationHandler)理解
在学习spring的过程中,了解到一个很重要的java编程思想,就是面向切面的编程(aop)。什么是面向切面的编程呢?对于这个概念我在网上查了,得到如下的答案:AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方法论,它是对传统OOP编程的一种补充。概念性的东转载 2016-03-08 22:04:00 · 2017 阅读 · 0 评论 -
Hibernate session
Session 用于获取与数据库的物理连接。 Session 对象是轻量级的,并且设计为在每次需要与数据库进行交互时被实例化。持久态对象被保存,并通过 Session 对象检索找回。该 Session 对象不应该长时间保持开放状态,因为它们通常不能保证线程安全,而应该根据需求被创建和销毁。Session 的主要功能是为映射实体类的实例提供创建,读取和删除操作。这些实例可能在给定时间点时存在于以下三种转载 2016-03-09 15:46:52 · 526 阅读 · 0 评论 -
java异常分类
Java中异常的分类所有异常,都继承自java.lang.Throwable类。Throwable有两个直接子类,Error类和Exception类。ExceptionException则可使从任何标准Java库的类方法,自己的方法以及运行时任何异常中抛出来的基类型。异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)转载 2016-03-22 11:06:09 · 503 阅读 · 0 评论 -
Java:多线程,线程同步,同步锁(Lock)的使用(ReentrantLock、ReentrantReadWriteLock)
关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象。本文探讨Lock对象。synchronized与java.util.concurrent.locks.Lock 的相同点:Lock能完成synchronized所实现的所有功能;主要不同点:Lock有比synchronized更精确的线程语义转载 2016-03-24 10:34:32 · 661 阅读 · 0 评论 -
Java内存泄漏发生的情况
转自:http://www.jianshu.com/p/93b91ea18c28虽然Java自带垃圾回收机制(GC),程序员不需要手动进行内存管理,但是仍然会出现内存泄漏的情况。尽管如此,Java的自动内存管理,比起C/C++,内存泄漏的情况大大减少了。下面总结下什么情况下会发生Java内存泄漏。静态集合类在使用Set、Vector、HashMap等集合类的时候需要特别注意,有可能转载 2016-04-12 17:34:47 · 548 阅读 · 1 评论 -
JAVA LinkedList和ArrayList的使用及性能分析
JAVA LinkedList和ArrayList的使用及性能分析,这篇文章也是以JAVA List的总结。第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口。它代表着有序的队列。AbstractList 是一个抽象类,它继承于AbstractCollection。undefinedAbstractList实现转载 2016-03-29 11:14:57 · 492 阅读 · 0 评论 -
关于equals和hashcode方法
一:生成equals的约定。在《Effective Java》中说明了覆盖equals方法时的一些规则(约定),下面是约定的内容,来自Object的规范【JavaSE6】: equals方法实现了等价关系 1) 自反性:对于任何非null的引用值x,x.equals(x)一定返回true。 2) 对称性:对于任何非null的引用值x,y,当且y.equals(x)返回true时,x.equal原创 2016-05-02 20:40:39 · 508 阅读 · 1 评论 -
Java阻塞队列的实现 (简洁明了)
阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列,下图展示了如何通过阻塞队列来合作:转载 2016-05-13 21:51:23 · 4470 阅读 · 0 评论 -
Tomcat服务器原理详解
【目录】本文主要讲解Tomcat启动和部署webapp时的原理和过程,以及其使用的配置文件的详解。主要有三大部分:第一部分、Tomcat的简介和启动过程第二部分、Tomcat部署webapp第三部分、Tomcat处理一个http请求的过程【简介】 Tomcat依赖/conf/server.xml这个配置文件启动server(一个Tomcat实例,核心就是启动容器Catalina)。 Tomcat转载 2016-04-11 20:05:35 · 2131 阅读 · 3 评论 -
Map.Entry使用说明
1.Map.Entry说明Map是java中的接口,Map.Entry是Map的一个内部接口。Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合(在JDK的api说明中确实是一个Set),此集合的元素类型为Map.Entry。对Map.Entry的说明为:Map转载 2015-09-25 21:50:50 · 572 阅读 · 0 评论 -
java interface小结
java中的interface用来指定一个实体需要做什么,而不是怎么做。interface中的变量:在interface中,变量默认都是public static final的,因此在interface中声明一个变量时必须初始化,否则报错:The blank final field a may not have been initialized因为默认都是public原创 2016-01-09 13:22:56 · 1504 阅读 · 0 评论 -
Java Map数据结构与排序
一、简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快转载 2015-09-25 21:59:38 · 1927 阅读 · 0 评论 -
Java序列化算法透析
/** * 转载请注明作者longdick http://longdick.iteye.com* */ Java 序列化算法透析 Serialization (序列化)是一种将对象以一连串的字节描述的过程;反序列化 deserialization 是一种将这些字节重建成一个对象的过程。 Java 序列化 API 提供一种处理对象序列化的标准机制。在这里你能原创 2016-09-03 09:48:33 · 517 阅读 · 0 评论 -
Java NIO 总结与示例
Java NIO是New IO的简称,它是一种可以替代Java IO的一套新的IO机制。它提供了一套不同于Java标准IO的操作机制。Java NIO中涉及的基础内容有通道(Channel)和缓冲区(Buffer)、文件IO和网络IO。有关通道、缓冲区以及文件IO在这里不打算进行详细的介绍。这里参考《实战Java高并发程序设计》利用NIO实现一个Echo服务器的服务端与客户端。在看原创 2016-08-14 21:03:12 · 840 阅读 · 0 评论 -
JDK动态代理实现原理(简析加转载)
这里转载一篇日志,重点部分就是探讨JDK动态代理是如何实现的。JDK生成动态代理的语法为,参考JDK动态代理示例:Interface proxy = (Interface) Proxy.newProxyInstance(Interface.class.getClassLoader(),new Class[]{Interface.class},new DynamicProxyHandler(rea原创 2016-04-29 23:28:03 · 757 阅读 · 0 评论 -
Java 连接池的工作原理 **
什么是连接?连接,是我们的编程语言与数据库交互的一种方式。我们经常会听到这么一句话“数据库连接很昂贵“。有人接受这种说法,却不知道它的真正含义。因此,下面我将解释它究竟是什么。[如果你已经知道了,你可以跳到它的工作原理部分]创建连接的代码片段:String connUrl = "jdbc:mysql://your.database.domain/yourDBname"; Class.forName转载 2016-05-13 22:49:00 · 575 阅读 · 0 评论 -
Web开发中文乱码问题
Web开发过程中,中文乱码产生的根源在于Web组件之间、或Web组件与浏览器、与数据库所使用的字符集标准不统一。 一些常见编码:GBK是GB2312的扩展。Unicode又称作万国码或统一码,是由国际组织制定的一种可以容纳世界上几乎所有的文字和符号的字符编码方案,Java的内部的编码方式就是Unicode。UTF-8是Unicode字符集的一种变长字符编码,用1-6个字节编码每原创 2016-09-08 15:51:04 · 835 阅读 · 0 评论 -
Java RMI详解(入门)
RMI:远程方法调用(Remote Method Invocation)。能够让在某个Java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。RMI远程调用步骤:1,客户对象调用客户端辅助对象上的方法2,客户端辅助对象打包调用信息(变量,方法名),通过网络发送给服务端辅助对象3,服务端辅助对象将客户端辅助对象发送来的信息解包,找出真正被调用的方法转载 2016-09-12 22:06:17 · 845 阅读 · 0 评论 -
关于单例模式的一些讨论(实现单例模式)
对于如何实现单例模式,已经有很多博客来说明这个事了,比如陈皓老师的深入浅出单实例Singleton设计模式,想要深入了解单例模式可以直接去看他们博客,这里自我讨论学习一下。在陈浩老师的博客中提到了两个存在线程安全的单例模式实现方式,在《Java多线程编程核心技术》也提到了这些问题,如何正确地写出单利模式这篇博客也提到了这些方法。之所以给出这么多连接,是希望以后自己忘了的时候可以随时查查。在这里,直接原创 2016-05-03 17:08:00 · 505 阅读 · 4 评论 -
Java中的深拷贝(深复制)和浅拷贝(浅复制)
深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java。虽然java自动管理对象的回收,但对于深拷贝(深复制)和浅拷贝(浅复制),我们还是要给予足够的重视,因为有时这两个概念往往会给我们带来不小的困惑。浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对转载 2014-09-27 16:15:55 · 669 阅读 · 0 评论 -
Fork and Join: Java编写并发程序(重要)
本文转载自 并发编程网Fork and Join: Java也可以轻松地编写并发程序,感觉类似于一个map reduce框架如今,多核处理器在服务器,台式机及笔记本电脑上已经很普遍了,同时也被应用在更小的设备上,比如智能手机和平板电脑。这就开启了并发编程新的潜力,因为多个线程可以在多个内核上并发执行。在应用中要实现最大性能的一个重要技术手段是将密集的任务分隔成多个可以并行执转载 2016-05-04 22:54:14 · 1632 阅读 · 0 评论 -
Java-Fork/Join的简单例子(入门)
fork/join的使用1、创建一个ForkJoinPool,forkjoin池。ForkJoinPool forkJoinPool = new ForkJoinPool();2、创建一个task任务,任务继承自RecursiveTask,Integer表示返回结果的类型CountTask task = new Cou转载 2016-05-04 23:12:43 · 1855 阅读 · 0 评论 -
HttpClient使用详解 (了解)
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会转载 2016-05-05 18:37:27 · 689 阅读 · 0 评论 -
通过 ActiveMQ 演示如何使用 JMS API (入门)
消息机制是软件组件和应用程序之间通讯的一种方法,一个消息系统是一个点对点的服务:消息客户端可以发送消息也可以接收消息,每一个客户端连接到一个消息代理,这个代理提供了消息的创建、发送、接收和读取的功能。因为是松散耦合的架构使得消息机制很适合用在分布式通讯。组件将消息发送到目的地,而接收者从目的地获取所发送的消息。但是不要求发送者和接收者都同时有效。事实上,发送者不需要知道接收者的信息,而接收者也转载 2016-05-05 18:52:47 · 512 阅读 · 0 评论 -
eclipse字体 osgi错误Could not find bundle: org.eclipse.equinox.console
记录一下今天遇到的问题:eclipse字体设置为 Consolas字体 比较好看,字体大小为五号osgi遇到Could not find bundle: org.eclipse.equinox.console 问题时,需要引入其他bandle。具体如下:org.apache.felix.gogo.command org.apache.felix.gogo.run原创 2016-06-26 10:28:10 · 710 阅读 · 0 评论 -
Java NIO 和 IO 的区别详解
Java NIO为jdk1.4提供了新的API,本文主要来比较一下Java中NIO和IO的区别,Java初学者可以了解一下。下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO面向流 面向缓冲阻塞IO 非阻塞IO无 选择器面向流与面向缓转载 2016-03-24 10:09:17 · 472 阅读 · 0 评论 -
《Java性能优化...》读书笔记
1、JVM虚拟机内存分配参数-Xmx:设置最大堆大小,最大堆指的是新生代和年老代的大小之和的最大值,它是Java应用程序的堆上限。当使用值超过这个限制时会抛出OutOfMemoryError异常。可以使用循环申请1M空间(new byte[1024*1024])进行测试,-Xms:设置最小堆(可以认为后面的s代表small)大小,Java应用程序在运行时,首先会被分配-Xms指定的内存原创 2016-08-20 15:13:56 · 791 阅读 · 1 评论 -
RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序
原文地址:RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序这里讲述的是基于JDK1.5的RMI程序搭建,更简单的说是一个 HelloWorld RMI。 1. 这里是基于JDK1.5的,节省了繁琐的手工编译(生成桩和骨架)。不像1.4之前的RMI。 2. 这里是把客户端和服务器端的两个程序,分布在两个独立的程序里面,而不是同一个package下面。是真正的分布式。转载 2017-04-08 13:02:35 · 634 阅读 · 0 评论 -
Java线程中yield与join方法的区别
长期以来,多线程问题颇为受到面试官的青睐。虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用。之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。Jav转载 2016-03-30 09:32:27 · 441 阅读 · 0 评论 -
Java内存溢出详解及解决方案
内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题。内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。更严重的是内存溢出与数据库锁表在系统开发和单转载 2014-11-24 16:29:19 · 745 阅读 · 0 评论 -
Java矩阵运算,jama包
Jama是一个基本的线性代数java包。包括一个基本的Matrix类和5个矩阵分解类。Matrix类提供了基本的线性代数数值运算的功能,不同的构造函数可以构造双精度和浮点精度的二维数组,而不同的gets和sets方法可以返回子矩阵和矩阵元素。基本的算术运算包括矩阵相加,矩阵相乘,矩阵范式以及基于矩阵元素的算术运算。打印矩阵的函数也包括在内。矩阵的五大分解,涉及一对或三元组,排列向量原创 2015-05-03 10:40:59 · 9631 阅读 · 1 评论 -
Java线程安全和非线程安全
ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题。面对这样的问题,回答是:ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全转载 2015-06-04 22:43:38 · 624 阅读 · 0 评论