《2019年小米春季上海 PHP 实习生招聘面试题》部分答案解析
1 丶 Nginx 怎么实现负载均衡
这个还是比较简单
1.轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的 server,如果 server 挂掉,能自动剔除。
2.最少连接
把请求分配到连接数最少的 server
3.权重
使用 weight 来指定 server 访问比率,weight 默认是 1。以下配置会是 server2 访问的比例是 server1 的两倍。
4.ip_hash
每个请求会按照访问 ip 的 hash 值分配,这样同一客户端连续的 Web 请求都会被分发到同一 server 进行处理,可以解决 session 的问题。如果 server 挂掉,能自动剔除。
ip_hash 可以和 weight 结合使用。
2 丶 Linux 常用的命令
这个就不多说了
3 丶微信小程序常用的组件
view 丶 text 丶 button 丶 navigator 丶 scroll-view...... 等等
4 丶 Nginx 怎么配置虚拟主机
恩 2333333
5 丶 TP5 和 Laravel 框架差异
恩 2333333
6 丶 TP5 和 Laravel 框架中的数据迁移
这个本社区就有文档的
7 丶 RBAC 模型的讲解
什么是 RBAC
RBAC (基于角色的访问控制):英文名称 Rose base Access Controller 。本博客介绍这种模型的权限系统设计。取消了用户和权限的直接关联,改为通过用户关联角色、角色关联权限的方法来间接地赋予用户权限。从而实现了解耦。RBAC 在发展过程中分为以下几个版本。RBAC0、RBAC1、RBAC2、RBAC3。
8 丶订单模块的流程
9 丶订单支付成功后的操作
10 丶设置邮箱激活连接过期时间
在把激活码写入数据库的同时写入时间戳 + 过期时间
11 丶 Redis 与 Mongodb 的区别
1.性能
都比较高,性能对我们来说应该都不是瓶颈。
总体来讲,TPS 方面 redis 和 memcache 差不多。
2.操作的便利性
redis 在 2.0 版本后增加了自己的 VM 特性,突破物理内存的限制;可以对 key value 设置过期时间(类似 memcache)。
mongoDB 适合大数据量的存储,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务不要和别的服务在一起。
4、可用性(单点问题)
对于单点问题:
redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制,因性能和效率问题,所以单点问题比较复杂;不支持自动 sharding, 需要依赖程序设定一致 hash 机制。
一种替代方案是,不用 redis 本身的复制机制,采用自己做主动复制(多份存储),或者改成增量复制的方式(需要自己实现),一致性问题和性能的权衡。
mongoDB 支持 master-slave,replicaset (内部采用 paxos 选举算法,自动故障恢复),auto sharding 机制,对客户端屏蔽了故障转移和切分机制。
5.可靠性(持久化)
对于数据持久化和数据恢复,redis 支持(快照、AOF):依赖快照进行持久化,aof 增强了可靠性的同时,对性能有所影响,MongoDB 从 1.8 版本开始采用 binlog 方式支持持久化的可靠性。
6.数据一致性(事务支持)
redis 事务支持比较弱,只能保证事务中的每个操作连续执行,mongoDB 不支持事务。
7.应用场景
redis:数据量较小的更性能操作和运算上
MongoDB: 主要解决海量数据的访问效率问题
12 丶 redis 和 memcached 的区别
13 丶 redis 中的队列
关于 redis 队列的实现方式有两种:
1.生产者消费者模式。
普通版本:
比如一个队列里面,生产者 A push 了一个数据进去,消费者 B pop 了这个数据,那个这个队列依旧为空。所以是一对一的。
至于是先进先出还是先进后出等,可以依照函数 lpush (从队列左边,也就是队首 push 一个数据) rpush (从队列右边也就是队尾 push 一个数据) lpop (同理) rpop 等来控制。
阻塞版本:
但是上面的命令都是立即返回的,无论数据有无,关于取数据 lpop 有个增强版本,blpop (block left pop) 阻塞版本,
使用方法:blpop key1 key2 ... keyn 10
同时预获取多个 key 的值,并设置超时时间为 10s,如果所有 key,有些 key 有 value 就立即返回,如果所有 key 都没有 value 就阻塞 10 秒返回
2.发布者订阅者模式。
概念:
三个用户 A,B,C 同时都订阅了一个 channel 名字叫 msg,然后发布者往 msg 的 channel 里面发布了一个数据,那么 A,B,C 三个用户都会收到该数据。
注意点:
很明显,三个用户 ABC 需要阻塞。怎么收到订阅的数据呢,肯定是依靠注册在 redis 里面的回调函数。
发布的数据不会在 redis 里面复现,意思就是发布了以后,A,B,C 由于种种原因没收到就没收到。
14 丶 redis 中的数据类型
Redis 支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及 zset (sorted set:有序集合)。
15 丶 TP 框架中的事件
16 丶 TP 框架的依赖注入
和 Laravel 没什么区别
17 丶 MySQL 的读写分离操作
什么主从复制,什么 bin log,胡说了一大堆
18 丶数据库 varchar 和 char 的区别
varchar 会回收未使用的空间
19 丶 MyIsam 与 InnoDB 的区别
1、MyISAM:默认表类型,它是基于传统的 ISAM 类型,ISAM 是 Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的 select,insert MyISAM 比较适合。
2、InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的 update 和 insert,建议使用 InnoDB,特别是针对多个并发和 QPS 较高的情况。
一、表锁差异
MyISAM:
myisam 只支持表级锁,用户在操作 myisam 表时,select,update,delete,insert 语句都会给表自动加锁,如果加锁以后的表满足 insert 并发的情况下,可以在表的尾部插入新的数据。也可以通过 lock table 命令来锁表,这样操作主要是可以模仿事务,但是消耗非常大,一般只在实验演示中使用。
InnoDB :
Innodb 支持事务和行级锁,是 innodb 的最大特色。
事务的 ACID 属性:atomicity,consistent,isolation,durable。
并发事务带来的几个问题:更新丢失,脏读,不可重复读,幻读。
二、数据库文件差异
MyISAM :
myisam 属于堆表
myisam 在磁盘存储上有三个文件,每个文件名以表名开头,扩展名指出文件类型。
.frm 用于存储表的定义
.MYD 用于存放数据
.MYI 用于存放表索引
myisam 表还支持三种不同的存储格式:
静态表 (默认,但是注意数据末尾不能有空格,会被去掉) 丶动态表丶压缩表。
InnoDB :
innodb 属于索引组织表
innodb 有两种存储方式,共享表空间存储和多表空间存储
两种存储方式的表结构和 myisam 一样,以表名开头,扩展名是.frm。
如果使用共享表空间,那么所有表的数据文件和索引文件都保存在一个表空间里,一个表空间可以有多个文件,通过 innodb_data_file_path 和 innodb_data_home_dir 参数设置共享表空间的位置和名字,一般共享表空间的名字叫 ibdata1-n。
如果使用多表空间,那么每个表都有一个表空间文件用于存储每个表的数据和索引,文件名以表名开头,以.ibd 为扩展名。
三、索引差异
1.关于自动增长
myisam 引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
innodb 引擎的自动增长咧必须是索引,如果是组合索引也必须是组合索引的第一列。
2.关于主键
myisam 允许没有任何索引和主键的表存在,
myisam 的索引都是保存行的地址。
innodb 引擎如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键 (用户不可见)
innodb 的数据是主索引的一部分,附加索引保存的是主索引的值。
3.关于 count () 函数
myisam 保存有表的总行数,如果 select count(*) from table; 会直接取出出该值
innodb 没有保存表的总行数,如果使用 select count(*) from table; 就会遍历整个表,消耗相当大,但是在加了 where 条件后,myisam 和 innodb 处理的方式都一样。
4.全文索引
myisam 支持 FULLTEXT 类型的全文索引
innodb 不支持 FULLTEXT 类型的全文索引(5.6 开始已经支持了),但是 innodb 可以使用 sphinx 插件支持全文索引,并且效果更好。(sphinx 是一个开源软件,提供多种语言的 API 接口,可以优化 mysql 的各种查询)。
5.delete from table
使用这条命令时,innodb 不会从新建立表,而是一条一条的删除数据,在 innodb 上如果要清空保存有大量数据的表,最 好不要使用这个命令。(推荐使用 truncate table,不过需要用户有 drop 此表的权限)。
6.索引保存位置
myisam 的索引以表名 +.MYI 文件分别保存。
innodb 的索引和数据一起保存在表空间里。
20 丶 MySQL 中的索引有几种
一、普通索引
最基本的索引,只是加快了查询速度。
二、唯一索引
与普通索引类似,不同的是:索引的列值必须唯一,但允许有空值,也就是 null,如果是组合索引,则列值的组合必须是唯一的。
三、主键索引
即我们常用的主键 id, 它是一种特殊的唯一索引,不允许有空值,一般在建表时同时创建主键索引。
特点:
1)一张表只有一个主键索引
2)主键要求自增
四、组合索引
即多个字段建立的索引
五、全文索引
fulltext
myisam 引擎支持
六、外键
建立外键需要注意的事项:
1)表引擎必须一样
2)字段类型必须一样
3)长度必须一样
4)存储范围必须一样
5)约束字段必须在被引用的字段中出现过
以上是文章全部内容,有需要学习交流的友人请加入swoole交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的。感谢阅读!
《2019年小米春季上海 PHP 实习生招聘面试题》部分答案解析的更多相关文章
- 2017携程Web前端实习生招聘笔试题总结
考察encodeURI encodeURI(), decodeURI()它们都是Global对象的方法. encodeURI()通过将某些字符的每个实例替换代表字符的UTF-8编码的一个或多个转义字符 ...
- 2017腾讯Web前端实习生招聘笔试题总结
指针与引用的区别 考察margin塌陷 考察C++继承和~符号 考察TCP通讯过程 位码 三次握手 为什么不是两次握手 为什么不是四次握手 四次挥手 为什么要四次握手 TCP的状态 考察严格模式 进程 ...
- PHP面试题2019年小米工程师面试题及答案解析
一.单选题(共29题,每题5分) 1.PHP面向对象方法重写描述错误的是? A.子类必须继承父类 B.子类可以重写父类已有方法 C.重写之后子类会调用父类方法 D.子类也可以具有与父类同名的属性,进行 ...
- PHP面试题2019年百度工程师面试题及答案解析
一.单选题(共10题,每题5分) 1.以下代码输出的结果是? A.[0,1,2,3] B.[1,3,5,7,5] C.[1,2,3,4,5] D.[0,1,2,3,5] 参考答案:D 答案解析 ...
- PHP面试题2019年京东工程师面试题及答案解析
一.单选题(共28题,每题5分) 1.Apache与Nginx大访问下性能描述正确的是? A.Apache所采用的epoll网络I/O模型非常高效 B.Nginx使用了最新的kqueue和select ...
- PHP面试题2019年新浪工程师面试题及答案解析
一.单选题(共28题,每题5分) 1.以下语句输出的结果是什么? A.3$a\$a3336 B.33\$a3336 C.$a$a\$a3336 D.3$a\$a333$a$a 参考答案:A 答案解析: ...
- PHP面试题2019年搜狐面试题及答案解析
一.单选题(共27题,每题5分) 1.阅读下面PHP代码,并选择输出结果( ) A.0 B.1 C.2 D.3 参考答案:D 答案解析:static属性常驻内存 2.PHP单例模式操作描述错误的是? ...
- PHP面试题2019年奇虎360面试题及答案解析
一.单选题(共29题,每题5分) 1.以下代码 a.php 输出的结果是? a.php 的代码如下: b.php的代码如下: A.foo in a B.什么也不输出 C.报错 D.foo in b 参 ...
- PHP面试题2019年滴滴出行工程师面试题及答案解析
一.单选题(共30题,每题5分) 1.下列关于PHP垃圾回收的说法,错误的是? A.开启/关闭垃圾回收机制可以通过修改php配置实现 B.可以在程序中使用gc_enable() 和 gc_disabl ...
随机推荐
- 冒泡排序 C&&C++
冒泡排序(因为过程像冒泡,所以叫做冒泡排序) 流程: (1)对数组中各个数字,一次比较相邻两个 (2)如果前面大于后面,就交换这两个数据 (3)再用同样的方法继续排,直到外层循环排完 或者 (1) ...
- Java并发编程系列-(6) Java线程池
6. 线程池 6.1 基本概念 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数 ...
- C语言每日一练——第3题
一.题目要求 程序功能:计算100以内满足以下条件的所有整数i的个数cnt以及这些i之和sum.条件:i, i+4 ,i+10都是素数,同时i+10小于100.最后电影函数writeDAT()函数把结 ...
- Maven pom.xml 全配置(一)常用配置
Maven pom.xml 全配置(一)常用配置 这里贴出一个Maven中出现频率较高的配置参数注释,方便理解项目中Maven的配置具体的作用.如果在此博文中没有找到你想看到的参数,可以移步Maven ...
- ubifs开销测试
问题 在板子上观察到56M的ubi卷,挂载上ubifs之后,df -h显示可用空间约为50M. 如此计算开销超过了10%,那么这个开销随容量如何变化呢,是固定为10%吗还是有其他规律? 理论计算 简单 ...
- Windows 10 - 查看系统剪切板历史
在之前的Windows版本(1809之前),Windows的剪切板历史一直都是对用户不可见的. 也就是它只保留最后一次的剪切记录,但是这个记录是什么,不知道!只能粘贴出来才知道. 但是现在变了,Win ...
- git提交时忽略指定文件
git提交时忽略指定文件 我们在项目开发过程中经常用到git来管理自己的项目,使用git版本控制进行多人协作开发具有许多优势,这里就不一一阐述了,有兴趣的同学可以自己去查找资料进行系统的学习.而本篇文 ...
- PCA主成分分析(最大投影方差)
PCA简介: 从n维数据中提取最能代表这组数据的m个向量,也就是对数据进行降维(n->m),提取特征. 目标: 找到一个向量\(\mu\),使n个点在其上的投影的方差最大(投影后的数据越不集中, ...
- webpack 打包less文件配置
1 npm install less less-loader -D 2匹配规则
- Java方法之重载
Java方法之重载 本篇探究Java中的方法重载.那么,什么是重载呢?先上一串代码: package com.my.pac06; /** * @author Summerday * @date 201 ...