试卷2

1、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
   例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php

   写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数。
2、在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的 编码格式,以下是一个标准的 meta 语句
   <META http-equiv='Content- Type' content='text/html; charset=gbk'>
   请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5
   请注意:
   (1) 需要处理完整的 html 页面,即不光此 meta 语句
   (2) 忽略大小写
   (3) ' 和 " 在此处是可以互换的
   (4) 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行
   (5) 注意处理多余空格
3、写一个函数,算出两个文件的相对路径
   如 $a = '/a/b/c/d/e.php';
   $b = '/a/b/12/34/c.php';
   计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上
4、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
5、简述论坛中无限分类的实现原理。
6、设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。
7、MySQL数据库,一天一万条以上的增量,怎么优化?
8、写个函数来解决多线程同时读写一个文件的问题。
9、echo count("abc");
10、用php写出显示客户端IP和服务器端IP的代码
11、error_reporting(2047)什么作用
12、echo,print()和print_r()有什么区别
13、打开php.ini中的Safe_mode,会影响哪些函数?至少说出6个
14、请写一个函数验证电子邮件的格式是否正确(要求使用 正则
15、写出一种排序算法(要写出代码),并说出优化它的方法。
16、一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。
17、写个函数用来对二维数组排序
18、求连续子序列最大和算法,并记录所涉及的元素
19、$a = 1; $x =&$a; $b=$a++; 求$b和$x的值 
20、有如下HTML:<img title='aaaa' sina_title='bbbb' id='img1'>
              1)用js取得________方法取得该对象;
              2)用________属性取得属性title的属性值;
              3)用________方法取得属性sina_title的属性值;
21、php中对数组序列化和反序列化的函数分别是______和_______;
22、rawurlencode和urlencode函数的区别是__________________;
23、php中过滤HTML的函数是_______,转义的函数是____________;
24、写出用正则把HTML中的js脚本过滤掉;
25、SQL中LEFT JOIN的含义是______________;
如果有一个表tl_user存储学生ID和名字name,另外一个表tl_score存储学生ID、科目subject和成绩score(有的学生没有考试成绩),写出sql语句打印出学生名字和各科总成绩;
26、josn处理数组的函数是;
27、php中判断变量是否被设置是函数是_______;判断是否为空的是___________;
28、error_reporting("E_ALL")和ini_set("display_errors", "on")的区别_________;
29、php把utf-8转换成gbk的函数是___________;
30、php中分割字符串成数组的函数__________,连接数组成字符串的是_______;
31、php中类的静态方法怎么使用_____________________________________;
32、如下错误: MySQL server has gone away,的原因是什么?
33、mysql的静态表和动态表的区别,MyISAM和InnoDB的区别.
34、用二分法(也叫折半查找法)查找某元素,对像可以是有序数组。
35、strlen()与mb_strlen的作用分别是什么
36、include和require都能把另外一个文件包含到当前文件中,他们有什么区别?Include和include_once又有什么区别?
37、写出一个能创建多级目录的PHP函数
38、请解释下列10个shell命令的用途 top、ps、mv、find、df、cat、chmod、chgrp、grep、wc
39、写出下列服务的用途和默认端口    ftp、ssh、http、telnet、https
40、写出下面2个PHP操作Mysql函数的作用和区别mysql_num_rows(),mysql_affected_rows()
41、sql语句应该考虑哪些安全性?
42、简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
43、有一个留言板,用mysql做数据库,用户信息包括:用户名,密码,email 留言内容包括:留言ID,标题,内容,发表时间,状态(审核,未审核)
请实现下列需求:
1)数据库结构。无需写建表语句,用类似下面的表格,描述清楚即可
表明 table_aaa
字段名 字段说明 字段类型 索引
name 姓名 Varchar(64) 唯一索引
gender 性别 Enum(‘M’,‘F’)
注意,要在索引栏中注明是否需要创建索引,以及要创建的索引的类型
2)用一个sql语句查询出发表留言数量大于10条的用户名及其留言数量,查询结果按文章数量降序排列
44、系统分析,假设有一个博客系统,数据库存储采用mysql,用户数量为1000万,预计文章总数为10亿,每天有至少10万的更新量,每天访问量为5000万,对数据库的读写操作的比例超过10:1,你如何设计该系统,以确保其系统高效,稳定的运行?
提示:可以从数据库设计,系统框架,及网络架构方面进行描述,可以自由发挥
45、要求计算1+2+3+...+n,不能使用乘法、循环、递归
46、session与cookie的区别?
47、请列举你能想到的UNIX信号,并说明信号用途。
48、请列举、你能想到的所有的字符串查找算法,并加注释简单说明。
49、有一个IP地址(192.168.0.1),请写出其32位无符号整数形式。
50、写出、你能想到的所有HTTP返回状态值,并说明用途(比如:返回404表示找不到页面)
51、设计一个留言板,要求给出整个设计方案。要求画出用例,描述 数据对象,阐述出发点和难点及要点。要求满足十万级访问量(读写比为10:1),要求数据持久保存并给出存储方案,要求兼顾不同地域和网络线路的访问者。
52、设一数据量为千万级的数据库库,通过监控发现,有90%的查询请求都是指向同一部分数据的,而这部分数据只占整个数据库容量的1%。问:如何设计数据库结构,以避免造成瓶颈。
 
答案:

1

1.1

$pathinfo = pathinfo("http://www.sina.com.cn/abc/de/fg.php?id=1"); 

$query = $pathinfo["extension"];

if (strpos($query,"?") !== false) 
    return substr($query,0,strpos($query,"?")); 

return $query;

1.2

$strs = explode(".", http://www.sina.com.cn/abc/de/fg.php?id=1);

$extension = array_pop($strs);

$pos = strpos($extension,"?");

if ($pos)

 $extension = substr($extension,0,$pos);

echo $extension;

1.3

$baseName = basename("http://www.sina.com.cn/abc/de/fg.php?id=1");

$extension = substr($baseName,strpos($baseName,"."),strpos($baseName, "?")-strpos($baseName,"."));

echo $extension;

1.4  使用正则

$strs = "http://www.sina.com.cn/abc/de/fg.php?id=1";

preg_match("/(\..*)(\?)?/", $strs ,$mathes);  要确定最后一个符合条件的

preg_match_all('/[\w\/\:\-]+\.([\w]+)$/',$path, $out);

return$out[1][0];

1.5

$strs = $_SERVER["PHP_SELF"];

$extension = substr($strs,strpos($strs,"."));

echo $extension;

1.6

$path = parse_url("http://localhost/df/ff.php?d=1");

$extension = substr($path["path"],strpos($path["path"],"."));

echo $extension;

还有一个可以使用strrchr(),找出制定字符在字符串中最后一次出现

2.

$string = "<META http-equiv = 'Content-Type' content= 'text/html; charset = gbk'>";

$aa = preg_replace("/(<meta .+?charset\s*=\s*)([-\w]+)([\'\">\s]+)/i","\\1utf-8\\3",$string);

3.

function calculateRelativePath($a,$b) {
    if (empty($a) || empty($b))

        return;

    $flag = "";

    $aexs = explode("/",$a);

    $bexs = explode("/",$b);

    $aDiffb = array_diff_assoc($aexs,$bexs);

    $count = count($aDiffb );

    for($i=0; $i < $count-1; $i++) {
        $flag .= "../";

    } 

    $bDiffa = array_diff_assoc($bexs,$aexs);

 

    return $flag. implode("/",$bDiffa);

}

echo calculateRelativePath("/a/b/c/d/e.php","/a/b/12/34/c.php");

echo "<br />";

echo calculateRelativePath("/a/b/c/d/e.php","/b/12/34/c.php");

4.

function traversalFolder($currDir) {
 $filesArray = array();
 $files      = scandir($currDir);

foreach ($files as $file) {
  $noPoint = ($file != "." & $file != "..");
  $subFile  = $currDir.DIRECTORY_SEPARATOR.$file;
  $isDir      = is_dir($subFile);
  $isDir     &= $noPoint;
  
  if ($isDir)
   $filesArray = array_merge($filesArray,traversalFolder($subDir));
   
  elseif ($noPoint)
   $filesArray[] = $file;

 }
 
 return $filesArray;


}

 

print_r(traversalFolder("F:/test"));

6. 参见div+css+js部分
7.

使用高性能的服务器
多使用缓存
页面服务器、数据库服务器、图片服务器、上传下载服务器分离
数据库集群,表分割(水平分割和垂直分割)和表散列
负载均衡
重视每个代码开发细节,特别是大循环,多请求和SQL语句复杂的时候

1.代码要干净
2.数据库要分表,可以1个月数据存储一张表:
3.读写分离:写入用一台服务器,然后同步到另外的服务器进行读出。
4.如果有图片,建议有专门图片服务器,使用独立域名访问
5.网站前台和后台如果有条件尽量分开

 

首先 增量数据说明是写入操作比较频繁,可以采用主从分离的方式

其次 如果操作的数据表过来,可以采用分表的方式,可以根据时间或其他规则作为数据表名的前缀,还可以根据Hash分表,缺陷是不易扩展
第三 写入数据量过大可以先缓存数据,然后批量导入
第四 设计表的类型,如果访问量不大的话采用innodb表主,读写分离,读的采用myisam表,写的采用innodb表
第五 基本优化,字段的大小,索引的设置
hash 分表可参考

8.

function writeData($path,$mode,$data) {

    $fp = fopen($path,$mode);
    $retries = 0;

    $max_retries = 100;

   

    do {
        if ($retries > 0)

            usleep(rand(1,10000));  // 间隔一定时间,重新锁定

        $retries +=1;

    } while(!flock($fp,LOCK_EX) && $retries <= $max_retries);

   

    if ($retries = 100)

        return false;

   

    fwrite($fp,$data);

    flock($fp,LOCK_UN);

    fclose($fp);

    return true;

}

模式 描述

r 只读。在文件的开头开始。

r+ 读/写。在文件的开头开始。

w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。

w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。

a 追加。打开并向文件文件的末端进行写操作,如果文件不存在,则创建新文件。

a+ 读/追加。通过向文件末端写内容,来保持文件内容。

x 只写。创建新文件。如果文件已存在,则返回 FALSE。

x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。注释:如果 fopen() 无法打开指定文件,则返回 0 (false)。

主要的思路就是锁定,或者使用file_put_contents()第三个参数也有锁定

file_put_contents('/xxx/xxx.txt', 'I am 21andy', LOCK_EX); // LOCK_EX获得一个独占锁定

9.   1
10. $_SERVER["SERVER_ADDR"],$_SERVERE["REMOTE_ADDR"]
11. 显示所有的错误 E_ALL
12.
echo 是一种语言结构,没有返回值
print 是一个函数,返回值为int类型,只能打印int或string
print_r() 是一个函数,返回值的类型是bool,按照结构输出变量的值,打印关于变量的易理解的信息,数组或对象等
13.
13.1 php的安全模式提供一个基本安全的共享环境,在一个有多个用户帐户存在的php开放的web服务器上。当一个web服务器上运行的php打开了安全模式,那么一些函数将被完全的禁止,并且会限制一些可用的功能。

13.2 在安全模式下,一些尝试访问文件系统的函数功能将被限制,运行web服务器用户id,如果想要操作某个文件,则必须拥有该文件读取或者写入的访问权限,例如一些directory函数和filesystem函数 chdir、chown等函数

13.3 一些加载dll的函数会受到影响

13.4 在php安全模式打开的时候,需要执行操作系统程序,如popen() systen()exec(),的时候,必须是在safe_mode_exec_dir选项指定目录的程序,否则执行将失败。即使允许执行,那么也会自动的传递给escapeshellcmd函数进行过滤。

13.5. 用户输入输出函数(fopen() file()require(),只能用于调用这些函数有相同脚本的拥有者)

13.6 mysql服务器所用的用户名必须与调用mysql_connect()的文件的拥有者用户名相同

13.7. putenv函数和其他一些尝试改变php环境变量的函数set_time_limit, set_include_path 也将被忽略。

下列函数将会受到影响

exec, shell_exec, passthru, system, popen 

http://a138s.blog.163.com/blog/static/31474077201010454112760/

14. 正则表达式集中处理 /^([a-zA-Z9-9-_])+@([a-zA-Z0-9-_])+(/.([a-zA-Z0-9-_])+){1,2}
15、参见日记中的冒泡排序算法,优化就是添加监控
16、
function yuesefu ( $n , $m ) { 
 
   $r = 0
    for(
$i = 2 ; $i <= $n ; $i ++) {
       
$r =( $r + $m )% $i
    }
    return $r + 1 ;
}
print_r ( yuesefu ( 3 , 3 ));
 
17、待定
18、
function foo($strs) {
    $maxSum = 0;
    $thisSum = 0;
    $thisStart = 0;
    $start = null;
    $end = null;
    $count = count($strs);
    for ($i=0;$i<$count;$i++) {
        $thisSum += $strs[$i];
        if ($thisSum > $maxSum) { // 当和大于已经记录的最大和时,重新赋值
            $maxSum = $thisSum;
            $start = $thisStart+1;
            $end = $i+1;
        }elseif ($thisSum<0) {  //当和为负数的时候,重新开始计算和,因为-1+4+n,肯定没有4+n大
            $thisSum = 0;
            $thisStart = $i;
        }
    }
    $results = array($start,$end,$maxSum);
    return $results;
19、1和2 
20、
1) document.getElementById("img1");   2) doucment.getElementById("img1").getAttribute("title");   3) document.getElementById("img1").getAttribute("sina_title");
21、serialize,unserialize
22、rawurlencode 将除了-_.之外的所有非字母数字字符都被替换成百分号后跟两位十六进制数,urlencode同前者是一样的唯一的不同是将空格转化为+号
23、strip_tags() 过滤除了<img>以外的标签 strip_tage(strings,"<img>"),htmlspecialchars(),htmlentities,两者的区别是前者只转化&,<,>,",'这几个html代码,后者会转换所有的html代码,连同中文字符
24、$strs = preg_replace("/<script[^>].*?>.*?<\/script>/i"," ",$strs);
25、select tl_user.name,sum(tl_score.score) as scores from tl_user left jion tl_score on tl_user.ID = tl_score.ID group by tl_score.ID
26、json_encode(),json_decode();  json_encode()在编码性能和长度上都要优于serialize,在解码的时候unserialize优于json_decode()
27、isset(),empty();
28、前者是设置php的执行的错误报告,后者是设置配置文件中是否打开php错误显示,后者的权限高
29、iconv("utf-8","gbk",$strs);
30、explode(),implode();
31、静态方法不需要实例化类,使用类名+::+方法名就可以调用
32、
32.1 一种可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,或者语句中含有BLOB或者longblob字段,比如,图片数据的处理,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可。用来控制其通信缓冲区的最大长度。
32.2 还有一种可能是因为某些原因导致超时,应用程序(比如PHP)长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。
解决方案:
在my.cnf文件中添加或者修改以下两个变量:
wait_timeout=2880000
interactive_timeout = 2880000 
如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...)
33、参见日志
34、参见日志
35、前者无法正确处理中文字符串的占位,对于gb2312得到的是汉字个数的2倍,utf8得到的是汉字个数的3倍,后者就很好的解决了这个问题,它的第二个参数就是设置字符编码的
36、参见试卷
37、
function createDir($path,$mode) {
        if (is_dir($path))
                echo "路径已经存在"!
        else {
                $re = mkdir($path,$mode,true);
                if ($re)
                        echo "目录创建成功";
                else
                        echo  "目录创建失败";
        }
}
$path = /a/b/c/d;  $mode = 0777; createDir($path,$mode);
38、top 查看系统进程占用资源的情况。ps 显示详细的进程信息。mv是为文件或目录改名,或将文件从一个目录中移植到另一个目录中。find 查找文件或目录。df 检查文件系统的磁盘空间占用情况。cat 显示文件内容,创建文件一个新的文件,合并文件内容。chmod 改变文件或目录的访问权限。chgrp 改变文件或目录所属的组。grep是一个强大的文本搜索工具。wc 统计指定文件的数据信息,例如行数,字节数
39、ftp文件传输协议是一种常见的文件拷贝方式,默认的是20用于数据连接,21用于控制连接端口。ssh连接服务器执行操作 默认的是22端口号。http 是一种网络传输服务
40、两者都是返回结果集中的行数,不同的是前者只对select操作有效,后者对update,insert,delete所影响的行数有效
41、主要是防止注入,做好 ' " / \ 等特殊字符的转义基本成功一大半了,数据提交时注意html过滤,注意--,#这样的注释,注意子查询和一些mysql函数sleep,load_file等等
42、参见日记
主键是一种约束,一张表只能创建一个,该字段没有重复值,且不允许为空。唯一索引可以创建多个,是为了优化 SQL执行效率而建立的一些Object ,唯一索引可以为空
43、
表名 emailContent
字段名 字段说明 字段类型 索引
id          留言ID       int (10)            主键
title       标题           varchar(128)  
content 内容         text                
publisTime 发表时间  datetime
state    状态          int(1)
name  用户名      varchar(64)     普通索引
 
select us.name,count(em.id) from table_aaa us join left emailContent em on us.name = em.name group by us.name having count(em.id) >10
44、
使用nginx做负载均衡,使用DNS轮询的方式,后端使用服务器集群的方式,数据库采用主从分离,分区,分表的方式,在进入数据库前采用动态数据缓存的方式,memcache
 
读写比例可以使用主从分离,文章总数过大,可以采用单独的表来存储文章,并且采用分表的方式,将用户的其他信息放在另外的一个表中,使用用户id作为外键关联到文章表中,这样可以使用户的其它信息读取出来,可以采用memcache缓存数据控制对数据库的频繁操作
负载均衡集群、双节点热备、分布式处理等都可以用来解决单点故障,比如提供相同业务的Web服务器、MySQL数据库从库,都可以构建负载均衡集群。一旦集群中的一台服务器、一个服务出现故障,自动实时摘除,对用户来说是不可感知的,不会影响到整个网站的访问,可以为运维工程师留下足够的时间去排查和解决故障。
可以临时关闭一些Web中的次要功能,来减少服务器消耗。
http://blog.s135.com/architect_solitaire/
45、$n=10,echo array_sum(array_keys(array_fill(1,$n,0)));
46、session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
其余的参见日记
47、
1. 按下CTRL+C产生SIGINT  发送给所有ForeGround Group的进程
2. 硬件中断,如除0,非法内存访问(SIGSEV)等等,数字相关异常
3. Kill函数可以对进程发送Signal
4. Kill命令。实际上是对Kill函数的一个包装
5. 软件中断。如当Alarm Clock超时(SIGURG),当Reader中止之后又向管道写数据(SIGPIPE),等等
48、参见日志中的例子
49、11000000.10101000。00000000。00000001 就是转化成二进制,使用decbin()函数
51、 http://wenku.baidu.com/view/c991ecd73186bceb19e8bb53.html
读写比例可以看出数据可以做缓存或采用静态化的处理,并采用读写分离的方式
参见谈谈网站静态化
使用PHP构建高性能系统【转】
 
 
 查找到第3页
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值