《2019年小米春季上海 PHP 实习生招聘面试题》部分答案解析

相关推荐:《2019年PHP面试题大汇总(收藏)

1 丶 Nginx 怎么实现负载均衡

这个还是比较简单

1.轮询

这种是默认的策略,把每个请求按顺序逐一分配到不同的 server,如果 server 挂掉,能自动剔除。

upstream  fengzp.com {   
    server   192.168.99.100:42000; 
    server   192.168.99.100:42001;  
}

2.最少连接

把请求分配到连接数最少的 server

upstream  fengzp.com {   
    least_conn;
    server   192.168.99.100:42000; 
    server   192.168.99.100:42001;  
}

3.权重

使用 weight 来指定 server 访问比率,weight 默认是 1。以下配置会是 server2 访问的比例是 server1 的两倍。

upstream  fengzp.com {   
    server   192.168.99.100:42000 weight=1; 
    server   192.168.99.100:42001 weight=2;  
}

4.ip_hash

每个请求会按照访问 ip 的 hash 值分配,这样同一客户端连续的 Web 请求都会被分发到同一 server 进行处理,可以解决 session 的问题。如果 server 挂掉,能自动剔除。

upstream  fengzp.com {   
    ip_hash;
    server   192.168.99.100:42000; 
    server   192.168.99.100:42001;  
}

ip_hash 可以和 weight 结合使用。

2 丶 Linux 常用的命令

参考文章:https://www.jb51.cc/linux-415502.html

3 丶微信小程序常用的组件

view 丶 text 丶 button 丶 navigator 丶 scroll-view...... 等等

4 丶 Nginx 怎么配置虚拟主机

参考文章:https://www.jb51.cc/php-weizijiaocheng-387454.html

5 丶 TP5 和 Laravel 框架差异

参考文章:https://www.jb51.cc/phpkj/thinkphp/422769.html

6 丶 TP5 和 Laravel 框架中的数据迁移

参考文章:

https://www.jb51.cc/js-tutorial-386843.html

https://www.jb51.cc/phpkj/laravel/414216.html

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 的区别

参考文章:https://www.jb51.cc/mysql-tutorials-410551.html

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 的读写分离操作

参考文章:https://www.jb51.cc/mysql-tutorials-360278.html

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)约束字段必须在被引用的字段中出现过

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Online Tours & Travels Management System pay.php sql injectionLine 16 of pay.php invokes a SQL query built using unvalidated input. This call could allow an attacker to modify the statement’s meaning or to execute arbitrary SQL commands.SQL
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在windwos系统搭建typecho博客+cpolar内网穿透工具将博客发布到公共网络环境,实现远程也可以访问和操作。_windows搭建typecho
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代语法,让php更加的优雅的与html生活在一起 -->请放心, 最终生成的,或者说用户最终看到的,仍然是一个html文档, php代码中的内容不会被泄漏的。-- 将php与html代码混编的时候,大括号很容易造成配对错误,最好杜绝它 -->php标签内部代码由php.exe解释, php标签之外的代码原样输出,仍由web服务器解析。-- 所以php的流程控制语句, 都提供了替代语法,用冒号代替大括号 -->php echo '百变鹏仔'?_利用php将静态页面修改为动态页面
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔记博文内容涉及 Linux network namespace 认知以及彼此通信Demo,实际中的应用理解不足小伙伴帮忙指正不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树。_linux network namespace 多端通信 模式认知
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了一个逻辑二层(L2)网络,该网络封装在跨 Kubernetes 集群节点的现有三层(L3)网络拓扑上。使用此模型,可以为容器提供一个隔离的 L2 网络,而无需分发路由。封装网络带来了少量的处理开销以及由于覆盖封装生成 IP header 造成的 IP 包大小增加。封装信息由 Kubernetes worker 之间的 UDP 端口分发,交换如何访问 MAC 地址的网络控制平面信息。此类网络模型中常用的封装是 VXLAN、Internet 协议安全性 (IPSec) 和 IP-in-IP。_k8s网络组件对比
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安全时,我们正在讨论的是保护我们的在线空间,这是我们所有人的共享责任。网络安全涉及保护我们的信息,防止被未经授权的人访问、披露、破坏或修改。
文章浏览阅读1.3w次,点赞3次,收藏7次。尽管您可以通过 ping 命令解析出网站的 IP 地址,但是可能在浏览器中访问时仍然遇到问题,这可能是因为浏览器使用的 DNS 解析结果不同于 ping 命令使用的解析结果。可能是因为您的网络或设备上设置了防火墙,阻止了对特定网站的访问。有些国家或组织可能会对特定的域名进行屏蔽,从而阻止访问相关网站。如果您的网络使用代理服务器进行访问控制,可能会由于代理服务器的配置问题导致无法访问某些网站。即使您的网络和设备一切正常,目标网站本身可能也存在问题,例如服务器故障、维护或过载,导致无法访问。_能ping通打不开网页
文章浏览阅读839次,点赞22次,收藏19次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读2.1k次,点赞31次,收藏22次。基于微信小程序奶茶点餐外卖系统设计与实现(PHP后台+Mysql)可行性分析毕设源代码毕业设计,数据安全和系统稳定性以及团队能力和资源配备方面都具备较好的条件。因此,该项目的可行性较高。:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;微信小程序作为一种快捷、方便的移动应用形式,成为很多用户点餐外卖的首选。项目的界面和功能都可以定制,包安装运行!项目配有对应开发文档、开题报告、任务书、PPT、论文模版等。
文章浏览阅读1.8k次,点赞52次,收藏38次。本文主要通过对系统的前台系统和后台管理系统进行了功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。Lucky+Baby母婴用品网站使用 Dreamweaver、HBuilder代码编辑器、Apache服务器等开发工具,完成了系统的主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、商品搜索功能、生成订单和查看我的订单功能、在线付款功能功能的实现过程。
文章浏览阅读1.5k次,点赞45次,收藏40次。本设计主要实现集人性化、高效率、便捷等优点于一身的人事信息管理系统,完成首页、系统用户、通知公告、部门信息、员工薪资、考勤签到、员工请假、招聘信息、应聘信息等功能模块。
文章浏览阅读1k次。该错误通常出现在数据库读取结果集数据时,比如当我们写好SQL语句从数据库读取数据时,本身应该返回结果集,再给结果集中读取数据。解决思路:这种错误一般是因为echo后面输出了一个数组导致的,或者是数组作为字符串进行拼接运算时导致的。该错误直译为:警告:mysqli_fetch_assoc函数期望参数1是mysqli的结果集,但是给了一个布尔值。这种错误是PHP解析器在解析时遇到了语法错误,直译为:解析错误:语法错误,意料之外的...该错误直译为:提示:未定义的索引:username。_array to string conversion in
文章浏览阅读2.7w次。解决http请求报错context deadline exceeded (Client.Timeout exceeded while awaiting headers)_context deadline exceeded (client.timeout exceeded while awaiting headers)
文章浏览阅读1.3k次,点赞26次,收藏24次。复杂网络是一种由大量相互连接的元素(节点或顶点)组成的网络结构,这些连接通常是非常复杂和动态的。这些网络可以在各种领域中发现,包括社交网络、生物学系统、信息技术和交通系统等。_代理建模
文章浏览阅读2.6k次,点赞76次,收藏71次。epoll详解,事件模型,ET/LT模式,并通过三个示例进行代码实现。
文章浏览阅读3.3k次。罗拉ROLA-IP是一家来自纽约的代理IP提供商,由李嘉诚先生投资建设,韩国人工智能、自动驾驶、虚拟现实方面的领军企业World IT Show投资入股,由美国纽约大学IT管理教授团队研究开发,进入中国市场6年多,全世界设有多个分子公司。接下来,我们要检查代理和防火墙的设置,因为在绝大多数情况下,它们是导致这个错误的原因,尤其是当用户使用免费代理时。对网站的访问受阻实际上是一个非常常见的错误,它既可能是由于物理原因(硬件问题)造成的,也可能是由于软件错误引起的。检查代理设置,并确保其正确配置。_无法访问此网站,检查代理服务器和防火墙
文章浏览阅读1.1k次,点赞14次,收藏20次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。_php洗车服务预约管理系统php源码
文章浏览阅读1.1k次。桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
文章浏览阅读936次,点赞22次,收藏17次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读822次,点赞15次,收藏14次。在整个设计过程中,要确定可能的具体解决方案,以实现每一个小的最终目标,对于每一个小目标,我们首先必须了解一些相关的需求分析信息。除了以上作品下面是2023-2024年最新100套计算机专业原创的毕业设计源码+数据库,是近期作品,如果你的题目刚好在下面可以文末领取java源码参考。springboot基于springboot的在线考试系统。springboot基于springboot的商城购物系统。springboot基于微信小程序的智慧校园设计与实现。springboot基于用户的协同过滤算法的话题推荐。