UNION招聘:PHP程序员面试笔试真题解析(一)
优采云 发布时间: 2021-05-19 05:10UNION招聘:PHP程序员面试笔试真题解析(一)
以下内容部分来自“ PHP程序员面试笔试题集”和“ PHP程序员面试笔试题分析”。如需转载,请注明出处。
[真问题1]执行以下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。
分析:此查询是一个事务,并且在该事务结束时会有一个回滚,并且数据库不会更改。
[真实问题2]如何优化数据库?
数据库优化过程可以使用以下方法:
1)选择最适用的字段属性,尽可能减少所定义字段的长度,并尝试将字段设置为NOT NULL,例如“省,性别”,最好进行设置到ENUM。
2)使用JOIN而不是子查询。
①删除没有任何订单的客户:从customerinfo中删除,不在其中的customerid(从orderinfo中选择customerid)。
②检索所有未下订单的客户:
SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。
③改进b的速度优化:从customerinfo中选择LEFT JOIN orderid customerinfo。 customerid = orderinfo.customerid,而orderinfo.customerid为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表中的记录时,订单也将被删除。
表中用户的所有记录。请注意,使用外键时,必须将数据库引擎定义为INNODB。
[正确的问题3]如何选择正确的存储引擎?
MySQL中有两个存储引擎:MyISAM和InnoDB。每个引擎都有优点和缺点。
MyISAM适用于某些需要大量查询的应用程序,但是它对大量写操作的支持不是很好。即使只需要更新一个字段,整个表也会被锁定,而其他过程,甚至是读取过程也无法操作,直到读取操作完成。此外,MyISAM对于诸如SELECT COUNT(*)之类的计算非常快。
InnoDB的趋势将是一个非常复杂的存储引擎。对于某些小型应用程序,它将比MyISAM慢。但是它支持“行锁定”,因此在进行更多写入操作时会更好。而且,它还支持更高级的应用程序,例如交易。
[真问题4]如何检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库查询时间),以及如何查找和分析脚本执行和数据库查询的瓶颈?
参考答案:检查PHP脚本执行效率的方法如下:您可以在要检查的代码的开头记录一个时间,然后在代码的末尾记录一个时间,即结束时间减去开始时间减去该时间的差值,因此,要检查PHP脚本执行的效率,可以使用microtime()函数记录时间。
检查数据库SQL效率的方法如下:您可以使用explain显示MySQL如何使用索引来处理选择语句和联接表以帮助选择更好的索引并编写更多优化的查询语句。然后启用慢速查询日志以记录慢速查询,并通过查看SQL的执行时间和效率来查找分析脚本执行过程中的问题和瓶颈。
我编写了“什么是三级数据库锁定协议?”的文章文章,请注意官方帐户:“六一编程库”,回复:“锁定”,我将其发送给您。 [正确的问题5]以下哪个说法是对的()。
A。使用索引可以加快插入数据的速度
B。良好的索引策略有助于防止跨站点攻击
C。索引应根据数据库的实际应用合理设计
D。删除记录将导致整个表的索引被破坏
参考答案:C。
分析:索引的主要功能是帮助数据库快速找到相应的数据,但是它不能加快数据的插入。因此,选项A是错误的。
索引不能帮助阻止跨站点攻击,因此选项B是错误的。
创建合理的索引需要分析数据库的实际使用并确定其弱点。在脚本中优化冗余查询还可以提高数据库效率。索引占用物理空间,因此在实际应用中,有必要合理设计和使用索引。因此,选项C是正确的。
索引是一个表结构,删除一条数据不会影响整个表的索引,并且索引不一定是数字,它也可以是字符串。因此,选项D是错误的。
[真问题6]在以下有关全文检索技术的陈述中,错误的是()。
A。 Sphinx是基于SQL的全文本搜索引擎,可以与MySQL结合使用以进行全文本搜索。它可以提供比数据库本身更专业的搜索功能
B。 Solr是新一代的全文本搜索组件。它的搜索效率比Lucene高得多。它还支持HTTP访问。从PHP调用Solr也非常方便。
C。在MySQL中的字段上创建FULLTEXT索引以实现全文检索。当前,MyISAM和InnoDB表都支持FULLTEXT索引
D。 Lucene附带的二进制分词分析器CJKAnalyzer具有快速的分词速度,可以满足一般的全文搜索需求
参考答案:B。
分析:Sphinx是基于SQL的全文本搜索引擎,可以与MySQL和PostgreSQL结合使用以进行全文本搜索。它可以提供比数据库本身更多的专业搜索功能,从而使应用程序更容易实现专业的全文本搜索。
Solr是一个独立的企业级搜索应用程序服务器,用户可以通过HTTP请求进行访问,它是由JAVA5在Lucene全文搜索服务器的基础上开发的,同时它已被扩展以提供比Lucene该语言是可配置的,可扩展的且针对查询性能进行了优化,并提供了完整的功能管理界面。这是一个出色的全文搜索引擎。 Solr的效率比Lucene的搜索效率高得多,但是PHP调用Solr并不方便。选项B是错误的。
MySQL中的MyISAM和InnoDB都支持FULLTEXT全文索引。全文搜索引擎无需模板匹配即可查找单词或短语。
[真问题7]考虑以下SQL语句,哪个选项可以限制返回的记录数? ()(双重选择)
SELECT * FROM MY_TABLE
A。如果可能,将查询转换为存储的例程
B。如果程序允许,则为查询指定返回记录的范围
C。如果可能的话,在条件处添加
D。如果DBMS允许,则将查询转换为视图
参考答案:B,C。
分析:有两种方法可以限制返回的记录数-使用where条件或limit关键字指定查询返回的记录范围。
在通常情况下,如果没有特殊需要,请尽量不要使用select *,这样会浪费大量数据缓存。
以上内容摘自《 PHP程序员面试笔试题集》和《 PHP程序员面试笔试题分析》。目前,该书没有电子版。您可以从主要的电子商务平台购买纸质版本。