首页 > 其他分享 >面试重点

面试重点

时间:2022-08-28 18:35:32浏览次数:37  
标签:## root 面试 sed awk print ecs 重点

MySQL

事务的特性ACID

事务:一组由SQL语句组成的整体,或者独立工作的单元---面试重点

##面试重点
事务的4个特性
A:原子性,整个事务中要么全部执行成功,要么全部失败回滚,唯一性,不可分割的步骤
C:一致性,必须遵循能量守恒定律,比如银行转账1000块,对方银行必定增加1000块,不存在转账后,1000块没了,双方平衡,双方加起来钱还是一致的
I:隔离性,即事务还未提交的时候,(还没显示结果),别人看不到你提交了一半的事务的过程--->dirty data脏数据,没有具体落地的东西
D:持久型,一旦事务提交,修改永久保存在数据库中

事务的隔离级别--->区分场景,安全性,数据完整性

MySQL支持四种事务隔离级别

image-20220828114818137

读未提交read uncomimited:可读取到未提交的数据

读提交read commited:可读取提交的数据,但是未提交的数据不可读,导致每次读取的数据不一致(比如不同用户再执行,看到的都是自己执行的事务修改,别的人修改后的最终数据看不到)

幻读(可重复读):永远看到是最初的样子,没经过修改的,别人提交多少次,我这个用户都看不到(MySQL默认事务隔离级别)

创新:读操作加读锁,写操作加写锁

##查询事务隔离级别,默认是幻读
[hellodb]>select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ         |
+-------------------------+
1 row in set (0.00 sec)

##配置MySQL的事务隔离级别,读未提交
vim /etc/my.cnf
transaction-isolation=read-uncommited
transaction-isolation=read-commited ##读提交,commit后能看到
重启服务

##幻读级别:适用于备份场景
repeatable-read--->保证我在备份的时候,备份的是原始数据,不会在别人操作的时候提交事务,而修改了原数据

bash+shell

生成random密码的几种方式

1.安装expect生成mkpasswd,使用mkpasswd生成,只能生成9位的密码

组成:大小写、数字、特殊字符

[root@ecs-web01 ~]#mkpasswd
0lN6qf&Ns
[root@ecs-web01 ~]#mkpasswd
hw0bm8LX[
[root@ecs-web01 ~]#mkpasswd
Zr*o1Ow8h

2.用urandom设备生成,转换,生成任意长度的字符

urandom块设备中断输出,截取指定位数的字符head -c

优点:可以转换成任意你想要的字符密码并且输出,可以结合创建用户密码标准输入

加上 | xargs代表换行

[root@ecs-web01 ~]#cat /dev/urandom | tr -dc [:alnum:] | head -c 10 | xargs--->字母+数字
9ouLPuXaZe
[root@ecs-web01 ~]#cat /dev/urandom | tr -dc [:upper:] | head -c 10 --->纯大写字母
MYLMOTXQGY
[root@ecs-web01 ~]#cat /dev/urandom | tr -dc [:lower:] | head -c 10 --->纯小写字母
wbkzacqgwp

##也可以使用标准输入
[root@ecs-web01 ~]#tr -dc '[:alnum:]' < /dev/urandom | head -c 10 | xargs 
x5PSlm3W9m

##实现user的密码标准输入
passwd=`xxx`
echo passwd | stdin --passwd $user

3.openssl生成

效果和/dev/urandom块设备生成类似

[root@ecs-web01 ~]#openssl rand -base64 9 | head -c 10
4DDS3odTxw
[root@ecs-web01 ~]#openssl rand -base64 9 | head -c 10
Nr4a9aETwI
[root@ecs-web01 ~]#openssl rand -base64 9 | head -c 10
59a02XwQUM

打印出1-100相加的结果

awk的用法效率高,而且简单

time:测试命令的执行速度,time()

##awk写法,定义变量,主要还是格式问题,还是awk+while方便,while(i<=100){sum+},中间不需要;
##这里不是shell,不需要加do
awk 'BEGIN{i=1;sum=0;while(i<=100){sum+=i;i++};{print sum}}'
awk 'BEGIN{for(i=1;i<=100;i++){sum+=i};{print sum}}'

##for循环
sum=0;for((i=1;i<=100;i++));do ((sum+=i));done;echo $sum
5050

##seq
seq -s+ 100 |bc


##统计执行时间,1+到1000000,awk工具的效率最快
awk时间:0.769s
for时间:5.651s
[root@ecs-web01 ~]#time(awk 'BEGIN{i=1;sum=0;while(i<=1000000){sum+=i;i++};{print sum}}')
500000500000
real	0m0.075s

[root@ecs-web01 ~]#time(sum=0;for((i=1;i<=1000000;i++));do ((sum+=i));done;echo $sum)
500000500000
real	0m5.651s

add.txt文件内有1-10 10个数字,相加的和

##
[root@ecs-web01 2use]#cat 1.txt 
1 2 3 4 100 11111

[root@ecs-web01 2use]#cat 1.txt | tr ' ' + | bc 
11221

输出nginx日志内访问的最多的IP(client IP)

##传统写法,先sort来排一下序列,取第一列进行排序
[root@ecs-web01 2use]#cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 5
     39 209.182.103.18
     34 183.240.111.153
     18 8.219.71.118
      6 167.94.146.57
      4 85.119.151.251
   
##awk数组写法,array[$1]代表第一列,++代表遍历所有第一列的元素(这里的元素就是IP地址); i in array表示i是下标,打印出元素+数组下标
##下标是IP地址,次数array[i]这个整体
awk '{array[$1]++}END{for (i in array){print array[i],i}}' /var/log/nginx/access.log  | sort -nr | head -n 5
39 209.182.103.18
34 183.240.111.153
18 8.219.71.118
6 167.94.146.57
4 85.119.151.251

文本处理--ipv4地址

取私网IP地址可以直接hostname -I

##案例
hostname -I | awk '{print $1}':直接输出IP地址(内网IPV4)

##文本取法
ifconfig eth0 | awk 'NR==2{print $2}'
ifconfig eth0 | sed -n '2p' | awk '{print $2}'
ifconfig eth0 | awk '/netmask/{print $2}' #awk取匹配字段
ifconfig eth0 | grep -w inet | awk '{print $2}' #直接取inet那一行

##取服务器的公网IP
curl -s icanhazip.com
curl cip.cc

输出硬盘的使用率

空格%+,代表[[:space:]],也是正则内空格表达式的一种,最好还是用awk

df -h | awk -F"[ %]+" '{print $5}'
df -h | awk -F"[ %]+" '{print $(NF-2)}'
df -h | awk -F" +|%" '{print $5}' --->常用
df -h | tail -n +2 | tr -s ' ' : | cut -d: -f 5 | tr -d %

输出/etc/profile内的非空行和非注释行

sed '/xxx/d;':输出除去xxx的行,';'分号专门用于分离,一般的sed命令格式是'/script/d;/xxxx/d'

sed '2,5d':输出的内容内除去2到5行,sed基本都是根据行来处理的

sed -n '/xxx/d;/$/d' /etc/profile:实现两个script,d排除掉注释行和空行,这个需要写在' '单引号里面

grep内可以使用[ ]中括号,比如'[#]',sed内是/^#/来排除

用法归纳:不匹配正则的话,就要加\反斜杠转义

##p是打印,d是删除
##sed方法

sed用法和awk类似
sed '/^#/d;/^$/d' /etc/profile
sed '/^#\|^$/d' /etc/profile #删除掉^#或者是空行输出
sed '/^#\|^$/p' /etc/profile #只打印空行/#开头,转义匹配

##grep用法,可使用扩展正则
grep -v '^#\|^$' /etc/profile
grep -Ev '^#|^$' /etc/profile,扩展正则

##awk用法,非匹配这些,即不输出带^#或者空行,反过来就是匹配输出^#或者^$;默认输出'{print $0}'
awk '!/^#|^$/' /etc/profile
awk '/^#|^$/' /etc/profile

统计目前连接tcp的状态,并且输出统计的次数

处理文本,处理第一列

img

ss -ant | awk '{print $1}' | tail -n +2 | sort | uniq -c
ss -ant | awk '{print $1}' | sed -n '2,$p' | sort | uniq -c | sort -nr | head -n 2

##netstat记录各个连接的状态,listen是监听,还未建立连接;established是已经建立的TCP连接
netstat -ant | awk '{state[$NF]++} END {for (i in state) print i,state[i]}'
LISTEN 10
State 1
ESTABLISHED 2
established) 1

两个主机的网络(服务)不通,如何排查

##排查思路
1.先看主机是否有开机,主机内是否配置网卡,网卡是否配置IP
ifconfig
systemctl status network

2.是否是同一个VPC(网段),在同一个VPC内子网间是否配置了ACL策略进行拒绝访问,白名单等问题,firewalld是否关闭,是否有iptables规则
systemctl status firewalld
iptables -L
云安全组是否有放通

3.对应应用服务又没起来
systemctl status httpd
ss -ntl | grep 80

4.(如果是docker),容器的端口有没有映射到主机
docker ps
ss -ntl

5.中间有网络策略隔绝了访问

现在主机卡顿,如何找出占用CPU/内存最大的进程,并且找到他的磁盘文件?(病毒)--现在找不到路径

1.先用以下命令查看cpu和内存占用最大的进程以及进程的pid

ps aox pid,%cpu,%mem,cmd -k -%cpu
ps aox pid,%cpu,%mem,cmd --sort -%mem
##使用ps aux 查看占用内存和CPU最多的进程
ps aux --sort -%mem
ps aux --sort -%cpu

##主要是查看进程号

2.到/proc目录下找到该进程的目录,看是否真的存在

ls /proc | grep pid

3.进入到pid目录下,ll查看exe文件是否是某个磁盘文件的连接文件img

4.备份恢复/杀死进程/删除掉磁盘文件rm -rf /*,或者杀死进程 kill -9 pid号

killall -0

标签:##,root,面试,sed,awk,print,ecs,重点
From: https://www.cnblogs.com/catyer/p/16633326.html

相关文章

  • 【面试题】Vue中的$router 和 $route的区别
    Vue中的$router和$route的区别点击视频讲解更加详细this.$route:当前激活的路由的信息对象。每个对象都是局部的,可以获取当前路由的path,name,params,query等属性......
  • 【面试题】如何去掉vue的url地址中的#号?及其原理?
    如何去掉vue的url地址中的#号?及其原理?点击打开视频讲解更加详细如何去掉vue的url地址中的#号?importVuefrom'vue';importVueRouterfrom'vue-router';Vue.use......
  • 5 - 自动化测试常见面试题总结
    一、测试时接口调不通,如何去排查1、接口没有任何响应很多时候在做接口测试时,会发现接口没有任何返回,比如浏览器一直在转圈,或者返回一个空白页面。用接口工具测试时,工具......
  • 不知道如何分库分表,看完这篇文章,轻松应对工作面试
    一个挺着啤酒肚,身穿格子衫,发际线严重后移的中年男子,手拿着保温杯,胳膊夹着MacBook向你走来,看样子是架构师级别。面试开始,直入正题。面试官: 小伙子,看到你的简历上面写了......
  • 前端面试题之CSS布局问题
    垂直居中DIVHTML部分<divclass="father"><divclass="son">我是垂直居中的div</div></div>这里简单给出几种1.绝对定位(盒子宽高已知).father{......
  • 消息队列面试题
             ......
  • mybatis面试题
    mybatis中#{}和${}的区别是什么?#{}是预编译处理,会将sql中的#{}替换为?号防止sql注入${}是字符串替换。当实体类中的属性名和表中的字段名不一样,怎么办?......
  • 面试题做错记录(开卷)
    #JavaScript是一门单线程的静态类型语言错,是动态类型语言#浏览器中的Cookie只能由服务端写入,并且每次网络请求会自动携带Cookiecookie可以在本地用js方法新......
  • java面试
    1.ArrayList和LinkList字面上来看,两个都实现了List接口。ArraryList是基于索引的数据接口,底层是数组,以O(1)时间复杂度对元素进行随机访问。LinkList以元素列表的形式存......
  • 面试相关
    初级软件测试工程师,什么东西是能被公司看重的亮点?1.经历过大型项目--至少测试组3个人以上,且版本经历在10以上3个测试,可以做什么项目?花椒直播,初版本,3个测试......