iLinux

自由、梦想、飞翔 --- Free Dream Soar

forlinuxID:forlinux
[修改头像]
76230次访问,排名1054好友0人,关注者0
forlinux的文章
原创 63 篇
翻译 0 篇
转载 49 篇
评论 68 篇
只爱LINUX的公告

机遇+努力=成功
努力才会有希望...
点击这里给我发消息
下载Firefox浏览器
最近评论
forlinux:下载 2008-4-2日更新(支持插件式开发) 版本的话,就包含源码了,不用再反编译,o(∩_∩)o...
zjt19851218:上一次反编译了前辈的程序,获益很大,在此表示最诚挚的感谢!!
zjt19851218:zhaojiantao1218@163.com
forlinux:# Project members authenticate over HTTPS to allow committing changes.
svn checkout https://universalquery.googlecode.com/svn/trunk/ universalquery --username laiyunqing

When prompt……
forlinux:2008-4-2日更新 的就包含了源码啊!
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
相册
只爱这一秒
.NET资源
.net Free soft
dotnet开源
Filehelper-Exp/Imp Data2DB
MSDN-library
Ajax Framework
jquery——The writte less,do more
prototype.js
prototype.js开发者文档
JAVA资源
java开源大全
中国IT实验室ECLIPSE专题
linux资源
202.96.64.144
ChinaUnix网友空间
Cooperative Linux(colinux)
OpenSSH For Windows
Oracle On Linux
健兔linux
成都理工大学FTP
班图LINUX
红帽Linux
长江大学FTP
鳥哥的Linux私房菜
lnux社区
linuxsir.org
linux伊甸园
linux公社
PHP资源
Apache with Open SSL
Apache软件历史版本
phpv.net
中日韩翻译
数据库相关
Oracle NetWorking FAQ
友情链接
baidu博客分站
SourceForge主页
漂在生活
闲云
存档

原创 PHP面试题目及其解答

新一篇: 使用XmlHttp编写兼容多浏览器的ajax WEB页面

 

  PHP部分
1  请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
     传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。
2  在PHP中error_reporting这个函数有什么作用?
    设定php脚本的错误报告级别,说实话,我没怎么用过,我现在用的是C
#开发,。
3  请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
/*
检查邮件地址是否为邮件地址,返回逻辑值
*/
function CheckMailAdr($str){
return(eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$str));
}


4  简述如何得到当前执行脚本路径,包括所得到参数。
说明:例如有一个脚本 www
.domain.com,传给他的参数有参数1,参数2,参数3…。传递参数的方法有可能是GET有可能是POST,那么现在请写出类似:http://www.domain.com/script.php?参数1=值1&参数2=值2.....  的结果
    关于前执行脚本路径感觉有点歧义:若是得到该脚本在服务器上的绝对路径用 $_SERVER[‘APPL_PHYSICAL_PATH’].若是该脚本的URL则可以用获取
    获取所有参数:可以用以下方法:
//获取post的数据
while (list($var, $value= each($HTTP_POST_VARS)) 
{
    
echo "$var = $value n";
}
//获取get方式的数据
while (list($var, $value= each($HTTP_GET_VARS)) 
{
    
echo "$var = $value n";
}
5  有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。
(该函数必须自己实现,不能使用php函数)
可以用冒泡排序
<?php 
function BubbleSort($str

for ($i=0;$i<count($str);$i++
{     
    
for ($j=count($str)-2;$j>=$i;$j--
    { 
            
if($str[$j+1]<$str[$j]) 
            {    
                
$tmp = $str[$j+1]; 
                 
                
$str[$j+1]=$str[$j]; 
                
$str[$j]=$tmp
            } 

    } 


return $str

$str = array(3,6,1,5,9,0,4,6,11); 
print_r(BubbleSort($str)); 
?> 
6  请举例说明在你的开发过程中用什么方法来加快页面的加载速度
 A.生成静态HTML,见http
://www.look-cn.com(首页以及栏目分类)或http://new.look-cn.com或http://www.16899168.com/media(媒体预测,用正则抓取自某知名网站)或http://www.16899168.com/leagues(比赛分析)
B.生成XML见http://www.16899168.com和买部分
C.可不用数据库的尽量不用数据库,把变量参数存于文本.look-cn有部分就这样做的
D.用ZEND加速
 MySQL部分
1  创建poll表,用于记录单选投票用户的数据
字段包括 id[ Autoincreace ] 
, ip , time , iid(用户选则的选项,int型)
写出create上述table的完整sql语句
建表语句如下,但是,
--搞不明白,怎么用time关键字?

CREATE TABLE `poll` (
`id` SMALLINT( 
12 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`ip` VARCHAR( 
16 ) NOT NULL ,
`
time` DATETIME DEFAULT 'now()' NOT NULL , `iid` INT( 15 ) NOT NULL ,
PRIMARY 
KEY ( `id` ) 
);
2    写出将一个选择2号选项的ip为127.0.0.1的用户在当前时间的投票记录到数据库的SQL
insert into poll (id
,ip,time,iid) values(‘’,127.0.0.1,now(),2’);
3  写出满足下边条件的SQL语句 
item表的结构为 id(就是poll表中的iid) , descp(用户选择的选项的文字)
请查询并返回10条记录
,包括ip和用户选择的选项的文字
select ip
,descp from poll,item where poll.iid = item.id limit 10 
4    现在因为投票人数太多,网站时常出现too many connection的错误,请提供解决方案
方法一:加大MySql的最大连接数 
   mysql的最大连接数默认是100
, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些,编辑my.ini
   修改 max_connections
=1000
方法二,不用mysql数据库,改为直接写文件,详细方法参照问题5
若非要用 
mysql,还可
方法三:由于用mysql语句调用数据库时,在每次之执行语句前,会做一个临时的变量用来打开数据库,所以你在使用mysql语句的时候,记得在每次调用完mysql之后就关闭mysql临时变量
5    在成功解决连接数的问题后,发现程序运行缓慢,经查发现是mysql并发太多,表被锁定的现象严重,请提供解决方案
对于访问量大的,本来就不推荐使用数据库,可以考虑直接写到文本中,根据预测的访问量,先定义假若是100个文件文件名依次为1
.txt,2.txt...100.txt,每有用户投票的时候,随机往其中的一个文件中写入投票信息。统计的时候,再对所有文本文件中的数据进行分析。必要的时候,再导入数据库(易看网http://www.look-cn.com正是这么做的)。
6    因为用户实在太多,所以又分配给你两台服务器,你会如何来安排这3台服务器?
对于服务器分配,其实有好几种方案(建议采用LINUX主机),先列出一个解决方案。
1.    考虑到电信,网通(南北差异)互访问速度慢的问题,可以让电信的用户走电信的线,网通的走网通的线。大致可以这样分配,国内南方用户(电信用户)拥有一台服务器A;北方用户(网通用户)拥有一台服务器B。国外的用户也可以考虑给一台服务器C。用户访问的时候,首先访问的是针对国外的服务器,那台机器是电信网通的用户访问速度都差不多的(可以考虑就租用香港或是什么地方的),经过服务器C判断后直接跳到相应的服务器。统计时三台机器的数据合起来。


7    现在开始要求同一ip不能重复投票 ,请指出如何对数据表进行相应的修改
把IP字段属性改为全局唯一就OK了,用以下语句修改,若改之前先数据库中没有重复的记录则
ALTER TABLE `poll` ADD UNIQUE (`ip` );
有重复记录则做一下操作,
1.改名备份数据
CREATE DATABASE `pollbak` ;
RENAME TABLE `poll`.`poll` TO `pollbak`.`poll` ;
DROP DATABASE `poll` ;
2.建一新表
CREATE TABLE `poll` (
  `id` smallint(
12) unsigned NOT NULL auto_increment,
  `ip` varchar(
16) NOT NULL default '',
  `
time` datetime NOT NULL default '0000-00-00 00:00:00',
  `iid` int(
15) NOT NULL default '0',
  PRIMARY 
KEY  (`id`),
  UNIQUE 
KEY `ip` (`ip`)
) TYPE
=MyISAM AUTO_INCREMENT=1 ;
3,还原有效数据
insert into poll select from pollbak;
//由于唯一约束,自动剔除重复的投票

8    原有数据已经有很多重复ip的数据了,所以我们把它导出为一个txt,格式和上边的poll一致,用TAB键间隔,请写一段程序,删除ip有重复的记录,并统计每个投票选项的投票数
不知道可用数据库不?不用数据库也可以实现。时间有限,只给出部分代码如下
假设导出的文件为poll
.txt;
程序poll
.php代码如下:
<?php
//读取文本并放入数组
$apoll = file(“poll.txt”);
//对每一行数据进行分割,从而获取了一个二维数组
    for ($i=0;$i<count($apoll);$i++)
{
    
$poll[$i= split(" ",$apoll[$i]);
}
//对该二维数组分析

$temp_ip[] ;//用来保存出现过的ip
$temp_iid[];//用来保存出现过的投票编号
$temp_iid_count[];用来保存出现过的编号对应的票数
//若ip在前面出现过,则什么也不做
for ($l=0;$l<count($temp_ip);$l++)
{
    
if ($poll[$i][1]==$temp_ip[$l])
{
    
$ip_repeat=1;
}

}
if ($ip_repeat!=1)
{
    
//ip在前面没有重复过,可以处理相应的流程
    $temp_ip[]=$poll[$i][1];
    
//判断投票类型在前面有没有出现过
    for($ii=0;$ii<count($temp_iid);$ii++)
    {
        
if ($poll[$i][3]==$temp_iid[$ii])
{
        
$iid_repeat=1;
}

}
if ($iid_repeat==1)
{
    
$iid_repeat=0;
}
else
{
    
$temp_iid[]=$poll[$i][3];
    
$temp_iid_count=1;
}
    



}
else
{
    
//什么都不做,只是为下一次操作释放变量
    $ip_repeat=0;

}
?>




若可以用数据库,处理就相对简单了一点,前部分处理跟前一段代码同。主要就是用for循环把每一行的数据加入数据表,添加前先判断该IP在数据库中有无记录。有则不操作。数据导入数据库后,要得到投票信息就再简单不过了,不过也跟mysql数据库版本有一定关系,感觉,题目中最指定是那个版本的数据库。

题目去年我去某公司面试的时候做的(含php+mysql),欢迎大家评评,并改正解答中的错误...

 

 

发表于 @ 2006年09月11日 00:08:00|评论(loading...)|编辑

旧一篇: 一不小心又买书了

评论

#young40 发表于2007-03-23 19:04:53  IP: 211.95.166.*
比我前天面试的要难多了

不过我的那个好像是考察水平的,所以难度区分的很明显

以后到了公司看看能不能把我的那个弄出来贴上来
#forlinux 发表于2007-03-26 01:42:01  IP: 218.19.111.*
呵,其实这个公司招的人对LINUX要求比较高。
#bluebird8 发表于2007-03-26 23:52:50  IP: 202.192.80.*
我之前也做过一份跟这差不多的面试题,从第6题开始都是一样的,不知我们是不是面试同一家公司?哈哈
#forlinux 发表于2007-03-27 00:48:43  IP: 218.19.111.*

那家公司是天河北那边的,是同一家不,
其实,我主要是搞.NET开发,php只是作为LINUX爱好者的副产品,呵呵。
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 只爱LINUX