这是我整理的一套面试题,老铁们看看就当复习了哦
感受如今发面试题有些冷门,就跟昨天德国那场似的,不过看看当提早复习了。提早备战。这2个月出门面试的童鞋可注意不要中暑哦。php
保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库链接 - 相似DB类
针对一组算法,将每个算法封装到具备共同接口的独立的类中,例如进入我的主页时,根据浏览者的不一样,给予不一样的显示与操做 - 相似不一样用户呈现不一样效果
提供了在程序中有条理的存放并管理一组全局对象 (object) - 相似服务提供者的注入
将不一样接口适配成统一的API接口,例如数据操做有mysql、mysqli、pdo等,可利用适配器模式统一接口mysql
一个对象经过添加一个方法使自己变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。例如实现实现消息推送 - 将全部类的实例化注册到一个数组,经过循环批量执行类面试
不修改原类代码和继承的状况下动态扩展类的功能,例如框架的每一个Controller文件会提供before和after方法 - 在某个方法或输出以前执行或以后执行,用于修饰redis
提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类 - yield算法
指做为一个单元的一组有序的数据库操做,若是组中的全部操做都成功,则认为事务成功,即便有一个操做失败。事务也不成功,若是全部操做完成,事务提交,其修改将做用于全部其余数据库进程,若是有一个操做失败,则事务回滚,该事务影响到的操做都会取消。sql
按值传递:函数内对值的内容改变对函数外部无影响
引用传递:函数内对值的内容改变在函数外部也会作出相应修改数据库
合理设置主键及索引编程
后期演变的数据表优化设计模式
- 垂直拆分:表数据拆分到不一样表中,按照业务拆分 - 水平拆分:行数据拆分到不一样表中,按照时间、类型、身份等因素拆分表 - 水平垂直联合拆分
9.索引创建原则api
- 最左前缀匹配原则 - 索引列尽可能不参与计算 - 尽可能扩展索引不要新建索引
SRP 单一功能原则 (你能够这样干,并非说你应该这样干)
- 引发类变化的因素永远不要多余一个,保证类的有且只有一个责任
OCP 开闭原则 (开胸手术时不须要穿一件外套)
- 对扩展开放,对修改闭合
LSP 里氏替换原则
- 当一个子类的实例应该可以替换任何其父类的实例时,它们之间才具备IS-A关系
ISP 接口隔离原则
- 不要强迫客户端(泛指调用者)去依赖那些他们不使用的接口
DIP 依赖反转原则
生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大下降。
CGI 是通用网关接口,用户WEB服务器和应用程序间的交互,定义输入输出规范,用户的请求经过WEB服务器转发给FastCGI进程,FastCGI进程再调用应用程式进行处理,如PHP解析器,应用程序的处理结果如HTML返回给FastCGI,FastCGI返回给Nginx进行输出,假设WEB服务器是NGINX,应用程序是PHP,而 php-fpm 是管理FastCGI的,这就是php-fpm,fastCGI与NGINX的关系.
FastCGI 用来提升cgi程序性能,启动一个master,再启动多个worker,不须要每次解析php.ini 而php-fpm实现了fastcgi协议,是fastcgi的进程管理器,支持平滑重启能够启动的时候预先生成多个进程。
CSRF,跨站请求伪造,攻击方假装用户身份发送请求从而窃取信息或者破坏系统。
防范
XSS,跨站脚本攻击。
防范
function search($arr,$k){ $n = count($arr); $arr[$n]= $k; for($i=0; $i<$n; $i++){ if($arr[$i]==$k){ break; } } if ($i<$n){ return $i; }else{ return -1; } }
function binaryRecursive($arr,$low,$top,$target){ if($low<=$top){ $mid = floor(($low+$top)/2); if($arr[$mid]==$target){ return $arr[$mid]; }elseif($arr[$mid]<$target){ return binaryRecursive($arr,$mid+1,$top,$target); }else{ return binaryRecursive($arr,$low,$top-1,$target); } }else{ return -1; } }
function _sort($arr) { $count = count ($arr) - 1; $temp = 0; for ($i = 0; $i < $count; $i++) { for ($j = 0; $j < $count - $i; $j++) { if ($arr[$j] < $arr[$j + 1]) { $temp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $temp; } } } return $arr; }
function quick_sort($arr) { //判断参数是不是一个数组 if(!is_array($arr)) { return false; }else{ //递归出口:数组长度为1,直接返回数组 $length = count($arr); if($length<=1) return $arr; //数组元素有多个,则定义两个空数组 $left = $right = array(); //使用for循环进行遍历,把第一个元素当作比较的对象 for($i=1; $i<$length; $i++) { //判断当前元素的大小 if($arr[$i]<$arr[0]){ $left[]=$arr[$i]; }else{ $right[]=$arr[$i]; } } //递归调用 $left=quick_sort($left); $right=quick_sort($right); //将全部的结果合并 return array_merge($left,array($arr[0]),$right); } }
服务提供者是全部Laravel应用程序引导启动的中心,Laravel的核心服务器、注册服务、绑定服务、监听器、中间件、路由注册以及咱们应用程序都是由服务提供者引导启动的。
IOC就是控制反转,也被叫作依赖注入(DI),对象A能够依赖对象B,可是控制权在对象A中,因此叫作控制反转,依赖注入则是在IOC容器运行时动态将某种依赖关系注入到对象中。
做用:解决代码难易度,实现低耦合、高扩展
提供了一个"static"(静态)接口去访问注册到 IoC 容器中的类。提供了简单、易记的语法,而无需记住必须手动注入或配置的长长的类名。此外,因为对 PHP 动态方法的独特用法,也使测试起来很是容易。
Contract(契约)是 Laravel 定义框架提供的核心服务的接口。Contract 和 Facades 并无本质意义上的区别,其做用就是使接口低耦合、更简单。
经过使用RPC通讯协议,实现多语言开发场景下无感知的互相调用。
优势
三次握手就是客户端与服务器端创建TCP链接时须要发送3个包进行链接的确认,在三次握手完成后便可创建链接。
除了TCP以外,咱们还常听到的是UDP,那么他俩有啥区别呢?
TCP对应的是可靠性要求高的应用,从上面的解释能够看出来,在真正通讯以前要三次握手,是面向链接的;而且TCP利用序列号保证消息的有序性。
而UDP对应的则是可靠性要求低,可是流量大、速度快的应用;和TCP相比,UDP是无链接的而且多是无序的。
TCP更重量,UDP更轻量,没有高低之分,只是应用的场景不一样。
非技术问题没有正确答案