PHP 面试知识梳理_第1页
PHP 面试知识梳理_第2页
PHP 面试知识梳理_第3页
PHP 面试知识梳理_第4页
PHP 面试知识梳理_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、算法与数据结构BTree 和 B+treeBTreeB树是为了磁盘或者其他存储设备而设计的一种多叉平衡查找树,相对于二叉 树,B树的每个内节点有多个分支,即多叉。B+TreeB+树是B树的变体,也是一种多路搜索树。参考文章:排序算法快速排序快速排序是十分常用的高效率的算法,其思想是:先选一个标尺,用它把整个 队列过一遍筛选,以保证其左边的元素都不大于它,其右边的元素都不小与它function quicksort($arr)/获取数组长度$length = count($arr);/判断长度是否需要继续二分比拟长/短连接的操作过程.短连接的操作步骤:建立连接- 数据传输- 关闭连接.长连接的操作

2、步骤:建立连接- 数据传输- (保持连接)- 数据传输- 关闭连接长/短连接的优缺点.长连接可以省去较多的TCP建立和关闭操作,减少资源浪费,节省时间,对于比拟频繁的请求资源的客户端比拟适用于长连接.短连接对于服务器来说管理较为简单,存在的连接都是有用的连 按,不需要额外的控制手段从浏览器输入域名到展示页面都发生了什么DNS域名解析先找本地hosts文件,检查对应域名ip的关系,有那么想ip地址发送请求,没有再去找DNS服务器建立TCP连接拿到服务器IP后,向服务器发送求求,三次握手,建立TCP连接。简单理解三次握手:客户端:您好,在家不,有你快递服务端:在的,送来吧.客户端:好滴,来了发送

3、请求与服务器建立连接后,就可以向服务器发起请求了。具体请求内容可以在浏览 器中查看。服务器处理请求服务器收到请求后由web服务器(Apache , Nginx )处理请求,web服务器解 析用户请求,知道了需要调用那些资源文件,再通过相应的这些资源文件处理 用户请求和参数,并调用数据库等,然后将结果通过web服务器返回给浏览Sh O返回响应结果在响应结果中都会有一个 状态码,诸如我们熟知的200、404、500 等。状态码都是由三位数字和原因短语组成,大致为五类:1XX信息性状态码接收的请求正在处理2XX成功状态码请求正常处理完毕3XX重定向状态码需要附加操作以完成请求4XX客户端错误状态码服

4、务器也无法处理的请求5XX服务器错误状态码服务器请求处理出错关闭TCP连接为了防止服务器与客户端双方资源占用和消耗,当双方没有请求或者响应传递 时,任意一方都可以发起关闭请求,与创立TCP连接的三次握手类似,关闭 TCP连接需要4次挥手简单比喻为:客户端:哥们,我这边没有数据要传了,咱们关闭连接吧服务端:好的,我看看我这边还有数据不服务端:兄弟,我这边也没数据要传给你了,咱们可以关闭连接了客户端:好嘲浏览器解析HTML浏览器布局渲染设计模式设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验 的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。单例模

5、式 当需要保证对象只有一个实例的时候,单例模式是非常有用的。他把创立对象 的控制权交给一个单一的点上,任何时候应用程序都只会存在且仅存在一个实 例。单例类不应该能在类的外部进行实例化。一个单例类应该具备以下几个因素:必须拥有一个访问级别为private的构造函数,用于阻止类被随意实例化.必须拥有一个保存类的实例的静态变量.必须拥有一个访问这个实例的公共静态方法,该方法通常被命名为 getlnstance()必须拥有一个私有的空的clone方法,防止实例被克隆复制简单实例:class Single(public static $_instance;private function _constr

6、uct()private function _clone()public static function getlnstance()if (!self:$_instance) self:$_instance = new self ();return self:$_instance;)public function sayHi()echo Hi n;)$single = Single:getlnstance();$single-sayHi();工厂模式工厂模式解决的是如何不通过new建立实例对象的方法工厂模式是一种类,它具有为你创立对象的某些方法,你可以使用工厂类创立对象而不使用new。这 样,

7、如果你想要更改所创立的对象类型只需要更改工厂即可,使用该工厂的所有代码会自动更改。工厂模式往往配合接口一起使用,这样应用程序就不必要知道这些被实例化的类的具体细节,只要知道工厂返回的是支持某个接口的类就可以方便的使用To简单举例:/*抽象出一个人的接口Interface Person/interface Personpublic function showinfo();)/*一个继承于抽象人接口的学生类Class Student*/class Student implements Person (public function showinfo()(echo 这是一个学生n;)/*一个继承于抽

8、象人接口的老师类* Class Teacher*/class Teacher implements Person (public function showinfo()echo 这是一个老师n;)/*人类工厂Class PersonFactory/class PersonFactory(public static function factory($person_type)(/将传入的类型首字母大写$class_name = ucfirst(Spersontype);if(class_exists($class_name)return new $class_name;else throw ne

9、w Exception(类:$class_name 不存在1);)/需要一个学生Sstudent = PersonFactory:factorystudent,);echo $student-showlnfo();/需要一个老师的时候Steacher = PersonFactory:factoryteacher,);echo $teacher-showlnfo();缓存相关Redis 和 Memcached 的区别Redis和Memcache都是将数据存放在内存中,都是内存数据 库。但是Memcache还可以缓存其他东西,比方图片、视频Redis不只支持简单的k/v类型的数据,同时还提供lis

10、t、set、 hash等数据结构的存储虚拟内存,当物理内存用完时Redis可以将一些很久没有用到的 value交换到磁盘过期策略,memcache在set时就指定,例如setkeyl008即永不 过期,redis可以通过expire设定,例如 :expire name10分布式,设定memcache集群,利用magent做一主多从; redis也可以做一主多从。存储平安,memcache挂掉后,数据没了 ; redis可以定期保存在灾难恢复,memcache挂掉后数据不可恢复;redis数据丧失后可 以通过aof恢复redis支持数据的备份,即master-slave模式的数据备份应用场景不同

11、:redis除了可以做nosql数据库之外,还能做消息 队列、数据堆栈和数据缓存等。memcache适合于缓存sql语 句、数据集、用户临时性数据、延迟查询数据和session等redis有哪些数据结构String字符串类型是redis最基础的数据结构,首先键是字符串类型,而且其他几种 结构都是在字符串类型基础上构建的。字符串类型实际上可以是字符串、数字、二进制(图片、音频),单最大不能 超过512M。使用场景:1缓存字符串最经典的使用场景,redis作为缓存层,mysql作为存储层,绝大局部 请求数据都是redis中获取,由于redis具有支撑高并发特性,所以缓存通常 能起到加速读写和降低后

12、端压力的作用。.计数器许多应用都会使用redis作为技术的基础工具,它可以实现快速技术、查询缓 存的功能。.共享 session处于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器,用 户刷新一次访问可讷讷个会需要重新登录,为了防止这个问题可以使用redis 将用户session集中管理,在这种模式下只要保证redis的高可用和扩展性, 每次获取用户更新或查询登录信息都直接从redis中集中获取。.限速 出于平安考虑,每次进行登录时让用户输入手机验证码,为了短信接口不被频 繁访问,会限制用户每分钟获取验证码的频率。Hash在redis中哈希类型是指键本身又是一种键值对结构,如 va

13、lue=fieldl, valuel) fieldn, valuen)使用场景:哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便 捷。list列表类型是用来存储多个有序的字符串,列表的每个字符串成为一个元素,一 个列表最多可以存储2的32次方减1个元素。在redis中,可以对列表插入 (push)和弹出(pop ),还可以获取指定范围的元素列表。列表是一种比拟灵 活的数据结构,它可以充当栈和队列的角色。使用场景:L消息队列if (Slength = 1) return $arr;/定义基准元素$base = $arr0;/定义两个空数组,用于存放和基准元素的比拟后的结果$le

14、ft = 口;$right =;/遍历数组for ($i=l; $i $base) $right = $arr$i;else $left = $arr$i;)/然后递归分别处理left和right$left = quicksort($left);$right 二 quicksort($right);/合并return array_merge$base, $right);redis的Ipush+brpop命令组合就可以实现阻塞队列,生产者客户端是用Ipush 从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的抢列表尾部 的元素,多个客户端保证了消费的负载均衡的高可用性。2.使用技巧列

15、表lpush+lpop=Stack (栈)lpush+rpop=Queue (队列)lpush+1 trim=Capped Collection(有限集合)lpush+brpop=Message Queue (消息队列)setsortedsetredis是单线程的么,为什么?因为CPU并不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带 宽。既然单线程容易实现,而且CPU不会成为瓶颈,那么久顺理成章的采用了 单线程的方案。当然单个Redis进程是没方法使用多核的,但是它来就不是非常计算密集型的 服务。如果单核性能不够用,可以多开几个进程。redis的部署方式,主从、集群参考文章

16、:redis的哨兵模式参考文章:redis的持久化策略RDB (快照持久化)A0F (只追加文件持久化)参考文章:PHP基础.双引号单引号区别双引号解释变量,单引号不解释变量双引号里插入单引号,其中单引号里如果有变量的话,变量解释双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字 符,或者用讲变量括起来,否那么会将变量名后面的局部当做一个 整体,引起语法错误能使单引号字符尽量使用单引号,单引号的效率比双引号要高.GET和POST提交方式的区别 GET产生一个TCP数据包;POST产生两个TCP数据包;对于GET方式的请求,浏览器会把 header和 data 一并发送出去,服务器响应2

17、00 (返回数据)对于POST,浏览器先发送header,服务器响应100 continue ,浏览器再发送data,服务器响应200 ok (返回数据)。GET在浏览器回退时是无害的,而POST会再次提交请求GET请求会被浏览器主动cache ,而POST不会,除非手动设置GET请求参数会被完整保存在浏览器历史记录里,而POST中的 参数不会被保存GET请求只能进行url编码,而POST支持多种编码方式GET比POST更不平安,因为参数直接暴露在URL上,所以不能 用来传递敏感信息3.如何获取客户端的真实ip$_SERVER,REM0TE_ADDR或 getenvC REM0TE_ADDR)

18、可以使用 ip210ng ()转成 数字。nclude 和 require 的区别require是无条件包含,也就是如果一个流程里加入require ,无论条件成立与 否都会先执行require ,当文件不存在或者无法翻开的时候,会提示错误,并且会终止程序执行。include有返回值,而require没有(可能因为如此require的速度比include 快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执 行下去。注意:包含文件不存在或者语法错误的时候require是致命的,而include不 是。.AJAX的优势是什么ajax是异步传输技术,可以通过javascript实

19、现,也可以通过JQuery框架实 现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。.在程序的开发中,如何提高程序的运行效率优化SQL语句,查询语句中尽量不使用select * ,用哪个字段查 哪个字段;少用子查询可用表连接代替;少用模糊查询;数据表中创立索引;对程序中经常用到的数据生成缓存;7.SESSI0N 与 COOKIE 的区别存储位置:session存储在服务器,cookie存储在浏览器 平安性:session平安性高于cookie参考链接:8.isset和empty的区别isset()函数一般用来检测变量是否设置假设变量不存在那么返回FALSE假设变量存在且其值为NULL,也

20、返回FALSE假设变量存在且值不为NULL,那么返回TUREe m pty ()函数是检查变量是否为空假设变量不存在那么返回TRUE假设变量存在且其值为:0、0、NULL、FALSE, array。、var $var;以及没有任何属性的对象,那么返回TURE假设变量存在且值不为二0、0、NULL、FALSE, array。、var $var;以及没有任何属性的对象,那么返回FALSE.数据库三范式第一范式:1NF是对属性的原子性约束,要求属性具有原子性, 不可再分解;第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识, 即实体的惟一性;第三范式:3NF是对字段冗余性的约束,即任何字段不能

21、由其他字段派生出来,它要求字段没有冗余。.主键、外键和索引的区别定义主键-唯一标识一条记录,不能有重复的,不允许为空外键一表的外键是另一表的主键,外键可以有重复的,可以是空值索引-该字段没有重复值,但可以有一个空值作用主键一用来保证数据完整性外键一用来和其他表建立联系用的.索引一是提高查询排序的速度个数主键一主键只能有一个外键一一个表可以有多个外键索引一一个表可以有多个唯一索引1L堆和栈的区别栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的 定义。堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分 配的堆内存的大小。PHP包理器Composer与自动加载规

22、范composer 学习地址:composer.json中的自动加载映射目前PSR-0自动加载、PSR-4自动加载、classmap生成和files引入都是被支持的,PSR-4是首推的方法,因为它提供了更大的易用性。PSR-4PSR-4规范了如何指定文件路径从而自动加载类,同时规范了自动加载文件的 位置。乍一看这是和PSR-0重复了,实际上,在功能上确实有一局部重复。区 别在于,PSR-4的规范比拟干净,去除了兼容PHP5.3以前版本的内容。PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用 下划线是没有特殊含义的,而在PSR-0的规那么中,下划线或被转化为目录分

23、隔 符。在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类 如FooBarBaz时,命名空间Foo指向一个名为src/的目录意味着自动加载器 将查找名为src/Bar/Baz. php文件并引用它。命名空间的前缀必须以 结尾,以防止类似前缀之间的冲突。在安装和更新期 间,PSR-4引用全部组合到一个key=value数组中,该数组可以在生成的文 件 vendor/composer/autoload_psr4. php 中找到。例子:“autoload”: psr-4: App:App/ /命名空间App映射到目录Appclassmapclassmap引用的所有组合,都会在安装

24、、更新的过程中生成并存储至vendor/composer/autoload_classmap. php 文件中。你可以使用classmap生成支持自定义加载的不遵循PSR-4规范的类库,要配置它指向的目录,以便能够准确的搜索到类文件例子:(“autoload”: “classmap”: src/,“Something. phpFiles 如果你想要明确指定,在每次请求时都要载入某些文件,那么你可以使 用files字段加载。通常作为函数库的载入方式。例子:(“autoload”: “files”: /zsrc/MyLibrary/functionsz,PHP框架Laravel 相关前端相关Jav

25、aScriptVueJS VueJs双向数据绑定原理。LinuxCors跨域CORS的基本原理是通过设置 请求和返回中header,告知浏览器该请求 是合法的。这涉及到服务器端和浏览器端双方的设置:请求的发起( Request Header)和服务器对请求正确的响应( response header)。冒泡排序思路:法如其名,就像冒泡一样,每次从数组中冒出一个最大的数。比方:2,4 , 1第一次冒出4:2, 1,4第二次冒出2 : 1 , 2,4function bubbleSort($arr)/获取数组长度$length = count($arr);/第一层循环控制冒泡轮次for ($i=0

26、; $i $length-l; $i+) /内层循环控制从第0个键值和后一个键值比拟,每次冒出一个最大的数for ($k=0; $k $arr$k+l) $tmp = $arr$k+l;$arr$k+l = $arr$k;$arr$k = $tmp;return $arr;选择排序思路:每次选择一个相应的元素,然后将其放到指定的位置function selectSort ($arr) /实现思路/双重循环完成,外层控制轮数,当前的最小值,内层控制比拟次数/获取长度$length = count($arr);for ($i=0; $i $length - 1; $i+) /假设最小值的位置$P

27、= $i;/使用假设的最小值和其他值比拟,找到当前的最小值for ($j=$i+l; $j $arr$j) $P = $j; /比假设的值更小/通过内部for循环找到了当前最小值的key,并保存在$p中/判断日光当前$p中的键和假设的最小值的键不一致增将其互换if ($p != $i) $tmp = $arr$p;$arr$p = $arr$i;$arr$i= $tmp;)/返回最终结果return $arr;计算机网络TCP/UDP 区别TCPTCP是一种面向连接的、可靠的、基于字节流的传输层通信协议TCP面向连接,提供可靠地数据服务TCP首部开销20字节TCP逻辑通信信道是全双工的可靠信道

28、TCP连接只能是点到点的UDPUDP是参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠的信息传递服务UDP无连接,不可靠UDP首部开销8字节UDP逻辑通信信道是不可靠信道UDP没有拥塞机制,因此网络出现拥堵不会使源主机的发送效率降低UDP支持一对一,多对一,多对多的交互通信三次握手,I次挥手,为什么是三次握手四次挥手在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接, 完成三次握手,客户端与服务器开始传送数据。简单点说:A与B建立TCP连接时,首先A向B发送SYN (同步请求),然 后B回复SYN+ACK (同步请求应答),最后A回复ACK确认,这样TCP的 一次连接(三次握手)就完成了。TCP三次握手所谓三次握手,是指简历一个TCP连接时需要客户端和服务器总共发送三个包三次握手的目的是连接服务器指定端口,简历TCP连接,并同步连接双方的序列号并交换TCP窗口大小信息。TCP三次握手图解:TCP三次握手 :他如蝮如加j而fegq&n.第一次握手 客户端发送一个TCP的SYN标志位置1的包,指明客户打算连接的服务器的 端口,以及初始化序号,保存在包头的序列号字段里。.第二次握手服务器发挥确认包应答,即SYN标志位和ACK标志均为1 ,同时将确认序号 设置为客户的ISN加1 ,即X+1。.第三次握手客户端再次发送确认包,SYN标识为0 ,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论