这篇文章介绍的内容是关于php 经典面试题集 php 经典面试题集,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
结合我自己面试情况,面对的一些php面试题列举出来,基本上结合自己的看法回答的,不妥的地方请大家指出去,与大家一起讨论分析,也希望能帮到正在面试的童鞋们:
1.表单提交中的get和post的异同点
get 请求一般用于向服务端获取数据,post 一般向服务端提交数据
get 传输的参数在 url 中,传递参数大小有限制,post 没有大小限制,
get 不安全,post 安全性比get高
get请求在服务端用request.querystring 接受 ,post 请求在服务端用requt.form 接受
2.html的ba标签是干什么用的
必须写在head 中, ba 标签为页面上的所有链接规定默认地址或默认目标
3.echo(),print(),print_r()的区别?
echo是php语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
4.写一个email的正则表达式
/^[a-za-z0-9_-]+@[a-za-z0-9_-]+(\.[a-za-z0-9_-]+)+$/
5.数组[‘a’, ‘b’, ‘c’] 转换成字符串 ‘abc’
echo implode(‘’,[‘a’, ‘b’, ‘c’]); echo join([‘a’, ‘b’, ‘c’],'');
6.获取字符串’aabb’中a首次出现的位置
$str=‘aabb’;echo strpos($str,"a");
7. 编写一段用最小代价实现将字符串完全反序, e.g. 将 “1234567890” 转换成 “0987654321”. (用前述你最熟悉的语言编写并标注简单注释, 不要使用函数,
$s = '1234567890';$o = '';$i = 0;while(ist($s[$i]) && $s[$i] != null) { $o = $s[$i++].$o;} echo $o;
8.请用递归实现一个阶乘求值算法 f(n): n=5;f(n)=5!=5*4*3*2*1=120
function f($n){ if($n==0){ return 1; }el{ return $n* f($n-1); } }var_dump(f(5));
9.将字符长fang-zhi-gang 转化为驼峰法的形式:fangzhigang
//方法一function fun($str){ if(ist($str) &英语四级口语考试内容;& !empty($str)){ $newstr=''; if(strpos($str,'-')>0){ $strarray=explode('-',$str); $len=count($strarray); for ($i=0;$i<$len;$i++){ $newstr.=ucfirst($strarray[$i]); } } return $newstr; } }//方法二function fun($str){ $arr1=explode('_',$str); $str = implode(' ',$arr1); return ucwords($str); } var_dump(fun("fang-zhi-gang")); //fangzhigang
10.数组内置的排序方法有哪些?
sort($array); //数组升序排序rsort($array); //数组降序排序 asort($array); //根据值,以升序对关联数组进行排序ksort($array); //根据建,以升序对关联数组进行排序 arsort($array); //根据值,以降序对关联数组进行排序krsort($array); // 根据键,以降序对关联数组进行排序
11.用php写出显示客户端ip与服务器ip的代码
$_rver["remote_addr"]$_rver["rver_addr"]
12.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require include有返回值,而require没有(可能因为如此require的速度比include快) 包含文件不存在或者语法错误的时候require是致命的错误终止执行,include不是
13.ssion与cookie的区别?
ssion:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(ssion_dir)的位置进行的存放cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于cookie来说是存储在用户win的temp目录中的。两者都可通过时间来设置时间长短
14.php 不使用第三个变量实现交换两个变量的值
//方法一$a.=$b;$b=str_replace($b,"",$a);$a=str_replace($b,"",$a); //方法二list($b,$a)=array($a,$b);var_dump($a,$b);
15.写一个方法获取文件的扩展名
function get_extension($file){ //方法一 return substr(strrchr($file,'.'), 1); //方法二 return end(explode('.', $file)); }echo get_extension('fangzhigang.png'); //png
16.用php打印出前一天的时间格式是2017-3-22 22:21:21
$a= date("y-m-d h:i:s", strtotime("-1 days"));
17.sql语句应该考虑哪些安全性
(1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译sql语句绑定(2)使用最小权限原则,特别是不要使用root账户,微不同的动作或者操作建立不同的账户(3)当sql出错时,不要把数据库出错的信息暴露到客户端
18.优化mysql 数据库方法
(1)选取适当的字段,打字段设置为not null,在查询的时候数据库不用比较null;(2)使用链接(join)代替子查询;(3)使用联合(union)查询代替手动创建临时表;(4)尽量减少使用(like)关键字和通配符(5)使用事务和外健
19.对于大流量的网站,你会采用什么方法来解决访问量?
(1)首先确认服务器硬件是否满足支持当前的流量;(2)优化数据库的访问;(3)禁止外部盗链;(4)控制大文件下载;(开窗说亮话5)使用不同的主机分流;(6)使用流量分析统计;
20.mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$row[0],$row[1],这样以数组下标来读取数据, 而mysql_fetch_array()返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据,(假如数据库的字段是 urname,passwd):$row['urname']$row['passwd']
21.mysql的几个概念:主键,外键,索引,唯一索引
主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。 外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。 索引(index) 是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用。所谓唯一性索引,这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。 总结: 主键一定是唯一性索引,唯一性索引并不一定就是主键。一个表中可以有多个唯一性索引,但只能有一个主键。主键列不允许空值,而唯一性索引列允许空值。主键可以被其他字段作外键引用,而索引不能作为外键引用。
22.mysql数据库引擎有哪些?
myisam、 isam、heap、innodb、bdb、cvs...
23.谈谈你对 mysql 引擎中的myisam与innodb的区别理解?
innodb和myisam是许多人在使用mysql时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:myisam类型不支持事务处理等高级处理,而innodb类型支持。myisam类型的表强调的是性能,其执行数度比innodb类型更快,但是不提供事务支持,而innodb提供事务支持已经外部键等高级数据库功能。 以下是一些细节和具体实现的差别: myisam与innodb的区别是什么?1、 存储结构myisam:每个myisam在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.myd (mydata)。索引文件的扩展名是.myi (myindex)。innodb:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),innodb表的大小只受限于操作系统文件的大小,一般为2gb。2、 存储空间myisam:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。innodb:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。3、 可移植性、备份及恢复myisam:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。innodb:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十g的时候就相对痛苦了。4、 事务支持myisam:强调的是性能,每次查询具有原子性,其执行数度比innodb类型更快,但是不提供事务支持。innodb:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (acid compliant))型表。5、 auto_incrementmyisam:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。innodb:innodb中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。6、 表锁差异myisam:只支持表级锁,用户在操作myisam表时,lect,update,delete,inrt语句都会给表自动加锁,如果加锁以后的表满足inrt并发的情况下,可以在表的尾部插入新的数据。innodb:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是innodb的行锁,只是在where的主键是有效的,非主键的where都会锁全表的。7、 全文索引myisam:支持 fulltext类型的全文索引innodb:不支持fulltext类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。8、 表主键myisam:允许没有任何索引和主键的表存在,索引都是保存行的地址。innodb:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。9、 表的具体行数myisam:保存有表的总行数,如果lect count(*) from table;会直接取出出该值。innodb:没有保存表的总行数,如果使用lect count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。10、 curd操作myisam:如果执行大量的lect,myisam是更好的选择。innodb:如果你的数据执行大量的inrt或update,出于性能方面的考虑,应该使用innodb表。delete 从性能上innodb更优,但delete from table时,innodb不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。11、 外键myisam:不支持innodb:支持通过上述的分析,基本上可以考虑使用innodb来替代myisam引擎了,原因是innodb自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信innodb的表现肯定要比myisam强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥mysql的性能优势。如果不是很复杂的web应用,非关键应用,还是可以继续考虑myisam的,这个具体情况可以自己斟酌。
24. redis 和 memache 缓存的区别
总结一: 1.数据类型 redis数据类型丰富,支持t list等类型memcache支持简单数据类型,需要客户端自己处理复杂对象 2.持久性 redis支持数据落地持久化存储memcache不支持数据持久存储 3.分布式存储 redis支持master-slave复制模式memcache可以使用一致性hash做分布式 value大小不同 memcache是一个内存缓存,key的长度小于250字符,单个item存储要小于1m,不适合虚拟机使用 4.数据一致性不同 redis使用的是单线程模型,保证了数据按顺序提交。memcache需要使用cas保证数据一致性。cas(check and t)是一个确保并发一致性的机制,属于“乐观锁”范畴;原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作 5.cpu利用 redis单线程模型只能使用一个cpu,可以开启多个redis进程 总结二: 1.redis中,并不是所有的数据都一直存储在内存中的,这是和memcached相比一个最大的区别。2.redis不仅仅支持简单的k/v类型的数据,同时还提供list,t,hash等数据结构的存储。3.redis支持数据的备份,即master-slave模式的数据备份。4.redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。我个人认为最本质的不同是redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而memcached只是简单的k/v缓存 总结三: redis和memecache的不同在于: 1、存储方式:memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小redis有部份存在硬盘上,这样能保证数据的持久性。2、数据支持类型:redis在数据支持上要比m北半球emecache多的多。3、使用底层模型不同:新版本的redis直接自己构建了vm 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。4、运行环境不同:redis目前官方只支持linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上 memcache只能当做缓存,cacheredis的内容是可以落地的,就是说跟mongodb有些类似,然后redis也可以作为缓存,并且可以设置master-slave
25.表中有a b c三列,用sql语句实现:当a列大于b列时选择a列否则选择b列,当b列大于c列时选择b列否则选择c列。
drop table table1 create table table1( a int, b int, c int ) inrt into table1 values(22,24,23) lect * from table1 lect (ca when a>b then a el b end),(ca when b>c then b el c end) from table1 lect (ca when a>b then a when a>c then a when b>c then b el c end) from table1
26.安装linux系统中,用netconfig程序对网络进行配置,要输入哪些内容?
会让用户输入主机名、域名、域名服务器、ip地址、网关地址和子网掩码等必要信息
27. php 如何写接口给人家调用?
public function authenticationapi($data,$url){ $ch = curl_init(); curl_topt($ch, curlopt_url, $url); curl_topt($ch, curlopt_post, 1); curl_topt($ch, curlopt_header, 0); curl_topt($ch, curlopt_returntransfer, 1); curl_topt($ch, curlopt_postfields, $data); //输出格式可以转为数组形式的json格式 $tmpinfo = curl_exec($ch); curl_clo($ch); return $tmpinfo; }
28.用php header()函数实现页面404错误提示功能
header("http/1.1 404 not found");
29.heredoc结构及用法
echo <<<eot <html> <head><title>主页</title></head> <body>主页内容</body> </html>eot; 注意:结束标识符所在的行不能包含任何其它字符除";"
30.nowdoc结构及用法
$str = <<<'eod' example of string spanning multiple lines using nowdoc syntax.eod;
31.javascript 判断弹出窗口是否被屏蔽程序代码
var wroxwin = window.open("http://www.111cn.net", "_blank");if (wroxwin == null) { alert("糟糕!弹出窗口被屏蔽了");}
32. php序列化和反序列化用的函数
rialize() 序列化 unrialize() 反序列化
33. 利用下表结构,写出发贴数最多的十个人名字的sql语句(members(id,urname,posts,pass,email)
lect memebers.urname from members group by posts desc limit 10
34,.以apache模块的方式安装php,在文件http.conf中首先要用语句(?)动态装载php模块,然后再用语句(?)使得apache把所有扩展名为php的文件都作为php脚本处理。
1.loadmodule php5_module "c:/php/php5apache2.dll") 2.addtype application/x-httpd-php .php
35.数据库中的事务是什么?
事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消前面的操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作。
36.apche 和 nginx 的优缺
nginx轻量级,比apache占用更少的内存及资源,抗并发,nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。apache 相对于nginx 的优点:rewrite比nginx 的rewrite 强大,少bug,稳定。(需要性能用nginx,求稳定就apache)。
37.求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
// 方法一:用datetime类$day1 = '2003-09-16';$day2 = '2011-11-23';$d1 = new datetime($day1);$d2 = new datetime($day2);echo $d1->diff($d2)->days; // 方法二,用时间戳计算echo (strtotime($day2) - strtotime($day1))/(24*3600);
38.下面的代码用来做什么?请解释。$date='08/26/2003';
print
ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\2/\\1/\\3",$date);
这是把一个日期从 mm/dd/yyyy 的格式转为 dd/mm/yyyy 格式。我的一个好朋友告诉我可以把这个正规表达式拆解为以下的语句,对于如此简单的表示是来说其实无须拆解,纯粹为了解说的方便: // 对应一个或更多 0-9,后面紧随一个斜号$regexpression = "([0-9]+)/";// 应一个或更多 0-9,后面紧随另一个斜号$regexpression .= "([0-9]+)/";// 再次对应一个或更多 0-9$regexpression .= "([0-9]+)";至于 \/\/\ 则是用来对应括号,第一个括号对的是月份
39.在php中,当前脚本的名称(不包括路径和查询字符串)记录反腐心得在预定义变量(?)中;而链接到当前页面的url记录在预定义变量(?)中。
(1) echo $_rver['php_lf']; (2) echo $_rver["http_referer"硬件价格];
40.一个函数的参数不能是对变量的引用,除非在php.ini中把(?)设为on.
allow_call_time_pass_reference
今天就先写到这里吧!在后期的面试中遇到不同的面试题我会不定期更新
希望此文会给大家带来帮助,觉写的不错的,对你有帮助中的请动动你的手关注我和点赞分享,祝愿正在找工作的你,能找一份满意的工作。祝你新的旅途愉快!
以上就是php 经典面试题集的详细内容
相关推荐:
分享一波腾讯php面试题
2019年php最新面试题(含答案)
redis 高级面试题 学会这些还怕进不了大厂?
阿里面试官三年经验php程序员知识点汇总,学会你就是下一个阿里人!
php面试题之php核心技术
掌握 redis这些 知识点,面试官一定觉得你很 nb
本文发布于:2023-04-08 02:38:22,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/35eec2a325d5a9f9c5c6d80a348a7d16.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP 经典面试题集.doc
本文 PDF 下载地址:PHP 经典面试题集.pdf
留言与评论(共有 0 条评论) |