作为程序员一定要保持良好的睡眠,才能好编程

php面试题全面解析(4)

发布时间:2020-05-03

2020-5-2 20:46:19


一、设计模式





二、基本算法 数据结构


冒泡排序、快速排序、


二分查找




三、swoole




四、框架 Laravel



五、其他


抽奖活动

微服务

rpc

缓存

消息队列

正则表达式



swoole底层 


php语言底层








六、请简述一下Myslq的事务特性以及隔离级别

事务:ACID  一致性  隔离性  持久性 原子性

隔离级别:未提交度、提交读、重复读、串行化

                  mysql中默认级别是重复读

https://www.cnblogs.com/huanongying/p/7021555.html

image.png



Mysql有几种事务级别?Mysql默认事务级别是什么?

https://www.cnblogs.com/shoshana-kong/p/10516404.html



Mysql锁有几种?分别有什么区别

共享锁、排它锁、间隙锁、行锁、悲观锁、意向共享锁、意向排它锁 分别都是什么?

http://www.xiaosongit.com/index/detail/id/410.html


间隙锁:

https://www.jianshu.com/p/42e60848b3a6

https://blog.csdn.net/dhfzhishi/article/details/80277990




七、解释一下  Tcp 和 Udp 的特点




八、请描述下你对php的session机制的认识


当客户端请求服务器时,会生成一个sessionId,以后的每一次请求都会携带这个sessionId,session信息以文件的形式存储在服务器。(如果是集群服务器,请使用 IP hash 方式或者 其他缓存存储session)。

每一个sessionId都会对应一个文件。sessionId存储在客户端的cookie中。如果禁用了cookie,那么可以在url携带sessionId。


九、请写出Redis的基本数据结构,请列举你实际使用的场景。


(1)string 字符串  可用于常规缓存、计数  例如:用户地址、用户姓名的记录   粉丝数、关注数

(2)list 队列  可实现存储列表信息、如短信发送列表、类似消息队列 先进先出、双向队列

(3)hash 哈希 类似一个实例类,例如 用户类 有姓名、年龄、地址、浏览量

(4)set 集合 可用户存储用户标签类似功能,有交集、差集、并集,可用于分析相同标签的数据分类

(5)sortSet 有序集合  可按照score进行倒序、正序排序。排行榜



十、请简述下Tcp/Ip Tcp位于七层模型的哪一层?


七层模型:物理层、链路层、网络层、传输层、会话层、表示层、应用层

Tcp位于传输层,是面向连接的、可靠的、基于字节流的传输通讯协议。


Tcp协议的特点:


(1)Tcp的全称是Transmission control protocol

(2)传输层协议

(3)面向连接,即在客户端和服务器之间发送数据直接,必须先建立连接

(4)连接需要三次握手和四次挥手

(5)可靠的



Udp协议:

(1)Udp全称 User Datagram Protocol用户数据报协议

(2)传输层协议

(3)无连接的数据报协议

(4)不可靠的传递服务




TCP、UDP两者的区别

1、TCP是面向连接的(在客户端和服务器之间传输数据之前要先建立连接),UDP是无连接的(发送数据之前不需要先建立连接)

2、TCP提供可靠的服务(通过TCP传输的数据。无差错,不丢失,不重复,且按序到达);UDP提供面向事务的简单的不可靠的传输。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性比较高的通讯或广播通信。随着网速的提高,UDP使用越来越多。

4、没一条TCP连接只能是点到点的,UDP支持一对一,一对多和多对多的交互通信。

5、TCP对系统资源要去比较多,UDP对系统资源要求比较少

6、UDP程序结构更加简单

7、TCP是流模式,UDP是数据报模式




十一、请简述Http协议和webSocket协议


 Http协议是超文本传输协议,属于应用层、无状态

webSocket 是http协议的升级版本,支持双向通讯,持久化通讯


十二、请实现你最拿手的排序算法


$data = [1, 3, 8, 9, 2];
//从小打到排序
function dataSort($item)
{
    if (empty($item) || !is_array($item)) {
        return $item;
    }
    $len = count($item);
    for ($i = 1; $i < $len; $i++) {
        for ($j = 0; $j < $len - $i; $j++) {
            if ($item[$j] > $item[$j + 1]) {
                $temp = $item[$j + 1];
                $item[$j + 1] = $item[$j];
                $item[$j] = $temp;
            }
        }
    }
    return $item;
}
$res = dataSort($data);
var_export($res);



十三、php如何上传大文件



十四、请根据条件编写一个抽奖程序

           1、奖项设置 一等奖 手机一部  二等奖、电饭煲   三等奖、行李箱   四等奖、牙刷一枚

           2、中奖比例  一等奖  5%   二等奖  8%  三等奖  10%   四等奖 15%  其余的是 谢谢合作

        

          防止用户重复抽奖







Redis方面

(1)Redis的应用场景

(2)Redis支持的数据类型(必考)

(3)zset跳表的数据结构(必考)

(4)Redis的数据过期策略(必考)

(5)Redis的LRU过期策略的具体实现

(6)如何解决Redis缓存雪崩,缓存穿透问题

(7)Redis的持久化机制(必考)

(8)Redis的管道pipeline


Mysql方面


(1)事务的基本要素

(2)事务隔离级别

(3)如何解决事务的并发问题(脏读,幻读)?

(4)MVCC多版本并发控制?

(5)binlog,redolog,undolog都是什么,起什么作用?

(6)InnoDB的行锁/表锁?

(7)myisam和innodb的区别,什么时候选择myisam?

(8)为什么选择B+树作为索引结构?

(9)索引B+树的叶子节点都可以存哪些东西?

(10)查询在什么时候不走(预期中的)索引?

(11)sql如何优化?

(12)explain是如何解析sql的?

(13)order by原理