一些面试题

PHP面试题

PHP基础

1. 请写出以下结果:

echo json_encode([‘a‘ => 1] + [‘b‘ => 2, ‘a‘ => 3, ‘b‘]);
//输出: 

$param = 1;
$funcA = function ($val) use (&$param) {
    $param++;
    return $param + $val;
};
$funcB = function () use ($param) {
    $param++;
    return $param;
};
var_dump($funcA(2)); //结果: 
var_dump($funcB()); //结果: 
var_dump($param); //结果: 

2. 请说明以下常见错误:

  • Notice: Undefined variable: test
  • Fatal error: Uncaught Error: Class ‘Foo\Test‘ not found
  • Fatal error: Uncaught Error: Call to a member function abc() on null
  • Fatal error: Uncaught Error: Call to undefined method Test::abc()
  • Fatal error: Uncaught ArgumentCountError: Too few arguments to function Test::abc()
  • Parse error: syntax error, unexpected ‘;‘, expecting ‘]‘

3. 写出以下 PHP 魔术方法含义

  • __callStatic()
  • __toString()
  • __invoke()
  • __sleep()

PHP应用

1. 请说明以下使用哪种设计模式

  • 设计模式1:单例
class Test1 {
    protected static $instance;
    public static function getInstance() {
        if (! self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
  • 设计模式2:工厂
class Test2 {
    public function factory($config) {
        return new self($config);
    }
}
  • 设计模式3:观察者
class Reader implements SplObserver {
    public function update(SplSubject $subject) {
        echo $subject->title;
    }
}
class News implements SplSubject {
    private $observers = [];
    public function attach(SplObserver $observer) {
        $this->observers[] = $observer;
    }
    public function detach(SplObserver $observer) {}
    public function notify() {
        foreach ($this->observers as $obj) {
            $obj->update($this);
        }
    }
}

2. 你所知道的 PSR 规范有哪些,并说明其作用:

3. 说明 composer global requirecomposer require 区别

4. 在 composer.json 中依赖包有说明版本,请说明以下语义化版本的意思:

  • "^1.2.3"
  • "~1.2.3"
    波浪符号(~):他会更新到当前minor version(也就是中间的那位数字)中最新的版本。放到我们的例子中就是:body-parser:~1.15.2,这个库会去匹配更新到1.15.x的最新版本,如果出了一个新的版本为1.16.0,则不会自动升级。波浪符号是曾经npm安装时候的默认符号,现在已经变为了插入符号。
    插入符号(^):这个符号就显得非常的灵活了,他将会把当前库的版本更新到当前major version(也就是第一位数字)中最新的版本。放到我们的例子中就是:bluebird:^3.3.4,这个库会去匹配3.x.x中最新的版本,但是他不会自动更新到4.0.0。
    网络协议/服务

1. HTTP协议中几个状态码的含义

  • 204
  • 301
  • 401
  • 403
  • 404
  • 405
  • 500

2. 请看以下HTTP数据流, 写出PHP代码如何接收以下HTTP POST的内容数据和Query参数, 并按响应结果写出相应的执行代码:

POST /index.php?ccc=123 HTTP/1.1
Host: localhost
Content-Type: application/json
Accept: application/json
Content-Length: 28

{"aaa":"test","bbb":[1,2,3]}

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 40

{"aaa":"test","bbb":[1,2,3],"ccc":"123"}

3. 请写一个 Restful 设计风格的增删改查(CURD)接口写法

如,获取所有用户列表: GET /users

请写出相应的增删改:

4. 请说明下优化 Mysql sql 查询的技巧和做法

5. Mysql 的 innodb 引擎与 MyISAM 引擎哪些区别

6. 请写出Linux常用操作命令

  • 显示某文件末尾几行
  • 文件内容关键字搜索
  • 查看当前进程
  • 下载某URL文件
  • 网络抓包

7. 请写出以下服务的用途

  • CDN
  • LVS
  • HaProxy

前端

  1. a.jsb.js 请用 CMD 或 AMD 模块化规范写出 b.js 如何引用 a.js.

  2. 你所使用的构建工具是(glup, grunt, webpack) ?

  3. 请写出 es6 的新语法特性(至少3个)

  4. a.com/index.html 访问 b.com/api.php 的数据, 遇到跨域问题, 请写出在 HTML5中的跨域解决方案

综合

如何看待前后端分离, 如果让你设计一前后端分离的后台管理系统, 你会运用哪些前后端的应用库和设计结构.

一些面试题

上一篇:如何将Windows8系统的磁盘格式(GPT格式)转换成Windows 7系统的磁盘格式(MBR格式)


下一篇:屏幕保护程序的等待时间被锁了,如何修改屏保时间(regedit) 无法更改或保存屏幕保护程序设置