2009年5月27日
进行Java软件开发,第一步就是安装JDK。
以下操作基本上都是在终端窗口中进行。
输入下述命令安装Java SDK 6以及相关软件:
sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre sun-java6-source sun-java6-plugin sun-java6-fonts
这个过程需要时间较长,因为要下载两三百M的软件包。
如果你需要安装Java的文档,以便在线参考,需要下载java6文档jdk-6u10-docs.zip,并将其复制到/tmp目录,然后输入下述命令进行安装:
sudo apt-get install sun-java6-doc
如果你还需要在Mozilla等浏览器中运行Java Applet等,需要输入下列命令安装浏览器Java插件:
sudo apt-get install sun-java6-plugin
如果系统中安装有多个版本JDK,需要指定默认的JDK版本。在命令行窗口中输入下述命令:
sudo update-alternatives --config java
在出现的列表中选择/usr/lib/jvm/java-6-sun/jre/bin/java所在的那一行。
在命令行窗口中输入下述命令:
sudo update-java-alternatives -s java-6-sun
如果是在桌面环境,输入下面的命令,以打开文本编辑器修改/etc/jvm文件:
sudo gedit /etc/jvm
如果是在服务器环境,因为没有图形界面,输入下面的命令,打开vim字符界面编辑器修改/etc/jvm文件:
sudo vim /etc/jvm
在文件编辑环境下,加入下列内容到/etc/jvm文件中作为第一行:
/usr/lib/jvm/java-6-sun
类似上面的步骤,输入sudo vim /etc/environment或sudo gedit /etc/environment命令,编辑/etc/environment文件,加入如下内容:
JAVA_HOME=/usr/lib/jvm/java-6-sun
CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib:/usr/lib/jvm/java-6-sun/jre/lib
JAVA_OPTS='-Xms768m -Xmx768m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true'
PATH=/usr/lib/jvm/java-6-sun/bin:/usr/lib/jvm/java-6-sun/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh:en_US:en
注意:上述文件中的每一行分隔符应该是linux换行符而不能是windows换行符,因此千万不能在windows环境下编辑该文件。
在/etc/environment中设置的环境变量是全局性的,对每个Linux用户都生效。要使得环境变量的设置立即生效,请重启计算机,或者输入下述命令使得环境变量立即生效:
sudo source /etc/environment
至此,JDK安装完毕。
在进行Java开发环境安装之前,通常我们还需要进行下面的一些相关设置,以方便我们随后的工作。
设置桌面工作站
在用光盘安装Ubuntu Desktop的过程中,由于Ubuntu软件源默认选择的并不是最快的源,所以往往无法安装语言支持,使得界面语言显示为英文。我们通常做下述的工作:
对于大多数国内的网络来说,cn99是最快的Ubuntu软件源。遵循以下的步骤更换软件源为cn99:
(1)单击菜单“系统(System)” -> “系统管理(System Administrator)” -> “软件源”,进入软件源配置对话框(这个过程可能需要输入口令)。
(2)在对话框的“Ubuntu软件”标签页下的“下载自:”下拉框中选择“中国”下的ubuntu.cn99.com软件源。
(3)单击“关闭”按钮。这时候系统会提示是否更新的信息,请选择更新。
(1)单击菜单“系统(System)” -> “系统管理(System Administrator)” -> “语言支持(Language Supports)”,进入“语言”对话框。
(2)如果提示“不完整的语言支持”,按照提示安装语言支持,并选择汉语作为首选的界面语言。
Linux下面的字体是免费的,其美观程度比不上微软的TTF字体,特别是可用的中文字体更有限。我们可以从Windows那里借用微软的TTF字体。
(1)输入下面的命令安装免费的微软字体。
sudo apt-get install msttcorefonts
如果你的电脑同时安装有Windows操作系统,那么可以通过下面的步骤把Windows的字体复制到Ubuntu:
(2)在文件浏览器中单击Windows分区,使得Ubuntu自动挂接(mount)Windows的分区。下面假设Windows所在分区的卷标是“WINDOWS”。
(3)输入下面的命令,在/usr/share/fonts/truetype目录下面建立一个叫做msttfonts的子目录,保存从Windows复制过来的字体
sudo mkdir /usr/share/fonts/truetype/msttfonts
(4)依次输入下面的命令,复制Windows的字体到Ubuntu:
cd /usr/share/fonts/truetype/msttfonts
sudo cp /media/SYSTEM/WINDOWS/Fonts/*.ttf .
sudo cp /media/SYSTEM/WINDOWS/Fonts/*.ttc .
sudo cp /media/SYSTEM/WINDOWS/Fonts/*.TTF .
安装Apache、PHP和MySQL
对于Java开发来说,Apache、PHP和MySQL都是有用的。例如Apache可以作为Maven的组件仓库的载体,MySQL可以作为开发数据库,而用PHP编写的Wiki、Blog和沟通管理软件等,对于软件开发也很有用。
输入下列命令安装这三个软件:
sudo apt-get install mysql-server mysql-client mysql-query-browser mysql-admin
sudo apt-get install apache2 php5 libapache2-mod-php5 php5-mysql libapache2-mod-auth-mysql
为了让MySQL支持国际化,应设置其默认的语言是UTF-8。为此我们输入下面的命令编辑/etc/mysql/my.cnf文件:
sudo gedit /etc/mysql/my.cnf
在其中的[mysqld]节内加入下面一行:
default-character-set=utf8
保存后退出文本编辑器,输入下面的命令使得更改生效:
sudo /etc/init.d/mysql restart
至此,基本环境配置完毕。
在我而言,Linux是比Windows好的多的软件开发环境,其中Ubuntu是非常方便易用的Linux发行版。下面列出Ubuntu对于Windows的一些关键优点所在:
在Windows下面,随着安装的软件越来越多,系统越来越笨重。不知道是不是Windows系统的特性,我安装完常用软件之后,还没有进入开发环境,内存已经占用700M以上。在Linux下面基本不存在这样的问题。
在Windows下面,我们要安装一个软件,例如Maven,需要:(1)到apache网站去下载Maven,(2)解压或安装,(3)设置环境变量,把Maven的可执行文件目录加入到PATH环境变量,等等。如果Maven升级了,就要再一次重复上述过程。
在Linux下面,一切非常简单:在终端窗口输入sudo apt-get install
maven2,Ubuntu就会自动下载、安装和配置Maven,自动把Maven的可执行文件目录加入到PATH环境变量,完全不需要用户的手动干预。
软件升级也一样简单。首先输入sudo apt-get update命令检查Ubuntu软件仓库中是否有新版本的软件,然后输入sudo
apt-get upgrade就可以升级所有已经有新版本的软件。升级完成就可以直接使用了。
对于习惯使用maven或ant等自动化构建软件工具的程序员来说(恕我冒犯,我认为不使用这些工具的人根本称不上Java开发人员),经常要在终
端窗口中重复输入一些常用的命令,例如mvn clean install, /etc/init.d/tomcat6
restart等等。这时候,命令记忆就非常有用了。在Windows中,也有一定的命令记忆功能。当你在命令窗口下工作时,按向上箭头键可以显示用户输
入的上一条命令,按向下箭头键可以显示用户输入的下一条命令,但也仅此而已。如果关闭了命令窗口,重新打开窗口这些记忆就完全丢失了。
在Linux下面则根本不同。Linux可以记忆至少数百条以前输入的指令,关闭终端窗口之后也不会丢失记忆。更强悍的是,就算关机重启之后,这些记忆仍然不会消失。仍然可以通过上下箭头键找回以前输入过的命令。
Linux下面另一个对开发者很贴心的功能就是命令补齐。在Ubuntu下面,你只要输入命令/目录/文件的部分名称,然后按alt + /,Ubuntu会自动给你补齐剩下的部分。这样我们可以少很多击键。
Windows是病毒和木马滋生的温床,相对而言,Linux是一片净土(不绝对,但相对于Windows来说,绝对是两个数量级以上的免疫力)。我们不需要安装杀毒软件,因此CPU和内存占用更小,程序运行更快,不一而足。
- 其他优点还有很多,例如对iso文件的挂接可以直接通过命令行进行,不像Windows需要安装专门的虚拟光驱软件等。因为与软件开发关系不大,所以不再论述。
上面说的是Linux相对于Windows的优点。至于缺点,最主要的就是在Linux上面运行的软件比Windows少得多。但是对于Java软件开发来说,这不是一个大问题,因为:
例如Eclipse, NetBeans, Maven, Ant, JDK, Apache, PHP, MySQL, 等等。以及与开发间接相关的软件FireFox, QQ, MSN, 等等。
- 即使没有Linux版本,也有相同或相似功能的替代品。
例如IE可以用FireFox代替(刚好强迫实现了浏览器兼容性),迅雷可以用wget代替,Photoshop可以用GIMP代替(GIMP是免
费的,顺便免除了成本的负担——如果你购买正版Photoshop的话,或者免除了道德和法律的负担——如果你使用盗版的Photoshop的话),等
等。
以后的系列文章,着重介绍在Ubuntu 9.04下Java开发环境和基础设施的搭建。所有的内容都出自我们真实的软件开发经验,有相当的可行性和可靠性。如果大家在设置过程中有什么不明白的地方,欢迎随时交流。
2009年4月9日
目前,Linux越来越流行,已经足以应付我们日常的开发使用需要。Ubuntu是目前市场占有率最大的linux发行版,我们公司在进行软件开发的时候,无论是开发工作站还是运行服务器都是采用Ubuntu操作系统。现在把我们在Ubuntu上面搭建Java开发和运行环境的过程拿出来和大家分享。
以下操作基本上都是在终端窗口中进行。
1、JDK安装
JDK安装有如下步骤:
(1)联网安装JDK最新版(1.6版)
输入下述命令安装Java SDK 6以及相关软件:
sudo apt-get install sun-java6-bin sun-java6-jdk sun-java6-jre sun-java6-source sun-java6-plugin sun-java6-fonts
(2)设置默认的JDK版本
如果系统中安装有多个版本JDK,需要指定默认的JDK版本。在命令行窗口中输入下述命令:
sudo update-alternatives –config java
在出现的列表中选择/usr/lib/jvm/java-6-sun/jre/bin/java所在的那一行。
在命令行窗口中输入下述命令:
sudo update-java-alternatives -s java-6-sun
(3)、修改/etc/jvm文件:
sudo gedit /etc/jvm
加入下列内容作为第一行:
/usr/lib/jvm/java-6-sun
(4)、设置全局变量
修改/etc/environment文件,加入如下内容:
JAVA_HOME=/usr/lib/jvm/java-6-sun
CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib:/usr/lib/jvm/java-6-sun/jre/lib
JAVA_OPTS=’-Xms768m -Xmx768m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true’
PATH=/usr/lib/jvm/java-6-sun/bin:/usr/lib/jvm/java-6-sun/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh:en_US:en
注意:上述文件中的每一行分隔符应该是linux换行符而不能是windows换行符,因此千万不能在windows环境下编辑该文件。
2、安装Ant和Maven
Ant和Maven是两个最著名的Java构建工具。
(1)软件包安装
它们的安装过程非常简单,在命令窗口中直接输入下述的命令:
sudo apt-get install ant ant-optional maven2
(2)设置环境变量
有时候,运行ant或maven的时候会报“内存不足”或“Java堆空间不足”的错误,可以通过设置ANT_OPTS和MAVEN_OPTS环境变量解决。通过如下命令打开/etc/environment文件:
sudo gedit /etc/environment
添加下述两行:
ANT_OPTS=”-Xmx1024M”
MAVEN_OPTS=”-Xms768m -Xmx768m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m”
文章来源:
http://www.dayatang.com/wordpress/?p=3
同事购买了一台联想Thinkpad R61e笔记本电脑,安装了Windows 和Ubuntu双系统。在Windows下面能够正常识别无线网卡,但是在Linux下面却不能使用。
经参考网上的资料,按以下的步骤解决了这个问题。
1、禁用原有的无线网卡驱动
进入Ubuntu之后,单击“系统”->“系统管理”->“硬件驱动”,能够看到系统已经识别了无线网卡
Ethernet controller: Atheros Communications Inc. AR242x 802.11abg
Wireless PCI Express Adapter (rev
01),并且已经激活,但不能工作。单击“禁用”按钮禁用它。为了保证禁用完成,最好重新启动计算机。
以下步骤都在终端窗口中进行。
2、安装编译驱动程序源码所必须的软件
通过以下命令安装build-essential程序包:
sudo apt-get update
sudo apt-get install build-essential
3、下载madwifi驱动
wget http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6-current.tar.gz
如果最新版本比0.10.5.6高,请下载最新版本。
4、解压它
tar zxvf madwifi-hal-0.10.5.6-current.tar.gz
5、进入解压后的目录
cd madwifi-hal-0.10.5.6-r3986-20090409/
(根据版本的不同,目录名不一定与上述目录相同,请自行更改。)
6、编译软件包
make
7、安装编译好的软件包
sudo make install
8、装载刚刚创建的模块
sudo modprobe ath_pci
这时候新的无线网卡驱动已经安装好,Ubuntu应该已经识别无线网卡,可以无线联网了。
为了在关机重启之后系统仍然能够自动启动无线网卡驱动模块,还需要作以下的工作:
9、将无线网卡驱动模块添加到内核引导模块列表中
sudo gedit /etc/modules
上述命令用文本编辑器打开了/etc/modules文件,在其最后添加一行:
ath_pci
保存并关闭此文件。重启计算机后,系统应该能够自动启用无线联网功能了。
特别说明:升级Linux内核后,似乎无线联网功能又不能启动了,原因可能是驱动要和内核一起编译。解决的方法很简单:重做第7和第8步就OK了。
文章来源:
http://www.dayatang.com/wordpress/?p=26
2009年3月20日
本教程向你展示用jpdl构造的简单流程和使用API管理流程运行时执行的过程。
本教程的形式是解释一批范例。这些范例着眼于一个特定的主题并包含大量的注解。这些范例也能够在jBPM下载软件包的src/java.examples目录中找到。
最好的学习方式是创建一个项目,并通过创建下面的范例的变体来体验它。
在开始之前,首先下载和安装jBPM。
jBPM包含一个图形设计器工具,可用于创建在这些范例中显示的xml文件。你可以在《下载和安装jBPM》部分找到下载这个图形设计器的指南。你不需要为了完成本教程而使用这个图形设计工具。
Hello World范例
流程定义是一个有向图,由节点(node)和转移(transition)组成。Hello world流程有三个节点。为了看到这些代码片段如何组合在一起,我们从一个简单的流程开始,不使用图形设计工具。下面的图显示hello world流程的图形表示:
图 3.1. Hello world流程图
public void testHelloWorldProcess() {
// 本方法显示一个流程定义和此流程定义的执行。这个流程定义有三个节点:一个未命名的
// start状态,一个状态s和一个名为end的结束状态。
// 下面一行将一段xml文本解析为一个流程定义ProcessDefinition。流程定义是对流程
// 的正式描述,表示为一个Java对象。
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <start-state>" +
" <transition to='s' />" +
" </start-state>" +
" <state name='s'>" +
[...]
文章来源:
http://www.dayatang.com/wordpress/?p=17
本章引导你通过最初的步骤取得jBPM,并提供一个快速启动和运行它的初步的指南。
下载和安装jBPM
要获得最新发布的jBPM第3版,到jBPM jPDL 3 package on Sourceforge.net 站点下载最新版的安装程序(installer)。
jBPM installer 创建一个运行时安装,并能够下载和安装eclipse流程设计器和JBoss服务器。你也可以在没有应用服务器的情况下使用jBPM,但是所有这些组件都已经预先配置好并能够相互协作达到开箱即用,使得你能够对jBPM快速上手。为了启动这个installer,打开命令行窗口,转到你下载的jBPM文件所在的目录,然后键入:
java -jar jbpm-installer-{version}.jar
遵从指示一步步进行下去。该安装程序可选下载任何支持的JBoss版本和Eclipse的精确版本。
当把jBPM安装到JBoss的时候,将在服务器配置的deploy目录之下创建一个jBPM子目录。所有jBPM相关文件都集中在这个deploy/jbpm目录中。JBoss安装中的所有其他文件都不会触及到。
你可以使用自己的Eclipse(如果它的版本为3.4以上的话) ,也可以使用安装程序下载的Eclipse。为了在Eclipse中安装图形流程设计器,直接使用Eclipse软件更新机制(Help –> Software Updates –> …) 并指向这个文件designer/jbpm-jpdl-designer-site.zip 即可。
JBoss jBPM社区页面
The jBPM社区页面提供关于到哪里查找论坛、wiki、问题跟踪、下载、邮件列表和源代码仓库等信息的所有细节。
文章来源:
http://www.dayatang.com/wordpress/?p=14
JBoss jBPM 是一个灵活的、可扩展的流程语言框架。jPDL是一种建立在这个公共框架之上的流程语言。它是一种直观的流程语言,用任务(tasks)、异步通讯的等待状态(wait states)、定时器(timer)、自动化的动作(action)……等术语来图形化地表示业务流程。jPDL拥有最强有力的、可扩展的控制流机制把这些操作结合在一起。
jPDL的依赖性非常小,能够像使用一个java类库一样容易地使用它。但是,通过把它部署在一个J2EE集群的应用服务器中,也能够把它用在需要极大的吞吐量的环境中。
jPDL能够配置使用任何类型的数据库,部署在任何应用服务器中。
概览
工作流和BPM的核心功能被打包成一个简单的java类库。这个类库包含一个服务,用于管理和执行保存在iPDL数据库中的流程。
图1.1 jPDL组件概览
jPDL套件
本套件包含所有的jBPM组件,打包成一个易于下载的文件形式。它内部包括下列文件夹:
config, 用于标准java环境的配置文件。
db, 用于创建数据库的SQL脚本,和数据库兼容性信息。
designer, 用于编制jPDL流程和安装脚本的Eclipse插件(它不包含在单纯的jpdl下载文件中)参见jPDL图形流程设计器部分。
doc, 用户指南和JavaDoc文档。
Examples 范例文件。
lib, jBPM所依赖的类库。要获得进一步的信息,请参考“第三方类库”部分。
server, 一个预先配置好的jBoss应用服务器,在一个控制台web应用中包含了jBPM(不包含在单纯的jpdl下载文件中)。
src, jBPM和身份认证组件的java源代码。
这个预先配置好的JBoss应用服务器安装了下列的组件:
Web控制台(web console), 打包为一个web存档(war文件)。此控制台能够由流程参与者和jBPM管理者使用。
工作执行器(job executor) 用于启动定时器和异步消息。在控制台web应用程序中有一个servlet上下文监听器,它启动工作执行器,后者产生一个线程池,用于监测和执行定时器和异步消息。
jBPM数据库, 一个进程内hypersonic数据库,包含jBPM数据表。
一个范例流程, 已经部署到jBPM数据库中。
身份组件(Identity component)类库是控制台web应用的一部分。身份组件的表存在于jBPM数据库中(这些表以“JBPM_ID_”为前缀)。
jPDL图形流程设计器
jPDL也包括一个图形设计器工具,该工具用于创作业务流程,它是一个Eclipse插件。
该图形设计工具的最主要的特征是同时支持业务分析师和技术开发者,从而允许从业务流程建模到实际开发实现的平滑过渡。
该Eclipse插件以一个本地更新站点(普通zip文件)的形式提供,可通过标准的Eclipse软件更新机制安装。jPDL图形流程设计器插件也包含在 JBoss Tools, JBoss Developer Studio 和 SOA Platform.中。
jBPM控制台Web应用程序
JBPM控制台web应用程序有两个目的。首先,它作为中心用户接口,与在流程执行过程中产生的运行时任务进行交互。其次,它是一个管理和监控控制台,能够检视和操控运行时流程实例。 它的第三个功能是业务活动监控,这是一些流程执行的统计信息,这些信息对于管理员找出瓶颈和进行其他种类的优化很有用。
JBPM核心类库
JBoss jBPM核心类库是普通的Java(J2SE)类库,用于管理流程定义和流程实例执行的运行时环境。
JBoss jBPM是一个java类库,因此它能够在任何java环境中使用,例如web应用程序,swing应用程序,EJB,Web Service……等等。 jBPM库也可以打包并暴露为一个无状态会话EJB,这允许集群部署和在极高吞吐量环境下的可缩放性。此无状态会话EJB应该针对J2EE 1.4规范编写,以保证可以部署到任何应用服务器之中。
依据你所使用到的功能,类库 lib/jbpm-jpdl.jar对一些第三方类库如hibernate、dom4j及其它类库有依赖。我们已经做出巨大的努力使得你只需要实际使用到的依赖库。第三方依赖的问题在第四章(部署)中进一步阐述。
JBPM在内部使用hibernate进行持久化。除了传统的o/R映射功能之外,hibernate也解决了不同数据库使用不同SQL方言的问题,使得jBPM可以移植到所有目前流行的数据库之上。
JBoss jBPM API可以从你项目中的任何java软件访问,例如web应用程序,EJB程序,
Web Service组件、消息驱动Bean或任何其他java组件等。
JBoss jBPM身份组件
JBoss jBPM能够和任何包含用户和其他组织机构信息的公司目录集成。但是,对于没有提供组织机构信息组件的项目,JBoss jBPM包含了这个身份组件。 该身份组件中使用的模型比传统的Servlet-、EJB-和门户中使用的模型更丰富。
要进一步了解,请参考《身份组件》部分。
JBoss jBPM工作执行器(Job Executor)
job执行器是一个用于在标准Java环境下监控和执行job的组件。Job用于定时器和异步消息。在企业环境中,JMS和EJB定时器服务可以用于这一目的。相反,Job执行器能够用在缺乏JMS或EJB的环境中。
Job执行器组件被打包在核心jbpm-jpdl类库中,但是需要以以下的方式之一部署:或者在web应用部署描述符(WEB-INF/web.xml)中注册 JobExecutorLauncher servlet上下文监听器,使得在servlet上下文创建/销毁的时候启动/停止Job执行器;或者开启一个单独的JVM,在其中编程式启动Job执行器。
文章来源:
http://www.dayatang.com/wordpress/?p=10
目前最流行的开源工作流软件有三个:Shark, OSWorkflow和jBPM。jBPM是其中最有前途的。
对jBPM用户指南的翻译,一直都有人在做。但是通常针对的都是jBPM的早期版本(3.0或3.1),而且翻译的谬误和文理不通之处甚多,因此有自己翻译的念头。
不敢说自己翻译的会有多好,毕竟我的英文水平不高,jBPM经验也不多。抛砖引玉吧。如有哪位同仁愿意指正,万分感激。
文章来源:
http://www.dayatang.com/wordpress/?p=5
2007年8月9日
近来被公司任命为面试官,专门面试Java程序员。感谢公司领导,面试过程给我沉闷的软件开发生涯增添了很多乐趣。
某日,来了一位应聘者。
他的简历令我肃然起敬。南方某名牌大学著名教授的计算机科学硕士研究生,在该大学某研究所任职,十多年的软件开发经验,参与项目百余个,单是列出项目的名字就密密麻麻占了两页纸。技能表格里面数十项技能全部都精通或熟练,一个都没有遗漏。我当时就心虚了。天啊,简直是我的偶像!我哪有面试他的资格?应该是他来面试我!技能表里面的技能我能够掌握的甚至不到1/3。
战战兢兢地,我问出了第一个问题:“您在开发中使用哪个IDE?”
“IDE?”他问。显然不太明白我的问题。
大师也难免有知识覆盖不到的地方,于是我告诉他,是集成开发环境。
他懂了。“我采用J2EE, Oracle, Websphere。”
“我指的不是技术和数据库,我指的是您用哪种开发工具包来开发软件,比如JBuilder就是一种IDE”。
“明白了。我用Cactus和JSP和Struts。”
这个问题问下去已经没有意义。于是我换一个问题。
“目前软件开发的方法学主要有哪些?您平时用得比较多的是哪一种?”
“我用J2EE, Oracle, Websphere。”
“我指的不是这些。我指的是方法学,例如极限编程就是一种方法学。您还知道那些方法学?”
“我采用Cactus,JSP,呃,用Cactus做一个精微奥妙的结构……”
看来这个问题也进行不下去了。
……
下午他打电话给我(面试结束之后他要走了我的手机号码):“请问我有没有复试的机会?”
我告诉他:“根据我的了解,您的Java方面的知识不太适合我们公司的要求,可能别的地方更适合您。”
“这样啊?我能不能见一下你们的总监?我想跟他直接谈谈。”
“好啊,您跟我们公司管人事的小姐联系一下吧。”
“我不应聘Java工程师了,你们招C++工程师吧?我下午去应聘好不好?”
“好啊,但是我不管C++,我只管Java招聘。”
换一个人给他折磨吧,我受的酷刑总算结束了。