2014深圳锐明视讯校园招聘 [李园7舍_404]

来源:互联网 发布:java权限管理shiro 编辑:程序博客网 时间:2024/05/17 06:08

好几天前的笔试。今天去九龙坡面试了一趟。遇上辅导员找咱还三方协议,虽然是悄悄的拿的,但就是不想还回去。深圳锐明视讯的宣讲会流程为:宣讲会(1小时左右)-->笔试(1小时半),然后过两三天的时间部分同学就会收到面试通知。我去面试了一遭,然后将笔试(软件工程师的笔试题)和面试的经历记录如下。

 

在软件和硬件之间徘徊了一下还是坐到了软件工程师的一排,笔试内容分为专业知识考查及综合测评。专业笔试主要是C语言,包括“printf”、“位运算符”、“局部指针(栈内存)”、“二级指针”、“动、静态局部变量”、“强制类型转换“、“简单递归”、“sizeof”、“结构体和联合体内存对齐”、“switch-case”、“字符串拷贝函数实现”、“简单递归函数编写”、“基本排序算法编写”、“链表的插入、删除等简单操作函数编写”。综合测评包含“数字规律”、“图形规律”、“应用题”。答案是我自己做的,感谢找虫者。面试分一面和二面。

 

1 C语言部分

C语言笔试由两部分组成:读程序和写程序。读程序大多是参进一些C语言的基本知识和printf连考,具体的题目记不起来了,想其每年的题目都会发生变化。主要笔记以下几个C知识点。

 

(1) 联合体与结构体内存对齐

C的内存对齐的笔记在: C struct内存对齐 union的大端小端  笔记中。

暂且假设这个说法正确:int占多少个字节是由编译器决定的,ANSI标准定义int是占2个字节

#include <stdio.h>int main(void){        union stu_1{                int age;                int gread[4];                char name[17];                char sex;        };        struct {                int age;                char name[4];                char sex;        }stu_2;        printf("\nunion size: %d, struct size:%d", sizeof(union stu_1), sizeof(stu_2));                return 0;}

这个题目不好做:

  • 不同的编译器sizeof(类型)的值可能不一样。
  • 数据在内存中存储的对齐方式不同输出结果也不同。

如果只考虑联合体与结构体占用内存这个知识点加sizeof(int)值为4,则union stu_1占用最大元素内存:17个字节。stu_2占用所有元素内存之和:4 + 3 +1 = 8个字节。但是,您若将这段代码敲进linux内进行验证,结果可不是这样子的。咋就和书上说的不一样呢?我猜测如下:

linux下,数据存储最小单元为4个字节。这就是为什么第一个输出结果为20,第二个输出结果为12。只有完全吻合数据存储方式的情况下才能输出书中所述的结果。


所以,答这道题目咱应该在答案后面注明是什么系统(啥存储方式来着)

 

(2) C语言的动态局部变量与静态局部变量

动态局部变量存储在栈上。静态局部变量跟全局变量一样存储在数据段的全局区(静态区)。程序考查静态局部变量的生命期。

void sum( int n ){        auto int m = 0;        static int k = 5;        m++;        k        += 2;        printf(“%d,”, n + m + k);}#include <stdio.h>int main(void){       int i;       for(i = 0; i < 4; ++i){             sum(2);       }return 0;}

函数被调用4次,每次和增加2,所以答案应该为:10, 12, 14, 16

 

(3) 简单递归输出

关于递归函数调用过程在 无聊的递归过程 笔记笔记中。

兴许是考查一下递归的思维,但是在平时的编程中递归使用得实在是太少。由于是简单递归的考查,我使用函数调用的方式将其解答,层层调用,直到函数用分支返回为止。

int sum( int n){         if(n <= 2){                   return n;         }         return sum(n-1) + sum(n-2);}

现在若n7(一般不会这么大),则sum函数返回多少。

答案:21

 

(4) &运算符

考查位运算符作减1的功能。这道题目我做错了。我瞄了一眼,将逻辑设置成:n & n-1相当于”--n;”操作。其实不然,若n为奇数则相当于”--n;”操作;当n为偶数时,每n         &=n – 1;操作使n的二进制最低非0位为0,等n最高位为0时再来一次n         &=n – 1;时,n就变为0了。

int bit(int n){int all = 0;while(n){++all;n&= n – 1;}return all;}

n9999,则bit函数的返回值为多少。

答案:8


(5) 二级指针

二级指针作为函数参数,作为改变传进指针内容之用。

void second_pointer(char **ppStr){* ppStr= “hello world”;}int main(void){char *pStr = “no hello world”;second(&pStr);printf(“%s\n”, pStr);}

答案:hello world


(6) 返回栈内存

编译器是不允许返回局部指针的。堆内存和栈内存可否返回可以看这两篇笔记:C指针和堆空间 笔记C语言 子函数return(局部变量&栈地址)机制  笔记

char *return_str(){char pStr[] =”hello wordl”;  // Not the char *pStr= =”hello wordl”;return pStr;}int main(void){char *pStr = NULL;pStr= return_str();printf(“%s\n”, pStr);}

答案:乱码。局部地址PStr可以返回,但返回后pStr所指的栈内存已经被系统释放。编译器会对此作出警告。

 

(7) 强制类型转换

void translate(){int value=0x12345678;char ch = (char)value;char *ch1= (char *)&value;        char *ch2       = (char *)value;printf(“%x,%x, %x\n”, ch, *ch1, ch2);}
答案:78,78,12345678
 一个地址占的内存大小跟操作系统的地址线挂钩,如32位系统中,一个地址占4个字节。所以就算是一个char型变量的地址值也是占用4个字节的。只是地址对应的内存只有一个字节大(每字节内存的地址为4字节值)。
 

(8) switch-case

考查case内不含break的情况:如果没有break语句,则程序会一直执行到break语句或者default下的语句为止。
#include <stdio.h>void switch_case(int n);int main(void){        int i;        for(i = 0; i < 3; ++i){                switch_case(i);        }        printf("\n");        return 0;}

void switch_case(int n){        switch(n){                case 0:                        n       += 1;                case 1:                case 2:                        n       += 2;                default:                        n       += 3;       }        printf("%d ", n);}
答案:6 6 7

(9) 简单函数编写

程序编写的题目都是简单函数的编写,包括“strcpy”、“简单递归”、"链表的插入删除"等函数的编写。懒得写了。
 

2 综合测评

(1)数字规律

3   2   5/3    3/2   (7/5)                           1    7    8    57  (121)

(2)图形规律

没有照片。

(3)简单综合应用题

应用题大体为:A,B两人共种20亩地的玉米,A种地速度是B的2倍,B种玉米的速度是A的3倍。等A,B种完这块地后地主给了20两银子,问两人该如何分配。

答:捡关键的数字进行理解:
B是A的3/2倍。
故A的银子为20 * 2/5 = 8两
B                         20- 8        = 12两。
 

3 面试

在学校笔试后,公司将笔试试卷带回公司。两到3天之后就会通知同学到公司面试,重庆区的同学面试地点在九龙坡科园3路68号金果园商务楼8楼面试。面试分一面(专业面)及综合面。专业面就是问技术问题,包含“MFC”,“linux”,“多线程”及“C/C++”的一些基本知识,如问了C与C++动态分配的区别。我觉得C++的STL几乎是必面知识,TCP/IP协议也是重点。一面快速通过进入二面。综合面为3面1,这种多面1的场合我总是喜欢放开了说,有胡说八道之疑。主要包括“自我介绍”、“大学最深刻经历”、“家庭情况”、“求学经历”、“职业规划”及“其它生活方面的问题”。有几个问题没有答上的:linux的启动顺序和职业规划。

自我介绍我直接说了名字和来自的院校,接着就没了。对于职业规划,我直接答我不知道。Linux的启动顺序我也答不知道,只是在linux之上搞过小开发,还没有时间深入内核等方面。然后其它的我直肠子的说了,如他人对我的评价,我回答的居然是自恋。不知道面试官们怎么想。

锐明视讯软件工程师在深圳7k,在重庆5k。过了一面,直入2面,下来总结笔试题才知道答的没有那么好。2013-10-17

Note Over.
	
				
		
原创粉丝点击