配色: 字号:
PHP面试题(网络)
2017-11-17 | 阅:  转:  |  分享 
  
1、双引号和单引号的区别双引号解释变量,单引号不解释变量双引号里插入单引号,其中单引号里如果有变量的话,变量解析双引号的变量名后面必须要有一
个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误双引号解释转义字符,单
引号不解释转义字符,但是解释''\和\\能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没
有变量,然后再进行操作,而单引号则不需要判断)2、常用的超全局变量(8个)$_GET----->get传送方式$_POST--
--->post传送方式$_REQUEST----->可以接收到get和post两种方式的值$_GLOBALS-----
>所有的变量都放在里面$_FILE----->上传文件使用$_SERVER----->系统环境变量$_SESSION
----->会话控制的时候会用到$_COOKIE----->会话控制的时候会用到3、HTTP中POST、GET、PUT、DELE
TE方式的区别HTTP定义了与服务器交互的不同的方法,最基本的是POST、GET、PUT、DELETE,与其比不可少的URL的全称
是资源描述符,我们可以这样理解:url描述了一个网络上资源,而post、get、put、delete就是对这个资源进行增、删、改、
查的操作!3.1表单中get和post提交方式的区别get是把参数数据队列加到提交表单的action属性所指的url中,值和表单内
各个字段一一对应,从url中可以看到;post是通过HTTPPOST机制,将表单内各个字段与其内容防止在HTML的head中一起传
送到action属性所指的url地址,用户看不到这个过程对于get方式,服务器端用Request.QueryString获取变量的
值,对于post方式,服务器端用Request.Form获取提交的数据get传送的数据量较小,post传送的数据量较大,一般被默认
不受限制,但在理论上,IIS4中最大量为80kb,IIS5中为1000k,get安全性非常低,post安全性较高3.2GET请求会
向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影
响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。与GET不同的是,PUT请求是向服务器端发送数据的,从而
改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,
其结果并没有不同。POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的inser
t操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。DELETE请求顾名思义,就是用来删除某一个资源的,该请求
就像数据库的delete操作。4、PHP介绍HypertextPreprocessor----超文本预处理器PersonalH
omePage原始名称目标用途:?允许web开发人员快速编写动态生成的web页面,与其他页面相比,PHP是将程序嵌入到HTML
文档中去执行,效率比完全生成HTML编辑的CGI高很多HTML:?HypertextMarkupLanguage创始人:?拉姆
斯勒·勒多夫RasmusLerdorf,1968年生,加拿大滑铁卢大学勒多夫最开始是为了维护个人网页,用prel语言写了维护程序
,之后又用c进行了重写,最终衍生出php/fi时间轴:1995.06.08将PHP/FI公开释出1995php2.0,加入了对M
ySQL的支持1997php3.02000php4.02008php5.0由于php6.0没有完全解决Unicode编码,所
以基本没有生产线上的应用,基本只是一款概念产品,很多功能已经在php5.3.3和php5.3.4上实现常见的IDE(Intergr
atedDevelopmentEnvironment):?集成开发环境Coda(mac)PHPStromAdobeDream
weaverNetBeans常见文本编辑器,具备代码高亮:NodePad++SublimeTextPHP优势PHP特性:php独特
混合了C,Java,Prel以及PHP自创的语法可以比CGI或者Prel更快速去执行动态网页,与其他变成语言相比,PHP是讲程序嵌
入到HTML文档中去执行,执行效率比完全生成HTML编辑的CGI要高很多,所有的CGI都能实现支持几乎所有流行的数据库以及操作系统
PHP可以使用C,C++进行程序的扩展PHP优势:开放源代码免费性快捷性跨平台强效率高图形处理面向对象专业专注PHP技术应用:静态
页面生成数据库缓存过程缓存div+cssw3c标准大负荷分布式flex支持MVCSmarty模块引擎PHP认证级别初级IFE:
IndexFrontEngineer前端工程师中级IPE:IndexPHPEngineerPHP工程师高级IAE:
IndexArchitectureEngineer架构工程师6、echo、print_r、print、var_dump之间的
区别echo、print是php语句,var_dump和print_r是函数echo输出一个或多个字符串,中间以逗号隔
开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用print也是php的一个关键字,有返回值只能打印
出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回falseprint_r可以打印出
复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有
意义,因为都是打印"\n",因此var_dump()函数更适合调试var_dump()判断一个变量的类型和长度,并输出变量
的数值7、HTTP状态码点击这儿查看HTTP状态码详解常见的HTTP状态码:200-请求成功301-资源(网页等)被永久转
义到其他URL404-请求的资源(网页等)不存在505-内部服务器错误HTTP状态码分类:1-信息,服务器收到的请
求,需要请求者继续执行操作2-成功,操作被成功接收并处理3-重定向,需要进一步的操作以完成请求4-客户端错
误,请求包含语法错误或者无法完成请求5服务器错误,服务器在处理请求的过程中发生了错误8、什么是魔术引号魔术引号是一个自动将进
入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义9、如何获取客户端的ip(要求取得一个int)和服务
器ip的代码客户端:$_SERVER["REMOTE_ADDR"];或者getenv(''REMOTE_ADDR'')ip2long进
行转换服务器端:gethostbyname(''www.baidu.com'')10、使用那些工具进行版本控制cvs、svn、vss、
git11、优化数据库的方法MySQL数据库优化的八大方式(经典必看)点击获取选取最适用的字段属性,尽可能减少定义字段宽度,尽量把
字段设置NOTNULL,例如''省份''、''性别''最好适用ENUM使用连接(JOIN)来代替子查询适用联合(UNION)来代替手动创建
的临时表事务处理锁定表、优化事务处理适用外键,优化锁定表建立索引优化查询语句12、是否使用过模板引擎?使用的模板引擎的名字是?Sm
arty:Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一
代模板引擎所具有的部分特性,但是它仍然值得一看。13、对于大流量网站,采用什么方法来解决访问量的问题确认服务器硬件是否能够支持当前
的流量数据库读写分离,优化数据表程序功能规则,禁止外部的盗链控制大文件的下载使用不同主机分流主要流量14、语句include和re
quire的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们require是无条件包含,也就是如果一个流程里加入req
uire,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行include有
返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误
,但是程序会继续执行下去注意:包含文件不存在或者语法错误的时候require是致命的,而include不是require_once
表示了只包含一次,避免了重复包含15、谈谈mvc的认识由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接
收组织功能传递给视图16、说明php中传值与传引用的区别,并说明传值什么时候传引用?变量默认总是传值赋值,那也就是说,当将一个表
达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响
到另外一个变量php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的__引用__(换言之,成为了其别名或者指向)了
原始变量。改动的新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)对象默认是传引用
对于较大是的数据,传引用比较好,这样可以节省内存的开销17、isset、empty、is_null的区别isset判断变量是否定
义或者是否为空变量存在返回ture,否则返回false变量定义不赋值返回falseunset一个变量,返回false变量赋值
为null,返回falseempty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。"
",0,"0",NULL,FALSE都认为为空,返回true没有任何属性的对象都认为是空is_null:检测传入的值(值、变量
、表达式)是否为null定义了,但是赋值为Null定义了,但是没有赋值unset一个变量18、前端调试的工具Firefox的f
irebugChrome的开发工具EmmetJSON格式校验工具19.简单描述mysql中,索引,主键,唯一索引,联合索引的区别
,对数据库的性能有什么影响(从读写两方面)(新浪网技术部)索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分)
,它们包含着对数据表里所有记录的引用指针。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。普通索
引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQ
UE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引
,主键用于唯一标识一条记录,使用关键字PRIMARYKEY来创建。索引可以覆盖多个数据列,如像INDEX(columnA,
columnB)索引,这就是联合索引。索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时
,还要操作索引文件。20.数据库中的事务是什么?事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有
操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如
果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID四大特性,原子性、隔离性、一致性、持久性。21.了解XSS攻
击吗?如何防止?XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控
件执行恶意的行为。使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。22.SQL注入
漏洞产生的原因?如何防止?SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局
变量POST和GET提交一些sql语句正常执行。防止SQL注入的方式:开启配置文件中的magic_quotes_gpc和mag
ic_quotes_runtime设置执行sql语句时使用addslashes进行sql语句转换Sql语句书写尽量不要省略双引号和
单引号。过滤掉sql语句中的一些关键词:update、insert、delete、select、。提高数据库表和字段的命名技
巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。Php配置文件中设置register_globals为off,关闭全局变量
注册控制错误信息,不要在浏览器上输出错误信息,将错误信息写到日志文件中。23.PHP网站的主要攻击方式有哪些?命令注入(Comma
ndInjection)eval注入(EvalInjection)客户端脚本攻击(ScriptInsertion)跨网站脚
本攻击(CrossSiteScripting,XSS)SQL注入攻击(SQLinjection)跨网站请求伪造攻击(Cr
ossSiteRequestForgeries,CSRF)Session会话劫持(SessionHijacking)Se
ssion固定攻击(SessionFixation)HTTP响应拆分攻击(HTTPResponseSplitting)文
件上传漏洞(FileUploadAttack)目录穿越漏洞(DirectoryTraversal)远程文件包含攻击(Remo
teInclusion)动态函数注入攻击(DynamicVariableEvaluation)URL攻击(URLattac
k)表单提交欺骗攻击(SpoofedFormSubmissions)HTTP请求欺骗攻击(SpoofedHTTPReque
sts)24、框架中什么是单一入口和多入口,单一入口的优缺点?多口就是通过访问不同的文件来完成用户请求。单一入口只web程
序所有的请求都指向一个脚本文件的。单一入口更容易控制权限,方便对http请求可以进行安全性检查。缺点:URL看起来不那么美观
,特别是对搜索引擎来说不友好。25、对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:a)、索引的目的是什么
?快速访问数据表中的特定信息,提高检索速度创建唯一性索引,保证数据库表中每一行数据的唯一性。加速表和表之间的连接使用分组和排序子句
进行数据检索时,可以显著减少查询中分组和排序的时间b)、索引对数据库系统的负面影响是什么?负面影响:创建索引和维护索引需要耗费时间
,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改
、的时候索引也要动态维护,这样就降低了数据的维护速度。c)、为数据表建立索引的原则有哪些?在最频繁使用的、用以缩小查询范围的字段上
建立索引。在频繁使用的、需要排序的字段上建立索引d)、什么情况下不宜建立索引?对于查询中很少涉及的列或者重复值比较多的列,不宜建
立索引。对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。26、简述在MySQL数据库中MyISAM和InnoD
B的区别区别于其他数据库的最重要的特点就是其插件式的表存储引擎。切记:存储引擎是基于表的,而不是数据库。InnoDB与MyISAM
的区别:InnoDB存储引擎:?主要面向OLTP(OnlineTransactionProcessing,在线事务处理)方面的
应用,是第一个完整支持ACID事务的存储引擎(BDB第一个支持事务的存储引擎,已经停止开发)。特点:行锁设计、支持外键;支持类似于
Oracle风格的一致性非锁定读(即:默认情况下读取操作不会产生锁);InnoDB将数据放在一个逻辑的表空间中,由InnoDB自身
进行管理。从MySQL4.1版本开始,可以将每个InnoDB存储引擎的表单独存放到一个独立的ibd文件中;InnoDB通过使用MV
CC(多版本并发控制:读不会阻塞写,写也不会阻塞读)来获得高并发性,并且实现了SQL标准的4种隔离级别(默认为REPEATABLE
级别);InnoDB还提供了插入缓冲(insertbuffer)、二次写(doublewrite)、自适应哈希索引(adapt
ivehashindex)、预读(readahead)等高性能和高可用的功能;InnoDB采用了聚集(clustered)的
方式来存储表中的数据,每张标的存储都按主键的顺序存放(如果没有显式的在建表时指定主键,InnoDB会为每一行生成一个6字节的ROW
ID,并以此作为主键);InnoDB表会有三个隐藏字段:除了上面提到了6字节的DB_ROW_ID外,还有6字节的DB_TX_ID(
事务ID)和7字节的DB_ROLL_PTR(指向对应回滚段的地址)。这个可以通过innodbmonitor看到;MyISAM存储
引擎:?是MySQL官方提供的存储引擎,主要面向OLAP(OnlineAnalyticalProcessing,在线分析处理)
方面的应用。特点:不支持事务,支持表所和全文索引。操作速度快;MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,
MYI用来存放索引文件。MySQL数据库只缓存其索引文件,数据文件的缓存交给操作系统本身来完成;MySQL5.0版本开始,MyIS
AM默认支持256T的单表数据;27、解释MySQL外连接、内连接与自连接的区别先说什么是交叉连接:?交叉连接又叫笛卡尔积,它是
指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。内连接?则是只有条件的交叉连接,根据某个条件筛选出符合条件
的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。外连接?其结果集中不仅包含符合连接条件的行,而且还会包括左表、
右表或两个表中的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。左外连接,也称左连接,左表为主表,左表中的所有记录
都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也称右连接,右表
为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL目前还不支持全外连接。28、写出三种以上MySQL
数据库存储引擎的名称(提示:不区分大小写)MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(H
eap)、Example、Federated、Archive、CSV、Blackhole、MaxDB等等十几个引擎29、什么是
面向对象?主要特征是什么?几大原则是什么?面向对象是程序的一种设计模式,它利于提高程序的重用性,使程序机构更加清晰。主要特征是:
封装、继承、多态。五大基本原则:单一职责原则;开放封闭原则;替换原则;依赖原则;接口分离原则。30、什么是静态路由,其特点是
什么?什么是动态路由,其特点是什么?参考答案:静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,
且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表。动态路由是由路
由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新
路由表。其缺点是路由广播更新信息将占据大量的网络带宽。31、使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的
工作原理吗?Memcahce是把所有的数据保存在内存当中,采用hash表的方式,每条数据由key和value组成,每
个key是独一无二的,当要访问某个值的时候先按照key找到值,然后返回结果。Memcahce采用LRU算法来逐渐把过期数
据清除掉。32.列举流行的Ajax框架?说明Ajax实现原理是什么及json在Ajax中起什么作用?流行的Ajax框架有jQuery,Prototype,Dojo,MooTools。Ajax的工作原理是一个页面的指定位置可以加载另一个页面所有的输出内容,这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。所以Ajax技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信,减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。在使用Ajax时,涉及到数据传输,即将数据从服务器返回到客户端,服务器端和客户端分别使用不同的脚步语言来处理数据,这就需要一种通用的数据格式,XML和json就是最常用的两种,而json比XML更简单。33、Myql中的事务回滚机制概述事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。……
献花(0)
+1
(本文系琼bdeodxkaj...首藏)