主要总结一些平常不大注意到的一些知识点(面试估计会问到吧)。
--------------------------------------------3.14-----------------------------------------------
1. PHP 变量规则:
1)变量以 符号开头,其后是变量的名称 2)变量名称必须以字母或下划线开头 3)变量名称不能以数字开头 4)变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _) 5)变量名称对大小写敏感(y 与 $Y 是两个不同的变量)
2. 关于require()和include():
1)require函数通常放在 PHP 程序的最前面
2)include函数一般是放在流程控制的处理部分中
3)require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含
4)include在引入不存文件时产生一个警告且脚本还会继续执行,而require则会导致一个致命性错误且脚本停止执行
3. foreach循环并不能改变数组元素的值,如果要改变数组元素的值,需要使用引用类型
4.preg_match() 定义和用法
1)preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
2)preg_match() 匹配成功一次后就会停止匹配,如果要实现全部结果的匹配,则需使用preg_match_all()函数。
5.双引号和单引号的区别
1)双引号解释变量,单引号不解释变量
2)双引号里插入单引号,其中单引号里如果有变量的话,变量解释
3)双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
4)双引号解释转义字符,单引号不解释转义字符,但是解释'\和\
5)能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)
--------------------------------------------3.20更新-----------------------------------------------
6.请描述出两点以上 XHTML 和 和 HTML 最显著的区别
1).XHTML 必须强制指定文档类型 DocType,HTML 不需要
2).XHTML 所有标签必须闭合,HTML 比较随意
3).XHTML 严格区分大小写,所有标签的元素和属性的名字都必须使用小写
4).XHTML 要求所有的标记都必须要有一个相应的结束标记
5).XHTML 规定所有属性都必须有一个值,没有值的就重复本身
7. CSS 中 中 class 和 和 id 的区别
id:每个页 ID 是唯一的不能重复。
class:可以设置多个 class 为同一个值。
8.表单中 get 与 与 post 提交方法的区别?传输的最大容量分别是多少?
答:get 是发送请求 HTTP 协议通过 url 参数传递进行接收,而 post 是实体数据,可以通过表单提交大量信息。POST 根据你 php.ini 文件配置(默认是 8M),GET 的话大小限制在 2KB。
--------------------------------------------4.21更新-----------------------------------------------
(一晃已经一个月后…再不写就要发霉了…)
9.memcache和redis的区别
写出下列几个预定义全局变量的作用
_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录_SERVER['HTTP_HOST '] //当前请求的 Host: 头部的内容
_SERVER['REMOTE_ADDR'] //正在浏览当前页面用户的 IP 地址_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址
_SERVER['SERVER_NAME'] //当前运行脚本所在服务器主机的名称_FILES //包含有所有上传的文件信息
S_FILES['userfile']['name'] //客户端机器文件的原名称
_FILES['userfile']['type'] //文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。_FILES['userfile']['size'] //已上传文件的大小,单位为字节
_FILES['userfile']['tmp_name'] //文件被上传后在服务端储存的临时文件名_FILES['userfile']['error'] //和该文件上传相关的错误代码PHP 的意思,它能干些什么?
PHP( Hypertext Preprocessor,超文本预处理器的字母缩写)是一种被广泛应用的开放
源代码的多用途脚本语言,它可嵌入到 HTML 中,尤其适合 web 开发。
PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何
其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收
Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:
- 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。
- 命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。
通过这种方式,仅仅只需要 PHP 解析器来执行。 - 编写桌面应用程序。
12.说出数组涉及到的常用函数。
array -- 声明一个数组
count -- 计算数组中的单元数目或对象中的属性个数
foreach -- 遍历数组
list -- 遍历数组
explode -- 将字符串转成数组
implode -- 将数组转成一个新字符串
array_merge -- 合并一个或多个数组
is_array -- 检查是否是数组
print_r -- 输出数组
sort -- 数组排序
array_keys -- 返回数组中所有的键名
array_values -- 返回数组中所有的值
key -- 从关联数组中取得键名
13.字符串的常用函数?
trim() -- 去除字符串首尾处的空白字符(或者其他字符)
strlen() -- 字符串长度
substr() -- 截取字符串
str_replace() -- 替换字符串函数
substr_replace() -- 对指定字符串中的部分字符串进行替换
strstr() -- 检索字符串函数
explode() -- 分割字符串函数
implode() -- 将数组合并成字符串
str_repeat() -- 重复一个字符串
addslashes(); -- 转义字符串
htmlspecialchars() -- THML 实体转义
14.写出 php 的 的 public 、protected 、private 三种访问控制模式的区别
public:公有,任何地方都可以访问
protected:继承,只能在本类或子类中访问,在其它地方不允许访问
private:私有,只能在本类中访问,在其他地方不允许访问
15.PHP5 中魔术方法函数有哪几个,请举例说明各自的用法
__sleep serialize 之前被调用
__wakeup unserialize 时被调用
__toString 打印一个对象时被调用
__set_state 调用 var_export 时被调用,用__set_state 的返回值作为 var_export 的返回值
__construct 构造函数,实例化对象时被调用
__destruct 析构函数,当对象销毁时被调用
__call 对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call 函数
__get 读取一个对象属性时,若属性存在,则直接返回,若不存在,则调用__get 函数
__set 设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set 函数
__isset 检测一个对象的属性是否存在时被调用
__unset unset 一个对象的属性时被调用
__clone 克隆对象时被调用
__autoload 实例化一个对象时,如果对应的类不存在,则该方法被调用
--------------------------------------------4.26更新-----------------------------------------------
16. 三个内置函数
get_class 返回一个对象的类的名称
get_object_vars 得到给定对象的属性
get_class_methods 获取类方法的名字
17. PDO对象中的成员方法:
getAttribute() 获取一个数据库连接对象的属性
setAttribute() 为一个数据库连接对象设定属性
errorCode() 获取错误码
errorInfo() 获取错误信息
exec() 处理一条SQL语句,并返回所影响的条数
query() 处理一条SQL语句,并返回一个PDOStatement对象
quote() 为某个sql中的字符串添加引号
lastInsertId() 获取插入到表中的最后一条数据的主键
prepare() 负责准备执行的sql语句
getAvailableDriver() 获取有效的PDO驱动器名称
beginTransaction() 开始一个事务
commit() 提交事务
rollback() 回滚事务
--------------------------------------------7.7更新 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)用数字类型的字段充当主键
拆分表
拆分字段,将文章的标题与内容分开
2)拆分记录,将今年的记录与往年的记录分开
给字段合理添加索引
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";
缓存,静态化
选择合适存储引擎用Innodb增删改,用myisam查询
主从数据库
负载均衡
最好拿数字类型的字段充当where条件
最好拿相同类型的字段进行比对(避免发生数据类型的转换)
不要在具有索引的字段上添加数据库函数(索引失效)
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分)
10.2写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
11、能够使HTML和PHP分离开使用的模板(1分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
12、使用哪些工具进行版本控制?(1分)
答:cvs,svn,vss;
13、如何实现字符串翻转?(3分)
英文:
strrev($a)
中文或其他文字:
中文:GB2312, 代码是使用GB2312编码
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分)