Php 面试 100 题汇总 1,Http 和 Https 的区别
第一:http 是超文本传输协议,信息是明文传输,https 是具有安全性的 ssl 加密传输协议
第二:http 和 https 使用的是完全不同的连接方式,端口也不一样,前者 80 或者 443 第三:http 连接很简单,是无状态的。https 协议是由 ssl+http 协议构建的可进行加
密传输,身份认证的网络协议。
2.什么方法来加快页面的加载速度
1,用到服务器资源时在打开,不用时,立即关闭服务器资源。
2,数据库添加索引
3,页面可生成静态
4,图片等大文件单独放在一个服务器
5,能不查询数据库的尽量不去数据取数据,可以放在缓存中。
3.表单中 get 与 post 提交方法的区别?
答:get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息.
4.echo ,print,print_r 的区别:
echo 是 php 语句,无返回值。
print,print_r 是函数,有返回值。
print() 只能打印出简单类型变量的值(如 int,string) print_r() 可以打印出复杂类型变量的值(如数组,对象) echo 输出一个或者多个字符串
5.session 与 cookie 区别
session 与 cookie 相同:跨页面、不跨用户
session 与 cookie 不相同:
1、session 可以存储任意类型的数据,但 cookie 只能存储字符串
2、cookie 产生在服务器端、存储在客户端
session 产生在服务器端、存储在服务器端
6.魔术常量
答案:
__LINE__文件中的当前行号。
__FILE__文件的完整路径和文件名。
__FUNCTION__函数名称
__CLASS__类的名称
__METHOD__类的方法名
7.数据库中的事务是什么?
答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
8.1 优化 MYSQL 数据库的方法。
1、选择合适的字段的数据类型
1)能用数字不用字符串
2)char、varchar、text 能用 varchar 不用 char
3)给字段加 not null 避免在表中出现 NULL 关键字(default 值)
2、选择合适的字段充当主键
1)建议每张表必须有主键
2)用数字类型的字段充当主键
3、拆分表
1)拆分字段,将文章的标题与内容分开
2)拆分记录,将今年的记录与往年的记录分开
4、给字段合理添加索引
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[索引字段])
5、事务处理:
a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败 mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')"; mysql_query("SELECT * FROM `orderinfo` where customerid=".$id"); mysql_query("COMMIT");
6、锁定表,优化事务处理:
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");
7、使用外键,优化锁定表
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; 8、优化查询语句
a 用内连接代替子查询代替子查询,用 sphinx 代替 like 模糊查询
b最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作例子 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"; 9、缓存,静态化
10、选择合适存储引擎用 Innodb 增删改,用 myisam 查询
11、主从数据库
12、负载均衡
13、最好拿数字类型的字段充当 where 条件
14、最好拿相同类型的字段进行比对(避免发生数据类型的转换)
15、不要在具有索引的字段上添加数据库函数(索引失效)
8.2 请简述项目中优化 sql 语句执行效率的方法,从哪些方面,sql 语句性能如何分析?
答:(1)选择最有效率的表名顺序
(2)WHERE 子句中的连接顺序
(3)SELECT 子句中避免使用‘*’
(4)用 Where 子句替换 HAVING 子句
(5)通过内部函数提高 SQL 效率
(6)避免在索引列上使用计算。
(7)提高 GROUP BY 语句的效率, 可以通过将不需要的记录在 GROUP BY 之前过滤
掉。
9.对于大流量网站,采用什么方法解决访问量问题?
1,确认服务器的硬件是否足够支持当前的流量
2,优化数据库的访问
3,禁止外部的盗链
4,控制大文件的下载
5,使用不同主机分流主要流量
6,使用流量分析统计软件
10.一个函数,能够遍历一个文件夹下的所有文件和子文件夹(20 分)
[AppleScript] 纯文本查看 复制代码 function dir_recurse($dir) {
$i = 1;
if($handle = opendir($dir)) {
while(false !== ($file = readdir($handle))) {
if($file != "."&& $file != ".." ) {
if(is_dir($dir."/".$file) == true) {
$fullpath = $dir."/".$file;
dir_recurse($fullpath);
echo "$fullpath\n";
$i++;
}else {
$fullpath = $dir."/".$file;
echo "$fullpath\n";
$i++;
}
}
}
closedir($handle);
}
}
10.2 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
[AppleScript] 纯文本查看 复制代码 function my_scandir($dir){
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".."&& $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
11、能够使 HTML 和 PHP 分离开使用的模板(1 分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
12、使用哪些工具进行版本控制?(1 分)
答:cvs,svn,vss;
13、如何实现字符串翻转?(3 分)
英文:
strrev($a)
中文或其他文字:
中文:GB2312, 代码是使用 GB2312 编码
<?php
function reverse($str)
{
$ret = "";
len=mb s trwidth( len=mbstrwidth(len = mb_strwidth(str,"GB2312"); for(i=0; i=0;i=0; i< len; len;len; i++) {
arr[]=mb s ubstr( arr[]=mbsubstr(arr[] = mb_substr(str, $i, 1,
"GB2312");
}
return implode("", array_reverse($arr));
}
print_r(reverse("你好"));
14.PHP 的意思(送 1 分)
PHP 是一个基于服务端来创建动态网站的脚本语言,您可以用 PHP 和 HTML 生成网站主
页
15.MYSQL 取得当前时间的函数是?,格式化日期的函数是(2 分)
答:now(),date()
16.用 PHP 写出显示客户端 IP 与服务器 IP 的代码 1 分)
答: 打 印 客 户 端 IP:echo $_SERVER[ ‘ REMOTE_ADDR ’ ]; 或 者 : getenv('REMOTE_ADDR');
打印服务器 IP:echo gethostbyname("www.bolaiwu.com")
17、语句 include 和 require 的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
答:require->require 是无条件包含也就是如果一个流程里加入 require,无论条件成立
与否 都会先执行 require
include->include 有返回值,而 require 没有(可能因为如此 require 的速度比 include 快)
注意:包含文件不存在或者语法错误的时候 require 是致命的,include 不是
18.http 请求返回状态码
400请求无效
401未授权
403请求被禁止
404请求资源不存在
405请求资源被禁止
406无法接受
407要求代理身份验证
500 Internal Server Error 服务端源代码错误
600源站没有返回响应头部,只返回实现内容
19,linux 授权码:
600属主有读写权限
644属主有读写权限,属性组有读权限
700属主有读写执行权限
755属主有读写执行权限,属性组有读,执行权限
711属主有读写执行权限,属性组有执行权限
666所有用户都有文件的读写权限
777所有用户都有文件的读写执行权限
20.有一个网页地址, 比如 PHP 开发资源网主页: http://www.phpres.com/index.html, 如何得到它的内容?($1 分)
答:方法 1(对于 PHP5 及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb"); $contents = stream_get_contents($readcontents); fclose($readcontents);
echo $contents; 方法 2:
echo file_get_contents("http://www.phpres.com/index.html");
21.在 PHP 中 error_reporting 这个函数有什么作用? (1 分)
答:设置错误级别与错误信息回报
22.JS 表单弹出对话框函数是?获得输入焦点函数是? (2 分)答:弹出对话框: alert(),prompt(),confirm()
获得输入焦点 focus()
23.foo()和@foo()之间有什么区别?(1 分)
答:@foo()控制错误输出
24、mysql_fetch_row() 和 mysql_fetch_array 之间有什么区别? (1 分)答:mysql_fetch_row 是从结果集取出 1 行数组,作为枚举
mysql_fetch_array 是从结果集取出一行数组作为关联数组,或数字数组,两者兼得
25、GD 库是做什么用的? (1 分)
答:gd 库提供了一系列用来处理图片的 API,使用 GD 库可以处理图片,或者生成图片。在网站上 GD 库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
26.面向对象编程
有两个重要的概念:类和对象
类是具备某项功能的抽象模型,实际应用中,还需要对类进行实例化后使用。这样就引入了对象的概念。
对象是类进行实例化后的一个产物,是一个实体。
封装 :把客观的事物封装成一个抽象的类。
继承:子类继承父类,可以使用父类的属性和方法。可以实现接口,同时实现接口中的所有方法
多态:覆盖和重载 子类可以覆盖父类中的方法;一个类中可以同时拥有同一个函数名的方法,但是方法的参数不同,实现的结果也不同。
27.php 框架
熟悉 YII ,Thinkphp 还有 laravel ,symfony2,cakephp
28.mysql 存储引擎
ISAM: 查询速度快、增删改慢,支持全文索引、不支持外键、不支持事务
MyISAM: ISAM 升级版
Memory: 数据驻留在内存、速度快、数据管理不稳定、断电后数据全部丢失
InnoDB: 速度较慢、支持外键、支持事务、不支持全文索引
使用的存储引擎
MyISAM:内容管理系统(新闻、官网、电商、软件下载、房屋、招聘...) 可读不可改 大
部分是浏览信息
InnoDB:技术型网站(bbs、blog、webo、oa...)
29.数据库操作流程
[PHP] 纯文本查看 复制代码 $link = mysql_connect("localhost","root","root"); mysql_select_db("test",$link); $sql ="select * from table";
$result = mysql_query($sql);
while($row =mysql_fetch_****($result) ){
$arr[]=$row;
}
$row = mysql_fetch_array($result) 意思:$row['name'] 和$row[1] 都可以取到值
$row = mysql_fetch_row($result)) 意思:$row[1] 只有用索引取值,偏移量从 0 开始。
$row = mysql_fetch_assoc($result)) 意思: $row['name'] 字段名作为索引取值 抽取一条记录转为 关联数组,失败返回 false
30.php 加密函数
crypt($str[,$slat]) 可以完成单向加密功能
md5()
sha1() 返回一个 40 位的十六进制数,
加密扩展库
Mcrypt() 和 Mash
回帖可见剩余的70道面试题哦~
每一道题都是老师们精心整理的
欢迎大家回帖查看~
|