拓展面试题之-linuxmongodbnginxphp面试题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓展面试题之-linuxmongodbnginxphp面试题相关的知识,希望对你有一定的参考价值。
1 为什么 Linux要分为用户空间和内核空间?
解析
1 在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。
2 CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问的寄存器不同,用户空间不需要关注这种不同,只需调用内核空间接口即可。
2 谈谈你对5种常用IO模型的理解?
3 请说说一次网络请求的完整过程?
4 如何提高linux最大文件打开数?
ulimit -a 或者 ulimit -n
更改方法:
临时生效:
ulimit -SHn 10000 ,ulimit命令分软限制和硬限制,加-H就是硬限制,加-S就是软限制,默认是软限制,如果没加-H或-S,就是两个参数一起改变
软限制和硬限制的区别?
硬限制就是实际的限制,而软限制是警告限制,他只会给出警告
永久生效:
如果想ulimit的数值永久生效,必须修改配置文件/etc/security/limits.conf,在该配置文件中添加
* soft nofile 65535
* hard nofile 65535
echo "* soft nofile 65535“ >> /etc/security/limits.conf
echo "* hard nofile 65535“ >> /etc/security/limits.conf
5 linux如何查看后台所有php进程?
ps -ef | grep php
6 linux 系统日志文件在哪?
/var/log/messages
7 查看所有环境变量
env
8 通过什么命令查找执行命令?
which
9 怎么对命令进行取别名?
alias la = ‘ls -a’
10 如何杀掉进程?
kill命令用于终止进程
-9 强迫进程立即停止
kill -9 [pid ]
11 LINUX中如何查看某个端口是否被占用?
netstat -anp |grep 端口号
12 将/test1目录下的file1复制到/test3目录,并将文件名改为file2
cp /test1/file1 /test3/file2
13 如何在Linux下更改权限?
如果是系统管理员或者文件或目录的所有者,则可以使用 chmod命令授予权限。使用+符号添加权限或者-符号拒绝权限,以及以下任意字母:u(用户),g(组),o(其他),a(所有),r(读取),w(写入),x(执行)。
例如:
chmod go + rw file1.txt 授予对文件file1.txt读写访问权限,该文件分配给组合其他组
14 什么是以点开头的文件名?
以点开头的文件是隐藏文件。这些文件是包含重要数据或者设置信息的配置文件。将这些文件设置为隐藏会使其不太可能被意外删除。
15 linux系统中用户有哪几种?
所有者 user u
所属组 group g
其他用户 other o
u+g+o =a
16 切换到一个目录里面,需要哪些权限?
rx
17 请说说nginx如何优化?
18 谈谈你对前后端分离(动静分离)的理解?
- 提高速度
(1)静态资源可以缓存在浏览器,减少带宽
(2)不再用php进行模板解析,模板解析放到前端js了,如vue.js
(3)很多逻辑可以放到前端js,这样php做的事情少了,资源空出来了
(4)静态资源可以放入CDN进行缓存加速
(5)不占用服务器的带宽 - 开发速度
前后端可以并行开发
19 nginx负载均衡如何实现高可用?
- 故障切换
- 健康监测
20 mongodb和redis的区别是什么?
就Redis和MongoDB来说,我们一般成为Redis缓存,MongoDB数据库。
Redis主要把数据存储在内存中,其缓存的性质远大于其”数据存储“的性质,其中数据的增删改查也只是像变量操作一样简单。
MongoDB是一个存储数据的系统,增删改查可以添加很多where条件,像SQL数据库一样灵活。
1.内存管理机制
Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据。
mongodb数据存在内存,由linux系统mmap实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
2.支持的数据结构
Redis支持丰富的数据结果,如string ,set ,hash,list等
MongoDB数据结果比较单一,但支持丰富的数据表达,索引。类似关系型数据库,支持的查询语言比较丰富。
3.数据量和性能
当物理内存够用时,redis>mongodb>mysql
当物理内存不够用时,redis和mongodb都会使用虚拟内存。
实际上,如果Redis要开始虚拟内存,很明显要么增加内存条,要么更换数据库
但mongodb不一样,只要业务能保证,冷热数据的读写比,使得热数据在物理内存中,mmap的交换较少。
mongodb 还是能够保证性能。
4.性能
mongodb依赖内存,TPS较高;Redis依赖内存,TPS非常高。性能上,Redis 优于mongodb.
5.可靠性
MongoDB从1.8版本后,采用binlog方式(MySQL也使用这种方式)支持持久化,增加可靠性;
Redis依赖快照进行持久化;AOF增加可靠性;增加可靠性的同时,影响访问性能。
可靠性上MongoDB优于Redis
6.数据分析
MongoDB内置数据分析功能(mapreduce),而Redis不支持。
7.事务支持
Redis事务支持比较弱,只能保证事务中的每个操作连续执行;MongoDB不支持事务
8.集群
MongoDB集群技术比较成熟,Redis从3.0开始支持集群。
21 MongoDB中的分片是什么?
在多台计算机上存储数据记录的过程称为分片。这是一种MongoDB方法,可以满足数据增长的需求。他是数据库或搜索引擎中数据的水平分区。每个分区称为分片或数据库分片。
解析什么是副本集?
副本集是一组托管相同数据集的MongoDB实例。在副本集上,一个节点是主节点,另一个是辅助节点。从主节点到辅助节点,所有数据都会复制
22 谈谈你对mongodb集群的理解?
23 PHP的代码执行流程?
PHP拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个一个的指令(opcodes),然后ZEND虚拟机会顺次执行这些指令完成操作。
24 PHP-FPM配置如何优化?
- 一种是直接开启指定数量的php-fpm进程,不再增加或者减少;
pm = static(静态)
pm.max_children: 开启的php-fpm进程数量
2.另一种是开启一定数量的php-fpm进程,当请求量变大时,动态的增加php-fpm进程数到上限。
pm = dynamic(动态)在动态方式下他限定php-fpm的最大进程数(这里要注意pm.max_spare_servers的值只能小于等于pm.max_children)pm.max_children:开启的php-fpm进程数量pm.start_servers:动态方式下的起始php-fpm进程数量。pm.min_spare_servers:动态方式空闲状态下的最小php-fpm进程数量。pm.max_spare_servers:动态方式空闲状态下的最大php-fpm进程数量。
如果pm设置为static,系统会开启设置的数量个php-fpm进程。如果pm设置为dynamic,系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
那么,对于服务器,选择哪种执行方式比较好呢?事实上,跟Apache一样,运行的PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始时一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M的原因了。
所以,动态方式因为会结束掉多余的进程,可以回收释放一些内存,所以推荐在内存较少的服务器或者VPS上使用。具体最大数量根据内存/20M 得到。比如说512M的VPS,建议pm.max_spare_servers设置为20(512*0.8/20)。至于pm.min_spare_servers,则建议根据服务器的负载情况来设置,比较合适的值在5~10之间。
然后对于比较大内存的服务器来说,设置为静态的话会提高效率。因为频繁开关php-fpm进程也会有时滞,所以内存够大的情况下开静态效果会更好。数量也可以根据内存/30M 得到。比如说2GB内存的服务器,可以设置为50;4GB内存可以设置为100等。
比如,如果是512M的vps,设置的参数如下:代码示例:
pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=5
pm.max_spare_servers=20
可以最大的节省内存并提高执行效率。
25 PHP的核心数据结构是什么?
HashTable
26 PHP底层原理?
从图上可以看出,php从下到上是一个4层体系
①Zend引擎 Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend实现。
②Extensions围绕着zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析就是extension的典型应用)。
③Sapi Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过sapi成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。后面将在sapi章节中介绍
④上层应用这就是我们平时编写的php程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。
构架思想:
引擎(Zend)+组件(ext)的模式降低内部耦合中间层(sapi)隔绝web server和php
如果php是一辆车,那么
车的框架就是php本身
Zend是车的引擎(发动机)
Ext下面的各种组件就是车的轮子
Sapi可以看做是公路,车可以跑在不同类型的公路上
而一次php程序的执行就是汽车跑在公路上。
因此,我们需要:性能优异的引擎+合适的车轮+正确的跑道
27 同时将某个文件夹的属主改为 oracle ,属组改为 db
chown -R oracle:dba test
28 给指定文件的属主和属组所有权限(包括读、写、执行)
chmod ug+rwx file.txt
29 查看系统负载?
uptime
30 查看内存使用情况?
free -m
31 设置一个每十分钟执行一次的计划任务
*/10 * * * * /test.php
32 linux解压tar文件
tar xvf test.tar
33 vim如何清空一个文件中的所有内容?
ggdG
34 sed全局替换?
sed ‘s/要被替换的字符串/新的字符串/g’ test.txt
35 查找/usr目录下文件大小大于100MB的文件,并按照文件大小由大到小排列,并显示文件大小
find / -type f -size +100M | xargs ls -lh -S
36 在一个文件夹中递归查询包含test这个字符串的文件
grep -r “test” *
37 linux全盘查找指定文件名的文件?
find / -name test.txt
38 linux如何查看磁盘情况?
df -lh
39 linux挂载命令?
mount /dev/had1 /mnt
40 linux无提示删除xxx目录下面的所有文件?
rm -rf xxx
41 用什么命令查看ip地址及接口信息?
ifconfig
以上是关于拓展面试题之-linuxmongodbnginxphp面试题的主要内容,如果未能解决你的问题,请参考以下文章