PHP架构师面试题目和答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、MySQL相关知识
1、请列举mysql优化方式
选取最适用的字段属性、事务、锁定表、使用外键、使用索引、优化的查询语句
使用连接(JOIN)来代替子查询(Sub-Queries)
使用联合(UNION)来代替手动创建的临时表
2、请列举分库分表的常用方法
有一个1000多万条记录的用户表members,查询起来非常之慢
for($i=0;$i< 100; $i++ ){
//echo "CREATE TABLE db2.members{$i} LIKE db1.members
";
echo "INSERT INTO members{$i} SELECT * FROM members WHERE
mid%100={$i}
";
}
?>
3、 Mysql+如何做双机热备和负载均衡
1.主服务器授权
2.数据复制
3.配置主服务器
4.重启master
5.配置slave
6.重启slave
7.查看master的状态与设置的是否一致
8.查看slave
4、数据表类型有哪些
MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等
MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。
5、防sql注入的方法?
mysql_escape_string(strip_tags($arr["$val"]));
6、mysql把一个大表拆分多个表后,如何解决跨表查询效率问题
[php]view plain copy
1./**
2.* 函数名称:post_check()
3.* 函数作用:对提交的编辑内容进行处理
4.* 参数:$post: 要提交的内容
5.* 返回值:$post: 返回过滤后的内容
6.*/
7.function post_check($post){
8.if(!get_magic_quotes_gpc()){// 判断magic_quotes_gpc是否为打
开
9.$post = addslashes($post);// 进行magic_quotes_gpc没有打开的
情况对提交数据的过滤
10.}
11.$post = str_replace("_","\_", $post);// 把'_'过滤掉
12.$post = str_replace("%","\%", $post);// 把'%'过滤掉
13.$post = nl2br($post);// 回车转换
14.$post = htmlspecialchars($post);// html标记转换
15.return $post;
16.}
7、索引应用
7.1什么情况下考虑索引
7.2什么情况不适合索引
7.3一个语句是否用到索引如何判断
8、mysql对于大表(千万级),要怎么优化
第一优化你的sql和索引;第二加缓存,memcached,redis;
第三以上都做了后,还是慢,就做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护;
第四如果以上都做了还是慢,不要想着去做切分,mysql自带分区表,先试试这个,对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还有一些坑,在这里就不多说了;
第五如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;
第六才是水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;
mysql数据库一般都是按照这个步骤去演化的,成本也是由低到高;
9、如何理解mysql的慢查询
其实通过慢查询日志来分析是一种比较简单的方式,如果不想看日志,可以借助工具来完成,
如mysqldumpslow, mysqlsla, myprofi, mysql-explain-slow-log, mysqllogfilter等,感觉自己来分析一个需要丰富的经验,一个浪费时间。
10、关于用户登录状态存session,cookie还是数据库或者memcache的优劣
11、事务应用极端情况处理
12、sql语言分4大类请列举
DDL--CREATE,DROP,ALTER
DML--INSERT,UPDATE,DELETE
DQL-SELECT
DCL--GRANT,REVOKE,COMMIT,ROLLBACK
二、php基础
•session的跨域共享是什么,如何实现
•php连接mysql数据库的几种方式及区别
mysql:面向过程
mysqli:面向对象
pdo:可移植性高
三、php高级
•长连接和短连接的使用,区别是什么
•socket的使用,简述过程
•支付安全问题,如何保证
•面向对象的概念
•三大特性:封装、继承、多态(方法重写)。
抽象类:abstract,至少有一个方法是抽象方法,不能被实例化,为子类定义公共接口。
接口:interface,解决php的单继承问题,所有方法都是public访问权限的抽象方法,不能声明变量只能声明常量。
继承一个类的同时实现多个接口
class A extends B implements 接口1,接口2...,接口n(){
//实现所有接口中的方法
}
•lamp 和 lnmp 网站架构性能差异的原因分析
•解释性语言和编译性语言的性能分析,请举例