百度电话面试
1 自我介绍
2 php的数组函数有哪些?
好多,大家自行看书。
3 自动加载类的方法?
__autoload()
方法如下: function __autoload($class_name){
require($class_name.".php");
}
类名和文件名之间具有一种统一的对应关系。
注意修改php.ini中的include_path中的路径。
spl_autoload($class_name,$file_extension)
优先使用autoload_func是否为空,如果为空则运行__autoload()如果没有则报错.
4 php-fpm是什么?
php-fpm是一个php的fastcgi管理器,Nginx使用这些php-fpm进程来和php通信。php的解释器。
5 nginx如何解析PHP脚本?
1.nginx启动时,载入php-fpm(php的fastcgi管理器)。
2.php-fpm自身初始化,启动多个cgi解释器进程。
3.client请求到server后,php-fpm选择并连接一个cgi解释器,webserver将cgi环境变量和标准输入发送到php-fpm中的子进程php-cgi中,调用对应的PHP脚本进行处理。
4.子进程完成处理,将输出信息和错误信息从同一连接返回webserver,当子进程关闭,请求完成。
6 tcp三次握手
1.client向server发送一个SYN=1,seq=x随机选择初始序列号的tcp请求.
2.server收到这个请求后,缓存这个tcp请求和变量。然后向client发送SYN=1,ACK=1,seq=y的回应请求。
3.client收到server的同意建立连接的请求后,给服务器发送ACK=1,seq=x+1的请求报文。连接成功建立。
备注: 1.在前两次握手中报文不携带数据,第三次握手可以携带数据。
2.由于第二次握手时,server会缓存tcp请求和变量所以会遇到DoS(拒绝服务攻击)即只是给server发送大量的一次握手报文造成server大量缓存,导致资源耗尽。
7 线程安全
多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
8 C语言内存管理
内存空间主要由五个部分组成代码段、数据段、BSS段,堆和栈组成.其中代码段,数据段和BSS段是编译的时候由编译器分配,堆和栈是运行时由程序分配。
代码段:存放程序执行代码的内存区域,通常为只读。
数据段:存放初始化的全局变量和静态变量的内存区域,属于静态内存分配。可以分为只读数据段和读写数据段,字符串常量等存放在只读数据段。
BSS段 :用来存放未初始化的全局变量和静态变量,属于静态内存分配。BSS节不存放数据只是简单的维护程序开始和结束的地址。
堆:是动态分配的内存段,malloc函数开辟新内存(加入堆中),free函数释放。 特点:灵活方便,数据适应面广泛。缺点:效率有一定降低。
栈:存放临时创建的局部变量的(函数中定义的,不包括static),在函数调用的时候参数和返回值都会存在栈中。 特点:速度快高效。缺点:大小有限制不灵活。
9 strcpy和mecpy区别?
原型:char* strcpy(char* dest, const char* src);
strcpy只用于字符串复制,并且它在复制字符串内容之外,还会复制字符串的结束符。
原型:void *memcpy( void *dest, const void *src, size_t count);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制
10 C语言全局变量和局部变量的存储位置?
全局变量存储在数据段或者BSS段,局部变量存储在栈中。
11 判断链表相交
判断两个链表的最后一个节点是否一致。
12 相交链表的第一个结点
长的链表先走(长-短的距离),然后两个链表一起走,每走一次比较一次第一个相同的点即是。
13 将字符串中空格替换为20%
统计字符串中空格的个数,然后计算替换后的长度。从字符串的最后一个开始遍历遇到空格则将20%写入,否则将字符写入。
注意:问清楚是在原来的字符串空间里进行替换还是开辟新的空间。
问题总结:
1.开场白要突出项目的技术亮点和难点。
2.百度注重基础和算法。
3.服务器方面和操作系统方面。