php面试常问的题目(二)

PHP专业面试题汇总一、PHP基础:二、数据库部分三、面向对象部a分四、ThinkPHP部分五、smarty模板引擎六、二次开发系统(DEDE、ecshop)七、微信公众平台开发上期链接:《php面试常问的题目(一)》四、ThinkPHP部分1、常见的PHP框架答:thinkPHP;yii;ZendFramework;CakePhp;sy; 2、如何理解TP中的单一入口文件?答:ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个项目都有一个统一(但不一定是唯一)的入口。
应该说,所有项目都是从入口文件开始的,并且所有的项目的入口文件是类似的,入口文件中主要包括:定义框架路径、项目路径和项目名称(可选)定义调试模式和运行模式的相关常量(可选)载入框架入口文件(必须) 3、ThinkPHP中的MVC分层是什么?(理解)答:MVC 是一种将应用程序的逻辑层和表现层进行分离的方法。
ThinkPHP 也是基于MVC设计模式的。
MVC只是一个抽象的概念,并没有特别明确的规定,ThinkPHP中的MVC分层大致体现在:模型(M):模型的定义由Model类来完成。
控制器(C):应用控制器(核心控制器App类)和Action控制器都承担了控制器的角色,Action控制器完成业务过程控制,而应用控制器负责调度控制。
视图(V):由View类和模板文件组成,模板做到了100%分离,可以独立预览和制作。
但实际上,ThinkPHP并不依赖M或者V ,也就是说没有模型或者视图也一样可以工作。
甚至也不依赖C,这是因为ThinkPHP在Action之上还有一个总控制器,即App控制器,负责应用的总调度。
在没有C的情况下,必然存在视图V,否则就不再是一个完整的应用。
总而言之,ThinkPHP的MVC模式只是提供了一种敏捷开发的手段,而不是拘泥于MVC本身。
 4、如何进行SQL优化?答:(1)选择正确的存储引擎以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。
MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。
甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。
另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。
InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。
但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。
并且,他还支持更多的高级应用,比如:事务。
(2)优化字段的数据类型记住一个原则,越小的列会越快。
如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。
如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。
当然,你也需要留够足够的扩展空间。
(3)为搜索字段添加索引索引并不一定就是给主键或是唯一的字段。
如果在你的表中,有某个字段你总要会经常用来做搜索,那么最好是为其建立索引,除非你要搜索的字段是大的文本字段,那应该建立全文索引。
(4)避免使用Select *从数据库里读出越多的数据,那么查询就会变得越慢。
并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。
即使你要查询数据表的所有字段,也尽量不要用*通配符,善用内置提供的字段排除定义也许能给带来更多的便利。
(5)使用 ENUM 而不是 VARCHARENUM 类型是非常快和紧凑的。
在实际上,其保存的是 TINYINT,但其外表上显示为字符串。
这样一来,用这个字段来做一些选项列表变得相当的完美。
例如,性别、民族、部门和状态之类的这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。
(6)尽可能的使用 NOT NULL除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。
NULL其实需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。
当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。
(7)固定长度的表会更快如果表中的所有字段都是“固定长度”的,整个表会被认为是 “static” 或 “fixed-length”。
例如,表中没有如下类型的字段:VARCHAR,TEXT,BLOB。
只要你包括了其中一个这些字段,那么这个表就不是“固定长度静态表”了,这样,MySQL 引擎会用另一种方法来处理。
固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。
而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。
并且,固定长度的表也更容易被缓存和重建。
不过,唯一的副作用是,固定长度的字段会浪费一些空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。
 5、如何理解 ThinkPHP 3.0 架构三(核心 + 行为 + 驱动)中的行为?答:核心 + 行为 + 驱动TP官方简称为:CBD核心(Core):就是框架的核心代码,不可缺少的东西,TP本身是基于MVC思想开发的框架。
行为(Behavior) :行为在新版ThinkPHP的架构里面起着举足轻重的作用,在系统核心之上,设置了很多标签扩展位,而每个标签位置可以依次执行各自的独立行为。
行为扩展就因此而诞生了,而且很多系统功能也是通过内置的行为扩展完成的,所有行为扩展都是可替换和增加的,由此形成了底层框架可组装的基础。
驱动( Driver ):数据库驱动、缓存驱动、标签库驱动和模板引擎驱动,以及外置的类扩展。
框架,即framework。
其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。
简单说就是使用别人搭好的舞台,你来做表演。
而且,框架一般是成熟的,不断升级的软件。
 6、什么是惯例配置?答:惯例配置上一页下一页惯例重于配置是系统遵循的一个重要思想,系统内置有一个惯例配置文件(位于系统目录下面的Conf\convention.php),按照大多数的使用对常用参数进行了默认配置。
所以,对应用项目的配置文件,往往只需要配置和惯例配置不同的或者新增的配置参数,如果你完全采用默认配置,甚至可以不需要定义任何配置文件。
惯例配置文件会被系统自动加载,无需在项目中进行加载。
 7、什么是SQL注入?(理解)答:SQL注入攻击是黑客对数据库进行攻击的常用手段之一。
一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。
注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。
 8、 ThinkPHP如何防止SQL注入?(理解)答:(1)查询条件尽量使用数组方式,这是更为安全的方式;(2)如果不得已必须使用字符串查询条件,使用预处理机制;(3)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)(4)使用自动验证和自动完成机制进行针对应用的自定义过滤;(5)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。
 9、如何开启调试模式?调试模式有什么好处?答:开启调试模式很简单,只需要在入口文件中增加一行常量定义代码:项目配置->调试配置->分组配置->扩展配置->动态配置以上是配置文件的加载顺序,因为后面的配置会覆盖之前的同名配置(在没有生效的前提下),所以优先顺序从右到左。
 11、TP中的URL模式有哪几种?默认是哪种?答:ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括普通模式、PATHINFO、REWRITE和兼容模式。
默认模式为:PATHINFO模式,设置URL_MODEL 为1 12、TP中系统变量有哪些?如何获取系统变量?答:获取系统变量的方法:只需要在Action中调用下面方法:$this->方法名("变量名",["过滤方法"],["默认值"])13、ThinkPHP框架中D函数与M函数的区别是什么?答:M方法实例化模型无需用户为每个数据表定义模型类,D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会自动调用M方法去实例化Model基类。
同时对于已实例化过的模型,不会重复去实例化(单例模式)。
 五、smarty模板引擎1. 编译和缓存区别?smarty的编译过程就是把模板拿过来,把里面的标签替换成相应php代码,这就是smarty的编译, 其实就是php和html混合的过程smarty的缓存需要手动开启,smarty的缓存就是把编译好的文件执行后,同时生成一份静态的html页面,再次访问的时候,你访问的就是是html文件了,所以就效率来说,要高一些 2.什么是smarty? Smarty的优点是什么?Smarty是一个使用PHP写出来的PHP模板引擎,目的是要使用PHP程序同美工分离,使的程序员改变程序的逻辑内容时不会影响到美工的页面设计,美工重新修改页面时不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
(也易于程序的多样式开发)Smarty优点1. 速度快:相对其他模板引擎。
2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件3 缓存技术:它可以将用户最终看到的HTML文件缓存成一个静态的HTML页4. 插件技术:smarty可以自定义插件。
不适合使用smarty的地方1. 需要实时更新的内容。
例如像股票显示,它需要经常对数据进行更新 2.小项目。
小项目因为项目简单而美工与程序员兼于一人的项目3.在模板中使用{$smarty}保留变量{$smarty.get.page} //类似在php脚本中访问$_GET[page]{smarty.cookies.}{smarty.post.}{smarty.session.}{smarty.server.} 4.在模板中访问php中的变量在php脚本中有系统常量和自定义常量两种,同样这两种常量在Smarty模板中也可以被访问,而且不需要从php中分配,只要通过{$smarty}保留变量就可以直接输出常量的值。
在模板中输出常量的示例:{$smarty.const._MY_CONST_VAL}{$smarty.const.__FILE__}5.变量调解器{$var|modifier1|modifier2|........} 6. php查询mysql数据库时,查询中文结果时出现的乱码。
怎么解决????1.文件属性(另存为)2.文件meta(设置浏览器解析的时候)3. 连接数据库时编码设定4. PHP文件中使用header函数确定编码 7.缓存机制如果开启了缓存,smarty同时生成一份静态的html页面,如果在设定的时间没有过期,再次访问的时候,你访问的就是是html文件了,减少了读取数据库,所以就效率来说,要高一些。
 8. smarty的赋值和载入模板$Smarty->assign(name,value)$Smarty->display(‘index.html’) 9.marty模板技术的用途是什么?为了php与html分开,美工和程序员各司其职,互不干扰。
 10. smarty配置主要有哪几项?1. 引入smarty.class.php;2. 实例化smarty对象;3. 重新修改默认的模板路径;4. 重新修改默认的编译后文件的路径;5. 重新修改默认的配置文件的路径;6. 重新修改默认的cache的路径。
7. 可以设置是否开启cache。
8. 可以设置左侧和右侧定界符。
 11. smarty在使用过程中需要注意哪些细节?Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,也就是说smarty技术将用户UI与php代码分离开。
这样程序员和美工各司其职,互不干扰。
 12. smarty运用过程中要注意以下几个问题:1.正确配置smarty。
主要要实例化smarty对象,配置smarty模板文件的路径;2.php页面中使用assign赋值 和display显示页面;3.smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。
A.{}B. foreachC. if elseD. includeE. Literal六、二次开发系统(DEDE、ecshop):1.对二次开发的理解二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。
2. MVC  Model(模型)数据处理。
View(视图) 模板显示。
Controller(控制器) 控制流程。
MVC的概念是什么?各层主要做什么工作?MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。
M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。
使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。
在网站开发中,模型层一般负责对数据库表信息进行增删改查,视图层负责显示页面内容,控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法,执行完毕后由控制器层决定将结果assign到哪个view层。
 3.二次开发程序安装后访问时候出现一些警告以及错误根据错误,来修改服务器配置参数以及百度 4. 功能,模板的更换,功能的添加修改其实也就是面向对象的应用 用,以及模板的更换类似smarty的使用5. 用过哪些二次开发的东西?Dedecms phpcms  ecshop,基本这些的东西如果基础好了 学习起来都是没问题的。
 6. 像php做一次开发好,还是二次开发好?一般中小企业都用cms系统二次开发,都是为了效率。
当然如果想一次开发也行,会用框架而且时间充足的话就可以了,大企业都是团队来开发的,杜绝版权问题。
 7. 二次开发过程中很多类与类之间进行之间的方法访问,是通过什么方式传递的?不是类继承而是对象组合,把实例化好的对象通过global传递进去 8. dedecms如果更换目录,后台某项就进不去了如何解决?后台核心设置中修改成现在的 项目目录名称 9.  dedecms中自定义模型的理解?在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。
通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。
当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点。
相当于我们自动添加了表结构,适应现在当前需求的变化 10.  dede中概念,设计和使用模板,必须要理解下面几个概念1、板块(封面)模板:指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。
2、列表模板:指网站某个栏目的所有文章列表的模板,一般用 “list_识别ID.htm” 命名。
3、档案模板:表示文档查看页的模板,如文章模板,一般用 “article_识别ID.htm” 命名。
4、其它模板:一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。
 11. dede中几种标签的使用?列表 内容 等标签 只能在其本范围内使用,列表标签只能在列表中使用,内容标签只能在内容标签中使用。
全局标签能在所有页面中使用12.熟悉常用类库(例如:dedesql.class.php);熟悉系统函数库(common.func.php);熟悉自定义函数库(extend.func.php);熟悉前台入口文件(common.inc.php) 七、微信公众平台开发1. 微信运行机制公众号与php之间用什么语言通信:XmlWeixin.php中是如何接收公众号数据的:$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收数据  XML数据2. 消息类型微信目前提供了7种基本消息类型,分别为:(1)文本消息(text);(2)图片消息(image);(3)语音(voice)(4)视频(video)(5)地理位置(location);(6)链接消息(link);(7)事件推送(event)类型。
掌握不同的消息类型发送时的数据传递格式 3. 将整个文件读入一个字符串的函数是File_get_contents 4.常用函数把xml数据解析成对象的函数是simplexml_load_string( )将字符串转换为数组的函数是___ explode_________,将数组转化为字符串的函数是____implode________.编码 URL 字符串的字符串是____urlencode________. 5. Sprintf函数的作用这个都是可以查手册的。
 6. 微信公众号出现无法提供服务的原因?1. 网络原因 ,数据接口原因2. 代码错误,怎么推测原因修改的哪里检查一下,如果代码没错可以输出数据 看一下。
用php操作文件$myfile = fopen("newfile.txt", "w");$txt ="aaaaaaaaaa";fwrite($myfile, $txt);fclose($myfile);7.  自定义菜单的事件推单击单击跳转链接扫码推事件扫码推且弹出弹出系统拍照发图的事件弹出微信相册发图器的事件弹出地理位置选择器的事件8.token的作用安全机制验证,用于微信服务器与PHP服务器之间的安全验证9. Appid与secrect的作用请求api接口(例如菜单的操作)时需要传appid与secrect两个值,用来获取应用的授权码以上就是程序员会在面试过程中碰到的问题,如果你经常参加面试的话,就会发现以上面试题很熟悉。
所谓“知己知彼,百战不殆”,充实自身技能,才能顺利进面。
我在经过三面、四面后几家公司终于等到了百度offer,下面我把更多的一些面试题分享给大家,整理的PDF目录如下:说实话我并不是那种别人一看就很喜欢的工程师,因为一直在小公司做个小架构,所以适合我的职位范围相对来说很窄。
不过没关系,跳出舒适区看一下其他风景,我感觉对我来说也是一件好事。
我就是这条街最靓滴仔!!!

返回列表
上一篇:
下一篇: