1. nginx使用哪种网络协议?
nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http
fastcgi负责调度进程
2. <? echo 'hello tusheng' ; ?> 没有输出结果, 可能是什么原因, 简述的解决此问题的过程(提示: 语法没有问题)
可能服务器上面没有开启短标签short_open_tag =设置为Off,,php.ini开启短标签控制参数: short_open_tag = On
3. 简述下面程序的输出结果, 简要说明为什么, 如何解决这类问题?
<?php
$tmp = 0 == "a" ? 1 : 2 ;
echo $tmp ;
?>
结果 1 int和string类型强制转换造成的,0 ==="a"
0 == 0 肯定是true 啊
PHP是弱类型。。
$tmp = 0 === "a" ? 1 : 2 ;
echo $tmp ; 这样就是2
4 . 已知一个字符串如下: $str = "1109063 milo 1" ;
用一行代码将该字符串里面的1109063 赋值给$uid , milo赋值给$user , 1 赋值给$type
空格如下
list($uid , $user , $type ) = explode(" " , $str );
\t如下
list($uid , $user , $type ) = explode("\t" , $str );
list($uid , $user , $type ) = sscanf($str , "%d %s %d " );
$n = sscanf($auth , "%d \t%s %s " , $id , $first , $last );
5. 分别列出如下类型的有符号和无符号范围 TINYINT SMALLINT MEDIUMINT INT
TINYINT- 2 ^7 - 2 ^7-10 ~ 2 ^8-1
SMALLINT- 2 ^15 - 2 ^15-1 0 ~ 2 ^16-1
MEDIUMINT- 2 ^23 - 2 ^23-1 0 ~ 2 ^24-1
INT- 2 ^31 - 2 ^31-1 0 ~ 2 ^32-1
6. 将下面的数组用一行拼装成一个字符串i am milo! day day up!
<?php
$arr = array (
'I' , 'AM' , 'MILO!' , 'DAY' , 'DAY' , 'UP!'
);
?>
$str = strtolower(implode(" " ,$arr ));
7. 调用如下函数获取函数并获取count的值
<?php
function get_list ($cnd = array() , &$count = false)
{
$datas = 'i am call back' ;
$count && $count = rand(1 , 10000 );
return $datas ;
}
?>
$count =1 ;
$data = get_list($cnd ,&$count );
echo $count ;
8. 几种方式去取代session机制, 简单描述各自的优劣
mysql、memcache、cookie保持一种唯一状态标识码
9. 下列HTTP状态码出现的可能原因, 如何处理
200 , 301 , 404 , 502 , 503
200
请求已成功,请求所希望的响应头或数据体将随此响应返回。
301
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。 新的永久性的 URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。 如果这不是一个 GET 或者 HEAD 请求,因此浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。 注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个301 响应的话,接下来的重定向请求将会变成 GET 方式。
404
请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410 状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404 这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
502
作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503
由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个 Retry-After 头用以标明这个延迟时间。如果没有给出这个 Retry-After 信息,那么客户端应当以处理500 响应的方式处理它。 注意:503 状态码的存在并不意味着服务器在过载的时候必须使用它。某些服务器只不过是希望拒绝客户端的连接。
200 OK 一切正常,对GET和POST请求的应答文档跟在后面。
301 Moved Permanently 客户请求的文档在其他地方,新的URL 在Location头中给出,浏览器应该自动地访问新的URL
404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。
502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。
503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503 。服务器返回503 时可以提供一个Retry-After 头。
10. 有如下数据库, 用原生态mysql扩展去连接并查询user表的前十行
host: 192.168 .0 .254
port: 3306
user: one
pass: piece
database: db_user
table: user
$link = mysql_connect("192.168.0.254:3306" ,"one" ,"piece" ) or die ('Could not connect: ' .mysql_error());
mysql_select_db('db_user' ,$link );
$query = mysql_query("select * from user limit 10" );
while ($rs = mysql_fetch_array($query ,MYSQL_ASSOC))
{
}
11. 用autoload($class ) 实现Lib目录下的类的自动加载并可以兼容子目录
$request ->action = lcfirst(implode(array_map(
'ucfirst' ,
explode('-' , strtolower($request ->action))
)));
------------------------------------------------------------
function __autoload ($class )
{
$cls = strtolower(str_replace("_" ,"/" ,$class ));
if (file_exsits(LIB.$cls .'.php' ))
{
include_once (LIB.$cls .'.php' );
}
else
{
die ("not found {$class} class" );
}
}
defined("LIB" ,'/data/wwwroot/www.xx.com/lib/' );
$author = new Lib_Author();
-----------------------------------------------------------
function __authload ($class )
{
$cls = explode("_" ,$class );
if (@is_dir($cls [1 ]))
{
if (@is_file($cls [2 ]))
{
include_once ("CON_PATH" .$cls [1 ].'/' .$cls [2 ].".php" );
}
else
{
dir('error' );
}
}
else if (@is_file($cls [1 ].".php" ))
{
include_once ("CON_PATH" .$cls [1 ].".php" );
}
else
{
dir('error' );
}
}
---------------------------------------
function __autoload ($class )
{
$cls = explode("_" ,$class );
$file = get_file($cls );
if ($file =='error' )
{
die ('error' );
}
include_once ($file );
}
function get_file ($dir )
{
if (is_array($dir ))
{
foreach ($dir as $k =>$v )
{
$tmpdir .= $v .'/' ;
if (is_dir('CON_PATH' .$tmpdir ))
{
continue ();
}
else if (is_file('CON_PATH' .$tmpdir .".php" ))
{
return 'CON_PATH' .$tmpdir .".php" ;
}
else
{
return 'error' ;
}
}
return 'error' ;
}
return 'error' ;
}
defined("CON_PATH" ,"/data/wwwroot/www.xx.com/app/cntroller/" );
$sb = new controller_sb();
------------------------------------
function __autoload_my_classes ($classname )
{
}
spl_autoload_register('__autoload_my_classes' );
-----------------------------------------------------------
12 . 用set _error_handle 去捕获错误并输出, 级别自己定
set _error_handle(callback,level)
function callback(int $errno , string $errstr [, string $errfile [, int $errline [, array $errcontext ]]] ){
}
function dealErrorHandler($errno ,$errstr ,$errfile ,$errline )
{
switch($errno ){
case E_USER_ERROR:
echo "error [$errno ] $errstr fatal error on line $errline in file $errfile " ;
break ;
case E_USER_WARNING:
echo "my warning [$errno ] $errstr " :
break ;
case E_USER_NOTICE:
echo "my notice[$errno ] $errstr " ;
break ;
default:
echo "unkonwn error type :[$errno ] $errstr " ;
break ;
}
}
set _erro_handler(dealErrorHandler);
trigger_error("notice" , E_USER_NOTICE);
trigger_error("warning" , E_USER_WARNING);
trigger_error("error" , E_USER_ERROR);
13. 简述两种屏蔽php程序的notice警告的方法
初始化变量,文件开始设置错误级别或者修改php.ini 设置error_reporting
set_error_handler 和 @抑制错误
1. 在程序中添加:error_reporting (E_ALL & ~E_NOTICE)
2. 或者修改php.ini 中的:error_reporting = E_ALL
改为:error_reporting = E_ALL & ~E_NOTICE
3. error_reporting(0 )
14. instanceof 的作用, 经常在什么设计模式中使用
单例模式,但是其他的模式也会用到
15. 1023 用二进制表示, 并简述计算过程
10-2
1023 %2 =1
511 %2 =1
255 %2 =1
127 %2 =1
63 %2 =1
31 %2 =1
15 %2 =1
7 %2 =1
3 %2 =1
1 %2 =1
0 =0
-------------------------------------------
1023
2 ^9 =<N<2^10
511
k =9
10 9 8 7 6 5 4 3 2 1
1 1 1 1 1 1 1 1 1 1
----------------------
1023 1
1023-1 /2 =511 1
511-1 /2 =255 1
255-1 /2 =127 1
127-1 /2 =63 1
63-1 /2 =31 1
31-1 /2 =15 1
15-1 /2 =7 1
7-1 /2 =3 1
3-1 /2 =1 1
-----------------------------------------------
2-10
只需用将二进制数的各个位上的数从最右边开始,最右边的第一个数乘以二的零次方,第二个数乘以二的一次方,第三个数乘以二的二次方,依次类推可得第n 个数乘以二的(n-1 )次方,然后把得到的结果相加即可
例如:110011 =1*2^0+1*2^1+0*2^2+0*2^3+1*2^4+1*2^5=51
这也可以算是一个公式就是An *2 ^(n-1 ) An 表示二进制数最右边开始的第n 个数,
将第一项第二项第三项一直到第n 项用式子An *2 ^(n-1 ) 计算出来并加在一起即可
16 . 下面php程序输出的内容是什么? 为什么?
<?php
$str = "aa\tbb\tcc" ;
@list ($a , $b , $c ) = explode('\t' , $str );
echo $a ,$b ,$c ;
?>
aabbcc;// '\t' 不会以\t切割字符串,explode之后申城一个array(0 =>"aa\tbb\tcc" )所以。。。,'\t' 换成"\t" 就被切割
17 . include 和require 分别返回什么错误级别
include 会系统警告并继续执行,require 会发出系统警告但是会引致致命错误令脚本终止运行