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 require
与 composer 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
前端
-
有
a.js
和b.js
请用 CMD 或 AMD 模块化规范写出b.js
如何引用a.js
. -
你所使用的构建工具是(glup, grunt, webpack) ?
-
请写出 es6 的新语法特性(至少3个)
-
a.com/index.html
访问b.com/api.php
的数据, 遇到跨域问题, 请写出在 HTML5中的跨域解决方案
综合
如何看待前后端分离, 如果让你设计一前后端分离的后台管理系统, 你会运用哪些前后端的应用库和设计结构.