一帖看懂PHP经典面试情景模拟考题必考题:什么是冒泡排序

php面试中当问到你“描述一下所做过的项目中遇到最困难的技术问题是什么,最后怎么解决”应该怎么回答? - 知乎53被浏览15612分享邀请回答01 条评论分享收藏感谢收起PHP算法大全(2)冒泡排序算法解决差生排序问题
PHP算法大全(2)冒泡排序算法解决差生排序问题
前言:算法是有用的,也是枯燥的,我们尽量用生活中的例子来描述。排序算法是算法中最基础的部分,今天我们一起来排序算法中的冒泡排序算法。内容概要:1、什么是冒泡算法-差生排序问题。2、冒泡算法的动画图。3、冒泡算法的PHP代码实现。一、什么是冒泡算法-差生排序问题。时光回到你上小学的时候某日,老师大怒:这次数学考试平均分在不及格的,站到讲台前来!5个同学不情愿的,慢吞吞的走到讲台前,他们随机的站成一排。老师说:按照你们的成绩从小到大站成一排!假设这五位同学的位置分别是ABCDE,他们相互不知道对方成绩,只能现场问旁边的同学。现实排序情况是比较乱的,站来站去,排队很长时间。这时候冒泡排序算法就能帮上忙了。首先说明一下:ABCDE是位置编号,排序的时候,我们不关心同学的名字,只关心某个位置上站的同学分数合适就行。顺序是这样的,首先 A位置的同学和B位置的同学先相互问对方成绩,如果后者成绩小(差),他俩换一下位置,否则别动。同理,再比较B和C位置的同学成绩,如果C位置同学成绩小(差),就互换。依次再比较C和D、D和E位置的同学,这样比较一轮,做的结果是ABCDE五个位置的同学两两比较了一次,这样做的结果有两个:一是,每次两两位置比较,较差成绩的总会向前排一位,二是,最好成绩的同学排到了合适位置(最后位置E)。同理再来一轮比较,结果还是会将较差成绩的同学位置向前排一位,成绩第二好的同学会排到合适位置(D位置)不同的是,我们这次只需要比较ABCD四个位置就行了。继续按照一轮一轮的比下去,会有条不紊的完成老师的排队要求的。我们计算一下需要比多少轮:第一轮:ABCDE第二轮:ABCD第三轮:ABC第四轮:AB也就是会比较4轮就可以完成要求了。这就是冒泡排序。书面语言我就不抄了,大家自行搜索。虽然比较啰嗦,但是我觉得我讲清楚了,不知大家是否清楚?请在评论中给个意见吧,感谢支持PHP在路上。二、冒泡算法的动画图。我们假设ABCDE位置上的成绩分别是30, 49, 15, 21, 19;看下面的模拟动画。【具体这个动画图是怎么制作的,如果想知道的话,就在评论中告诉我哈。】三、冒泡算法的PHP代码实现PHP代码的实现是使用数组的方式,这里需要理解,数组的下标就相当于我们例子中的ABCDE位置的概念。数组的元素就是考试的成绩。需要明确的是,例子中,我们实质上是按照成绩来排序的,千万不要说同学理解成数组的下标,否则会糊涂。冒泡排序比较简单,但面试和或笔试的时候,也会偶尔出现。而在实际的php程序开发过程中,是不需要写这类函数的,原因是:PHP有内置函数sort(),不用自己实现。PS:这篇文章将近用了三个小时。不知道冒泡算法我说明白了吗?如果说明白了,请回复:666有不合适的地方,欢迎评论中指出。
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 技术无止境,一直在路上
作者最新文章php面试常说的冒泡算法详解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
php面试常说的冒泡算法详解
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢php面试题与答案
时间: 11:27:28
&&&& 阅读:349
&&&& 评论:
&&&& 收藏:0
是什么 ,在什么地方用,注意什么,特点,如何配置(相关关联),出现的问题(缺点),引出解决办法或另一种方法
PHP:Hypertext Preprocessor
一、get和post的区别
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP
post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,用Request.QueryString获取变量的值,对于post方式,用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
二、session与cookie的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
&& 考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
&& 考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
&& 将登陆信息等重要信息存放为SESSION
&& 其他信息如果需要保留,可以放在COOKIE中
6、cookie有5个参数(名,值,有效期,服务器路径,域名,规定是否通过安全的
HTTPS 连接来传输
三、数据库中的事务是什么
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 (原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,
&&&&&&&要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,
&&&&&&&并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
begin 开始一个事务
rollback事务回滚
commit事务确认
注:rollback和commit不能并列使用,当同时使用时,只有前面一个生效
MYSQL默认是自动提交的
可以通过set autocommit=0 来设置 禁止自动提交
可以通过set autocommit=1 来设置 开启自动提交
四、PHP打印 日期
echo date(‘Y-m-d H:i:s‘, strtotime(‘-1&day‘));&//前一天
echo ‘&br&‘;
echo date(‘Y-m-d H:i:s‘, strtotime(‘-1&week‘));//前一周
echo ‘&br&‘;
echo date(‘Y-m-d H:i:s‘);//现在时间
echo ‘&br&‘;
echo date(‘Y-m-d H:i:s‘, strtotime(‘next Monday‘));//下一个星期一
echo ‘&br&‘;
echo date(‘Y-m-d H:i:s‘, strtotime(‘last Monday‘));//上一个星期一
echo “现在的时间是:”&.date(h:i:sa);&&//a -
小写的上午和午后(am 或
/* &时间差 &*/
$startdate = strtotime(&&);
$enddate = strtotime(&&);
$days = round(($enddate-$startdate) / 86400)+1;
先用5升的水壶装满水,倒入六升的水壶中.六升的水壶中还空出
一升水体积.
2.再用把盛五升水水壶装满水,倒入容积六升的水壶中,壶中还剩4升水.
3.把容积六升水中的水倒掉,再把容积五升的水壶倒满水,把这些水倒入容积六升的壶中,容积五升的水壶中这时刚好剩下三升水.
五、能够使Html和PHP分离开的模板
smarty ,phptal&,template、
PHPlib Template 、
FastTemplate
Smarty , Dwoo , TinyButStrong , Template Lite , Savant , phemplate , XTemplate
echo $a[0]; &&echo $a{0};&&&echo chr(ord($a));
七、echo(),print(),print_r()的区别
可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。
函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。
printf()源于C语言中的printf()。该函数输出格式化的字符串。
()可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头
有两个参数,第二个参数为true的时候,返回值,而不显示。
$dbconn=oci_connect(&你的账号&,&你的密码&,&你的数据库名称&);//请把中文件设置为你的值;
$stmt=oci_parse($dbconn, &select * from scott.hallo&);
oci_execute($stmt, OCI_DEFAULT);
echo $conn.&----selecting\n\n&;&
while (oci_fetch($stmt))
echo ($conn.&[&.oci_result($stmt, &TEST&).&]\n\n&);
echo ($conn . &----done\n\n&);
九、php5权限控制修饰符
public(公共),&private(私用), protected(继承)
九点一:魔术方法
__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload
<span style="color:#、__get、__set
这两个方法是为在类和他们的父类中没有声明的属性而设计的
__get( $property )
当调用一个未定义的属性时访问此方法
__set( $property, $value )
给一个未定义的属性赋&#20540;时调用
这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)
<span style="color:#、__isset、__unset
__isset( $property )
当在一个未定义的属性上调用isset()函数时调用此方法
__unset( $property )
当在一个未定义的属性上调用unset()函数时调用此方法
与__get方法和__set方法相同,这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)
<span style="color:#、__call
__call( $method, $arg_array )
当调用一个未定义的方法是调用此访求
这里的未定义的方法包括没有权限访问的方法
<span style="color:#、__autoload
__autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在
PHP 出错失败前有了最后一个机会加载所需的类。
__autoload 函数中抛出的异常不能被
catch 语句块捕获并导致致命错误。
<span style="color:#、__construct、__destruct
__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称
__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法
默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.
析构函数允许你在使用一个对象之后执行任意代码来清除内存.
当PHP决定你的脚本不再与对象相关时,析构函数将被调用.
在一个函数的命名空间内,这会发生在函数return的时候.
对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它&#20540;.通常将变量赋&#20540;勤为NULL或者调用unset.
<span style="color:#、__clone
PHP5中的对象赋&#20540;是使用的引用赋&#20540;,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法
如果在对象复制需要执行某些初始化操作,可以在__clone方法实现
<span style="color:#、__toString&
__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时
如果类没有实现此方法,则无法通过echo打印对象,否则会显示:Catchable fatal error: Object of class test could not be converted to string in
此方法必须返回一个字符串
在PHP 5.2.0之前,__toString方法只有结合使用echo()
或 print()时 才能生效。PHP 5.2.0之后,则可以在任何字符串环境生效(例如通过printf(),使用%s修饰符),但
不能用于非字符串环境(如使用%d修饰符)。从PHP 5.2.0,如果将一个未定义__toString方法的对象
转换为字符串,会报出一个E_RECOVERABLE_ERROR错误。
<span style="color:#、__sleep、__wakeup
__sleep 串行化的时候用
__wakeup 反串行化的时候调用
serialize() 检查类中是否有魔术名称
__sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。
使用 __sleep
的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类&#20284;的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
相反地,unserialize()
检查具有魔术名称 __wakeup
的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。
使用 __wakeup
的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
<span style="color:#、__set_state
当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)。
本方法的唯一参数是一个数组,其中包含按array(’property’ =& value, …)&#26684;式排列的类属性。
<span style="color:#、__invoke
当尝试以调用函数的方式调用一个对象时,__invoke
方法会被自动调用。
PHP5.3.0以上版本有效
<span style="color:#、__callStatic
它的工作方式类&#20284;于 __call()
魔术方法,__callStatic()
是为了处理静态方法调用,
PHP5.3.0以上版本有效
PHP 确实加强了对
__callStatic() 方法的定义;它必须是公共的,并且必须被声明为静态的。同样,__call()
魔术方法必须被定义为公共的,所有其他魔术方法都必须如此。
十、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
public string GetExtended(string url)
&&&&return url.Substring(url.LastIndexOf(‘.‘));
例如:&&需要取出&php&或&.php
function getExt($url){
&&&$arr = parse_url($url);
&&&$file = basename($arr[‘path‘]);
&&&$ext = explode(&.&,$file);
&&&return $ext[1];
十一、php5的构造函数和析构函数是?
:__construct()
&在类实例化对象的同时执行该函数;析构函数:distruct()
在类实例化的对象销毁时执行。
十二、写一个函数,算出两个文件的相对路径
  $b = ‘/a/b/12/34/c.php‘;
  计算出 $b 相对于
$a 的相对路径应该是
../../c/d将()添上
function getRelativePath($a, $b) {&&
&&&&$returnPath = array(dirname($b));&&
&&&&$arrA = explode(‘/‘, $a);&&
&&&&$arrB = explode(‘/‘, $returnPath[0]);&&
&&&&for ($n = 1, $len = count($arrB); $n & $ $n&#43;&#43;) {&&
&&&&&&&&if ($arrA[$n] != $arrB[$n]) {&&
&&&&&&&&&&&&&&
&&&&&&&&}&&&
&&&&if ($len - $n & 0) {&&
&&&&&&&&$returnPath = array_merge($returnPath, array_fill(1, $len - $n, ‘..‘));&&
&&&&$returnPath = array_merge($returnPath, array_slice($arrA, $n));&&
&&&&return implode(‘/‘, $returnPath);&&
遍历文件夹及文件:
function show($dirs){
$dir = opendir($dirs);
echo &&ul&&;
while($f=readdir($dir)){
if($f!=‘.‘ && $f!=‘..‘){
echo &&li&{$f}&/li&&;
if(is_dir(&$dirs/{$f}&)){
show(&$dirs/{$f}&);
echo &&/ul&&;
getFiles(&C:\web\HTML5Upload&);
//getFiles($_SERVER[‘DOCUMENT_ROOT‘]);
十三、如何 实现网站静态化
使用php的ob缓存实现页面静态化 引出ob缓存,一键生成时过期时间一致。
方法一:使用现成的插件,比如:ISAPI_Rewrite、IIS Rewrite、Apache
HTTP服务器的mod_rewrite等,它们都是基于正则表达式解析器开发的重写引擎。它们的使用方法查看它们自带的帮助即可。
方法二:自己写的代码实现动态网页静态化,方法也有好几种:
1、创建FSO对象,利用此对象将所需的内容动态创建到文件中生成HTML页面;
2、利用模板技术,将模板中特殊代码的&#20540;替换为从表单或是数据库字段中接受过来的&#20540; 生成HTML文件;
3、使用Server.Transfer转换技术,
方法三:使用HttpWebRequest请求客户端的方式,获取返回资源,生成静态页面。一般这样只需要获取网页内容即可,其它资源可放置在服务器上,自动加载。(注:此方法缺点明显,需要大量更改匹配URL,建议慎用)
方法四:在asp中有IhttpModule接口。Ihttpmodule可以简单理解为一个可以在执行像.aspx,或者mvc中control/action前,添加我们自定义的操作的东西。
分类:服务器负载
确认服务器硬件是否足够支持当前的流量。
优化数据库访问。
禁止外部的盗链
控制大文件的下载
使用不同主机分流主要流量
使用流量分析统计软件。
客户端 $_SERVER[REMOTE_ADDR]
服务器 $_SERVER[SERVER_ADDR]
十六、include和require
include和require
都能把另外一个文件包含到当前文件中
include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。
require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。
十七、如何修改session的生存时间
一:在&中设置
session.gc_maxlifetime = 1440 //默认时间
二:代码实现
$lifeTime = 24 * 3600; &// 保存一天
session_set_cookie_params($lifeTime);
session_start();
$html&=&file_get_contents(‘/‘);&&
使用URL获取内容
使用sinope
十九、在HTTP&1.0中,状态码401的含义是什么;如果返回“找不到文件”的提示,用header函数
状态码401的含义是:未授权(Unauthorized)
如果返回“找不到文件”的提示 用:Header(&http/1.0 403 Forbidden&);
(一)、1字开头:这一类型 的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,史包含状态行和某些可选 的响应头信息,并以空行结束。
100 发出请求
101 切换协议
(二)、2字开头的状态码,请求已 成功被 器 接收、理解
200 交易成功
201 已创建
202 已接受
203 非权威性信息
204 无内存
205 重置内容
206 部分内容
207 多状态
(三)、3字开头:需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址在本次响应的location域中指明
301 永久移除
302 临时移除
(四)、4字开头:
1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求
2、请求参数有误
400 错误请求
401访问被拒绝
402 【为将来可能的需求而预留的】
403禁止访问
404 没有发现文件
(五)、代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以的软硬件资源无法完成对请求的处理,除非这是一个HEAD请求,澡是服务器应当包含一个解释当前错误状态以及这个善是临时的还是永久的解释 信息实体。浏览器应当向用户展示任何在当前响应中被 包含的实体
500 内部服务器错误
501 页眉&#20540;指定了未实现的配置
502 无效响应
503 服务器不可用
504 网关超时
505 服务器不支持
二十、谈谈对MVC的认识
MVC(Model-View-Controller),即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
视图(View):代表用户交互界面,MVC设计模式对于视图的处理是限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。
模型(Model):业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC的核心。
控制(Controller):可以理解为从用户接收请求,
将模型与视图匹配在一起,共同完成用户的请求,但是它却不做任何的数据处理。
二十一、php设计模式
1、单例模式 2、工厂模式 3、观察者模式 4、命令链模式
5、策略模式
1、&单例模式:
a)&一个类在整个应用中,只有一个对象实例的设计模式
b)&类必须自行创建这个实例
c)&必须自行向整个系统提供这个实例
三私:私有静态成员变量、构造函数、克隆函数
一公:公共的静态方法
2、工厂模式
可以根据输入的参数或者应用程序配置的不同一创建一种专门用来实例化并返回其它类的实例的类
3、观察者模式
观察者模式提供了组件之间紧密耦合的另一种方法。
该模式:一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)全本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。
二十二、HTTP & HTTPS
http ()超文本传输协议
https (Secure Hypertext Transfer Protocol)安全超文本传输协议
1、&效率更高
2、&使用端口80来和TCP/IP进行通信,
信息明文传输
1、&安全性更高
2、&端口443,使用SSL作为HTTP应用层的子层(SSL使用40位关键字作为RC4流的加密算法
SSL:安全保密协议,运行在TCP/IP层之上、应用层之下
3、&使用https需要到CA申请一个用于证明服务器用途类型的证书
1、&http的URL以http://开头,而https的URL以
2、&http是不安全的,而https是安全的
3、&http标准端口80,面https?的标准商品443
4、&在OSI网络模型中,http工作于应用层,https工作在传输层
5、&http无法加密,而https对传输的数据进行加密
6、&http无需证书,而https需要CA机构wosign颁发的SSL证书
二十三、MySql字符类型
二十四、《索引》
(1)&唯一索引:唯一的任务就是加快访问速度,唯一索引的目的是为了避免重复的数据。
(2)&普通索引:普通索引允许被索引的数据列包含重复的&#20540;。优点1、简化MySQL对这个索引的管理工作,使工作更有效率。2、MySQL会对新插入的数据自动检测是否有重复的&#20540;。
大多时候创建唯一索引的目的往往是为了避免重复的数据,而不是提高访问速度。
(3)&主索引 &:即主键索引,关键字PRIMARY
(4)&外键索引:外键约束
(5)&复合索引:索引可以覆盖多列数据。如 INDEX(columnA,columnB)。这种索引的特点是MySQL可以有选择的使用这样的一个索引,比如:INDEX(A,B,C)可以当做A或(A,B
)的索引来使用,但不能当做B或(B,C)来使用。
(6)&索引的长度:在为CHAR和VARCHAR类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数,这个数字必须小于这个字段所允许的最大字符个数。
(7)&全文索引:针对内容开头的字符进行检索操作,如果检索的内容是多个字段构成、数据量较大,全文索引是必要的。注解:InnoDB数据表不支持全文索引。
二十五、索引的优缺点
a)可以保证数据库表中每一行的数据的唯一性
b)可以大大加快数据的索引速度
c)加速表与表之间的连接,物别是在实现数据的参考完事性方面特别有意义
d)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
f)通过使用索引,可以在时间查询的过程中,使用优化隐藏器,提高系统的性能
a)&创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
b)&索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大
c)&以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度
4、&建立索引的原则
a)&在经常需要搜索的列上,可以加快搜索的速度
b)&在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构
c)&在经常用在连接的列上,这些列主要是一外键,可以加快连接的速度
d)&在经经常需要根据范围进行搜索的列上创建索引,国为索引已经排序,其指定的范围是连续的
e)&在经常需要排序的列上,国为索引已经排序,这样井底可以利用索引的排序,加快排序井底时间
f)&在经常使用在where子句中的列上,加快条件的判断速度
二十六、Innodb优缺点
构成上的区别:
&每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。
&&.frm文件存储表定义。
数据文件的扩展名为 .MYD(MYData)
索引文件的扩展名是 .MYI(MYIndex)
基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB
表的大小只受限于操作系统文件的大小,一般为 2GB
事务处理上方面:
&MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持
&InnoDB提供事务支持事务,
外部键等高级数据库功能
SELECT&& UPDATE,INSERT,Delete操作
MyISAM表&#26684;可以被压缩,
而且它们支持全文搜索
&不支持热备,不支持事务
执行大量的SELECT,MyISAM是更好的选择
1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表
&2.&DELETE&&FROM&table时,InnoDB不会重新建立表,而是一行一行的删除。
&&3.&LOAD&TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
对AUTO_INCREMENT的操作
每表一个AUTO_INCREMEN列的内部处理。
&&MyISAM为INSERT和UPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的&#20540;被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的&#20540;的情况)。
&&AUTO_INCREMENT&#20540;可用ALTER TABLE或myisamch来重置
&&对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引
&&更好和更快的auto_increment处理
如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新&#20540;。
&&自动增长计数器仅被存储在主内存中,而不是存在磁盘上
&&关于该计算器的算法实现,请参考
&&AUTO_INCREMENT列在InnoDB里如何工作
表的具体行数
&select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含&& where条件时,两种表的操作是一样的
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行
InnoDB不支持full text类型的索引。
提供行锁(locking on row level),提供与
Oracle 类型一致的不加锁读取(non-locking read in
&& SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update
table set num=1 where name like “%aaa%”
在 MyISAM 中,表被存放在单独的文件中
InnoDB 是一套放在 MySQL
后台的完整数据库系统,InnoDB
有它自己的缓冲池,能缓冲数据和索引,InnoDB
还把数据和索引存放在表空间里面,可能包含好几个文件,这和 MyISAM
表完全不同,InnoDB
表的大小只受限于操作系统文件的大小
MyISAM不支持热备
MyIASM是IASM表的新版本,有如下扩展:&
1)&二进制层次的可移植性。
2)&&NULL列索引
3)&对变长行比ISAM表有更少的碎片
4)&支持大文件
5)&更好的索引压缩
6)&更好的键吗统计分
7)&更好和更快的auto_increment处理
InnoDB支持热备,但是需要专门的工具
二十七、Mysql备份
(一)备份的目的
a)做灾难恢复:对损坏的数据进行恢复和还原
b)需求改变: &因需求改变而需要把数据还原到改变以前
c)测试: &&测试新功能是否可用
(二)&备份需要考虑的问题
a)可以容忍多长时间的数据
b)恢复数据要在多长时间内完成
c)恢复的时候是否需要持续提供服务
d)恢复的对像,是整个库,多个表,还是单个库,单个表
(三)备份的类型
1、根据是否需要数据库离线
a)&冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行
b)&温备(warm backup):服务在线,但只支持读请求,不允许写请求
c)&热备(hot backup):备份的同时,业务不受影响
1)&这种类型的数据取决于业务的需求,而不是备份工具
2)&MyISAM不支持热备,InnoDB支持热备,但是需要专门的工具
2、根据要备份的数据集合的范围
a)完全备份:full backup,备份全部字符集
b)增量备份:incremental backup
上次完全备份或增量备份以来改变了的数据,不能单独使用,要借助完全备份
c)差异备份:differential backup
上次完全备份以来改变了的数据
建议恢复策略:
1)&完全 + 增量 + 二进制日志
2)&完全 + 差异 + 二进制日志
3、根据备份数据或文件
a)物理备份:直接备份数据文件
优点:备份和恢复都比较简单,能够跨myslq的版本,恢复速度快,属于文件系统级别的
建议:不要假设备份一定可用,要测试
Mysql& 检测表是否可用
b)逻辑备份:备份表中的数据和代码
优点:恢复简单、备份的结果为ASCII文件,可以编辑。与存储引擎无关,可以通过网络备份和恢复
缺点:备份或恢复都需要mysql 服务器进程参与,备份结果占据更多的空间,浮点数可能会丢失精度,还原后,缩影需要重建
(四)、备份的对象
2、配置文件
3、代码:存储过程、存储函数、触发器
4、os相关的配置文件
5、复制相关的配置
6、二进制日志
(五)、备份和恢复的实现
参阅:http://www.jb51.net/article/41570.htm
二十八、Redis五种常用数据类型
1、&String
5、&Sort Set
6、&Pub/Sub
7、&transation
二十九、序列化和反序列化
1、&序列化:serialize()
2、&反序列化:unserialize()
三十、PHP 五种视觉的设计模式
·&工厂模式:
1、&是一种类,具有创建对象的某些方法
·&单元素模式:
2、&资源是独占的,有且只有一个此类型的资源。
·&观察者模式:
3、&观察者模式提供了避免组件之间耦合的另一种方法,该模式非常简单:一个对象通过添加方法(该方法允许另一个对象,即观察者自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。
·&命令链模式:
4、&以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求,如果可以,该请求被处理,进程停止。
·&策略模式:
5、&此算法是从复杂类提取的,因而可以方便地替换。
三十一、mb_substr
1、$str = &中文截取无乱码&;
/*中文截取
mb_substr($str,$start,$lenth,$encoding);
$str :需要截取的字符串
$start :开始截取的位置
$length :要截取的字数
$encoding :字符编码,utf-8,GB2312,GBK
echo mb_substr($str,2,3,‘utf8‘);
/*获取中文长度
$str :要计算长度的字符串
$encoding :字符编码,utf-8,GB2312,GBK
echo mb_strlen($str,‘utf-8‘);
此外可参考 &.cn/s/blog_8edc37ar.html
substr($str,int start[,int length]):从$str中strat位置开始提取[length长度的字符串]
str_replace(search,replace,$str):从$str中查找search用replace来替换
str_split($str,len):把$str按len长度进行分割返回数组
strtolower($str) 字符串转换为小写
strtoupper($str)
字符串转换为大写
ucfirst($str) 将函数的第一个字符转换为大写
ucwords($str) 将每个单词的首字母转换为大写
2、实现字符串反转:strrev($str);
3、php中将utf8转换成bgk
:iconv(“utf8”,”gbk”,$str)
strstr()函数的作用是:返回一个字符串在另一个字符串中首次出现的位置到后者末尾的子字符串(大小写敏感)。
三十二、支付宝支付的三种方式
1、担保交易 &2、即时到账 &3、担保交易和即时到账
负载均衡配置:1、权重
2、轮循(或加权轮循)
3、hash(分部IP段)
三十三、冒泡排序
三十四、PHP版本差别
PHP5.2&以前:autoload,&PDO&和&MySQLi,&类型约束&&、JSON&支持
PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定Heredoc&和&Nowdoc,&const,&三元运算符,Phar
PHP5.4:Short&Open&Tag,&数组简写形式,Traits,&内置&Web&服务器,细节修改
PHP5.5:yield,&list()&用于&foreach,&细节修改
PHP5.6:&常量增强,可变函数参数,命名空间增强
三十五、Apache与Nginx的优缺点
资源、性能
占用更少的内存和资源、抗并发
安装、配置都比较简单
静态处理性能比Apache高3倍以上
负载均衡能国比apache高
rewrite功能强大,相对稳定
异步非阻塞
同步多进程模型,一个连接对应一个进程
三十六、对称加密 与 非对称加密
1、&对称加密与解密使用的是同样的密钥,但由于需要将密钥在网络传输,所以安全性不高
2、&非对称加密使用了一对密钥,公钥与私钥,把以安全性高,但加密与解密速度慢
3、&解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通
(一)对称加密(Symmetric Cryptography)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。
(二)非对称加密(Asymmetric Cryptography)
允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。
三十七、数据库三大范式
1、&第一范式指:数据库表的每一列都是不可分割的基本数据项
2、&第二范式指:要求数据库表中的每个实例或行必须可以被唯一区分
3、&第三范式指:要求一个数据表中不包含已存在的非主关键字的信息
三十八、ob系列函数
1、ob_start() //打开缓冲区,所有输出的信息不直接发送到浏览器,而是保存在缓冲区里面
2、ob_clean() //删除内部缓冲区的内容,不关闭缓冲区(不输出)
3、ob_end_clean() //删除内部缓冲区的内容,关闭缓冲区(不输出)
4、ob_get_clean() //返回内部缓冲区的内容,关闭缓冲区。【相当于执行
ob_get_contents() and ob_end_clean()】
5、ob_flush() //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。
6、ob_end_flush() //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区
7、ob_get_flush() //返回内部缓冲区的内容,并关闭缓冲区的内容
8、ob_get_contents()//返回缓冲区的内容,不输出
9、ob_get_length() //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回
三十九、验证email
/^([0-9A-Za-z\\-_\\.]&#43;)@([0-9a-z]&#43;\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i
^[_.0-9a-z-]
四十、接口安全
签名(随机数)
其它一些常规的: 对称加密、非对称加密(公钥与私钥),md5
四十一、redis&与 memcache
1.Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复
2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
4.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
四十二、php传&#20540;与传引用的区别:
传&#20540;:将实参赋&#20540;给形参,形参的改变,不会影响到实参的&#20540;。
传引用:真正以地址的方式传递参数,传递以后,实参与形参都是同一个对象,只是名字不同而已,形参的改变,会影响到实参的&#20540;。
四十三、Nginx 负载均衡
1)&链路层
2)&网络层
3)&运输层:两台主机上的应用程序提供 端 到 端 的通信
4)&应用层:处理特定的应用程序细节
Telnet 运程登录
FTP 文件传输协议
SMTP 简单的邮件传送协议
SNMP 简单网络管理协议
四十四、Linux基本命令,目录结构
显示机器的处理器架构(1)&
显示机器的处理器架构(2)&
显示正在使用的内核版本&
dmidecode -q
显示硬件系统部件 - (SMBIOS / DMI)&
hdparm -i /dev/hda
罗列一个磁盘的架构特性&
hdparm -tT /dev/sda
在磁盘上执行测试性读取操作&
cat /proc/cpuinfo
显示CPU info的信息&
cat /proc/interrupts
cat /proc/meminfo
校验内存使用&
cat /proc/swaps
显示哪些swap被使用&
cat /proc/version
显示内核的版本&
cat /proc/net/dev
显示网络适配器及统计&
cat /proc/mounts
显示已加载的文件系统&
显示系统日期&
显示2007年的日历表&
设置日期和时间 -
月日时分年.秒&
将时间修改保存到 BIOS&
find / -name file1
开始进入根文件系统搜索文件和目录&
locate \*.ps
寻找以 ‘.ps‘ 结尾的文件
‘updatedb‘ 命令&
whereis halt
显示一个二进制文件、源码或man的位置&
which halt
显示一个二进制文件或可执行文件的完整路径&
挂载一个文件系统&
mount /dev/hda2 /mnt/hda2
挂载一个叫做hda2的盘
- 确定目录
‘/ mnt/hda2‘ 已经存在&
umount /dev/hda2
卸载一个叫做hda2的盘
- 先从挂载点
‘/ mnt/hda2‘ 退出&
1,linux里把文件/etc/aaa中的内容追加到/usr/bbb中的内容的后面
&&sudo cat /etc/aaa &&/usr/bbb
2,更改/etc/index.html的文件所有者为apache,文件群组为apache
&&sudo chmod apache:apache &/etc/index.html
3,更改/etc/index.html的所有者权限为读取、写入、执行。群组权限为读取。其他权限为读取
&&sudo chmod 744 /etc/index.html
4,删除/etc下名为hello的文件
&&sudo rm /etc/index.html
当然,如果你是以root用户执行以上操作,可以去掉前边的sudo!
df&-hl&查看磁盘剩余空间
df&-h&查看每个根路径的分区大小
du&-sh&[目录名]&返回该目录的大小
du&-sm&[文件夹]&返回该文件夹总M数
(系统的关机、重启以及登出 )&
shutdown -h now
关闭系统(1)&
关闭系统(2)&
关闭系统(3)&
shutdown -h hours:minutes &
按预定时间关闭系统&
shutdown -c
取消按预定时间关闭系统&
shutdown -r now
文件和目录&
显示工作路径&
查看目录中的文件&
查看目录中的文件&
显示文件和目录的详细资料&
显示隐藏文件&
ls *[0-9]*
显示包含数字的文件名和目录名&
显示文件和目录由根目录开始的树形结构(1)&
显示文件和目录由根目录开始的树形结构(2)&
mkdir dir1
创建一个叫做 ‘dir1‘ 的目录‘&
显示已经挂载的分区列表&
ls -lSr |more
以尺寸大小排列文件和目录&
du -sh dir1
估算目录 ‘dir1‘ 已经使用的磁盘空间‘&
下载、解压
1)对于.tar结尾的文件&
  tar -xf all.tar&
2)对于.gz结尾的文件&
  gzip -d all.gz&
  gunzip all.gz&
# zip all.zip *.jpg&
  这条命令是将所有.jpg的文件压缩成一个zip包&
# unzip all.zip&
  这条命令是将all.zip中的所有文件解压出来
wget &#43;
空&#26684; &#43; 要文件的url路径
=====================================
必须以 &#!/bin/sh &开头
简单例子:判断这个目录下有没有文件(File)
#!/bin/bash
/opt |grep &^-&|wc &`
if [ $Num != 0 ]
&then echo &/opt has $Num files&
&echo &/opt has none file&
/opt |grep &^-&|wc &&这个命令能够统计文件个数
为0就是没有文件 非零就是有文件
&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;
1、桌面共享:使用 Trim view
2、不清楚的东西先不要反问(反问要看准时机)
3、不以技术 论 技术
4、以本身的优势平衡不足
5、挂羊头卖狗肉(如果问到想法)
&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;
1、&TCP/IP,YII/TP 执行原理
TCP (传输控制协议) - 应用程序之间通信
IP&(网际协议) -计算机之间的通信
YII可参考(MVC) &
2、负载均衡和http(几层协议配置)【lvs四层,nginx七层,web一般四台】
3、数据怎么优化
1、&索引优化原则
数据类型越小越好,越简单越好,避免空&#20540;
2、&索引顺序:最左原则
例如:index(a,b)
时索引会被使用,只有 b
时不会被使用。(不同的数据库或不同的版本可能会有不同)
3、&聚集索引、B&#43;树、主键
一个表只能有一个聚集索引,聚集索引以B&#43;树形式存储,所以,聚集索引的规则决定了索引存放的物理顺序(聚集索引对需要最快速缩小查询访问及最快速进行字段排序时,非常有用),需要特别注意
1、&尽量避免表扫描,首先应考虑在 &where 及
order by 涉及的列上建立索引
2、&尽量避免在 where 子句中对字段进行
null &#20540;判断,否则将导致引擎放弃使用索引而进行全表扫描
select id from t where num is null
可以在num上设置默认&#20540;0,确保表中num列没有null&#20540;,然后这样查询:
select id from t where num=0
3、尽量避免在 where
子句中使用 !=
操作符,否则将放弃引擎而进行全表扫描
4、页面空&#20540;,输出php,404,是什么原因,解决办法是什么
空&#20540;:错误被屏蔽、可查看log日志
404 :rewrite规则
输出php:apache未开启
开启apache的错误级别
【 error_reporting(0)//禁用错误报告;
error_reporting(E_ALL)//报告所有错误;
error_reporting(E_ERROR | E_WARNING | E_PARSE);//报告运行时错误;
error_reporting(2047):
E_ALL能从不良编码实践到无害提示到出错的所有信息.E_ALL
对于开发过程来说有点太细,因为它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟浏览器的输出
所以不建议使用2047,最好把默认&#20540;改为:error_reporting = E_ALL & E_NOTICE
5、单点登录原理、路由规则
6、memcache缓存什么数据
一、经常被读取并且实时性要求不强可以等到自动过期的数据。例如网站首页最新文章列表、某某排行等数据。
二、经常被读取并且实时性要求强的数据。比如用户的好友列表,用户文章列表,用户阅读记录等。
三、统计类缓存,比如文章浏览数、网站PV等。
四、活跃用户的基本信息或者某篇热门文章。
五、session数据
四十六、PHP 全局变量
- 超全局变量
四十七、数组相关
1、向数组中插入一个&#20540;用什么函数
如果用&array_push()&来给数组增加一个单元,还不如用&$array[]
=&,因为这样没有调用函数的额外负担
如果第一个参数不是数组,array_push()&将发出一条警告。这和&$var[]&的行为不同,后者会新建一个数组
$stack&=&array(&orange&,&&banana&);
array_push($stack,&&apple&,&&raspberry&);
print_r($stack);
结果:Array( [0] =& orange &[1] =& banana &[2] =& apple &[3] =&
raspberry&)
将数组最后一个单元弹出(出栈)
将数组开头的单元移出数组
在数组开头插入一个或多个单元
l&字符串分割为数组:explode(在哪里分割字符串,要分割的字符串,返回的数组元素的最大数目《可选》)
l&array_merge_recursive()函数与array_merge()相同
·&array_merge()会覆盖前面存在的键/&#20540;对
·&array_merge_recursive()将把两个&#20540;合并在一起
l&array_combine()函数会得到一个新数组,它由一组提交的键和对应的&#20540;组成
n&两个输入数组必须大小相同,不能为空
l&array_slice()&&拆分数组
为正&#20540;时,拆分将从距数组开头的offset
位置开始;
n&如果offset
为负&#20540;,则拆分从距数组末尾的offset
位置开始。
n&如果省略了可选参数length,则拆分将从offset
开始,一直到数组的最后一个元素
n&果给出了length
且为正数,则会在距数组开头的offset&#43;length
n&负数相反
l&array_splice()函数会删除数组中从offset开始到offset&#43;length
结束的所有元素
l&array_intersect()函数返回一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的&#20540;组成(取交集)
l&array_intersect_assoc()与array_intersect()基本相同,只不过他在比较中还考虑了数组的键
l&array_diff()返回出现在第一个数组中但其他输入数组中没有的&#20540;。这个功能与array_intersect()相反(差集)
l&array_diff_assoc()与array_diff()基本相同,只是它在比较时还考虑了数组的键
l&array_key_exists()查找指定的键&#20540;,成功返回
true 失败 返回
l&shuffle() 函数
$my_array = array(&red&,&green&,&blue&,&yellow&,&purple&);
shuffle($my_array);
print_r($my_array);
Array ( [0] =& purple [1] =& yellow [2] =& red [3] =& green [4] =& blue )
2、&将一个数组打散
$string,[, int $split_length = 1 ])该函数将一个字符串转化为一个数组 ,第一个参数为需要转换的字符串,第二个可选参数为数组每个元素的长度,缺省&#20540;为1 &如下例
$str = &Hello Friend&;
$arr1 = ($str);
$arr2 = ($str,
print_r($arr1);
print_r($arr2);
Array&&(&[0] =& H&&[1]
=& e&&[2] =& l&&[3] =& l&&&[4] =& o&&&[5]
=&&&[6] =& F&&&[7] =& r&&[8] =& I&
&[9] =& e&&&[10]=& n&&[11] =& d&)
Array&&(&&[0] =& Hel&&[1]
=& lo&&[2] =& Fri&&[3] =& end&)
3、一个sql中有两个索引字段,运行时会先执行哪个。如何查看索引?
显示一个表所有索引的是:
show index from 数据库名.表名
看某表某一列上的索引使用下面的:
show index from 数据库名.表名
where column_name like ‘列名‘
敏感词过滤:如果有一个六千字的词库,怎么去匹配一个&100字的短语,并把其中的敏感词替换成xx
Mysql主从配置用的是内网还是公网
栈存储、堆存储,REST接口
四十八、Mysql 每天
1亿条数据的增量如何优化、分页。 主从同步原理,不同步的解决方案?
四十九、魔术方法
1。__construct()
实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
2。__destruct()
当删除一个对象或对象操作终止时被调用。
3。__call()
对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。
4。__get()
读取一个对象的属性时,若属性存在,则直接返回属性&#20540;;若不存在,则会调用__get函数。
5。__set()
设置一个对象的属性时,若属性存在,则直接赋&#20540;;若不存在,则会调用__set函数。
6。__toString()
打印一个对象的时被调用。如echo $或print $
7。__clone()
克隆对象时被调用。如:$t=new Test();$t1=clone $t;
8。__sleep()
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
9。__wakeup()
unserialize时被调用,做些对象的初始化工作。
10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c-&name)。
11。__unset()
unset一个对象的属性时被调用。如:unset($c-&name)。
12。__set_state()
调用var_export时,被调用。用__set_state的返回&#20540;做为var_export的返回&#20540;。
13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。
魔术常量:
<span style="color:#。__LINE__
返回文件中的当前行号。
<span style="color:#。__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自
PHP 4.0.2 起,__FILE__
总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
<span style="color:#。__FUNCTION__
返回函数名称(PHP 4.3.0
新加)。自 PHP 5
起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4
中该&#20540;总是小写字母的。
<span style="color:#。__CLASS__
返回类的名称(PHP 4.3.0
新加)。自 PHP 5
起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4
中该&#20540;总是小写字母的。
<span style="color:#。__METHOD__
返回类的方法名(PHP 5.0.0
新加)。返回该方法被定义时的名字(区分大小写)。
五十、JQuery
&&&type: &POST&,
&&&url: &some.php&,
&&&data: &name=John&location=Boston&,
&&&success: function(msg){
&&&&&alert( &Data Saved: & &#43; msg );
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!}

我要回帖

更多关于 医学检验面试常考题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信