近期面试总结(PHP后端开发工程师)(部分笔试题)
1.字符串"0"在PHP和js中转换为布尔值是false还是true
php:false; php 弱语言 '0'和0一样; js:true;字符串除了空字符串('')其他都是true(包括' ' 这种中间有空格的);
2. echo,print_r ,print,var_dump 区别 echo:语句结构; print:是函数,有返回值 print_r:能打印数组,对象 var_dump:能打印对象数组,并且带数据类型
3.如何获取客户端的IP(要求取得一个int)和服务器端的IP的代码
$ip = $_SERVER["REMOTE_ADDR"]; 或者:getenv('REMOTE_ADDR'); 转化为int $intIP = ip2long($ip); $_SERVER["SERVER_ADDR"]; gethostbyname('www.baidu.com');
4. mysql联合索引index_a_b_c(a,b,c) charset=utf8,a int(10),b varchar(10),c tinyint(1),问条件where a = 5 and c = 1用到的索引长度。
索引长度:4+1 = 5 (用到a,c)
where a=5 and b = "hahah";
索引长度:4+10*3+2 = 36 (用到a,b)
5.json和jsonp的区别,什么时候用。
jsonp 跨域请求
6.写出点击一个div出现相应的序号的js
7.session和cookie的区别和联系
8.PHP实现遍历出文件夹和他下面子文件的代码
1. <?php 2. $dir = '/Users/zhaoning/Desktop/算法'; 3. 4. function getAllFile($dir){ 5. $allFileArr = array(); 6. if (is_dir($dir)) { 7. $res = opendir($dir); 8. while ($row = readdir($res)) { 9. if ($row == '.' || $row == '..') { 10. continue; 11. } 12. if (is_file($dir.'/'.$row)) { 13. $allFileArr[] = $row; 14. }else if (is_dir($dir.'/'.$row)) { 15. $allFileArr[$row] = getAllFile($dir.'/'.$row); 16. } 17. } 18. closedir($res); 19. } 20. return $allFileArr; 21. } 22. var_dump(getAllFile($dir)); 23. ?>
9.写出匹配html标签的而不匹配div span img的正则表达式
10.写出下面正则表达式的含义
$ ^ [^] ? ?:
11.PHP中this和self的区别
this:对象
self:类
12.如何防止SQL注入,XSS攻击和CSRF攻击
SQL注入:mysqli_real_escape_string()转义关键字符;
XSS攻击:alert把一些cookie信息打印出来;过滤掉<>等关键字符串
CSRF攻击:跨站攻击。防止:token,验证码
13.Linux的命令:查找出文件名后缀是.txt的,内容包含delete的文件,并删除
1. find / -name "*.txt" | xargs -n1 -I(这是i) 'xxx' grep -l(这是L) 'delete' 'xxx' | xargs -n1 -I 'zzz' rm -f 'zzz'
14.PHP解决多进程读写一个文件的方法
1. function putFile($file,$mode="w"){ 2. $file = fopen($file,$mode); 3. if(flock($file,LOCK_EX)){ 4. fwrite($file,'write a word'); 5. flock($file,LOCK_UN); 6. }else{ 7. echo "无法访问"; 8. } 9. fclose($file); 10. }
15.数据库表的引擎有哪几种?区别和场景
MyISAM:多用于select
Innodb:事务
memory:内存中,存储快
merge:用于日志和数据仓库
archive:用于日志,只有select和insert,不支持索引。
16.nginx和PHP的工作原理
17.ES连接PHP的扩展叫什么名字
elasticsearch
18.调用接口需要什么,签名怎么生成的,登陆接口的实现
签名:( token + 时间戳 ) 加密 = sign
19.接口返回包含哪几部分。
1. { 2. code: 3. msg: 4. data:{} 5. }
1.不知道什么的英文
2.PHP错误种类.
3.var_dump(0123==123);var_dump('0123'==123); false true
4.36个人,6个赛道,没有秒表,比赛多少次能够得出前三名?
5.正方形四个角有四个虫子,虫子沿边走,问:虫子相遇(两个碰头)的概率是多少?
6.A去买水果3.5斤共14元,给老板B 20 元 ,B没零钱,找隔壁C换20元,回来后找A 6元,C发现这个钱是假的,找B,B又给C 20 元。问:B一共亏了多少钱。
7.快排
8.同一个ip,10分钟能只能访问5次
9.设计微博粉丝互粉,用户1亿。
问答:
http协议包含几部分。
接口是怎么实现的。
token 是怎么生成的。
你知道哪些加密。
如何防止http包的数据篡改。比如说转账10块,http包被劫,改成100块了。
针对有项目经验的面试梳理:
1.自我介绍。
在哪工作,多长时间。做了什么东西,项目背景,用到的技术,负责什么工作。
答案:之前在滴滴打车工作,工作半年多。参加的项目有谷雨移动和司机帮。谷雨移动是(移动端)为汽车租赁公司提供管理旗下快车的软件。主要用的PHP+redis+ES。我主要负责服务分和各项报表的查询和汇总。司机帮主要是面向快车司机的,司机能够查看自己的流水和服务分,服务时长等各项数据。我主要负责服务分的排名。
问:redis起什么作用?
减少访问es的次数
懒加载(访问redis没有数据,然后去查ES,把结果导入数据redis里面)有什么弊端?
数据不同步的问题。
怎么解决数据不同步?
1.把懒加载换成定时跑数据。
2.从ES里面读取近期是否有数据变化,如果有从新读取ES。没有的话在还用原来的redis里面的数据。
2.apache和nginx的区别
工作模式:
apache 有两种模式perfork,worker模式
perfork:
worker:
nginx的epoll和select:
epoll:模式单线程异步非阻塞。
select:选择性的
3.Innodb和My ISAM的区别
MyISAM:
支持全文索引,
不支持事务。
存储结构:三个文件,一个数据文件,一个索引文件,一个表文件。
表级别的锁。
Innodb:
不支持全文索引,
支持事务。
存储结构:所有表同一个文件。
行级别的锁。
4.hash索引和b+tree索引的区别