意外中的意外,庆幸中的庆幸,有了这样一次走进sigma
头一位欧阳先生个子高高的,年纪不大,背微驼,上来问了我一些简历上的东西,对zhuangwang
第三位仍很年轻,不甚友好的样子,呵呵。上来就问我HashTable
总的说来,三次面试确实挺不容易的,比起以前经历的那些要专业多了。遗憾还是颇多,主要是一些技术细节不甚了了,导致人家一追问我就没准了。不过还好,整个走下来,我也开始知道所谓大企业的方向了,进而就该是修炼内功的时间了吧,加油!
Thomson 笔试:
一.C/C++
1.函数指针
typedef STR ( * pFunc)( int * );
2.自加算符
( ++ x) * ( ++ x) * ( ++ x) = /* 11 * 11 * 12 = */ 1452 ;
3.枚举
/* a: 0, b: 0, c: 1, d: 5 */
4.指针
(1)const char* const p = &q中两处const的含义
Neither the value of the object addressed by p nor the address itself can not be unchanged.(“C++ Primer. P 105” )
(2)分析一下程序的运行结果
int main( int argc, char * argv[])
{
struct
{
char c; /* struct边界自动对齐,c之后三个字节才是n */
int n;
} s;
memset( & s, 0 , sizeof (s.c) + sizeof (s.n)); /* s.n的值不确定 */
for (s.c = 0 ; s.c < 10 ; ++ s.c)
{
s.n ++ ;
}
printf( " s.n is: %d " , s.c);
printf( " s.n is: %d " , s.n);
return 0 ;
}
(3)附上Intel, Microsoft等公司面试题一道
#pragma pack(8) /*设置结构体对齐长度*/
struct example1
{
short a; /* 该结构体中size最大者为b,其长度为4字节,故a的边界向b对齐 */
long b;
}; /* 其长度为8 */
struct example2
{
char c;
example1 struct1; /* 该结构体中size最大者为struct1中元素b,其长度为4,故其他成员均应向它对齐,
此时尽管编译器伪指令的限制为8,仍以4位对齐长度 */
short e;
}; /* 该结构体的长度为16 */
#pragma pack()
using namespace std;
int main( int argc, char * argv[])
{
example2 struct2;
cout << sizeof (example1) << endl;
cout << sizeof (example2) << endl;
cout << (unsigned int )( & struct2.struct1) - (unsigned int )( & struct2) << endl;
/* 在结构体二中,结构体一对象地址的偏移量为4 */
return 0 ;
}
(4)win32平台上各种基本数据类型长度
short : 2
int : 4
long : 4
float : 4
double : 8
long double : 12
5.sizeof
两种用法:用于数据类型或变量;前者取得编译器对于size_t的赋值;后者取得变量的长度,当操作数具有数组类型时,其结果是数组的总字节数;对于char*型字符串,等价于strlen。
若变量类型为联合,则sizeof的结果为此联合中元素的最大长度。如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小
二.网络
1.TCP协议中建立连接和关闭连接的过程如何?
在建立连接的时候,客户端首先向服务器申请打开某一个端口(用SYN段等于1的TCP报文),然后服务器端发回一个ACK报文通知客户端请求报文收到,客户端收到确认报文以后再次发出确认报文确认刚才服务器端发出的确认报文(绕口么),至此,连接的建立完成。这就叫做三次握手。如果打算让双方都做好准备的话,一定要发送三次报文,而且只需要三次报文就可以了。
TCP的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。客户机给服务器一个FIN为1的TCP报文,然后服务器返回给客户端一个确认ACK 报文,并且发送一个FIN报文,当客户机回复ACK报文后(四次握手),连接就结束了。
2.简述TCP与UDP协议的两点区别。
TCP与UDP的区别
1. 基于连接与无连接
2. 对系统资源的要求(TCP较多,UDP少)
3. UDP程序结构较简单
4. 流模式与数据报模式
TCP保证数据正确性,UDP可能丢包
TCP保证数据顺序,UDP不保证
具体编程时的区别
1. socket()的参数不同
2. UDP Server不需要调用listen和accept
3. UDP收发数据用sendto/recvfrom函数
4. TCP:地址信息在connect/accept时确定
UDP:在sendto/recvfrom函数中每次均 需指定地址信息
5. UDP:shutdown函数无效