2019 面试题
1、GET与POST 请求的区别:
URL 方面:
GET url 的参数是显示在url上
POST url 的参数不是在url 请求body上
缓存方面:
GET 请求被浏览器的自动缓存
POST 不会自动缓存
退回方面:
GET 退回可以重新页面
POST 退回是重新提交
安全方面:
GET 参数暴露在url
POST 参数隐藏
2、MySql 的引擎
a) 支持事务方面:Innodb 支持事务,Myisam 不支持事务
b) Innodb 支持行锁,Myisam 支持表锁
c) 储存文件类型:innodb数据文件不支持跨平台 Myisam数据支持跨平台
d) 全文类型索引:innodb 不支持 ,myisam支持
e) 查询效率 :innodb 慢,mysian 快
3、Redis 数据类型:
a) String 字符串
i. 适应场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。
b) Hash 字典
i. 适应场景:缓存
c) List 列表
i. 最新消息排行等功能(比如朋友圈的时间线)
ii. 消息队列
d) Set 集合
i. 共同好友
ii. 利用唯一性,统计访问网站的所有独立ip
iii. 好友推荐时,根据tag求交集,大于某个阈值就可以推荐
e) Sorte Set 有序集合
i. 排行榜
ii. 带权重的消息队列
4、RabbitMQ 特点:
a) 可靠性:RabbitMQ使用一些机制来保证可靠性,持久化、传输确定及发布确认
b) 灵活的路由: 在消息进入列队之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 已经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器
c) 扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态扩展集群的节点
d) 高可用性:列队可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队仍然可用
e) 多种协议:rabbitMQ除了原生支持AMQP协议,还支持STOMP,MQTT等多种消息中间件协议。
f) 多语言客户端:RabbitMQ几乎支持所有常用语言,比如Jav a、Python、Ruby、PHP、C#、JavaScript等。
g) 管理界面:RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。
h) 插件机制:RabbitMQ提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。
5、Laravel 优缺点:
优点:优雅,框架结构组织清晰(抽象了中间件,任务,服务等模块),提供的artisan开发工具开发效率高,社区活跃完善,并且提供了简化的轻量级框架lumen
缺点:基于组件式的框架,所以比较臃肿
6、定义一个函数,查找一个N 维数组的中的key为 ‘test’ 的值, 输出格式为数组
function getValueArr($arr , $searhKey = 'test'){
$rs = $result = [];
if ( is_array($arr) ) {
foreach ( $arr as $key => $val ) {
if ( count($val) > 1 || is_array($arr[ $key ]) ) {
$result = getValueArr($arr[ $key ]);
$rs = array_merge($rs , $result);
} elseif ( $key == $searhKey ) {
$rs[] = $arr[ $key ];
}
}
}
return $rs;
}
7、MySql的优化
a) Sql 语句优化
i. explain出来的各种item的意义;
ii. profile的意义以及使用场景
iii. 慢查询
b) 索引优化
8、MySql的“悲观锁”与“乐观锁”
悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。(一锁二查三更新)
乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。
9、innodb引擎的4大特性:
a) 插入缓冲(insert buffer)
b) 二次写(double write)
c) 自适应哈希索引(ahi)
d) 预读(read ahead)
10、数据库事务的四大特性:
a) 原子性
b) 一致性
c) 隔离性
d) 持久性