
Java
文章平均质量分 71
u013063153
这个作者很懒,什么都没留下…
展开
-
Java I/O底层是如何工作的?
目录缓存处理和内核vs用户空间虚拟内存内存分页面向文件、块的I/O文件锁定面向流的I/O缓存处理和内核vs用户空间缓冲与缓冲的处理方式,是所有I/O操作的基础。术语“输入、输出”只对数据移入和移出缓存有意义。任何时候都要把它记在心中。通常,进程执行操作系统的I/O请求包括数据从缓冲区排出(写操作)和数据填充缓冲区(读操作)。这就是I/O的整体概念。在操作系统内部执行这些传输操作的机原创 2015-11-22 16:16:05 · 627 阅读 · 0 评论 -
HotSpot模板解释器目标代码生成过程源码分析
虽然说解释执行模式是逐字逐句翻译给目标平台运行的,但这样的过程未免太过缓慢,如 果能把字节码说的话做成纸条,运行时只要把对应的纸条交给目标平台就可以了,这样,执行速度就会明显提升。JVM的Hotspot虚拟机的模板解释器就是 用这种方法来解释执行的。在开始分析之前,先了解一下JVM的执行方式。(1).边解释边运行,即每次解释一条字节码并运行其解释的本地代码,这种执行引擎速度相对很慢原创 2015-11-21 23:34:12 · 1236 阅读 · 0 评论 -
从Java多线程实现“生产者-消费者”模型来谈谈操作系统中线程状态的转换
前言:自己尝试着用java多线程实现了操作系统原理中讲到的“生产者-消费者”模型,在这里和大家分享一下遇到的问题和心得。我们姑且模糊“线程”和“进程”的区别,只记住它们都是可并发执行的一组过程即可。一、什么是“生产者-消费者”模型? 这个模型所描述的是假设有一个能容纳N个产品的工厂,生产者进程不断向工厂中输入产品,而消费者进程不断从工厂中取转载 2015-11-17 16:06:55 · 777 阅读 · 1 评论 -
Java多线程死锁的例子
[java] view plaincopypackage com.damlab.fz; public class DeadLock { public static void main(String[] args) { Resource r1= new Resource(); Resource r2= new Resource();转载 2015-11-17 16:05:01 · 555 阅读 · 0 评论 -
Java类的连接与初始化
Java虚拟机通过装载、连接、初始化来使得一个Java类型可以被Java程序所使用,如下图所示,其中连接过程又分为验证、准备、解析三个部分。其中部分类的解析过程可以推迟到程序真正使用其某个符号引用时再去解析。解析过程可以推迟到类的初始化之后再进行,但这是有条件的,Java虚拟机必须在每个类或接口主动使用时进行初始化。以下为主动使用的情况:(1).(无论直接通过new创建出来原创 2015-11-15 15:51:31 · 674 阅读 · 0 评论 -
深入探索 Java 热部署
在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。对于某些大型的应用来说,每次的重启都需要花费大量的时间成本。虽然 osgi 架构的出现,让模块重启成为可能,但是如果模块之间有调用关系的话,这样的操作依然会让应用出现短暂的功能性休克。本文将探索如何在不破坏 Java 虚原创 2015-11-13 09:16:32 · 429 阅读 · 0 评论 -
在 JavaScript 中实现私有成员的语法特性
前言在面向对象的编程范式中,封装都是必不可少的一个概念,而在诸如 Java,C++等传统的面向对象的语言中, 私有成员是实现封装的一个重要途径。但在 JavaScript 中,确没有在语法特性上对私有成员提供支持, 这也使得开发人员使出了各种奇技淫巧去实现 JS 中的私有成员,以下将介绍下目前实现 JS 私有成员特性的几个方案以及它们之间的优缺点对比。现有的一些实现方案原创 2015-11-10 09:53:42 · 570 阅读 · 0 评论 -
资源大全系列(1):Java
很多程序员应该记得 GitHub 上有一个 Awesome – XXX 系列的资源整理。awesome-java 英文版(中文版的GitHub主页地址)就是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等。Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的原创 2015-11-09 09:14:05 · 3195 阅读 · 1 评论 -
Java 反射最佳实践
概要:最简单优雅的使用反射。本文的例子都可以在示例代码中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request。本文的示例代码主要是基于jOOR行编写的,如果想了解更多请查看这里的测试代码。固定连接:https://github.com/tianzhijiexian/Android-Best-Practices原创 2015-11-09 09:13:02 · 567 阅读 · 0 评论 -
深入理解重载和重写及与之相关的多态性
重载和重写除了在名称上有些相似之外,其实是完全不同的两个东西。重载的目的是使得我们能够用用一个统一的接口名称来调用一系列方法。这些方法的目的也许是一样的,但是它们的实现方式会根据传入的参数不同而不同。重写涉及到继承这个概念中的问题。子类继承了父类的方法,但是它可能需要有不同的操作行为,这时候就需要在子类中重写这个父类方法。重载本身并不是多态,同时运行时绑定重载方原创 2015-11-08 14:14:03 · 1410 阅读 · 0 评论 -
意外的内存分配:JIT编译抖动
我在 ByteWatcher (见我最后一篇文章)工作时,碰到了一些奇怪的事情。这是一段用来查找在特殊线程上分配了多少内存的真实代码片段。return (long) mBeanServer.invoke(name,GET_THREAD_ALLOCATED_BYTES,PARAMS,SIGNATURE);全部上下文参见这里。ht原创 2015-11-08 14:13:30 · 419 阅读 · 0 评论 -
Java IAQ:很少被回答的问题
Q:什么是很少被回答的问题?一个问题如果被回答地很少,有可能是因为知道答案的人很少,亦或是因为问题本身模糊不清、微不足道(但对你来讲可能很关键)。我似乎发明了一个术语,但是它在一个信息量很大的叫做About.com Urban legends 网站里也被提到了。Java相关的常见问题非常之多,但接下来我要讲的是Java不常问到的问题(不常见问题列表就没那么多了,其中包括了一些对C语言的冷嘲原创 2015-11-05 21:26:01 · 623 阅读 · 0 评论 -
借助 AOP 为 Java Web 应用记录性能数据
作为开发者,应用的性能始终是我们最感兴趣的话题之一。然而,不是所有的开发者都对自己维护的应用的性能有所了解,更别说快速定位性能瓶颈并实施解决方案了。今年北京 Velocity 的赞助商大多从事 APM 领域,提供性能剖析、可视化甚至优化的解决方案。这些厂商的产品看起来能够很好地帮助中小企业的开发者解决应用性能上的缺陷,但是这些产品几乎都有着一个致命的缺陷:极强的侵入性。开发者需要在业务生产原创 2015-11-05 21:24:35 · 441 阅读 · 0 评论 -
Java自动装箱和自动拆箱源码分析
自动装箱(boxing)和自动拆箱(unboxing)首先了解下Java的四类八种基本数据类型基本类型占用空间(Byte)表示范围包装器类型boolean1/8true|falseBooleanchar2-128~127Character原创 2015-11-05 21:22:29 · 396 阅读 · 0 评论 -
Java TreeMap 源码解析
签名(signature)123public class TreeMap extendsAbstractMap implementsNavigableMap, Cloneable, java.io.Serializable可以看到,相比HashMap来说,TreeMap多原创 2015-11-05 21:20:35 · 404 阅读 · 0 评论 -
浅谈Java字符串
我们先要记住三者的特征:String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)一、定义查看 API 会发现,String、StringBuffer、StringBuilder 都实现了 CharSequence 接口,内部都是用一个char数组实现,虽然它们都与字符串相关,但是其处理机制不同。Stri原创 2015-11-05 21:14:16 · 417 阅读 · 0 评论 -
java中常用的字符串的截取方法
1、length()字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length();2、charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); 返回'b'3、getChars() 截取多个字符 void原创 2015-11-04 22:08:35 · 448 阅读 · 0 评论 -
java截取字符串,截串,substring和split,分割字母和数字,正则缝隙
需求,把"01:大汽车",分成01和大汽车有两种做法:一是substringJava代码 package test; public class substringTest { public static void main(String args[]) { String N = "01:大汽车"; String L=""; S原创 2015-11-04 22:06:35 · 494 阅读 · 0 评论 -
知名公司的Java面试题
查看不同公司新鲜真实的Java面试题,摘自Glassdoor.com巴克莱投资:假设有一个 getNextparson() 方法返回 Person 对象,Person 类实现了 comparable 接口,现在从文件中读取记录并排序,然后给出前 1000 条记录,纸上作答答案见Glassdoor写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组。答案见Glassdoor原创 2015-11-04 21:58:52 · 706 阅读 · 0 评论 -
Set,List,Map,Vector,ArrayList的区别
Set,List,Map,Vector,ArrayList的区别JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMapCollection接口 C原创 2015-11-04 21:58:14 · 303 阅读 · 0 评论 -
偏执却管用的10条Java编程技巧
“任何可能出错的事情,最后都会出错。”这就是人们为什么喜欢进行“防错性程序设计”的原因。偏执的习惯有时很有意义,有时则不够清晰也不够聪明,也许当你想到这样写的人的时候还会觉得有点怪异。下面是我列出的的个人感觉最有用而又偏执的 10 项 Java 编程技巧。请看:1. 把字符串常量放在前面通过把字符串常量放在比较函数equals()比较项的左侧来防止偶然的 NullPointerExce原创 2015-11-04 21:55:35 · 322 阅读 · 0 评论 -
通过分析 JDK 源代码研究 Hash 存储机制
通过 HashMap、HashSet 的源代码分析其 Hash 存储机制实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素;对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统总是根据 Hash 算法来计算 key-value 的存储位置,这样可原创 2015-11-04 21:52:47 · 338 阅读 · 0 评论 -
Stackoverflow上人气最旺的10个Java问题
1、 为什么两个(1927年)时间相减得到一个奇怪的结果?(3623个赞)如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较:12345678910public static void main(String[] args)throws ParseException { Simpl原创 2015-11-04 21:52:02 · 426 阅读 · 0 评论 -
Java线程池介绍
根据摩尔定律(Moore’s law),集成电路晶体管的数量差不多每两年就会翻一倍。但是晶体管数量指数级的增长不一定会导致 CPU 性能的指数级增长。处理器制造商花了很多年来提高时钟频率和指令并行。在新一代的处理器上,单线程程序的执行速率确实有所提高。但是,时钟频率不可能无限制地提高,如处理器AMD FX-9590 的时钟频率达到5 GHz,这已经非常困难了。如今处理器制造商更喜欢采用多核原创 2015-11-04 21:50:29 · 393 阅读 · 0 评论 -
优化哈希策略
概述散列策略会对HashMap或HashSet之类的散列集合的性能产生直接的影响。内置的散列(又称哈希)函数都是通用的,在大多数使用情况下都能表现很好。但是我们能不能做的更好呢,特别是当你对某个用例产生了很好的想法时?测试一个散列策略在先前的一篇文章中,我研究了一些测试散列策略的方法,其中特别注意了一种“正交位”优化的散列策略,它仅仅只是改变一个位就能确保每个散列结果尽可能的不同。原创 2015-11-04 21:49:05 · 504 阅读 · 0 评论 -
深入理解 Java final 变量的内存模型
对于 final 域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个 final 域的写,与随后把这个构造对象的引用赋值给一个变量,这两个操作之间不能重排序初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序举个例子:12345678910111213原创 2015-11-04 21:48:08 · 379 阅读 · 0 评论 -
Java并发的四种风味:Thread、Executor、ForkJoin和Actor
本文由 ImportNew - shenggordon 翻译自 Oleg Shelajev。欢迎加入翻译小组。转载请见文末要求。这篇文章讨论了Java应用中并行处理的多种方法。从自己管理Java线程,到各种更好几的解决方法,Executor服务、ForkJoin 框架以及计算中的Actor模型。Java并发编程的4种风格:Threads,Executors,ForkJoin和A原创 2015-11-04 21:33:16 · 415 阅读 · 0 评论 -
Java 并发核心编程
内容涉及: 1、关于java并发 2、概念 3、保护共享数据 4、并发集合类 5线程 6、线程协作及其他 1、关于java并发 自从java创建以来就已经支持并发的理念,如线程和锁。这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2原创 2015-11-04 21:31:40 · 334 阅读 · 0 评论 -
Java中对象与字节数组相互转换
首先继承Serializable接口1.对象转换为字节数组public byte[] ObjectToByte(java.lang.Object obj) { byte[] bytes; try { //object to bytearray ByteArrayOutputStream bo原创 2015-11-04 17:54:05 · 752 阅读 · 0 评论 -
面试时经常考的------对字符串的操作(三)
** * 一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 *但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”, *应该输出为“我ABC”而不是“我ABC+汉的半个”。 */Code:public static void SplitIt(String SplitString, int Spli转载 2015-11-02 22:42:44 · 396 阅读 · 0 评论 -
Java动态规划 实现最长公共子序列以及最长公共子字符串
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】 求两字符序列的最长公共字转载 2015-11-02 22:38:58 · 5344 阅读 · 0 评论 -
Java动态规划 实现最长公共子序列以及最长公共子字符串
动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。【问题】 求两字符序列的最长公共字转载 2015-11-02 22:38:17 · 576 阅读 · 0 评论 -
Java企业系列面试题(基础篇)
Java是一种基于类和面向对象的计算机编程语言。 面向对象的软件开发的优点如下:代码模块化开发,从而导致维护和修改方便。可重用性的代码。提高了可靠性和代码的灵活性。增加代码的可读性。面向对象程序设计包含了许多显著的特点,如封装 , 继承 , 多态和抽象 :封装封装提供对象隐藏其内部特征和行为的能力。 每一个对象提供了一些方法,这些方法可以由其他对象来访问和改变其内部的数据。 在原创 2015-11-01 23:21:07 · 461 阅读 · 0 评论 -
多线程常见面试题
你有线程T1,T2和T3,你将如何确保线程T2运行后T1后,T3运行在T2线程后?它可以实现通过加入Thread类的join方法。Java中新锁接口相比synchronized有什么好处?要实现一个高性能缓存,它允许多个读,但单一的写,以保持完整性,你将如何实施呢?新锁接口提供了分离的两个单独读和写的锁,这样能够使用ConcurrentHashMap等高性能数据结构来实现高性能缓存原创 2015-11-01 23:20:18 · 404 阅读 · 0 评论 -
Java Collection集合面试题
Java集合Collection框架是什么?列出集合框架的一些好处?在每一种编程语言都有集合的使用,最初的Java版本包含了几类集合:向量,堆栈,哈希表,数组。但在更大的范围使用是在Java 1.2中集合框架想出了该组的所有集合接口,实现和算法。 Java集合的线程安全操作和使用泛型和并发集合类等。它还包括阻塞的接口及其实现在Java并发包。集合框架的好处是:使用核心集合类,而不需要实原创 2015-11-01 23:19:39 · 1701 阅读 · 0 评论 -
Java数据结构面试题
栈和队列的共同特点是(只允许在端点处插入和删除元素)4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构)5.下列关于栈的叙述正确的是(D) A.栈是非线性结构B.栈是一种树状结构C.栈具有先进先出的特征D.栈有后进先出的特征6.链表不具有的特点是(B)A.不必事先估计存储空间 B.可随机访问任一元素C.插入删除不需要移动元素 D.所需空间与线性表长度原创 2015-11-01 23:15:52 · 1035 阅读 · 1 评论 -
Java enum的用法详解
用法一:常量在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switchJDK1.6之前的switch语句只支持int,原创 2015-11-01 23:12:37 · 311 阅读 · 0 评论 -
Java+MySQL实现网络爬虫程序
网络爬虫,也叫网络蜘蛛,有的项目也把它称作“walker”。维基百科所给的定义是“一种系统地扫描互联网,以获取索引为目的的网络程序”。网络上有很多关于网络爬虫的开源项目,其中比较有名的是Heritrix和Apache Nutch。 有时需要在网上搜集信息,如果需要搜集的是获取方法单一而人工搜集费时费力的信息,比如统计一个网站每个月发了多少篇文章、用了哪些标签,为自然语言处理项原创 2015-11-01 23:08:54 · 657 阅读 · 0 评论 -
java高并发,如何解决,什么方式解决
之前我将高并发的解决方法误认为是线程或者是队列可以解决,因为高并发的时候是有很多用户在访问,导致出现系统数据不正确、丢失数据现象,所以想到的是用队列解决,其实队列解决的方式也可以处理,比如我们在竞拍商品、转发评论微博或者是秒杀商品等,同一时间访问量特别大,队列在此起到特别的作用,将所有请求放入队列,以毫秒计时单位,有序的进行,从而不会出现数据丢失系统数据不正确的情况。今天我经过查资料,原创 2015-10-22 22:25:18 · 1966 阅读 · 0 评论 -
java.io.Serializable浅析
Java API中java.io.Serializable接口源码:public interface Serializable{ } 类通过实现java.io.Serializable接口可以启用其序列化功能。未实现次接口的类无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义原创 2015-10-22 14:36:56 · 430 阅读 · 0 评论