头一次参加招聘会,去北航听了HP SSDO部门的实习生招聘宣讲会。这个部门听说过的不多,国内五个分部总共招40人。
本来打算把笔试题照下,后来感觉气氛挺严肃,不太好意思拿手机。顺手摘抄了几题回来。所抄大部分是程序和OS/DS之类的题。
从试题难度来看门槛也不是太高(毕竟实习生)。但自己也有很多题是回来后才证实做错了,还需要加强知识面和笔试经验。
下面的答案都是自己做的和搜集整理的,不保证完全的正确性。第一部分(C):
1.(关于%f的使用)判断下面的输出
main(){
int a=5;
printf("%f\n",a);
}
刚开始容易以为是输出5.0,但是答案应该是输出错误,报错runtime error。原因是%f不进行类型转换,到a处取浮点数,但a中为整型数,取不到浮点数。
2.(关于static)判断下面的输出:
for(i=0;i<9;i++){
static int j=3;
j++;
printf("%d,",j);
}
printf("%d\n",j);
这道题主要考察static静态变量的特点,顺便考察作用域。首先循环外的最后那个printf应该输不出来(报错),因为j定义于for循环内,作用域取不到外部。
其次,静态变量存放在内存的静态数据区,存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,一经定义不会再次分配存储空间,也不会自行消失,直到程序运行结束。即for循环内的static int j只接受了循环中的第一次声明。
去最后一行错误行后,9次循环应该输出4,5,6,7,8,9,10,11,12,
如果将static去掉,那么当然就是4,4,4,4,4,4,4,4,4,(每次循环重初始化)。
3.(关于++优先级)判断下面的结果:
main(){
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=3*a++;
printf("%d,%d,%d,%d\n",a,b,c,d);
}
这道题很简单了,a++是先运算在累加,++a是累加再运算,++的优先级高于*,所以输出为13,10,12,36
第二部分(C++):
1.Describe what is memory leaks and how to prevent memory leaks:
答:A memory leak is a type of programming bug that occurs when a program allocates more memory than it frees. This way, an application can run out of memory and cause the system to crash. To prevent memory leaks, you need to know when they occur most frequently and be conscientious with your use of the "new" and "delete" C++ operators.
第三部分(Java):
1.判断下面的输出:
public class DemoClass {
public static void setName(String str1,String str2){
str1 = str2;
}
public static void main(String[] args) {
String str1="ABC";
setName(str1,args[0]);
System.out.println(str1);
}
}
首先args[0],代表传入的第一个参数。这应在命令行下运行,java DemoClass param1(先javac DemoClass.java),则arg[0]为param1。
另外,这里输出的应该还是ABC,因为在setName中传入的参数应为外部str1的引用。对于int、long、char之类的原始数据类型,传值是引用的,如果在方法中修改了值,实际变量的值并不改变。
2.判断下面的输出:
public class A {
protected void func1(Object o){
System.out.println("hello f1");
}
}
public class B extends A{
protected void func1(String s){
System.out.println("hello f2");
}
protected void func1(Object o){
System.out.println("hello f3");
}
public static void main(String[] args) {
Object arg1="O1";
A a = new B();
a.func1(arg1);
String arg2 = "S1";
a.func1(arg2);
B b = new B();
b.func1(arg1);
}
}
正确的输出结果为:
hello f3hello f3
hello f3
同名方法的重载,子类的func1覆盖父类的func1。
关键在于第二个,传入一个String ,仍然被认为是Object。因为String类是继承Object类,也是Object类型。此处读取了父类型。
如果此处删去B类的func1(Object o),应该输出为hello f1,首先对于String仍然最后判断为Object,其次方法同名不同参,B的func1(String s)并不覆盖A的func1(Object o)。
A a = new B();相当于B b=new B(); A a=b;
第四部分(DataBase):
1.What is cursor in Oracle:
答:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
2.index methodology:
答:
CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);
...
3.star-schema:
答:The star schema consists of one or more fact tables referencing any number of dimension tables. The star schema is an important special case of the snowflake schema, and is more effective for handling simpler queries.
第四部分(OO):
1.design pattern:
答:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。常见有单件模式、抽象工厂模式和工厂模式、适配器模式、装饰模式、观察者模式、外观模式等。
2.use case:
答:Use Case是UML中非常重要的概念,它的定义是:在不展现一个系统或子系统内部结构的情况下,对系统或子系统的某个连贯的功能单元的定义和描述。
3.sequence diagram:
答: 时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。
第五部分(DS):
1.doubly-linked list and singly-linked list:
答:a doubly linked list is a linked data structure that consists of a set of sequentially linked records called nodes. Each node contains two fields, called links, that are references to the previous and to the next node in the sequence of nodes.
singly-linked list:
单链表在元素的节点结构中只能包含一个后继结点指针,不能包含多个指针。双链表则包含前驱和后继两个指针。
2.There is a one-way link-list and storage characters "A"to"Z", please write the program to output "Z"to"A".
答:
void ReversePrint(Node* head)
{
if(head->next != NULL)
ReversePrint(head->next);
printf("%d ",head->value);
}
3.Describle binary balance tree.
答:可以是空树,或左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树的二叉树。
第六部分(OS):
1.the differ between user perspective and technical perspective .
疑问中。
第七部分(SE):
1.黑盒:
答:黑盒测试也称功能测试,主要针对软件界面和软件功能进行测试,通过测试来检测每个功能是否都能正常使用。
把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,或是程序是否能适当地接收输入数据而产生正确的输出信息。
2.测试用例:
答:软件工程中的测试用例是一组条件或变量,测试者根据它来确定应用软件或软件系统是否正确工作。确定软件程序或系统是否通过测试的方法叫做测试准则。
本文也发表在我的独立博客blog.mc-zone.me上,点击 访问此文