php面试题

来源:互联网 发布:网络印刷系统多少钱 编辑:程序博客网 时间:2024/06/05 21:33

#

innodb更新数据会出现锁表

MySQL的innodb存储引擎支持行级锁,innodb的行锁是通过给索引项加锁实现的,这就意味着只有通过索引条件检索数据时,innodb才使用行锁,否则使用表锁。根据当前的数据更新语句(update jx_attach set complete=1,attach_size=63100 where cycore_file_id=’56677142da502cd8907eb58f’;),该条件字段cycore_file_id并没有添加索引,所以导致数据表被锁。

HTTP协议中传输报文可能被hacker窃取了,并且解密了。你该怎么做?

使用https

Tcp三次握手大概是怎么样的?

先Client发送连接请求报文给Server。Server收到后发送ack确认报文给Client。Client收到确认报文后再发送确认报文给Server。完成三次握手。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

mysql强制使用索引

如果在 where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num

innodB和myisam有什么区别?temporary你经常用在什么地方。

一个是行锁,一个是表锁,这样并发程度也就不一样了。innodB有日志,然后就能现实事务保证,他也能实现外键功能。Myisam在查询上快 点。文件方面。Myisam放有三个文件,在同一的目录中,数据也会放在其中一个上。而innodB的数据是放在目录外的idata文件中。innodB 也能实现这个idata文件大小的配置,比如可以配置最大为1G,到了这个大小,mysql会自动生成另一个idata文件。Temporary我会用在 类似用户登录的session表上。

常见攻击,和防范手段

SQL注入:过滤参数
XSS:过滤参数
CSRF:校验随机令牌

请写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制、八进制、十进制、十六进制数字)

16进制:0x200
8进制值:0300
is_int()

有一个IP地址(192.168.0.1),请写出其32位无符号整数形式

将ip 转成2进制
192%2 = 0
96%2 = 0
48%2 = 0
24%2 = 0
12%2 = 0
6%2 = 0
3%2 = 1
1%2 = 1
192 的二进制 :11000000

请写出HTTP头

Accept: text/html 可以接受的数据类型
Accept-Encoding: gzip 接受的压缩类型
Accept-Language: zh-CN 接受语言
Cache-Control: no-cache 是否有缓存
Connection : keep-alive 是否保持链接
Host:http://www.example.com:8080/test
Cookie:intro=Hello world!
Content-Disposition: form-data; username=”test”&pwd=”test2”&intro=”hello world!”
User-Agent: 浏览器信息
Referer: 前一个页面地址

写出、你能想到的所有HTTP返回状态值,并说明用途

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

PHP的垃圾收集机制是怎样的?

在php 变量的结构体中有一个gc变量 用来存储 该变量被引用的次数 当gc=0时 该变量被销毁

请列举你能想到的UNIX信号,并说明信号用途。

Unix信号量也可以在文件/usr/include/sys/signal.h中查看
SIGHUP 进程由於控制终端死去或者控制终端发出起命令
SIGINT 键盘中断所产生的信号
SIGQUIT 键盘终止

请写出让PHP能够在命令行下以脚本方式执行时安装PHP所必须指定的configure参数,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

由于 –enable-cli 和 –enable-cgi 同时默认有效,因此,不必再配置行中加上 –enable-cli 来使得 CLI 在 make install 过程中被拷贝到 {PREFIX}/bin/php。
php -f “index.php”
php -r “print_r(get_defined_constants());”

为什么会出现僵死进程(孤儿进程)?怎样查看僵死进程?如何解决僵死进程问题?

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
查看:使用ps aux
删除:ps aux | grep -e ‘^[Zz]’ | awk ‘{print $2}’ | xargs kill -9