Java中HashMap是一种用于存储“键”和“值”信息对的数据结构。不同于Array、ArrayList和LinkedLists,它不会维持插入元素的顺序。 因此,在键或值的基础上排序HashMap是一个很难的面试问题,如果你不知道如何解决的话。下面让各位同行看看如何解决这个问题...
JAVA
Java 8 对自带的排序算法进行了很好的优化。对于整形和其他的基本类型, Arrays.sort() 综合利用了双枢轴快速排序、归并排序和启发式插入排序。这个算法是很强大的,可以在很多情况下通用。针对大规模的数组还支持更多变种。本人拿自己仓促写的排序算法跟Java...
作为开发者,应用的性能始终是各位同行最感兴趣的话题之一。然而,不是所有的开发者都对自己维护的应用的性能有所了解,更别说快速定位性能瓶颈并实施解决方案了。 今年北京 Velocity 的赞助商大多从事 APM 领域,提供性能剖析、可视化甚至优化的解决方案。...
自动装箱(boxing)和自动拆箱(unboxing) 首先了解下Java的四类八种基本数据类型 基本类型 占用空间(Byte) 表示范围 包装器类型 boolean1/8true|falseBoolean char2-128~127Character byte1-128~127Byte short2-2 15~2 15-1.....
这篇文章通过实例讨论了: - java.concurrent.Lock创建的垃圾 - 比较Lock和synchronized - 如何通过编程方式计算延时 - Lock和synchronized竞争带来的影响 - 延迟测试中由于遗漏(co-ordinated omission)可能对结果的影响 回到本人最喜欢的一个主题:垃圾...
大部分Java开发者都在使用Map,特别是HashMap。HashMap是一种简单但强大的方式去存储和获取数据。但有多少开发者知道HashMap内部如何工作呢?几天前,本人阅读了java.util.HashMap的大量源代码(包括Java 7 和Java 8),来深入理解这个基础的数据结构。在这篇...
Java集合类的整体架构 比较重要的集合类图如下: 有序否 允许元素重复否Collection 否 是List 是 是Set AbstractSet 否 否HashSetTreeSet 是(用二叉树排序)Map AbstractMap 否 使用 key-value 来映射和存储数据, Key 必须惟一, value 可以重复HashMapTree...
Mydumper 是 MySQL 数据库服务器备份工具,它比 MySQL 自带的 mysqldump 快很多。它还有在转储的同时获取远程服务器二进制日志文件的能力。Mydumper 的优势 并行能力 (因此有高速度) 和性能 (高效的代码避免了耗费 CPU 处理能力的字符集转换过程) 更容易管理...
统计数据来自Java“死亡”竞赛——一个针对开发者的迷你测验 几个月前,各位同行在一个小型网站上发布了一个称为Java“死亡竞赛”的新项目。测验发布后,超过20000位开发者参加了测验。网站以20道关于Java的多选题为主。各位同行得到了众多开发者的测验统计数...
当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证系统稳定。当出现crash时,该文件默认会生成到工作目录下,然而可以通过jvm参数指定生成...
在沉浸于编码一段时间以后(比如说本人已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常。因为,你知道的…… 任何事情有可能出错,没错,的确如此。 这就是为什么各位同行要采用“防御性编程”,即一些偏执习惯的原因。下面是本人个人认...
在这篇“Java 8新特性教程”系列文章中,各位同行会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值。 在之前的文章“遍历、过滤、处理集合及使用Lambda表达式增强方法”中,本人已经深入解释并演示了通过...
OpenJDK 8 有多种 GC(Garbage Collector)算法,如 Parallel GC、CMS 和 G1。哪一个才是最快的呢?如果在 Java 9 中将 Java 8 默认的 GC 从 Parallel GC 改为 G1 (目前只是建议)将会怎么样呢?让各位同行对此进行基准测试。 基准测试方法 运行相同的代码六...
在Java中,内存泄露和其他内存相关问题在性能和可扩展性方面表现的最为突出。各位同行有充分的理由去详细地讨论他们。 Java内存模型——或者更确切的说垃圾回收器——已经解决了许多内存问题。然而同时,也带来了新的问题。特别是在有着大量并行用户的J2EE运...
这是一篇阅读MAT helper的笔记。Heap dump是java进程在特定时间的一个内存快照。通常在触发heap dump之前会进行一次full gc,这样dump出来的内容就包含的是被gc后的对象。 dump文件包含的内容: 1,全部的对象:类,域,原生值和引用; 2,全部的类:classlo...
熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor。大家可能了解到它的原理,甚至看过它的源码;但是就像本人一样,大家可能对它的作用存在误解。现在问题来了,jdk为什么要提供java线程池?使用j...
以下是笔者认为比较经典的关于Java main方法的面试题,与其说是Java面试题,其实也是Java的一些最基础知识问题,分享给大家,如有错误,请指出。1.不用main方法如何定义一个类? 不行,没有main方法各位同行不能运行Java类。 在Java 7之前,你可以通过使用静...
本人成为一个Java程序员距今已有一段时日。最近,有人问本人关于Java修饰符关键字的一个问题,但本人根本不知道那是什么。所以本人觉得除了实际编程和算法,本人也有必要学习这些内容。 通过谷歌搜索,本人只得到一些琐碎的要点,并不完整。所以本人以此主题...
Java OAuth 2.0 客户端编程(一): 资源所有者密码凭据授权 Java OAuth 2.0 客户端编程(二): 客户端凭据授权 Java OAuth 2.0 客户端编程(三):认证码授权 概述 OAuth 是一个开放的授权标准,允许客户端代表一个资源所有者获得对受保护服务器资源的访问权...
Java OAuth 2.0 客户端编程(一): 资源所有者密码凭据授权 Java OAuth 2.0 客户端编程(二): 客户端凭据授权 Java OAuth 2.0 客户端编程(三):认证码授权 概述 OAuth 是一个开放的授权标准,允许客户端代表一个资源所有者获得访问受保护服务器资源的访问...
字符串操作优化 字符串对象 字符串对象或者其等价对象 (如 char 数组),在内存中总是占据最大的空间块,因此如何高效地处理字符串,是提高系统整体性能的关键。 String 对象可以认为是 char 数组的延伸和进一步封装,它主要由 3 部分组成:char 数组、偏移...
为对象的类型做强制转换是一种非常不好的设计。但在某些情况下,各位同行没有其他选择。Java自诞生的那一天起,就具备这种功能。 本人认为Java 8在一定程度改善了这项古老的技术。 静态转型 Java中最常用的转型方式如下: 静态转型 Object obj; // may be a...
本人非常确定,作为开发人员各位同行都喜爱技术文档。各位同行喜欢阅读文档、写文档,更不用说维护文档了,本人简直爱死它了! 本人也知道,每次你创建一个类或者一个方法,你都会想到要为此写文档。本人也很确定你很享受于写文档,就像你喜欢偶尔美味的汉堡...
对Java 9的炒作将不再局限于模块化(modularity),Java 9正在搜罗大量额外的功能模块,这些功能模块正作为Java增强提案(JEP)提交,并在OpenJDK (Java SE的参考实现项目)中实现。 在这篇文章中,各位同行将重点关注一些或将在Java 9整个生命周期中,对开...
Java I/O I/O,即 Input/Output(输入/输出) 的简称。就 I/O 而言,概念上有 5 种模型:blocking I/O,nonblocking I/O,I/O multiplexing (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX aio_functions)。不同的操作系统对上述...