自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(190)
  • 收藏
  • 关注

翻译 Linux的10个经典彩蛋

每当你打开的Linux虚拟主机的时候,通常是为了完成工作。但是,一台普通的Linux主机上,有成千上万的开发者开发的软件,你能保证他们都是这么正经的?Linux的软件有加一些有趣的彩蛋的传统。本文主要是介绍一些有趣的命令和选项,让你的生活更多彩一些。这些并非全是彩蛋,不过我相信你多少会喜欢它们的。文本编辑器vim和Douglas Adams熟悉Douglas Ada

2014-03-10 23:06:07 7837 1

翻译 Java那些不为人知的特殊方法

如果你用过反射并且执行过 getDeclaredMethods方法的话,你可能会感到很惊讶。你会发现很多源代码里没有的方法。或许你也看过到这些方法的一些修饰符,并且发现里面有的方法是volatile的。顺便说一句,Java面试里如果问到“什么是volatile方法?”,你可能会出一身冷汗。正确的答案应该是方法不能是volatile的。

2014-03-07 17:13:47 5231 10

转载 下一代的多语言JVM:GraalVM

GraalVM是一款高性能的可嵌入式多语言虚拟机,它能运行不同的编程语言,包括:基于JVM的语言,比如Java, Scala, Kotlin和Groovy解释型语言,比如JavaScript, Ruby, R和Python配合LLVM一起工作的原生语言,比如C, C++, Rust和SwiftGraalVM能有效地支持多语言应用,你可以在一个进程里同时使用多种编程语言而不会带来明显的性...

2019-08-16 13:35:22 4131

转载 Kubernetes简介及入门

如今单体应用(monolithic application)日渐被认为是一种反模式(antipattern),而云平台则成为了应用部署的香饽饽。这个转变可不仅仅像是在别人的机器上启动一个虚机那么简单。如何能有效地利用云的资源和伸缩性,意味着和要过去的单体应用划清界限,转而拥抱新的架构和开发实践。微服务正逐渐成为云端应用及服务分发的事实标准。应用被拆分成松耦合的小模块,每个模块都有自己的职责。这种...

2019-08-10 10:07:26 505

转载 云原生微服务框架——Helidon

在互联网早期的相当长一段时间内,WEB应用都是”单体应用(monolithic)“。也就是说所有的API和前端展示层代码都被封装在一个独立的、自给自足的应用当中。业务逻辑,校验,数据获取及计算,持久化,安全,UI都封装成一个大的包,部署在应用服务器或者web服务器上,比如说Tomcat, Apache或者Microsoft IIS。这个方法过去有效,未来也仍将有效,只不过当你的应用到达一定规模之后...

2019-08-04 19:31:53 2908

通过JVM日志来进行安全点分析

许多事件都可能会导致JVM暂停所有的应用线程。这类暂停又被称为"stop-the-world"(STW)暂停。触发STW暂停最常见的原因就是垃圾回收了([url=http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#FollowReferences]github中的一个例子](https://github.com/gvsmir...

2015-05-25 11:12:50 294

Java不同并发实现的性能比较

[img]http://384uqqh5pka2ma24ild282mv.wpengine.netdna-cdn.com/wp-content/uploads/2015/01/ForkJoinWars.jpg[/img][b]Fork/Join框架在不同配置下的表现如何?[/b]正如即将上映的星球大战那样,Java 8的并行流也是毁誉参半。并行流(Parallel Stream...

2015-01-22 16:49:56 843

Java线程的5个使用技巧

[img]http://384uqqh5pka2ma24ild282mv.wpengine.netdna-cdn.com/wp-content/uploads/2015/01/threadfred.jpg[/img][*]*Java线程有哪些不太为人所知的技巧与用法?**萝卜白菜各有所爱。像我就喜欢Java。学无止境,这也是我喜欢它的一个原因。日常工作中你所用到的工具,通常都有...

2015-01-21 11:55:23 241

Java不同压缩算法的性能比较

本文将会对常用的几个压缩算法的性能作一下比较。结果表明,某些算法在极端苛刻的CPU限制下仍能正常工作。文中进行比较的算有:[*] JDK GZIP ——这是一个压缩比高的慢速算法,压缩后的数据适合长期使用。JDK中的java.util.zip.GZIPInputStream / GZIPOutputStream便是这个算法的实现。[*] JDK deflate ——这是JD...

2015-01-04 11:51:04 204

动态语言已死?

真相总会不期而遇。它们总是不经意间降临,譬如当我读到这条微博的时候:[i]这是关于Facebook的Flow的一个很不错的讨论 – http://t.co/5KTKakDB0w— David J. Pearce (@whileydave) November 23, 2014[/i]David是[url=http://whiley.org/download/G...

2014-12-19 14:06:36 236

JVM的自愈能力

在IT行业,碰到问题的第一个反应通常是——“你重启过没”——而这样做可能会适得其反,本文要讲述的就是这样的一个场景。接下来要介绍的这个应用,它不仅不需要重启,而且毫不夸张地说,它能够自我治愈:刚开始运行的时候它可能会碰到些挫折,但会渐入佳境。为了能实际地展示出它的自愈能力,我们尽可能简单地重现了这一场景,这个灵感还得归功于[url=http://www.javaspecialists.eu...

2014-12-15 11:46:52 148

切勿自作聪明,慎用双括号反模式

我经常发现有人会使用双括号这个反模式来进行编程(也被称为[url=http://stackoverflow.com/q/27193550/521799]双括号初始化](http://stackoverflow.com/q/1958636/521799))。[Stack Overflow上刚刚又有一个[/url]:[code="java"]Map source = new Has...

2014-12-12 13:56:02 338

ExecutorService的十个使用技巧

[url=http://www.oracle.com/technetwork/java/eol-135779.html]ExecutorService](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html)这个接口从Java 5开始就已经存在了。这得追溯到2004年了。这里小...

2014-11-26 09:16:49 187

编程语言简史

一个朋友在跟我一块吃午饭的时候问了我一个问题:现代编程语言的发展历程是什么样的,它是如何发展到现在这样的?他觉得我应该能答得上来,但其实我只能说个大概。我跟他提了下机器语言,以及人们为了简化它所做的努力,并逐渐发明了一些更抽象的语言,它们最终会被翻译成0和1。但是——一个偶然的机会我看到了Crockford关于Javascript的[url=https://www.youtube....

2014-11-10 12:02:38 178

JVM堆大小的自适应能力

在完善我们的测试台以便提高[url=https://plumbr.eu/wp-content/uploads/2014/10/plumbr-adaptive-heap-example.zip]Plumbr](https://plumbr.eu/gc)排查GC故障能力的时候,我编写了[一个小小的测试用例[/url],我觉得应该会有不少人对它感兴趣。我的目标是测试JVM在不同的伊甸区(Eden), 存...

2014-11-07 17:48:07 475

Akka笔记之配置及调度

正如前几篇文章中所看到的,我们可以通过ActorSystem的actorOf方法来创建一个Actor。其实ActorSystem还可以做许多事情。本篇中我们来看下如何用它来进行配置及调度。我们先看下[url=http://doc.akka.io/api/akka/2.3.6/?_ga=1.199598318.1764812650.1409147182#akka.actor.ActorSys...

2014-10-26 16:33:40 193

Akka笔记之请求与响应

前面我们讲到了Actor的[url=http://it.deepinmind.com/akka/2014/10/19/akka-notes-actor-messaging-1.html]消息传递[/url],并看到了如何发送一条fire-n-forget消息(也就是说,消息发送给Actor后我们就不管了,不从Actor那接收响应)。技术上来讲,消息发送给Actor就是希望能有副作用的。设计...

2014-10-25 18:00:02 189

Akka笔记之日志及测试

在前两篇笔记中([url=http://it.deepinmind.com/akka/2014/10/19/akka-notes-actor-messaging-1.html]第一篇](http://it.deepinmind.com/akka/2014/10/11/introducing-actors-akka-notes-part-1.html),[第二篇[/url]),我们简单地介绍了一...

2014-10-22 14:30:11 203

Akka笔记之Actor简介

写过多线程的人都不会否认,多线程应用的维护是件多么困难和痛苦的事。我说的是维护,这是因为开始的时候还很简单,一旦你看到性能得到提升就会欢呼雀跃。然而,当你发现很难从子任务的错误中恢复或者有些僵尸BUG很难复现再或者你的分析器显示你的线程在写入一个共享状态前大部分时间都浪费在阻塞上面的时候,痛苦降临了。 我刻意没提Java的并发API,以及它里面的集合类使得多线程编程变得多么轻松简单,因为...

2014-10-11 12:24:57 172

分布式系统中的数据同步

许多人在日常工作中都会用到分布式系统,它的好处就是它所提供的稳定性,容错性以及伸缩性使我们能更容易地构建出稳定,高效的应用。然而分布式系统的使用非常具有挑战性,包括数据同步以及理解冲突的意义。分布式系统中的数据同步本身就是一项非常巨大的挑战。如果光看物理时间戳的话我们无法确定哪个版本的数据才是最新的,因为你无法确保所有的实体的物理时钟都是完美同步的。比如说,两台同步的服务器将时间戳写入...

2014-10-09 23:51:20 629

空指针的救星

没人会喜欢空指针异常!有什么方法可以避免它们吗?或许吧。。本文将讨论到以下几种技术Optional类型(Java 8中新引入的)Objects类(Java 7中原有的)Java 8中的Optional类它是什么?Java 8中新引入的类型它是作为某个指定类型的对象的包装器或者用于那些不存在对象(null)的场景简单来说,它是处理空值的一个更好的替代品(警告:乍一看...

2014-09-29 16:54:01 120

开发人员必须了解的一个SQL技巧

对于数据过滤而言CHECK约束已经算是相当不错了。然而它仍存在一些缺陷,比如说它们是应用到表上面的,但有的时候你可能希望指定一条约束,而它只在特定条件下才生效。使用SQL标准的WITH CHECK OPTION子句就能完成这点,至少Oracle和SQL Server都实现了这个功能。下面是实现方式:[code="java"]CREATE TABLE books ( ...

2014-09-28 20:16:06 186

Bash漏洞那些事儿

还记得Heartbleed漏洞吗?如果你相信今天这个铺天盖地的传言,那说明Shellshock和它是一类的,它的名字也同样令人畏惧(弹震症,一种精神疾病),就是缺了个酷点的LOGO而已(这些漏洞的市场部的人需要加把劲了)。不过认真来讲,它还是有可能成为一个大麻烦的,正如上次heartbleed漏洞中[url=http://www.troyhunt.com/2014/04/everything-yo...

2014-09-26 11:40:20 195

lambda表达式的副作用

[b]概述[/b]Java 8添加了lambda表达式及类型推导的特性。这使得语言更加简练和整洁,然而正因这样,你没有明确说明自己究竟要做什么,这也带来了一些副作用。[b]lambda表达式的返回值很重要[/b]Java 8会去推导闭包的类型。推导的一个方式就是去查看它的返回值(或者是否有返回值)。而这带来的副作用令人咋舌。看下这段代码。[code="java"]...

2014-09-25 23:25:17 379

使用JSoup解析HTML文件

HTML是WEB的核心,互联网中你看到的所有页面都是HTML,不管它们是由JavaScript,JSP,PHP,ASP或者是别的什么WEB技术动态生成的。你的浏览器会去解析HTML并替你去渲染它们。不过如果你需要自己在Java程序中解析HTML文档并查找某些元素,标签,属性或者检查某个特定的元素是否存在的话,那又该如何呢?如果你已经使用Java编程多年了,我相信你肯定试过去解析XML,也使用过...

2014-09-24 12:02:18 277

GC对吞吐量的影响

在看[url=http://www.memorymanagement.org/glossary/m.html#term-memory-management]内存管理术语表[/url]的时候偶然发现了”[url=http://www.memorymanagement.org/glossary/p.html#term-pig-in-the-python]Pig in the Python[/url](...

2014-09-22 00:19:15 515

Java代码中的常见问题

本文列举了我在周围同事的Java代码中看到的一些比较典型的错误。显然,静态代码分析(我们团队用的是qulice)不可能发现所有的问题,这也是为什么我要在这里列出它们的原因。如果你觉得少了什么,请不吝赐教,我会很乐意把它们加上。下面列出的所有这些错误基本都与面向对象编程有关,尤其是Java的OOP。[b]类名[/b]读下这篇短文“[url=https://github...

2014-09-19 18:11:43 116

JVM中的字符串去重

本文将为你简单介绍一下Java 8 update 20中引入的字符串去重的特性。从平均情况来看,应用程序中的String对象会消耗大量的内存。这里面有一部分是冗余的——同样的字符串会存在多个不同的实例(a != b, 但a.equals(b))。在实践中,有许多字符串会出于不同的原因造成冗余。最初JDK提供了一个String.intern()方法来解决字符串冗余的问题。这个方法的缺...

2014-09-17 16:33:41 482

不同的垃圾回收器的比较

[b]4款Java垃圾回收器——错误的选择导致糟糕的性能[/b]现在已经是2014年了,但是对大多数开发人员而言有两件事情仍然是个谜——垃圾回收以及异性(码农又被嘲笑了)。由于我对后者也不是特别了解,我想我还是试着说说前者吧,尤其是随着Java 8的到来,这个领域也发生了许多重大的变化及提升,其中最重要的莫过于持久代(PermGen)的删除以及一些令人振奋的新的优化(后面会陆续提及这些)。...

2014-09-12 22:41:10 272

Spring MVC的常见错误

10年前我开始自己的职业生涯的时候,Struts还是市场上的主流标准。然而多年过后,我发现Spring MVC已经越来越流行了。对我而言这并不意外,因为它能和Spring容器无缝集成,同时它还提供了灵活性及扩展性。从我迄今为止对Spring的经验来看,我发现有不少人在配置Spring的时候经常会犯一些常见的错误。跟使用Struts框架相比,这些错误要出现得更频繁一些。我猜想这可能是它在可用...

2014-07-24 17:17:36 188

4个代码生成库的性能比较

[img]http://zeroturnaround.com/wp-content/uploads/2014/07/race.jpg[/img]在本系列的[url=http://it.deepinmind.com/jvm/2014/07/10/how-my-new-friend-byte-buddy-enables-annotation-driven-java-runtime-code-g...

2014-07-22 10:51:42 202

使用JITWatch监控JIT状态

[img]http://zeroturnaround.com/wp-content/uploads/2014/07/head-640x366.png[/img]性能是个很复杂的问题,尤其是当你意识到程序在编译阶段会经历多次重写的时候。首先,你的源码会被翻译成字节码,然后再被进一步编译成机器代码,有时候甚至是多次编译。有时候你的程序运行得并不是很快。之后你就会抱怨你的平台或者工具,并...

2014-07-18 15:04:32 341

一个优秀的程序员是如何炼成的

一个优秀的程序员是如何炼成的?问一下自己这个问题会很有意思。这能让你好好思考一下软件开发的过程。拿它来问一下同事也不错,这能引起一些关于如何一起协作的很有意思的讨论。下面是我认为成为一名优秀的程序员所必需的5个技能。1. 问题分解编程讲的是如何解决问题。但在你开始写代码之前,你需要清楚如何解决问题。一个好的程序员应该得拥有这样的技能,他能将问题分解成子问题,直到每个子问题都可以...

2014-07-17 11:12:26 82

不要急于切换到Java 8的6个原因

Java 8是极好的。不过我们在尝完鲜了之后,也开始对它持怀疑的态度。所有好的东西都是有代价的,在这篇文章中,我会分享Java 8的主要的几个难点。在你放弃Java 7升级到8之前,你最好确保自己知道这些。1. 并行流会影响性能Java 8的所承诺的并行处理是最受期待的新特性之一。集合以及流上的.parallelStream()方法就是实现这点的。它将问题分解成子问题,然后分别运行...

2014-07-11 14:18:40 119

使用Byte Buddy生成Java字节码

上周我们探索了下[url=http://it.deepinmind.com/jvm/2014/07/03/how-to-make-java-more-dynamic-with-runtime-code-generation.html]Java的强类型及静态类型系统[/url]。我承认这样的类型让我们的代码表达性更强,但是同时也限制了第三方库提供面向POJO的API的能力。我们明白了Java...

2014-07-10 13:59:45 838

我眼中的各种编程语言

所有的编程语言我都讨厌。曾经我想自创一门语言,但我没搞明白到底需要一门什么语言,所以也从未开始过。许多时候,你没法选择使用哪种语言。不管我在用哪种语言,我都尝试去接受它的优点和缺点。[b]Java[/b]喜欢Java的人肯定喜欢打字。我指的就是敲打键盘上的键。你得不断地重复又重复。设计Java系统的人是个疯子,他解决问题的方式就是,设计模式。如果你把设计模式看作是这...

2014-07-09 08:49:13 114

如何进行框架的选择

当你在开发应用的时候,大多数时候你都在写一些处理资源的代码。那些打开数据库连接,分配内存之类的代码。更底层的就是和计算环境打交道的代码了。这些代码很恶心,尽管有些程序员特别好这一口,但怎么说,这种代码自然是越少越好。真正能产生商业价值的是那些处理业务逻辑的代码。当然,很明显你也不可能只写业务代码对吧。还有一类代码是用来运行这些业务代码的,当然了,基础架构和业务的代码的边界并不是那么清晰。你很难跟别...

2014-07-09 08:47:59 212

你可能并不需要消息队列

我是一个极简主义者,我不喜欢过早或者没必要地让软件复杂化。而往软件系统中添加组件就是严重增加复杂性的一种做法。我们来拿消息队列举个例子。消息队列是一个能让你获得容错性,分布式,解耦等架构能力的系统。纸上谈兵的话,它看起来还不错。或许消息列队在你的应用中有不少适用的场景。你可以看下这篇关于消息队列优点的[url=http://blog.iron.io/2012/12/top-10-u...

2014-07-07 23:58:45 183

Java中的动态代码生成

通过程序来生成代码是Java平台的固有特性。当Java程序编译的时候,Java编译器生成的是字节码而不是可执行程序。字节码是Java特有的格式,它本身并没有太大的用处。为了能执行字节码,它会在运行时被JVM的just-in-time编译器翻译成本地的机器代码。Java的导论就先讲到这吧。大多数Java开发人员应该都听说过JIT编译,但它作为这个平台最强大的功能之一,即便你不了解它的细节,也...

2014-07-04 11:13:05 517

软件开发的10个错误实践

帕雷托法则说80%的成果取决于20%的原因。这也被称为28原则,人类几乎每一个领域的尝试都和它有关。在软件开发领域,这个原则可以总结为大多数问题都是由少数的糟糕的编码实践导致的。消除这些问题,你的工作会变得更轻松,效率也会得到提升 .[*] 代码拼写错误令人惊讶的是,这是最常见的,由于它和你的编码水平高低没有关系,因此很让人抓狂。变量名或者函数名的一个拼写错误就...

2014-07-02 11:35:35 158

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除