金三银四马上开始了,所以花了很长时间搜集整理出来了这套PHP面试题大全,希望对大家有帮助哈~

博主还将大量面试题整理成了一个PHP面试手册,是PDF版的。

关注博主的微信公众号:PHP大神,然后回复“面试手册”即可获取~

1.请自我介绍一下?

答:我叫xxx,来自北京,20xx年毕业于xx大学计算机xx系,毕业后在**从事了x年的php开发工作,公司是一个外包公司,主要做微信开发,公众号推广,商城,论坛的开发

2.你在公司负责那些项目?

答:由于我们公司是一个外包公司,不可能只做一个项目,公司的项目都是交叉进行的,论坛,微信,商城我都做过。

3.你做过那些模块?

答:登陆注册,商品管理,购物车模块,订单管理

4.你们公司是使用什么框架?

答:我们公司采用的是TP框架,运用的mysql+apache+php进行开发,因为TP框架是一个免费开源的,轻量级的php开发框架,而且是我们中国人自己开发的,也是国内用的比较多的,各种资料也比较齐全

5.mvc是什么?相互间有什么关系?

答:mvc是一种开发模式,主要分为三部分:m(model),也就是模型,负责数据的操作;v(view),也就是视图,负责前后台的显示;c(controller),也就是控制器,负责业务逻辑

客户端请求项目的控制器,如果执行过程中需要用到数据,控制器就会到模型中获取数据,再将获取到的数据通过视图显示出来

6.oop是什么?

答:oop是面向对象编程,面向对象编程是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。

OOP具有三大特点

1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖,实现代码模块间松藕合。

2、继承性:就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。PHP只支持单继承,也就是说一个子类只能有一个父类。

3、多态性:子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。多态性增强了软件的灵活性。

7.smarty是什么,有什么作用?

回答一:smarty是用php写出来的模板引擎,也是目前业界最著名的php模板引擎之一

它分离了逻辑代码和外在的显示,提供了一种易于管理和使用的方法,用来将混杂的php逻辑代码与html代码进行分离

回答二:smarty是php中最著名的引擎框架之一,我们公司使用的是TP框架,已经封装好了smarty模板,所以没有单独使用过

回答三: smarty是个模板引擎,最显著的地方就是有可以把模板缓存起来。一般模板来说,都是做一个静态页面,然后在里面把一些动态的部分用一切分隔符切开,然后在PHP里打开这个模板文件,把分隔符里面的值替换掉,然后输出来,你可以看下PHPLib里面的template部分。

而smarty设定了缓存参数以后,第一次运行时候会把模板打开,在php替换里面值的时候把读取的html和php部分重新生成一个临时的php文件,这样就省去了每次打开都重新读取html了。如果修改了模板,只要重新刷下就行了。

8.TP框架有哪些优点?

答:TP框架是我们中国人自己开发的框架,各种资料比较齐全,国内用的比较多,比较简单和方便,而且是免费开源的

9.TP的特性有哪些?

1.多表查询非常方便,在model中几句代码就可以完成对多表的关联操作

2.融合了smarty模板,使前后台分离

3.支持多种缓存技术,尤其对memcache技术支持非常好

4.命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应

5.支持多种url模式

6.内置ajax返回方法,包括xml,json,html等

7.支持应用扩展,类库扩展,驱动扩展等

10.TP框架中的大字母函数?

U:对url的组装

A:内部实例化控制器

S:缓存处理

R:调用某个控制器的操作方法

D:实例化自定义模型类

M:实例化基础模型类

I:获取参数

L:设置或者获取当前语言

C:设置或获取,保存配置

11.请介绍一下laravel框架?

答: laravel框架的设计思想比较先进,非常适合应用各种开发模式,作为一个框架,它为你准备好了一切,composer是php的未来,没有composer,php肯定要走向没落

laravel框架最大的特点和优秀之处就是集合了php比较新的特点,以及各种各样的设计模式,Ioc模式,依赖注入等

12.laravel有那些特点?

回答一:

1.强大的rest router:用简单的回调函数就可以调用,快速绑定controller和router

2.artisan:命令行工具,很多手动的工作都自动化

3.可继承的模板,简化view的开发和管理

4.blade模板:渲染速度更快

5.ORM操作数据库

6.migration:管理数据库和版本控制

7.测试功能也很强大

8.composer也是亮点

回答二: laravel框架引入了门面,依赖注入,Ioc模式,以及各种各样的设计模式等

13.请简述一下数据库的优化?

1.从结构层: web服务器采用负载均衡服务器,mysql服务器采用主从复制,读写分离

2.从储存层: 采用合适的存储引擎,采用三范式

3.从设计层: 采用分区分表,索引,表的字段采用合适的字段属性,适当的采用逆范式,开启mysql缓存

4.sql语句层:结果一样的情况下,采用效率高,速度快节省资源的sql语句执行

14.如何解决异常处理?

答: 抛出异常:使用try…catch,异常的代码放在try代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会 抛出一个异常。Catch代码块捕获异常,并创建一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。

解决异常:使用set_error_handler函数获取异常(也可以使用try()和catch()函数),然后使用set_exception_handler()函数设置默认的异常处理程序,register_shutdown_function()函数来执行,执行机制是,php要把调入的函数调入到内存,当页面所有的php语句都执行完成时,再调用此函数

15.权限管理(RBAC)的实现?

1.首先创建一张用户表:id name auto(保存格式为:控制器-方法)

2.然后在后台中创建一个基类控制器,控制器里封装一个构造方法,当用户登陆成功后,使用TP框架中封装好的session函数获取保存在服务器中的session id,然后实例化模型,通过用户id获取保存在数据表中的auth数据,使用explode函数分割获取到的数据,并使用一个数组保存起来,然后使用TP框架中封装好的常量获取当前控制器和方法,然后把他们组装成字符串,使用in_array函数进行判断该数组中是否含有当前获取到的控制器和方法,如果没有,就提示该用户没有权限,如果有就进行下一步操作

16.怎么保证促销商品不会超卖?

答:这个问题是我们当时开发时遇到的一个难点,超卖的原因主要是下的订单的数目和我们要促销的商品的数目不一致导致的,每次总是订单的数比我们的促销商品的数目要多,当时我们的小组讨论了好久,给出了好几个方案来实现:

第一种方案:在每次下订单前我们判断促销商品的数量够不够,不够不允许下订单,更改库存量时加上一个条件,只更改商品库存大于0的商品的库存,当时我们使用ab进行压力测试,当并发超过500,访问量超过2000时,还是会出现超卖现象。所以被我们否定了。

第二种方案:使用mysql的事务加排他锁来解决,首先我们选择数据库的存储引擎为innoDB,使用的是排他锁实现的,刚开始的时候我们测试了下共享锁,发现还是会出现超卖的现象。有个问题是,当我们进行高并发测试时,对数据库的性能影响很大,导致数据库的压力很大,最终也被我们否定了。

第三种方案:使用文件锁实现。当用户抢到一件促销商品后先触发文件锁,防止其他用户进入,该用户抢到促销品后再解开文件锁,放其他用户进行操作。这样可以解决超卖的问题,但是会导致文件得I/O开销很大。

最后我们使用了redis的队列来实现。将要促销的商品数量以队列的方式存入redis中,每当用户抢到一件促销商品则从队列中删除一个数据,确保商品不会超卖。这个操作起来很方便,而且效率极高,最终我们采取这种方式来实现

17.商城秒杀的实现?

答:抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:

1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)

对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。第二个问题,我们可以使用redis队列来完成,把要秒杀的商品放入到队列中,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,文件锁和事务在高并发下性能下降很快,当然还要考虑其他方面的东西,比如抢购页面做成静态的,通过ajax调用接口,其中也可能会出现一个用户抢多次的情况,这时候需要再加上一个排队队列和抢购结果队列及库存队列。高并发情况下,将用户进入排队队列,用一个线程循环处理从排队队列取出一个用户,判断用户是否已在抢购结果队列,如果在,则已抢购,否则未抢购,库存减1,写数据库,将用户入结果队列。

未完待续~~~~~

更多面试题还可以扫码关注,回复“面试手册”直接下载。

2021百度,阿里,美团等大厂全新PHP面试题大汇总(一)相关推荐

  1. 2021年3月春招百度,阿里,美团等大厂全新PHP面试题大汇总(三)

    金三银四开始了,所以花了很长时间搜集整理出来了这套PHP面试题大全,希望对大家有帮助哈~ 还将大量面试题整理成了一个PHP面试手册,是PDF版的. 关注微信公众号:PHP大神,然后回复"面试 ...

  2. 大数据基础课03 阿里美团这些大厂都在用什么大数据架构?

    首先,我想讲一个叫庖丁解牛的故事,想必你应该听过.庖丁从开始杀牛,到他的故事被写下,操刀十九年,杀了数千头牛.也正是由于丰富的实践经验,他总结出了解杀牛的方法论:依照牛生理上的天然结构,砍入牛体筋骨相 ...

  3. 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析

    最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的 i .每次从通里面拿 ...

  4. Java面试题大汇总,2021年附答案解析

    最新常Java面试题大汇总(含答案解析)发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全汇总,希望对大家有帮助哈 本套Java面试题大全,全的不能再全,哈哈~ ...

  5. 面试稳了!BATJ 等大厂 400+ 道面试题全汇总!

    整理 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 2019 年已过半,大家在年初设定的目标进行得怎样了?预计涨的薪.跳的槽都完成了吗? 如果没的话,不妨看看这篇文章.GitHub 上有位 ...

  6. ”面霸“夏派卧底阿里、百度、美团等大厂带来面试题及答案

    面试,难还是不难?最终结果好还是不好?取决于面试者的底蕴(气场+技能).心态和认知以及沟通技巧.而一些主流的大型互联网公司面试(阿里巴巴.京东.美团.滴滴)更是需要你在面试时展现出自己的能力,从而获得 ...

  7. 不看你就亏了,最新最全的腾讯,阿里、百度、美团等大厂都在用的Redis实战

    不要小看一个redis 任何一家公司的招聘信息都包含一段redis的需求. 不要小看一个redis 你能在互联网搜索到的很多文章都讲错了,面试会有很多坑. 不要小看一个redis 搞懂它是你通向分布式 ...

  8. 腾讯,阿里、百度、美团等大厂都在用的Redis实战,不看你就亏了

    不要小看一个redis 任何一家公司的招聘信息都包含一段redis的需求. 不要小看一个redis 你能在互联网搜索到的很多文章都讲错了,面试会有很多坑. 不要小看一个redis 搞懂它是你通向分布式 ...

  9. 社招和校招有什么不同?阿里美团等大厂JAVA社招面经分享!

    前言 金九银十就要结束了,小编今天总结一下这段时间遇到大厂的Java面试经验,希望对大家的面试有帮助. 社招与校招面试的区别 校招面试主要考察的是大家对于基础知识的理解与掌握,数据结构和算法的熟练度. ...

最新文章

  1. gitter 卸载_最佳Gitter频道:Scala
  2. java mvc 断点续传_用SpringMVC 实现断点续传 (HTTP)
  3. 如何利用大数据做金融风控? 原创 2016年11月24日 17:42:03 标签: 大数据 / 金融 / 风控 1594 导语:如何通过海量数据与欺诈风险进行博弈? 随着金融科技、科技金融等概念的
  4. linux脚本--输出占用内存最多的进程ID
  5. Effective C++ 阅读笔记(一)透彻了解inline以及降低编译依存关系
  6. java生成小图片_JAVA生成缩略小图片类
  7. 41状态模式(State Pattern)
  8. 微型计算机中celeron,微型计算机中常提及的Pentium或Celeron是指其_______
  9. php blog to explore
  10. linux 0.11 内核学习 -- console.c,控制台
  11. Socket TCP和UDP的区别
  12. 常见php面试题,常见的 PHP 面试题和答案分享
  13. 科密a1无法连接数据库_支持无线图传的稳定器——致迅A1-pro图传稳定器
  14. hortonworks/registry : ClassNotFoundException: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
  15. LiDAR点云数据及其处理
  16. 驱动人生win7系统如何升级win10一键装机图文教程
  17. 39份AICon全球人工智能与机器学习技术大会 · 北京站2021(PPT汇总)
  18. opencv imwrite 之后与imread 图片变小原因与总结
  19. 细则从哈利·波特与来自您好麻雀船长
  20. 在C++中响铃的两种方法

热门文章

  1. JAVA注释技巧 西安尚学堂
  2. 一致性哈希算法原理(一)
  3. SE模块理解+SE-Resnet模块pytorch实现
  4. 现欲设计一个电子商务网站系统,该系统需要记录如下信息,其中下划线为标识信息: •客户有客户名、联系电话、配送地址; •商品有商品名、类别; •店铺有店铺名、信誉度、注册地址; •同一商品会在不
  5. java的sftp文件传输_java使用SFTP上传文件到资源服务器方法详解
  6. 白盒测试之语句覆盖、判定覆盖、条件覆盖等
  7. 路由器老断网,怎么办啊,老这样受不了啊!求解决方法!
  8. matlab之用m脚本自动生成exe文件
  9. python静态变量和动态变量_动态变量和静态变量的区别,堆和栈的区别
  10. JavaSE部分 ( 常用API )