高级PHP面试基础汇总

原创
10/18 23:30
阅读数 21

WEB 开发中数据提交方式有几种?有什么区别?百度使用哪种方式?   百度使用的 get 方式,因为可以从它的 URL 中看出

GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT(比较全的方式,使用RESETful API 设计比较注重方式); 

最常用的是Get 与 post 两种方式区别:     

  1. url 可见性:get 方式 url 参数可见,post 不可见
  2. 可缓存性:get 方式是可以缓存的,post 方式不可以缓存。
  3. 传输数据大小:get 一般传输数据大小不超过 2k-4k(根据浏览器不同,限制不一 样,但相差不大);post 请求传输数据的大小根据 php.ini 配置文件设定,也可以无限大。
  4. 数据传输上:get 方式通过 url 地址栏拼接参数进行传输,post 方式通过 body 体进行传输。

建议:

  1. get 式安全性较 Post 式要差些;包含机密信息建议用 Post 数据提交式;
  2. 做数据查询建议用 Get 式;
  3. 做数据添加、修改或删除建议用 Post 方式;

Socket ,WebSocket ,Ajax之间的关系与区别

    1. Socket 是 TCP/IP 协议中 传输层与应用层的传输数据用的编程接口。
    2. WebSocket是HTML5一种新的协议,实现了浏览器与服务器全双工通信。其本质是先通过HTTP/HTTPS协议进行握手后创建一个用于交换数据的TCP连接,服务端与客户端通过此TCP连接进行实时通信的方法。
    3. Ajax是异步传输技术,可以通过 javascript 实现,也可以通过 JQuery 框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。
    4. WebSocket 与 Ajax
    • websocket建立的是长连接,在一个会话中一直保持连接,前后端双向请求的实时数据推送
    • Ajax是短连接,数据发送和接受完成后就会断开连接,客户端发起请求的非实时数据交互,只能轮询请求服务器
    •  WebSocket 是HTML5一种新协议。实现了 客户端与服务器双向通信。适用场景:社交订阅,协同编辑,点击数据,实时更新实况,多媒体聊天。在线教育,实时推送。

现在编程中经常采取 MVC 三层结构,请问 MVC 分别指哪三层,有什么优点?  

  1. MVC 三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数 据映射到视图层进行显示。
  2. 优点是:  1)可以实现代码的重用性,避免产生代码冗余;  2)M和V 实现代码分离,从而使同一个程序可以使用不同的表现形式

对 json 数据格式的理解?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json 数据格式固定, 可以被多种语言用作数据的传递。
PHP 中处理 json 格式的函数为 json_decode( string $json [, bool $assoc ] ) ,接 受一个 JSON 格式的字符串并且把它转换为 PHP 变量,参数 json 待解码的 json string 格式的字符串。assoc 当该参数为 TRUE 时,将返回 array 而非 object;   json_encode: 将 PHP 变量转换成 json 格式。

print、echo、print_r有什么区别

  1. echo 和 print 都可以做输出,不同的是,echo 不是函数,没有返回值,而 print 是一个函数有返回值,所以相对而言如果只是输出 echo 会更快,而 print_r 通常用于 打印变量的相关信息,通常在调试中使用。
  2. print 是打印字符串
  3. print_r 则是打印复合类型 如数组、对象

SESSION 与 COOKIE 的区别

  1. 存储位置:session 存储于服务器,cookie 存储于浏览器
  2. 安全性:session 安全性比 cookie 高
  3. session 为‘会话服务’,在使用时需要开启服务,cookie 不需要开启,可以直接用,cookie相当于session的钥匙,一般存储的都是session_id

PHP 处理数组的常用函数?(重点看函数的‘参数’和‘返回值’)

  1. array() 创建数组  implode(),数组转字符串
  2. in_array() 判断元素是否在数组中  array_key_exists(),key 是否存在
  3. count() 返回数组中元素的数目
  4. array_merge() 将多个数组合并成一个数组 ,  array_combine() 已第一个参数作为key重新组合一个索引数组
  5. array_diff() 比较两个或两个以上数组的差异
  6. array_intersect() 获取两个或两个数组以上的交集
  7. array_keys() 获取数组的 key 列表  array_column() 获取指定列的数据
  8. array_values() 获取数组的值列表
  9. array_unique() 删除数组中的重复值
  10. array_push()将一个或多个元素插入数组的末尾(入栈)
  11. array_pop() 弹出并返回 array 数组的最后一个单元(出栈)
  12. array_walk(),array_map(),array_filter()  使用用户自定义函数对数组中的每个元素做回调处理
  13. asort() 对数组进行排序并保持索引关系; arsort()  对数组进行逆向排序并保持索引关系
  14. ksort()  对数组按照键名排序 ;  krsort()  对数组按照键名逆向排序

PHP 处理字符串的常用函数 (重点看函数的‘参数’和‘返回值’)

  1. trim(string $str [, string $character_mask ]) 移除字符串两侧的空白字符和其他字符;  ltrim()移除左侧   rtrim() 移除右侧  ,第二个参数是想移除的字符
  2. strlen() 获取字符串的长度    mb_strlen() 获取字符串长度(可指定字符编码,对中文字符串计算长度)
  3. substr()返回字符串的一部分
  4. str_replace() 子字符串替换
  5. str_repeat () 重复一个字符串
  6. is_string() 检测变量是否是字符串   对应is_numberic()  检查是否是数值类型
  7. str_shuffle () 随机打乱一个字符串
  8. sprintf() 返回根据格式化字符串生成的字符串(通常用于获取分表后的数据表 名)
  9. strstr() 查找字符串的首次出现的位置开始到结尾的字符串  stristr() 忽略大小写,同strstr() ,  strpos() 查找字符串首次出现的位置 ,没有返回false
  10. explode(‘,’,$str)使用一个字符串分割另一个字符串 返回array

什么是事务?及其特性?

事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。  特性:   简单来说,事务内的操作,要么全部成功,要么全部失败。

  1. 原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。 
  2. 一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
  3. 隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其 他事务,
  4. 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有 了其他故障,事务的处理结果也会得到保存。

如何通俗地理解三个范式

  1. 第一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解;
  2. 第二范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
  3. 第三范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

  1.  确认服务器是否能支撑当前访问量。
  2. 优化数据库访问。
  3. 禁止外部访问链接(盗链), 比如图片盗链。
  4. 控制文件下载。
  5. 做负载均衡,使用不同主机分流。
  6. 使用浏览统计软件,了解访问量,有针对性的进行优化。

面向对象的特征有哪些   主要有 封装, 继承, 多态。如果是 4 个方面则加上:抽象

  1. 封装: 封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的高内聚,低耦合,防止程序相互依赖性而带来的变动影响.
  2. 继承: 在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经 存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法 使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这 是类之间的一种关系,提高了软件的可重用性和可扩展性。
  3. 多态: 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
  4. 抽象: 抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑 这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同 之处,那就是抽象。

抽象类和接口的概念以及区别

抽象类:它是一种特殊的,不能被实例化的类,只能作为其他类的父类使用。使用 abstract 关键字声明。

接口:它是一种特殊的抽象类,也是一个特殊的类,使用 interface 声明。 区别:

  1. 抽象类的操作通过继承关键字 extends 实现,而接口的使用是通过 implements 关 键字来实现。
  2. 抽象类中有数据成员,可以实现数据的封装,但是接口没有数据成员。
  3. 抽象类中可以有构造方法,但是接口没有构造方法。
  4. 抽象类的方法可以通过 private、protected、public 关键字修饰(抽象方法不能是 private),而接口中的方法只能使用 public 关键字修饰。
  5. 一个类只能继承于一个抽象类,而一个类可以同时实现多个接口。  (PHP实现多继承  接口和trait)
  6. 抽象类中可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码。

常用的魔术方法有哪些

php 规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好 不用__开头,除非是为了重载已有的魔术方法。

  1. __construct() 实例化类时自动调用。 __destruct() 类对象使用结束时自动调用。
  2. __set() 在给未定义的属性赋值的时候调用。 __get() 调用未定义的属性时候调用。
  3. __isset() 使用 isset()或 empty()函数时候会调用。 __unset() 使用 unset()时候会调用。
  4. __sleep() 使用 serialize 序列化时候调用。 __wakeup() 使用 unserialize 反序列化的时候调用。
  5. __call() 调用一个不存在的方法的时候调用。 __callStatic()调用一个不存在的静态方法是调用。
  6. __toString() 把对象转换成字符串的时候会调用。比如 echo。
  7. __invoke() 当尝试把对象当方法调用时调用。
  8. __set_state() 当使用 var_export()函数时候调用。接受一个数组参数。
  9. __clone() 当使用 clone 复制一个对象时候调用。

__autoload()方法的工作原理 

  1. 使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。
  2. 当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动 执行__autoload()函数。
  3. 这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下 确实存在这个类文件后 就执行 include 或者 require 来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。
  4. 使用自动载入的魔术函数可以不必要写很多个 include 或者 require 函数。  
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部