1.给你四个坐标点,判断能不能组成一个矩形,比如判断([0,0],[0,1],[1,1],[1,0])能组成一个矩形。下面我们来分析一下这道题,给4个标点判断矩形是不是高中知识,矩形的长短边和对角线满足勾股定理。所以,解题思路是,根据坐标点,列出所有两点的边长之和的数组,去掉重复的,看是否只剩下3个长度(注意正方形有2个长度)判断是否满足勾股定理并优化。先判断是否有重复点。如果有,它一定不是矩形。代码如下:/';$ret=preg_match_all($reg_tag,$content,$match_result);$pic_url_array=array_unique($match_result1[1]);//创建路径$dir=getcwd().DIRECTORY_SEPARATOR.$image_path;mkdir(iconv("UTF-8","GBK",$dir),0777,true);foreach($pic_url_arrayas$pic_url){//获取文件信息$ch=curl_init($pic_url);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_NOBODY,0);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$fileInfo$=curl_exec($httpinfo=curl_getinfo($ch);curl_close($ch);//获取图片文件后缀$ext=strrchr($pic_url,'.');$文件名=$目录。'/'。唯一标识符()。$分机;//保存图片信息到文件$local_file=fopen($filename,'w');if(false!==$local_file){if(false!==fwrite($local_file,$filecontent)){fclose($local_file);}}}}4.获取当前客户端的IP地址,判断是否在(111.111.111.111,222.222.222.222)如果没有使用代理服务器:$ip=$_SERVER['REMOTE_ADDR'];使用透明代理$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];5、nginx的log_format配置如下:log_formatmain'remoteaddr?remote_user[timelocal]"request"''statusbody_bytes_sent"httpreferer"""http_user_agent""upstreamresponsetime""request_time""http_x_forwarded_for"';来自今天的nginx日志文件访问.log:a.列出“request_time”最大的20行?b.列出上午10点访问次数最多的20个url地址?6.什么是CSRF攻击?XSS攻击?如何防范?CSRF:cross-siterequestforgery,可以通过判断来源和添加Token来判断防止XSS:通过对内容进行转义和过滤,可以防止跨站脚本攻击,另外在CSP7和应用中,我们经常会遇到随机取10条数据的情况从用户表中进行显示。简要说明如何实现此功能。SELECT*FROM`table`WHEREid>=(SELECTFLOOR(MAX(id)*RAND())FROM`table`)ORDERBYidLIMIT1;8、从扑克牌中随机抽取5张牌,判断是否为顺子,即这5张牌是连续的。这个问题有个关键点。不能再有扑克牌了,1-13。这很容易。用PHP来做,定义一个数组分别存放1到13,取出一个,留一个空,最后检查五个空的是否连续。在这种情况下,不考虑提取顺序。9、两个相交的单向链表,如何找到它们的第一个公共节点思路:如果两个链表相交,从交点开始,后面的节点都相同,即最后一个节点必须相同;从头到尾遍历两个链表,并记录链表的长度。当两者的尾节点不同时,两者一定不能相交;如果尾节点相同,如果A的长度为LA,B的长度为LB,如果LA>LB,则A为LA-LB如果两个单向链表有公共节点则先跳过,也就是说,两个链表都是从某个结点开始的,它们的m_pNext都指向同一个结点。但是因为是单向链表的节点,每个节点只有一个m_pNext,所以从第一个公共节点开始,它们的所有节点都是重合的,不存在分叉的可能。因此,两个共享节点但部分重叠的链表,拓扑形状看起来像Y,而不像X。10.最长公共子序列问题LCS,如果有两个数组[1,2,5,11,32,15,77]和[99,32,15,5,1,77],发现他们都有写出时间复杂度最优的代码,不能用array_intersect(这里有坑,需要研究dynamic编程)。11.Linux内存分配与多线程原理12.MYSQL中主键和唯一索引的区别主键:不能有空值。唯一索引:可以有空值13。http和https的主要区别就在S上。简而言之,https连接建立后,首先要发送SSL证书,有了公钥和私钥,就可以解密了。14、HTTP状态码及其含义200请求成功,本次响应将返回想要的响应头或数据体。301请求的资源已永久移动到新位置。302请求的资源现在暂时响应来自不同URI的请求。4001.语义不正确,服务器无法理解当前请求。2、请求参数错误。401当前请求需要用户认证。403服务器已理解请求,但拒绝执行。404请求失败。在服务器上找不到请求的资源。500服务器遇到意外情况,无法完成请求的处理,当程序代码错误时会出现。501服务器不支持当前请求所需的功能。无法识别请求的方法。502作为网关或代理的服务器试图完成请求时,收到来自上游服务器的无效响应。503由于临时服务器维护或过载,服务器当前无法处理请求。15.如何在Linux中查看系统资源使用情况。top、htop、free、uptime16、SQL注入的原理是什么?如何防止SQL注入原理:首先是SQL本身有问题(这不是主要问题)。第二,你写的SQL问题很大(这个是主要的)。预防:首先,永远不要相信用户输入的任何内容。第二,预编译。现在的框架一般都有SQL过滤。17.isset(null)isset(false)empty(null)empty(false)输出PHP入门题,isset和empty的区别是false,true,true,true18,先优化MYSQL的方法,数据超过一定amount或volume,请垂直或水平拆分表格(最有效的优化)。其次,必须有一个自增主键。通过自增主键来查找数据是最快的。第三,为常用的查询字段建立联合索引。写SQL的时候一定要尊重最左原则,使用这个索引。第四,逻辑操作不要放在sql里。言下之意,不要写太复杂的SQL,如果你会写复杂的SQL,你肯定可以通过PHP实现。19.什么是数据库中的事务?事务是以一组有序的数据库操作为单位。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,也认为事务不成功。如果所有操作都完成,则提交事务并将其修改应用于所有其他数据库进程。如果操作失败,则回滚事务并取消对该事务的所有操作的影响。20.编写一个函数以尽可能高效地从标准URL中提取文件的扩展名。最好写正则表达式。反正我不会正则化,需要的时候就百度一下。21、参数是多个日期时间的数组,返回最接近当前时间的时间遍历数组,找到当前时间差,与第一个比较,比第一个交换位置小。最后拿下第一个。22、echo、print、print_r的区别把这三个放在一起,答案是print_r是一个函数,echo和print是结构语言。至于它们的具体区别,可以参考:https://www.cnblogs.com/xiaot...23、http协议的头部有哪些键和含义的问题,比较难。一时半会说不出来。如果你做过PHPrestful接口开发,踩过坑,应该能回答几个常用的KEY。24、二叉树前中后遍历代码级序遍历前序遍历中序遍历后序遍历25、PHP数组和C语言数组结构有什么区别?但是从PHP的角度来看,考的是PHP数组的实现。可以简单的认为PHP的数组是一个哈希桶+交叉链表(实际上是数组Array、列表List、哈希表/关联数组/字典Hashtable的集合体)。优点是查询效率很高,遍历很方便。缺点是比较占内存。(还是以空间换时间的想法,毕竟现在内存不值钱了)C语言的数组是定长定类型的数组。26、Redis的跳表如何实现跳表(skiplist)是一种有序的数据结构,通过在每个节点中维护多个指向其他节点的指针来达到快速访问节点的目的。27.什么是散列?hash冲突后,如何保存数据?28、聚簇索引和聚簇索引有什么区别?29、B+Tree是如何查找的?30.数组和散列有什么区别?31.写一个函数判断下面的展开符号是否闭合,左右对称闭合:((())),)(()),(()))),(((((()),(()()),()()32.找出数组中不重复的值[1,2,3,3,2,1,5],一定很容易用普通的方法。问题33和32你的时间复杂度是多少?有的时候你写一个算法,然后面试官会让你把你算法的时间复杂度表达式写出来。34.这个弱类型变量怎么在PHP实现的?zval,PHP的八种,本质上只有一种结构。35.HTTP通信过程中,是客户端还是服务端主动断开连接?三次握手四次挥手,以及每一步的状态。这道题是mostimportant能一步回答的很全面就好了,一般client跟server说我这边东西发完了,能断开吗?但是,如果客户端发送了FIN,服务器没有回复,就会重试,直到超时,才会断开连接。服务器也是如此。如果超过时间,服务器将被破坏。36、PHP发起http请求的方式有哪几种?它们有何不同?GETPOSTHEADPUTDELETEOPTIONSTRACECONNECT37。有一棵二叉树。编写代码找出从根节点到标志节点的最短路径并打印出来。有多个标志节点。比如下图中树中的6和14是标志节点,请写代码打印典型二叉查找树的8,3,6和8,10,14两条路径。大学数据结构的基本问题。38、有两个文件,都超过1G大小,一行一行数据,每行数据不超过500字节。两个文件中的部分内容完全相同。请编写代码找到同一行并将其写入一个新的文件中。PHP的最大允许大小为255M。将文件拆分成若干个小文件,根据内容计算哈希值,分发到不同的文件中。39、请至少编写两个支持回调处理的PHP函数,并实现一个支持回调的PHP函数array_map、array_filter、array_walk40。请至少写出两种获取指定文件夹下所有文件的方法(代码或思路)。核心方法是scandir,核心思想是递归。41、请至少写三个拦截文件名后缀的方法或函数(PHP原生函数和自己实现的函数都可以)echosubstr(strrchr($file,'.'),1);echosubstr($file,strrpos($file,'.')+1);$arr=explode('.',$file);echo$arr[count($arr)-1];$arr=explode('.',$file);echoend($arr);echostrrev(explode('.',strrev($file))[0]);echopathinfo($file)['extension'];echopathinfo($file,PATHINFO_EXTENSION);42、PHP如何在不使用自带的cookie函数的情况下向客户端发送cookies。对于分布式系统,如何保存会话值。这个问题有点绕。考的还是COOKIE和SESSION的基础知识。服务器通过set-cookie命令通知客户端保存cookie。可以根据域路径过期时间等规则使用header函数来实现。分布式系统会话,集中处理。根据我们公司的架构,为了实现高可用和高容灾,我们提供分布式签名验证服务。具体可以看redis的分布式服务架构。43、请用SHELL统计5分钟内nginx日志中访问次数最多的URL地址,对应的IP是哪些?44、编写shell脚本将指定的mysql库(如test)备份到指定文件夹并打包,并删除30天前的备份,然后将新的备份推送到远程服务器,之后发送邮件通知完成。45、mysql数据库中innodb和myisam引擎的区别主要在于数据和索引的存储结构和存储方式,以及对事务的支持。46.从用户在浏览器输入网址回车,到看到完整的会议,中间经历了哪些过程。入门问题。这个问题坑比较大,面试官可能会从这个问题出发,问你一大堆问题。以PHP为例:通常最简单的答案就是找到离用户电脑最近的DNS服务,然后解析到对应的IP,然后双方开始HTTP连接,然后发送请求信息,服务器开始准备收到请求信息后的响应信息。中间需要先通过nginx转发给CGI(PHP-FPM),然后PHP开始解析框架,解析请求头,找到对应的API,查数据库查数据,组装HTML,并在完成后返回给用户。用户拿到返回的数据,浏览器开始渲染页面,JS开始加载。47.如何分析一条sql语句的性能。解释一下,详情请百度。(基本上很少用到性能分析语句,MYSQL的表设计得尽量冗余,避免在MYSQL中处理大量的逻辑操作。我们是做PHP服务开发的,mysql语句尽可能简单。逻辑操作可以在PHP中完成。)48.当ping服务器失败时,使用哪个命令来跟踪路由包?linux:traceroute,windows:tracert49,$a=[0,1,2,3];$b=[1,2,3,4,5];$a+=$b;var_dump($a)等于什么?基本问题。本质是考察PHP数组的结构和特性。结果是01235。PHP的数字索引和STRING索引50还是有很大区别的,$a=[1,2,3];foreach($aas&$v){}foreach($aas$v){}var_dump($a)等于;122这里有个坑。foreach执行完后,$index和$value不会消失,保留上次赋值。这里第一次foreach之后,数组的最后一个元素变成了引用,引用变量$v继续存在并指向数组的最后一个元素。对于第二次遍历,因为遍历变量名是$v,也就是说每次遍历都会将本次遍历的值修改为最后一个元素的值,直到遍历完最后一个元素(引用元素),因为此时最后一个数组的元素一个元素被修改为前一个元素的值,最后赋值是self==self。因此,最后一位等于倒数第二位。更多学习内容可以访问【与大厂比较】优质PHP架构师教程目录。只要能读懂,就能保证你的薪水更上一层楼(持续更新中)。以上内容希望对大家有所帮助,很多PHPer在进阶的时候总会遇到一些问题和瓶颈。业务代码写多了,没有方向感,就不知道从哪里入手改进。我整理了一些这方面的资料,包括但不限于:高扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务,Nginx等知识点进阶进阶干货需要的可以免费分享给大家,需要的可以点击链接领取进阶PHP月薪30k>>>架构师成长之路【免费获取视频和采访资料】
