版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PHP程序员招聘试卷
选择
1、下列命令中不是PHP的输出命令的是
(B)A.echoB.printf()C.printD.write2>PHP定义活动变量的
方法是(B)
A.VARB.$C.$$D.&
3、PHP表达式$foo=l+”bob3",则$化。的值是(B)
A.IB.lbob3C.IbD.924>下关于PHP变量的说法正确的是
(D)A.PHP是一种强类型语言
B.PHP变量声明时需要指定其变量的类型
C.PHP变量声明时在变量名前面使用的字符是“&”
D.PHP变量使用时、上下文会自动确定其变量的类型5、在
PHP嵌入HTML文档使用的定界符号是(C)A.结束
B.以””结束C.以"”结束D.以"“结束
6、PHP语法中,假设已知$@="hello",$b="china",则
要得到"hellochina”的字符串,应该如何操作(C)
A.$a+$bB.$a-$bC.$a.$bD,$a+=$b7>要配置PHP环境,只
需修改(A)
A.php.iniB.http.confC.php.sysD.php.exe8、有下歹!J
PHP语句段(D)
若要输出"false",$a应该是
A.10B.3C.“true”D.“0”9、下面程序运行的结果为(A)。
$a=array(a,b,c,d);
$index=arraysearch(〃a〃,$a);if($index==false)
echo”在数组a中未发现字符〃a〃〃;
elseecho/,index=,z.$index;
A.在数组a中未发现字符'a'B.0C.ID.210、选择下
面程序的运行结果(D)。
Echosubstr_replace(UABCV,"DEF”,3,1)
A.ABCB.DEFC.ABCDEFD.以上都不对11选择下面程序运
行的结果0。echo"\\$a=$a\\$b=$b\\$c=$c";?>
A.$a=3B.$a=3C.$a=2D.$a=2$b=2$b=2$b=2$b=2$c=3$c=
2$c=3$c=2
12getdate()函数返回的值的数据类型是。
(B)A,整形B.浮点型C.数组D.字符串E.布尔型13.下列哪些
数据库管理系统是PHP不支持的?(B)
A.MySQLB.IBMDB2
C.PostgreSQLD.MicrosoftSQLScrverE.以上没有一个P1IP
不支持
14.请看下面的SQL查询语句,如何才能减少从数据库返回
的数据量?(B)SELECT*FROMMY_TABLE
A.转为存储过程B.用具体的字段名来代替"*"C.加一个”
where”语句D.转变查询为视图E.使用预语句
15.下面哪个语句用来往数据表里面增加一条记录?(D)
A.SELECTS.UPDATEC.DELETED.INSERT
16.下面哪个不是一个合法的SQL的归类函数?(E)
A.AVGB.SUMC.MIND.MAXE.CURRENT_DATE()
17.下面哪个网络协议是PHP不支持的?(E)
A.tcpB.udpC.udgD.pdcE.unix
18.做文件上传的时候,你可以让浏览器来限制上传的文件
大小吗?(8)A.可以13.不可以
19.你可以通过一个PHP函数把所有的错误信息汇报都屏蔽
掉吗?(A)A.可以B.不可以
20假设$8=5,有$@+=2,则$@的值为(C)A.5B.6c.7D.8二、
填空题
l.Php配置文件为_php.inio2.检查一个变量是否
为空的函数。
3、已知ltrim()函数是去除字符串左边的空格或其他字符,
去除字符串右边的空格或其他字符使用函数。4、在
php页面中要运行php代码,可以用以下语句声明脚本
5、如果在php中动态的设置“我是一个学生",并且以蓝
色隶书字体显示,大小为12,用php代码如何输出,
_______________________________o6、HTML标记,可单独使
用或嵌入在各个php脚本单元中,以〃〃为定界符;
php代码可单独使用或包含在和〈/html〉内,以〃〃
为定界符7、一段与mysql数据库建立连接的代码
8、PHP指的是—PHP语言o9、
此段程序执行后,浏览器上显示的结果是5o
10、使用〃get〃方法提交的表单中获取数据是
_____________o三、问答题
1>简述break和continue的区别
2、简述public、protected、private修饰类中的函数时
的意义?3、mysql_fetch_row()和mysqlfetcharray之间有
什么区别?4、简述修饰符this->、parent::、self::的作用?
5、PHP如何创建一个COOKIE?
6、简述_get()、_set()函数的作用?7、php的包含语
句有那些以及区别?
四、编程题:
1、用PHP实现一用户登陆程序。数据库test中user(用
户)表结构如卜:Username(useridchar(8),passwordchar(6))
2、在MYSQL中,数据库"study”中student表内容如下:
idnamesexlOOl张山男1002李四男1003王武女
连接数据库服务器参数为:("localhost",“root“,”
root")请使用PHP语言编写删除一条id为1002的数据记录
的程序
3、使用第2期的数据库和表,用php写一段简单查询,查
出所有性别为“男”的内容并打印出来。
4、编程输出99乘法表
5、编程求10的阶乘并输出
《PHP程序员招聘中的常见面试题!》
表单中POST方法与GET方法有什么区别?答:
l.get是从服务器上获取数据,post是向服务器传送数据。
2.get是把参数数据队列加到提交表单的ACTION属性所指
的URL中,值和表单内各个字段一一对应,在URL中可以看到;
而post是通过HTTPpost机制,将表单内各个字段与其内
容放置在HTMLHEADER内一起传送到ACTION属性所指的URL地
址。用户看不到这个过程。
3•对于get方式,服务器端用Request.QueryString获取
变量的值,对于post方式,服务器端用Request.Form获取提
交的数据。
4.get传送的数据量较小,不能大于2KBOpost传送的数
据量较大,但受配置文件限制。
5.get安全性非常低,post安全性较高。
优化mysql数据库的方法?答:
1、选取最适用的字段属性
MySQL可以很好的支持大数据量的存取,但是一般说来,
数据库中的表越小,在它上面执行的查询也就会越快。因此,
在创建表的时候,为了获得更好的性能,我们可以将表中字段
的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如
果将其设置为CHAR(255),显然给数据库增加了不必要的空间,
甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以
很好的完成任务了。同样的,如果可以的话,我们应该使用
MEDIUMINT而不是BIGIN来定义整型字段。
另外一个提高效率的方法是在可能的情况下,应该尽量把
字段设置为NOTNULL,这样在将来执行查询的时候,数据库不
用去比较NULL值。对于某些文本字段,例如“省份”或者“性
别”,我们可以将它们定义为ENUM类型。因为在MySQL中,
ENUM类型被当作数值型数据来处理,而数值型数据被处理起来
的速度要比文本类型快得多。这样,我们又可以提高数据库的
性能。2、使用连接(JOIN)来代替子查询(Sub-Queries)MySQL
从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句
来创建一个单列的查询结果,然后把这个结果作为过滤条件用
在另一个查询中。例如,我们要将客户基本信息表中没有任何
订单的客户删除掉,就可以利用子查询先从销售信息表中将所
有发出订单的客户ID取出来,然后将结果传递给主查询,如下
所示:DELETEFROMcustomerinfo
WHERECustomerlDNOTin(SELECTCustomerlDFROMsalesinfo)
使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完
成的SQL操作,同时也可以避免事务或者表锁死,并且写起来
也很容易。但是,有些情况下,子查询可以被更有效率的连接
(JOIN)..替代。例如,假设我们要将所有没有订单记录的用
户取出来,可以用下面这个查询完成:
SELECT*FROMcustomerinfo
WHERECustomerlDNOTin(SELECTCustomerlDFROMsalesinfo)
如果使用连接(JOIN)..来完成这个查询工作,速度将会
快很多。尤其是当salesinfo表中对CjstomerTD建有索引的话,
性能将会更好,查询如下:SELECT*FROMcustomerinfo
LEFTJOINsalesinfoONcustomerinfo.CustomerID=salesinf
o.CustomerlD
WHEREsalesinfo.CustomerIDISNULL
连接(JOIN)..之所以更有效率一些,是因为MySQL不需
要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查
询工作。
3、使用联合(UNION)来代替手动创建的临时表
MySQL从4.0的版本开始支持UNION查询,它可以把需要
使用临时表的两条或更多的SELECT查询合并的一个查询中。在
客户端的查询会话结束的时候,临时表会被自动删除,从而保
证数据库整齐、高效。使用UNION来创建查询的时候,我们只
需要用UNION作为关键字把多个SELECT语句连接起来就可以了,
要注意的是所有SELECT语句中的字段数目要想同。下面的例子
就演示了一个使用UNION的查询。
SELECTName,PhoneFROMclientUNION
SELECTName,BirthDateFROMauthorUNION
SELECTName,SupplierFROMproduct
4、事务
尽管我们可以使用子查询(Sub-Queries).连接(JOIN)
和联合(UNION)来创建各种各样的查询,但不是所有的数据库
操作都可以只用一条或少数儿条SQL语句就可以完成的。更多
的时候是需要用到一系列的语句来完成某种工作。但是在这种
情况下,当这个语句块中的某一条语句运行出错的时候,整个
语句块的操作就会变得不确定起来。设想一下,要把某个数据
同时插入两个相关联的表中,可能会出现这样的情况:第一个
表中成功更新后,数据库突然出现意外状况,造成第二个表中
的操作没有完成,这样,就会造成数据的不完整,甚至会破坏
数据库中的数据。要避免这种情况,就应该使用事务,它的作
用是:要么语句块中每条语句都操作成功,要么都失败。换句
话说,就是可以俣持数据库中数据的一致性和完整性。事物以
BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL
操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN
开始之前的状态。
BEGIN;
INSERTINT0salesinfoSETCustomerID=14;
UPDATEinventorySETQuantity=l1
WIIEREitem=z,bookzz;
COMMIT;
事务的另一个重要作用是当多个用户同时使用相同的数据
源时,它可以利用锁定数据库的方法来为用户提供一种安全的
访问方式,这样可以保证用户的操作不被其它的用户所干扰。
5、锁定表
尽管事务是维护数据库完整性的一个非常好的方法,但却
因为它的独占性,有时会影响数据库的性能,尤其是在很大的
应用系统中。由于在事务执行的过程中,数据库将会被锁定,
因此其它的用户请求只能暂时等待直到该事务结束。如果一个
数据库系统只有少数几个用户来使用,事务造成的影响不会成
为一个太大的问题;但假设有成千上万的用户同时访问一个数
据库系统,例如访问一个电子商务网站,就会产生比较严重的
响应延迟。其实,有些情况下我们可以通过锁定表的方法来获
得更好的性能。下面的例子就用锁定表的方法来完成前面一个
例子中事务的功能。
LOCKTABLEinventoryWRITESELECTQuantityFROMinventoryWHERE
Item二〃book”;...
UPDATEinventorySETQuantity=ll\WEREItem=/zbook/z;UNLOC
KTABLES
这里,我们用一个SELECT语句取出初始数据,通过一些计
算,用UPDATE语句将新值更新到表中。包含有WRITE关键字的
LOCKTABLE语句可以保证在UNLOCKTABLES命令被执行之前,不
会有其它的访问来对inventory进行插入、更新或者删除的操
作。
6、使用外键
锁定表的方法可以维护数据的完整性,但是它却不能保证
数据的关联性。这个时候我们就可以使用外键。例如,外键可
以保证每一条销售记录都指向某一个存在的客户。在这里,外
键可以把customerinfo表中的CustomerlD映射到salesinfo
表中CustomerlD,任何一条没有合法CustomerlD的记录都不
会被更新或插入到salesinfo中。CREATETABLEcustomerinfo(
CustomerlDTNTNOTNULL,PRTMARYKEY(CustomerlD))TYPE=IN
NODB;
CREATETABLEsalesinfo(
SalesIDINTNOTNULL,CustomerlDINTNOTNULL,PRIMARYKEY(C
ustomerlD,SalesID),
FOREIGNKEY(CustomerlD)REFERENCEScustomerinfo(Custom
erlD)ONDELETECASCADE)TYPE二INNODB;
注意例子中的参数“ONDELETECASCADE”。该参数保证当
customerinfo表中的一条客户记录被删除的时候,salesinfo
表中所有与该客户相关的记录也会被自动删除。如果要在
MySQL中使用外键,一定要记住在创建表的时候将表的类型定
义为事务安全表InnoDB类型。该类型不是MySQL表的默认类型。
定义的方法是在CREATETABLE语句中加.上TYPE=INNODB。如例
中所示。
7、使用索引
索引是提高数据库性能的常用方法,它可以令数据库服务
器以比没有索引快得多的速度检索特定的行,尤其是在查询语
句当中包含有句X(),MIN()和ORDERBY这些命令的时候,性能
提高更为明显。那该对哪些字段建立索引呢?一般说来,索引
应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上。
尽量不要对数据库中某个含有大量重复的值的字段建立索引o
对于一个ENUM类型的字段来说,出现大量重复值是很有可能的
情况,例如customerinfo中的“province”..字段,在这样的
字段上建立索引将不会有什么帮助;相反,还有可能降低数据
库的性能。我们在创建表的时候可以同时创建合适的索引,也
可以使用ALTERTABLE或CREATEINDEX在以后创建索引。止匕外,
MySQL从版本3.23.23开始支持全文索引和搜索。全文索引在
MySQL中是一个FULLTEXT类型索引,但仅能用于MyISAM类型
的表。对于一个大的数据库,将数据装载到一个没有FULLTEXT
索引的表中,然后再使用ALTERTABLE或CREATEINDEX创建索引,
将是非常快的。但如果将数据装载到一个已经有FULLTEXT索引
的表中,执行过程将会非常慢。
8、优化的查询语句
绝大多数情况下,使用索引可以提高查询的速度,但如果
SQL语句使用不恰当的话,索引将无法发挥它应有的作用。下
面是应该注意的几个方面。首先,最好是在相同类型的字段间
进行比较的操作。在MySQL3.23版之前,这甚至是一个必须的
条件。例如不能将一个建有索引的INT字段和BIGINT字段进行
比较;但是作为特殊的情况,在CHAR类型的字段和VARCHAR类
型字段的字段大小相同的时候,可以将它们进行比较。其次,
在建有索引的字段上尽量不要使用函数进行操作。
例如,在一个DATE类型的字段上使用YEAEO函数时,将
会使索引不能发挥应有的作用。所以,下面的两个查询虽然返
回的结果一样,但后者要比前者快得多。
SELECT*FROMorderWHEREYEAR(OrderDate)<
201*;SELECT*FROMorderWHEREOrderDate<〃201*-01-01〃;同样
的情形也会发生在对数值型字段进行计算的时候:
SELECT*FR0MinventoryWHEREAmount/7<
24;SELECT*FR0MinventoryWHEREAmount<24*7;
上面的两个查询也是返回相同的结果,但后面的查询将比
前面的一个快很多。第三,在搜索字符型字段时,我们有时会
使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺
牲系统性能为代价的。例如下面的查询将会比较表中的每一条
记录。SELECT*FROMbooks
WHEREnamelike〃MySQL%〃但是如果换用下面的查询,返回的
结果一样,但速度就要快上很多:SELECT*FROMbooks
WHEREname>=〃MySQL〃andname<〃MySQM〃
最后,应该注意避免在查询中让MySQL进行自动类型转换,
因为转换过程也会使索引变得不起作用。
关于通过查询缓冲提高查询速度
一般我们使用SQL语句进行查询时,数据库服务器每次在
收到客户端发来SQL后,都会执行这条SQL语句。但当在一定
间隔内(如1分钟内),接到完全一样的SQL语句,也同样执行
它。虽然这样可以保证数据的实时性,但在大多数时候,数据
并不要求完全的实时也就是说可以有一定的延时,如果是这
样的话,在短时间内执行完全一样的SQL就有些得不偿失。
幸好MySQL为我们提供了查询缓冲的功能(只能在
MySQL4.0.1及以上版本使用查询缓冲)。我们可以通过查询缓
冲在一定程度上提高查询性能。
我们可以通过在MySQL安装目录中的my.ini文件设置查询
缓冲。设置也非常简单,只需要将query_cache_type设为1即
可。在设置了这个属性后,MySQL在执行任何SELECT语句之前,
都会在它的缓冲区中查询是否在相同的SELECT语句被执行过,
如果有,并且执行结果没有过期,那么就直接取查询结果返回
给客户端。但在写SQL语句时注意,MySQL的查询缓冲是区分
大小写的。如下列的两条SELECT语句:
代码:
SELECT*fromTABLEl
SELECT*FROMTABLE1
上面的两条SQL语句对于查询缓冲是完全不同的SELECTo
而且查询缓冲并不自动处理空格,因此,在写SQL语句时,应
尽量减少空格的使用,尤其是在SQL首和尾的空格(因为,查询
缓冲并不自动截取首尾空格)。
虽然不设置查询缓冲,有时可能带来性能上的损失,但有
一些SQL语句需耍实时地查询数据,或者并不经常使用(可能一
天就执行一两次)。这样就需要把缓冲关了。当然,这可以通过
设置que门「cache_type的值来关闭查询缓冲,但这就将查询缓
冲永久地关闭了。在MySQL5.0中提供了一种可以临时关闭查询
缓冲的方法:
代码:
SELECTSQL_NO_CACHEfieldl,field2FR0MTABLE1
以上的SQL语句由于使用了SQL_NO_CACHE,因此,不管这
条SQL语句是否被执行过,服务器都不会在缓冲区中查找,每
次都会执行它。
我们还可以将my.ini中的querycachetype设成2,这
样只有在使用了SQL_CACHE后,才使用查询缓冲。
代码:
SELECTSQL_CALHE*FROMTABLE1
实现中文字串截取无乱码的方法?
mbsubstr()
session与cookie的区别?
1、session保存在服务器,客户端不知道其中的信息;
cookie保存在客户端,服务器能够知道其中的信息。
2、session不能区分路径,同一个用户在访问一个网站期
间,所有的session在任何一个地方都可以访问到。而cookie
中如果设置了路径参数,那么同一个网站中不同路径下的
cookie互相是访问不到的。
3、session默认需要借助cookie才能正常工作。如果客
户端完全禁止cookie,session,这种方法将失效。
4、session在用户会话结束后就会关闭了,但cookie因
为保存在客户端,可以长期保存。
5、从应用角度上说:session是一个动作状态的持续,是
一个会话,它在服务器中持续存在直到不用为止。cookie在后
继的请求中,客户端将把该信息返回给服务器,从而确定自己
的身份,对于浏览器在反复访问是保持信息是很有用的。
不用新变量直接交换现有两个变理的值?
php的面试题目1.$array[〃anykey〃]和跄真割[anykey]的
区别?
答:单引号和没有单引号区别,就是字符串和常量。而单
引号和双引号的区别,就是字符串和变量吧。
不加单引号的话,php会首先认为他是常量,然后去搜寻
是否存在这个常量,若不存在,则理解为字符串,所以在效率
上就慢了。
2.echo输出语句时候的连接符号:〃.〃和〃,〃。点号和逗号
的区别?
答:echo用点号时先把语句连接再输出,而用逗号就等于
给它传多个参数,不需要进行字符串拼接这一步,效率高!
3.echo,print,printr的区别?
答:echo,直接输出单个或者多个字符串,是PHP语句!
print,打印输出简单类型,是PHP函数!有整型返回值。
我试验了下,都返回loprint.r,格式化打印输出,常用于比
较复杂的类型,如数组,对象之类的,可以输出完整结构,是
PHP函数,返回值类型为布尔型!
4.获取前天的日期,格式如:201*-01-1217:15:20
答:echodate(^Y-m-dh:i:s,z,time()-2*24*60*60);
echodate(〃Y-m-dh:i:s〃,strtotime(〃2daysago〃));未来儿
天的话把ago去掉就行了
5.如何将字符串翻转过来?
答:$str=〃7654321〃;
echostrrev($str);//1234567另一种方法:
$strlen=strlen($str);
for($i=l;$i上面8条优化的详细说明请点击该链接查看
完全优化MySQL数据库性能的八大巧方法
7.PHP的意思?(送一分)
答:Hypertextpreprocessor超文本预处理语言。
8.MYSQL取得当前时间的函数是?格式化日期的函数是?
答:当前日期函数为N0W();格式化日期函数是:
SELECTDATE_FORMAT(〃201*-01-
1117:25:36",Z,%H:%i:%s%m/%d/%Y,z):->17:25:3601/11/201*
其它时间函数:详细请查看该页面MySql格式化时间函数
SELECTDAYOFWEEK(〃1998-02-03〃);->3
SELECTWEEKDAY(〃1997-10-0422:23:00〃);->5
SELECTWEEKDAYC1997-11-05");->2
SELECTDAY0FM0NTH(〃1998-02-03〃);->3
SELECTDAYOFYEARC1998-02-03");->34
SELECTMONTHC1998-02-03");->2
SELECTDAYNAMEC1998-02-05');-/February”
SELECTQUARTERC1998-04-01〃);->2
SELECTWEEKC1998-02-20");->7
SELECTWEEKC1998-02-20",0);->7
SELECTWEEKC1998-02-20",1);->
SELECTYEARC98-02-03z/);->1998
SELECTHOURC10:05:03");->10
SELECTMINUTE("98-02-0310:05:03〃);->5
SELECTSECOND("10:05:03");->3
SELECTPERIODADD(9801,2);->199803
SELECTPERI0D_DIFF(9802,199703);->ll
SELECTTO_DAYS(〃1997-10-07〃);->729669
SELECTTO_DAYS(950501);->728779
SELECTFROM_DAYS(729669)1997-10-07〃
SELECTUNIXTIMESTAMPC1997-10-0422:23:00,z)
>875996580
SELECTFROM_UNIXTIME(875996580);->〃1997-10-
0422:23:00"
SELECTSEC_TO_TIME(2378);->00:39:38
SELECTTIME_TO_SEC(〃00:39:38〃);->2378
9.怎样截取中文且不出现乱码?
答:如果安装了mb扩展可使用mb_substr();可以使用以
下函数:
functioncutstr(Ssourcestr,$startlength,$cutlength){
$returnstr="〃;$i=0;$n=0;
$strlength=strlen($sourcestr);〃字符串的字节数
while(($n=192){〃如果ASCH位高与192,
$returnstr=$returnstr.substr($sourcestr,$i,2);//|艮
据UTF-8编码规范,将2个连续的字符计为单个字符
$i=$i+2;〃实际Byte计为2$n++;〃字串长度计1
}elseif($ascnum>=65&&$ascnum
10.对于大流量的网站,您采用什么样的方法来解决访问量
问题?
答:①最根本的是服务器硬件条件。服务器硬件设备如果
太差,那不管怎么优化都是徒劳!②对数据库进行优化。主要
是减少对数据库的访问量。访问过多会造成服务器CPU过度消
耗,导致服务器受访能力严重下降,解决方法是是前台使用静
态或者动态缓存!
③防盗链。对于Apache服务器,主要是是用
modelrewrite模块通过对URL的正则,进行限制和重定向!
④控制大文件下载。不提供超过2MB的文件下载,或使用
专门的下载服务器,或者上传到web2.0共享网站上。
⑤多主机分流。将不同文件放置在不同的主机,提供镜像
之类的文件下载方式。⑥是用专业的流量分析软件。如google
流量分析。对网站进行精细的流量控制!
11.用PHP写出显示客户端IP与服务器IP的代码?
答:客户端IP获取$_SERVER[〃REMOTE_ADDR〃];服务端IP
12.如何修改SESSION的生存时间?
答:$lifeTime=24*3600;
session_set_cookie_params($lifeTime);sessionstart(
);
详细的设置请查看这篇文章:PHP对session生存时间的
设置详细介绍。
13.有一个网页地址,比如PHP研究室主页:如何得到它的内
容?
答:$src=,,z,;$file=,,D:\\index.htrnl"7;
①
$content=filegetcontents($src);$hfile=fopen($file,w);
$result=fwrite($hfile,$content);
(2)$opsrc=fopen($src,r);$wfile=fopen($file,w);
$result=streamcopytostream($opsrc,$wfile);
14.在HTTPLO中,状态码401的含义是?;如果返回“找不
到文件”的提示,则可用header函数,其语句为?
答:①HTTP/1.0401代表:未授权。②可用
header(〃HTTP/l.0404NotFound〃);15.在PHP中,heredoc是一
种特殊的字符串,它的结束标志必须?
答:
将这段代码转换为opcodes后.结果如下:
1:)
printr($arr);
将看到遍历数组后,数组中每一元素的值都被修改.
在函数(或方法)传参中,将一变量作为参数时\是以引用的
方式传处,还是值的方式传入,主要表现形式是在
sample_call_function($varname)还是
samplecallfunction(&$varname)上.
从概念上分析,值传递是对内容进行〃拷贝〃,引用传递是用
内容进行〃建立快捷方式〃,所以很多答题答案都讲值传递要复制
一次内存数据,引用传递则省去了这个消耗,所以更划算.
但从PHP底层处理方式来看,这种结论回答略显草率了.PHP
底层对于变量内存管理是基于常见的copyonwrite(写时复制)
和changeonwrite(改变时复制).所以对于
$val=z,test,z;
debug_zval_dump($val);
在函数debug_zval_dump中使用到的$val,并不会多开辟一
块内存空间来存放〃test〃的内容.但对于
$val="test";$a=&$val;
debug_zval_dump($val);
则又有不同,这时传参的$val则会新开辟一块内存空间来
存放〃test”.这在PHP源码包,zend_execute.c中有完整的处理
流程.
题目三:include和require的区别是什么?
官方手册中对此的描述是:这两种结构除了在如何处理失败
之外完全一样。include。产生一个警告而require。则导致一
个致命错误。
这个解释其实已经相当详细了.当引用一个外部文件口寸,如
果这个文件打开出错,require将直接中止程序,并抛出一个
FatalError,而include只会抛出一个warning,并继续执行
include下面的语句.
另外.我在一些网站上看到过对include和require区别做
出的如下解释:
require。函数工作方式与XSSI相类似;不管在程序的哪
个部分使用了这个函数,只有程序一开始运行,头文件的内容
就被作为程序本身的一部分来处理。因此,如果您在一个条件
判定语句中使用了require。函数,那么即使这个条件即使不
为真,头文件也会被包含进来。
而include。函数只是在执行到这一条语句时才会把头文
件内容包含进来。如果程序没运行到这里,那PHP是不会管它
的。这就意味着,您在条件判定部分使用include时、它会完
全按照您希望的那样工作。
那么这条解释的正确性究竟如何,我们可以做2个小实验:
文件名:1.php
假设我们只有Lphp,没有2.php按照上述说法,当条件不
为真时,文件也被包含进来,那么因为2.php根本不存在,所以必
然程序会报错.但是上述程序的执行结果显然否定了按上述说法
进行的推理.
第二个实验,使用工具,查看上述代码最终生成的opcode:
1:将这两者比较而言,COOKIE数据由于存放在客户端,减轻
了服务器端存储方面的压力.但数据的安全性相对来说就耍差一
些.所以如果依靠COOKIE存放用户登录信息等敏感数据时,一定
要对其做加密处理.而SESSION数据存放在服务器端,客户端本
身访问不到直接数据,安全性相对COOKIE来说稍稍好一些.但对
服务器的10操作及存储方面会带来一些压力.尤其是PHP默认
的SESSION处理机制,实际上就是将SESSION数据串行化,然后
存放到一个以SESSION_ID为名字的文本文件中,用户量多的情
况下带来的开销不容忽视.好在PHP的SESSION机制是非常灵活
的,提供了相应方法改变SESSION处理机制,比如放到
memcached里或其它地方:-)这得另开文章单独讲了.
题目一:mysqlpconnect与mysqlconnect的区别在哪里?
哪一个更好这道题涉及到了数据库长连接的概念.我们知道,PHP
脚本的运行机制,每次使用数据库之前,都必须使用connect去
连接数据库,而web应用又是并发性非常高的应用场景,如果同
时有10个用户访问,便会有10个进程在运行脚本,相应的,就会
产生10次数据库连接.如果有100个用户同时访问.那么就自然
会产生100次数据库连接.这样便会有两个问题产生:1是频繁
建立和撤消数据库连接.本身的开销就非常大,2是数据库的同
时连接数是有限的.如果有1000个用户请求同时要访问数据库.
而数据库只开放了最高100个连接允许的话,那么就有900个会
进入等待或失败的队列.这就好比是,一群搬运工往屋里搬东西,
每一次都需要开门-->搬东西一>关门的操作,如果有很多搬运工
同时搬,每个人都要执行开门/关门这两步操作的话,显然是会产
生很大的不必要开销.而且如果这道门能同时通过的人数有限,
很多搬运工不得不在外等待.
pcconnect的长连接方式是怎么解决这个问题的呢?
官方手册中对此的描述是:在脚本结束运行时不关闭的连接。
当收到一个永久连接的请求时。PIIP将检查是否已经存在一个
(前面已经开启的)相同的永久连接。如果存在,将直接使用
这个连接;如果不存在,则建立一个新的连接。所谓“相同”
的连接是指用相同的用户名和密码到相同主机的连接。
其机制无非是:初次连接数据库时,便将连接句柄交至父进
程,子进程要使用数据库连接时,直接将父进程手中早已连接好
的句柄交给子进程,这样子进程的连接就成了一种〃虚连接〃-一
它并不用真正去与数据库通讯,只需要从父进程手中拿到已经打
开的连接句柄,这样就大大节省了连接/关闭的开销.另外,多个
子进程,共享父进程的连接句柄,这样实际上数据库对外的连接
数,只是跟父进程之间的个数,1000个用户请求,会产生1000个
子进程,可能只会产生10个父进程,有10个数据库连接.这样就
解决了连接数的问题.
这样看来.长连接的确是很不错的方式.从机理上讲好于
connect.所以长连接更好一些.但事实是并不能这样简单论定
的:-),继续深入下去.
首先,长连接的机制是基于父-子进程模式,也就是说,只能
跑于模块(apache-phpmodule或iis的isapi)方式,不适用于
CGI和CLI模式,因为CGI和CLI模式都是单独进程,执行完就
关闭,没有父进程控制.也就谈不上长链接.
另外,由于多个子进程共用父进程的连接句柄,有时会出现
一些意外,比如某个子进程由于一些原因,造成一个连接句柄死
锁,便会搞得共享这个句柄的所有其它子进程都无法使用数据库.
这时候只有重启web服务才能恢复.
优缺点都摆明了出来.至于用哪一个,大家自己根据情况选
择吧.
题目二:CGI模式,模块模式与CLI模式运行PHP的区别以
CGI方式运行时,webserver将用户请求以消息的方式转交给
PHP独立进程,PHP与web服务之间无从属关系.
纯粹调用一返回结果的形式通讯.而模块方式,则是将P1IP
做为web-server的子进程控制,两者之间有从属关系.最明显的
例子就是在CGI模式下,如果修改了PHP.INI的配置文件,不用
重启web服务便可生效,而模块模式下则需要重启web服务.
CLI则是命令行接口,用于在操作系统命令行模式下执行
PHP,比如可以直接在win的cmd或linux的shell模式下直接
输入phpa.php来得到结果.它与CGI模式最大的不同的地方在
于既不会输出HTTP头信息(CGI模式除了输出用户能看到的结
果外,还会输出用户不能直接看到的HTTP头信息),抛出的信息
也直接以文本方式而不以HTML方式给出,比如新建一个
test,php,
写入内容,在浏览器中可以看到以HTML表格描述的信息,而
在命令行输入phptest.php则会直接看到纯文本的输出.
题目三:用PHP实现一个双向队列?(腾讯公司面试题)上次
有人问过我这道题,我个人认为用数组函数处理这道题绰足有余
了.
以上四个函数已实现双向队列的四个基本操作.可以写一个
class将其封装起来即可.
题目四:遍历一个目录及其子目录(新浪公司面试题)与网上
普遍给的代码不同,这道解答,我用了PHP5更安全的scandir函
数,以及迭代(foreach)和递归.
各位自己研究吧.未负责的测试/经验感觉应该比网上普遍
的要快一些些.
foreach(scandir($rDir)as$v){
if($v=二〃・〃||$v=二〃・・〃)continue;
is_dir($rDir.〃/〃.$v)?$r[$v]=showDir($rDir.〃/〃.$v):1
;}
return$r;)
printr(showDir(z,.,z));?>
-PHP/MYSQL知识
1、用PHP打印出前一天的时间格式是201*-1-188:30:30
答案:date(/zY-m-dH:i:s〃,strtotimeC-ldaysz,)):
2、echo(),print(),printr()的区别
答案:echo是PHP语句,print和print_r是函数,语句没
有返回值,函数可以有返回值print()只能打印出简单类型变
量的值(如int,string)print_r()可以打印出复杂类型变量
的值(如数组,对象)echo输出一个或者多个字符串
3、能够使HTML和PHP分离开使用的模板,你使用过什么
模板?答案:Smartydiscuz等等他们的原理都是变量替换。
4、你使用过框架模式吗?写出你接触过的框架。答案:
thinkphpfleaphpqeephpzend等等
5、使用哪些工具进行版本控制?答案:最常见的是SVN
6、如何实现字符串翻转?答案:使用函数strrev()
7、优化MYSQL数据库的方法。
答案:要点:1,数据库中的表越小,在它上面执行的查询
也就会越快
2.尽量把字段设置为NOTNULL,这样在执行查询的时候,
数据库不用去比较NULL值
3.使用连接(JOIN)来代替子查询
4.使用联合(UNION)来代替手动创建的临时表5.使用外键
索引
6.对查询语句进行优化8、实现中文字串截取无乱码的方
法。
答案:直接使用PHP函数substr截取中文字符可能会出现
乱码,解决办法:1、使用mbstring扩展库的mb_substr截取
就不会出现乱码了。2、自己书写截取函数,但效率不如用
mbstring扩展库来得高。
3、如果仅是为了输出截取的串,可用如下方式实现:
substr($str,0,30).chr(0)o
二PHP/MYSQL编程
1某内容管理系统中,表message有如下字段id文章
idtitle文章标题content文章内容
category_id文章分类idhits点击量
创建上表,写出MySQL语句答案:
CREATETABLE'wt_ceshi2'(
'id'INTNOTNULLAUTO_INCREMENTPRIMARYKEY,'title'VARCH
AR(127)N0TNULL,'content'VARCHAR(127)NOTNULL,'category_i
d'INTNOTNULL,'hits'INTNOTNULL)
2同样上述内容管理系统:表comment记录用户回复内容,
字段如下comment_id回复id
id文章id,关联message表中的idcommentcontent回复
内容
现通过查询数据库需要得到以下格式的文章标题列表,并按
照回复数量排序,回复最高的排在最前面
文章id文章标题点击量回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复
数量显示为0答案:
$sql=mysql_query("SELECTid,title,hits,count(commen
t_id)asnumFROMmessageaLEFTJOINcommentbONa.id=b.comment
idORDERBYnumDESCn;While($result=mysqlfetcharray($sq
D){
$num=0;
If($result[num])
$num=$result[num];
$dispMemo.=”
$result[id].v.$result[title].vv.$result[hits].vv
・$num."";}
三、PHP程序
1.写出以下程序的输出结果$a=$b>$c?4:5;echo$a;?>
答案:4
2,写出以下程序的输出结果
答案:Hotdogok
四简答题
1.在PHP中,当前脚本的URL怎么取?上一个页面的URL
怎么写?答案:当前
URL:〃http:〃〃.$SERVER:"HTTPHOST"].$SERVER[Z,P1IPSELF”
].〃?〃・$_SERVER["QUERY_STRING〃];上一个页面URL:
$_SERVER[〃HTTP_REFERER〃]
2.在HTTP1.0中,状态码401的含义是?如果返回“找不
到文件”的提示,则可用header函数,其语句怎么写?
答案:401表示未授权;header(“HTTP/l.0404NotFound
“);
3,数组函数arsort的作用是?语句errorreporting()
的作用是?
答案:arsort:对数组进行逆向排序并保持索引关系
e门x)r_reportingO的作用是:打印错误等级4.写出一个正则表
达式,过虑网页上的所有JS/VBS脚本。答案:$script="以下
内容不显示:〈scriptlanguage='javascript?〉alert(J
cc');〈/script〉”;echopreg_replace("/
〈script厂〉].*?〉.*?(/script>/si","替换内容
”,$script);
5.语句include和require都能把另外一个文件包含到当
前文件中,它们的区别是什么?;为了避免多次包含同一文件,
可以什么语句来代替它们?
答案:在如何处理失败时,include。产生一个警告而
require()则导致一个致命错
误;require^once()/includeonce()
6.类的属性可以序列化后保存到session中,从而以后可
以恢复整个类,这要用到的函数是?
答案:serialize()/unserialize()
7.SQL中LEFTJOIN的含义是什么?如果tbl_user记录了
学生的姓名(name)和学号(ID),tbl,score记录了学生(有的
学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩
(score)以及考试科目(subject),要想打印出各个学生姓名及
对应的的各科总成绩,则可以用SQL语句?答案:
自然左外连接
createdatabasephpinterview;usephpinterviewcreaterab
letbl_user(
IDintnotnull,namevarchar(50)notnull,primarykey(ID));
createtabletblscore(
IDintnotnull,scoredec(6,2)notnull,subjectvarchar(20
));
insertintotbluser(ID,name)values(1,beimu);inser二in
totbluser(ID,name)values(2,aihui);
insertintotblscore(ID,score,subject)values(1,90,'
语
文,);insertintotblscore(ID,score,subject)values(1,80,
数
学’);insertintotbl_score(ID,score,subject)values(2,86,
数
学’);insertintotblscore(ID,score,subject)values(2,96,
语
文');selectA.id,sum(B.score)assumscorefromtbluserAlef
tjointblscoreBonA.ID=B.IDgroupbyA.id
8,写一个函数,能够遍历一个文件夹下的所有文件和子文
件夹。答案:〈?php
functionmyscandir($dir){
$files=array();if(is_dir($dir)){
if($handle=opendir($dir)){
while(($file=readdir(Shandie))!"false){
if($file!=“&&$file!=".・"){
if(is_dir($dir."/".$file)){
$files[$file]=my_scandir($dir.u/.$file);}else{
$files[]=$dir.a/u.$file;}}
notnull)
closedir($handle);return$files;}}}
printr(myscandir("D:ProgramFilesInternetExplorer
MUI"));?)
9.简述论坛中无限分类的实现原理。
答案:表中建一个对应父类的ID,然后进行关联。
PHP面试题汇总
面试题1
1、用PHP打印出前一天的时间格式是201*-5-
1022:21:21printdate(,/Y-m-d,z,time()-86400);
2、echo(),print(),print,()的区别
echo语言结构,print/print_r是函数.print是一般性输
出,print_r输出包含底层类型.
3、能够使HTML和PHP分离开使用的模板
4、如何实现PHP、JSP交互?
5、使用哪些工具进行版本控制?cvs,subversion
6、如何实现字符串翻转?printstrrev(/zabcz,);
7、优化MYSQL数据库的方法。
针对经常用到的关键列多做索引,explain
8、谈谈事务处理
事务处理是指连续性的动作不可被打断的过程,事务处理失
败会撤销相应的影响
9、apachemysqlphp实现最大负载的方法
主要是配置文件的优化了,另外用linux跑要比用
windows跑效果好一点。条件允许的话,将mysql和apache分
离开不用同一台机器跑也好一点。・・.软件角度的提升,不如硬
件角度的提升来得快
10、实现中文字串截取无乱码的方法。mb_substr(,这样
一来我的字符串就不会有乱码了',0,7,'utf-8,);中文是
gb2312还是utf8?
gb2312和utf8特点判断下就可以了.
面试题2
var$empty=〃";var$null=NULL;var$bool=FALSE;var$no^Se
t;
var$array=array();1.
$a=\\,,hello\\/,;$b=&$a;unset($b);$b=\\〃world\\〃;what
is$a?
〃hello〃2.
$a=l;$x=&$a;$b=$a;whatis$b?13.
$x=empty($array);whatis$x?trueorfalsetrue
4.您是否用过版本控制软件?如果有您用的版本控制软件的
名字是?是.cvs,subversion.
5.您是否用过模板引擎?如果有您用的模板引擎的名字是?
是.smarty
6.请简单阐述您最得意的开发之作.
7.对于大流量的网站,您采用什么样的方法来解决访问量问
题?
针对动态性不强的ye,可以生成静态的;交互性强的,没多
少办法,我仍然相信性能角度投资软件不如投资硬件.
8.用PHP写出显示客户端IP与服务器IP的代码:
print$_SERVER[,/remote_addr/,].$_SERVER[〃server_addr〃
];
面试题3
一、PHP/MySQL编程
1)某内容管理系统中,表message有如下字段id文章
idtitle文章标题content文章内容
category_id文章分类idhits点击量
创建上表,写出MySQL语句DROPTABLEIFEXISTSmessage;
CREATETABLEIFNOTEXISTSmessage(
idINTNOTNULLAUTO_INCREMENT,
titleVARCHAR(200)NOTNULLDEFAULT,,Z,,contentTEXT,
category_idINT,#这里估计还要改,暂时放下hitsINT,
PRIMARYKEY(id));
CREATEINDEXmessage_ti11e_indexONmessage(title);
2)同样上述内容管理系统:表comment记录用户回复内容,
字段如下comment_id回复id
id文章id,关联message表中的idcommentcontent回复
内容
现通过杳询数据库需要得到以下格式的文章标题列表,并按
照回复数量排序,回复最高的排在最前面
文章id文章标题点击量回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复
数量显示为0
SELECTm.id,m.title,m.hits,count(comment.id)astotalF
ROMmessagemLEFTJOINcommentON(m.id=comment.id)GROUPBY(m.
id)ORDERBYtotalDESC;
3)上述内容管理系统,表category保存分类信息,字段如
下
categoryidint(4)notnullauto_increment;categroy_nam
evarchar(40)notnull;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
纯javascript(php取出所有分
类),javascript/post/php,javascript/ajax/php...
二、PHP文件操作1)
上述内容管理系统:用户提交内容后,系统生成静态HTML
页面;写出实现的基本思路if(!fileexists($htmlfile)){
ob_start();
$html=obgetcontents();fileputcontents($file,$ht
ml);obendclean;}
header(''Location:,z.$html_file);exit;
2)简单描述用户修改以发布内容的实现流程和基本思路
三、PHP程序
1)写出以下程序的输出结果
$b=201;
$c=40;
$a=$b>$c?4:5;
echo$a;?>4
2)写出以下程序的输出结果$st厂\\〃cd\\〃;
$$str=\\/zhotdog\\/z;
$$str.=\\〃ok\\”;
echo$cd;?>
hotdogok
面试题4一.简答题
L请说明php中传值与传引用的区别。什么时候传值什么
时候传引用?・・・拷贝消耗比较大时用引用
2.在PHP中errorreporting这个函数有什么作用?控制
错误输出级
3.请写一个函数验证电
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026学年湖北省老河口市三年级语文期末点睛提升黑金提分题(附答案)详细答案和解析
- 2025-2026学年大象的牙膏说课稿
- 2026年广东省高一生物第5单元细胞结构与功能习题
- 2025-2026学年《俗世奇人》导读说课稿
- 2025-2026学年保健瓶子设计说课稿
- 2025-2026学年大班健康蛀牙说课稿
- 2025-2026学年奥尔夫节奏训练型说课稿
- 2026年云南省开远市高考历史考试卷及1套参考答案
- 2025-2026学年《早》说课稿
- 2026下半年事业编医疗卫生岗招聘考试全真模拟题库及解析
- 2026年国企综合管理岗招聘笔试试题(含完整答案解析)
- 2025年行政执法人员《行政执法知识》真题及答案解析
- 中化集团人才测评真题及答案
- 实施指南(2026)《YBT 6120-2023贝氏体非调质钢》
- 2025年及未来5年市场数据中国再生PET市场运行态势及行业发展前景预测报告
- 全国会计领军(后备)人才(企业类)选拔考试真题回忆
- 婴儿生长发育曲线解读
- 《深度学习原理及应用》课件全套 殷丽凤 第1-12章 感知机-预训练模型
- 垃圾分类与回收课件
- 餐馆转让协合同范例
- 《腕关节X线解剖》课件
评论
0/150
提交评论