PHP 面试知识梳理

来源:互联网 发布:淘宝抢拍器app苹果 编辑:程序博客网 时间:2024/05/29 17:38

1.域名与IP的区别

虽然域名方便记忆,由于服务器只能识别二进制的IP地址,所以我们在用某域名去访问某主机的时候,服务器会将其自动解析为对应的IP地址,

我们将这一行为称之为域名解析。反之,IP地址解析为域名,我们称之为域名反解析。俗话说,域名就相当于IP地址的一个独一无二且华丽的

面具。

2.memcache的原理,以及memcache是否能够缓存2M的数据

memcache是一个高性能的分布式的内存对象缓存系统,它是用过将数据库中的数据采用memcache缓存,当我们再次调用数据的时候,我们

只需要取出缓存中的数据,这样会大大的提升程序的工作效率,memcache可以缓存视频,文件,图片等,并且memcache最多可以缓存30天,

哪怕设置缓存时间为永久,缓存时间也会变成30天。还有就是memcache的最大健长为250,大于的话无法进行缓存,单个value的大小,不能

大于1M,否则的话也是无法进行缓存的。还有就是最大的连接数为200,最大的软连接数为1024,。memcache的优点是:

memcached是一种无阻塞的socket通信方式服务,基于libevent库,由于无阻塞通信,对内存读写速度非常之快。

3.能够实现多文件上传 文件下载,Php.ini所需配置参数:

需要修改上传的最大时间、上传的默认路径、上传的最大文件的大小、单次上传的最多数量、是否开启http文件上传权限、是否开启文件上传

max_input_time = 60      upload_tmp_dir =     upload_max_filesize = 2M   max_file_uploads = 20    file_uploads = On是否允许HTTP文件上传。默认值为On允许HTTP文件上传,此选项不能设置为Off          file_uploads = On

4.socket连接和http连接的区别

http连接属于短连接,每次客户端访问服务器完成之后,就会立马断开。

socket连接属于长连接,理论上服务器与客户端连接上之后一般是不会断开的,除非有一方挂掉了,还有就是客户端很长时间不与服务器发起

请求,还有就是网络原因,以及网络防火墙的开启都会造成长连接的断开。

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使用TCP/IP协议。

tcp协议: 对应于传输层  ip协议: 对应于网络层

HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的。

5.怎么验证字符串是否为utf-8

首先验证字符串是否为utf-8,可以有三种方式去证明,

一种是用ord函数,因为ord是获取字符串的首位的字符集,所以我们要采用循环。

第二种是采用mb_detect_encoding函数去查该字符串是否为utf-8

第三种是采用正则匹配,然而匹配字符串的正则应是:/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u

6.写出 echo '1'.print(2)+3的运行结果

结果为:511

原理是:我试验过,prin(2)输出的是两位数字21,我多次试验,如果我换成prin(5),输出的结果就是51。虽然我到现在都不明白其中的原理,但是我想程序不会骗人的

所以我认为如果用print的话,括号里面是数字的话就会输出该数字后面拼上1,然后+3,如果后面加的是一位整数,它就会与print出来的整数的第二位的数字相加,会把最后一位忽略掉,最后那么1.,也就是拼接上,这个运算属于倒序的,所以在算出来的数字最后面拼上1,所以结果为511.

7.php session默认有效时间是多长?如何设置这个存活时间?

在php.ini中,修改session.gc_maxlifetime = “”

就是session_id在cookie中存活的默认有效时间。当然前提还有就是开启session_id存到cookie中,session.use_cookies把这个的值设置为1,

还有就是session.gc_maxlifetime这个是Session数据在服务器端储存的时间

8.什么是域名?

域名相当于门牌号,全球的域名没有一个重复的,域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域)。域名是一个IP地址上有“面具” 。一个域名的目的是便于记忆和沟通的一组服务器的地址(网站,电子邮件,FTP等)。域名作为力所能及难忘的互联网参与者的名称,世界上第一个注册的域名是在1985年1月注册的。

9.如何实现多进程安全的写入一个文件数据 采用flock

文件锁:

用flock在写文件前先锁上,等写完后解锁,这样就实现了多线程同时读写一个文件避免冲突。大概就是下面这个流程 <?php/**flock(file,lock,block)*file 必需,规定要锁定或释放的已打开的文件*lock 必需。规定要使用哪种锁定类型。*block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。*lock*LOCK_SH 要取得共享锁定(读取的程序)*LOCK_EX 要取得独占锁定(写入的程序)*LOCK_UN 要释放锁定(无论共享或独占)*LOCK_NB 如果不希望 flock() 在锁定时堵塞/* $fp = fopen("/tmp/lock.txt", "w+"); if (flock($fp, LOCK_EX)) { // 进行排它型锁定 fwrite($fp, "Write something here\n"); flock($fp, LOCK_UN); // 释放锁定 } else { echo "Couldn't lock the file !"; } fclose($fp); ?>