10月13日上午9点到12点在哈工大深圳研究院参加百度2013校园招聘笔试。我投递的职位是移动软件研发工程师。
试卷题目如下:
一 简答题(3X10分)
1.什么是精简指令集?
2.已知一棵二叉树后序遍历序列是dabec,中序遍历序列是debac,那么前序遍历序列是什么?
3.面向对象方法重写与重载的区别?
二算法设计与编程题(3X15分)
1.单链表倒置?
2.两个有序的数组,如何高效地判断两个数组有相同的数字,编程实现?
3.有1000桶酒,其中有一桶酒有毒,一只老鼠喝了毒酒后,一周后会毒性发作,若需要在一周之内找到这桶毒酒,请问至少需要几只老鼠,为什么?
三系统设计题(25分)
设计一个Email客户端,能够支持多账户和SMTP、POP3和IMAP协议。
1)请至少写出5项用例?
2)假如我们使用Sqlite数据库以及关系数据库的形式存储账户、已收信件、已发信件、附件信息、草稿,请设计表结构?
3)假设已经实现了SMTP、POP3和IMAP协议,请给出这个Email客户端的模块设计图?
这份试卷,侧重数据结构与算法、面向对象设计、数据库设计、软件工程知识的考查。
本人解答的不是很理想,尤其是数据结构与算法的题目,欢迎高人指点,谢谢。
启示如下:
1)重视数据结构与算法的学习、理解和应用。
2)重视面向对象设计和 数据设计的思想。
3)具备软件工程的思维方式。
温馨提示:绝不放弃
从命令行运行Ant:
从命令提示符调用 Ant 可以简单得只需键入单独的 ant。如果您这样做,Ant 将使用默认的生成文件;该生成文件中指定的默认目标就是 Ant 尝试要生成的目标。还可以指定许多命令行选项,后面跟着任意数量的生成目标,Ant 将按顺序生成这其中的每个目标,并在此过程中解决所有依赖关系.
命令行选项:
默认情况下,Ant 寻找一个名为build.xml 的文件。因此,如果您的生成文件使用这个名称,就不需要在命令行指定它。当然,有时使用具有其他名称的生成文件更方便,在那样的情况下,您需要对 Ant 使用 -buildfile <file> 参数(-f <file> 是其简写形式)
–-Dmetal=beryllium
这个功能可用于覆盖生成文件中的初始属性设置。正如前面指出过的,属性的值一经设置就不能改变。-D 标志在读取生成文件中的任何信息之前设置某个属性;由于生成文件中的指派落在这个初始指派之后,因此它不会改变其值
编译源代码:
–<javac srcdir="src"/>
这个标签寻找 src 目录中以 .java 为扩展名的所有文件,并对它们调用 javac 编译器,从而在相同的目录中生成类文件。当然,将类文件放在一个单独的目录结构中通常会更清晰;可以通过添加destdir 属性来让 Ant 做到这点.
其他有用的属性包括
–classpath:等价于 javac 的 -classpath 选项。
–debug="true":指示编译器应该带调试信息编译源文件。
javac 任务的一个重要特点在于,它仅编译那些它认为需要编译的源文件。如果某个类文件已经存在,并且对应的源文件自从该类文件生成以来还没有改变过,那么该源文件就不会被重新编译。
javac任务的输出显示了实际被编译的源文件的数目。
这种行为刻画了 Ant 的许多任务的特点:如果某个任务能够确定所请求的操作不需要执行,那么该操作就会被跳过。
创建 JAR 文件:
在编译 Java 源文件之后,结果类文件通常被打包到一个 JAR 文件中,这个文件类似 zip 归档文件。每个 JAR 文件都包含一个清单文件,它可以指定该 JAR 文件的属性
下面是 Ant 中 jar 任务的一个简单使用例子:
<jar destfile="package.jar" basedir="classes"/>
这将创建一个名为 package.jar 的 JAR 文件,并把 classes 目录中的所有文件添加到其中(JAR文件能够包含任意类型的文件,而不只是类文件)。此处没有指定清单文件,因此 Ant 将提供一个基本的清单文件
manifest 属性允许指定一个用作该 JAR 文件的清单的文件。清单文件的内容还可以使用 manifest任务在生成文件中指定。这个任务能够向文件系统写入一个清单文件,或者能够实际嵌套在 jar 之内,以便一次性地创建清单文件和 JAR 文件。
<jar destfile="package.jar" basedir="classes"> <manifest> <attribute name="Built-By" value="${user.name}"/> <attribute name="Main-class" value="package.Main"/> </manifest> </jar>
时间戳生成:
在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。这可能涉及编辑一个文件,以便插入一个字符串来指定日期和时间,或将这个信息合并到 JAR 或 zip 文件的文件名中。
这种需要是通过简单但是非常有用的 tstamp 任务来解决的。这个任务通常在某次生成过程开始时调用,比如在一个 init 目标中。这个任务不需要属性,许多情况下只需 <tstamp/> 就足够了
tstamp 不产生任何输出;相反,它根据当前系统时间和日期设置 Ant 属性。下面是 tstamp 设置的一些属性、对每个属性的说明,以及这些属性可被设置到的值的例子:
在调用 tstamp 任务之后,我们能够根据日期命名该 JAR 文件,如下所示:
<jar destfile="package-${DSTAMP}.jar" basedir="classes"/>
文件系统操作:
创建和删除目录
–最基本的文件系统操作之一就是创建目录或文件夹。做这项工作的任务名为 mkdir
–<mkdir dir="archive/metals/zinc"/>
–mkdir 任务的另一个有用特性是它的如下能力:在父目录还不存在时创建它们
–如果目标目录已经存在,mkdir 任务不会发出错误消息,而只是假设它的工作已经完成,从而什么也不做
删除目录
–<delete dir="archive/metals/zinc"/>
–这将删除指定的目录连同它包含的所有文件以及子目录。使用 file 属性而不是 dir 属性可以指定要删除的单个文件
复制和移动文件及目录
<copy file="src/Test.java" tofile="src/TestCopy.java"/>
还可以使用 move 来执行重命名操作而不是拷贝文件
<move file="src/Test.java" tofile="src/TestCopy.java"/>
另一个常用的文件系统操作是将文件复制或移动到另一个目录
<copy file="src/Test.java" todir="archive"/>
<move file="src/Test.java" todir="archive"/>
默认情况下,Ant 仅输出它执行的移动和复制操作的摘要,包括诸如已移动或复制的文件的数量等信息。如果想看到更详细的信息,包括涉及的文件名称等,可以将 verbose 属性设置为true
创建和解压缩zip文件:
<zip destfile="output.zip" basedir="output"/>
解压缩和提取文件:
<unzip src="/blog_article/output.tar.gz" dest="extractDir"/>
还可以包括 overwrite 属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的条目相匹配的所有现有文件
替换文件中的标记:
replace 任务,它执行文件中的查找和替换操作。
token 属性指定要查找的字符串,value 属性指定一个新的字符串,查找到的标记字符串的所有实例都被替换为这个新的字符串。例如:
<replace file="input.txt" token="old" value="new"/>
替换操作将在文件本身之内的适当位置进行。为了提供更详细的输出,可把 summary 属性设置为true。这将导致该任务输出找到和替换的标记字符串实例的数目
模式匹配:
可以对目录执行模式匹配。例如,模式 src*/*.java 将匹配带 src 前缀的任何目录中的所有Java 文件。
还有另一种模式结构:**,它匹配任意数量的目录。例如,模式 **/*.java 将匹配当前目录结构下的所有 Java 文件。
<copy todir="archive">
–<fileset dir="src">
<include name="*.java"/>
–</fileset>
</copy>
fileset 默认情况下包含指定 src 目录下的所有文件,因此为了仅选择 Java 文件,我们对模式使用一个 include 元素。类似地,我们可以对另一个模式添加一个 exclude 元素,从而潜在地排除include 指定的匹配项。甚至可以指定多个include 和 exclude 元素;这样将得到一组文件和目录,它们包含 include 模式的所有匹配项的并集,但排除了 exclude 模式的所有匹配项
默认排除:
自动从文件集内容中排除的内置模式列表。该列表包括与名为 CVS的目录相匹配的条目,以及以 ~ 字符结尾的文件,它们可能是备份文件。通常不想在文件系统操作中包括这类文件和目录,因此排除这些文件是默认行为。然而,如果确实想无例外地选择 所有 文件和目录,可以将文件集的 defaultexcludes 属性设置为 no。
据美国媒体报道,在电脑时代,许多老年人不甘落后,然而鲜为人知的是,在美国仍然生活着几名80多岁的“奶奶级”电脑高手:她们曾在二战中帮助军方精确地计算出炮弹发射轨迹,曾为世界上第一台电子计算机编写程序,还是世界上第一批“黑客”。半个多世纪来,人们对这批“奶奶级”电脑高手毫无所知,直到日前,她们的故事才首次浮出水面,并正在被拍成一部名叫《隐形电脑:ENIAC程序师的故事》的纪录片。
孙子炫耀牵出传奇故事
曾为世界第一台电子计算机ENIAC编写过程序
纪录片制片人(左)和4名“奶奶级”电脑高手在一起,她们分别是贝蒂(左二)、
马琳(左三)、凯瑟琳(右一),前排坐着的贝蒂·辛德·霍伯顿目前也已去世
现年83岁的美国新泽西州老太太贝蒂·巴蒂克是5个孙子的祖母,喜欢上网打桥牌。然而鲜为人知的是,她其实是世界上最早的一批女性电脑高手,她曾为世界上第一台计算机编过程序。
对于这一点,即使十分熟悉贝蒂的朋友也不知道。不过,贝蒂的孙子亚历克斯却早就知道奶奶的秘密。一天,他在学校里向老师炫耀说,自己的奶奶是世界上最早的计算机先驱和电脑高手。当时,老师以为小孩子是在吹牛,还狠狠批评了他一顿。为了还儿子一个诚实的名声,亚历克斯的父母亲自到学校向那名教师解释了一切。
帮助军方计算弹道轨迹
贝蒂的传奇故事随即引起了历史学家的关注。
据悉,贝蒂和计算机打上交道可以说是阴差阳错。1945年,当时20岁的贝蒂还是美国密苏里州西北教师学院一名数学专业的女大学生。随着二战接近尾声,美国陆军由于缺少男数学家计算弹道发射轨迹,开始在宾夕法尼亚州大学发起了一项绝密的 “阿伯丁试验场”行动,招募女性成为计算弹道轨迹的“人体计算机”。
贝蒂成功地被美国陆军录用,成了一名“军中数学家”,帮助陆军精确地计算各种武器的弹道轨线。与贝蒂一同被招募的还有另外5名女学生。
为首台计算机编写程序
二战结束后,贝蒂继续为军方从事计算机研究工作。1946年,她和另外5名女伙伴开始为世界上第一台电子计算机ENIAC编写程序。1949年,她又帮助美国诺斯罗普航空公司为世界上第一台商用计算机UNIVAC I设计逻辑程序,这台计算机在1951年首次被美国人口普查署投入了使用。
据悉,为世界上第一台计算机ENIAC编写程序堪称是一项考验身体毅力、创造力和耐力的严峻工作,因为这台机器在当时来说实在太复杂了,它占地170平方米,重达30吨,包含了大约18000个电子管、70000个电阻器和至少3000 多个开关。1946年2月,美国陆军军械部和宾夕法尼亚大学莫尔学院联合向世界宣布ENIAC的诞生,从此揭开了现代电子计算机发展和应用的序幕。
世界上第一批“黑客”
据悉,贝蒂甚至还是世界上最早的女“电脑黑客”,因为在早期的计算机程序研究中,她和其他5名女同事还曾合法地“黑”过世界上首批计算机中的一台,并将它转变成了一台程序储存器,从而帮助计算机真正地迈入了数字化时代。
贝蒂婚后生有3名儿女,为了照顾3个孩子,几年后她被迫离开了计算机研究行业。
被美国计算机史遗忘
据悉,在6名最早的女性电脑高手中,目前只有3人还活在世上,都已是80多岁高龄。
几十年来,贝蒂和她的5名女同事一直被美国计算机史所忽略和遗忘。在ENIAC计算机发明40周年庆祝典礼中,这些最早的先行者甚至没有获得邀请,唯一一名被邀请的女性还是作为另一名计算机专家的配偶出现的。
最近,贝蒂的故事正被拍成一部纪录片。据纪录片制片人、计算机历史学家凯西·克莱曼说:“这部纪录片不仅仅是讲述她们的传奇故事,而且对美国目前的计算机业具有重要意义,因为如今的美国计算机界仍是男性主宰的世界。而这几位‘奶奶级’电脑高手的事迹证明,女性在计算机研究上的能力丝毫不亚于男性。”