(掘金征文) 2018 春招 php 面试总结

本文来源:https://juejin.im/post/5adbf3de518825670f7b6ed0#heading-2 ,并在此基础上,加入了我个人的一些 idea 。

文章的目录架构大致如下:

PHP

基础

1、session 和 cookie 的区别

  • Session 是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在服务器内存、缓存、数据库中

  • Cookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session 的一种方式。

为什么需要 session ?因为 http 是无状态的,所以需要 session 来记录用户的状态

参考:COOKIE和SESSION有什么区别? - 知乎

2、PHP7 用了吗,了解哪些新特性

  • PHP7 的性能更高
  • ?? 操作符
  • <=> 组合比较运算符
  • define 定义常量数组
  • : 声明返回值类型
  • 匿名类,支持用 new class 来实例化一个匿名类
  • 闭包多了一个 call 方法

参考:php7 新特性

3、魔术常量

  • __LINE__:文件中的当前行号
  • __FILE__:文件的完整路径和文件名
  • __DIR__:文件所在的目录
  • __FUNCTION__: 函数名称
  • __CLASS__:类的名称
  • __TRAIT__:Trait 的名称
  • __METHOD__:类的方法名
  • __NAMESPACE__:当前命名空间的名称

参考:PHP 手册 - 魔术常量

4、魔术方法

__construct()
__destruct()
__call()
__callStatic()
__get()
__set()
__isset()
__unset()
__sleep()
__wakeup()
__toString()
__invoke()   // 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
__set_state()
__clone()
__debugInfo()

参考:PHP 手册 - 魔术方法

数据结构和算法

1、栈数据结构

<?php

class Stack {

    private $top = -1;
    private $stack = array(); // 利用数组存储数据

    // 入栈
    public function push($ele){
        $this->stack[++$this->top] = $ele; // 此处必须是++i,先计算再使用
    }

    // 出栈,返回出栈元素
    public function pop(){
        if ($this->top == -1){
            echo 'stack is empty...';
            return false;
        }
        $ele = $this->stack[$this->top];
        unset($this->stack[$this->top--]); // 此处必须是i--,先使用再计算(注意出栈和入栈的区别)
        return $ele;
    }

    // 遍历栈
    public function show(){
        if ($this->top == -1){
            echo 'stack is empty...';
            return false;
        }
        for($i=$this->top; $i>-1; $i--){
            echo $this->stack[$i].'<br/>';
        }
    }

}

参考:PHP实现栈数据结构

2、冒泡排序