php面试问题总结

一、数据库优化策略。

首先从硬件,系统配置,数据库表结构,sql及索引这四个方面考虑优化。

正常来说,硬件和系统配置先撇开不谈。

1、对于数据库表来说,要合理选择适当的字段属性。

①数字类型的字段:不到万不得已不要使用double,这不仅是存储长度的问题更是存储精度的问题。同时固定精度的小数,不建议使用decimal。

②字符类型:尽量避免使用text数据类型,定长字段建议使用char,不定长字段使用varchar,且设定适当的最大长度。

③时间类型:尽量使用timestamp类型,它的存储空间只有datetime类型的一半。对于只需要精确到某一天的数据类型建议使用date类型。

④尽可能将字段使用not null。

2、对于sql语句来说,要书写高效的sql语句,在对sql语句进行分析的时候,可以利用explain看查询计划。

①尽量避免使用select *  ,因为查询数量加大的时候,性能的影响不在数据查找,而在I/0操作。

②利用limit 1来取得唯一行

③避免使用 like,exist,in等标准表达式,它们会引起索引无效,而引起全表扫描。

④尽量减少使用负逻辑操作符和函数,它们会导致全表扫描。而且容易出错,可以把含有not 、<>、!=等负逻辑条件表达式转化为意思相当的正逻辑。

⑤尽量利用join来代替子查询

⑥使用union来代替手动创建临时表

⑦必要的时候可以使用事物。

3、对于索引而言,要合理使用索引。

①在经常用作过滤器或者查询频率较高的字段上创建索引。也就是说,索引不要创建在select查询的字段上,而是要放在where条件字段上。

②在sql语句中经常进行group by ,和order by 的字段上创建索引。

③不必要在不同值较少的字段上创建索引,例如性别字段。

④尽量避免对于经常存取的列创建索引。

⑤用于连接的列(主键/外键)创建索引。

⑥在经常存取的多个列上建立复合索引,但要注意复合索引建立的顺序要按照使用的频度来确定。

⑦删除冗余的,不用的索引。

4、选择合理的存储引擎

5、最后,打开慢查询,及时发现需要优化的sql,在表中删除数据之后,要及时地释放空间,例如optimize table  这个操作。

6、合理使用存储过程和视图,适当使用表分割,表分区。

二、larvel或者yii容器的控制反转。

三、冒泡排序,快速排序

1、冒泡排序

•  将序列中所有元素两两比较,将最大的放在最后面。

•  将剩余序列中所有元素两两比较,将最大的放在最后面。

•  重复第二步,直到只剩下一个数。

/**

* 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上   而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。

* 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。*/

public bubbleSort($a) {

$temp = 0;

for ($i = 0; $i < count($a) - 1; $i++) {

for ($j = 0; j < count($a) - 1 - i; j++) {

if ($a[$j] > $a[$j + 1]) {

$temp = $a[$j];

$a[$j] = $a[$j + 1];

$a[$j + 1] = $temp;

}

}

}

}

2、快速排序(时间最快)

•  选择第一个数为p,小于p的数放在左边,大于p的数放在右边。

•  递归的将p左边和右边的数都按照第一步进行,直到不能递归。

/**

* 基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,

* 此时基准元素在其 排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

*/

public  quick($a2) {

if (count($a2) > 0) { // 查看数组是否为空

$this->_quickSort($a2, 0, count($a2) - 1);

}

}

public _quickSort($list, $low, $high) {

if ($low < $high) {

$middle = $this->getMiddle($list, $low, $high); // 将list 数组进行一分

$this->_quickSort($list, $low, $middle - 1); // 对低字表进行递归排序

$this->_quickSort($list, $middle + 1, $high); // 对高字表进行递归排序

}

}

public getMiddle($list, $low, $high) {

$tmp = $list[$low]; // 数组的第一个作为中轴

while ($low < $high) {

while ($low < $high && $list[$high] >= $tmp) {

$high--;

}

$list[$low] = $list[$high]; // 比中轴小的记录移到低端

while ($low < $high && $list[$low] <= $tmp) {

$low++;

}

$list[$high] = $list[$low]; // 比中轴大的记录移到高端

}

$list[$low] = $tmp; // 中轴记录到尾

return $low; // 返回中轴的位置

}

四、索引类型,存储引擎的区别。

五、php string和array相关的方法。

六、使用redis有哪些好处 与memcached比有哪些优势

1、速度快,因为数据存在内存中

2、redis支持丰富的数据类型,支持string,lists ,sets,sorted set ,hashes

3、支持事物,操作都是原子性的。

4、丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将自动删除。

优势:

1、memcached所有的值均是简单的字符串,key-value型的,而redis支持的数据更多。

2、redis的速度比memcached快很多。

3、redis可以持久化数据。

4、redis单个value最大限制是1GB,而memcached只能保存1mb的数据。

七、一致性哈希算法

八、mysql中,myisam与innodb的区别

1、innodb支持事务,myisam不支持;

2、inndb支持行级锁,myisam支持表级锁;

3、innodb支持mvcc(多版本并发机制),myisam不支持;

4、innodb支持外键,myisam不支持;

5、innodb不支持全文索引,myisam支持;

九、innodb日志与事务的实现方式

事务日志包括:重做日志redo和回滚日志undo

Redo记录的是已经全部完成的事务,就是执行了commit的事务,记录文件是ib_logfile0 ib_logfile1

Undo记录的是已部分完成并且写入硬盘的未完成的事务,默认情况下回滚日志是记录下表空间中的(共享表空间或者独享表空间)一般情况下,mysql在崩溃之后,重启服务,innodb通过回滚日志undo将所有已完成并写入磁盘的未完成事务进行rollback,然后redo中的事务全部重新执行一遍即可恢复数据,但是随着redo的量增加,每次从redo的第一条开始恢复就会浪费长的时间,所以引入了checkpoint机制

Dirty page:脏页 什么意思呢?

一般业务运行过程中,当业务需要对某张的某行数据进行修改的时候,innodb会先将该数据从磁盘读取到缓存中去,然后在缓存中对这条数据进行修改,这样缓存中的数据就和磁盘的数据不一致了,这个时候缓存中的数据就称为dirty page,只有当脏页统一刷新到磁盘中才会是clean page

Checkpoint:如果在某个时间点,脏页的数据被刷新到了磁盘,系统就把这个刷新的时间点记录到redo log的结尾位置,在进行恢复数据的时候,checkpoint时间点之前的数据就不需要进行恢复了,可以缩短时间

十、mysql数据库如何防注入(数据安全策略)

1、使用预编译、和绑定变量;

采用预编译后,sql引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入什么,都不会影响sql的语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行。

2、使用mysql存储过程、

3、利用正则和php addcslashes(),addslashes()函数。

十一、explain 出来的各种item的意义

select-type:表示查询中每个select子句的类型。

type:表示mysql在表中找到所需航的方式

possible-key:指出mysql能适用哪个索引在表中能找到行,查询涉及到的字段   上若存在索引,则改索引将被列出,但不一定被查询使用

key:先是mysql在查询中实际使用的索引,若没有使用索引,则显示为null

key-len:表示索引中使用的字节数,可通过该列计算查询中使用的索引长度

ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

extra:包含不适合在其他列中显示但十分重要的额外信息

十二:php新特性

1、标量类型声明;

2、返回值类型声明;

3、null合并运算符(??);

4、太空船操作符(组合比较符);

5、通过define()定义常量数组;

6、新增了匿名类

7、unicode codepoint 转译语法;

8、Closure::call()

9、为unserialize()提供过滤

10、IntlChar

11、预期

12、use 加强

13、Generator 加强

14、整除,新增了整除函数 intdiv(),使用实例


十三 给定一个字符串输出字符串的所有排列,例如给定 abc 需要输出 abc acb bac bca cab cba 。

十四 求一个矩阵中的最大二维子矩阵(元素和最大)并说出时间复杂度

十五  sql语句的复习

1、SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsINNER JOIN OrdersON Persons.Id_P = Orders.Id_PORDER BY Persons.LastName

2、SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons, Orders

WHERE Persons.Id_P = Orders.Id_P

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

推荐阅读更多精彩内容