记一次面试,分享我整理的答案。。。
昨天投了一家北京的公司,由于人不在北京,电话问了几个问题,答得一般,完了我就记下来问题,跟大家分享一下。
简述 apache 与 nginx#
-
Nginx#
- 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源
- 抗并发,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 PHP 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
- nginx 处理静态文件好,静态处理性能比 apache 高三倍以上。
- nginx 的设计高度模块化,编写模块相对简单。
- nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会崩溃。
- nginx 作为负载均衡服务器,支持 7 层负载均衡。
- nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器。
- 启动特别容易,并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级。
- 社区活跃,各种高性能模块出品迅速。
-
Apache#
- apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache。
- apache 发展到现在,模块超多,基本想到的都可以找到。
- apache 更为成熟,少 bug ,nginx 的 bug 相对较多。
- apache 超稳定。
- apache 对 PHP 支持比较简单,nginx 需要配合其他后端用。
- apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。
- apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区。
http 状态码#
https://baike.baidu.com/item/HTTP%E7%8A%B6...
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
504 Gateway Timeout 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI 标识出的服务器,例如 HTTP、FTP、LDAP)或者辅助服务器(例如 DNS)收到响应。
http 与 https 区别#
-
概念#
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
HTTPS 协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。 -
区别#
- https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。
- http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
网络协议层级,及代表性的应用#
- OSI 模型共分七层:从上至下依次是。
- 应用层:指网络操作系统和具体的应用程序,对应 WWW 服务器、FTP 服务器等应用软件。
- 表示层:数据语法的转换、数据的传送等。
- 会话层:建立起两端之间的会话关系,并负责数据的传送。
- 传输层:负责错误的检查与修复,以确保传送的质量,是 TCP 工作的地方。(报文)。
- 网络层:提供了编址方案,IP 协议工作的地方 (数据包)。
- 数据链路层:将由物理层传来的未经处理的位数据包装成数据帧。
- 物理层:对应网线、网卡、接口等物理设备。
同步与异步,阻塞与非阻塞#
- 同步:当一个同步调用发出后,调用者要一直等待返回消息(或者调用结果)通知后,才能进行后续的执行;
- 异步:当一个异步过程调用发出后,调用者不能立刻得到返回消息(结果)。在调用结束之后,通过消息回调来通知调用者是否调用成功。
- 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,函数只有在得到结果之后才会返回。
- 非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
阻塞调用和同步调用是不同的。对于同步调用来说,很多时候当前线程可能还是激活的,只是从逻辑上当前函数没有返回而已,此时,这个线程可能也会处理其他的消息。如果这个线程在等待当前函数返回时,仍在执行其他消息处理,那这种情况就叫做同步非阻塞;如果这个线程在等待当前函数返回时,没有执行其他消息处理,而是处于挂起等待状态,那这种情况就叫做同步阻塞;所以同步的实现方式会有两种:同步阻塞、同步非阻塞;同理,异步也会有两种实现:异步阻塞、异步非阻塞。
linux 权限#
使用数字表示权限时,每组权限分别为对应数字之和:
- rw = 4 + 2 = 6
- rwx = 4 + 2 + 1 = 7
- r-x = 4 + 1 = 5
所以,使用数字表示 UGO 权限时,可以用如下方式表示:
- chmod 660 test.md 设置 UGO 权限为 rw-rw----
- chmod 775 test.md 设置 UGO 权限为 rwxrwxr-x
redis 内存满了怎么办#
redis 设置配置文件的 maxmemory 参数,可以控制其最大可用内存大小(字节)。当所需内存超过 maxmemory,这个时候就该配置文件中的 maxmemory-policy 出场了,其默认值是 noeviction。下面是当可用内存不足时,删除 redis 键具有的淘汰规则。
规则名称 | 规则说明 |
---|---|
volatile-lru | 使用 LRU 算法删除一个键(只对设置了生存时间的键) |
allkeys-lru | 使用 LRU 算法删除一个键 |
volatile-random | 随机删除一个键(只对设置了生存时间的键) |
allkeys-random | 随机删除一个键 |
volatile-ttl | 删除生存时间最近的一个键 |
noeviction | 不删除键,只返回错误 |
LRU 算法,least Recently Used,最近最少使用算法。也就是说默认删除最近最少使用的键。但是一定要注意一点!redis 中并不会准确的删除所有键中最近最少使用的键,而是随机抽取 3 个键,删除这三个键中最近最少使用的键。那么 3 这个数字也是可以设置的,对应位置是配置文件中的 maxmeory-samples。
原文链接: https://www.phpbest.cn/posts/11.html#
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: