拓展面试题之-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. 提高速度
    (1)静态资源可以缓存在浏览器,减少带宽
    (2)不再用php进行模板解析,模板解析放到前端js了,如vue.js
    (3)很多逻辑可以放到前端js,这样php做的事情少了,资源空出来了
    (4)静态资源可以放入CDN进行缓存加速
    (5)不占用服务器的带宽
  2. 开发速度
    前后端可以并行开发

19 nginx负载均衡如何实现高可用?

  1. 故障切换
  2. 健康监测

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的代码执行流程?

拓展面试题之-linux、mongodb、nginx、php面试题_linux


PHP拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个一个的指令(opcodes),然后ZEND虚拟机会顺次执行这些指令完成操作。

24 PHP-FPM配置如何优化?

  1. 一种是直接开启指定数量的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底层原理?

拓展面试题之-linux、mongodb、nginx、php面试题_php_02


从图上可以看出,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面试题的主要内容,如果未能解决你的问题,请参考以下文章

Java程序员面试题之JavaSE之基础篇

2017年最新企业面试题之shell

Sql面试题之三(难度:简单| 含答案)

(转)2017年最新企业面试题之shell(一,二)

前端面试题之手写代码篇

前端面试题之CSS篇