PHP 高级面试115题汇总(含答案)
|
1、给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,0]) 能组成一个矩形。 2、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即 P 点 1 /*
2 *单链表的结点类
3 */
4 class LNode{
5 //为了简化访问单链表,结点中的数据项的访问权限都设为public
6 public int data;
7 public LNode next;
8 }
9
10 class LinkListUtli {
11 //当单链表中没有环时返回null,有环时返回环的入口结点
12 public static LNode searchEntranceNode(LNode L)
13 {
14 LNode slow=L;//p表示从头结点开始每次往后走一步的指针
15 LNode fast=L;//q表示从头结点开始每次往后走两步的指针
16 while(fast !=null && fast.next !=null)
17 {
18 if(slow==fast) break;//p与q相等,单链表有环
19 slow=slow.next;
20 fast=fast.next.next;
21 }
22 if(fast==null || fast.next==null) return null;
23
24 // 重新遍历,寻找环的入口点
25 slow=L;
26 while(slow!=fast)
27 {
28 slow=slow.next;
29 fast=fast.next;
30 }
31
32 return slow;
33 }
34 }
35 3、写一个函数,获取一篇文章内容中的全部图片,并下载
36
37 function download_images($article_url = '',$image_path = 'tmp'){
38
39 // 获取文章类容
40 $content = file_get_contents($article_url);
41
42 // 利用正则表达式得到图片链接
43 $reg_tag = '/<img.*?"([^"]*(jpg|bmp|jpeg|gif|png)).*?>/';
44 $ret = preg_match_all($reg_tag,$content,$match_result);
45 $pic_url_array = array_unique($match_result1[1]);
46
47 // 创建路径
48 $dir = getcwd() . DIRECTORY_SEPARATOR .$image_path;
49 mkdir(iconv("UTF-8","GBK",$dir),0777,true);
50
51 foreach($pic_url_array as $pic_url){
52 // 获取文件信息
53 $ch = curl_init($pic_url);
54 curl_setopt($ch,CURLOPT_HEADER,0);
55 curl_setopt($ch,CURLOPT_NOBODY,0);
56 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE );
57 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE );
58 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
59 $fileInfo = curl_exec($ch);
60 $httpinfo = curl_getinfo($ch);
61 curl_close($ch);
62
63 // 获取图片文件后缀
64 $ext = strrchr($pic_url,'.');
65 $filename = $dir . '/' . uniqid() . $ext;
66
67 // 保存图片信息到文件
68 $local_file = fopen($filename,'w');
69 if(false !== $local_file){
70 if( false !== fwrite($local_file,$filecontent) ){
71 fclose($local_file);
72 }
73 }
74 }
75
76 }
4、获取当前客户端的 IP 地址,并判断是否在 (111.111.111.111,222.222.222.222) 如果没有使用代理服务器: $ip = $_SERVER['REMOTE_ADDR']; 使用透明代理 $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 5、nginx 的 log_format 配置如下: 1 log_format main ‘remoteaddrremote_user [timelocal]"request”’ 2 ‘statusbody_bytes_sent “httpreferer"″"http_user_agent” “upstreamresponsetime""request_time” “http_x_forwarded_for"'; 从今天的 nginx log 文件 access.log 中: a、列出 “request_time” 最大的 20 行? 6、什么是 CSRF 攻击?XSS 攻击?如何防范? XSS:跨站脚本攻击,可以通过对内容转义和过滤来防范,还有 CSP 7、应用中我们经常会遇到在 user 表随机调取 10 条数据来展示的情况,简述你如何实现该功能。 SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1; 8、从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是连续的 9、两条相交的单向链表,如何求它们的第一个公共节点 如果两个链表相交,则从相交点开始,后面的节点都相同,即最后一个节点肯定相同; 10、最长公共子序列问题 LCS,如有 [1,2,5,11,32,15,77] 和 [99,1,77] 两个数组,找到它们共同都拥有的数,写出时间复杂度最优的代码,不能用 array_intersect(这里有坑,需要去研究一下动态规划)。 11、linux 的内存分配和多线程原理 12、MYSQL 中主键与唯一索引的区别 13、http 与 https 的主要区别 14、http 状态码及其含意
15、linux 中怎么查看系统资源占用情况
16、SQL 注入的原理是什么?如何防止 SQL 注入 防范:第一,绝对不要相信用户输入的任何东西。第二,预编译。现在的框架一般都会有 SQL 过滤的。 17、isset (null) isset (false) empty (null) empty (false) 输出 分别是 false,true,true 18、优化 MYSQL 的方法 第二,务必有自增主键。通过自增主键来查数据是最快的。 第三,常用的查询字段建立联合索引,写 SQL 一定要尊从最左原则,用到这个索引。 第四,不要把逻辑运算放到 sql 里。言外之意是,不要写太复杂的 SQL,你能写复杂的 SQL 你肯定也能通过 PHP 实现。 19、数据库中的事务是什么? 事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。 20、写一个函数,尽可能高效的从一个标准 URL 中取出文件的扩展名 21、参数为多个日期时间的数组,返回离当前时间最近的那个时间 22、echo、print、print_r 的区别 23、http 协议的 header 中有哪些 key 及含义 24、二叉树前中后遍历代码
25、PHP 的数组和 C 语言的数组结构上有何区别? C 语言的数组,就是定长定类型的数列。 26、Redis 的跳跃表怎么实现的 27、哈希是什么?hash 冲突后,数据怎么存? 28、聚簇索引,聚集索引的区别? 29、B+Tree 是怎么进行搜索的 30、数组和 hash 的区别是什么? 31、写个函数,判断下面扩号是否闭合,左右对称即为闭合:((())),)(()),(()))),(((((()),(()()),()() 32、 找出数组中不重复的值 [1,3,5] 33、32 题你的时间复杂度是多少?有的情况下,你写了个算法,然后面试官会让你把你的算法的时间复杂度表达式写出来 34、PHP 的的这种弱类型变量是怎么实现的? 35、在 HTTP 通讯过程中,是客户端还是服务端主动断开连接? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
