Home  >  Article  >  php教程  >  几道php面试题 相册类等

几道php面试题 相册类等

WBOY
WBOYOriginal
2016-06-06 19:46:391203browse

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

面试题:相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达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 [^ "]*) "| '(? [^ ']*) '|(? [^> \s]*))[^> ]*?> (? [\s\S]*?)

 

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

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

例如:

      

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

    preg_match_all('/"\' ]+)["|\']?\s*[^>]*>([^>]+)/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('</script>您的账号已经登陆!');window.location='login.aspx';");

}

单点登陆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

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn