小编

今天下午来到北京百度科技园进行复试PHP工程师岗位。

口试官问了很多问题,我大概整理回顾下:

php获取urlhash年夜厂面试题今天复试百度PHP工程师 Python

1.Redis秒杀实现?

redis行列步队办理抢购高并发的事理:在程序跟数据库之前呢我们可以利用redis行列步队做一个缓冲机制,让所有用户的要求进行排队,禀行前辈先出的原则(redis中的lpush和rpop),lpush程序是把用户的要求压入redis行列步队,然后用rpop做一个守护进程来取行列步队中的数据,按规定的抢购名额写好,把所有抢购成功的用户写入redis并且天生订单,在lpush程序中查看中奖的用户并且给用户及时提醒抢购结果!

  

2.做事器定时器实现,crontab 、crontab -e差异,去世循环如何结束?

第一种:在/etc/crontab下设置,指定用户名的1、vim命令进入/etc/crontab2、在末了一行加上59 23 root /root/catina/rm_8080lina.sh3、重启crontab,使配置生效第二种:直接用crontab -e,不须要指定用户1、crontab -e进入2、:wq退出保存3、查看上面那个脚本是否有实行权限4、还要看脚本里面的涉及的操作文件是否有权限5、重启crontab,使配置生效 1.利用ctrl-c跳出去世循环2.ps -ef|grep 名称 查询进程号3.kill 进程号

3.PHP如何运行shell脚本,配置文件在哪开启

php给我们供应了system(),exec(),passthru()这三个函数来调用外部的命令.虽然这三个命令都能实行linux系统的shell命令,但是实在他们是有差异的:system() 输出并返回末了一行shell结果。
exec() 不输出结果,返回末了一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以得到命令实行的状态码例子:system(\公众/usr/a.sh\公众);  首先是 要关掉 安全模式 safe_mode = off然后在看看 禁用函数列表disable_functions = proc_open, popen, exec, system, shell_exec, passthru这里要把 exec 去掉重启 做事器 就OK了 

4.获取HTTP头文件

1获取全部(客户端)HTTP要求头信息 #1 array apache_request_headers(void) #2:通过$_SERVER获取,每个http要求头信息都以\"大众HTTP_\"大众开头,在$_SERVER键中获取if_modified_since的要求信息 $_SERVER['HTTP_IF_MODIFIED_SINCE']2获取做事器相应一个HTTP要求所发送的所有标头array get_headers(string $url [, int $format = 0 ] )  # url 要求的做事器的URL地址 # format 0:返回的头部信息以索引数字形式,1:返转头部信息以关联数组形式   $head_arr = get_headers(\"大众xwww.baidu.com\"大众);   $head_arr_index = get_headers(\"大众xwww.baidu.com\"大众,1);

  

5.Nginx负载均衡实现,有几种办法?

1、轮询(默认)每个要求按韶光顺序逐一分配到不同的后端做事器,如果后端做事器down掉,能自动剔除。
upstream backserver { server 192.168.0.14; server 192.168.0.15;}2、weight指定轮询几率,weight和访问比率成正比,用于后端做事器性能不均的 情形。
upstream backserver { server 192.168.0.14 weight=3; server 192.168.0.15 weight=7;}权重越高,在被访问的概率越大,如上例,分别是30%,70%。
3、ip_hash上述办法存在一个问题便是说,在负载均衡系统中,如果用户在某台做事器上登录了,那么该用户第二次要求的时候,由于我们是负载均衡系统,每次要求都会重新定位到做事器集群中的某一个,那么已经登录某一个做事器的用户再重新定位到另一个做事器,其登录信息将会丢失,这样显然是欠妥的。
我们可以采取ip_hash指令办理这个问题,如果客户已经访问了某个做事器,当用户再次访问时,会将该要求通过哈希算法,自动定位到该做事器。
每个要求按访问ip的hash结果分配,这样每个访客固定访问一个后端做事器,可以办理session的问题。
upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80;}4、fair(第三方)按后端做事器的相应韶光来分配要求,相应韶光短的优先分配。
5、url_hash(第三方)按访问url的hash结果来分配要求,使每个url定向到同一个(对应的)后端做事器,后端做事器为缓存时比较有效。
 

6.Nginx.conf rewrite里末端符号问题 /path/to/photos /path/to/photos/差异?

当Web做事器吸收到对某个末端不含斜杠的url要求时,例如:xx.com/product,这时做事器会搜索网站根目录下有没有名为“product”的文件,如果没有就把product当做目录处理,然后返回abc目录下的默认首页。
当Web做事器吸收到的是末端带斜杠的要求时就会直接当做目录处理。
为了语义明确。
当然现在很多运用程序是路由重写路径的。
 

7.cookie会话攻击防护?

什么样的Cookie信息可以被攻击者利用1. Cookie中包含了不应该让除开拓者之外的其他人看到的其他信息,如USERID=1000,USERSTATUS=ONLINE,ACCOUNT_ID=xxx等等这些信息。
2. Cookie信息进行了加密,但是很随意马虎被攻击者进行解密3. 在对Cookie信息的时候没有进行输入验证如何戒备利用Cookie进行的攻击1. 不要在Cookie中保存敏感信息2. 不要在Cookie中保存没有经由加密的或者随意马虎被解密的敏感信息3. 对从客户端取得的Cookie信息进行严格校验4. 记录造孽的Cookie信息进行剖析,并根据这些信息对系统进行改进。
5. 利用SSL/TLS来通报Cookie信息

8.PHP常用函数并解释?

9.PHP扩展文件安装过程?

phpize安装//下载libevent扩展文件压缩包(在当前系统哪个目录下载随意)~# wget xxxx/get/libevent-0.1.0.tgz//解压文件~# tar -zxvf libevent-0.1.0.tgz//进入源码目录~# cd libevent-0.1.0/如 /usr/local/php7/bin/phpize //运行phpize命令,写全phpize的路径~# ./configure --with-php-config=/usr/local/php/bin/php-config//运行configure命令,配置时 要将php-config的路径附上~# make~# make test~# sudo make install//修正php.ini,结尾加入:extension=libevent.so//重启对应的php-fpm

10.一个客户端http要求从做事器server到nginx到php相应返回全体流程?

HTTP 事务实行过程客户端(浏览器)做出要求操作(输入网址、点击链接、提交表单)。
客户端对域名进行解析,向设定的 DNS 做事器要求 IP 地址。
客户端根据 DNS 做事器返回 IP 地址采取三次握手与做事端建立 TCP/IP 连接。
TCP/IP 连接成功后,客户端向做事端发送 HTTP 要求。
做事真个 Web Server 会判断 HTTP 要求的资源类型,进行内容分发处理;如果要求的资源为 PHP 文件,做事端软件会启动对应的 CGI 程序进行处理,并返回处理结果。
做事端将 Web Server 的处理结果相应给客户端客户端吸收做事真个相应,并渲染处理结果,如果相应内容须要要求其他静态资源,通过 CDN 加速访问所需资源。
客户端将渲染好的视图呈现出来并断开 TCP/IP 连接

11. CGI、FastCGI、PHP-CGI和PHP-FPM事理差异?

CGI:是公共网关接口 Web Server 与 Web Application 之间数据交流的一种协议。
FastCGI:FastCGI就像是一个常驻(long-live)型的CGI程序,它可以一贯运行着。
同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。
同样,SCGI 协议与 FastCGI 类似。
PHP-CGI:是 PHP (Web Application)对 Web Server 供应的 CGI 协议的接口程序。
PHP-FPM:是 PHP(Web Application)对 Web Server 供应的 FastCGI 协议的接口程序,额外还供应了相对智能一些任务管理。

   

12.做事器状态码200 300 400 500各代表的什么?

1.200-成功2.300-307表示要完成要求,须要进一步操作,代码状态常日为重定向3.400-417表示要求可能出错了,妨碍做事器处理400-做事器不理解的要求语法401-身份验证缺点403-做事器谢绝要求404-未找到网页(最常见的了做事器状态)405-方法禁用406-不接管(无法利用要求的内容特性相应要求的网页)407-须要代理授权408-要求超时(做事器等待要求超时)4.500-505表示:做事器在考试测验要求处理时发生内部缺点,是做事器的错,不是要求的错500-做事器内部缺点(例如测试环境的做事器挂了)501-做事器不具备完成要求的功能502-缺点网管503-做事器不可用(超载或者停机掩护,停息的状态)504-网关超时505-http版本不受支持(要求利用的http协议版本做事器不支持)

13.linux中把.c .h的文件编译成.so文件,gcc理解吗?

以下以编译mylib.c为例讲如何编译.so文件。
首先,编译mylib.c:$gcc -c -fPIC -o mylib.o mylib.c-c表示只编译(compile),而不连接。
-o选项用于解释输出(output)文件名。
gcc将天生一个目标(object)文件mylib.o。
把稳-fPIC选项。
PIC指Position Independent Code。
共享库哀求有此选项,以便实现动态连接(dynamic linking)。
天生共享库:$gcc -shared -o mylib.so mylib.o库文件以lib开始。
共享库文件以.so为后缀。
-shared表示天生一个共享库。

14.Redis内存回收机制? 

volatile-lru:从已设置过期韶光的数据集(server.db[i].expires)中挑选最近最少利用的数据淘汰volatile-ttl:从已设置过期韶光的数据集(server.db[i].expires)中挑选将要过期的数据淘汰volatile-random:从已设置过期韶光的数据集(server.db[i].expires)中任意选择数据淘汰allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少利用的数据淘汰allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰no-enviction(驱逐):禁止驱逐数据

 Redis 在默认情形下会采取 noeviction 策略。
换句话说,如果内存己满 , 则不再供应写入操作 , 而只供应读取操作 。
显然这每每并不能知足我们的哀求,由于对付互联网系统而言 , 常常会涉及数以百万乃至更多的用户 , 以是每每须要设置回收策略。
须要指出的是 : LRU 算法或者 TTL 算法都是不是很精确算法,而是一个近似的算法。
Redis 不会通过对全部的键值对进行比较来确定最精确的韶光值,从而确定删除哪个键值对 , 由于这将花费太多的韶光 , 导致回收垃圾实行的韶光太长 , 造成做事停顿。
15.爬虫仿照上岸,如何跳过验证码?

1、爬取网站时常常会碰着须要登录的问题,这是就须要用到仿照登录的干系方法。
python供应了强大的url库,想做到这个并不难。
2、首先得明白cookie的浸染,cookie是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。
因此我们须要用Cookielib模块来保持网站的cookie。
3、这个是要上岸的地址 1 和验证码地址 24、可以创造这个验证码是动态更新的每次打开都不一样,一样平常这种验证码和cookie是同步的。
其次想识别验证码肯定是吃力不谄媚的事,因此我们的思路是首先访问验证码页面,保存验证码、获取cookie用于登录,然后再直接向登录地址post数据。
5、首先通过抓包工具或者火狐或者谷歌浏览器剖析登录页面须要post的request和header信息。
仿照登录验证码地址和post地址将cookies绑定自动管理利用用户名和密码用代码访问验证码地址,获取cookie保存验证码到本地打开保存的验证码图片输入根据抓包信息 布局表单根据抓包信息 布局headers天生post数据 ?key1=value1&key2=value2的形式布局request要求打印登录后的页面登录成功后便可以利用该cookie访问其他须要登录才能访问的页面。