题记:2015年1月22日,本人第一次技术类面试经历。两周前投的思科的实习,软件开发,在上海就招4个人。然后昨天HR打电话今天面试,下午2点钟和我同学到的思科,在漕河泾那边。
面试流程:有三个技术面,大部分问的技术,现在按照顺序流程简单记下。
一:第一个技术面
1 先让我介绍下最近在做的项目,然后拿着笔在板子上边讲边画。讲到项目的时候问了我一个线程和进程的问题,我说我程序中开启了两个线程,他问为什么不是两个进程??
2 问了个TCP和UDP的区别。以及为什么UDP有网络越来越差?以及TCP的窗口机制。
3 然后问我会不会,链表。我只是说了下,介绍下链表的基本概念什么的,但是要写代码的话就办不了了,然后后来,让我用冒泡法排序写一个比较一个字符串的字母大小,并且按照升序排列的问题,然后问我多长时间能写出来,我说大概15分钟,然后憋了半天。代码附上。最后他就叫了下一个人再问我:
代码:
/*
============================================================================
Name : WordsMax.c
Author : frank
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 100
void sort(char str[]){
int i,j;
int len = strlen(str);
char temp;
for(i = 0;i <len-1;i++){
for( j=len-1;j >=0;j--){
if(str[j]<str[j+1]){
temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
}
int main(void) {
//puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
char str[MAX];
gets(str);
sort(str);
puts(str);
return EXIT_SUCCESS;
}
二:第二个技术面
这个技术面,是个比较年轻的小伙子,感觉还是比较和善的。
1 子网掩码的问题,问了如果是一个26位的子网掩码可以接收多少主机。
2 linux进程间的通信、配置网络的命令-ifconfig,用户态和核心态的问题。
3,cgi的网页是如何在浏览器中显示出来的。他说应该是print出来的。
4 c语言中双向链表,如果已经有个双向链表,升序排序,已经排序好了,我应该如何再去插入一个节点,写出思路;enum枚举类型、union联合体;这些部分是谭浩强版c程序设计里面后面的部分,当时也没学后面,寒假回家一定要学下。
5 还问了一个使用代码库,就是github的东西。确实还没用过,只是在上面下代码,最近一直想学下。
6 计算机网络的路由器和交换机分别工作在哪一层,然后路由器是干嘛用的;VLAN
三:第三个技术面
1 一上问我一个c语言的关键字:Volatile,这个确实没有遇到过。被虐了。
2 然后问我了一个c语言的题目,是交换一个string 的类型,反向输出,要求用比较不占用Buffer的方法。前后交换等
3 然后问了一个智力题。是:有两根绳子,材质都不均匀,我只知道这每根绳子是1个小时烧完,问:我如何能够测算出时间是15分钟?
答案:半小时的话是对一根绳子两边一起烧。
4 问了一个大小端问题。这个真心听都没听过。通过代码检测系统是大端系统还是小端系统:
union X
{
int
x;
char
y[
4
];
};
#include <stdio.h>
//#include <stdlib.h>
int main()
{
union check
{
int a;
char b[2];
}s;
s.a=0x1234;
printf("variable:%8s\t%8s\t%8s\n","s.b[0]","s.b[1]","s.a");
printf("address:%8p\t%8p\t%8p\n",&s.b[0],&s.b[1],&s.a);
printf("data:%8x\t%8x\t%8x\n",s.b[0],s.b[1],s.a);
if(s.b[0]==0x12)
printf("big\n");
else
printf("little\n");
return 0;
}
15分钟的是:两根绳子一根点燃1头A(1小时烧完) 另一根点燃2头B(半小时烧完) 等点燃2头的绳子B烧完就代表半个小时过去,这个时候只点燃1头的绳子A还剩下能燃烧半个小时的量,把A另一头点燃同时计时,烧完就真好15分钟。
哎。。。15分钟就是没有想到!!
然后就就玩完了。
总结:
第一次技术面,感觉收获还是蛮大的,对于通信方面做这些底层开发的网络公司,虽然要求C/C++,但是还是要求要C语言基础非常好,感觉就是对C语言的那本程序设计基础的最后的链表、Uion部分,还有就是Linux部分的进程控制,进程间通信;另外问的比较多的还有就是计算机网络的知识。路漫漫其修远兮,吾将上下而求索!加油吧!
下面这些问题是和我一起去的另一个同学问到的问题(写的比较简洁):
1. 数据结构一个问题,
2. 计算机网络,TCP协议某一段代表什么
3. 英语自我介绍
4. 判断一个程序是否合法,、
5. 简历项目介绍
6. 统计一二进制数字1的个数()
7. 字母交换顺序
8. 智力题
9. 操作系统问题
10. Linux一个问题
11. 编程Python