999kao.com
【面试题】PHP经典面试题(基础型)附答案

下面的PHP代码输出什么?( )?php$s = ‘12345’;$s[$s[1]] = ‘2’;echo $s;?

A.12345

B.12245

C.22345

D.11345


参考答案:D


下面的PHP程序运行结果是什么?( )?phpfunction print_A(){$A=’I love php’;echo ‘A的值为:’.$A;return $A;}$B = print_A();echo ‘B值为:’.$B;?

A.A值为:I love php. B值为:I love php

B.A值为: B值为:I love php

C.A值为: B值为:

D.A值为:I love php B值为:


参考答案:A


以下PHP代码的运行结果是()。?phpob_start();for($i=0;$i10;$i++){echo $i;}$output = ob_get_contents();ob_end_clean();echo $ouput;?

A.12345678910

B.1234567890

C.0123456789

D.Notice提示信息


参考答案:D


下面的PHP程序运行结果是什么?( )?php$A=’hello’;function print_A(){$A = ‘php mysql!!’;Global $A;echo $A;}eho $A;print_A();?

A.hello

B.php mysql!!

C.hello hello

D.hello php mysql!!


参考答案:C


A: ()? B: I've got a bad cough.

A、What's the matter with you

B、What is it like

C、How was your day yesterday


参考答案:A


PHP经典面试题(基础型I)附答案求职与招聘 往往少不了面试与笔试,作为一个php程序员、多多少少都会有类似的经历以下是本人收集并整理的PHP面试题目,希望对同行们有所帮助,找到一份合适的php开发工作!(共三节)以下是面试的题目(一),下一篇: PHP经典面试题(基础型II) 已经赋予答案:1、用PHP打印出前一天的时间格式是2009-02-10 22:21:21(2分)echo date(Y-m-d H:i:s, strtotime(-1 day);或者$yesterday = time() - (24 * 60 * 60);echo today:.date(Y-m-d H:i:s).n;echo yesterday:. date(Y-m-d H:i:s, $yesterday).n; 2、echo(),print(),print_r()的区别(3分)echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print只能打印出简单类型变量的值(如int,string) print_r可以打印出复杂类型变量的值(如数组,对象) echo - 输出一个或者多个字符串 3、能够使HTML和PHP分离开使用的模板(1分)smarty,Heyes Template Class等5、使用哪些工具进行版本控制?(1分)CVS和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端.6、如何实现字符串翻转?(3分)strrev()或者$str = abcdefg;function strrevv($str)$len=strlen($str);$newstr = ;for($i=$len;$i=0;$i-)$newstr .= $str$i;return $newstr;$showstr = strrevv($str);echo $showstr.;-7、优化MYSQL数据库的方法。(4分,多写多得)(1).选取最适用的字段属性,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。(2).使用连接(JOIN)来代替子查询(Sub-Queries)(3).使用联合(UNION)来代替手动创建的临时表(4).尽量少使用 LIKE 关键字和通配符(5).使用事务和外键 或者(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率 (2).系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master(3).(1)和(2)超越PHP Programmer的要求了,会更好,不会没关系.检查有没有少加索引 (4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句 (5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) . where article_id = 就可以了,不要先select * . where article_id = 然后msql_num_rows.只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update . set title = where article_id = 不要set content = (大文本)(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度8、PHP的意思(送1分)Hypertext Preprocessor9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)now(), DATE_FORMAT(date,format)10、实现中文字串截取无乱码的方法。(3分)mb_substr()-11、您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?(1分)TortoiseSVN-1.2.6 svn-1.2.312、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)smarty13、请简单阐述您最得意的开发之作(4分)这个自己想,因为你不再是菜鸟,每个人都有不同的思路,思路也会随之自己的知识而改变14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)首先,确认服务器硬件是否足够支持当前的流量其次,优化数据库访问。第三,禁止外部的盗链。第四,控制大文件的下载。第五,使用不同主机分流主要流量第六,使用流量分析统计软件。-15、用PHP写出显示客户端IP与服务器IP的代码1分)/显示客户端Ifunction get_client_ip() #if(getenv(HTTP_CLIENT_IP) $client_ip = getenv(HTTP_CLIENT_IP); elseif(getenv(HTTP_X_FORWARDED_FOR) $client_ip = getenv(HTTP_X_FORWARDED_FOR); elseif(getenv(REMOTE_ADDR) $client_ip = getenv(REMOTE_ADDR); else $client_ip = $HTTP_SERVER_VARREMOTE_ADDR;return $client_ip;/服务器IPfunction get_server_ip()if (isset($_SERVER)if($_SERVERSERVER_ADDR) $huoqu_ip=$_SERVERSERVER_ADDR;else $huoqu_ip=$_SERVERLOCAL_ADDR;else $huoqu_ip=getenv(SERVER_ADDR);return $huoqu_ip;16、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)require()和include()除了怎样处理失败之外在各方面都完全一样。include()产生一个警告而require()则导致一个致命错误。换句话说,如果你想在丢失文件时停止处理页面,用require()。include() 就不是这样,脚本会继续运行。require()无论如何都会包含文件,而include()可以有选择地包含.www.代替用include_once

有下列程序: include include "string.h" void tim(char *s[],int n)

有下列程序: #include <stdio.h> #include "string.h" void tim(char *s[],int n) { char *t;int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strlen(s[i])>strlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;} } main() { char *ss[]= {"bcc","bbcc","xy","aaaacc","aabcc"}; fun(ss,5);printf("%s,%s\n",ss[0],ss[4]); } 程序的运行结果是( )。

A.xy,aaaacc

B.aaaacc,xy

C.bcc,aabcc

D.aabcc,bcc


正确答案:A
解析:从main函数入手,定义了指向字符串的指针数组,并赋予了初始值,调用fun()函数,函数的功能是:比较数组中各个元素的长度,按元素长度从小到大排列数组元素,所以执行fun(ss,5)函数后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"},所以调用printf函数输出ss[0],ss[4]的值分别为xy,aaaacc。


学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),该函数的功能是:把高于等于平均分的学生数据放在b所指的数组中,低于平均分的学生数据放在c所指的数组中,高于等于平均分的学生人数通过形参n传回,低于平均分的学生人数通过形参m传回,平均分通过函数值返回。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <stdio.h>

define N 12

typedef struct

{char num[10];

double S;

} STREC;

double fun(STREC *a,STREC *b,STREC *C,int *n,int *m)

{

}

main()

{

STREC s[N]={{“GA05”,65},{“GA03”,86},

{“GA02”,76},{“GA04”,95},{“GA01”,93},

{“GA07”,78},{“GA08”,68},{“GA06”,88},

{“GA09”,60},{“GAll”,54},{“GAl2”,56},

{“GAl0”,98}};

STREC h[N],l[N],t;

FILE *out;

int i,j,m,n;

double ave;

ave=fun(S,h,l,&n,&m);

printf("The %d student data which is higher than %7.3f:\n",n,ave);

for(i=0;i<n;i++)

printf("%s %4.lf\n",h[i].num,

h[i].s);

printf("\n");

printf("The %d Student data which iS lower than%7.3f:\n",m,ave);

for(i=0;i<m;i++)

printf("%s %4.1f\n",l[i].num, l[i].s);

printf("\n");

ut=fopen("out26.dat", "w");

fprintf(out, "%d\n %7.3f\n",n,ave);

for(i=0;i<n-1;i++)

for(j=i+1;i<n;j++)

if(h[i].s<h[j].s)

{t=h[i];h[i]=h[i];h[j]=t;}

/*分数从现到低排列*/

for(i=0;i<n; i++)

fprintf(out,“%4.1f\n",h[i].s);

fprintf(out,"%d\n %7.3f\n",m,ave);

for(i=0;i<m-1;i++)

for(j=i+1;i<m;j++)

if(l[i].s<l[j].s)

{t=l[i];l[i]=l[j];l[j]=t;}

/*分数从高到低排列*/

for(i=0;i<m;i++)

fprintf(out,"%4.1f\n",l[i].s);

fclose(out);

}


正确答案:double fun (STREC *aSTREC *bSTREC *C int *nint *m) { int i; double av=0.0; *n=0; *m=0; for(i=0;iN;i++) av=av+a[i].S; av=av/N; /*求平均值*/ for(i=0;iN;i++) if(av=a[i].s) { b[*n]=a[i]; /*将高于等于平均分的学生存从所指存储单元中并统计人数*/ *n=*n+l; } else { c[*m]=a[i]; /*将低于平均分的学生存入c所指存储单元中并统计人数*/ *m=*m+1; } return av; /*返回平均分*/ }
double fun (STREC *a,STREC *b,STREC *C, int *n,int *m) { int i; double av=0.0; *n=0; *m=0; for(i=0;iN;i++) av=av+a[i].S; av=av/N; /*求平均值*/ for(i=0;iN;i++) if(av=a[i].s) { b[*n]=a[i]; /*将高于等于平均分的学生存从所指存储单元中,并统计人数*/ *n=*n+l; } else { c[*m]=a[i]; /*将低于平均分的学生存入c所指存储单元中,并统计人数*/ *m=*m+1; } return av; /*返回平均分*/ } 解析:本题中第1个循环的作用求出所有分数的总和,只有进行了av=av/N后才得到平均值(我们在前面的程序中碰到过类似问题)。第2个循环的作用是将高于等于平均分的学生存/kb所指存储单元中,将低于平均分的学生存入c所指存储单元中。同一结构体变量之间可以互相赋值。
本程序中直接用*n,*m来分别表示b,c的下标,注意开始时要给*n,*m赋0,且使用时不能少*号。因为单独的n, m是一个指针变量,而我们要用的是它所指向的那个存储单元中的值。


——Mary, you clean the room today, ?

——But I cleaned it yesterday. It’s Lily’s turn.

A、don’t you

B、will you

C、do you

D、didn’t you


参考答案:B


学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fjun(),该函数的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

include <stdio.h>

define N 12

typede f struct

{ char num[10];

double s;

} STREC;

double fun (STREC *a,STREC *b, int *n)

{

}

main ( )

STREC s IN] = { { "GA05", 85 }, { "GA03", 76 },

{"GA02", 69}, {"GA04", 85}, {"GA01", 91},

{"GA07", 72}, {"GA08", 64}, {"GA06", 87},

{"GA09", 60}, { "GAll", 79 }, { "GA12", 73},

{"GA10", 90 } };

STREC h[N],t;

FILE *out;

int i ,j,n;

double ave;

ave=fun (s, h, &n);

printf("The %d student data which is

higher than %7.3f: In", n, ave);

for(i=0; i<n; i++)

printf ("%s %4.1f\n",h[i] .num, h[i] .s);

printf ("\n");

out=fopen ("out90.dat", "w");

fprintf(out, "%dkn %7.3f\n",n,ave);

for(i=0; i<n-1; i++)

for (j=i+l; j<n; j ++)

if (h[i] .s<h[j ] .s)

{t=h Ii] ;h[i]=h[j] ;h[j]=t; }

/*分数从高到低排列*/

for(i=0; i<n; i++)

fprintf(out, "%4.1f\n",h[i] .s);

fclose (out);

}


正确答案:double fun (STREC *a STREC *b int *n) { int i; double ay=0.0; *n=0; for(i=0;iN;i++) av=av+a[i].s; ay=ay/N; /*求平均值*/ for(i=0;iN;i++) if(av=a[i].s) { b[*n]=a[i];*n-*n+l;} /*将高于等于平均分的学生存从所指存储单元中并统计人数*/ return ay; /*返回严均分*/ }
double fun (STREC *a, STREC *b, int *n) { int i; double ay=0.0; *n=0; for(i=0;iN;i++) av=av+a[i].s; ay=ay/N; /*求平均值*/ for(i=0;iN;i++) if(av=a[i].s) { b[*n]=a[i];*n-*n+l;} /*将高于等于平均分的学生存从所指存储单元中,并统计人数*/ return ay; /*返回严均分*/ } 解析:本题中第1个循环的作用求出所有分数的总和,只有进行了av=av/N后才得到平均值(我们在前面的程序中碰到过类似问题)。第2个循环的作用是将高于等于平均分的学生存入b所指存储单元中。同一结构体变量之间可以互相赋值。
本程序中直接用*n来表示b的下标,注意开始时要给,*n赋0,且使用时不能少*号。因为单独的n是一个指针变量,而我们要用的是它所指向的那个存储单元中的值。


print()和echo()有什么区别?()

A.print()能作为表达式的一部分,echo()不能

B.echo()能作为表达式的一部分,print()不能

C.echo()能在CLI(命令行)版本的PHP中使用,print()不能

D.print()能在CLI(命令行)版本的PHP中使用,echo()不能


参考答案:A

更多 “【面试题】PHP经典面试题(基础型)附答案” 相关考题
考题 单选题print()和echo()有什么区别?()A print()能作为表达式的一部分,echo()不能B echo()能作为表达式的一部分,print()不能C echo()能在CLI(命令行)版本的PHP中使用,print()不能D print()能在CLI(命令行)版本的PHP中使用,echo()不能正确答案:C解析:暂无解析

考题 以下程序的执行结果是______ include include void print(int n) { if(n以下程序的执行结果是______include<iostream.h>include<iomanip.h>void print(int n){if(n!=0){print(n-1);for(int i=1;i<=n;i++=cout<<setw(3)<<i;cout<<endl;}}void main(){print (4);}正确答案:11 21 2 31 2 3 411 21 2 31 2 3 4

考题 在UNIX系统中,Shell程序(19)实现显示用户主目录以及当前命令的进程标识符。A.cho UserHome directory:$LOGNAME echo Carrent shell's PID:$$B.echo UserHome directory:$HOME echo Carrent shell's PID:$@C.echo UserHome directory:$ LOGNAME echo Carrent shell's PID:S@D.echo UserHome directory:$HOME echo Carrent shell's PID:$$正确答案:D解析:本题考查的是UNIX系统中Shell变量方面的知识。在UNIX系统中,Shell变量可分为三种类型:用户定义变量、系统定义变量和Shell定义变量。用户定义变量必须以字母或下划线开始,可以包含字母、下划线和数字的字符序列。用户定义的Shell变量能用赋值语句置初值或重置值。例如:ux=UNIX。系统定义变量$LOGNNAME的含义是用户的注册名;系统定义变量$HOME的含义是用户主目录名。Shell定义变量$$表示当前命令的进程标识数;shell定义变量$@表示所有位置参量,即相当于$1,$2,$3,…,其含义与$*基本相同,但当用双引号转义时,“$@”还是能分解成多个参数,但“$*”则合并成一个参数。Shell命令echo将它的实参写到标准输出上;echo可用于在命令文件中产生诊断信息,向管道发送已知数据以及显示环境变量的内容。例如,命令echo This is my book的含义是在屏幕上显示This is my book。综上分析,实现显示用户主目录以及当前命令的进程标识符的正确答案为D。

考题 简述echo,print,printr的区别。正确答案:Echo 是php语句,无返回值。Print,printr是函数,有返回值。Print只能打印出简单类型变量的值(如int,string)Printr可以打印出复杂类型变量的值(如数组,对象)Echo输出一个或者多个字符串

考题 以下程序的执行结果是【】。 include include void pnnt(int n) { if (n!=0以下程序的执行结果是【 】。include<iostream.h>include<iomanip.h>void pnnt(int n){if (n!=0){Print(n-1);for (int i=1;i<=n;i++)cout<<setw(3)<<i;cout<<endl;}}void main(){print(4);}正确答案:11212312341121231234

考题 echo,print(),print_r(),printf(),sprintf(),var_dump()有什么区别?正确答案:E.cho:是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)P.rint:是语句不是函数,有返回值1,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。P.rint_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值P.rintf:是函数,把文字格式化以后输出(参看C语言)S.printf:是函数,跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。V.ar_dump:函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。

考题 问答题简述echo,print,printr的区别。正确答案:Echo 是php语句,无返回值。Print,printr是函数,有返回值。Print只能打印出简单类型变量的值(如int,string)Printr可以打印出复杂类型变量的值(如数组,对象)Echo输出一个或者多个字符串解析:暂无解析

考题 学生的记录由学号和成绩组成,N名学生的数据已存放在主函数的结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。[注意] 部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的花括号中填入所编写的若干语句。[试题源程序]include<stdio.h>define N 8typedef struct{char num[10];double s;}STREC;double fun(STREC *a, STREC *b, int *n){}void main(){STREC s[N]={{"GA05", 85},{"GA03", 76}, {"GA02", 69}, {"GA04", 85},{"GA01", 91}, {"GA07", 72}, {"GA08", 64},{"GA06", 87}};STREC h[N], t; FILE *out;int i, j, n;double ave;ave=fun(s, h, &n);printf("The %d student data which is lower than %7.3 f:\n", n, ave);for(i=0; i<n; i++)printf("%s %4.1f\n", h[i]. num, h[i].s);printf("\n");ut=fopen("out.dat", "W");fprintf(out, "%d\n%7.3f\n", n, ave);for(i=0; 2<n-1; i++)for(j=i+1; j<n; j++)if(h[i]. s>h[j].s){t=h[i];h[i]=h[j];h[j]=t;}for(i=0; 2<n; i++)fprintf(out, "%4.1f\n", h[i].s);fclose(out);}正确答案:int fun(STREC *a STREC *b int *n){double ave=0.0;int i j=0;*n=0;for(i=0; iN; i++)ave+=a[i].s;ave/=N;for(i=0; iN; i++)if(a[i]. save){b[j]=a[i];(*n)++;j++;}return ave;}int fun(STREC *a, STREC *b, int *n){double ave=0.0;int i, j=0;*n=0;for(i=0; iN; i++)ave+=a[i].s;ave/=N;for(i=0; iN; i++)if(a[i]. save){b[j]=a[i];(*n)++;j++;}return ave;} 解析:本题的设计思路是:(1)定义两个变量,分别用于保存总分和平均值,定义循环变量并赋初值:(2)利用循环语句遍历所有学生的分数,累加求和并计算初值;(3)再次遍历结构体数组,找出低于平均分的分数,把该学生的记录保存在形参数组b中,并记录其个数;(4)用return语句返回平均值。

考题 问答题echo,print(),print_r(),printf(),sprintf(),var_dump()有什么区别?正确答案:E.cho:是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)P.rint:是语句不是函数,有返回值1,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。P.rint_r:是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值P.rintf:是函数,把文字格式化以后输出(参看C语言)S.printf:是函数,跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。V.ar_dump:函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。解析:暂无解析

考题 在Unix系统中,Shell程序(57)实现显示用户主目录以及当前命令的进程标识符。A.echo UserHome directory:$LOGNAME echo Current shell's PID:$$B.echo UserHome directory:$HOME echo Current shell's PID:$@C.echo UserHome directory:$LOGNAME echo Current shell's PID:$@D.echo UserHome directory:$HOME echo Current shell's PlD:$$正确答案:D解析:Unix系统有很多种产品,每种产品的命令略有不同,但基本一致。Shell环境定义了Unix与用户进行交互的方式。环境特性由包含名称和值的环境变量定义。以下是一些常见的缺省设置的环境变量。(1)HOME定义用户的主目录;CD命令的缺省目录。(2)LOGNAME包含用户名。(3)MAIL确定系统查找邮件的位置。(4)PATH设置系统用于查找并执行命令的目录。(5)SHELL决定运行的shell。(6)TERM指定准备输出的终端类型。(7)TZ提供当前时区及其与格林威治标准时间的差值。(8)EDITOR确定缺省的编辑器。(9)DISPLAY指定窗口显示主机。在Shell命令中,echo命令可以显示Shell变量的内容或值。在Shell中有一些特殊意义的变量,由Shell自己管理,这些特殊变量有:(1)$#内存位置参数的个数。(2)$$当前命令的进程标识符。(3)$1最后一个后台进程的标识符。(4)$*所有位置参数字符串。(5)$@与$*相似(但与$*的值略有区别)。