学Z-one星球

我想让自己飞翔,年轻是翅膀我要飞过太平洋,我想让自己跟着太阳,寻找那片属于我自己的晴朗

文章图片

Java SE1.6中的Synchronized

作者 方腾飞 发布于 2012年5月24日

http://www.infoq.com/cn/articles/java-se-16-synchronized

1 引言

在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗,而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。

2 术语定义

术语

英文

说明

CAS

Compare and Swap

比较并设置。用于在硬件层面上提供原子性操作。在 Intel 处理器中,比较并交换通过指令cmpxchg实现。比较是否和给定的数值一致,如果一致则修改,不一致则不修改。

3 同步的基础

Java中的每一个对象都可以作为锁。

对于同步方法,锁是当前实例对象。

对于静态同步方法,锁是当前对象的Class对象。

对于同步方法块,锁是Synchonized括号里配置的对象。

当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。那么锁存在哪里呢?锁里面会存储什么信息呢?

4

如何黑一个黑客

http://www.aqee.net/pwning-a-spammers-keylogger/

最近,在搜检垃圾信息时,我偶然看到了这样一个很普通的邮件。它使用了一个很简单的编造八卦的伎俩,推测奥巴马的性取向,并提供了一个指向一个证明图片的链接。

这条垃圾信息没有什么特别的,但链接指向的这个具有双重后缀的,叫做“you.jpg.exe”的文件却有点研究价值。出于好奇,我把这个文件下载下来,检查它会干些什么事。

我首先做的是看看这个文件真正的文件类型。很显然,它不是一个关于奥巴马的图片,而是一个可以自解压的RAR文件。

通过RAR提取工具,我打开了这个自解压文件,看到了里面的内容。

解压了“you.jpg.exe”,检查里面的每一个文件,但发现它们都是经过加密的。于是,我在测试机上直接运行了“you.jpg.exe”,看看会有什么事情发生。双击它后,下面的这个图片跳了出来。嘿嘿,果然不是奥巴马。

在后台,下列文件被自动安装到了Windows System32目录下:

bpk.dat

bpk.exe

bpkhk.dll

bpkr.exe

inst.dat

pk.bin

而且,在注册表里创建了一个自动运行的autorun命令:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runbpk = <%windir%\System32\bpk.exe>

我在谷歌上搜索这些文件名称,找到了一些有用的信息,测试机上被安装的这些文件是一种键盘监

你做过的最有效的提高你的编程水平的一件事情是什么

http://www.aqee.net/what-is-the-single-most-effective-thing-you-did-to-improve-your-programming-skil/

最近在stackexchange网站上看到了一个非常好的问答,有人问:你做过的最有效的提高你的编程水平的一件事情是什么?

回首作为一个程序员这些年来的生活和职业道路,我使用了很多种不同的方法来提高我的编程技能 —— 阅读代码,编写程序,阅读书籍,听讲座,看视频,等等。

我的问题是:你做过的最有效的提高你的编程水平的一件事情是什么?对于那些想提高水平的程序员,你的建议是什么?

我希望你们提供的答案是各种各样的,并且不是那种“放之四海而皆准”的答案 —— 我希望得到适用于不同人的不同的答案。

有很多人给出了自己的答案,在这里,我将其中最受认可的前三种答案选出来翻译给大家。

最受欢迎的回答:学无止境

没有特别的先后次序…

和比自己更聪明的人一起工作

永远乐意听取他人的意见,不管对方是低级水平,一般水平,资深,还是大师。职称头衔并不代表一切。

学习其它的框架/语言,学习它们是的工作原理和思想,拿它们跟你已知的技术做比较。

学习各种设计模式,最佳实践理论,然后用它们检查自己先前的知识,在需要的时候使用这些模式。

为什么我们要学习Haskell这样的编程语言

http://www.aqee.net/learn-you-a-haskell-for-great-good/

最近的几个月,我一直在学习一种叫Haskell的编程语言。由于里面有太多的从未遇到的编程概念,整个过程就像是完全重新学习如何编程。在i.TV网站上,我写了很多JavaScript(node.js和前端代码)。虽然有不少的函数式/haskell式的编程模式不能引用进来,但仍有大量的技术思想让我在使用javascript编程语言时受益不少。

你会发现Haskell库里有能够处理各种事情的各种各样的函数。起初我以为这些只是一种技术上的积累,但随后我认识到,这些函数相比起其它语言里的函数,它们能应用到形式更广泛的问题中。这使得它们更有价值,因为我们都不太喜欢对一些常见的问题还不得不自己去写解决方案。

这些函数是可以相互组合1的:它们能针对性的解决某些问题,而不对你的代码做任何依赖,所以,你可以拼装它们,组合成一个能够解决你的大问题的东西。

高阶函数(Higher Order Functions)

在Haskell语言中,最多的被反复使用的函数都是高阶函数(higher order functions)——能以函数作为参数、能返回函数的函数。这使得它们具有固有的灵活性。下面是一个不太灵活的函数:它计算一个数组里等于某个值的元素的个数。

// 不灵活

function countMatching(array,

文本不换行-css

http://www.w3school.com.cn/css/css_text.asp

1,文本不换行

white-space: nowrap

-----------

http://www.w3schools.com/cssref/pr_text_white-space.asp

The white-space property is supported in all major browsers.

Note: The value "inherit" is not supported in IE7 and earlier. IE8 requires a !DOCTYPE. IE9 supports "inherit".

--

normalSequences of whitespace will collapse into a single whitespace. Text will wrap when necessary. This is default

nowrapSequences of whitespace will collapse into a single whitespace. Text will never wrap to the next line. The text continues on the same line until a <br /> tag is encountered

preWhitespace is preserved by the browser. Text will only wrap on line breaks Acts like the <pre> tag in HTML

pre-lineSequences of whitespace will collapse into a single whitespace. Text will wrap when necessary, and on line breaks

pre-wrapWhitespace is preserved by the browser. Text will wrap when necessary, and on line breaks

inheritSpecifies that the value of the white-space property should be inherited from the parent element

2,

word-break: break-all; /*not support firefox and Opera*/

word-wrap: break-word; /*not effect ie6*/

-----------

http://www.w3schools.com/cssref/css3_pr_word-break.asp

The word-break property specifies line breaking rules for non-CJK scripts.

--

normalBreaks non-CJK scripts according to their own rules

break-allLines may break between any two characters

Rolling in the deep - Adele

There's a fire starting in my heart,  我心中燃起了一股火焰  Reaching a fever pitch and it's bringing me out the dark  那温度将我从黑暗解救  Finally, I can see you crystal clear.  我终于看清你了  Go ahead and sell me out and I'll lay your sheet bare.  继续将我出卖然后放弃自己的全部赤裸的留在你的心中  See how I leave, with every piece of you  看我怎样将你从我的记忆里逐一脱离  Don't underestimate the things that I will do.  不要低估我将会做些什么  There's a fire starting in my heart,  我心中燃起了一股火焰  Reaching a fever pitch and it's bringing me out the dark  那温度将我从黑暗解救  The scars of your love, remind me of us.  你的爱所留给我的伤痛,提醒了我  They keep me thinking that we almost had it all  让我觉得只差一步之遥 我们将会拥有一切  The scars of your love, they leave me breathless  你的爱所留给我的伤痛,已让我无法呼吸  I can't help feeling...  我甚至已失去知觉  We could have had it all  我们本应幸福的  Rolling in the Deep  在黑暗中翻滚  Your had my heart... Inside of your hands  你曾把我的心捏在手里  And you played it... To the beat  然后玩弄它  Baby I have no story to be told,  宝贝我已无话可说 

On GUI Architecture: GUI应用的若干问题和模式http://blog.csdn.net/chelsea/article/details/7297859

我们所开发的应用程序大多都需要提供一个图形用户界面(GUI). 关于GUI应用的架构设计, 已经有了很多模式, 比如Martin Fowler的blog中有一篇"GUI Architectures", 里面介绍了Form & Control, MVC, MVP, Passive View, Presentation Model, Supervising Controller, Event Aggregator, Observer Synchronization等多种模式. 模式可以帮助我们建立优雅的架构, 但前提是弄清楚模式的应用场景. 这些模式自然不是凭空产生的, 都是为了解决具体的问题. 模式在实现上的差别, 通常都体现了在约束间的不同取舍, 以及问题的差别. 弄清楚GUI应用面临的设计上的问题, 有助于我们正确的挑选设计方案. 下面我们来看一些GUI应用常见的设计问题.

第一个问题就是界面的变化和业务的变化频率不同, 通常是界面变化更频繁, 而我们希望一方的变化不至于影响另一方的逻辑. 对于这个问题, 一个自然的解决方案就是分离界面显示逻辑和后台业务逻辑. MVC和MVP都涉及到了这一点, 它们的共同特点就是把View和应用程序的其它部分分开了. 这是一个关键的分离, 从此之后应用被分为两部分, 抛开它们彼此可以独立的变化不说. 最大的好处是这两部分的问题也可以分而治之. 应用程序的其它部分有自己的问题和方案,

专访HTML5版Clear应用作者尤雨溪

作者 崔康 发布于 2012年3月4日

http://www.infoq.com/cn/news/2012/03/evan-html5-clear

Clear是一款非常受欢迎的移动应用,尤雨溪在两天时间内打造了一个HTML5版的Clear应用,并开放了源代码,InfoQ中文站对其进行了专访。

InfoQ:能否对你自己的经历做一个介绍?以及为什么会选择HTML5和CSS3技术作为自己的主攻方向?

尤雨溪:我个人的经历其实比较绕。 我从高中就开始玩Flash做设计,但是一直是单纯作为兴趣,那时候也不会编程。高中毕业来美国读本科,一开始随大流读经济,后来觉得实在不喜欢,但是学校又不是设计院校,所以最后专业是艺术和艺术史,顺带关注新媒体艺术和设计。毕业之后想接触更多这方面的东西,所以就到了纽约读艺术硕士,也就是我现在所在的这个项目,叫做MFA in Design and Technology。

所以严格来说,我的兴趣点在设计和编程交叉的地方。学编程的动机是因为我想把自己设计的东西亲手做出来。计算机方面的课我只上过两节,算是打了点基础吧。其实最早我玩Flash,单纯是因为Flash在视觉上的表现力很好。但后来看到了越来越多关于HTML5的新功能展示,觉得它确实有巨大的潜力。另一方面,它以后是会成为通用标准的,而不像Flash是一个Adobe私有的技术,这让它的应用前

Thymeleaf 2.0新特性一览

作者 Bienvenido David III 译者 曹如进 发布于 2012年3月4日

http://www.infoq.com/cn/news/2012/03/thymeleaf-2-0

Thymeleaf是一个面向Java的XML/HTML模板引擎,它的主要目标是提供格式良好的模板创建方式。Thymeleaf 2.0包含了许多新特性,其中包括为Thymeleaf扩展开发人员改善了扩展的创建过程。下面让我们快速浏览一下这些新增的特性:

性能

Thymeleaf内部架构进行了重新设计,模板执行引擎被彻底重写。这意味着巨大的性能提升。基准测试显示执行时间从之前的4.19ms降到现在的1.26ms。

th:switch/th:case

th:switch中指定的表达式在估值后,会与内部th:case属性(attribute)中的表达式结果进行比较。其中“*”被用来指定默认选项。而在以前的版本中,开发人员需要为每一个p元素指定一个th:if。

 <div th:switch="${user.role}">

  <p th:case="'admin'">Administrator</p>

  <p th:case="*">User</p>

</div>

th:remove="all-but-first"

创建一个表格模板,一般意味着你会移除多余的占位符行。新的th:remove="all-but-first" 可以更轻松地完成这项工作。此前,开发人员必须为表格中所有待删除的行放上th:remove="all"语句。

 <table th:remove="all-but-first">