几道php面试题 相册类等

面试题:相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flvflash播放。叙述要涉及的各类开源软件和简单用途。

答案:

swfupload

PclZip:压缩解压

gd/imagemagic:图片剪裁

ffmpeg:命令行的图形化视频转换工具

测试phpmysql性能的工具

Aphp工具

1hprof —— facebook 开发的一个测试php性能的扩展。特性如下:

1、  Flat Profile. 提供函数级的汇总信息,比如调用次数、执行时间、内存使用、CPU占用等。

2、  Hierarchical Profile 对每个程序,进行了父级调用和子级调用的分解。

3、  Diff Reports(差异报告)。有很多种情况,我们希望能够对比,比如新版本比旧版本提升了多少速度,两个版本的差距究竟在哪里

4、  Callgraph View(调用视图)。性能监测的数据可以绘制成调用视图,方便我们查看

5、  Memory Profile(内存监控)。这个特性帮助我们了解PHP如何分配和释放内存

6、  如何处理外部文件。XHProf include,require,include_once,require_once进来的文件视作是一个 function

2XDEBUG WinCacheGrind:前者生成文件,后者负责解析。

Bmysql工具

sysbench(或者super-smack)测试mysql性能。使测试获得好得数据,这其实非常简单:1 最大化CPU利用率  2 减少由于IO造成的延迟

 

如何提取一个网页的所有链接?

正则1<a[\s\S]*?href=( "(? <href> [^ "]*) "| '(? <href> [^ ']*) '|(? <href> [^> \s]*))[^> ]*?> (? <title> [\s\S]*?) </a>

 

上面可以提取新浪的全部链接还有标题,比较牛!,下面有个其他网友做的简单的,可能有错:

正则2/<a\s+href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i

例如:

    <?PHP  

    $file = file_get_contents(“http://www.rocsky.net”);

    preg_match_all('/<a\s+href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i', $file, $links);  

    print_r($links);  

exit;       ?>  

 

 

如何防止同一个用户同时登陆?如果我用aa登陆,别人就不能用了

要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了,也就是设置一个cache的时间。这个时间可以跟用户的session值联系起来,刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.这样就达到了防止同时登陆的效果,具体代码如下:

 放在登陆成功的地方:

string key = TextBox1.Text; //用户名文本框设为cache关键字

string uer = Convert.ToString(Cache[key]); //读取cache中用户相应的值

//判断cache中是否有用户的信息,如果没有相关的值,说明用户未登陆

if (uer == null || uer == String.Empty)

{

 //定义cache过期时间

TimeSpan SessTimeout = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);

 

 //第一次登陆的时候插入一个用户相关的cache值,

 HttpContext.Current.Cache.Insert(key, key, null, DateTime.MaxValue, SessTimeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);

 Session["ADMINID"] = TextBox1.Text;

 Response.Redirect("main.aspx");

}

else

{ //重复登陆

 Response.Write("<script>alert('您的账号已经登陆!');window.location='login.aspx';</script>");

}

单点登陆SSO

很详细,慢慢看http://www.iteye.com/topic/1039052

垃圾什么时候回收?

php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器+1;当变量引用撤掉后,计数器-1;当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

 

“引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露;

 

上面是有问题,js也没有这么做!js用的是?(忘了,哭)

php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露

 

1)垃圾回收的时机

Php中,引用计数为0,则内存立刻释放;也就是说,不存在环状引用的变量,离开变量的作用域,内存被立刻释放。

环状引用检测则是在满足一定条件下触发,所以在上面的例子中,会看到使用的内存有大幅度的波动;也可以通过 gc_collect_cycles 函数来主动进行环状引用检测。

 

2) &符号的影响

显式引用一个变量,会增加该内存的引用计数:

$a = "something";

$b = &$a;

此时unset($a), 但是仍有$b指向该内存区域的引用,内存不会释放。

 

3unset函数的影响

unset只是断开一个变量到一块内存区域的连接,同时将该内存区域的引用计数-1;在上面的例子中,循环体内部,$a=new A(); unset($a);并不会将$a的引用计数减到零;

 

4= null 操作的影响;

$a = null 影响与unset($a)类似;

 

5)脚本执行结束的影响

脚本执行结束,该脚本中使用的所有内存都会被释放,不论是否有引用环。

 

问:列出你知道的php中得函数那些是直接作用于变量本身?

str_replace() 函数将返回修改过的字符串,

usort() 却直接作用于传递的参数变量本身

其实因为数组传递的是引用,我自己的感觉

 

这些是函数吗?echo()print()unset()isset()empty()include()require()

上面都是语言结构!

If else都是语言结构,这些是在词法,语法解析中解释,详细看编译原理。

类和非面向对象中,如何定义常量?

class MyClass

{   

const constant = 'constant value';

}

define(“constant”, “constant value”)

 

面向对象的魔术方法

__construct, __destruct, __call, __get, __set, __isset, __unset (see Overloading), __sleep, __wakeup, __toString, __set_state and __clone

 

你可能感兴趣的:(PHP)