PHP面试题

1,PHP SPL(PHP标准库)

SPL是用于解决典型问题(standard problems)的一组接口与类的集合。
目前在使用中,SPL更多地被看作是一种使object(对象)模仿array(数组)行为的interfaces和classes。
spl数据结构:双向链表,堆栈,队列。
spl常用的迭代器:
SPL函数的使用:使用spl_autoload_register装载类, __autoload装载类,自定义__autoload函数装载类

2,file_get_contents():将整个文件读入一个字符串.
3,array_diff():比较两个数组的键值,并返回差集
4,apache 和 nginx 区别:

nginx 相对 apache 的优点:轻量级,同样起web 服务,比apache 占用更少的内存及资源抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速啊。
apache 相对nginx 的优点:
rewrite ,比nginx 的rewrite 强大模块超多,基本想到的都可以找到少bug ,nginx 的bug 相对较多超稳定。

最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。


5,PHP 有多线程么?--没有。但是可以通过其他方式实现,函数popen()打开进程, pclose($file)关闭。


6,怎样理解 PHP 对于静态页面文件,是放在 ngnix 端,还是 Server 端?

ngnix 处理静态页面性能比 apache 要快三倍以上,所以直接放在 ngnix


PHP 魔术方法有哪些,作用是什么
__construct()
构造函数是目前为止最经常使用的函数。在创建对象时,可以在构造函数中做 一些初始化工作。可以为构造函数定义任意多个参数,只要在实例化时传入对应个数的参数 即可。构造函数中出现的任何异常都会阻止对象的创建。

__desctruct()
析构函数通常在对象被销毁时调用,析构函数不接收任何参数。经常在析构函数 中执行一些清理工作,比如关闭数据库连接等。

__get()
在我们尝试访问一个不存在的属性时会被调用。它接收一个参数,该参数表 示访问属性的名字,并且将该属性的值返回。

__set()
魔术方法在我们尝试修改一个不可访问的属性时会被调用,它接收两个参数,一个表 示属性的名字,一个表示属性的值。

__isset()
魔术方法在对一个不可访问的属性调用 isset()方法时会被调用,它接收一个参数, 表示属性的名字。它应该返回一个布尔值,用来表示该属性是否存在。

__unset()
魔术方法在调用 unset()函数销毁一个不能访问的属性时会被调用,它接收一个参数, 表述属性的名字。

__toString()
在我们将对象当作字符串一样使用时会被调用,它不接收任何参数。该方法允许 我们定义对象的表现形式。

__clone()
魔术方法__clone()可以解决上面的问题。当对一个对象使用 clone 关键字时,该魔 术方法会被调用。

__sleep()
魔术方法__sleep()在对一个对象序列化时(调用 serialize())会被调用。它不 接收任何参数,而且应该返回一个包含所有应该被序列化的属性的数组。在该魔 术方法中,也可以执行一些其他操作。 有一点要注意的是,不要再该函数中进行任何的析构操作,因为这可能会影响正 在运行的对象。

__wakeup()
魔术方法__wakeup()在对存储的对象反序列化时会被调用。它不接收任何参数,也没有任何 返回值。可以用它来处理在序列化时丢失的数据库连接或资源。

__call()
魔术方法__call()在调用不存在或不可访问的方法时会被调用。它接收两个参数,一个是调用 的方法的名字,一个是包含函数参数的数组。我们可以使用这种方法调用子对象中得同名函 数。

callStatic()
静态访问的时候会访问它

魔术方法__call()在调用不存在或不可访问的方法时会被调用。它接收两个参数,一个是调用 的方法的名字,一个是包含函数参数的数组。我们可以使用这种方法调用子对象中得同名函 数。


用过哪些数组函数?
array_values($arr); 获得数组的值

array_keys($arr); 获得数组的键名

array_flip($arr);//数组中的值与键名互换(如果有重复前面的会被后面的覆盖)

array_search('PHP',$arr); //检索给定的值,加 true 则是严格类型检查

array_reverse($arr); //将数组中的元素翻转(前后顺序)

in_array("apple",$arr); //在数组中检索apple

array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中

array_count_values($arr); // 统计数组中所有值出现的次数

array_unique($arr); 移除数组中重复的值


说一下快速排序的最好和最坏时间复杂度 (nlogn n 的平方) 。
快速排序是对冒泡排序的优化说以最好时间复杂度为 nlogn,最坏为 n 的平方 。
简述快速排序的原理 面试前最好先熟悉一下常用算法和数据结构,另外不可忽略了时间复 杂度。

二分查找的原理和时间复杂度? (logn) 时间复杂度第一次回答错了。


数据库中的索引有哪些,数据库引擎区别(MyIsam 和 InnoDB)

  1. InnoDB 不支持 FULL TEXT(全文索引) 类型的索引。

  2. InnoDB 中不保存表的具体行数,也就是说,执行 select count() from table 时,InnoDB 要扫􏰁一遍整个
    表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count(
    )语句包含
    where 条件时,两种表的操作是一样的。

  3. 对于 AUTO_INCREMENT 类型的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中,可以和其他字段一起建立联合索引。InnoDB表自增id 清空表后id数会继续接着往下自增,mysql重启之后会归1,而MyISAM却不会。

  4. DELETE FROM table 时,InnoDB 不会重新建立表,而是一行一行的删除。

  5. LOAD TABLE FROM MASTER 操作对 InnoDB 是不起作用的,解决方法是首先把 InnoDB 表改成 MyISAM
    表,导入数据后再改成 InnoDB 表,但是对于使用的额外的 InnoDB 特性(例如外键)的表不适用。


队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间


时序攻击
在 php 中比较字符串相等时如果使用双等 == 可能会有时序攻击的危险.
比如比较

"abscdd" == $request->code

那么两个字符串是从第一位开始逐一进行比较的,发现不同就立即返回 false,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就可以按位破解。

而使用 hash_equals 比较两个字符串,无论字符串是否相等,函数的时间消耗是恒定的,这样可以有效的防止时序攻击。

hash_equals('abscdd',$request->code)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 1.strlen()与mb_strlen()的作用分别是什么? strlen()和mb_strlen()都是作用于...
    落魄PHP女程序员阅读 345评论 0 2
  • 防止SQL注入简单回答:防止——利用即有的应用、功能,将(恶意)SQL命令发送到到后台数据库引擎。 防止SQL注入...
    幼稚园靓仔阅读 1,322评论 1 13
  • 什么是静态变量?如果一个函数内定义的变量前使用关键字static来声明,那么该变量就是静态变量。一般函数内的变量在...
    叫我峰兄阅读 765评论 0 1
  • 整理者/武汉大学此生我愿守护你 记录网上买过的书(读遍中外文学名著) 投稿作品:关于我追梦武汉大学的故事 稿费:8...
    浅水涅槃2阅读 4,407评论 28 55
  • 1.停止一切计划!就仅仅只看java 我的心太浮躁了。 java-------->sevlet---------...
    雷一凡阅读 122评论 0 0