程序员找工做必备PHP基础面试题 - 第十九天

“PHP学习网” 公众号会天天分享一些面试题,正在找工做的小伙伴们能够来看看哦。

1、须要设置一个有效期为31天,的memcache值,请补充下面的代码

<?php
$memcache_obj=new memcache
$memcache_obj->connect(‘memcache_host,11211’);
$memcache_obj->set(‘varKey’,’varValue’,0,____);
?>

答案:31243600php

2、请对于据select * from tableExample where ((a and b) and c or (((a and b ) and (c and d)))优化的语句。

答案:select * from tableExample where (a and b and c) or  (a and b and c and d);

3、_____函数能返回脚本里的任意行中调用的函数的名称。该函数同时还常常被用在调试中,用来判断错误是如何发生的。

答案:debug_backtrace()mysql

4、如今请你设计一个留言板系统,请简要的写出你设计的其中分页算法的思路.

答案:
1.能够经过count(*)来获得记录总条数面试

2.将总条数除以每页显示条数取整获得分页数redis

3.点击下一页的连接进行传值,将传值拼装成where条件算法

4.显示相应数据sql

或者数据库

一个简单的数据库的增删改查的留言版,分页的设计思路,便是每次进行查询所发送的参数不一样,从数据库中获得不一样数据,在sql语句中用limit动态设置偏移量。偏移量能够经过判断和叠加的方式而改变。而总页数能够是,返回的总行数除以每页显示的条数以后取整。
若是是一个文件写入的留言版,则能够将取出的内容拆分红数组,让后设置偏移量取出不一样的元素。数组

5、数据库中的事务是什么?

答:事务(transaction)是做为一个单元的一组有序的数据库操做。若是组中的全部操做都成功,则认为事务成功,即便只有一个操做失败,事务也不成功。若是全部操做完成,
事务则提交,其修改将做用于全部其余数据库进程。若是一个操做失败,则事务将回滚,该事务全部操做的影响都将取消。安全

6、优化MYSQL数据库的方法。

答:
一、选取最适用的字段属性,尽量减小定义字段长度,尽可能把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM函数

二、使用链接(JOIN)来代替子查询:

a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
b.提取全部没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
c.提升b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid WHERE orderinfo.customerid IS NULL

三、使用联合(UNION)来代替手动建立的临时表

a.建立临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`

四、事务处理:

a.保证数据完整性,例如添加和修改同时,二者成立则都执行,一者失败都失败

mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
mysql_query("COMMIT");

五、锁定表,优化事务处理:

a.咱们用一个 SELECT 语句取出初始数据,经过一些计算,用 UPDATE 语句将新值更新到表中。

包含有 WRITE 关键字的 LOCK TABLE 语句能够保证在 UNLOCK TABLES 命令被执行以前,不会有其它的访问来对 inventory 进行插入、更新或者删除的操做
mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);
mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id);
mysql_query("UNLOCK TABLES");

六、使用外键,优化锁定表

a.把customerinfo里的customerid映射到orderinfo里的customerid,任何一条没有合法的customerid的记录不会写到orderinfo里

CREATE TABLE customerinfo
(
  customerid INT NOT NULL,
  PRIMARY KEY(customerid)
)TYPE = INNODB;
CREATE TABLE orderinfo
(
  orderid INT NOT NULL,
  customerid INT NOT NULL,
  PRIMARY KEY(customerid,orderid),
  FOREIGN KEY (customerid) REFERENCES customerinfo
  (customerid) ON DELETE CASCADE
)TYPE = INNODB;

注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order表中的该用户的全部记录,注意使用外键要定义事务安全类型为INNODB;

七、创建索引:

a.格式:(普通索引)

建立:CREATE INDEX <索引名> ON tablename (索引字段)

修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)

创表指定索引:CREATE TABLE tablename([...],INDEX索引名)

(惟一索引)

建立:CREATE UNIQUE <索引名> ON tablename (索引字段)

修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)

创表指定索引:CREATE TABLE tablename([...],UNIQUE索引名)

(主键)
它是惟一索引,通常在建立表是创建,格式为:

CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])

八、优化查询语句

a.最好在相同字段进行比较操做,在创建好的索引字段上尽可能减小函数操做

例子1:

SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
SELECT * FROM order WHERE orderDate<"2008-01-01";(快)

例子2:

SELECT * FROM order WHERE addtime/7<24;(慢)
SELECT * FROM order WHERE addtime<24*7;(快)

例子3:

SELECT * FROM order WHERE title like "%good%";
SELECT * FROM order WHERE title>="good" and name<"good";

选取最适用的字段属性 尽可能减小字段的长度 设置为not null

使用join代替子查询

使用union代替手动建立临时表

使用并优化事物处理

使用外键

使用索引

优化查询语句

最后各位能够扫下方二维码关注我公众号,目前我正在更新基础面试题,以后会更新中高级、redis、liunx面试题

weixin.jpg

相关文章
相关标签/搜索