page contents

ThinkPHP面试题+答案(最全干货!!!)

面试背景先说说thinkphp面试的背景,一般来说tp是大部分小白上手的框架,简易,入手快,开发快,所以一般面试官在考你tp内容的同时一定会问到你一些基础性的内容,那么下面就是我准备的一些基...

attachments-2021-06-Hc54H3Jo60cc1263e9ba6.png

面试背景

先说说thinkphp面试的背景,一般来说tp是大部分小白上手的框架,简易,入手快,开发快,所以一般面试官在考你tp内容的同时一定会问到你一些基础性的内容,那么下面就是我准备的一些基础和tp面试题:

1、HTTP状态码
点击这儿查看HTTP状态码详解
常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转义到其他URL
404 - 请求的资源(网页等)不存在
505 - 内部服务器错误
HTTP状态码分类:
1** - 信息,服务器收到的请求,需要请求者继续执行操作
2** - 成功,操作被成功接收并处理
3** - 重定向,需要进一步的操作以完成请求
4** - 客户端错误,请求包含语法错误或者无法完成请求
5** 服务器错误,服务器在处理请求的过程
中发生了错误

2、什么是魔术引号
魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义

3、说明php中传值与传引用的区别,并说明传值什么时候传引用?
变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量

4、语句include和require的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
require_once表示了只包含一次,避免了重复包含

5、是否使用过模板引擎?使用的模板引擎的名字是?

Smarty:Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。

6、SESSION与COOKIE的区别?

(1)存储位置:session存储于服务器,cookie存储于浏览器
(2)安全性:session安全性比cookie高
(3)session为‘会话服务’,在使用时需要开启服务,cookie不需要开启,可以直接用

7、如何理解TP中的单一入口文件?

答:ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个项目都有一个统一(但不一定是唯一)的入口。应该说,所有项目都是从入口文件开始的,并且所有的项目的入口文件是类似的,入口文件中主要包括:

  定义框架路径、项目路径和项目名称(可选)

  定义调试模式和运行模式的相关常量(可选)

  载入框架入口文件(必须)

8、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本身。

9、如何理解 ThinkPHP架构(核心 + 行为 + 驱动)中的行为?

答:核心 + 行为 + 驱动TP官方简称为:CBD  

核心(Core):就是框架的核心代码,不可缺少的东西,TP本身是基于MVC思想开发的框架。  

行为(Behavior) :行为在新版ThinkPHP的架构里面起着举足轻重的作用,在系统核心之上,设置了很多标签扩展位,而每个标签位置可以依次执行各自的独立行为。行为扩展就因此而诞生了,而且很多系统功能也是通过内置的行为扩展完成的,所有行为扩展都是可替换和增加的,由此形成了底层框架可组装的基础。  

驱动( Driver ):数据库驱动、缓存驱动、标签库驱动和模板引擎驱动,以及外置的类扩展。  

框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

10、 ThinkPHP如何防止SQL注入?(理解)
  (1)查询条件尽量使用数组方式,这是更为安全的方式;

  (2)如果不得已必须使用字符串查询条件,使用预处理机制;

  (3)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)

  (4)使用自动验证和自动完成机制进行针对应用的自定义过滤;

  (5)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。

11、 如何开启调试模式?调试模式有什么好处?

  开启调试模式很简单,只需要在入口文件中增加一行常量定义代码:

<?php
  //开启调试模式
   define('APP_DEBUG', true);
  //加载框架入口文件
   require './ThinkPHP/ThinkPHP.php';

  在完成开发阶段部署到生产环境后,只需要删除调试模式定义代码即可切换到部署模式。开启调试模式后,系统会首先加载系统默认的调试配置文件,然后加载项目的调试配置文件,调试模式的优势在于:

  开启日志记录,任何错误信息和调试信息都会详细记录,便于调试;

  关闭模板缓存,模板修改可以即时生效;

  记录SQL日志,方便分析SQL;

  关闭字段缓存,数据表字段修改不受缓存影响;

  严格检查文件大小写(即使是Windows平台),帮助你提前发现Linux部署问题;

  可以方便用于开发过程的不同阶段,包括开发、测试和演示等任何需要的情况,不同的应用模式可以配置独立的项目配置文件。

12.、TP中支持哪些配置模式?优先级?

ThinkPHP在项目配置上面创造了自己独有的分层配置模式,其配置层次体现在:  惯例配置->项目配置->调试配置->分组配置->扩展配置->动态配置  以上是配置文件的加载顺序,因为后面的配置会覆盖之前的同名配置(在没有生效的前提下),所以优先顺序从右到左。

13. TP中的URL模式有哪几种?默认是哪种?

ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括普通模式、PATHINFO、REWRITE和兼容模式。  默认模式为:PATHINFO模式,设置URL_MODEL 为1

14、TP中系统变量有哪些?如何获取系统变量?

获取系统变量的方法:

只需要在Action中调用下面方法:

$this->方法名("变量名",["过滤方法"],["默认值"])

15、ThinkPHP框架中D函数与M函数的区别是什么?

答:M方法实例化模型无需用户为每个数据表定义模型类,D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会自动调用M方法去实例化Model基类。同时对于已实例化过的模型,不会重复去实例化(单例模式)。

16、双引号和单引号的区别
双引号解释变量,单引号不解释变量
双引号里插入单引号,其中单引号里如果有变量的话,变量解释
双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\
能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)

17、对于大流量网站,采用什么方法来解决访问量的问题
确认服务器硬件是否能够支持当前的流量
数据库读写分离,优化数据表
程序功能规则,禁止外部的盗链
控制大文件的下载
使用不同主机分流主要流量以下是当我们的项目慢慢出现卡顿,用户量增加,我们需要去做优化需要学习了解的内容,性能优化 可以使用缓存Redis,数据量优化,可以去了解mysql优化,索引

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-gcfER0RG62ac3e15bfbf6.jpeg

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1324 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章