面试题总结—持续更新
linux
系统启动流程
- 第一步:开机自检,加载BIOS
- 第二步:读取MBR
- 第三步:Boot Loader grub引导菜单
- 第四步:加载kernel内核
- 第五步:init进程依据inittab文件夹来设定运行级别
- 第六步:init进程执行rc.sysinit
- 第七步:启动内核模块
- 第八步:执行不同运行级别的脚本程序
- 第九步:执行/etc/rc.d/rc.lo
linux文件类型
- 普通文件类型
- 目录文件
- 块设备文件
- 字符设备文件
- 套接字文件
- 管道文件
- 链接文件
centos6和7怎么添加程序开机自启动?
CentOS 6 : chkconfig SERVICE on|off
CentOS 7 : systemctl enable|disable service
如何升级内核,目前最新版本号多少?
版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm)
方法一
# 添加第三方yum源进行下载安装。
Centos 6 YUM源:http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
Centos 7 YUM源:http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 先导入elrepo的key,然后安装elrepo的yum源:
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
# 查看可用的内核相关包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum -y --enablerepo=elrepo-kernel install kernel-ml
方法二
# 通过下载kernel image的rpm包进行安装。
官方 Centos 6: http://elrepo.org/linux/kernel/el6/x86_64/RPMS/
官方 Centos 7: http://elrepo.org/linux/kernel/el7/x86_64/RPMS/
# 获取下载链接进行下载安装即可
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-4.4.185-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-lt-4.4.185-1.el7.elrepo.x86_64.rp
修改grub中默认的内核版本
内核升级完毕后,目前内核还是默认的版本,如果此时直接执行reboot命令,重启后使用的内核版本还是默认的3.10,不会使用新的5.2.2,首先,我们可以通过命令查看默认启动顺序
[root@localhost ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (5.2.2-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.21.3.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.10.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-e34fb4f1527b4f2d9fc75b77c016b6e7) 7 (Core)
由上面可以看出新内核(4.12.4)目前位置在0,原来的内核(3.10.0)目前位置在1,所以如果想生效最新的内核,还需要我们修改内核的启动顺序为0:
vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
注:Centos 6 更改的文件相同,使用命令确定新内核位置后,然后将参数default更改为0即可。
接着运行grub2-mkconfig命令来重新创建内核配置,如下:
grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统并查看系统内核
nginx日志访问量前十的ip怎么统计?
[root@opswy logs]# awk '{array[$1]++}END{for (ip in array)print ip,array[ip]}' access.log |sort -k2 -rn|head
123.151.43.110 262544
118.26.133.242 15523
117.101.223.131 4829
117.101.222.239 1014
117.101.202.100 782
203.91.112.74 645
123.206.90.182 643
118.247.207.155 458
121.42.242.177 400
111.230.88.143 358
删除/var/log/下.log结尾的30天前的日志文件
find /var/log/ -type f -name .*.log -mtime 30|xargs rm -f
ansible有哪些模块?功能是什么?
- copy模块 拷贝文件到被控端
- cron 定时任务
- fetch 拷贝被控端文件到本地
- file 文件模块
- group 用户组模块
- user 用户模块
- hostname 主机名模块
- script 脚本模块
- service 服务启动模块
- command 远程执行命令模块
- shell 远程执行命令模块,command高级用法
- yum 安装包组模块
nginx性能为什么比apache高?
- nginx采用epoll模型
- apache采用select模型
四层负载和七层负载区别是什么?
- 四层基于IP+端口进行转发
- 七层就是基于URL等应用层信息的负载均衡
lvs有哪些工作模式?哪个性能高?
- DR 性能最高
- NAT
- TUNNEL
- FULLANT
lvs nginx haproxy区别,优缺点?
https://blog.csdn.net/qlj324513/article/details/81541282
如下url地址,各个部分的含义
https://www.baidu.com/s?word=123&ie=utf-8
https://www.baidu.com/ 域名
?之前的是请求地址,之后是请求参数
tomcat各个目录含义,如何修改端口,如何修改内存数?
- bin 存放tomcat命令
- conf 存放tomcat配置文件
- lib 存放tomcat运行需要加载的jar包
- log 存在Tomcat运行产生的日志
- temp 运行过程中产生的临时文件
- webapps 站点目录
- work 存放tomcat运行时的编译后的文件
server.xml 修改端口号
catalina.sh 修改内存数
nginx反向代理时,如何使后端获取真正的访问来源ip?
使用X-Forwarded-For
nginx负载均衡算法有哪些?
-
rr 轮训
-
weight 加权轮训
-
ip_hash 静态调度算法
-
fair 动态调度算法
-
url_hash url哈希
-
leat_conn 最小连接数
如何进行压力测试?
如何查看response头信息?如何发送get和post表单信息?
response头信息 :curl -I
post: curl -d “key1=value1&key2=value2&key3=value3”
mysql
索引的为什么使查询加快?有啥缺点?
默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度
B+树
缺点
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
- 索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大
- 以表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度
sql语句左外连接 右外连接 内连接 全连接区别
- 内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
- 外连接可以是 左向外连接、右向外连接或完整外部连接 。
- 左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
- 右向外连接是左向外连接的反向连接。 将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
mysql数据备份方式,如何恢复?你们的备份策略是什么?
- mysqldump备份
- mysql恢复
如何配置数据库主从同步,实际工作中是否遇到数据不一致问题?如何解决?
主库
- 开启binlog日志
- 创建主从复制用户
- 查看master的状态
从库
- change master to
- 开启从库
mysql数据引擎有哪些?
常用的 myisam、innodb
区别:
- InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;
- MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;
- InnoDB 支持外键,MyISAM 不支持;
- MyISAM 是默认引擎,InnoDB 需要指定;
- InnoDB 不支持 FULLTEXT 类型的索引;
- InnoDB 中不保存表的行数,如 select count() from table 时,InnoDB;需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表;
- 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其他字段一起建立联合索引;
- 清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;
- InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’
如何查询mysql数据库存放路径?
mysql> show variables like 'datadir%';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)
mysql数据库文件后缀名有哪些?用途什么?
myisam
- .frm文件:保护表的定义
- .myd:保存表的数据
- .myi:表的索引文件
innodb
- .frm:保存表的定义
- .ibd:表空间
如何修改数据库用户的密码?
set password for 用户名@localhost = password('新密码');
mysqladmin -u用户名 -p旧密码 password 新密码
update user set password=password('123') where user='root' and host='localhost';
忘记密码启动的时候添加–skip-grant-tables 参数
如何修改用户权限?如何查看?
授权:
grant all on *.* to user@'%' identified by 'passwd'
查看权限
show grants for user@'%';
nosql
redis数据持久化有哪些方式?
- rdb
- aof
redis集群方案有哪些?
- codis
- redis cluster
redis如何进行数据备份与恢复?
备份
redis 127.0.0.1:6379> SAVE
创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。
还原
只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可
redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"
MongoDB如何进行数据备份?
mongoexport / mongoimport
mongodump / mongorestore
kafka为何比redis rabbitmq快?
https://www.zhihu.com/question/22480085
支持分布式,高可用的部署,并且对一个大的队列采用分成多个Partition(分区),来提高消息入队的吞吐量,分而治之的思想. 并且消费的时候支持group的概念,能够支持多个客户端消费同个队列,并且一个group中可以增加consumer的数量来扩展消费的处理量.
docker
dockerfile有哪些关键字?用途是什么?
如何减小dockerfile生成镜像体积?
- 通过Docker多阶段构建将多个层压缩为一个
- 小体积的Alpine基础镜像
- 用distroless去除容器中所有不必要的东西
dockerfile中CMD与ENTRYPOINT区别是什么?
CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令。
指定 ENTRYPOINT 指令为 exec 模式时,CMD指定的参数会作为参数添加到 ENTRYPOINT 指定命令的参数列表中。
dockerfile中COPY和ADD区别是什么?
COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中
区别是ADD可以从 远程URL中的资源不会被解压缩。
如果是本地的压缩包ADD进去会被解压缩
docker的cs架构组件有哪些?
- Client(客户端)
- DOCKER_HOST(Docker主机)
- Registry(注册中心)
- Images(镜像)
- Containers(容器)
docker网络类型有哪些?
- host模式
- container模式
- none模式
- bridge模式
如何配置docker远程访问?
vim /lib/systemd/system/docker.service
在ExecStart=后添加配置,注意,需要先空格后,再输入
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
docker核心namespace CGroups 联合文件系统功能是什么?
namespace:资源隔离
cgroup:资源控制
联合文件系统:支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
命令相关:导入导出镜像,进入容器,设置重启容器策略,查看镜像环境变量,查看容器占用资源
构建镜像有哪些方式?
- dockerfile
- 容器提交为镜像
docker和vmware虚拟化区别?
https://www.jianshu.com/p/50f48eb25215
prometheus
prometheus对比zabbix有哪些优势?
https://blog.csdn.net/wangyiyungw/article/details/85774969
prometheus组件有哪些,功能是什么?
Prometheus Server:
Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
Exporters:
将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server
AlertManager:
在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。
PushGateway
由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。
当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。
可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。
prometheus指标类型有哪些?
- Counter(计数器)
- Guage(仪表盘)
- Histogram(直方图)
- Summary(摘要)
在应对上千节点监控时,如何保障性能
(降低采集频率,缩小历史数据保存天数,使用集群联邦和远程存储)
https://www.kubernetes.org.cn/7217.html # thanos
https://blog.51cto.com/lee90/2062252 # 联邦模式
https://blog.csdn.net/qq_27412807/article/details/105675819 #存储es
ELK
Elasticsearch的数据如何备份与恢复?
https://www.cnblogs.com/tcy1/p/13492361.html
https://blog.csdn.net/moxiaomomo/article/details/78401400?locationNum=8&fps=1
你们项目中使用的logstash过滤器插件是什么?实现哪些功能?
-
date 日期解析
-
grok 正则匹配解析
-
overwrite 写某个字段
-
dissect 分隔符解析
-
mutate 对字段做处理
-
- convert类型转换
- gsub 字符串替换
- split 字符串分割为数组
- join 将数组拼接为字符串
- merge 将两个数组合并为一个数组
- rename 字段重命名
- update/replace 字段内容更新
- add_field 增加字段
- remover_field 删除字段
-
json 解析
-
geoip 地理位置解析
-
ruby 修改logstash event
elasticsearch的副本和分片设置
https://www.jianshu.com/p/afb1d3da1c5c