php面试部分(二)

来源:互联网 发布:淘宝卖家服务市场 编辑:程序博客网 时间:2024/05/01 22:52
面试告一段落,其中用到的技术问题
总结一下:


1.如何从百万条数据中查找126.com/136.com等网易用户邮箱账号


(1)最原始 也是最笨拙暴力的方式
   select * from user 
   where email like '%@126.com' or 
         email like '%@163.com'


(2)第二种正则匹配 可能比起上面一种方式要稍微
   快一点,但是也是相当的笨拙。
   select * from user 
   where email regexp '@126.com$|@163.com$'


(3)第三种,我们需要更改表结构
   在存储的时候,我们分成两张表,一张存放
   用户信息,在email字段只填写 @ 符号前面的字符,
   并追加一个邮箱后缀id 作为邮箱后缀的分类外键。
   另一张则专门用来填写@ 后面的内容,对应一个id


   这样我们在查询的时候,只要查邮箱的后缀id对应
   的邮箱后缀为126.com和163.com的就可以了,这样
   查询的速度最快。




2. ajax如何实现跨域请求?
我们知道ajax只能在同域下进行请求,跨域是不可以的。
我没有仔细研究,这是找到的例子,可以参考一下:


基于H5的postMessage方法实现js跨域
http://wangdf-jee.iteye.com/blog/1404272
基于H5的跨域共享特性
http://www.php1.cn/article/8354.html
http://blog.sina.com.cn/s/blog_6d425e1a01019xb0.html


3.如何判断用户已经登录/或者用户登陆后,浏览器关闭时,怎么
知道用户已经关闭浏览器
PHP中判断浏览器关闭可以使用 connection_aborted() 函数


connection_aborted() 函数检查是否断开客户机。


如果已终止连接,则该函返回 1,否则返回 0。


例子


   创建一个函数,在客户机终止脚本时写入一条日志消息:


  <?php
        function check_abort()
        {
          if (connection_aborted())
          error_log ("Script $GLOBALS[SCRIPT_NAME]" .  "$GLOBALS[SERVER_NAME] was aborted by the user.");
         }
        //要执行的一些代码
       // 在脚本结束时调用 check_abort 函数
       register_shutdown_function("check_abort");
?>


 再有一个是connection_status() 函数


connection_status() 函数返回当前的连接状态。


可返回的可能值:
0 - CONNECTION_NORMAL - 连接运行正常
1 - CONNECTION_ABORTED - 连接由用户或网络错误终止
2 - CONNECTION_TIMEOUT - 连接超时

3 - CONNECTION_ABORTED & CONNECTION_TIMEOUT


每天进步一点点,从个好菜鸟。。。


0 0