PHP宝典面试笔试题目

来自《PHP程序员面试笔试宝典》,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书。

PHP题目

【真题68】 (    )操作符在两个操作数中有一个(不是全部)为 True 时返回 True。

参考答案:逻辑异或(xor)运算符。

【真题61】 执行如下程序段:

<?php

echo 24%(-5);

?>

程序的输出结果是(    )。

A.5 B.4 C.-4 D.19

参考答案:B。

分析:在PHP中,取模运算符%的操作数在运算之前都会转换成整数(除去小数部分)。其运算结果和被除数的符号(正负号)相同。即$a%$b的结果和$a的符号相同。本题中,24%(-5)的符号为正,结果为4。所以,选项B正确。

【真题181】 写一个函数,算出两个文件的相对路径。例如,$a = \/a/b/c/d/e.php\;,$b =  \/a/b/12/ 34/c.php\;,计算出 $b 相对于 $a 的相对路径应该是 ../../c/d。

参考答案:示例代码如下:

function getRelativepath($a, $b) {

$returnpath = array(dirname($b));

$arrA = explode(' \/\ ', $a);

$arrB = explode(' \/\ ', $returnpath[0]);

for ($n = 1, $len = count($arrB); $n < $len; $n++) {

if ($arrA[$n] != $arrB[$n]) {

break;

}

}

if ($len - $n > 0) {

$returnpath = array_merge($returnpath, array_fill(1, $len - $n, "\..\ "));

}

$returnpath = array_merge($returnpath, array_slice($arrA, $n));

return implode(' \/\ ', $returnpath);

}

$a = "\/a/b/c/d/e.php\";

$b = "\/a/b/12/34/c.php\";

echo getRelativepath($a, $b);

【真题182】 以下关于PHP文件处理的说法中,正确的是(    )。

A.filegetcontents()函数能用来抓取网页数据,但是没办法设置超时时间

B.file()函数既能读取文本文件也能读取二进制文件,但是读取二进制文件有可能出现安全问题

C.如果表单中没有选择上传的文件,则 PHP 变量的值将为NULL

D.fsockopen()和fputs()结合起来可以发送邮件,也可以用来抓取网页内容、下载ftp文件等

参考答案:C。

分析:对于选项A,可以通过context参数设置超时时间。所以,选项A错误。

对于选项B,file()函数是可以安全用于读取二进制文件的。所以,选项B错误。

对于选项C,表单中没有文件上传时,PHP的$_FILES变量值为NULL。所以,选项C正确。

对于选项D,fputs()用于写入字符串到文件中,只能用于上传不能用于下载ftp文件。所以,选项D错误。

【真题215】 按要求写出SQL实现。

1)创建新闻发布系统,表名为message,有如下字段:

id 文章id

title 文章标题

content 文章内容

category_id 文章分类id

hits 点击量

参考答案:

CREATE TABLE 'message'(

'id' int(10) NOT NULL auto_increment,

'title' varchar(200) default NULL,

'content' text,

'category_id' int(10) NOT NULL,

'hits' int(20),

PRIMARY KEY('id');

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

2)同样上述新闻发布系统:表comment记录用户回复内容,字段如下:

comment_id 回复id

id 文章id,关联message表中的id

comment_content 回复内容

现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面。

文章id 文章 标题 点击量 回复 数量

用一个SQL语句完成上述查询,如果文章没有回复,则回复数量显示为0。

参考答案:

SELECT message.id id,message.title title,IF(message.'hits' IS NULL,0,message. 'hits') hits,

IF(comment. 'id' is NULL,0,count(*)) number FROM message LEFT JOIN

comment ON message.id=comment.id GROUP BY message. 'id';

上述内容管理系统,表category保存分类信息,字段如下:

category_id int(4) not null auto_increment;

category_name varchar(40) not null;

3)用户输入文章时,通过选择下拉菜单选定文章分类,写出如何实现这个下拉菜单。

参考答案:

function categoryList()

{

$result=mysql_query("select category_id,categroy_name from category")

or die("Invalid query: " . mysql_error());

print("<select name='category' value=''>/n");

while($rowArray=mysql_fetch_array($result))

{

print("<optionvalue='".$rowArray['category_id']."'>".$rowArray['categroy_name']."</ option>/n");

}

print("</select>");

}

【真题216】 使用PHP写一段简单查询,查出所有姓名为“张三”的内容并打印出来。

表名User

Name    Tel      Content      Date

张三 13333663366 大专毕业 2006-10-11

张三 13612312331 本科毕业 2006-10-15

张四 021-55665566 中专毕业 2006-10-15

参考答案:根据上面的题目完成代码:

$mysql_db=mysql_connect("local","root","pass");

@mysql_select_db("DB",$mysql_db);

$result = mysql_query("SELECT * FROM 'user' WHERE name='张三'");

while($rs = mysql_fetch_array($result)){

echo $rs["tel"].$rs["content"].$rs["date"];

}

【真题217】 考虑如下SQL语句,哪个选项能对返回记录的条数进行限制?(    )(双选)

SELECT * FROM MY_TABLE

A.如果可能,那么把查询转换成存储例程

B.如果程序允许,那么给查询指定返回记录的范围

C.如果可能,那么添加 where 条件

D.如果DBMS允许,那么把查询转换成视图

参考答案:B、C。

分析:有两个方法能限制返回记录的条数——使用 where 条件或limit关键字指定查询返回的记录的范围。

通常情况下,如果没有特殊需要,那么尽量不要用 select *,这会浪费大量的数据缓存。

【真题218】 执行以下 SQL 语句后将发生(    )。

BEGIN TRANSACTION

DELETE FROM MYTABLE WHERE ID=1

DELETE FROM OTHERTABLE

ROLLBACK TRANSACTION

A.OTHERTABLE 中的内容将被删除

B.OTHERTABLE 和 MYTABLE 中的内容都会被删除

C.OTHERTABLE 中的内容将被删除,MYTABLE 中 ID 是 1 的内容将被删除

D.数据库没有变化

参考答案:D。

分析:这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化。

Mysql题目

一、如何进行数据库优化?

数据库优化的过程可以使用以下的方法进行:

1)选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份、性别',最好设置为ENUM。

2)使用连接(JOIN)来代替子查询。

① 删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。

② 提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。

③ 提高b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo. customerid=orderinfo.customerid WHERE orderinfo.customerid IS NULL。

3)使用联合(UNION)来代替手动创建的临时表。创建临时表:SELECT name FROM 'nametest' UNION SELECT username FROM 'nametest2'。

4)事务处理。保证数据完整性,例如添加和修改。同时,如果两者成立,则都执行,一者失败都失败:

mysql_query("BEGIN");

mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";

mysql_query("SELECT * FROM 'orderinfo' where customerid=".$id");

mysql_query("COMMIT");

5)锁定表,优化事务处理。用一个SELECT语句取出初始数据,通过一些计算,用UPDATE语句将新值更新到表中。包含有WRITE关键字的LOCK TABLE语句可以保证在UNLOCK TABLES命令被执行之前,不会有其他的访问来对customerinfo表进行插入、更新或者删除的操作。

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");

6)使用外键,优化锁定表。把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。

二、选择正确的存储引擎?

在MySQL中有两个存储引擎:MyISAM和InnoDB,每个引擎都有利有弊。

MyISAM适合于一些需要大量查询的应用,但其对于有大量写操作的支持并不是很好。甚至只是需要update一个字段,整个表都会被锁起来,而其他进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。

InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁”,于是在写操作比较多的时候,会更优秀。并且,它还支持更多的高级应用,例如事务。

三、【真题231】 用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?

参考答案:检查PHP脚本的执行效率的方法如下:可以在检查的代码开头记录一个时间,然后在代码的结尾也记录一个时间,结尾时间减去开头时间取这个时间的差值,从而检查PHP的脚本执行效率,记录时间可以使用microtime()函数。

检查数据库SQL的效率的方法如下:可以通过explain显示MySQL如何使用索引来处理select语句及连接表,帮助选择更好的索引和写出更优化的查询语句。然后启用slow query log记录慢查询,通过查看SQL的执行时间和效率来定位分析脚本执行的问题和瓶颈所在。

四、 以下代码的运行结果为(    )。

<?php

mysql_connect('localhost','root',"");

$result = mysql_query("SELECT id,name FROM tb1");

while($row = mysql_fetch_array($result,MySQL_ASSOC)){

echo' ID:' .$row[0].' Name:' .$row[];

}

?>

A.报错    B.循环换行打印全部记录

C.无任何结果 D.只打印第一条记录

参考答案:A。

分析:因为代码中没有指明要操作的数据库名,所以会报错。

所以,本题的答案为A。

【真题222】 以下说法正确的是(    )。

A.使用索引能加快插入数据的速度

B.良好的索引策略有助于防止跨站攻击

C.应当根据数据库的实际应用合理设计索引

D.删除一条记录将导致整个表的索引被破坏

参考答案:C。

分析:索引的作用主要是帮助数据库快速查找到对应的数据,并不能加快插入数据的速度,所以,选项A错误。

索引不能够帮助防止跨站攻击,所以,选项B错误。

创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。索引是占用物理空间的,所以在实际的应用中是要合理设计使用索引的。所以,选项C正确。

索引是一种表结构,删除一条数据也不会影响到整个表的索引,并且索引不一定是数字,也可以是字符串。所以,选项D错误。

【真题223】 下列关于全文检索技术的说法中,不正确的是(    )。

A.Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL做全文搜索,它可以提供比数据库本身更专业的搜索功能

B.Solr是新一代的全文检索组件,它比Lucene的搜索效率高很多,还能支持HTTP的访问方式,PHP调用Solr也很方便

C.MySQL中把一个字段建立FULLTEXT索引,就可以实现全文检索,目前MyISAM和InnoDB的table都支持FULLTEXT索引

D.Lucene附带的二元分词分析器CJKAnalyzer切词速度很快,能满足一般的全文检索需要

参考答案:B。

分析:Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL、PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

Solr是一个独立的企业级搜索应用服务器,用户可以通过HTTP请求访问,它是采用JAVA5开发,基于Lucene的全文搜索服务器,同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。并且Solr比Lucene的搜索效率高很多,但是PHP调用Solr并不方便,选项B的说法错误。

MySQL中的MyISAM和InnoDB都是支持FULLTEXT全文索引的。全文搜索引擎可以在不使用模板匹配操作的情况下查找单词或短语。

购买链接:京东购买

题目来自《PHP程序员面试笔试宝典》,里面涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书。

更多PHP面试笔试真题可以浏览:www.shuaiqi100.com  

更多有趣有料的PHP面试笔试资料可以关注:“琉忆编程库”

或者浏览:www.shuaiqi100.com 获取。

PHP程序员面试笔试宝典下载:https://pan.baidu.com/s/1-ES2ZI3z5Lhv-zTKFmJDSQ

PHP宝典面试笔试题目的更多相关文章

  1. Android常见面试笔试题目

    Android常见面试笔试题目 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...

  2. 新书出版 |《Oracle程序员面试笔试宝典》

    新书出版 |<Oracle程序员面试笔试宝典> <Oracle程序员面试笔试宝典> 丛书[数据库 面试 笔试宝典]已在京东.淘宝和天猫预售,一共 5 本,目前市场上已有4本,丛 ...

  3. .Net工程师面试笔试宝典

    .Net工程师面试笔试宝典 传智播客.Net培训班内部资料 http://net.itcast.cn 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面 ...

  4. PHP面试笔试宝典

    PHP面试笔试宝典 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. PHP题目 一.单例模式是在应用程序中最多 ...

  5. 《PHP程序员面试笔试宝典》——如何准备集体面试?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 集体面试也被称为群面.无领导小组面试.由于计算机发展至今,软件 ...

  6. 《PHP程序员面试笔试宝典》——什么是职场暗语?

    本文摘自<PHP程序员面试笔试宝典> 文末有该书电子版下载. 随着求职大势的变迁发展,以往常规的面试套路因为过于单调.简明,已经被众多"面试达人"们挖掘出了各种&quo ...

  7. 《PHP程序员面试笔试宝典》——如果面试问题曾经遇见过,是否要告知面试官?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 面试中,大多数题目都不是凭空想象出来的,而是有章可循,只要求职者肯花时间,耐得住寂寞,复习得当,基本上在面试前都会见过相 ...

  8. 《PHP程序员面试笔试宝典》——如何回答系统设计题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 应届生在面试时,偶尔也会遇到一些系统设计题,而这些题目往往只是测试求职者的知识面,或者测试求职者对系统架构方面的了解,一 ...

  9. 《PHP程序员面试笔试宝典》——如何回答算法设计问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中的很多算法设计问题,都是历年来各家企业的"炒现饭",不管求职者以前对算法知识掌握得是否扎 ...

随机推荐

  1. postgresql使用pg_dump工具进行数据库迁移

    一.使用管理员身份打开cmd,切换到postgresqlp安装目录下的bin目录 必须要以管理员身份打开cmd,否则报拒绝访问 二.把生成的文件上传到服务器上,同样cd 到postgresql的安装b ...

  2. MySQL_事务(四大特性)

    本文转载:https://www.cnblogs.com/kismetv/p/10331633.html 事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段.本文将首 ...

  3. 《Go组件设计与实现》-netpoll的总结

    主要针对字节跳动的netpoll网络库进行总结.netpoll网络库相比于go本身的net标准库更适合高并发场景. 基础知识 netpoll与go.net库一样使用epoll这种IO多路复用机制处理网 ...

  4. 【刷题-LeetCode】306. Additive Number

    Additive Number Additive number is a string whose digits can form additive sequence. A valid additiv ...

  5. manjora20安装搜狗输入法

    先安装好fcitx和yay yay -S fcitx-sogoupinyin sudo pacman -S base-devel 这是因为需要使用外网,需要配置代理. 注意 manjora20输入法一 ...

  6. mate10碎屏机当成小电脑使用尝试

    1.屏碎了修起来300-400,自己动手至少也要260以上买个屏幕钱. 手机图案锁屏也不知道密码,给我手机的亲戚忘了.当年手机被车压弯了. 对着恢复教程,盲屏幕猜着按还原了. 2.之后一路从8代系统更 ...

  7. 面试突击17:HashMap除了死循环还有什么问题?

    面试合集:https://gitee.com/mydb/interview 本篇的这个问题是一个开放性问题,HashMap 除了死循环之外,还有其他什么问题?总体来说 HashMap 的所有" ...

  8. 44.Prim算法

    public static void main(String[] args) { //测试看看图是否创建ok char[] data = new char[]{'A','B','C','D','E', ...

  9. 函数的参数python教程

    一:函数 什么是函数? 函数就类似于工具 提前定义之后可以反复使用 代码冗余 结构清晰 修改繁杂等问题 二:函数的语法结构 def 函数名(参数1,参数2) '''函数注释''' 函数体代码 retu ...

  10. HashMap相关

    final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] ta ...