Java基础
文章平均质量分 75
铁锚
系统架构师,Java性能调优专家。热爱程序开发和设计; 积极应对各种情境和挑战;
喜欢钻研新技术, 闲暇时喜欢翻译和分析英文文档/技术博客。
展开
-
让调用者自己干活的特殊线程池
单元测试时, 我们的某些业务代码可能是在线程池中运行的,就会出现各种不一致的情况。这时候可以hack一下, 创建一个调用者直接执行的线程池,避免干扰;原创 2024-05-15 16:28:10 · 537 阅读 · 0 评论 -
通过SDKMAN安装各种版本JDK
通过SDKMAN安装各种版本JDK。原创 2024-03-04 16:09:12 · 1056 阅读 · 0 评论 -
SwaggerUI增加公共的Global全局Header
为了调试方便, 想要在 SwaggerUI 的 "Try it out" 页面中增加一个认证 Header, 一个个接口添加注解就太麻烦了,有没有什么方式可以全局生成呢? 网上找了很多资料都不生效, 最后终于搞定了, 所以才有了这篇文章。原创 2023-05-06 12:28:57 · 3759 阅读 · 3 评论 -
合理使用DTO(Data Transfer Object)
DTO, 全称为 Data Transfer Object, 我们一般称之为: 数据传输对象。到底什么才算是DTO, 存才哪些滥用情况呢?原创 2022-12-02 21:31:20 · 6058 阅读 · 0 评论 -
浅析String与hashCode
String 类的 hash 冲突比较严重, 我们在系统开发和设计中, 要避开这个潜在的性能坑。原创 2022-08-23 14:55:55 · 1441 阅读 · 1 评论 -
深入JVM - 实例详解invoke相关操作码
Java虚拟机规范中有一个章节专门列出了操作码助记符, 对应的链接为: Java Virtual Machine Specification: Chapter 7. Opcode Mnemonics by Opcode其中, 方法调用相关的操作码为:十进制十六进制助记符说明182(0xb6)invokevirtual调用类的实例方法;183(0xb7)invokespecial调用特殊实例方法; 如构造函数、超类方法,以及private184(0xb8)原创 2021-01-11 10:47:34 · 2082 阅读 · 2 评论 -
检查HTTP 的 Basic认证代码示例-JSP
检查HTTP 的 Basic认证. since http1.0; 请参考代码中的注释,具体信息,还可以参考《图解HTTP》看着这本书中的HTTP-Basic认证手痒,就写了这么一个demo代码。原创 2015-06-11 11:17:15 · 2463 阅读 · 0 评论 -
检查HTTP 的 Digest 认证代码示例-JSP
检查HTTP 的 Digest 认证. since http1.1; 请参考代码中的注释,具体信息,还可以参考《图解HTTP》 看着这本书中的HTTP-Digest认证, 写了这么一个demo代码。...原创 2015-06-18 21:50:17 · 4015 阅读 · 0 评论 -
Java Heap dump文件分析工具jhat简介
jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成为标配. 使用该命令需要有一定的Java开发经验. jhat 命令解析Java堆转储文件,并启动一个 web server. 然后用浏览器来查看/浏览 dump 出来的 heap. jhat 命令支持预先设计的查询, 比如显示某个类的所有实例. 还支持 对象查询语言(OQL, Object Query Language)。 OQL有点类似SQL,专门用来查询堆转储。 OQL相关的帮助信息可以在 jhat翻译 2014-11-24 14:29:20 · 59260 阅读 · 2 评论 -
关于MAVEN找不到JDK的那点事
自从SUN被Oracle收购以后,JDK就由Oracle来提供了。在新版本之中,如果你下载JDK安装以后,又选择了JRE安装(当然,现在JRE直接叫做Java了),那么,恭喜你,在 C:\windows\System32\ 这个文件夹下, java.exe以及 javaw.exe 都有了,但是没有javac,如果使用Eclipse + Maven来构建项目,则会报错 ,反正类似于 你的运行环原创 2013-05-27 13:02:31 · 8976 阅读 · 0 评论 -
Junit指定测试执行顺序
原文链接: Test execution order原文日期: 2012年12月06日翻译日期: 2014年7月2日翻译人员: 铁锚说明: Junit4.11版本及以后才支持,建议升级到最新版本.按照设计原则,JUnit是不指定测试方法调用执行顺序的。目前为止,这些方法只是简单地按照反射(reflection) API返回的顺序执行。但是,使用JVM默认提供的排序是很不明智的,因为Java平台没有翻译 2014-07-02 15:18:41 · 28122 阅读 · 0 评论 -
测试AtomicInteger与普通int值在多线程下的递增操作
日期: 2014年6月10日作者: 铁锚Java针对多线程下的数值安全计数器设计了一些类,这些类叫做原子类,其中一部分如下:java.util.concurrent.atomic.AtomicBoolean;java.util.concurrent.atomic.AtomicInteger;java.util.concurrent.atomic.AtomicLong;java.util.co原创 2014-06-10 19:23:43 · 13253 阅读 · 13 评论 -
Java注解介绍
原文链接: Java Annotations: An Introduction原文日期: 2005年10月14日翻译日期: 2014年07月20日翻译人员: 铁锚翻译完后,感觉这篇文章是不是在http://www.developer.com被挖坟了?Java注解介绍基于注解(Annotation-based)的Java开发无疑是最新的开发趋势.[译者注: 这是05年的文章,在2014年,毫无疑问,翻译 2014-07-20 18:38:08 · 10761 阅读 · 0 评论 -
JDK6和JDK7中String的substring()方法及其差异
JDK6与JDK7中String的 substring()方法有何差异,在java 6 之中会有什么样的性能问题? 本文用三幅图以及示例来做解答.翻译 2013-11-02 19:06:40 · 17045 阅读 · 26 评论 -
Java Lambda表达式入门
原文链接:Start Using Java Lambda Expressions下载示例程序 Examples.zip 。原文日期: 2014年4月16日翻译日期: 2014年4月27日翻译人员: 铁锚简介(译者认为: 超过3行的逻辑就不适用Lambda表达式了。虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用...翻译 2014-04-27 21:17:58 · 232044 阅读 · 44 评论 -
MyEclipse优化全攻略
小伙伴们在使用MyEclipse时,很耗内存有木有?经常卡死有木有? 本文告诉你如何快速进行MyEclipse优化。原创 2014-07-22 00:04:50 · 36003 阅读 · 3 评论 -
Java: 如何屏蔽System.exit()
System.exit() 的本质是通知 JVM 关闭。一般来说,有两种禁用 System.exit() 的办法:安全管理器安全策略本质都是JRE 提供的本地实现,在执行之前进行权限判断。因为System.exit() 是一种很暴力的手段,如果在 Client 模式下自己写个小程序无所谓,但是在 Server 上多个程序、或者多线程时就会有很大的麻烦原创 2015-08-25 16:08:47 · 10162 阅读 · 2 评论 -
Java9: REPL环境与编程
有个段子说: 为什么程序员看起来整天都无所事事的呢? 他们正在编译代码。。。如果有一个交互式的控制台有什么好处呢? 译者的体验是, 在测试字符串,正则等很简单的程序时,简直是太方便了.翻译 2015-09-16 00:59:14 · 5420 阅读 · 1 评论 -
解析一个Java对象占用多少内存空间
说明: alignment, 对齐, 比如8字节的数据类型long, 在内存中的起始地址必须是8的整数倍。padding, 补齐; 在对象所占据空间的末尾,如果有空白, 需要使用padding来补齐, 因为下一个对象的起始位置必须是4/8字节(32bit/64bit)的整数倍(这又是一种对齐)。问题描述一个对象具有100个属性, 与100个对象每个具有1个属性, 哪个占用的内存空间更大...原创 2019-07-13 16:02:15 · 12961 阅读 · 2 评论 -
Java正则系列: (2)量词
翻译说明 greedy: 贪婪型, 最大匹配方式; reluctant: 懒惰型, 最小匹配方式; possessive: 独占型, 全部匹配方式; 也翻译为[支配型]; 这3种量词, 是修饰量词的量词, 可以理解为正则格式重复的匹配类型。量词量词(Quantifier)用来指定某部分正则所重复的次数。为了方便,本文分别介绍 Pattern A翻译 2018-01-11 00:08:27 · 1942 阅读 · 0 评论 -
Java正则系列: (1)入门教程
本文简要介绍Java的正则表达式及其实现方式,并通过实例讲解正则表达式的具体用法。1. 正则表达式1.1. 简介正则表达式(Regular Expression), 简称 正则, 也翻译为 正规式, 用来表示文本搜索模式。英文缩写是 regex(reg-ex). 搜索模式(search pattern)可能多种多样, 如, 单个字符(character), 特定字符串(f翻译 2018-01-03 02:04:04 · 3424 阅读 · 1 评论 -
Java技巧: 根据网址/域名查询DNS/IP地址
需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的IP地址和端口号。 说明: 本文不涉及底层的 DNS 协议, 直接使用Java平台提供的API进行操作。DNS也就是 Domain Name Service,即 域名服务。我们知道, Java中与网址有关的类包括 java.net.URL 和 ...原创 2017-12-05 16:48:58 · 6667 阅读 · 4 评论 -
Java101系列文章
Java101 的意思是Java入门课程,因为美国很多入门课程就叫101.比如著名的 CS101,计算机科学入门希望在后面慢慢将这个系列的文章翻译完.翻译 2014-09-21 19:20:18 · 20236 阅读 · 0 评论 -
Java中hashCode与equals方法的约定及重写原则
Java中Set的contains()方法 —— hashCode与equals方法的约定及重写原则翻译人员: 铁锚翻译时间: 2013年11月5日原文链接: Java hashCode() and equals() Contract for the contains(Object o) Method of Set本文主要讨论 集合Set 中存储对象的 hashCode 与 equals ...翻译 2013-11-05 11:27:14 · 40534 阅读 · 1 评论 -
使用异步servlet提升性能
本文针对当今 webapp 中一种常碰到的问题,介绍相应的性能优化解决方案。如今的WEB程序不再只是被动地等待浏览器的请求, 他们之间也会互相进行通信。 典型的场景包括 在线聊天, 实时拍卖等 —— 后台程序大部分时间与浏览器的连接处于空闲状态,翻译 2016-12-08 00:03:42 · 7292 阅读 · 2 评论 -
如何查找YUM 安装的 JAVA_HOME
很多需要javac 的程序依赖 JAVA_HOME环境变量.如果是手工下载源码安装的JDK,很容易知道JAVA_HOME的目录. 例如whereis javac javac: /usr/local/jdk1.8.0_74/bin/javac那么对应的 JAVA_HOME 为 /usr/local/jdk1.8.0_74.而 YUM 安装的 jdk, 不需要配置 PATH, 因为已经自动使用软连接原创 2016-09-22 11:26:57 · 23643 阅读 · 3 评论 -
认识 sun.misc.Unsafe
Oracle 最近宣称要在 Java 9 中去除私有 API: sun.misc.Unsafe, 这就像点燃了炸药桶, 遭到 许多开发者的抗议, 他们认为 这会严重破坏Java的生态系统翻译 2016-01-19 20:19:48 · 3719 阅读 · 0 评论 -
如何实现 集群化/Session 复制-doc(cluster-howto.html)
源文档链接: http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 翻译日期: 2014年3月19日翻译人员: 铁锚感受: Tomcat 的这个集群有很多问题, 所以如果需要做分布式集群,最好使用无状态的应用程序,外加缓存系统。假如改造旧系统,那么也许可以参考一下。翻译如下:Apache Tomcat 6.0翻译 2014-03-19 18:36:19 · 4360 阅读 · 1 评论 -
对Java配置文件中敏感信息进行加解密的工具类
在 JavaEE 配置文件中,例如 XML 或者 properties 文件,由于某些敏感信息不希望普通人员看见,则可以采用加密的方式存储,程序读取后进行解密。常见的如: 数据库用户密码,短信平台用户密码,系统间校验的固定密码等。本工具类参考了 《Spring.3.x企业应用开发实战》一书 5.3节的实现。完整代码与注释信息如下:package com.cncounter.util原创 2014-03-19 10:26:12 · 5742 阅读 · 1 评论 -
Java高效计数器
翻译人员: 铁锚翻译时间: 2013年11月3日原文链接: Efficient Counter in Java我们经常使用 HashMap作为计数器(counter)来统计数据库或者文本中的某些东西.本文将使用HashMap来实现计数器的3种不同方式进行对比。1. 新手级计数器如果使用这一类别的计数器,那么代码大致如下所示:String source = "翻译 2013-11-04 10:48:29 · 24788 阅读 · 4 评论 -
为什么String要设计成不可变的?
翻译人员: 铁锚翻译日期: 2013年11月18日原文链接: Why string is immutable in Java ?这是一个老生常谈的话题(This is an old yet still popular question). 在Java中将String设计成不可变的是综合考虑到各种因素的结果,想要理解这个问题,需要综合内存,同步,数据结构以及安全等方面的考虑.翻译 2013-11-18 20:30:03 · 33689 阅读 · 13 评论 -
打包jar类库与使用jar类库
翻译人员: 铁锚翻译时间: 2013年11月17日原文链接: Build a Java library by using jar file代码复用是软件开发中很重要的一个原则.将常用的函数构建为类库是一个很好的解决方法,什么时候要用到这些功能,只需要调用就好了.下面将演示如何导出jar类库与使用jar包:1. 导出jar类库打开Eclipse,选定工作空间.工作空间翻译 2013-11-17 21:54:45 · 6827 阅读 · 0 评论 -
Java日期格式化
翻译人员: 铁锚翻译时间: 2013年11月17日原文链接: Simple example to show how to use Date Formatting in Java代码示例如下,说明参见注释: import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Dat翻译 2013-11-17 20:10:23 · 4968 阅读 · 0 评论 -
深入理解Arrays.sort()
翻译人员: 铁锚翻译日期: 2013年11月16日原文链接: Deep Understanding of Arrays.sort(T[], Comparator c)Arrays.sort(T[], Comparator c) 方法用于对象数组按用户自定义规则排序.官方Java文档只是简要描述此方法的作用,并未进行详细的介绍,本文将深入解析此方法。1. 简单示例翻译 2013-11-16 18:23:56 · 33398 阅读 · 6 评论 -
Java字符串排序中文+数字
编写日期: 2013年9月15日另一中解法:点击查看解决思路: 在Java中,排序需要复写的是 equals 方法 和 Comparable 接口 的public int compareTo(T o); 方法步骤:1. 使用正则表达式来判断数字,多个连续的数字作为一组,2. 一次检索出数字组合,3. 检出下一组数字,如果有,则进入步骤4,否则进入步骤6.4. 如果两组原创 2013-09-15 16:34:49 · 11273 阅读 · 0 评论 -
关于Tomcat的URIEncoding以及GET乱码
最近在维护着Linux上的服务器,当然,开发和前期测试是在windows上执行的。在做意见反馈的时候,出现了windows上正常,Linux下却是乱码的问题。先排查了web服务器与mysql的连接,确认问题处在前端页面和web之间的乱码交互。前端的代码如下:是jQuery的跨域提交。$(function(){ // var $btn_green = $(".btn_green"原创 2013-09-07 11:01:35 · 96111 阅读 · 3 评论 -
关于Java的移位运算符
/** * 测试移位运算符 * " * ">>" 带符号右移 : 左侧补符号位:正数补0,负数补1 * ">>>"无符号右移 : 左侧补0 */public class TestShift { public static void main(String[] args) { testLeftShift(); testRightShift(); testUnsignedRi原创 2013-06-27 17:24:48 · 3144 阅读 · 0 评论 -
Java初级面试题
//请问执行下面的程序大致会输出类似什么内容?public class TestThisToString{ public String toString(){ return "my memory location is :" + this; } public static void main(String[] args) { System.out.println(n原创 2013-07-11 21:04:50 · 2212 阅读 · 1 评论 -
关于try 和 throw 简单示例
//每过一段时间,就总是会对try有点生疏,特别写了个程序来测试以下。加深印象。// 退出一段代码(即某个Method,或者某个块),有三种方法: throw,return,以及正常执行完。// 有时候 throw是底层抛出来的,你不处理,默认就throw了。// TestTry.java/** * 输出结果为:java.lang.Exception: test3() 抛出的异常 at te原创 2013-06-06 19:46:51 · 3924 阅读 · 0 评论 -
关于String常量的编译器优化
先贴源代码如下所示:使用Eclipse编译器,JDK1.6public class TestString { public static void main(String[] args) { String s = "a"+"b"+"c"+"d"; System.out.println(s); }}再来看看,使用jd-gui,也就是Java Decompiler查看的反编译后的原创 2013-06-13 10:58:20 · 1830 阅读 · 0 评论