php单例模式-PHP笔试常见问题(二)

PHP专业笔试题汇总

1.PHP基础知识:

二、数据库部分

3. 面向对象a部分

四、ThinkPHP部分

五、smarty模板引擎

6.二次开发系统(DEDE、ecshop)

7.微信公众平台开发

四、ThinkPHP部分

1. 常用PHP框架

答案:thinkPHP; 伊伊; Zend框架; 蛋糕PHP; 西;

2、如何理解TP中的单项文件?

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

3. ThinkPHP中的MVC层是什么? (理解)

答:MVC 是一种分离应用程序的逻辑层和表示层的技术。 ThinkPHP也是基于MVC设计模式的。 MVC只是一个具体的概念,并没有非常明确的规定。 ThinkPHP中的MVC分层大致表现在:

模型(M):模型的定义由Model类完成。

控制器(C):应用程序控制器(核心控制器App类)和Action控制器都承担了控制器的角色。 Action控制器完成业务流程控制,而Application控制器负责调度控制。

View(V):由View类和模板文件组成。 模板100%分离,可独立预览和制作。

但事实上php单例模式,ThinkPHP并不依赖于M或V,也就是说,它可以在没有模型或视图的情况下工作。 它甚至不依赖于C,因为ThinkPHP在Action之上还有一个通用控制器,即App控制器,它负责应用程序的通用调度。 没有C,就必须有视图V,否则就不再是一个完整的应用程序。

总而言之,ThinkPHP的MVC模型只是提供了一种敏捷开发的手段,而不是屈服于MVC本身。

4.如何优化SQL?

回答:

(1)选择正确的存储引擎

以MySQL为例,有两种存储引擎,MyISAM和InnoDB,每种引擎都有优点和缺点。

MyISAM适合一些需要大量查询的应用,但是对于大量的写操作就不太好了。 即使只需要更新一个数组,整个表也会被锁定,其他进程,甚至读进程,在读操作完成之前都很难操作。 此外,MyISAM 对于 SELECTCOUNT(*) 等估计速度非常快。

InnoDB的趋势将是一个非常复杂的存储引擎,对于一些小型应用程序来说,它会比MyISAM慢。 而且它支持“行锁”,所以写操作比较多的时候会比较好。 而且,他还支持更多的中间应用,比如:事务。

(2)优化数组的数据类型

记住一个原则,柱子越小速度会越快。 如果一个表只有几列(例如字典表、配置表),那么我们没有理由使用INT作为主键。 使用 MEDIUMINT、SMALLINT 或更小的 TINYINT 会更经济。 如果不需要记录时间,使用DATE比DATETIME要好得多。 事实上,你还需要留有足够的扩展空间。

(3)向搜索数组添加索引

索引不一定适用于字段或唯一数组。 如果你的表中有一个你经常用来搜索的数组,最好为它建立一个索引,除非你要搜索的数组是一个大文本数组,那么你应该建立一个全文索引。

(4)防止使用Select*从数据库读取更多数据,这样查询会显得更慢。 而且,如果你的数据库服务器和WEB服务器是两台独立的服务器,这样会减少网络传输的负载。 即使要查询数据表中的所有数组,也尽量不要使用*键值。 善用外部设备提供的数组排除定义,其实可以给你带来更多的便利。

(5)使用ENUM代替VARCHAR

ENUM 类型特别快速且紧凑。 实际上,它持有一个 TINYINT,但它看起来是一个字符串。 这样,用这个数组来制作一些选项列表就相当完美了。 诸如性别、种族、部门和州之类的数组具有有限且固定的值,因此您应该使用 ENUM 而不是 VARCHAR。

(6)尽量使用NOTNULL

除非您有强烈的动机使用 NULL 值,否则您应该始终保持数组不为 NULL。 虽然NULL需要额外的空间,但是当你比较时你的程序会更复杂。 其实这并不是说不能使用NULL。 现实情况非常复杂,仍然有一些情况需要使用 NULL 值。

(7) 固定宽度的表格会更快

如果表中的所有数组都是“固定宽度”,则整个表被视为“静态”或“固定长度”。 例如,表中没有以下类型的数组:VARCHAR、TEXT、BLOB。 只要包含其中一个数组,该表就不是“固定宽度静态表”,MySQL 引擎将以另一种方式处理它。

固定宽度的表会提高性能,因为MySQL会更快地进行搜索和救援,而且由于这种固定宽度的表很容易估计出下一个数据的倾斜,所以读取自然会很快。 而如果数组不是固定长度的,那么,每次想要查找下一项,都需要程序去查找字段。

然而,固定宽度的表也更容易缓存和重建。 然而,唯一的副作用是定宽数组会浪费一些空间,因为定长数组无论你使用与否都需要分配这么多的空间。

5、如何理解ThinkPHP3.0框架3(核心+行为+驱动)中的行为?

答案:核心+行为+驱动

TP官方缩写:CBD

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

行为:行为在新版ThinkPHP的框架中起着举足轻重的作用。 在系统的核心上,设置了很多标签扩展位,每个标签位置可以依次执行自己独立的行为。 行为扩展为此而诞生,但很多系统功能也是通过外部行为扩展来完成的。 所有的行为扩展都是可替换、可缩减的,这为底层框架的组装奠定了基础。

驱动程序:数据库驱动程序、缓存驱动程序、标签库驱动程序和模板引擎驱动程序,以及内置类扩展。

框架,即框架。 它似乎是某种应用程序的半成品,是一组组件供你选择来完成你自己的系统。 简单来说,就是利用别人搭建的舞台,你来表演。 此外,框架通常是成熟的、不断升级的软件。

6.什么是自定义配置?

答:约定配置 上一页 下一页 约定比配置更重要,是系统遵循的一个重要思想。 系统外部有一个约定的配置文件(位于系统目录下的Confconvention.php)。 参数默认配置。 因此,对于应用项目的配置文件,往往只需配置与常规配置不同的或新增的配置参数即可。 如果完全使用默认配置,甚至可能不需要定义任何配置文件。

常规的配置文件会由系统手动加载,不需要在项目中加载。

7.什么是SQL注入? (理解)

答:SQL注入攻击是黑客攻击数据库的常用手段之一。 有些程序员在编译代码时没有判断用户输入数据的合法性。 注入者可以在表单中输入一段数据库查询代码并提交。 程序会根据提交的信息生成完整的sql语句,从而误导服务器执行恶意SQL命令。 根据程序返回的结果,注入器成功获取了一些敏感数据,甚至控制了整个服务器。 这就是SQL注入。

8、ThinkPHP如何避免SQL注入? (理解)

答:(1)查询条件尽量使用链表形式,这是比较安全的方法;

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

(3)开启数据数组类型验证,可以强制转换数值数据类型; (3.1版本已经强制进行数组类型验证)

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

(5)采用数组类型检测、自动验证和手动补全机制,防止恶意数据的输入。

9. 如何开启调试模式? 调试模式有什么好处?

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

<?Php,bv    //开启调试模式    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 子类。 同时,对于已经实例化的模型,不会重复去实例化(单例模式)。

五、smarty模板引擎

1. 编译和缓存有什么区别?

smarty的编译过程就是拿模板,将上面的标签替换成对应的php代码。 这是smarty的编译,虽然是php和html混合的过程

Smarty的缓存需要自动启用。 Smarty的缓存是执行编译后的文件,同时生成静态html页面。 当你再次访问的时候,访问的是html文件,所以从效率上来说,需要更高

2.什么是聪明人? 聪明的优势是什么?

Smarty 是一个用 PHP 编写的 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.文件meta(设置浏览器解析时)

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代码段,所有注释、变量、函数都必须包含在分隔符中。

A。{}

B、foreach

C、如果是其他情况

D、包括

E. 文字

6.二次开发系统(DEDE、ecshop):

1.二次开发的理解

二次开发,简单来说就是在现有的软件上进行定制化的修改和扩展功能,进而实现你想要的功能。 一般来说,原有系统的核心不会改变。

2、MVC

MVC 的概念是什么? 各层的主要任务是什么?

MVC(模型-视图-控制器)是一种软件设计模式或编程思想。

M指的是Model模型层,V指的是View视口(显示层或用户界面),C指的是Controller控制器层。 使用mvc的目的是实现M和V的分离,进而使程序能够方便地使用不同的用户界面。

在网站开发中,模型层通常负责对数据库表信息进行增删改查,视口负责显示页面内容,控制器层则起到M和V之间的调节作用,控制器层决定调用哪个模型类执行后,控制器层决定将结果分配给视图层。

3、二次开发程序安装后,访问时出现一些警告和错误

根据错误,更改服务器配置参数并百度

4.功能、模板替换、功能添加和变更

虽然也是面向对象的应用,而且模板的替换和smarty的使用类似

5、你用过什么二次开发?

dedecmsphpcmsecshop,基本上这种东西只要基础学好就没有问题。

6、像php这样的初级开发好,还是二次开发好?

通常中小企业使用cms系统进行二次开发,都是为了效率。 其实如果你想开发一次,就可以使用框架,并且有足够的时间。 大公司都是团队开发,避免版权问题。

7、二次开发过程中,很多类和类之间使用什么方法来传递访问?

不是类继承而是对象组合,实例化的对象是通过global传入的

8、如果dedecms的目录改变了,后台某一项就无法访问,如何解决?

后台核心设置中更改为当前项目目录名

9. 了解dedecms中的自定义模型?

在织梦系统中,有内容模型的概念。 不同的内容模型可以用来构建具有不同内容方法的网站。 系统提供一般文章、图册、软件、商品、分类信息、专题等模型。 我们可以利用系统内置的模型来构建不同类型的站点,例如:利用图集构建图片站点,利用软件模型构建软件下载站点。

事实上,上述附加于系统的模型称为系统模型。 用户可以自己定义一些模型,比如书籍、音乐专辑等。只有自定义了这些模型后,才能创建更多基于内容的网站。

相当于手动添加表结构来适应当前需求的变化

10、dede中模板的概念、设计和使用,需要了解以下概念

1、板(盖)模板:

指网站首页或者比较重要的栏目封面频道使用的模板,通常命名为“index_identification ID.htm”。 此外,用户定义的单页或自定义标签还可以选择是否支持蓝筹模板标签,如果支持,系统将使用蓝筹模板标记引擎进行分析,然后再输出内容或生成特定文件。

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. 消息类型

Momo目前提供了7种基本消息类型,分别是:

(1) 短信(text);

(二)图片信息(图像);

(3)声音(声音)

(4) 视频(视频)

(5) 地理位置(位置);

(6)链接消息(link);

(7) 风暴推送(事件)

type.掌握发送不同消息类型时的数据传输格式

3.将整个文件读入字符串的函数是

文件获取内容

4. 常用功能

将xml数据解析成对象的函数是

simplexml_load_string( )

将字符串转换为链表的函数是____explode_________,将链表转换为字符串的函数是____implode________。

字符串编码 URL 字符串是____urlencode________。

5.Sprintf函数的作用

这一切都可以在指南中找到。

6、为什么陌陌公众号提供服务困难?

1.网络原因、数据socket原因

2.代码错误,如何推断原因

检查修改的地方,代码是否正确

您可以查看输出数据。使用php操作文件

$myfile = fopen("newfile.txt", "w");$txt ="aaaaaaaaaa";fwrite($myfile, $txt);fclose($myfile);

7.自定义菜单的风暴推送

点击

点击跳转链接

扫码推风暴

扫描二维码推送、弹出

弹出系统拍照发图的风暴

弹出Momo相册出版商的风波

弹出位置选择器风暴

八、代币的作用

安全机制验证,用于Momo服务器与PHP服务器之间的安全验证

9.Appid和secret的作用

请求api套接字时(如菜单操作),需要传递appid和secret两个值,以获取应用程序的授权码

以上是程序员在笔试时会遇到的问题。 如果你经常参加笔试,你会发现上面的笔试题非常熟悉。 所谓“知己知彼,百战不殆”,丰富自己的本领,就能顺利进面。 经过三四轮,几家公司终于等到了百度的offer。 下面我再给大家分享一些笔试题。 PDF目录如下:

说实话,我并不是别人第一眼就很喜欢的工程师。 由于我还在小公司做小架构,所以适合我的职位范围比较窄。

不过没关系,我觉得跳出自己的舒适区,看看别的风景,对我来说是件好事。

我是街上最漂亮的孩子! ! !