IT

PHP面试题

  1. header状态码

    200 成功请求
    301 永久重定向
    302 临时重定向
    400 客户端请求的语法错误
    401 请求要求用户的身份认证
    403 服务器理解请求客户端的请求,但是拒绝执行此请求
    404 未找到请求页面
    405 客户端请求中的方法被禁止
    500 服务器内部错误
    501 服务器不支持请求的功能,无法完成请求
    502 网关错误,无效相应
    503 服务器暂时的无法处理客户端的请求
    504 网关超时
  2. 如何将PHP7达到最高性能

    1. 启用opcache
    2. 使用新的编译器GCC4.8以上
    3. Opcache file cache
    4. Opcache Hugepage
  3. PHP7性能提升的原因

    1、存储变量的结构体变小,尽量使结构体里成员共用内存空间,减少引用,这样内存占用降低,变量的操作速度得到提升。
    2、字符串结构体的改变,字符串信息和数据本身原来是分成两个独立内存块存放,php7尽量将它们存入同一块内存,提升了cpu缓存命中率。
    3、数组结构的改变,数组元素和hash映射表在php5中会存入多个内存块,php7尽量将它们分配在同一块内存里,降低了内存占用、提升了cpu缓存命中率。
    4、改进了函数的调用机制,通过对参数传递环节的优化,减少一些指令操作,提高了执行效率。
  4. 排序算法

    1. 冒泡排序
    2. 选择排序
    3. 插入排序
    4. 快速排序
  5. HTTP的请求方法有哪些

    1. GET
    2. POST
    3. OPTIONS
    4. PUT
    5. DELETE
    6. CONNECT
  6. mysql的int(4)和int(10)的区别,int和tinyint的区别,int和unsigned int的区别

    1. int(4)和int(10)的区别为显示宽度不同,存储范围一致
    2. int和tinyint的区别为占用字节不同,int占用4个字节而tinyint占用1个字节,存储范围不同,tinyint最多占用正负128个长度,如果是无符号则为正256,而int存储范围在-2的31次方至+2的31次方-1
    3. int和unsigned int的区别 一个有符合一个无符号,存储范围不同,unsigned int无法存储负数,并且范围为2的31次方*2
  7. 位运算

    1. & 按位与 全1为1 否则为0
    2. | 按位或 全0位0 否则为1
    3. ^ 按位异或 不同为1 相同为0
  8. 十进制转换为二进制计算方式

    计算方式:(十进制/2) 有余数为1 无余数为0 算到整数为0则停止计算 翻转计算结果
    2
    2/2 = 1
    1/2 = 0.5
    
    所以二的二进制为01的翻转10
    示例
    十进制:2  == 二进制:10
    十进制: 5  == 二进制:101
  9. 二进制转十进制的计算方式

    计算方式:(二进制 * 2的0次方)+ (二进制 * 2的1次方)... 从右开始算到结束为止
    10
    (0 * 2的0次方) + (1 * 2的1次方)
    示例
    二进制:10  == 十进制 2
    二进制: 101  ==  十进制 5  
  10. PHP面向对象的三大特性

    1. 封装
    2. 继承
    3. 多态
  11. Nginx的反向代理配置 (nginx的nginx.conf)

    server {
        ...
        location / {
                # 反向代理
                proxy_pass https://baidu.com;
        }
    }
  12. Nginx的负载均衡配置(nginx的nginx.conf)

    http{
        ...
      upstream test {
        server localhost:8080;
        server localhost:8081;
      }
    
      server {
        ...
        location / {
            # 反向代理
            proxy_pass: https://baidu.com;
        }
      }
    }
  13. PHP开启opcache性能为什么会有很大的提升

    1. php7不开启opcache比php5开了opcache速度更快
    2. 在执行相同的代码情况下,opcache把opcode缓存到系统内存中,下次执行相同命令则会直接返回opcache的opcode而不需要再去解析构建php代码,不经过zend解析编译代码,cpu的消耗变小了,性能则更快了
  14. 闭包函数

    $function = function () {
        echo 'helloworld';
    }
    
    $function();
  15. PHP的魔术方法和用处

    1. __get 调用一个未定义的属性时触发
    2. __set 给一个未定义的属性赋值时触发
    3. __construct 构造方法,当对象创建时触发
    4. __destruct 析构方法, PHP将在对象被销毁前触发
    5. __sleep 串行化的时候触发
    6. __wakeup 反串行化的时候触发
    7. __isset 使用isset()调用一个未定义的属性时触发
    8. __unset 使用unset()调用一个未定义的属性时触发
    9. __call 调用一个不存在的方法时触发
    10. __clone 使用clone方法复制一个对象时触发
    11. __toString 在将一个对象转化为字符串时触发,比如echo对象,此方法必须返回一个字符串
  16. PHP是否支持多继承

    否,只能支持单继承
  17. 如何实现PHP的多继承

    interface a {
            public function n();
    }
    
    interface b {
            public function m();
    } 
    
    class c implements a,b{
            public function n() {
                echo 123;
            }
    
            public function m(){
                echo 456;
            }
    }
    
    $c = new c();
    
    $c->n();
    $c->m();
    trait tools {
            public function abc()
            {
                echo 123;
            }
    }
    
    trait t2 {
            public function efg()
            {
                echo 456;
            }
    }
    
    class test {
            use tools,t2;
    }
    
    $test = new test();
    
    $test->abc();
    $test->efg();
  18. cookie禁用后如何通过session实现用户登录功能

    1. 不论客户端是否是否关闭,服务端都会通过cookie设置sessionID
    
    2. 修改php.ini
    session.use_trans_sid=1 表示当客户端浏览器禁止用cookie后页面上的链接会基于url传递sessionID
    session.use_cookies=1 表示是否开始基于cookies的session会话
    session.use_only_cookies=0 表示是否只开启基于cookies的session的会话方式
  19. Linux如何配置SSH的免密登录

    Linux主动方使用ssh-keygen生成RSA公钥
    把公钥传输给被动方的authorized_keys
  20. Mysql的主从复制原理

    首先MYSQL会启动两个线程,一个I/O线程,一个SQL线程。
    I/O线程会把远程数据库变更的binlog下载到中继日志
    SQL线程会从中继日志中解析sql并逐条解析并执行
  21. 一堆猴子都有编号,编号是1,2,3 …m ,这群猴子(n个)按照1到m的顺序围坐一圈,从第1开始数,每数到第m个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王,编程模拟该过程,输入m,n,输出最后大王的编号

     function get_king($n, $m) {
        $i = 1;
        while(true) {
                if(count($n) <= 1) {
                        break;
                }
    
                if ($i % $m == 0) {
                        unset($n[$i - 1]);
                } else {
                        array_push($n, $n[$i - 1]);
    
                        unset($n[$i - 1]);
                }
            $i++;
        }
    
        return $n;
    }
    
    $arr = [1,2,3,4,5,6,7,8,9];
    var_dump(get_king($arr, 2));
  22. Mysql的子查询

    SELECT
        * 
    FROM
        ( SELECT goods_id, cat_id, goods_name FROM goods ORDER BY cat_id ASC, goods_id DESC ) AS tmp 
    GROUP BY
        cat_id;
  23. 自建一个粉丝表,写出获取与用户A的互相关注的粉丝的Sql

    CREATE TABLE `fans` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `uid` int(11) DEFAULT 0,
      `fid` int(11) DEFAULT 0,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    SELECT
        a.* 
    FROM
        fans a
        INNER JOIN fans b ON b.fid = a.uid 
        AND b.uid = a.fid 
    WHERE
        a.uid = 1

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注