PHP专业面试题汇总:涵盖基础、数据库、面向对象、ThinkPHP、smarty模板引擎及二次开发系统
PHP专业面试题汇总

1.PHP基础知识:
2.数据库部分
3. 面向对象a部分
4.ThinkPHP部分
5.smarty模板引擎
6.二次开发系统(DEDE、ecshop)
7.微信公众平台开发
4.ThinkPHP部分
1. 常用PHP框架
答案:thinkPHP;伊伊; Zend框架;蛋糕PHP;西;
2、如何理解TP中的单项文件?
答:ThinkPHP采用单入口模式进行项目部署和访问。一个项目无论完成什么功能,都有一个统一的(但不一定是唯一的)入口。应该说,所有的项目都是从一个入口文件开始的,而且所有项目的入口文件都是相似的。入口文件主要包括:
3. ThinkPHP中的MVC分层是什么? (理解)
答:MVC是一种分离应用程序的逻辑层和表示层的方法。 ThinkPHP也是基于MVC设计模式的。 MVC只是一个抽象的概念,没有特别明确的规定。 ThinkPHP中的MVC分层大致体现在:
模型(M):模型的定义由Model类完成。
控制器(C):应用程序控制器(核心控制器App类)和Action控制器都承担控制器的角色。动作控制器完成业务流程控制,应用控制器负责调度控制。
View(V):由View类和模板文件组成。模板100%分离,可独立预览和制作。
但事实上,ThinkPHP 并不依赖于 M 或 V,这意味着它可以在没有模型或视图的情况下工作。它甚至不依赖于C。这是因为ThinkPHP在Action之上还有一个主控制器,即App控制器,负责应用程序的整体调度。在没有C的情况下,视图V必须存在,否则就不再是一个完整的应用程序。
总而言之,ThinkPHP的MVC模式只是提供了一种敏捷开发的手段,而不是拘泥于MVC本身。
4.如何优化SQL?
回答:
(1)选择正确的存储引擎
以MySQL为例,它包括两个存储引擎:MyISAM和InnoDB。每个引擎都有优点和缺点。
MyISAM适合一些需要大量查询的应用,但是对于大量的写操作就不太好了。即使你只需要更新一个字段,整个表也会被锁定,其他进程,甚至读进程,在读操作完成之前都无法进行操作。此外,MyISAM 对于 SELECT COUNT(*) 等计算速度非常快。
InnoDB的趋势将是一个非常复杂的存储引擎,对于一些小型应用程序来说,它会比MyISAM慢。但它支持“行锁”,所以当写操作较多时会比较好。而且,它还支持更高级的应用,例如交易。
(2)优化字段的数据类型
请记住,作为一条规则,较小的列会更快。如果一个表只有几列(比如字典表、配置表),那么我们没有理由使用INT作为主键。使用 MEDIUMINT、SMALLINT 或更小的 TINYINT 会更经济。如果不需要记录时间,DATE比DATETIME要好得多。当然,还需要留有足够的扩展空间。
(3) 为搜索字段添加索引
索引不一定用于主键或唯一字段。如果表中有一个字段您将始终用于搜索,那么最好对其建立索引。除非您要搜索的字段是大型文本字段,否则您应该创建全文索引。
(4)避免使用Select *。从数据库读取的数据越多,查询就会变得越慢。而且,如果你的数据库服务器和WEB服务器是两个独立的服务器,这也会增加网络传输的负载。即使要查询数据表中的所有字段,也尽量不要使用*通配符。善用内置的字段排除定义可能会带来更多便利。
(5)使用ENUM代替VARCHAR
ENUM 类型非常快速且紧凑。事实上,它保存的是TINYINT,但它显示为字符串。这样一来,利用这个字段来做一些选择列表就变得相当完美了。例如,如果性别、种族、部门、身份等字段的值是有限且固定的,那么应该使用 ENUM 而不是 VARCHAR。
(6)尽可能使用NOT NULL
除非您有非常具体的原因要使用 NULL 值,否则您应该始终将字段保持为 NOT NULL。 NULL实际上需要额外的空间,并且当你进行比较时你的程序会更加复杂。当然,这并不意味着不能使用NULL。现实情况非常复杂,仍然会有需要使用NULL值的情况。
(7)定长表会更快
如果表中的所有字段都是“固定长度”,则整个表被视为“静态”或“固定长度”。例如,表中没有以下类型的字段:VARCHAR、TEXT、BLOB。只要包含其中一个字段,该表就不再是“定长静态表”,MySQL引擎将以另一种方式处理它。
固定长度的表将提高性能,因为 MySQL 的搜索速度更快。因为这些固定的长度可以很容易计算出下一个数据的偏移量,读取自然会更快。而如果该字段不是固定长度的,那么每次要查找下一个字段时,程序都需要查找主键。
此外,固定长度的表更容易缓存和重建。然而,唯一的副作用是固定长度字段浪费了一些空间,因为无论您是否使用它们,固定长度字段都需要很大的空间。
5.如何理解ThinkPHP 3.0架构三层(核心+行为+驱动)中的行为?
答案:核心+行为+驱动
TP的官方缩写是:CBD
Core:是框架的核心代码,不可或缺的东西。 TP本身是一个基于MVC思想开发的框架。
行为:行为在ThinkPHP新版本的架构中起着决定性的作用。在系统的核心上,有很多标签扩展位,每个标签位都可以轮流执行自己独立的行为。行为扩展就是这样诞生的,很多系统功能也是通过内置的行为扩展来完成的。所有的行为扩展都是可替换和可添加的,从而形成了底层框架组装的基础。
驱动:数据库驱动、缓存驱动、标签库驱动、模板引擎驱动、外部类扩展。
框架,即框架。其实它是某个应用的半成品,是一组组件供你选择和使用来完成你自己的系统。简单来说,就是利用别人搭建的舞台,你来表演。而且框架一般都是成熟的、不断升级的软件。
6、常规配置是怎样的?
答:约定配置 上一页 下一页 约定比配置更重要。这是该系统遵循的一个重要思想。系统内置约定配置文件(位于系统目录下的Conf\convention.php)。根据大多数用途,常用参数均进行默认配置。因此,对于应用项目的配置文件,往往只需要配置与常规配置不同的或者新的配置参数即可。如果完全采用默认配置,甚至不需要定义任何配置文件。
常规的配置文件会被系统自动加载,不需要在工程中加载。
7.什么是SQL注入? (理解)
答:SQL注入攻击是黑客攻击数据库的常用手段之一。有些程序员在编写代码时不会判断用户输入数据的合法性。注入者可以在表单中输入数据库查询代码并提交。程序会将提交的信息拼凑起来生成完整的SQL语句,服务器就会被欺骗。执行恶意SQL命令。注入器根据程序返回的结果成功获取一些敏感数据,甚至控制整个服务器。这就是SQL注入。
8、ThinkPHP如何防止SQL注入? (理解)
答:(1)查询条件尽量使用数组方法,这是比较安全的方法;
(2) 如果万不得已必须使用字符串查询条件,则使用预处理机制;
(3)开启数据字段类型验证,可以强制转换数值数据类型; (从3.1版本开始强制进行字段类型验证)
(4) 使用自动验证和自动完成机制来定制特定于应用程序的过滤;
(5)利用字段类型检查、自动验证和自动补全机制,避免恶意数据的录入。
9. 如何开启调试模式?调试模式有什么好处?
答:打开调试模式非常简单。只需要在入口文件中添加一行常量定义代码即可:
//开启调试模式define('APP\_DEBUG', true);//加载框架入口文件require './ThinkPHP/ThinkPHP.php';
完成开发阶段并部署到生产环境后,只需删除调试模式定义代码即可切换到部署模式。打开调试模式后,系统会首先加载系统默认的调试配置文件,然后加载项目的调试配置文件。调试模式的优点是:
10. TP支持哪些配置方式?优先事项?
答:ThinkPHP在项目配置上独创了自己独特的分层配置模式。其配置级别体现在:常规配置->项目配置->调试配置->分组配置->扩展配置->动态配置
以上是配置文件的加载顺序。因为后续的配置会覆盖之前的同名配置(如果不生效),所以优先级是从右到左。
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基类。同时,已经实例化的模型不会重复实例化(单例模式)。
5.smarty模板引擎
1. 编译和缓存有什么区别?
smarty的编译过程就是取出模板,将里面的标签替换成对应的PHP代码。这是smarty的汇编。其实就是PHP和HTML混合的过程。
Smarty的缓存需要手动开启。 Smarty的缓存是执行编译后的文件,同时生成静态html页面。当你再次访问的时候,就会访问到html文件,所以从效率上来说,肯定是高一些的
2、什么是聪明?聪明的优势是什么?
Smarty 是一个用 PHP 编写的 PHP 模板引擎。目的是将PHP程序与美工分离,这样当程序员改变程序的逻辑内容时,不会影响美工的页面设计,而当美工重新修改页面时,也不会影响页面设计。程序的程序逻辑在多人合作项目中尤为重要。 (也很容易开发多风格的程序)
聪明的优势
1. 快速:与其他模板引擎相比。
2、编译型:使用smarty编写的程序在运行时必须编译成非模板技术的PHP文件。
3 缓存技术:可以将用户最终看到的HTML文件缓存成静态HTML页面
4.插件技术:smarty可以定制插件。
smarty 不适合的地方
1.需要实时更新的内容。比如像库存展示,需要频繁的数据更新。 2.小项目。一个小项目,由于其简单性而需要美工和程序员。
3.使用{$smarty}保留模板中的变量
{$smarty.get.page} //类似于php脚本中访问$_GET[page]
{聪明.cookies。}
{聪明的帖子。}
{聪明.会话。}
{聪明.服务器。}
4.在模板中访问php中的变量
PHP 脚本中有两种类型的常量:系统常量和自定义常量。这两个常量也可以在Smarty模板中访问,不需要从PHP中分配。只要通过{$smarty}保留变量,就可以直接输出常量。价值。在模板中输出常量的示例:
{$smarty.const._MY_CONST_VAL}{$smarty.const.__FILE__}
5.变量中介
{$var|修饰符1|修饰符2|...........}
6、php查询mysql数据库时,查询中文结果出现乱码。怎么解决呢? ? ? ?
1.文件属性(另存为)
2.文件元(设置浏览器解析时)
3、连接数据库时的编码设置
4.利用PHP文件中的头函数确定编码
7.缓存机制
如果启用缓存,smarty会同时生成静态html页面。如果在设定的时间内没有过期,那么当你再次访问的时候,就会访问到html文件,这样就减少了读取数据库的需要,所以从效率上来说,要高一些。
8.Smarty赋值和加载模板
$Smarty->分配(名称,值)
$Smarty->display('index.html')
9.marty模板技术有什么用?
为了将PHP和HTML分开,美术人员和程序员应该各司其职,互不干扰。
10. smarty的主要配置有哪些?
1、引入smarty.class.php;
2.实例化smarty对象;
3.重新修改默认模板路径;
4.重新修改默认编译文件路径;
5、重新修改默认配置文件的路径;
6.重新修改默认缓存路径。
7.可以设置是否启用缓存。
8. 可以设置左右分隔符。
11、使用smarty时需要注意哪些细节?
Smarty是一个基于MVC概念的模板引擎。它将页面程序分为两部分来实现:视图层和控制层。换句话说,smarty 技术将用户 UI 与 PHP 代码分开。这样程序员和美工各司其职,互不干扰。
12、使用smarty时要注意以下问题:
1. 正确配置smarty。主要需要实例化smarty对象并配置smarty模板文件的路径;
2、在php页面中使用assign赋值和display来显示页面;
3. smarty 模板文件中不允许包含 PHP 代码片段。所有注释、变量和函数都必须包含在分隔符中。
一个。{}
B.foreach
C、如果是其他情况
D、包括
直译
6.二次开发系统(DEDE、ecshop):
1.二次开发的理解
二次开发,简单来说就是对现有的软件进行定制、修改,扩展功能,实现自己想要的功能。一般来说,原有系统的核心不会改变。
2.MVC
MVC的概念是什么?各个级别的主要任务是什么?
MVC(模型-视图-控制器)是一种软件设计模式或编程思想。
M指的是Model层,V是View层(显示层或用户界面),C是Controller层。使用mvc的目的是为了将M和V分开,以便一个程序可以方便地使用不同的用户界面。
在网站开发中,模型层一般负责增删改查数据库表信息。视图层负责显示页面内容。控制器层在M和V之间起到调节作用。控制器层决定调用哪个模型类的哪个方法。 ,执行完成后,controller层决定将结果分配给哪个view层。
3.安装后访问二次开发程序时出现一些警告和错误。
根据错误,修改服务器配置参数并百度
4. 功能、模板替换、功能添加和修改
其实就是用于面向对象的应用,模板替换和smarty的使用类似。
5、您使用过哪些二次开发工具?
dedecms、phpcms、ecshop,如果你基础好的话,学好这些基础的东西是没有问题的。
6、像PHP一样做一次开发好还是二次开发好?
一般中小企业使用CMS系统进行二次开发,都是为了效率。当然,如果你想一次性开发出来也是可以的,只要你懂得框架的使用方法,并且有足够的时间。大公司都是团队开发,以避免版权问题。
7、二次开发过程中,多个类之间的方法访问是如何转移的?
不是类继承而是对象组合,实例化的对象是通过global传入的
8、如果dedecms改变目录,后台某一项就无法进入。如何解决这个问题呢?
将后台核心设置更改为当前项目目录名
9、dedecms中自定义模型的理解是什么?
DreamWeaver系统中有内容模型的概念。不同的内容模型可以用来构建不同内容形式的网站。系统提供普通文章、相册、软件、产品、分类信息、专题等模型。通过系统自带的模型,我们可以用它来构建不同类型的网站。例如,可以使用图集构建图片站点,使用软件模型构建软件下载站点。
当然,以上系统自带的模型就称为系统模型。用户可以自己定义一些模型,比如书籍、音乐专辑等,只有自定义这些模型,才能构建出更多内容形式的网站。
这相当于我们自动添加一个表结构来适应当前需求的变化。
10、要理解dede中模板的概念、设计和使用,必须理解以下概念
1. 章节(封面)模板:
指网站首页或者比较重要的栏目封面频道使用的模板,一般以“index_identification ID.htm”命名。此外,单页或用户定义的自定义标签也可以选择支持部分模板标签。如果支持,系统在输出内容或生成特定文件之前,会使用section模板标签引擎进行解析。
2. 列表模板:
指网站某一栏目的所有文章列表的模板,一般以“list_identification ID.htm”命名。
3. 文件模板:
表示文档查看页面的模板,例如文章模板,通常以“article_identification ID.htm”命名。
4.其他模板:
一般系统一般包括模板:首页模板、搜索模板、RSS、JS编译功能模板等。此外,用户还可以自定义模板来创建任意文件。
11.dede中使用了哪些类型的标签?
例如列表内容标签只能在其范围内使用,列表标签只能在列表中使用,内容标签只能在内容标签中使用。
全局标签可以在所有页面上使用
12.熟悉常用类库
(例如:dedesql.class.php);熟悉系统函数库(common.func.php);熟悉自定义函数库(extend.func.php);熟悉前端入口文件(common.inc.php)
7.微信公众平台开发
1.微信运营机制
公众号与php通信用什么语言:Xml
如何在Weixin.php中接收公众账号数据:
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收数据 XML数据
2. 消息类型
微信目前提供7种基本消息类型,分别是:
(1) 短信(text);
(二)图片信息(图像);
(3) 语音
(4) 视频
(5) 地点;
(6)链接消息(link);
(7)事件推送(event)
类型。掌握发送不同消息类型时的数据传输格式
3、将整个文件读入字符串的函数是
文件获取内容
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.自定义菜单事件推送
点击
点击跳转链接
扫码推送活动
扫码推送、弹出
系统拍照、发图的弹窗事件
弹出微信相册发送器的事件
弹出位置选择器的事件
八、代币的作用
安全机制验证,用于微信服务器与PHP服务器之间的安全验证
9.Appid和secret的作用
请求API接口时(如菜单操作),需要传递appid和secret值来获取应用授权码。
以上是程序员在面试过程中会遇到的问题。如果你经常参加面试,你会发现上面的面试问题都很熟悉。俗话说“知己知彼,百战不败”。只有丰富自己的技能,才能顺利前进。经过三四次几家公司的面试,终于拿到了百度的offer。现在我将与您分享更多面试问题。 PDF目录如下:
说实话,我不是那种别人一看就很喜欢的工程师。因为我一直在小公司做小型架构,所以适合我的职位范围比较窄。
但没关系。我觉得走出自己的舒适区,去看看其他的风景,对我来说是件好事。
我是这条街上最帅的男孩! ! !