PHP面试笔试1
最近忙着面试,整理些笔试的题目和面试应该注意的问题。
先从笔试题开始:
1、echo(),print(),print_r()的区别?
Echo 是PHP语法,可以输出多个值,不能输出数组。
Print() 是PHP函数,可以输出单个简单类型的变量值。
Print_r() 是php函数,可以打印出复杂类型变量的值,如数组,对象。
2、mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
mysql_fetch_row — Get a result row as an enumerated array 枚举型数组
mysql_fetch_array — Fetch a result row as an associative array, a numeric array, or both 关联数组、数值数组 或 两者
引申MYSQL的函数
mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数
mysql_client_encoding — 返回字符集的名称*
mysql_close — 关闭 MySQL 连接
mysql_connect — 打开一个到 MySQL 服务器的连接
mysql_create_db — 新建一个 MySQL 数据库*
mysql_data_seek — 移动内部结果的指针*
mysql_db_name — 取得结果数据*
mysql_db_query — 发送一条 MySQL 查询*
mysql_drop_db — 丢弃(删除)一个 MySQL 数据库*
mysql_errno — 返回上一个 MySQL 操作中的错误信息的数字编码
mysql_error — 返回上一个 MySQL 操作产生的文本错误信息
mysql_escape_string — 转义一个字符串用于 mysql_query*
mysql_fetch_array — 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
mysql_fetch_assoc — 从结果集中取得一行作为关联数组
mysql_fetch_field — 从结果集中取得列信息并作为对象返回*
mysql_fetch_lengths — 取得结果集中每个输出的长度*
mysql_fetch_object — 从结果集中取得一行作为对象*
mysql_fetch_row — 从结果集中取得一行作为枚举数组
mysql_field_flags — 从结果中取得和指定字段关联的标志*
mysql_field_len — 返回指定字段的长度*
mysql_field_name — 取得结果中指定字段的字段名
mysql_field_seek — 将结果集中的指针设定为制定的字段偏移量
mysql_field_table — 取得指定字段所在的表名
mysql_field_type — 取得结果集中指定字段的类型
mysql_free_result — 释放结果内存*
mysql_get_client_info — 取得 MySQL 客户端信息*
mysql_get_host_info — 取得 MySQL 主机信息*
mysql_get_proto_info — 取得 MySQL 协议信息*
mysql_get_server_info — 取得 MySQL 服务器信息*
mysql_info — 取得最近一条查询的信息*
mysql_insert_id — 取得上一步 INSERT 操作产生的 ID
mysql_list_dbs — 列出 MySQL 服务器中所有的数据库****
mysql_list_fields — 列出 MySQL 结果中的字段****
mysql_list_processes — 列出 MySQL 进程*
mysql_list_tables — 列出 MySQL 数据库中的表****
mysql_num_fields — 取得结果集中字段的数目
mysql_num_rows — 取得结果集中行的数目
mysql_pconnect — 打开一个到 MySQL 服务器的持久连接****
mysql_ping — Ping 一个服务器连接,如果没有连接则重新连接
mysql_query — 发送一条 MySQL 查询
mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
mysql_result — 取得结果数据
mysql_select_db — 选择 MySQL 数据库
mysql_set_charset — 设置客户端的字符集
mysql_stat — 取得当前系统状态
mysql_tablename — 取得表名
mysql_thread_id — 返回当前线程的 ID
mysql_unbuffered_query — 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行
3、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function show($dirs){ $dir=opendir($dirs); While($f=readdir($dir)) { If($f!=’.' && $f!=’..’) { $file=$dirs.’/’.$f; If(is_file($file)) Echo ’文件名:‘.$file.’<br/>’; Else Show($file); } } }
4、写几个魔术方法并说明作用? __call()当调用不存在的方法时会自动调用的方法 __autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件 __set()当给未定义的变量赋值时会自动调用的方法 __get()当获取未定义变量的值时会自动调用的方法 __construct()构造方法,实例化类时自动调用的方法 __destroy()销毁对象时自动调用的方法 __unset()当对一个未定义变量调用unset()时自动调用的方法 __isset()当对一个未定义变量调用isset()方法时自动调用的方法 __clone()克隆一个对象 __tostring()当输出一个对象时自动调用的方法
5、$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什么? 它们都是PHP预定义变量。 $_REQUEST用来获取post或get方式提交的值。 $_POST用来获取post方式提交的值。 $_GET用来获取get方式提交的值。 $_COOKIE用来获取cookie存储的值, $_SESSION用来获取session存储的值, $_FILE用来获取上传文件表单的值
6、magic_quotes_gpc()、magic_quotes_runtime()的意思是什么? Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加\ Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。
7、框架中什么是单一入口和多入口,单一入口的优缺点? 1)多入口就是通过访问不同的文件来完成用户请求。 单一入口只web程序所有的请求都指向一个脚本文件的。 2)单一入口更容易控制权限,方便对http请求可以进行安全性检查。 缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。
8、编写一个自定义函数提取这段路径的的后缀名。 “Www/hello/test.php.html?a=3&b=4” Function geturltype($url){ $info=parse_url($url); Return end(explode(‘.’,$info['path'])); }
9、对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题: a) 索引的目的是什么? b) 索引对数据库系统的负面影响是什么? c) 为数据表建立索引的原则有哪些? d) 什么情况下不宜建立索引? 答: 索引的目的: 1、快速访问数据表中的特定信息,提高检索速度 2、创建唯一性索引,保证数据库表中每一行数据的唯一性 3、加速表和表之间的连接 4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间 负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。 建立索引的原则: 1、在最频繁使用的、用以缩小查询范围的字段上建立索引 2、在平频繁使用的、需要排序的字段上建立索引 什么情况下不宜建立索引: 1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引 2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。
10、HTTP状态码 1xx 消息 - 2xx 成功 - 3xx 重定向 - 4xx 请求错误 - 5xx 服务器错误 详见 http://baike.baidu.com/view/1790469.htm
11、include与require的区别? Php在遇到include时就重新解释一次,如果一个页面中出现10次include,php就重新解释10次,而php遇到require时只解释一次,即使页面中出现多次require,php也直解释一次。 使用require包含文件时,被包含的文件当成了当前文件的一个组成部分,如果被包含的文件中有语法错误或者文件不存在,程序就提示错误信息,并结束执行。 使用include包含文件时,相当于指定了文件的路径,被包含的文件中有语法错误或者文件不存在时,页面只是给出警告信息,不响应程序本身的执行。