面试问题总结二(技术能力-PHP)----Ⅰ
1、你都做过什么项目?
答:第一份实习工作接触的项目是CRM 销售管理系统,一款用JSP语言开发的进销存管理系统。第一份正式工作是一款主打高质量图片社交社区网站项目,“美啦周末”(后改型为”聊会儿”)。第二份工作是在一个外包公司工作,项目较多,都是交叉进行,论坛、微信、商城、门户网站都接触做过。
2、你都做过哪些模块?
答:登录注册,商品管理、购物车模块、订单管理、后台数据统计分析、APP接口编写、SEO简单优化、第3方数据抓取。
3、当前国内或本地主要流行的WEB前端框架和后端框架?
答:
前端框架:Bootstrap、html5-boilerplate、Meteor、Semantic UI、Foundation、Materialize、Vue、Skeleton、Amaze UI、UIkit、Yui、kissy、MUI、Arale、JX、GMU、ZUI、Clouda Touch.js,react.js、angular.js,layUI等;
国内主要流行的几款:
Bootstrap : 来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。可跨平台。
Clouda:Clouda是基于node.js的Webapp开发框架,在使用Clouda时需要安装node.js
和MongoDB
。
Vue :一套构建用户界面的渐进式框架。
react.js:用于构建用户界面的 JavaScript库。
AngularJS:AngularJS 通过新的属性和表达式扩展了 HTML
后端框架:ThinkPHP(TP)、Laravel、Yii、CodeIgniter(CI)、Zend Framework、CakePHP、Symfony
各种框架的优缺点可以参考:https://blog.csdn.net/weixin_38893715/article/details/80240314
针对的项目不一样,一般来说:
1.小型项目:CodeIngiter
2.中型项目:CakePHP、Zend Framework、Laravel、Thinkphp
3.大型重量级项目:Yii、Symfony、Laravel
4、你之前公司使用框架是什么?
答:YII 和 thinkPHP
5、常见的开发环境,以及如何搭建?(重点在于搭建配置)
答:LAMP/LNMP、WAMP/WNMP
L: linux系统
W:windows系统
A:Apache
M:Mysql
P:PHP
6、PHP常见的模板引擎有哪些?有什么作用?你会哪些?
Smarty
Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。
Heyes Template Class
一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。
FastTemplate
一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。
ShellPage
一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。
STP Simple Template Parser
一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。
OO Template Class
一个你可以用在自己程序中的面向兑现的模板类。
SimpleTemplate
一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。
bTemplate
短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。
Savant
一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。
ETS - easy template system
可以使用完全相同数据重组模板的模板系统。
EasyTemplatePHP
适用于你的站点的一个简单但是强大的模板系统。
vlibTemplate
一个快速、全能的模板系统,它包含一个缓存和调试类。
AvanTemplate
多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏。
Grafx Software’s Fast Template
一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。
TemplatePower
一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。
TagTemplate
这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。
htmltmpl: templating engine
一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。
PHP Class for Parsing Dreamweaver templates
一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。
MiniTemplator (Template Engine)
针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。
Layout Solution
简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。
Cached Fast Template
它已经纳入FastTemplate,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。
TinyButStrong
一个支持MySQL, Odbc, Sql-Server和ADODB的模板引
擎。它包含7个方法和两个属性。
Brian
Lozier’s php based template engine
只有2K大小,非常快并且是面向对象设计。
WACT
一个从设计中分离代码的模板引擎。
PHPTAL
一个PHP下面的XML/XHTML模板库。
在之前的工作常用到是smarty模板引擎
smarty 是用 php 写出来的模板引擎,也是目前业界最著名的 php 模板引擎之一。它分离了逻辑代码和外在的显示,提供了一种易于管理和使用的方法,用来将混杂的 php 逻辑代码与 html 代码进行分离。
之前公司使用的是 TP 框架,已经封装好了 smarty 模板,所以没有单独使用过 。
smarty 是个模板引擎,最显著的地方就是有可以把模板缓存起来。一般模板来说,都是做一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,然后在 PHP 里打开这个模板文件,把分隔符里面的值替换掉,然后输出来。 而 smarty 设定了缓存参数以后,第一次运行时候会把模板打开,在 php 替换里面值的时候把读取的 html 和 php 部分重新生成一个临时的 php 文件,这样就省去了每次打开都重新读取 html 了。如果修改了模板,只要重新刷下就行了。
7、面向对象(OOP)是什么?(重点)
答:oop 是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
OOP 具有三大特点
1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现 MVC 分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。
2、继承性:就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP 只支持单继承,也就是说一个子类只能有一个父类。
3、多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。
oop的优点:
1、易维护 采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高 在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高 在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展 由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
8、MVC是什么?以及相互之间的关系?
答:mvc 是一种开发模式,主要分为三部分:M(model),也就是模型,负责数据的操作;
V(view),也就是视图,负责前后台的显示;
C(controller),也就是控制器,负责业务逻辑 客户端请求项目的控制器。
关系:如果执行过程中需要用到数据,控制器就会到模型中获取数据,再将获取到的数据通过视图显示出来。
9、TP框架有哪些优点?
答:TP 框架是我们中国人自己开发的框架,各种资料比较齐全,国内用的比较多,比较简单和方便,而且是免费开源的。
10、TP框架的特性有哪些?
答: 1.多表查询非常方便,在 model 中几句代码就可以完成对多表的关联操作;
2.融合了 smarty 模板,使前后台分离;
3.支持多种缓存技术,尤其对 memcache 技术支持非常好;
4.命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应;
5.支持多种 url 模式;
6.内置 ajax 返回方法,包括 xml,json,html 等;
7.支持应用扩展,类库扩展,驱动扩展等。
11、TP框架中的大写字母函数各表示什么意思?
答: U:对 url 的组装 ;
A:内部实例化控制器;
S:缓存处理;
R:调用某个控制器的操作方法;
D:实例化自定义模型类;
M:实例化基础模型类;
I:获取参数;
L:设置或者获取当前语言;
C:设置或获取,保存配置。
12、请介绍下Laravel 框架?
答: laravel 框架的设计思想比较先进,非常适合应用各种开发模式,作为一个框架,它为你准备好了一切,composer 是 php 的未来, laravel 框架最大的特点和优秀之处就是集合了 php 比较新的特点,以及各种各样的设计模式,Ioc 模式,依赖注入等。
13、Laravel 框架有哪些特点?
答:1.强大的 REST router:用简单的回调函数就可以调用,快速绑定 controller 和 router ;
2.artisan:命令行工具,很多手动的工作都自动化;
3.可继承的模板,简化 view 的开发和管理;
4.blade 模板:渲染速度更快;
5.ORM 操作数据库;
6.migration:管理数据库和版本控制;
7.测试功能也很强大;
8.支持composer包管理工具;
9.laravel 框架引入了门面,依赖注入,Ioc 模式,以及各种各样的设计模式等。
14、谈谈对 RESTful Web 服务的认识?(重点 RESTful API )
参考资料:http://www.runoob.com/w3cnote/restful-architecture.html
答:REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。
- 资源与URI:要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。URI既可以看成是资源的地址,也可以看成是资源的名称。
- 统一资源接口:统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。
- 资源的表述:资源在外界的具体呈现,可以有多种表述(或成为表现、表示)形式,在客户端和服务端之间传送的也是资源的表述,而不是资源本身。资源的表述包括数据和描述数据的元数据。
- 资源的链接:核心概念:"超媒体即应用状态引擎(hypermedia as the engine of application state)"。把一个个把资源链接起。
- 状态的转移
通俗的理解:
URI定位资源,用HTTP动词(GET,POST,PUT,DELETE)描述操作。
Resource:资源,即数据。
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现。
15、简述一下数据库的优化?
答:数据库的优化可以从四个方面来优化:
1.从结构层: web 服务器采用负载均衡服务器,mysql 服务器采用主从复制,读写分离
2.从储存层: 采用合适的存储引擎,采用三范式
3.从设计层: 采用分区分表,索引,表字段合适的字段属性,适当采用逆范式,开启 mysql 缓存
4.sql 语句层:结果一样的情况下,采用效率高,速度快节省资源的 sql 语句执行。
16、如何解决异常处理?
答:抛出异常:使用 try...catch,异常的代码放在 try 代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会抛出一个异常。Catch 代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。
解决异常:使用 set_error_handler 函数获取异常(也可以使用 try()和 catch()函数),然后使用 set_exception_handler()函数设置默认的异常处理程序,register_shutdown_function()函数来执行,执行机制是,php 要把调入的函数调入到内存,当页面所有的 php 语句都执行完成时,再调用此函数。
17、前端 HTML、JS(jQuery)、CSS 能力如何?
重点在于标签语义化和jQuery的掌握,HTM5、CSS3 特性和多浏览器直接的兼容处理
18、前端常用的插件有哪些?
答:jquery、touch.js、swiper.js、bootstop、Masonry (瀑布流)等
更多插件可以去jQuery插件库 http://www.jq22.com/ 查找
19、权限管理(RBAC)的实现?
答: 1.首先创建一张用户表:id name auto(保存格式为:控制器-方法)
2.然后在后台中创建一个基类控制器,控制器里封装一个构造方法,当用户登陆成功后,使用 TP 框架中封装好的 session 函数获取保存在服务器中的 session id,然后实例化模型,通过用户 id 获取保存在数据表中的 auth 数据,使用 explode 函数分割获取到的数据,并使用一个数组保存起来,然后使用 TP 框架中封装好的常量获取当前控制器和方法,然后把他们组装成字符串,使用 in_array 函数进行判断该数组中是否含有当前获取到的控制器和方法,如果没有,就提示该用户没有权限,如果有就进行下一步操作