PHP中级工程师面试题

1. 什么是MVC?

MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。

  • Model:数据信息存取层。
  • View:view层负责将应用的数据以特定的方式展现在界面上。
  • Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

2. GD库是做什么用的?

GD库提供了一系列用来处理图片的功能,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

3. session与cookie的区别?

  • session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
  • cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
  • 两者都可通过时间来设置时间长短。

4. 用PHP打印出前一天的时间格式是2010-7-3 12:28:21?

echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));

5. 对于大流量的网站,您采用什么样的方法来解决访问量问题?

答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量。

6. PHP魔术方法都有哪些?

__construct() 类的构造函数
__destruct() 类的析构函数
__construct() 类的构造函数
__call() 在对象中调用一个不可访问方法时调用
__callStatic() 用静态方式中调用一个不可访问方法时调用
__get() 获得一个类的成员变量时调用
__set() 设置一个类的成员变量时调用
__isset() 当对不可访问属性调用isset()或empty()时调用
__unset() 当对不可访问属性调用unset()时被调用
__sleep() 执行serialize()时,先会调用这个函数
__wakeup() 执行unserialize()时,先会调用这个函数
__toString() 类被当成字符串时的回应方法
__invoke() 调用函数的方式调用一个对象时的回应方法
__set_state() 调用var_export()导出类时,此静态方法会被调用
__clone() 当对象复制完成时调用
__autoload() 尝试加载未定义的类
__debugInfo() 打印所需调试信息

7. 你怎么理解命名空间?

PHP 命名空间(namespace)是在PHP 5.3中加的.PHP 命名空间可以解决以下两类问题:
  • (a)用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  • (b)为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

8. 你了解RESTFUL吗?

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。

9. 做过APP接口没?怎么做的?

用框架写接口,普通POST,GET接口,有时候用RESTFUL接口。写控制器从模型调用数据,返回XML或者JSON数据就行了。
APP接口主要解决两个问题,一个SESSION问题,一个是TOKEN问题。客户端第一次请求,服务端生成SESSION_ID,返回给客户端。之和的请求中,客户端把SESSION_ID传给服务端,服务端用SESSION_ID函数可以确保多次请求用的同一个SESSION。TOKEN需要加密和服务端验证。

10. PHP如何实现缓存?

1、数据缓存——普遍的一种缓存技术
非常直观的字面意思,就是把数据先存放好,减少对数据库的访问。第一次访问时,把要用到的数据保存到一个文件里,然后用户再次访问页面时,就先检测要查询的数据是否在缓存文件里,若存在,则直接取出,不需再次访问数据库。
一般这些数据以数组的形式保存。
2、页面缓存
和数据缓存差不多,每次访问页面时,就检测相应的页面缓存是否存在,若不存在,则查询数据库得到相应的数据,同时生成缓存页面,这样,在下次访问就可以直接取出缓存页面,不必再次查询数据库。
3、内存缓存
不作过多分析,一般熟借助第三方软件进行优化,比如Memcached、Redis。
以上方法能够解决频繁访问数据库的问题,但是缺乏时效性,在数据库改变后,他们默认的数据还是修改之前的。所以就要在规定时间内清除缓存,以更新数 据。比如在每次更新缓存后设定一个时间戳t1,当前的时间戳t2,规定缓存时间为T,那么,在t1与t2相差在T之内时,就不更新缓存,否则,超过了T, 就重新查询数据库,清除之前的缓存,又得到一个新的时间戳,依次循环下去。

11. 用过smarty没有?用过什么模板引擎?

Smarty是很老的技术了。常用的框架如ThinkPHP,Yii都自带模板引擎。最常用的方法是3个:assign赋值,display显示页面,fetch获取页面内容而非显示。

12. 如何合并数组?

操作符+,在前一个数的基础上插入后一个数组,如果有相同的抛弃,而array_merge 是在前一个参数基础上插入后一个参数,如果有相同用的key 用后一个覆盖。

13. 常用的设计模式有哪些?

单例模式
简单工厂模式
策略模式
观察者模式
注册(树)模式
迭代模式
单例模式,简单工厂模式,策略模式,观察者模式,注册(树)模式,迭代模式。

14. 怎么认识PHP的异常处理?

可以使用检测(try)、抛出(throw)和捕获(catch)异常。即使用try检测有没有抛出(throw)异常,若有异常抛出(throw),使用catch捕获异常。一个 try 至少要有一个与之对应的 catch。定义多个 catch 可以捕获不同的对象。PHP 会按这些 catch 被定义的顺序执行,直到完成最后一个为止。而在这些 catch 内,又可以抛出新的异常。

15. 解释下PHP的垃圾回收机制?

php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器 1;当变量引用撤掉后,计数器-1;当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

“引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露;
php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露。

16. 打开php.ini中的safe_mode,会影响哪些函数?至少说出6个。(新浪)

safe_mode,PHP安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。
注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。

17. 抓取远程图片到本地,你会用什么函数?(51.com笔试题)

file_get_contents或者curl

18. 请写一段PHP代码,确保多个进程同时写入同一个文件成功

核心思路:加锁

<?php
    $fp = fopen("lock.txt","w+");
    if (flock($fp,LOCK_EX)) {
   
        //获得写锁,写数据
        fwrite($fp, "write something");

        // 解除锁定
        flock($fp, LOCK_UN);
    } else {
   
        echo "file is locking...";
    }
    fclose($fp);
?>

19. 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

<?php
    function my_scandir($dir){
   
        $files = array();
        if(is_dir($dir)){
   
            if ($handle = opendir($dir)) {
   
                while (($flie = readdir($handle))!== false) 
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸猫@冒泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值