Linux面试笔试题

第一章 Linux笔试

Linux 命令基础
1)Linux系统查看进程数的命令:ps top htop pgrep
2)Linux系统查看文件内容使用:cat less more head tail
3)Linux系统从A服务器测试B服务器一个tcp端口是否联通使用:telnet nc ping
4)Linux系统计划任务编辑命令:crontal -e
5)Linux系统查看系统内存的命令:free top vmstat sar -r cat /proc/meminfo
6)Linux系统查看CPU使用率的命令:top mpstat sar htop
7)Lnux系统查看硬盘空间使用率的命令:df -h du -sh ls -lh
8)Linux系统修改属组、属主及权限命令:chgrp chown chmod
9)Linux系统rm 删除目录及文件夹时递归参数为:rm -r mydir
10)Linux系统将某一文件下的所有.og 文件进行打包压缩,命令为 tar -czvf archive.tar.gz /path/to/folder/*.og

Linux Shell 基础
1.列出五个vi编译时的命令(例如|为插人) wq: w: q: q!: !command:
2.编写shel 程序之前必须赋予该脚本的权限赋予权限的命令是什么 chmod +x 脚本文件名.sh
3.Linux系统shell 脚本第一行需写什么,代表什么意义_ #!/bin/bash 表示使用Bash作为解释器来执行该脚本。
4.使用 AWK 指定分隔符的参数是 awk -F, ‘{print $1}’ file.txt
5.编写shell 脚本时 注释符是 #

WEB 与APP 基础
16)apache 服务器配置文件名称:httpd.conf
17)apache 服务器日志文件名称:访问日志(Access Log)、错误日志(Error Log)
18)WAS或weblogic单个SERVER的日志名称:SystemOut.log server.log
19)JAVA应用程序,查询应用日志中抛出异常,linux命令(日志名称为ibank.log)

对于Linux命令,可以使用以下命令来查询应用日志中抛出的异常:

grep命令:grep “Exception” logfile.txt
这个命令会在logfile.txt文件中搜索包含"Exception"关键字的行,并将结果输出到终端。

tail命令:tail -f logfile.txt | grep “Exception”
这个命令会实时监视logfile.txt文件的更新,并将包含"Exception"关键字的行输出到终端。

awk命令:awk ‘/Exception/{print}’ logfile.txt
这个命令会在logfile.txt文件中搜索包含"Exception"关键字的行,并将结果输出到终端。

20)简述apache 服务器 MaxKeepAliveRequests 和 KeepAliveTimeout 参数的意义

MaxKeepAliveRequests参数是Apache服务器的一个配置项,用于设置在一个持久连接(Keep-Alive)中最多允许处理的请求数量。
KeepAliveTimeout参数的作用是设置这个时间段的长度,超过该时间段后,服务器会关闭持久连接。
这两个参数的意义在于控制持久连接的使用和管理。通过设置MaxKeepAliveRequests参数,可以限制每个持久连接处理的请求数量,避免某个连接占用过多的服务器资源。而通过设置KeepAliveTimeout参数,可以控制持久连接的生命周期,避免长时间闲置的连接占用服务器资源。

SQL 基础
21)字符转换日期函数
在SQL中,可以使用字符转换日期函数将字符串类型的日期转换为日期类型。常见的字符转换日期函数包括:

1.TO_DATE()函数:将字符串转换为日期类型。语法如:TO_DATE(string, format)

其中,string是要转换的字符串,format是字符串的日期格式。

2.CAST()函数:将字符串转换为指定的数据类型。语法如:      CAST(expression AS data_type)

其中,expression是要转换的字符串,data_type是目标数据类型,可以是日期类型。

3.CONVERT()函数:将一个表达式的数据类型转换为另一个数据类型。语法如:CONVERT(data_type, expression, style)

其中,data_type是目标数据类型,expression是要转换的字符串,style是日期格式。

22)DML包括:SELECT、INSERT、UPDATE、DELETE
23)简述 where 和 having 的区别:简而言之,WHERE用于筛选行,而HAVING用于筛选分组。
24)有三张表分别为客户表customers,账户表 accounts,用户表 users
结构如下:
客户表 customers(cust_id,cust_name,cust_opendate(客户开通时间))账户表 accounts(acc_id,acc_name,cust_id,acc_opendate(账户开通时间))用户表 users(user_id ,user_name,cust_id,lost_login_date(用户最后登录时间))每个客户可以开通多个帐号,每个客户有多个用户,cust_id,acc_id,user_id分别为客户、账户、用户的唯一标志,cust opendate,acc_opendate,lost_login_date 类型为 date按照要求用一条 SQI语句完成.A)统计每个月开通的客户数:
B)列出上个月开通客户列表,并输出这些客户所具有的账户和用户数量
C)统计三个月内登录过的客户数量
D)统计老客户今年开通账户的数量,老客户是指今年以前开通的账户,
数据库基础
25)Oracle查看表空间情况使用哪个数据字典 DBA_TABLESPACES DBA_DATA_FILES
26)Oracle 备份工具(包括导入导出):Oracle Recovery Manager (RMAN) Oracle Data Pump Oracle Export/Import Third-party Backup Tools
27)Mysql备份工具:mysqldump MySQL Enterprise Backu Xtrabackup mydumper Percona XtraBackup
28)Mysql列出数据库切换当前用户连接的数据库
SHOW DATABASES;
USE database_name;

第二章 http与nginx

1、请说一下你对httpd服务的了解?

答:Apache是一个模块化服务,支持的模块比较多,采用servlet处理模型,同步阻塞模型,工作模式多变,对于高并发的场景处理速度会比较慢,运行稳定。支持异步读写,可以通过正则表达式做动静分离。

2、httpd服务的三种工作模式你了解多少?

答:httpd有三种工作模式。
prefork:预派生子进程
prefork模式可以算是很古老但是很稳定的模式。httpd服务在刚启动时,就会fork出一些子进程(默认为5个),一个子进程对应一个线程,然后等待request进来,并且总是试图保持一些空闲的子进程,之所以这样做,是为了减少频繁创建和销毁进程的开销。在同一个时间点内,一个线程只能处理一个进程。
worker工作模式
worker模式和prefork模式比起来,是使用了多进程+多线程的模式,它也是预先fork了几个子进程,每个子进程能够生成一些服务线程和一个监听线程,该监听线程及接入请求并传递给服务线程处理和应答。worker工作模式占用的内存较少,在高并发下表现还算优异。不过必须要考虑线程安全的问题,因为多个子进程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,也许中间几乎没有请求,这时就会发生阻塞,线程被挂起,需要一直等待到超时才会被释放。如果过多的线程,就这样被占据,也会导致在高并发场景下的无服务线程可用。(该问题同样会发生在prefork模式)。
event工作模式
这是Apache最新的工作模式,它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,线程长期被占用的的资源浪费问题。
event工作模式中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理多个请求了,实现异步非阻塞。
event工作模式在遇到某些不兼容的模块时,它会失效,并退回到worker模式,一个工作线程处理一个请求。官方自带的模块,全部都是支持event工作模式的。

3、可以从哪几个方面着手优化httpd?

合理配置其进程及线程数;
开启httpd的deflate压缩功能;
开启expires缓存功能;
禁止httpd进行目录遍历;
隐藏httpd的版本信息;
开启日志切割功能;
配置防盗链;

1、缺省安装的Nginx+php-fpm环境,假设用户浏览一个耗时的网页,但是却在服务端渲染页面的中途中关闭了浏览器,那么请问服务端的PHP脚本是继续执行还是退出执行?

答:正常情况下,如果client异常退出了,Server端的程序还是会继续执行,直到与IO进行了两次交互操作。Server端发现client端已经断开连接,这个时候会出发一个User_abort,如果这个没有设置ignore_user_abort,那么这个php-fpm的程序才会被中断。

2、nginx是如何实现高并发的?

答:nginx之所以可以实现高并发,与它采用的epoll模型有很大的关系。epoll模型采用异步非阻塞的事件处理机制。这种机制可让nginx进程同时监控多个事件。
简单来说,就是异步非阻塞,使用了epoll模型和大量的底层代码优化。如果深入一点的话,就是nginx的特殊进程模型和事件模型的设计,才使其可以实现高并发。
进程模型
它是采用一个master进程和多个worker进程的工作模式。
1、master进程主要负责收集、分发请求。当一个请求过来时,master拉起一个worker进程负责处理这个请求。;
2、master进程也要负责监控worker的状态,保证高可靠性;
3、worker进程议案设置为和CPU核心数一致或者其二倍。nginx的worker进程和Apache的不一样。apache的进程在同一时间只能处理一个请求,所以它会开启很多个进程,几百甚至几千个。而nginx的worker进程在同一时间可以处理的请求数只受内存限制,因此可以处理更多请求。
事件模型
nginx是异步非阻塞的。
一个master进程,多个worker进程,每个worker进程可以处理多个请求。每进来一个request,都会有worker进程去处理。但不是全程的处理,那么处理到的程度就是可能发生阻塞的地方,比如向后端服务器转发request,并等待请求返回。那么,在等待期间,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是它就去休息了,此时,如果再有request进来,它就可以很快再按这种方式处理。而一旦后端服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。
由于nginx的的这个工作性质决定了每个请求大部分的生命都是在网络传输中,所以实际上花费在nginx 服务器上的时间并不多,这就是它几进程就能解决高并发的秘密所在。

3、已知nginx和php-fpm安装在同一台服务器上,nginx连接php-fpm有两种方式:一种是类似127.0.0.1:9000的TCP socket,另一种是类似/tmp/php-fpm.sock的Unix domain socket,请问如何选择?需要注意什么?

Unix domain socket的流程不会走到TCP那层,直接以文件的形式,以stream socket通信。如果是TCP Socket,则需要走到IP层。说的通俗一点,追求可靠性就是选择TCP(需要占用一个端口,更稳定,如:127.0.0.1:9000),追求高性能就是Unix Socket(不需要占用端口,更快,但可靠性不如TCP的方式)。

4、nginx和Apache的区别?

两者最核心的区别在于apache是同步多进程模型,一个request对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。
一般来说,需要性能的web服务,用nginx,如果不需要性能只求稳定,更考虑Apache,后者的各种模块实现的比前者好很多,epoll网络IO模型是nginx处理性能高的根本,但并不是所有情况下epoll大获全胜的,如果本身提供静态服务的只有几个文件,apache的select模型或许比epoll更高性能。当然,这只是一个假设,真正还需要实测了再说。
更通用的方案是,前端nginx抗并发,后端apache集群,配合起来会更好。

5、nginx的调度算法有哪些?

sticky:通过nginx-sticky模块,来实现cookie黏贴的方式将来自同一个客户端的请求发送到同一个后端服务器上处理,这样一定程度上可以解决多个后端服务器的session会话同步的问题;
round-robin(RR):轮询,每个请求按时间顺序依次分配到不同的后端服务器,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响;
weight:轮询权重,weight的值越大分配到的访问概率就越高,主要用于后端每台服务器性能不均衡的情况下,或者仅仅为在主从的情况下设置不同的权重,达到合理有效的利用主机资源。
least_conn:请求被发送到当前活跃连接最少的realserver上,会考虑到weight的值;
ip_hash:每个请求按照IP的哈希结果分配,使来自同一个IP的访客固定访问后端服务器,可以有效的解决动态网页存在的session共享问题。
fair:比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面的大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,相应时间短的优先分配。nginx本身不支持fair,如果需要使用这种调度算法,则必须安装upstream_fair模块。
url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到后端服务器,可以进一步提高后端缓存服务器的效率。同样,nginx本身不支持url_hash,如果需要这种调度算法,则必须安装nginx的hash软件包。

6、nginx负载均衡调度状态

在nginx upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态。
常用的状态有:
down:表示当前的server暂时不参与负载均衡;
backup:预留的备份机器。当其他所有的非backup机器出现故障或者繁忙的时候,才会请求backup机器,因此这台机器的访问压力最低;
max_fails:允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstraem模块定义的错误;
fail_timeout:请求失败超时时间,在经历了max_fails次失败后,暂停服务的时间。max_fails和fail_timeout可以一起使用。

7、如何查看nginx已添加的模块?如果需要添加某个模块,应该如何实现?

查看已添加的模块:nginx -V;
如果需要添加某个模块,需要将工作目录切换至nginx的源码包中,执行“nginx -V”命令查看之前配置时的选项进行复制,然后增加需要添加的模块配置项,进行配置并编译,将新生成的nginx命令覆盖掉原有的nginx命令,然后重载nginx服务,即可实现在线添加模块。

8、可以从哪些方面来优化nginx服务?

配置nginx的proxy缓存;
对静态页面开启压缩功能,如br压缩或者gzip压缩;
调整nginx运行工作进程个数,最多开启8个,8个以上话性能就不会再提升了,而且稳定性变得更低,所以8个足够用了;
调整nginx运行CPU的亲和力;
修改nginx最多可打开的文件数,若超过系统限制的最多打开文件数(ulimit -n命令查看系统的最多打开文件数),还需要修改系统默认的文件数;
修改单个worker的最大连接数;
开启高效传输;
设置连接超时时间,以便保护服务器资源,因为建立连接也是需要消耗资源的;
优化fastCGI的一个超时时间,也可以根据实际情况对其配置缓存动态页面;
expires缓存调优,主要针对图片、css、js等元素更改较少的情况下使用。
配置防盗链;
优化内核参数,如进程可以同时打开的最大句柄数;开启tcp重用机制,以便允许TIME_WAIT sockets重新用于新的TCP连接…还有好多,记不住。

  • 24
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值