2019年PHP面试题以及解答方方式

1.什么是composer?以及composer是干什么用的?工作原理

 Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.
	 composer是一个多功能的工具,下载管理第三方包是其主要功能了,composer这个工具就是用php这个语言写的。
	其主要的下载第三方包的功能	
	composer install命令从当前目录读取 composer.json 文件,处理了依赖关系,并把其安装到 vendor 目录下
	composer update为了获取依赖的最新版本,并且升级 composer.lock 文件

2.PHP如何实现静态化

有一种方式是改写訪问地址,能够通过URL的PATHINFO模式来改动它。让它看上去更像一个静态页面。从而有更大的几率被搜索引擎抓取和收录,仅是对搜索引擎比較友好,伪静态化
	第二种就是站点能够在用户訪问站点之前就通过一定的程序来进行静态化。生成静态页面。当用户去訪问该页面的时候。因为訪问的是静态页面,因此,訪问速度会比訪问动态页面的速度快了非常多倍,前台的表现是页面载入速度变快,在后台的表现是降低了数据库的连接。降低了数据库的压力,唯一的缺点就是相对占的硬盘多一些,硬盘相对便宜的多。

3.你了解设计模式吗?说下你最常用的设计模式

单例模式:
	单例模式是一种常用的软件设计模式。
	在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
	应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
工厂模式:
	工厂模式主要是为创建对象提供了接口。
	应用场景如下:
	a、 在编码时不能预见需要创建哪种类的实例。
	b、 系统不应依赖于产品类实例如何被创建、组合和表达的细节
观察者模式:
	观察者模式又被称作发布/订阅模式,定义了对象间一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。	
迭代器模式。
	迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示	
适配器模式
	把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。	

4.观察者模式是如何实现的?工厂模式是如何实现的?适配器模式是如何实现的?……

单例模式:
		单例模式是一种常用的软件设计模式。
		在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。
		应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
	工厂模式:
		工厂模式主要是为创建对象提供了接口。
		应用场景如下:
		a、 在编码时不能预见需要创建哪种类的实例。
		b、 系统不应依赖于产品类实例如何被创建、组合和表达的细节
	适配器模式
		把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

5.PHP的优化方案

	PHP语言级的性能优化,指的是PHP语法基本功能,这部分优化比较简单易					见、快速可行,比较快速看到效果。少写PHP的代码,多用PHP自身能力解决问题。
	多使用PHP内置的变量、常量、函数。我们用PHP代码实现的功能和使用PHP内置的函数实现的同样功能差别是有的。:PHP内置函数的性能优劣。PHP内置函数之间依然存在快慢差别;少用PHP魔术方法;合理使用内存。
	还有数据库的一些优化,索引啊,主键啊,合理运用,字段长度 和类型使用方法 

6.说下你了解的session和cookie

   cookie不是很安全 ,cookie可以进行cookie欺骗,别人可以获取cookie中session id考虑到安全应当使用session。
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器,性能方面,应当使用COOKIE。
     Session用于存放后台的用户信息跟cookie进行会话机制,用于系统登录业务逻辑
        作用?
        cookie的作用是解决HTTP协议中缺少无状态缺陷的问题
        由于cookie是在客户端,并不安全,另外如果浏览器禁用了cookie也会导致会话记录失败.
        而session存储在服务器,是相对安全的.由服务端很方便控制存储到各种介质中.
        php的php.ini配置文件里可以设置session的路径和回收空置率的.
    
    cookie用于存放前台临时内容,比如sessionid,购物车业务中的商品信息,使用容易被窃取。
    Session变量和cookies是同一类型的。如果某用户将浏览器设置为不兼容任何cookie,那么该用户	就无法使用这个Session变量!
当一个用户访问某页面时,每个Session变量的运行环境便自动生成,这些Session变量可在用户离开该页面后仍保留20分钟!

7.如何实现不基于session和cookie的用户认证

将用户信息加密放到http 的header部分,每次拿到http的时候,,验证获取header的信息

8.说下你目前框架所用到的核心概念
laravel thinkphp yii 什么的,讲框架的亮点
9.XSS攻击?如何防范

  Xss又称css,全称:跨站式脚本攻击,问题出现的原因:用户在输入内容时故意输入css或者js代码使网站在加载内容时运行恶意程序造成网站无法正常运行或者恶意盗取信息

防止:1: 正则过滤特殊字符,比如< > =  ‘’
	  2去除html标签 strp_tags()
	  3 利用php函数特殊字符转义  htmlentities()   addslashes()

10.你了解RESTful API吗?说说干什么用的。

 所以RESTful API就是REST风格的API。 那么在什么场景下使用RESTful API呢?在当今的互联网应用的前端展示媒介很丰富。有手机、有平板电脑还有PC以及其他的展示媒介。那么这些前端接收到的用户请求统一由一个后台来处理并返回给不同的前端肯定是最科学和最经济的方式,RESTful API就是一套协议来规范多种形式的前端和同一个后台的交互方式。



     RESTful API由后台也就是SERVER来提供前端来调用。前端调用API向后台发起HTTP请求,后台响应请求将处理结果反馈给前端。也就是说RESTful 是典型的基于HTTP的协议。那么RESTful API有哪些设计原则和规范呢?

     1,资源。首先是弄清楚资源的概念。资源就是网络上的一个实体,一段文本,一张图片或者一首歌曲。资源总是要通过一种载体来反应它的内容。文本可以用TXT,也可以用HTML或者XML、图片可以用JPG格式或者PNG格式,JSON是现在最常用的资源表现形式。

     2,统一接口。RESTful风格的数据元操CRUD(create,read,update,delete)分别对应HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口。

     3,URI。可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。一般的,每个资源至少有一个URI与之对应,最典型的URI就是URL。

     4,无状态。所谓无状态即所有的资源都可以URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而变化。有状态和无状态的区别,举个例子说明一下,例如要查询员工工资的步骤为第一步:登录系统。第二步:进入查询工资的页面。第三步:搜索该员工。第四步:点击姓名查看工资。这样的操作流程就是有状态的,查询工资的每一个步骤都依赖于前一个步骤,只要前置操作不成功,后续操作就无法执行。如果输入一个URL就可以得到指定员工的工资,则这种情况就是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个URL与之对应可以通过HTTP中的GET方法得到资源,这就是典型的RESTful风格。

不想总结了,剩下的 你们来自己找!!!!!!!!!程序员有脾气
12 数据库方面
你知道nosql吗?你用的nosql都有哪些?
mysql索引优化
mysql的优化方案
mysql的事务
mysql的读写分离
消息队列如何实现
查询优化
msyql的存储引擎,以及各自的区别
redis和memcache有什么区别
索引有哪些,你是如何做索引的?
如何分表
13. 服务器方面
说下一些你常用的linux命令
Linux如何搭建LAMP环境
你们平常工作的系统环境是在哪里?
你了解Docker吗?
你说下常用的服务端口号
14.前端知识
说下都有哪些跨域。
事件冒泡
DOM事件流
JS是如何实现继承的

15.如何防止高并发
你们用哪种版本控制?如何避免代码冲突
在浏览中输入网址后都发生了什么
你了解socket吗?
如果打开网页的时候白屏10秒才显示出页面,如果进行排查。
其它,必问知识
16.说下你在项目中碰到的问题
你是如何解决的问题的
你未来的规划是什么?
你为什么离职
你觉得你的领导会如何评价你
说下你做得你公司最不错的项目,都用了哪些技术,对你带来了哪些成长
说下TCP的三次握手,为什么三次,两次不行吗?为什么挥手又是四次
这些并不是说都需要会,都要知道,只是你需要了解这些。工作中不一定会用到,但是需要你在提某项技术的时候你知道有这项技术。

笔试的时候基本都是些PHP,mysql,linx等的基础,所以基础还是需要看的,比如考察一些函数的用法。HTTP的一些状态码,一些sql语句,一些排序算法。

面试一般会看你的简历来问,所以说对于虚假的东西一问就露馅,所以不要过多的美化简历。面试的时候一般会针对你简历上的某项技术,一直深入问下去,直到问到你答不出,然后转到另外一项技术上面。

一般面试的技术都是以后你要跟着他干的人员,所以多站在对方的场景下想问题,对方肯定是希望有个能帮他分担工作压力的人。

回答不要一问一答,最好能说出你自己的理解,以及它的优缺点。

一些技术方面的问题,要回答那些实用看的见的效果,比如composer可以解决自动加载类,不用你写过多的new,比回答,composer是一个依赖管理工具,composer会帮你安装这些依赖的库文件,要强的多,当然也可以说,以前都是复制粘贴一些代码到自己项目里,然后把代码改为自己需要的,现在使用composer我可以直接引用别人的代码而不需要过多的更改。

技术不需要你全部会,(你也不可能全部会,别人就是要问到你答不出来为止,不然怎么压你工资),但是你要有自己的理解,这东西我没用过,但是我了解过一些,大概是什么什么玩意,它是个啥啥啥技术,大概是为了解决啥啥啥技术。

对于面试的是技术的,不会就不会,没用过就没用过,如果你乱扯,技术一听就能听出来你说的对不对,但是你可以说说你对这个理解,这样就不至于冷场了,蒙对了加分,蒙错了也代表你会思考这个东西,会去想。

猜你喜欢

转载自blog.csdn.net/weixin_43746366/article/details/88383286