java switch compile time constant

The switch statement can only contain case statements which are compile time constants and which evaluate to an integer (Up to Java 6 and a string in Java 7). Compile time constant include: a char, byte, short, int, or, as of Java 6, an enum. Also if you define : a cannot be used in a switch statement though it is…

程序员的十层楼(精彩在最后)

自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件 领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。 那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西方在各个技术层级的人数,就可以知道到底有没有差距,差距有多大。 当然,对于如何划分程序员的技术层级,不同公司或不同人会有不同的划分标准,下面的划分仅代表个人的观点,如有不当之处,还请砸板砖予以纠正。 第1层  菜鸟 第1层楼属于地板层,迈进这层楼的门槛是很低的。基本上懂计算机的基本操作,了解计算机专业的一些基础知识,掌握一门基本的编程语言如C/C++,或者Java,或者JavaScript,…,均可入门迈进这层。 在这层上,中国有着绝对的优势,除了从计算机专业毕业的众多人数外,还有大量的通信 、自动化、数学等相关专业的人士进入这一行,此外还有众多的其他专业转行的人士,人数绝对比西方多出甚多。并且还有一个优势就是我们这层人员的平均智商比西方肯定高。 没有多少人愿意一辈子做菜鸟,因为做”菜鸟”的滋味实在是不咋的,整天被老大们吆喝着去装装机器,搭建一下测试环境,或者对照着别人写好的测试用例做一些黑盒测试,好一点的可以被安排去写一点测试代码。当然如果运气”好”的话,碰到了国内的一些作坊式的公司,也有机会去写一些正式的代码。 所以,菜鸟们总是在努力学习,希望爬更高的一层楼去。 第2层 大虾 从第1层爬到第2层相对容易一些,以C/C++程序员为例,只要熟练掌握C/C++编程语言,掌握C标准库和常用的各种数据结构算法,掌握STL的基本实现和使用方法,掌握多线程编程基础知识,掌握一种开发环境,再对各种操作系统 的API都去使用一下,搞网络 编程的当然对socket编程要好好掌握一下,然后再学习一些面向对象的设计知识和设计模式等,学习一些测试、软件工程和质量控制的基本知识,大部分人经过2~3年的努力,都可以爬到第2层,晋升为”大虾”。 中国的”大虾”数量和”菜鸟”数量估计不会少多少,所以这层上仍然远领先于西方。 大虾们通常还是有些自知之明,知道自己只能实现一些简单的功能,做不了大的东西,有时候还会遇到一些疑难问题给卡住,所以他们对那些大牛级的人物通常是非常崇拜的,国外的如Robert C. Martin、Linus Torvalds,国内的如求伯君、王志东等通常是他们崇拜的对象。其中的有些人希望有一天也能达到这些大牛级人物的水平,所以他们继续往楼上爬去。 第3层 牛人 由于”大虾”们经常被一些疑难问题给卡住,所以有了”大虾”们只好继续学习,他们需要将原来所学的知识进一步熟练掌握,比如以熟练掌握C++编程语言为例,除了学一些基础性的C++书籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外,更重要的是需要了解C++编译器的原理和实现机制,了解操作系统中的内部机制如内存 管理、进程和线程的管理机制,了解处理器的基础知识和代码优化的方法,此外还需要更深入地学习更多的数据结构与算法,掌握更深入的测试和调试知识以及质量管理和控制方法,对各种设计方法有更好的理解等。 学习上面说的这些知识不是一挥而就的,不看个三五十本书并掌握它是做不到的。以数据结构算法来说,至少要看个5~10本这方面的著作;以软件设计来说,光懂结构化设计、面向对象设计和一些设计模式是不够的,还要了解软件架构设计、交互设计、面向方面的设计、面向使用的设计、面向数据结构算法的设计、情感化设计等,否则是很难进到这个楼层的。 当然除了上面说的知识外,大虾们还需要去学习各种经验和技巧。当然这点难不倒他们,现在出版的书籍众多,网络上的技术文章更是不胜数,然后再去各种专业论坛里泡一泡,把这些书籍和文章中的各种经验、技能、技巧掌握下来,再去学习一些知名的开源项目如Apache或Linux操作系统的源代码实现等。此时对付一般的疑难问题通常都不在话下,菜鸟和大虾们会觉得你很”牛”,你也就爬到了第3层,晋升为”牛人”了。 看了上面所讲的要求,可能有些大虾要晕过去了,成为牛人要学这么多东西啊!要求是不是太高了?其实要求一点也不高,这么点东西都掌握不了的话,怎么能让别人觉得你”牛”呢? 需要提一下的是,进入多核时代后,从第2层爬到第3层增加了一道多核编程的门槛。当然要迈过这道门槛并不难,已经有很多前辈高人迈进了这道门槛,只要循着他们的足迹前进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链接:http://www.threadingbuildingblocks.org/ ),然后上Intel的博客(http://softwareblogs-zho.intel.com/ )和多核论坛(http://forum.csdn.net/Intel/IntelMulti-core/ )去看看相关文章,再买上几本相关的书籍学习一下。 在国内, 一旦成为”牛人”,通常可以到许多知名的公司里去,运气好者可以挂上一个架构师的头衔,甚至挂上一个”首席架构师”或者”首席xx学家”的头衔也不足为奇。有不少爬到这层的人就以为到了楼顶了,可以眼睛往天上看了,开始目空一切起来,以为自己什么都可以做了,什么都懂了,经常在网络上乱砸板砖是这个群体的最好写照。由此也看出,国内的牛人数量仍然众多,远多于西方的牛人数量,在这层上仍然是领先的。 也有不少谦虚的”牛人”,知道自己现在还不到半桶水阶段。他们深知爬楼的游戏就像猴子上树一样,往下看是笑脸,往上看是屁股。为了多看笑脸,少看屁股,他们并没有在此停步不前,而是继续寻找到更上一层的楼梯,以便继续往上爬。 第4层 大牛 从第3层爬到第4层可不像上面说过的那几层一样容易,要成为大牛的话,你必须要能做牛人们做不了的事情,解决牛人们解决不了问题。比如牛人们通常都不懂写操作系统 ,不会写编译器,不懂得TCP/IP协议的底层实现,如果你有能力将其中的任何一个实现得象模象样的话,那么你就从牛人升级为”大牛”了。 当然,由于各个专业领域的差别,这里举操作系统、编译器、TCP/IP协议只是作为例子,并不代表成为”大牛”一定需要掌握这些知识,以时下热门的多核编程来说,如果你能比牛人们更深入地掌握其中的各种思想原理,能更加自如的运用,并有能力去实现一个象开源项目TBB库一样的东西,也可以成为”大牛”,又或者你能写出一个类似Apache一样的服务器 ,或者写出一个数据库,都可以成为”大牛”。 要成为”大牛”并不是一件简单的事情,需要付出比牛人们多得多的努力,一般来说,至少要看过200~400本左右的专业书籍并好好掌握它,除此之外,还得经常关注网络 和期刊杂志上的各种最新信息。 当”牛人”晋升为”大牛”,让”牛人们”发现有比他们更牛的人时,对”牛人”们的心灵的震撼是可想而知的。由于牛人们的数量庞大,并且牛人对大虾和菜鸟阶层有言传身教的影响,所以大牛们通常能获得非常高的社会知名度,几乎可以用”引无数菜鸟、大虾、牛人竞折腰”来形容,看看前面提过的Linus Torvalds等大牛,应该知道此言不虚。 虽然成为”大牛”的条件看起来似乎很高似的,但是这层楼并不是很难爬的一层,只要通过一定的努力,素质不是很差,还是有许多”牛人”可以爬到这一层的。由此可知,”大牛”这个楼层的人数其实并不像想像的那么少,例如比尔·盖茨之类的人好像也是属于这一层的。 由于”大牛”这层的人数不少,所以也很难统计除到底是中国的”大牛”数量多还是西方的大牛数量多?我估计应该是个旗鼓相当的数量,或者中国的”大牛”们会更多一些。 看到这里,可能会有很多人会以为我在这里说瞎话,Linus Torvalds写出了著名的Linux操作系统,我国并没有人写出过类似的东西啊,我国的”大牛”怎么能和西方的比呢? 不知大家注意到没有,Linus Torvalds只是写出了一个”象模象样”的操作系统雏形,Linux后来真正发展成闻名全球的开源操作系统期间,完全是因为许多支持开源的商业公司如IBM等,派出了许多比Linus Torvalds更高楼层的幕后英雄在里面把它开发出来的。 可能有些菜鸟认为Linus Torvalds是程序员中的上帝,不妨说个小故事: Linus,Richard Stallman和Don Knuth(高德纳)一同参加一个会议。 Linus 说:”上帝说我创造了世界上最优秀的操作系统。” Richard Stallman自然不甘示弱地说:”上帝说我创造了世界上最好用的编译器。”…

Java ReentrantLock,ReentrantReadWriteLock和Condition的简单描述示例

java.util.concurrent.lock 框架是 JDK5.0 后新增的特性,作用呢是准备用来替代 synchronized 语义和 volatile 声明,属于高帅富性能,对于初级开发来说平时开发可能用不上,因为synchronized 已能很好的应用于大部分场景。如果你的项目里的多线程模块需要用更高的性能,更高的灵活性,更好的伸缩性,那么可以把原来的synchronized块替换成lock框架下的 ReetrantLock, ReetantReadWriteLock,Condition来搭配实现。 下面贴上这3个包的简单示例代码。 1.ReetrantLock A good article on what is ReentrantLock ReetrantLock相比于synchronized一个很明显的机制差异就是ReetrantLock 可以中断一个正在等候获得锁的线程,也可以通过投票得到锁,如果不想等下去,那么就是它了。 ReetrantLock简单示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32…

MIME type reference

What is a MIME type? MIME stands for “Multipurpose Internet Mail Extensions. It’s a way of identifying files on the Internet according to their nature and format. For example, using the “Content-type” header value defined in a HTTP response, the browser can open the file with the proper extension/plugin. What is an Internet Media Type?…

event loop gwt scheduleDeferred

A browser event loop is a thread started by the browser that is constantly scanning for and running different events, just like it sounds. As events occur they are put in the event queue and run in turn by the one event thread. Your javascript should not create its own loops waiting for it to…

putty ssh vi ctrl s

Every once in awhile, I’ll press CTRL+S by accident while I’m inside a terminal window. For the longest time, this simple accidental keystroke meant I had reconnect to my Linux server, kill whatever program I was running, and then start it again. Eventually I got sick of this happening and decided to do what I…

tomcat max post size

Today I encountered some error when trying to post a xml whose size is about 3MB to the server from gwt client. Turns out the reason is from tomcat.   Apache Tomcat , by default, sets the maximum size of acceptable HTTP POST request to 2MB. You can reconfigure Tomcat to accept larger requests. This…

OffsetHeight clientHeight getBoundingClientRect innerHeight

OffsetHeight returns the height of the visible area for an object, in pixels. The value contains the height with the padding, scrollBar, and the border, but does not include the margin. The clientHeight property is similar to the offsetHeight property, but it returns the height including only the padding. If you need the total height of an element’s contents, use the scrollHeight property. It returns…

Debug GWT application in a remote browser(virtualbox)

In eclipse open your debug configuration and add the param -bindAddress YourIPOrDomain(replace the ip with the local ip address of your machine) to the arguments > program arguments. That’s how we debug in virtual box. In Intellij, just add the above param into the GWT Configruation’s Dev Mode parameters.

meta tag “HTTP=EQUIV”

By using the so called HTTP-EQUIV tag you are able to add certain values to your website. HTTP-EQUIV meta tags define the header of an HTML document. This is a section of code that is sent to your browser before the rest of the page. It communicates to your browser certain introductory information about the…

cross domain script

permission denied or Blocked a frame with origin xxx from accessing a cross-origin frame is common when you have iframe and calling outside stuff from js. Factor 1: set Domain You’re developing an Ajax-based application. You have an application server at example.com which serves up all your JavaScript, HTML and CSS, and a data server at…