php语言 百分网手机站

PHP大神分享面试技巧

时间:2020-10-04 10:55:23 php语言 我要投稿

PHP大神分享面试技巧

  PHP新手们是不是对PHP求职感到很迷茫,没关系,PHP大神来帮你。以下是百分网小编精心为大家整理的PHP大神分享面试技巧,希望对大家有所帮助!更多内容请关注应届毕业生网!

PHP大神分享面试技巧

  1.nginx使用哪种网络协议?

  nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http

  fastcgi负责调度进程

  2. 没有输出结果, 可能是什么原因, 简述的解决此问题的过程(提示: 语法没有问题)

  可能服务器上面没有开启短标签short_open_tag =设置为Off,,php.ini开启短标签控制参数: short_open_tag = On

  3. 简述下面程序的输出结果, 简要说明为什么, 如何解决这类问题?

  $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!

  $arr = array(

  'I', 'AM', 'MILO!', 'DAY', 'DAY', 'UP!'

  );

  ?>

  $str = strtolower(implode(" ",$arr));

  7. 调用如下函数获取函数并获取count的值

  function get_list($cnd = array(), &$count = false)

  {

  // 伪代码 处理$cnd 并赋值datas

  $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)

  {

  # ... your logic to include classes here

  }

  spl_autoload_register('__autoload_my_classes');

  -----------------------------------------------------------