|
今天下午临近下班的时候面试了一位Java程序员,看起来已经有三年的工作经验了,据说也带过三四个人的团队。面试完后,怎么说呢?总觉得缺了点什么,人倒是很勤勤恳恳,很实在的,但具体有哪些真本领,还确实没怎么看出来。都说是程序员擅长跟计算机打交道,但我觉得表达能力与沟通能力也是很重要的,即使你无法把自己知道的东西100%的说出来,也至少不能低于80%。我自己很长时间没有用Java开发了,很多东西了解的也不是那么全面,但我觉得程序员的很多素质是语言、平台都无关的,因此我就说一下我心目中的理想的Java程序员。也算是给自己树立一个标准,以后照着这样的标准去完善自己。
Java基础:
- 熟悉Java的类型系统,基本类型、类类型
- 常用的数据结构:列表、哈希表、树、栈、队列
- Java泛型的特点,了解类型擦除
- 反射与动态代理
- 了解JVM 垃圾回收,了解分代的概念、知道基本的回收算法
- 如果只是简单的企业web应用,了解Java的线程模型;否则需要熟悉Java的并发编程
- 了解Java的字节码操纵机制
- 了解类的加载、链接与初始化
- 熟悉Java IO的基本API
- 熟悉Java Annotation
- 熟悉Java的序列化机制与RMI
Java EE基础:
- 熟悉Servlet API
- 熟悉一到两种页面技术,除JSP外,最好知道Velocity或者Freemarker
- 了解JMS、JTA、JNDI、Java Mail等Java EE规范中包含的内容
- 熟悉至少一种Web容器,如tomcat、jetty、jboss…
- 了解常用的Java EE核心模式
企业应用:
- 了解常用设计模式、企业应用架构模式
- 了解工作流的概念
- 了解事务处理机制
开源:
- 了解Spring、Hibernate、MyBatis,并不要求多熟练的掌握,原理了解即可。
- 了解IOC、AOP等概念
- 能配置开源Log组件进行日志输出
- 熟练使用eclipse或者其它IDE
Misc,一些杂项:
- 熟悉HTTP协议、TCP/IP协议
- 如果做Web前端,熟练掌握JavaScript,至少了解一种JavaScript框架,如JQuery、ExtJs
- 可借助Firebug或者Chrome开发工具进行页面的调试
- 知道持续集成的概念
- 至少尝试使用一种项目构建工具,如Ant、Maven
- 知道如何进行单元测试
- 很重要的一点,不仅仅只掌握一门语言,了解其它语言的先进性与不足,如你的主要工作语言是Java,其它静态语言可以去了解C#,动态语言可以去了解Python、Ruby等,甚至是函数式语言
- 熟悉Linux环境、熟悉基本操作
- 熟练掌握一种数据库,熟练掌握SQL与存储过程
最重要的一点,如果你面试的是程序员而不是项目经理,在面试的时候你一定要告诉我你还会在业余时间写自己的代码,这个很重要。另外,随时保持对新事物的新鲜感,对新技术感兴趣,乐于分享,善于交流。
可能列的不太全,分类也比较牵强,但我认为只要一个人符合了上面的绝大多数条件,我就认为他是我想要的Java程序员。对照自己的技能,我还有很多不足的地方,谨以自勉。 links:http://www.breakthen.com/2011/08/03/the-java-programmer-i-want/ |