配色: 字号:
后端PHP面试题
2017-11-17 | 阅:  转:  |  分享 
  
JSON的优点:1、基于纯文本,跨平台传递极其简单;2、Javascript原生支持,后台语言几乎全部支持;3、轻量级数据格式,占用
字符数量极少,特别适合互联网传递;4、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;5、容
易编写和解析,当然前提是你要知道数据结构;SESSION与COOKIE的区别是什么,请从协议,产生的原因与作用说明?1、ht
tp无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。2、SESSION存储在服务器
端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行
传递。禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有
资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_pa
th指定。Session文件是公有的。不使用cookie向客户端发送一个cookie.理解:session_start()开启时
,生成一个常量SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在U
RL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。当客户端开启COOKIE和服
务器端开启SESSION时。浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID.当浏览器第二次
请求时,会把已存在的COOKIE一起提交到服务器端。简述Cookie的设置及获取过程设置COOKIE的值:Setcookie(名称
,值,保存时间,有效域);获取值:$_COOKIE[''名称''];HTTP状态中302、403、500、200、404、502代
码含义?一二三四五原则:一.消息系列二.成功系列三.重定向系列四.请求错误系列五.服务器端错误系列302:临
时转移成功,请求的内容已转移到新位置403:禁止访问500:服务器内部错误401代表未授权。200是请求成功,404是文件
未找到,502是服务器内部错误。MyISAM和InnoDB的基本区别?索引结构如何实现?MyISAM类型不支持事务处理等高级
处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoD
B提供事务支持以及外部键等高级数据库功能。创建索引:alerttabletablenameaddindex(`字段名`)
include与require的区别?1.include()在执行文件时每次都要进行读取和评估require()文件只处理一次(
实际上文件内容替换了require()语句)2.require()通常放在PHP脚本程序的最前面include()的使用和req
uire()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以
把程序执行时的流程简单化3,require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样4
,include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()requ
ire()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括.5,require()包含文件失败,停止执行,给出错误(致命的
)include()常用于动态包含.通常是自动加载的文件,即使加载出错,整个程序还是继续执行一个页面声明,另一个页面调用包函文件失
败,继续向下执行,返回一条警告PHP字符串中单引号与双引号的区别?单引号不能解释变量,而双引号可以解释变量。单引号不能解释转义字符
,而双引号可以解释转义字符。请说明PHP中传值与传引用的区别。什么时候传值什么时候传引用?按值传递:函数范围内对值的任何改变在
函数外部都会被忽略按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改优缺点:按值传递时,php必须复制值。特别是
对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。functiontest
(&$a){$a=$a+100;}$b=1;echo$b;//输出1test($b);//这里$b传递给函数的其实是$b的
变量内容所处的内存地址,通过在函数里改变$a的值就可以改变$b的值了echo"
";echo$b;//输出101面向对
象中接口和抽象类的区别及应用场景?1、有抽象方法的类叫做抽象类,抽象类中不一定有抽象方法,抽象方法必须使用abstract关键字定
义。2、接口中全部是抽象方法,方法不用使用abstract定义。3、当有子类要设计一个上层,通常设计为抽象类,当多个类要设计一个上
层,通常设计为接口。echo(),print(),print_r()的区别?echo是PHP语句,print和print_r是函
数,语句没有返回值,函数可以有返回值(即便没有用)Print()只能打印出简单类型变量的值(如int,string)p
rint_r()可以打印出复杂类型变量的值(如数组,对象)echo输出一个或者多个字符串mysql_fetch_row(
)和mysql_fetch_array之间有什么区别?Mysql_fetch_row()以索引数组的方式取查询的结果集,mysq
l_fetch_array()以索引数组和关联数组两种方式取查询的结果集。33.HTTP协议中GET、POST和HEAD的区别?
HEAD:只请求页面的首部。GET:请求指定的页面信息,并返回实体主体。POST:请求服务器接受所指定的文档作为对所标识的U
RI的新的从属实体。(1)HTTP定义了与服务器交互的不同方法,最基本的方法是GET和POST。事实上GET适用于多数
请求,而保留POST仅用于更新站点。(2)在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的
数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符
号以16进制表示的ASCII(或ISOLatin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据
则放在实体数据中;GET方式提交的数据最多只能有1024字节,而POST则没有此限制。GET这个是浏览器用语向服务器请求最常用的
方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的
行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单
通常是用POST来传送的。表单中get与post提交方法的区别?1.get是把参数数据队列加到提交表单的ACTION属性所指
的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在H
TMLHEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。2.对于get方式,服务器端用Reque
st.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。3.get传送的
数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为10
0KB。get安全性非常低,post安全性较高。foo()和@foo()之间有什么区别?(1分)@foo()控制错误输出什么是数据
库索引,主键索引,唯一索引的区别,索引的缺点是什么?索引用来快速地寻找那些具有特定值的记录。主键索引和唯一索引的区别:主键是一种唯
一性索引,但它必须指定为“PRIMARY?KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。索引的
缺点:1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。2、索引需要占用物理空间,除了数据表占数据空间之外,每一个
索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。3、当对表中?的数据进行增加、删除、修改的时候,索引也要动态的维
护,这样就降低了数据的维护速度。使用那些工具进行版本控制?Clearcase、CVS、SVN、PVCS、Perforce、CCC
、StarTeam、RCS写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)MyISAM、InnoDB、BDB(Be
rkeleyDB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Black
hole、MaxDB等等十几个引擎什么是模板技术、能够使HTML和PHP分离开使用的模板?模板技术就是使程序的逻辑代码和界面分开
的技术。能够使HTML和PHP分开的模板有:Smarty、Template、PHPlibTemplate、FastTemplat
e实现中文字串截取无乱码的方法Mb_substr();用PHP写出显示客户端IP与服务器IP的代码获取客户端IP:get_env(
“REMOTE_ADDR”);获取服务器端IP:$_SERVER["SERVER_ADDR"];写几个魔术方法并说明作用?__ca
ll()当调用不存在的方法时会自动调用的方法__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件__s
et()当给未定义的变量赋值时会自动调用的方法__get()当获取未定义变量的值时会自动调用的方法__construct()构造方
法,实例化类时自动调用的方法__destroy()销毁对象时自动调用的方法__unset()当对一个未定义变量调用unset()时
自动调用的方法__isset()当对一个未定义变量调用isset()方法时自动调用的方法__clone()克隆一个对象__tost
ring()当输出一个对象时自动调用的方法$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_
FILE的意思是什么?它们都是PHP预定义变量$_REQUEST用来获取post或get方式提交的值$_POST用来获取post方
式提交的值$_GET用来获取get方式提交的值$_COOKIE用来获取cookie存储的值$_SESSION用来获取session
存储的值$_FILE用来获取上传文件表单的值数组中下标最好是什么类型的,为什么?数组的下标最好是数字类型的,数字类型的处理速度快。
++i和i++哪一个效率高,为什么?++i效率比i++的效率更高,因为++i少了一个返回i的过程。magic_quotes_gpc
()、magic_quotes_runtime()的意思是什么?Magic_quotes_gpc()是php配置文件中的,如果设置
为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加\Magic_quotes_runtime()是php中
的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。框架中什么是单一入口和多入口,单一入口
的优缺点?1、多入口就是通过访问不同的文件来完成用户请求。单一入口只web程序所有的请求都指向一个脚本文件的。2、单一入口更容易控
制权限,方便对http请求可以进行安全性检查。缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。你对Memcach的理解,
优点有哪些?Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,
而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。Memcache的优点:
稳定、配置简单、多机分布式存储、速度快。对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:索引的目的是什么?1、快
速访问数据表中的特定信息,提高检索速度2、创建唯一性索引,保证数据库表中每一行数据的唯一性3、加速表和表之间的连接4、使用分组和排
序子句进行数据检索时,可以显著减少查询中分组和排序的时间b)索引对数据库系统的小负面影响是什么?负面影响:创建索引和维护索引需要
耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增
、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。c)为数据表建立索引的原则有哪些?1、在最频繁使用的、用以缩小查询范
围的字段上建立索引2、在平频繁使用的、需要排序的字段上建立索引d)什么情况下不宜建立索引?1、对于查询中很少涉及的列或者重复值比
较多的列,不宜建立索引2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。web应用中,数据库的读取频率远高于写
入频率,如何优化MySQL而应对此种情景?使用memcache缓存技术,而不必重新访问数据库,这样就减少了查询数据库的次数。如果
网站的访问量很大,可以把数据库读写服务器分开,使用多态服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。请举例说明
在你的开发过程中用什么方法来加快页面的加载速度要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等
大文件单独服务器。使用代码优化工具。描述一下大流量高并发量网站的解决方案1、确认服务器硬件是否足够支持当前的流量。2、使用me
mcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库。3、禁止外部的盗链。4、外部网站的
图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文件盗链,目前可以简单的通过refer来控制盗链,ap
ache自己就可以通过配置来禁止盗链。5、控制大文件的下载。大文件的下载会占用很大的流量,对于非SCSI硬盘来说会消耗,使得网
站响应能力下降。6、使用不同的主机分流主要流量7、使用流量统计软件。在网站上安装一个流量统计软件,可以即时知道哪些地方耗费了
大量流量,哪些页面需要再进行优化。8、分库分表。设定网站的用户数量在千万级,但是活跃用户的数量只有1%,如何通过优化数据库提高活
跃用户的访问速度?我们可以根据用户的活跃程度,把活跃的用户提取出来放到另外一张表里面,每次活跃的用户登陆的时候就直接到活跃用户表中
进行查询,这样就提高了数据库的查询速度。了解XSS攻击吗?如何防止?XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式
去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。使用htmlspecialchars()函数对提交的内容
进行过滤,使字符串里面的特殊符号实体化。SQL注入漏洞产生的原因?如何防止?SQL注入产生的原因:程序开发过程中不注意规范书写
sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。如何进行防SQL注入?1
、过滤掉一些常见的数据库操作关键字:select,insert,update,delete,and,等或者通过系统函数:adds
lashes(需要被过滤的内容)来进行过滤。2、在PHP配置文件中Register_globals=off;设置为关闭状态//
作用将注册全局变量关闭。比如:接收POST表单的值使用$_POST[''user''],如果将register_globals=on;
直接使用$user可以接收表单的值。3、SQL语句书写的时候尽量不要省略小引号(tab键上面那个)和单引号4、提高数据库命名技
巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的5、对于常用的方法加以封装,避免直接暴漏SQL语句6、开启PHP安全模
式Safe_mode=on;7、打开magic_quotes_gpc来防止SQL注入Magic_quotes_gpc=off;
默认是关闭的,它打开后将自动把用户提交的sql语句的查询进行转换,把''转为\'',这对防止sql注入有重大作用。因此开启:magic
_quotes_gpc=on;8、控制错误信息关闭错误提示信息,将错误信息写到系统日志。9、使用mysqli或pdo预处理。用
PHP写出一个安全的用户登录系统需要注意哪些方面。1、密码要使用MD5(密码+字符串)进行加密。2、登录表单的名称不要跟数据库字段
一样,以免暴漏表字段。3、用户表的表名、字段名、密码尽量用不容易被猜到的。4、要使用验证码验证登陆,以防止暴力破解。5、验证提交的
数据是不是来自本网站。6、登录后台处理代码数据库部分使用预处理,做好过滤,防止sql注入。如何实现多个线程安全的写入一个文件数据。
采用锁机制,当一个用户在对此文件进行读写入操作时,将此文件锁定,操作完毕后解除锁定,在该用户进行读写入操作过程中,其他用户不能操作
此文件,需要排队等待。?字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?Implode()、ex
plode()、substr()、str_replace()、strpos、strrpos、strstrGD库是做什么用的?(1
分)gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩略图或者用来对图片
加水印或者对网站数据生成报表。在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。谈谈对mvc的认识?由模
型(model),视图(view),控制器(controller)完成的应用程序由模型发出要实现的功能到控制器,控制器接收组织功能
传递给视图;MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控
制器。它们各自处理自己的任务。视图是用户看到并与之交互的界面。模型表示企业数据和业务规则。控制器接受用户的输入并调用模型和视图去完
成用户的需求。MVC的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理
PHP如何抛出和接收错误?使用try...catch,异常的代码放在try代码块内,如果没有触发异常,则代码继续执行,如果异常被触
发,就会抛出一个异常。Catch代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息
。PHP的网站主要攻击方式有哪些?1、命令注入(CommandInjection)2、eval注入(EvalInjectio
n)3、客户端脚本攻击(ScriptInsertion)4、跨网站脚本攻击(CrossSiteScripting,XSS)
5、SQL注入攻击(SQLinjection)6、跨网站请求伪造攻击(CrossSiteRequestForgeries,
CSRF)7、Session会话劫持(SessionHijacking)8、Session固定攻击(SessionFix
ation)9、HTTP响应拆分攻击(HTTPResponseSplitting)10、文件上传漏洞(FileUpload
Attack)11、目录穿越漏洞(DirectoryTraversal)12、远程文件包含攻击(RemoteInclusion
)13、动态函数注入攻击(DynamicVariableEvaluation)14、URL攻击(URLattack)15、表
单提交欺骗攻击(SpoofedFormSubmissions)16、HTTP请求欺骗攻击(SpoofedHTTPReque
sts)几个重要的php.ini选项RegisterGlobalsphp>=4.2.0,php.ini的register_glo
bals选项的默认值预设为Off,当register_globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单
提交的变量,而且由于PHP不必事先初始化变量的值,从而导致很大的安全隐患。safe_mode安全模式,PHP用来限制文档的存取、限
制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini中的safe_mode=On1、限制文件存取safe_
mode_include_dir=“/path1:/path2:/path3″不同的文件夹用冒号隔开2、限制环境变量的存取sa
fe_mode_allowed_env_vars=string指定PHP程序可以改变的环境变量的前缀,如:safe_mode_
allowed_env_vars=PHP_,当这个选项的值为空时,那么php可以改变任何环境变量safe_mode_prot
ected_env_vars=string用来指定php程序不可改变的环境变量的前缀3、限制外部程序的执行safe_mode_
exec_dir=string此选项指定的文件夹路径影响system、exec、popen、passthru,不影响shell
_exec和“``”。disable_functions=string不同的函数名称用逗号隔开,此选项不受安全模式影响mag
icquotes用来让php程序的输入信息自动转义,所有的单引号(“’”),双引号(“””),反斜杠(“\”)和空字符(NULL
),都自动被加上反斜杠进行转义magic_quotes_gpc=On用来设置magicquotes为On,它会影响HTT
P请求的数据(GET、POST、Cookies)程序员也可以使用addslashes来转义提交的HTTP请求数据,或者用strip
slashes来删除转义使用过哪些PHP框架。1、YII框架:2、ThinkPHP框架:php中,模板引擎的目的是什么?你用过哪
些模板引擎?使用模板引擎的目的是使程序的逻辑代码和html界面代码分离开,是程序的结构更清晰。使用过的模板引擎:Smarty、Th
inkPHP的ThinkTemplate如何在页面之间传递变量(至少两种方式)?GET,POST,COOKIE,SESSIO
N你所知道的php数组相关的函数?array()----创建数组array_combine()----通过合并两个数组来创建一个新
数组range()----创建并返回一个包含指定范围的元素的数组compact()----建立一个数组array_chunk()-
---将一个数组分割成多个array_merge()----把两个或多个数组合并成一个数组array_slice()----在数组
中根据条件取出一段值array_diff()----返回两个数组的差集数组array_intersect()----计算数组的交集
array_search()----在数组中搜索给定的值array_splice()----移除数组的一部分且替代它array_k
ey_exists()----判断某个数组中是否存在指定的keyshuffle()----把数组中的元素按随机顺序重新排列arra
y_flip()----交换数组中的键和值array_reverse()----将原数组中的元素顺序翻转,创建新的数组并返回arr
ay_unique()----移除数组中重复的值你所熟悉的开源项目有哪些?你所知道的设计模式有哪些?工厂模式、策略模式、单元素模式
、观察者模式、命令链模式常使用那些代码版本控制软件?通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目
负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。常用的版本控制器:SVNPHP加速模式/扩展?P
HP调试模式/工具?ZendOptimizer加速扩展调试工具:xdebugshowprocesslist;这个命令的作用?
显示哪些线程正在运行SHOWVARIABLES;这个命令的作用?显示系统变量和值SHOWVARIABLESlike’%c
onn%’;这个命令的作用?显示系统变量名包含conn的值LEFTJOIN写一个SQL语句?SELECTA.id,A.cl
assFROMALEFTJOINBONA.cid=B.id请写出5个常用的unix操作命令。1、Ls?-l2、tar
?-zxvf3、Touch4、Cat5、Mkdir6、rm请写出以下5个UNIX系统配置文件/服务的作用。/etc/passwd?
/etc/hosts?/etc/fstab?Crontabsshd1、/etc/passwd?:用户信息文件,其中包含用户名、用户
是否有密码、用户ID及用户所属组2、/etc/hosts:主机名数据库,包IP地址、主机名或域名、别名等信息,在此文件中添加记录可
绕过DNS3、/etc/fstab??保存了系统所有分区信息的配置文件。4、Crontab?计划任务命令5、Sshd?远程连接管理
命令请列出5个常用的PHP操作MySQL的函数1、Mysql_connect()2、Mysql_select_db()3、Mysq
l_query()4、Mysql_fetch_row()5、Mysql_close()?什么是时间戳?如何取得当前时间戳?时间戳
是从1970年1月1日00:00:00到指定日期的秒数。获取当前时间戳:time()有一个网页地址,比如PHP开发资源网主页:
http://www.phpres.com/index.html,如何得到它的内容?获取网页内容:$url=”http://ww
w.phpres.com/index.html“;$str=file_get_contents($url);如何得到当前执行脚本路
径,包括所得到参数$_SERVER[''DOCUMENT_ROOT''].$_SERVER[''REQUEST_URI''];取得当前页面
的完整路径和参数。取得参数:$_SERVER[''QUERY_STRING''];如何用php的环境变量得到一个网页地址的内容?ip地
址又要怎样得到?echo$_SERVER["PHP_SELF"];echo$_SERVER["SERVER_ADDR"];
求两个日期的差数,例如2007-2-5~2007-3-6的日期差数$begin=strtotime(“2007-2-5″);
$end=strtotime(“2007-3-6″);echo($end-$begin)/(243600);给一个变量赋值为0
123,但是输出该变量的值总是为其他数字,请问这是什么问题?PHP解释器会把以0开始的数字当做是八进制的,所以它的值会变成八进制
的。PHP里面如何定义一个常量(constant)?通过define()指令,例如:define(”MYCONSTANT”,10
0)如何对一个变量进行值传递?可以像C++那样,在变量的前面加上&,例如:$a=&$b在PHP里面可以对string“1
0″和整型11进行比较吗?可以,PHP内部实现会把所有东西转换成整型,所以数字10和11可以进行比较在什么情况下需要用endi
f来结束条件语句?当if语句后面跟的是冒号”:”而不是大括号{时,需要用endif来结束条件语句优化MYSQL数据库的方法。1、
选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOTNULL,例如’省份,性别’,最好设置为ENUM2、使用连接(
JOIN)来代替子查询:3、使用联合(UNION)来代替手动创建的临时表4、事务处理:5、锁定表,优化事务处理:6、使用外键,优化
锁定表7、建立索引:a.格式:(普通索引)->创建:CREATEINDEX<索引名>ONtablename(索引字段)修
改:ALTERTABLEtablenameADDINDEX[索引名](索引字段)创表指定索引:CREATETABLE
tablename([...],INDEX[索引名](索引字段))(唯一索引)->创建:CREATEUNIQUE<索引名>
ONtablename(索引字段)修改:ALTERTABLEtablenameADDUNIQUE[索引名](索引字
段)创表指定索引:CREATETABLEtablename([...],UNIQUE[索引名](索引字段))(主键)->它是唯
一索引,一般在创建表是建立,格式为:CREATATABLEtablename([...],PRIMARYKEY[索引字段]
)8、优化查询语句分别指出php.ini中magic_quotes_gpc,magic_quotes_runtime两项参数的
作用.Magic_quotes_gpc的作用是在POST、GET、COOKIE数据上使用addslashes()自动转义。Magi
c_quotes_runtime参数的作用是设置状态,当状态为0时则关闭自动转义,设置为1则自动转义,将数据库中取出来的单引号、双
引号、反斜线这些字符加上反斜杠转义。如何快速下载一个远程http服务器上的图片文件到本地?$file=”";$fp=fopen($
file,’rb’);$img=fread($fp,10000);$dir=”./”;$local=fopen($dir.’/’.
basename($file),’w'');Fwrite($local,$img);一个字节占多少bit?一个IPv4地址占几个
字节?一个IPv6地址呢?一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。如何实例化一个名为”myclas
s”的对象?newmyclass()你如何访问和设置一个类的属性?(2分)$object=newmyclass();$n
ewstr=$object->test;$object->test="info";请写出一个正则表达式,用于匹配一个HTM
L文件中标记中的图片地址$url=””;/](.)[''|\"][\s]\/>/在PHP中error_reporting这个函数有什么作用?设置PHP的报错级别并返回
当前级别。使用PHP描述快速排序算法,对象可以是一个数组?原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:
(1)从数列中挑出一个元素,称该元素为“基准”。(2)扫描一遍数列,将所有比“基准”小的元素排在基准前面,所有比“基准”大的元素排
在基准后面。(3)通过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。//快速排序(数
组排序)functionQuickSort($arr){$num=count($arr);$l=$r=0;for($i=1;
$i<$num;$i++){if($arr[$i]<$arr[0]){$left[]=$arr[$i];$l++;}els
e{$right[]=$arr[$i];$r++;}}if($l>1){$left=QuickSort($left);
}$new_arr=$left;$new_arr[]=$arr[0];if($r>1){$right=QuickS
ort($right);}for($i=0;$i<$r;$i++){$new_arr[]=$right[$i];}return
$new_arr;}使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组//二分
查找(数组里查找某个元素)functionbin_sch($array,$low,$high,$k){if($low<
=$high){$mid=intval(($low+$high)/2);if($array[$mid]==$k){re
turn$mid;}elseif($k<$array[$mid]){returnbin_sch($array,$low
,$mid-1,$k);}else{returnbin_sch($array,$mid+1,$high,$k);}}r
eturn-1;}//顺序查找(数组里查找某个元素)functionseq_sch($array,$n,$k){$arra
y[$n]=$k;for($i=0;$i<$n;$i++){if($array[$i]==$k){break;}}if(
$i<$n){return$i;}else{return-1;}}写一个二维数组排序算法函数,能够具有通用性,可以调用php内
置函数//二维数组排序,$arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序functionar
ray_sort($arr,$keys,$order=0){if(!is_array($arr)){returnfal
se;}$keysvalue=array();foreach($arras$key=>$val){$keysvalu
e[$key]=$val[$keys];}if($order==0){asort($keysvalue);}else{a
rsort($keysvalue);}reset($keysvalue);foreach($keysvalueas$key=
>$vals){$keysort[$key]=$key;}$new_array=array();foreach($ke
ysortas$key=>$val){$new_array[$key]=$arr[$val];}return$ne
w_array;}PHPsession扩展默认将session数据储存在哪里?DSQLiteDatabaseB)MyS
QLDatabaseC)SharedMemoryD)FileSystemE)SessionServer如果你想
要自动加载类,下面哪种函数声明是正确的Cfunctionautoload($class_name)B)function
__autoload($class_name,$file)C)function__autoload($class_name
)D)function_autoload($class_name)E)functionautoload($class_
name,$file)设计一个页面(4个div第一个div宽960px居中;嵌入第2-4个div等分960px;)yle>Body{Text-align:center;Margin:0;Padding:0;}#box{Width:96
0px;Margin:0auto;}.small{Width:320px;Float:left;}ivid=’box’>vclass=’small’>简述如何得到当前执行脚本路径,包括所得到参数。(2分)$script_na
me=basename(__file__);print_r($script_name);js中网页前进和后退的代码前进:
history.forward();=history.go(1);后退:history.back();=history.go(-
1);JS表单弹出对话框函数是?获得输入焦点函数是?(2分)弹出对话框:alert(),prompt(),confirm()
获得输入焦点focus()JS的转向函数是?怎么引入一个外部JS文件?(2分)window.location.href,ripttype="text/javascript"src="hello.js">用javascript取得
一个input的值?取得一个input的属性?document.getElementById(‘name’).value;docu
ment.getElementById(‘name’).type;用Jquery取得一个input的值?取得一个input的属性?
$(“input[name=''aa'']“).val();$(“input[name=''aa'']“).attr(‘name’);写一
个简单的jquery显示隐藏代码?$("#aa").hide();$("#aa").show();javascript能否定义二维
数组,如果不能你如何解决?javascript不支持二维数组定义,可以用arr[0]=newarray()来解决请使用Jav
aScript写出三种产生一个Image标签的方法(提示:从方法、对象、HTML角度考虑)(1)varimg=newIm
age();(2)varimg=document.createElementById(“image”)(3)img.inne
rHTML=“”假设a.html和b.html在同一个文件夹下面,用javascr
ipt实现当打开a.html五秒钟后,自动跳转到b.html。Linux的目录进行遍历,编写shell脚本#!/bin/bashTree指出以下代码
片段中的SQL注入漏洞以及解决方法(magic_quotes_gpc=off)mysql_query(“selectid,t
itlefromcontentwherecatid=’{$_GET[catid]}’andtitlelike’%$
_GET[keywords]%’”,$link);注入漏洞主要存在用户提交的数据上,这里的注入漏洞主要是$_GET[catid]
和$_GET[keyword]解决注入漏洞:$_GET[catid]=intval($_GET[catid]);$sql=”sel
ectid,titlefromcontentwherecatid=’{$_GET[catid]}’andtitle
like’%$_GET[keywords]%”;$sql=addslashes($sql);Mysql_query($sql);
把John新增到users数组?$users[]=‘john’;array_push($users,‘john’)
;在PHP中error_reporting这个函数有什么作用?error_reporting()设置PHP的报错级别并返回当
前级别。如何修改SESSION的生存时间.方法1:将php.ini中的session.gc_maxlifetime设置为9999重
启apache方法2:$savePath=“./session_save_dir/”;$lifeTime=小时秒;s
ession_save_path($savePath);session_set_cookie_params($lifeTime);
session_start();方法3:setcookie()andsession_set_cookie_params($li
feTime);请写一个函数,实现以下功能:字符串“open_door”转换成“OpenDoor”、”make_by_id”
转换成”MakeById”。方法:functionstr_explode($str){$str_arr=explode(“_”
,$str);$str_implode=implode(”“,$str_arr);$str_implode=implode(“
”,explode(”“,ucwords($str_implode)));return$str_implode;}$strex
plode=str_explode(“make_by_id”);print_r($strexplode);方法二:$str=”ma
ke_by_id!”;$expStr=explode(“_”,$str);for($i=0;$ii++){echoucwords($expStr[$i]);}方法三:echostr_replace(‘‘,”,ucword
s(str_replace(‘_’,’‘,’open_door’)));下面的类是否正确,如果正确请补全方法输入类属性$_a;错
误请修改并输出属性$_acho$this->a;}}答:$a=newA;$a->test();请取出数组中的最大值?$a=array(1,9,3,5,
6,8);$a=array(1,2,3,4,5,9);答:$b=max($a);echo$b;or$a=array(1,9,3,
5,6,8);rsort($a);Echoarray_shift($a);写出一个简单的静态数组?ClassA{Static
$a=array(''11''=>''1111'');}Print_r(A::$a);从表login中选出name字段包含admin的前1
0条结果所有信息的sql语句Selectfromloginwherenamelike''%admin%''limit
0,10;写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
SELECTFROM`members`ORDERBYpostsDESClimit0,10;检测一个变量是否有设
置的函数是否?是否为空的函数是?(2分)isset($str),empty($str);取得查询结果集总数的函数是?(1分)答:m
ysql_num_rows($result);$arr=array(''james'',''tom'',''symfony'');请
打印出第一个元素的值(1分)答:echo$array[0];完成以下:(一)创建新闻发布系统,表名为message有如下字段
(3分)id文章idtitle文章标题content文章内容category_id文章分类idhits点击量答:
CREATETABLE''message''(''id''int(10)NOTNULLauto_increment,''titl
e''varchar(200)defaultNULL,''content''text,''category_id''int(10)
NOTNULL,''hits''int(20),PRIMARYKEY(''id'');)ENGINE=InnoDBDEFAULT
CHARSET=utf8;在数据库test中的一个表student,字段是name,class,score。分别代表姓名、所在班
级,分数。1)?学出每个班级中的学生,按照成绩降序排序;select??from?student?order?by?score?
desc;?查出每个班的及格人数和不及格人数,格式为:class、及格人数、不及格人数;Select?A.class,A.及格人数
,B.不及格人数?from?(select?class,?count()?as?’及格人数‘?from?student?wher
e?score>=60?group?by?class)?as?A,(select??class,count()?as?’不及格人
数‘?from?student?where?score<60?group?by?class)?as?B?where?A.class
=B.class;3)?用PHP写入连接数据库(“localhost”,”msuser”,”mspass”)、执行以上SQL、显示
结果、判断错误、关闭数据库的过程;$conn=mysql_connect(‘localhost’,''root’,’12345′);
Mysql_select_db(‘test’);$sql=”";$result=Mysql_query($sql);Mysql_c
lose();ftp://pub.foo.bar.com:2121/incoming/rls.sfv?请给出这个URL各部分的意义
?1、ftp://?;使用的协议是:ftp2、Pub.foo.bar.com?是域名3、2121?是使用的端口4、Incoming
/rls.sfv?是当前访问的文件。下列不属于Javascrip?DOM操作事件的是?CA.?onclickB.?onkeydow
nC.?onbodyloadD.?onmouseover下列PHP函数中不能直接在页面输出字符串的函数是?BA.?echoB.?s
printfC.?printf在PHP中,‘+’操作符的功能不包括?AA.?字符串连接B.?数组数据合并C.?变量数据相加下面哪个
选项没有将john添加到users数组中?C(A)?$users[]?=?’john’;(B)?array_push($users
,?’john’);(C)?$users?||=?’john’;(D)?array_unshift($users,?’john’)
;请列出3种PHP数组循环操作的语法,并注明每种循环的优缺点?1、Foreach()?可以遍历关联数组和索引数组,操作简单。2、F
or()?只能遍历索引数组。3、Each?list?while?以关联和索引两种方式遍历数组,操作复杂。请列出3个PHP中的预定义
全局变量?1、$_SESSION2、$_COOKIE3、$_SERVER4、$_GET5、$_POST从PHP4.2.0开始?PH
P默认配置将register_globals配置设定为off,请指出这个设定的作用和对PHP相关程序的影响。Register_gl
obals=off;的时候,关闭了全局变量注册,访问POST方式提交值时用$_POST[];来访问,访问GET方式提交的值时用$_
GET[];方式访问。?输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100?—?192.168.1.150
之间Echo?$ip=getenv(‘REMOTE_ADDR’);$ip=Str_replace(‘.’,”",$ip);If($
ip<1921681150?&&?$ip>1921681100){Echo?’ip在192.168.1.100—–192.168.
1.150之间‘;}Else{Echo?’ip不在192.168.1.100—–192.168.1.150之间‘;}输出为Mozi
lla/4.0(compatible;MSIE5.01;WindowNT5.0)时,可能的输出语句是:BA.$_SERVER
[''HTTP_USER_AGENT_TYPE''];B.$_SERVER[''HTTP_USER_AGENT''];C.$_SE
RVER[''USER_AGENT''];D.$_SERVER[''AGENT''];下面说法不正确的是:CA.PHP有四种标量
类型:布尔型(boolean),整型(integer),浮点型(float),字符串(string)B.浮点型(float)与
双精度型(double)是同一种类型C.符合类型包括:数组(array),对象(object),资源(resource)D.
伪类型:混合型(mixed),数字型(number),回调(callback)下面不是PHP语法的组成部分的函数是:ADA.
arrayB.evalC.eachD.list执行下面的代码的结果是什么?A;echogettype($bool);echois_string($bool);?>A.booleanB.b
oolean0C.booleanFALSED.booleanfalse如何提高php应用的性能1、如果能将类的方法定义
成static,就尽量定义成static,它的速度会提升将近4倍。2、$row[’id’]的速度是$row[id]的7倍。3、e
cho比print快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo$str1,$str2
。4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。5、注销那些不用的变量尤其是大数
组,以便释放内存。6、尽量避免使用__get,__set,__autoload。7、require_once()代价昂贵。8、in
clude文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于
time()。10、函数代替正则表达式完成相同功能。11、str_replace函数比preg_replace函数快,但strtr
函数的效率是str_replace函数的四倍。12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以
考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。13、使用选择分支语句(译注:
即switchcase)好于使用多个if,elseif语句。14、用@屏蔽错误消息的做法非常低效,极其低效。15、打开apac
he的mod_deflate模块,可以提高网页的浏览速度。16、数据库连接当使用完毕时应关掉,不要用长连接。17、错误消息代价昂贵
。18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。19、递增一个全局变量要比递增一个局部变量慢2倍
。20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。21、递增一个未预定义的局部变量要比递增一个
预定义的局部变量慢9至10倍。22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大
概会检查看是否存在全局变量。23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能
上没有变化。24、派生类中的方法运行起来要快于在基类中定义的同样的方法。25、调用带有一个参数的空函数,其花费的时间相当于执行7至
8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。26、Apache解析一个PHP脚本的时间要比解
析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引
入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。28、尽量做缓存,可使用memcached。memcach
ed是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码(OPcode)的缓存很有用,使得脚本不必为每个请求做重新编译。29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset()技巧加速执行你的代码。(举例如下)if(strlen($foo)<5){echo“Fooistooshort”$$}(与下面的技巧做比较)if(!isset($foo{5})){echo“Fooistooshort”$$}调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。36、并非要用类实现所有的数据结构,数组也很有用。37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?38、当你需要时,你总能把代码分解成方法。39、尽量采用大量的PHP内置函数。40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;45、优化SelectSQL语句,在可能的情况下尽量少的进行Insert、Update操作;46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);48、多维数组尽量不要循环嵌套赋值;49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;50、foreach效率更高,尽量用foreach代替while和for循环;51、用单引号替代双引号引用字符串;52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;53、对global变量,应该用完就unset()掉。制作:软件研发优化群210414115-6-
献花(0)
+1
(本文系琼bdeodxkaj...首藏)