面试常见问题-框架

April 12th 2019 | 日常

  • 谈谈对mvc的认识?
    MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。
    使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
    视图是用户看到并与之交互的界面。
    模型表示企业数据和业务规则。
    控制器接受用户的输入并调用模型和视图去完成用户的需求。
    MVC的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理
    MVC的缺点:没有明确的定义,完全理解MVC并不容易。不适合小型规模的应用程序。
  • 在TP中M方法与D方法的区别
    虽然都是实例化模型对象,两者还是有区别的
    D和M的区别主要在于
    M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现
    而D方法必须有创建模型类。
    我们可以用下面两种方法去创建一个数据表的映射对象
    第一种:$Test = D(‘Test’)
    第二种:$Test = new Model(‘Test’)
    虽然这两种都可以对数据进行select,insert,delete,udpate操作,在
    数据验证上有很大的不同,
    用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” 
    (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);
    如果用第二种就没有了这个数据验证功能,需要手动验证。
    D函数实例化的是你当前项目的Lib/Model下面的模块。
    如果该模块不存在的话,直接返回实例化Model的对象(意义就与M()函数相同)。
    而M只返回,实例化Model的对象。它的$name参数作为数据库的表名来处理对数据库的操作。
  • 什么是模板技术、能够使HTML和PHP分离开使用的模板?
    模板技术就是使程序的逻辑代码和界面分开的技术。
    能够使HTML和PHP分开的模板有:Smarty、Template、PHPlibTemplate、FastTemplate,Dwoo,TinyButStrong,TemplateLite,Savant,phemplate,XTemplate
  • Smarty的原理
    smarty是个模板引擎,最显著的地方就是有可以把模板缓存起来。
    一般模板来说,都是做一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,
    然后在PHP里打开这个模板文件,把分隔符里面的值替换掉,然后输出来,你可以看下PHPLib里面的template部分。
    而smarty设定了缓存参数以后,第一运行时候会把模板打开,在php替换里面值的时候把读取的html和php部分重新生成一个临时的php文件,
    这样就省去了每次打开都重新读取html了。如果修改了模板,只要重新刷下就行了。
  • 在Smarty模板语法中如何获取php的全局环境变量
    $smarty.get.变量#显示通过get方式传过来的指定变量的值
    $smarty.post.变量#显示通过post方式传过来的指定变量的值$smarty.cookies.变量#显示通过cookie中指定变量的值
    $smarty.server.SERVER_NAME#显示server变量值,$_SERVER系列变量$smarty.env.PATH#显示系统环境变量值,$_ENV系列变量$smarty.session.变量#显示session中指定变量的值
    $smarty.request.变量#显示通过post、get、cookie中指定变量的值
  • php各框架优缺点:
    在开发过程中,我主要使用过了这么几种框架。
    thinkPHP框架、CI框架,laravel框架和yii框架。
    我接触到的第一个框架是TP框架,我简单的说下我对这几个框架的看法:
    ThinkPHP框架
      优点:
    TP借鉴了Java思想,基于PHP5,充分利用了PHP5的特性,部署简单只需一个入口文件,一切搞定,简单高效,中文文档齐全,入门超级简单。
    自带模板引擎,具有独特的数据验证和自动填充功能,框架更新速度比较迅速。
     缺点:一个Model中可以操作多个表,但TP只能一个。
    TP默认初始化了很多配置,使用起来很方便,但自然也会影响效率。
    但是把一些加载配置的时间拿去研究算法,这些小影响近乎可以忽略了。
    CodeIgniter框架
    优点:
    配置简单,上手很快,全部的配置使用PHP脚本来配置,没有使用很多太复杂的设计模式,执行性能和代码可读性上都不错,执行效率比较高,具有基本的MVC功能. 
    快速简洁,代码量少,框架简单,容易上手,自带了很多简单好用的library,框架适合中小型项目,大型项目也不是不可以,只是扩展能力稍差。
    缺点:
    1. 把Model层简单的理解为数据库操作
    2. PHP框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要
    laravel框架(目前最新的是5.3,要求PHP版本较高5.6)
           优点:
       1.Laravel注重代码的模块化和可扩展性。
       2.artisan: 命令行工具,很多手动的工作都自动了
       3.可继承的模版,简化view的开发和管理
       Laravel一直是PHP开发者最受欢迎的PHP框架。这是一个年轻的框架,但是拥有优雅的语法,可简单快速开发你的应用。
    它拥有大多数常见的功能,如:路由,身份验证,会话,队列和缓存。 
      缺点:
       laravel的中英文文档比较少 demo也比较少 有时候一个功能要试好久 甚至要看源码
    YII框架(目前是2.0版本)
    优点:
     1、快速,敏捷,不拖沓,给程序员飞翔的能力;
     2、有gii功能!(创建控制器,model层,crud等操作);
     3、具有高度的可重用性和可扩展性,是纯粹的面向对象的。开发速度快,完备的文档,可重用性可高扩展,是最高效的开发框架之一。
    缺点:
    1、对Model层的指导和考虑较少
    2、文档实例较少
    3、英文太多
    4、要求PHP技术精通,OOP编程要熟练!
    5、要求会bootstrap
  • 上一家公司用的什么框架写的项目,还接触过什么框架?
       我的上一家公司主要使用的是XXX框架,我对该框架非常熟悉,我们公司在该框架上做了一些相应的扩展,引入了一些自己编写的类库文件和插件库。
    我以前还使用过yii2,ci、laravel框架,以前还自己封装过MVC框架。
    一个新的框架掌握起来很容易,你只要抓住其中的几个点,比如路由规则、MVC、数据库相关的操作,其他的都可以查手册,孰能生巧,通过一个小项目就可以把框架用得很熟,当然框架底层的东西,我们还是得用一些好的IDE工具去追它的底层源码。
  • 封装过一个简单的框架
    封装过一个简单的MVC框架,主要分为3层,控制器层和模型层视图层,以及路由的分配和入口文件,模板引擎,单例模式、工厂模式,第三方类库的引入等。
  • 有用过预处理么?
    用过,PDO类中,有个prepare方法可以实现预处理,PDOStament类中 的excute方法可以执行预处理,
    预处理的参数分为两种,一种是:字符串占位符,另一种是?占位符,:字符串占位符在执行预处理传递参数时传入的是关联数组,而?占位符传递的是索引数组。
    两者不能混合使用,但一般推荐使用:字符串占位符。
  • 用框架还用自己的处理吗
    一般成熟的开源框架中都考虑到了数据安全这方面的东西,但有时候我们可能会使用一些原生的SQL语句时,我们就需要考虑自己对sql语句进行预处理。
    当然有时候框架中的过滤方法我们不希望采用,比如使用文本编辑器时,我们可以使用自己的过滤方式。
  • 框架中什么是单一入口和多入口,单一入口的优缺点?
    1、多入口就是通过访问不同的文件来完成用户请求。
    单一入口只web程序所有的请求都指向一个脚本文件的。
    2、单一入口更容易控制权限,方便对http请求可以进行安全性检查。
    缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。