最近三年作为 Google(谷歌)的软件工程师,我每周会帮人事部门审查简历,决定要不要给他们面试。Google这几年的发展让很多许多优秀的工程师都前来申请。到目前为止,我已经看了上千份简历,有些简历留下的印象比别的好很多。尤其是最近亲戚朋友常常问我如何修改他们的简历,所以我积累了一些常见的错误避免的提议,在此跟大家交流一下。
1.谈到你做过的技术时,应该提到用的程序语言、你的个人贡献和产品细节。
有时我看到有人把过去的经验在简历上一笔带过,比如说:
• 在三人小组里,为电子邮件软件写了些 features。
这是远远不够的,看简历的人希望了解你做的工作的难度和对本公司有多少联系,所以你最好写的具体一些。譬如:
• 用 C++ 语言写了网络电子邮件的自动 backups。在三人小组里,专门负责设计和写储存服务器。从设计开始, 一年后把这个功能 feature 的用户推到了三千。
2.多讲事实, 少用形容词。
看简历的人读你的简历时,需要做判断,所以在简历里需要事实和数目。如果你写“迅速的提高了软件的操作效率”,看简历的人很难判断你成就的难度。但如果你写“在 ...
一个完整的应用在使用 Antlr 开发领域语言的 前一篇文章中,简要介绍了 Antlr 的一些特性,用算术表达式作为例子说明了 Antlr 在词法分析、语法分析、解释和编译等方面的用法。本文中我们将一起来开发一个更为复杂的领域语言。在确定语言的运算能力之后,首先使用 Antlr 定义语言的文法,实现词法分析和语法分析,并生成对应的抽象语法树;之后基于树分析器开发一个类型检查器,检查语言的类型是否合法;然后基于树分析器开发一个代码生成器,将语言编译为一种中间代码。图 1 详细描述了这一工作过程。
图 1. 工作流程(查看大图)
上述四个步骤和 Antlr 是紧密结合的,每一步都用到了 Antlr 的相关技术。在完成中间代码的生成后,工作并没有结束,最后我们将实现一个虚拟机,该虚拟机使用堆栈来操纵数据,对之前产生的中间代码解释执行,完成最终的运算,我们把虚拟机命名为抽象堆栈机。
语言定义首先,我们需要确定领域语言应该具备哪些运算能力。 清单 1 和清单 2 给出了两个目标语言的例子。
清单 1. 领域语言示例一12345678max(a, b){ if(a>b) re ...
通过Java Swing看透MVC设计模式一、引言(一)GUI设计思想的启发在现实世界中,一个简单的电脑键盘按键,如按钮,就体现了GUI设计的规则。它由动作特性(如可被按下)和表现(如代表的字母)两部分构成。这种设计思想可应用于软件开发,例如Model/View/Controller(MVC)设计模式。MVC设计模式鼓励重用,减轻设计工作的时间和难度,就像通过改变按钮表面的字母就能制造出“不同”的按钮,而无需重新设计整个按钮结构。
(二)MVC与Java Swing的关系MVC设计模式通常用于设计整个用户界面(GUI),而Java Foundation Class(JFC)中的Swing组件将MVC设计模式应用于单个组件。如表格(JTable)、树(JTree)、组合下拉列表框(JComboBox)等组件都有各自的Model、View和Controller,且这些部分可以独立改变,即使组件正在被使用,这使得开发GUI界面的工具包非常灵活。
二、MVC设计模式概述(一)Model
功能与特性
Model代表组件状态和低级行为,管理自身状态并处理所有对状态的操作。它不知 ...
引言系统日志是应用程序问题诊断及运行维护的重要工具。Logback、Log4j 是常用于 Java 平台的日志记录 API. 目前大部分产品只是将系统重要参数、状态的变化及异常信息通过日志输出。本文将要介绍的 Perf4j 是一款专门用于 Java 服务器端代码计时、记录日志和监控结果的开源工具包。Perf4j 对常用日志工具包进行了扩展,能够将得到的原始性能数据进行统计并发布到可定制的输出源,如控制台、日志文件、JMX 等。Perf4j 提供了多种方式与 Java 代码集成,开发和系统维人员能够灵活地将 Perf4j 的 API 嵌入到各种不同架构的应用程序中。
Perf4j 目前依托于开源项目协作平台 Codehaus 进行文档及代码管理,下一步该项目计划迁移到 Github 平台,以便更多的社区及开发人员可以参与到开发及维护中来。Perf4j 欢迎使用者提出新的功能需求并且鼓励将定制或扩展的代码贡献到 Perf4j 源码中。本文中示例代码使用的 Perf4j 版本是 0.9.16,读者需在下载类包或配置 Maven 时留意。
阅读文章之前,您要对 Java 注解、JMX、面向方面 ...
原作者在这篇文章中介绍3本不错的技术书籍。作者认为这些书籍对新手或者学生而言尤其有帮助。通过一些基础性的教程入门后,我们可以使用Java做基础性的编程。然而,当我们需要从初级提升更高的一个层次时,大多数的人却不知道从何入手。一些好的书籍在这个阶段可以很好地帮助初级开发人员。
《Head First设计模式》
这本书介绍 GoF 常用设计模式的方式引人入胜。如果只看封面很难看出来这是一本技术书籍,更不用说这本技术书籍介绍的还是面向对象编程的一些很有用的技巧。这本书采用 Kathy Sierra 式编写风格:虽然她的博客已经关了,但是还是能从前面这个链接看到一些她的文章,建议读一读。如果你周围有人认为设计模式没有什么用处,这本书倒是能够让他们改变看法。个人而言,我认为经典的 GoF 手册是一个很好的参考,但它并不是专为新手准备的。因此强烈推荐在校生(包括那些不清楚组合模式是什么的程序员们)阅读此书。
书中介绍的设计模式是程序开发中比较基本的编程模式,也是面向对象编程的程序员应该了解和掌握的。接下来要介绍的这本书则更偏向于Java语言本身,这也是我日常使用的编程语言。
《Effectiv ...
系统架构
未读原文:http://taligarsiel.com/Projects/howbrowserswork1.htm
How browsers work
简介浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到google主页过程中都发生了什么。
将讨论的浏览器今天,有五种主流浏览器——IE、Firefox、Safari、Chrome及Opera。
本文将基于一些开源浏览器的例子——Firefox、 Chrome及Safari,Safari是部分开源的。
根据W3C(World Wide Web Consortium 万维网联盟)的浏览器统计数据,当前(2011年5月),Firefox、Safari及Chrome的市场占有率综合已接近60%。(原文为2009年10月,数据没有太大变化)因此,可以说开源浏览器已经占据了浏览器市场的半壁江山。
浏览器的主要功能浏览器的主要功能是将用户选择得web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中,资源的格式通常是HTML,也包括PDF、image及其他格式。用户用U ...
本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE、中间件和JVM技术。他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题。
1.缺乏正确的容量规划
容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求。制定合理的容量规划不仅会确保和跟踪当前IT生产能力和稳定性,同时也会确保新项目以最小的风险部署到现有的生产环境中。硬件、中间件、JVM、调整等在项目部署之前就应该准备好。
以我的经验,这通常是最常见的“过程”问题,可能会导致短期和长期的性能问题。以下是一些示例。
观察到的问题可能的产能规划差距新部署的应用程序会触发当前Java Heap或Native Heap空间的重载(例如,观察到java.lang.OutOfMemoryError)。-对当前的JVM Java堆(YoungGen和OldGen空间)利用率缺乏了解-新部署的应用程序缺少内存静态和/或动态占用空间计算-缺乏性能和负载测试,无法检测到Java Heap内存泄漏等问题新部署的应用程序会触发CPU利用率的大幅提高以及Java EE ...
人生思绪
未读我在两家创业公司工作过。A公司,由3人发展到20人;B公司,由20人发展到60人。这两家公司都不算成功,因此,要讲收获,更多的是经验与教训。就如同教材一样,反面教材更加有教育意义。我针对创业公司面临的重要问题,谈谈我的想法。
灵活性相对于大公司,小公司的灵活性是核心竞争优势。小公司的灵活性,是指小公司船小好调头,能够快速地响应用户。我在B公司时,公司刚好处于创业扩张期(20→60人)。公司也就是在这个时候失去它的核心竞争优势的。
初到B公司,公司的情况是:已经做出了产品,有一些铁杆用户,有投资者表示愿意入股,希望在两三年能够上市。上市,则要求公司在人数上,管理上发生一些改变。我们公司实施了如下举措:
一、将技术部细分为各个小组。如Android组、iOS组、Web组、通讯组、架构组等。为了让公司的整体技术实力提升,公司花重金为每个组都招来工作经验丰富的人带队。在之前,两三个人通过简单的沟通就可以完成包含 Android, iOS, Web 前端以及后台服务的整个软件。现在,要完成这样的软件,需要各个组的组长相互讨论,得到一个相互妥协的结果。
得到妥协的结果存在三个问题:(一)花费的时间 ...
前两天在这个版块的精华区里翻到了Robbin关于EJB的调用原理的分析,受益非浅,但感觉用纯文字来表达效果似乎不够直观,而且对RMI的阐述也略嫌少了些。这里我根据自己的一点体会,在Robbin帖子的基础上再来说说这个话题,供大家参考。
首先,我想先说说RMI的工作原理,因为EJB毕竟是基于RMI的嘛。废话就不多讲了,RMI的本质就是实现在不同JVM之间的调用,工作原理图如下:
它的实现方法就是在两个JVM中各开一个Stub和Skeleton,二者通过socket通信来实现参数和返回值的传递。
有关RMI的例子代码网上可以找到不少,但绝大部分都是通过extend the interface java.rmi.Remote实现,已经封装的很完善了,不免使人有雾里看花的感觉。下面的例子是我在《Enterprise JavaBeans》里看到的,虽然很粗糙,但很直观,利于很快了解它的工作原理。
1. 定义一个Person的接口,其中有两个business method, getAge() 和getName()
public interface Person { ...

