PHP技术知识点整理
<p align="left"><strong>1.</strong><strong>解释mvc</strong></p><p>(1)mvc即 模型model,视图view,控制器controller;是一种模型,是一种编程思想,就是把一个应用的输入、输出、数据处理分开,分解耦合(2)A..视图,数据采集和处理,和用户请求,不包括业务流程,smarty实现B.模型,接收数据和请求,完成相关数据处理,返回数据,’黑箱‘操作,核心,php类库实现C.控制器,任务的实现,根据传入数据调用各种组件完成任务,将结果传给视图显示,业务流程的实现。(3)mvc的优点:使开发人员只关注某一层,很容易用新代替旧层次的实现,低依赖性,重用性,标准化,扩展性.维护性</p>
<p align="left"><strong> </strong></p>
<p align="left"><strong>2.</strong><strong>无限分类的实现原理。</strong></p>
<p>A.三种:(1)递归方式:查询次数非常多,不推荐使用。(2)ajax:点谁,查子栏目,再点子栏再查子栏目。点了几次查了几次(3)血缘关系:一次性把亲戚全找到。新增加栏目的path=父ID的path-父栏目的ID</p>
<p>B.查询:select id,name,pid,path,concat(path,'-',id) as bpath from shop_menu order by bpath;</p>
<p><strong> </strong></p>
<p><strong>3.</strong><strong>大流量高并发量网站的解决方案</strong></p>
<p>(1)确认服务器硬件是否支持当前流量。(2)memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,不访问数据库。(3)禁外部盗链。外部网站的图片或文件盗链会带来大量负载压力,应该严格限制外部对自身盗链,目前可以简单通过refer控制盗链,apache可以通过配置来禁止盗链。(4)控制大文件下载。大文件的下载会占用很大的流量,对于非SCSI硬盘来说会消耗,使得网站响应能力下降。(5)不同主机分流(6)流量统计软件。可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化。如phpstat,pcs(7)分库分表。(8)Sphinx全文索引引擎。(9)cdn技术让不同地方的ip访问不同地方的服务器。(10)高并发,f5、lvs。(11)如果是代码服务器与数据库服务器负载不上,加一队列让其给代码服务器平均分配链接。</p>
<p> </p>
<p align="left"><strong>4.</strong><strong>如何设计或配置Mysql,才能达到高效使用的目的</strong></p>
<p align="left">(1)数据库设计,结构良好,允许部分冗余。 (2)最适用字段属性,尽可能字段NOTNULL,这样在查询时,不用去比较NULL值。(3)系统架构设计,表散列,海量数据散列到几个表里,集群,查写分开。(4)高效sql,提高效率。 (5)使用连接(join)来代替子查询。(6)使用联合(union)来代替手动创建的临时表。(7) 所得皆必须,只从数据库取必须的数据。(8) 必要时用不同存储引擎,如Innodb可少死锁,HEAP提查询速度。(9)使用事务、外键、索引(10)缓存技术</p>
<p align="left"> </p>
<p><strong>5.</strong><strong>如何进行防SQL注入</strong></p>
<p align="left">(1)过滤常见数据库操作关键字:select,insert,update,delete,and,*等,或通过系统函数:addslashes(需被过滤内容)过滤。(2)PHP配置文件Register_globals=off;//注册全局变量关闭。(3)SQL书写不要省略小引号(tab上)和单引号。(4)高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的(5)常用方法封装,避直接暴漏SQL 。(6)PHP安全模式Safe_mode=on;。(7)开Magic_quotes_gpc=on;自动把sql语句转换,'转为\',很有效。(8)关闭错误提示信息,写到系统日志。(9)使用mysqli或pdo预处理。</p>
<p align="left"> </p>
<p>6.<strong>.安全的用户登录系统需注意。</strong></p>
<p>(1)MD5(密码+字符串)加密。(2)登录表单名不跟字段一样,免暴漏表字段。(3)表名、字段名、密码用不易被猜到的。(4)用验证码验证登陆,以防止暴力破解。(5)验证提交的数据是不是来自本网站。(6)登录后处理代码数据库部分使用预处理,做好过滤,防sql注入。</p>
<p>(2) </p>
<p align="left"><strong>7.PHP</strong><strong>框架优劣点。</strong></p>
<p align="left">(1)BroPHP:<strong>优点</strong>:轻量级学习型框架,配置简,操作简,易上手,全面文档。(2)ThinkPHP框架:<strong>优点</strong>:功能全,配置较简,操作较简,多示例程序。<strong>缺点</strong>:操作方法太多,新手不知如何选,文档不全面。</p>
<p align="left"> </p>
<p align="left"><strong>8.</strong><strong>版本控制工具?</strong></p>
<p>1.Clearcase 2.CVS 3.SVN 4.PVCS 5.Perforce 6.CCC 7.StarTeam 8.RCS </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p align="left"><strong>9.GET</strong><strong>与POST?</strong></p>
<p>(1)GET明文传输显示的地址栏上各值之间以&连接。POST传输是不可见的。(2)GET数据长度有限,不适合大数据传输。post理论上是没有限制,具体根据浏览器而定。(3)GET限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。</p>
<p> </p>
<p align="left"><strong>10.SESSION</strong><strong>与COOKIE?</strong></p>
<p>(1)Session服务器端,给每个客户分配一个唯一的数字,作为每个客户的标识,Cookies是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或是硬盘上,每次发出页面请求时,都会把里面的数据发送给服务器端.可以利用它在远程浏览器端存储数据并以此来跟踪和识别用户的机制。(2) Cookies适合做保存用户个人设置,爱好等,Session适合做客户的身份验证.(3)http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。</p>
<p> </p>
<p align="left"><strong>11</strong><strong>能够使HTML和PHP分离开使用的模板</strong></p>
<p>Smarty,Dwoo,TinyButStrong,TemplateLite,XTemplate</p>
<p> </p>
<p><strong>12.</strong><strong>关于中文截取的问题</strong></p>
<p>1.mb_substr($str, $start, $length, $charset);</p>
<p>2.iconv_substr();(PHP 4 >= 4.0.6, PHP 5)</p>
<p>3.结合Join 、array_slice和 正则</p>
<p> </p>
<p align="left"><strong>13.</strong><strong>MySQL</strong><strong>存储引擎中MyISAM和InnoDB,优缺点,索引?</strong></p>
<p>(1)MyISAM 优:成熟、稳定、易于管理;表格锁定机制;比innoDB快;缺:optimize清理空间;适合:读取需求、节约空间时间、响应速度快;(2)InnoDB优:数据库支持外键和事务处理,缺:速度比MyISAM稍慢;占用空间大;适合:用到事务、外键和更高安全性的需求;多用户同时修改表;</p>
<p>(3)创建索引:alert table tablename add index (`字段名`)</p>
<p> </p>
<p><strong>14.</strong><strong>什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?</strong></p>
<p>(1)索引:通过在表字段中建立索引可提高查询优化,确保数据的唯一性,以及可以对全文索引字段中的大量文本的搜索进行优化。(2)主键索引(primary key):主要作用是确定数据表里一条特定的数据记录的位置。数据表会根据主键的唯一索引性来唯一标示每条记录。(3)唯一索引(unique)主要是为了避免数据出现重复(4)区别:每个表中只能有一个主键索引,但可以有多个唯一索引。</p>
<p align="left"><strong>(</strong><strong>优点):创建索引可以大大提高系统的性能:</strong></p>
<p align="left">(1)保证数据库表中每一行唯一性.(2)加快数据检索速度,最主要的原因。(3)加速表和表之间连接(4)在使用分组和排序 子句进行数据检索时,显著减少查询中分组和排序时间。 (5)查询使用优化隐藏器,提高系统性能。</p>
<p align="left"> <strong>增加索引也有许多不利的方面:</strong></p>
<p align="left">(1)创建和维护索引要耗费时间,随着数据量的增加而增加。(2)占物理空间,除了数据表占数据空间之外,索引还要占一定的物理空间,如果要建立聚簇索引,空间就会更大。(3)当对表数据进行增删改时,索引也要动态维护,降低数据维护速度。</p>
<p><strong>在哪建索引?</strong>(1)经常需要搜索的列,加快搜索的速度; (2)主键列,强制该列唯一性和组织表中数据排列结构(3)经常连接列(外键)加快连接速度(4)范围搜索列,因索引已排序,范围是连续(5)排序列,因索引已排序,可利用索引排序加快时间; (6)WHERE子句列,加快条件判断。</p>
<p align="left"><strong>15.varchar </strong><strong>和 char区别?</strong>(1) char是固定长度,分配多少,就占多长。(2)Varchar是可变长度,内容有多大就占多大,节省空间。(3)因varchar是可变的,所以在数据长度改变时,服务器要进行额外操作,所以效率比char类型低。</p>
<p align="left"> </p>
<p><strong>16</strong><strong>浏览器IE和非IE浏览器的划分,区别是什么?</strong></p>
<p>(1)ie浏览器使用范围广,很多不规范网页都是只支持ie内核浏览器的,但因使用范围广,成为黑客攻击目标。(2)非ie内核浏览器为抢占市场,研究新技术新功能,所以比ie内核浏览器速度功能出色,但因不具ie经常被攻击锻炼出来免疫力,一旦被攻击完全不具备承受能力。</p>
<p> </p>
<p> </p>
<p>(-1-)</p>
<p><strong>17.</strong><strong>数据库中的事务是什么?</strong></p>
<p>事务(transaction)是作为一个单元一组有序的数据库操作。若组中所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。若一个操作失败,则事务回滚,该事务所有操作影响都将取消。</p>
<p> </p>
<p><strong>18.</strong><strong>L</strong><strong>inux </strong><strong>下建立压缩包,解压缩包的命令</strong></p>
<p align="left">(1)Gz:打包: tar czf file.tar.gz file.txt 解压: tar xzf file.tar.gz</p>
<p align="left">(2)Bz2:打包: tar -cjf file.tar.bz2 file.txt 解压: tar -xjf file.tar.bz2</p>
<p align="left">(3)Gzip:打包: gzip file1.txt 解压: gunzip file1.txt.gz</p>
<p align="left">(4)Zip:打包: zip file1.zip file1.txt 解压: unzip file1.zip</p>
<p align="left"> </p>
<p align="left"><strong>19.</strong><strong>不使用</strong><strong>cookie</strong><strong>向客户端发送一个</strong><strong>cookie.</strong></p>
<p align="left">session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个<strong>SID</strong>参数来传递 SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在的COOKIE一起提交到服务器端。</p>
<p align="left"> </p>
<p align="left"><strong>20.isset() </strong><strong>和</strong><strong> empty() </strong><strong>区别</strong></p>
<p align="left">Isset是否存在,存在(真),empty是否(空假),(空假)返回真。</p>
<p align="left"> </p>
<p align="left"><strong>21.</strong><strong>写出匹配</strong><strong>URL</strong><strong>的正则表达式</strong></p>
<p align="left">/^+:\/\/(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?/</p>
<p align="left"> </p>
<p align="left"><strong>22.</strong><strong>你所知道的设计模式有哪些?</strong></p>
<p align="left">工厂模式、策略模式、单元素模式、观察者模式、命令链模式</p>
<p align="left"> </p>
<p align="left"><strong>23.</strong><strong>说说你对</strong><strong>SVN</strong><strong>的了解?优缺点?</strong></p>
<p align="left">定义:SVN是一种版本控制器,程序员开发代码递交到版本服务器进行集中管理。优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。</p>
<p align="left">缺点:不能随意修改服务器项目文件夹。</p>
<p align="left"> </p>
<p align="left"><strong>24.</strong><strong>传值与传引用的区别。什么时候传值什么时候传引用</strong><br>(1)按值传递:函数范围内对值的任何改变在函数外部都会被忽略(2)按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改(3)优缺点:A:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。B.按引用传递则不需要复制值,对于性能提高很有好处。</p>
<p align="left"> </p>
<p align="left"><strong>25.</strong><strong>单介绍下什么是cURL:</strong></p>
<p align="left">(1)cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它支持多种协议。</p>
<p align="left">(2)使用cURL完成请求:a.初始化,创建一个新cURL资源b.设置URL和相应的选项c.抓取URL并把它传递给浏览器d.关闭cURL资源,并且释放系统资源.</p>
<p align="left"><strong>26.</strong><strong>你所知道的设计模式有哪些?</strong></p>
<p align="left">工厂模式、策略模式、单元素模式、观察者模式、命令链模。</p>
<p align="left"> </p>
<p align="left"><strong>27.</strong><strong>说说你对代码管理的了解?</strong><strong> </strong><strong>常使用那些代码版本控制软件?</strong></p>
<p align="left">通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。常用的版本控制器:SVN</p>
<p align="left"> </p>
<p align="left"><strong>28.</strong><strong>说说你对</strong><strong>SVN</strong><strong>的了解?优缺点?</strong></p>
<p align="left">SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。</p>
<p align="left"><strong>优点</strong>:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。</p>
<p align="left"><strong>缺点</strong>:不能随意修改服务器项目文件夹。</p>
<p align="left"> </p>
<p align="left"><strong>29.PHP</strong><strong>加速模式</strong><strong>/</strong><strong>扩展? </strong><strong>PHP</strong><strong>调试模式</strong><strong>/</strong><strong>工具?</strong></p>
<p align="left">Zend Optimizer加速扩展</p>
<p align="left">调试工具:xdebug</p>
<p align="left"><strong>30.</strong><strong>你常用到的</strong><strong>mysql</strong><strong>命令?</strong></p>
<p align="left">Show databases</p>
<p align="left">Show tables</p>
<p align="left">Insert into 表名() values()</p>
<p align="left">Update 表名 set 字段=值 where ...</p>
<p align="left">Delete from 表名 where ...</p>
<p align="left">Select * from 表名 where 条件 order by ... Desc/asc limit ... Group by ... Having ...</p>
<p align="left"><strong>31.</strong><strong>进入</strong><strong>mysql</strong><strong>管理命令行的命令?</strong></p>
<p align="left">Mysql -uroot -p 回车 密码</p>
<p align="left"> </p>
<p align="left"><strong>32.show databases; </strong><strong>这个命令的作用?</strong></p>
<p align="left">显示当前mysql服务器中有哪些数据库</p>
<p align="left"> </p>
<p align="left"><strong>33.show create database mysql; </strong><strong>这个命令的作用?</strong></p>
<p align="left">显示创建数据库的sql语句</p>
<p align="left"> </p>
<p align="left"><strong>34.show create table user; </strong><strong>这个命令的作用?</strong></p>
<p align="left">显示创建表的sql语句</p>
<p align="left"> </p>
<p align="left"><strong>35.desc user; </strong><strong>这个命令的作用?</strong></p>
<p align="left">查询user表的结构</p>
<p align="left"> </p>
<p align="left"><strong>36.explain select * from user; </strong><strong>这个命令的作用?</strong></p>
<p align="left">获取select相关信息</p>
<p align="left"> </p>
<p align="left"><strong>37.show processlist; </strong><strong>这个命令的作用?</strong></p>
<p align="left">显示哪些线程正在运行</p>
<p align="left"> </p>
<p align="left"><strong>38.SHOW VARIABLES; </strong><strong>这个命令的作用?</strong></p>
<p align="left">显示系统变量和值</p>
<p align="left"> </p>
<p align="left"><strong>39.SHOW VARIABLES like ’%conn%’; </strong><strong>这个命令的作用?</strong></p>
<p align="left">显示系统变量名包含conn的值</p>
<p align="left"> </p>
<p align="left"><strong>40.LEFT JOIN </strong><strong>写一个</strong><strong>SQL</strong><strong>语句?</strong></p>
<p align="left">SELECT A.id,A.class FROM A LEFT JOIN B ON A.cid=B.id</p>
<p align="left"> </p>
<p align="left"><strong>41.in, not in, exist, not exist</strong><strong>的作用和区别?</strong></p>
<p align="left">in在什么中</p>
<p align="left">Not in 不在什么中</p>
<p align="left">Exists 存在</p>
<p align="left">Not exists 不存在</p>
<p align="left"> </p>
<p align="left"><strong>42.</strong><strong>怎么找到数据库的配置文件路径?</strong></p>
<p align="left">在数据库安装目录下,my.ini</p>
<p align="left"> </p>
<p align="left"><strong>43.</strong><strong>简述</strong><strong>Cookie</strong><strong>的设置及获取过程</strong></p>
<p align="left">设置COOKIE的值:</p>
<p align="left">Setcookie(名称,值,保存时间,有效域);</p>
<p align="left">获取值:$_COOKIE['名称'];</p>
<p align="left"> </p>
<p align="left"><strong>44.</strong><strong>面向对象中接口和抽象类的区别及应用场景</strong><strong>?</strong></p>
<p align="left">1、有抽象方法的类叫做抽象类,抽象类中不一定有抽象方法,抽象方法必须使用abstract关键字定义。</p>
<p align="left">2、接口中全部是抽象方法,方法不用使用abstract定义。</p>
<p align="left">3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。</p>
<p align="left"> </p>
<p align="left">45.如下user表结构</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="36">
<p align="left">名称</p>
</td>
<td width="83">
<p align="left">类型</p>
</td>
<td width="40">
<p align="left">说明</p>
</td>
<td width="36">
<p align="left">备注</p>
</td>
</tr>
<tr>
<td width="36">
<p align="left">Uid</p>
</td>
<td width="83">
<p align="left">Int unsigned</p>
</td>
<td width="40">
<p align="left">主键</p>
</td>
<td width="36">
<p align="left"> </p>
</td>
</tr>
<tr>
<td width="36">
<p align="left">Name</p>
</td>
<td width="83">
<p align="left">Varchar(20)</p>
</td>
<td width="40">
<p align="left"> </p>
</td>
<td width="36">
<p align="left"> </p>
</td>
</tr>
<tr>
<td width="36">
<p align="left">Age</p>
</td>
<td width="83">
<p align="left">Tinyint unsigned</p>
</td>
<td width="40">
<p align="left"> </p>
</td>
<td width="36">
<p align="left"> </p>
</td>
</tr>
</tbody>
</table>
<p align="left"> </p>
<p align="left"><strong>需求:</strong></p>
<p align="left"><strong>l </strong><strong>增加一个字段性别</strong><strong>sex</strong><strong>,写出修改语句</strong></p>
<p align="left">Alert table user add sex enum(’0′,’1′);</p>
<p align="left"> </p>
<p align="left"><strong>查询出年龄介于</strong><strong>20</strong><strong>岁到</strong><strong>30</strong><strong>岁之间的用户</strong></p>
<p align="left">Select * from user where age>20 and age<30</p>
<p align="left"><strong>如果是一个</strong><strong>Web</strong><strong>频繁访问的查询,上题的查询如何优化?</strong></p>
<p align="left">使用memcache缓存技术,在一定时间内将动态内容缓存到文件中,访问动态页面时,直接调用缓存文件而不必重新查询数据库。</p>
<p align="left"> </p>
<p align="left"><strong>46.echo(),print(),print_r()</strong><strong>的区别?</strong></p>
<p align="left">echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) </p>
<p align="left"> Print()只能打印出简单类型变量的值(如int,string) </p>
<p align="left"> print_r()可以打印出复杂类型变量的值(如数组,对象) </p>
<p align="left"> echo 输出一个或者多个字符串</p>
<p align="left"><strong>47.</strong><strong>什么是模板技术、能够使</strong><strong>HTML</strong><strong>和</strong><strong>PHP</strong><strong>分离开使用的模板?</strong></p>
<p align="left">模板技术就是使程序的逻辑代码和界面分开的技术。</p>
<p align="left">能够使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate</p>
<p align="left">(-2-)</p>
<p align="left"><strong>48.</strong><strong>写几个魔术方法并说明作用?</strong></p>
<p align="left">__call()当调用不存在的方法时会自动调用的方法</p>
<p align="left">__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件</p>
<p align="left">__set()当给未定义的变量赋值时会自动调用的方法</p>
<p align="left">__get()当获取未定义变量的值时会自动调用的方法</p>
<p align="left">__construct()构造方法,实例化类时自动调用的方法</p>
<p align="left">__destruct()销毁对象时自动调用的方法</p>
<p align="left">__unset()当对一个未定义变量调用unset()时自动调用的方法</p>
<p align="left">__isset()当对一个未定义变量调用isset()方法时自动调用的方法</p>
<p align="left">__clone()克隆一个对象</p>
<p align="left">__toString()当输出一个对象时自动调用的方法</p>
<p align="left"> </p>
<p align="left"><strong>49.$_REQUEST</strong><strong>、</strong><strong>$_POST</strong><strong>、</strong><strong>$_GET</strong><strong>、</strong><strong>$_COOKIE</strong><strong>、</strong><strong>$_SESSION</strong><strong>、</strong><strong>$_FILE</strong><strong>的意思是什么</strong><strong>?</strong></p>
<p align="left">它们都是PHP预定义变量</p>
<p align="left">$_REQUEST用来获取post或get方式提交的值</p>
<p align="left">$_POST用来获取post方式提交的值</p>
<p align="left">$_GET用来获取get方式提交的值</p>
<p align="left">$_COOKIE用来获取cookie存储的值</p>
<p align="left">$_SESSION用来获取session存储的值</p>
<p align="left">$_FILE用来获取上传文件表单的值</p>
<p align="left"> </p>
<p align="left"><strong>50.</strong><strong>数组中下标最好是什么类型的,为什么?</strong></p>
<p align="left">数组的下标最好是数字类型的,数字类型的处理速度快。</p>
<p align="left"> </p>
<p align="left"><strong>51.++i</strong><strong>和</strong><strong>i++</strong><strong>哪一个效率高,为什么?</strong></p>
<p align="left">++i效率比i++的效率更高,因为++i少了一个返回i的过程。</p>
<p align="left"> </p>
<p align="left"><strong>52.magic_quotes_gpc()</strong><strong>、</strong><strong>magic_quotes_runtime()</strong><strong>的意思是什么?</strong></p>
<p align="left">Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加\</p>
<p align="left">Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。</p>
<p align="left"> </p>
<p align="left"><strong>53.</strong><strong>框架中什么是单一入口和多入口,单一入口的优缺点?</strong></p>
<p align="left">1、多入口就是通过访问不同的文件来完成用户请求。</p>
<p align="left">单一入口指web程序所有的请求都指向一个脚本文件的。</p>
<p align="left">2、单一入口更容易控制权限,方便对http请求可以进行安全性检查。</p>
<p align="left">缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。</p>
<p align="left"> </p>
<p align="left"><strong>54.</strong><strong>你对</strong><strong>Memcach</strong><strong>的理解,优点有哪些?</strong></p>
<p align="left">Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。</p>
<p align="left">Memcache的优点:稳定、配置简单、多机分布式存储、速度快。</p>
<p align="left"> </p>
<p align="left"><strong>55.</strong><strong>对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题</strong><strong>:</strong></p>
<p align="left"><strong>a) </strong><strong>索引的目的是什么</strong><strong>?</strong></p>
<p align="left">1、快速访问数据表中的特定信息,提高检索速度</p>
<p align="left">2、创建唯一性索引,保证数据库表中每一行数据的唯一性</p>
<p align="left">3、加速表和表之间的连接</p>
<p align="left">4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间</p>
<p align="left"><strong>b) </strong><strong>索引对数据库系统的负面影响是什么</strong><strong>?</strong></p>
<p align="left">负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。</p>
<p align="left"><strong>c) </strong><strong>为数据表建立索引的原则有哪些</strong><strong>?</strong></p>
<p align="left">1、在最频繁使用的、用以缩小查询范围的字段上建立索引</p>
<p align="left">2、在频繁使用的、需要排序的字段上建立索引</p>
<p align="left"><strong>d) </strong><strong>什么情况下不宜建立索引</strong><strong>?</strong></p>
<p align="left">1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引</p>
<p align="left">2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。</p>
<p align="left"> </p>
<p align="left"><strong>56.web</strong><strong>应用中</strong><strong>,</strong><strong>数据库的读取频率远高于写入频率</strong><strong>, </strong><strong>如何优化</strong><strong>MySQL</strong><strong>而应对此种情景</strong><strong>?</strong></p>
<p align="left">使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。</p>
<p align="left">如果网站的访问量很大,可以把数据库读写服务器分开,使用多台服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。</p>
<p align="left"> </p>
<p align="left"><strong>57.</strong><strong>请举例说明在你的开发过程中用什么方法来加快页面的加载速度</strong><br> 要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具。</p>
<p align="left">58.<strong>include</strong><strong>与</strong><strong>require</strong><strong>的区别</strong><strong>?</strong></p>
<p align="left"><strong>(1)</strong>include()在执行文件时每次都要进行读取和评估;require()文件只处理一次(实际上文件内容替换了require()语句)<strong>(2)</strong>require()通常放在PHP脚本程序的最前面include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化<strong>(3)</strong>require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样<strong>(4)</strong>include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括.<strong>(5)</strong>require()包含文件失败,停止执行,给出错误(致命的);<strong>(6)</strong>include()常用于动态包含.通常是自动加载的文件,即使加载出错,整个程序还是继续执行一个页面声明,另一个页面调用包函文件失败,继续向下执行,返回一条警告</p>
<p align="left"> </p>
<p align="left"><strong>59.</strong><strong>什么是时间戳</strong><strong>? </strong><strong>如何取得当前时间戳</strong><strong>?</strong></p>
<p align="left">时间戳是从1970年1月1日 00:00:00到指定日期的秒数。</p>
<p align="left">获取当前时间戳:time()</p>
<p align="left"> </p>
<p align="left"><strong>60.</strong><strong>了解</strong><strong>XSS</strong><strong>攻击吗</strong><strong>? </strong><strong>如何防止</strong><strong> ?</strong></p>
<p align="left">XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。</p>
<p align="left">使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。</p>
<p align="left"> </p>
<p align="left"><strong>61.</strong><strong>一个字节占多少</strong><strong>bit ? </strong><strong>一个</strong><strong>IPv4</strong><strong>地址占几个字节</strong><strong>? </strong><strong>一个</strong><strong>IPv6</strong><strong>地址呢</strong><strong>?</strong></p>
<p align="left">一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。</p>
<p align="left"> </p>
<p align="left"><strong>62..M ADSL</strong><strong>宽带连接</strong><strong>, </strong><strong>理想情况下</strong><strong>, </strong><strong>最大下载速度是多少</strong><strong>KB/s ?</strong></p>
<p align="left">256KB/s</p>
<p align="left"><strong> </strong></p>
<p align="left"><strong>63.</strong><strong>常见的英文提示</strong></p>
<p align="left"><strong>145.Fatal error: Call to undefined method ge_user() in /website/index.php on line 39</strong></p>
<p align="left">调用了未定义的方法ge_user(),检查程序中有没有定义此方法</p>
<p align="left"> </p>
<p align="left"><strong>146.Fatal error: Class </strong><strong>’</strong><strong>client</strong><strong>’</strong><strong> not found in /website/index.php on line 173</strong></p>
<p align="left">类client没有找到,检查文件中有没有client类,或者有没有包含client类文件</p>
<p align="left"> </p>
<p align="left"><strong>Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php on line 3</strong></p>
<p align="left">提示文件前面有输出,检查是否有输出,或者编码</p>
<p align="left"> </p>
<p align="left"><strong>148.Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/index.php on line 10</strong></p>
<p align="left">没有找到文件或目录,检查文件是否存在</p>
<p align="left"> </p>
<p align="left"><strong>149.Parse error: syntax error, unexpected T_STRING in /website/index.php on line 18</strong></p>
<p align="left">18行语法错误,检查语法</p>
<p align="left"> </p>
<p align="left"><strong>150.Warning:fopen(welcome.txt) : failed to open stream: No such file or directory in /website/index.php on line 2</strong></p>
<p align="left">没有找到welcome.txt文件,检查文件是否存在</p>
<p align="left"> </p>
<p align="left"><strong><span style="text-decoration: underline">64. HTTP</span></strong><strong><span style="text-decoration: underline">协议中</span></strong><strong><span style="text-decoration: underline">GET</span></strong><strong><span style="text-decoration: underline">、</span></strong><strong><span style="text-decoration: underline">POST</span></strong><strong><span style="text-decoration: underline">和</span></strong><strong><span style="text-decoration: underline">HEAD</span></strong><strong><span style="text-decoration: underline">的区别?</span></strong></p>
<p align="left">HEAD: 只请求页面的首部。</p>
<p align="left">GET: 请求指定的页面信息,并返回实体主体。</p>
<p align="left">POST: 请求服务器接受所指定的文档作为对所标识URI新从属实体。</p>
<p align="left">(1)HTTP 定义了与服务器交互的不同方法,最基本方法是 GET 和 POST。GET 适用于多数请求,而保留 POST 仅用于更新站点。</p>
<p align="left">(2)在FORM提交时,如不指定Method,则<strong>默认为</strong><strong>GET</strong><strong>请求</strong>,Form中提交数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;</p>
<p align="left">GET方式提交的数据最多只能有<strong>1024</strong><strong>字节</strong>,而POST则没有此限制。</p>
<p align="left">(3)GET 这个是浏览器用来向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。<br><strong><span style="text-decoration: underline">请写出</span></strong><strong><span style="text-decoration: underline">PHP5</span></strong><strong><span style="text-decoration: underline">权限控制修饰符</span></strong><strong><span style="text-decoration: underline">(3</span></strong><strong><span style="text-decoration: underline">分</span></strong><strong><span style="text-decoration: underline">)<br></span></strong>答:public(公共),private(私用),protected(继承)</p>
<p align="left">(-3-)</p>
<p align="left"><strong><span style="text-decoration: underline">65.</span></strong><strong><span style="text-decoration: underline">几个重要的</span></strong><strong><span style="text-decoration: underline">php.ini</span></strong><strong><span style="text-decoration: underline">选项</span></strong></p>
<p align="left"><strong>Register Globals</strong></p>
<p align="left">php>=4.2.0,php.ini的register_globals选项的默认值预设为Off,当register_globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于PHP不必事先初始化变量的值,从而导致很大的安全隐患。</p>
<p align="left"><strong>safe_mode</strong></p>
<p align="left">安全模式,PHP用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini中的safe_mode = On</p>
<p align="left"><strong>1</strong><strong>、限制文件存取</strong></p>
<p align="left">safe_mode_include_dir = “/path1:/path2:/path3″</p>
<p align="left">不同的文件夹用冒号隔开</p>
<p align="left"><strong>2</strong><strong>、限制环境变量的存取</strong></p>
<p align="left">safe_mode_allowed_env_vars = string</p>
<p align="left">指定PHP程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么php可以改变任何环境变量</p>
<p align="left">safe_mode_protected_env_vars = string</p>
<p align="left">用来指定php程序不可改变的环境变量的前缀</p>
<p align="left"><strong>3</strong><strong>、限制外部程序的执行</strong></p>
<p align="left">safe_mode_exec_dir = string</p>
<p align="left">此选项指定的文件夹路径影响system、exec、popen、passthru,不影响shell_exec和“` `”。</p>
<p align="left">disable_functions = string</p>
<p align="left">不同的函数名称用逗号隔开,此选项不受安全模式影响</p>
<p align="left">magic_quotes</p>
<p align="left">用来让php程序的输入信息自动转义,所有的单引号(“’”),双引号(“””),反斜杠(“\”)和空字符(NULL),都自动被加上反斜杠进行转义</p>
<p align="left">magic_quotes_gpc = On 用来设置magic quotes 为On,它会影响HTTP请求的数据(GET、POST、Cookies)</p>
<p align="left">程序员也可以使用addslashes来转义提交的HTTP请求数据,或者用stripslashes来删除转义</p>
<p align="left"><strong><span style="text-decoration: underline"> </span></strong></p>
<p align="left"><strong><span style="text-decoration: underline">50.PHP的网站主要攻击方式有哪些?</span></strong></p>
<p align="left">1、命令注入(Command Injection)</p>
<p align="left">2、eval注入(Eval Injection)</p>
<p align="left">3、客户端脚本攻击(Script Insertion)</p>
<p align="left">4、跨网站脚本攻击(Cross Site Scripting, XSS)</p>
<p align="left">5、SQL注入攻击(SQL injection)</p>
<p align="left">6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)</p>
<p align="left">7、Session 会话劫持(Session Hijacking)</p>
<p align="left">8、Session 固定攻击(Session Fixation)</p>
<p align="left">9、HTTP响应拆分攻击(HTTP Response Splitting)</p>
<p align="left">10、文件上传漏洞(File Upload Attack)</p>
<p align="left">11、目录穿越漏洞(Directory Traversal)</p>
<p align="left">12、远程文件包含攻击(Remote Inclusion)</p>
<p align="left">13、动态函数注入攻击(Dynamic Variable Evaluation)</p>
<p align="left">14、URL攻击(URL attack)</p>
<p align="left">15、表单提交欺骗攻击(Spoofed Form Submissions)</p>
<p align="left">16、HTTP请求欺骗攻击(Spoofed HTTP Requests)</p>
<p align="left">(-4-)</p><br><br>
来源:https://www.cnblogs.com/rxbook/p/11390019.html
頁:
[1]