月份:2017年9月


面试时切莫给自己挖坑


先简单介绍下我自己吧,中专毕业,09年左右在北大青鸟培训过计算机网络课程。培训完后做了一段时间的网络维护,维护大学里面生活区的网络,比较简单,换网线,换交换机,反正接触的都是物理层的东西,大家都懂。这里做了半年职业换了份工作,刚开始做无盘系统,后来公司开始做虚拟化,主要是citrix xendesktop这块,在这里接触了一些虚拟化的东西,也做了不少项目。对计算机,服务器,网络,Windows也提升了不少。这里工作了4年,后来也是因为不满足于现状,想改行,所以决定学Linux。

因为做项目需要出差,时间不固定,所以我辞职换了份网管的工作,找了一家轻松,自由的公司开始了网管和学习之旅。也就是从去15年6月开始,计划一年后学好Linux做Linux相关工作,那时候自己先买书看,看了大概2个多月,感觉自学还是挺困难,也太消耗时间,所以找网络培训,就找到了铭哥。看价格便宜,每天朋友圈发的说说真是热血沸腾啊。最后考虑了1个星期差不多就报名了。

报名后感觉自己学习更加来劲了,毕竟给了钱,这样更有动力,还找到了一群人一起学习,这样更有劲了,就这样学了一年,也就是16年6月底我就辞职了,准备开始找工作了,我学习的时间比较长,有一年,原因有几个,公司待我也不薄,我要是这么快走了自己心里也过意不去,还有我本来计划就是一年,再其实想乘现在有空多学点,以后工作了学的时间又不多了,而且学习不自由。基于以上几种原因让我坚持学习了一年。这一年说实话,铭哥讲的学完了,也学了很多其它的。

学完了准备面试,我面试吧可能和很多没有不太一样,我并没有和面试官说我有经验,我一般都是和面试官说我就是自学,没有实际工作经验,大多我会和面试官谈下虚拟化这块,因为这块我比较熟悉,对于面试官问的问题,肯定也不会太难,我会和面试官说我学习的哪一块我学得比较好,面试官会往这方面来问我。

个人感觉面试时切记一点,千万不要和和面试官说你不熟悉的东西,否则就是给自己挖坑。关于经验可以适当的编点,但不能太离谱,有经验的人一问你就露馅了,那种蒙混过关的是万分之一。Linux基础必须要非常熟悉,如果在这里都不行那就不要谈运维了,就不要谈高薪,还是回炉重造。

我从7月2号开始找工作,投了几十家简历,找电话面试的不多,一起差不多就6家左右,后来有两家发了offer,薪资都是8.5,但是一个太远了,所以选择了近的一家。对于我一个没有经验的来讲拿到这个薪水,很满足,等有了经验再往更高处发展。

git,github,gitlab


如果初次接触git的朋友一定搞不清git,github以及gitlab这几个概念。

git如果不知道是啥,那你总知道svn是啥吧。什么?svn也不知道?那只好辛苦你动动手搜一下了。

git用一句话介绍:它是一个分布式的版本管理工具。然后我从网上找了两张图来对比svn和git的最主要的差异——分布式。

 

从上面两个图,可以看出使用svn的版本变化数据都是存在于服务端的,最终控制中心只有一个。而git,每一个客户端都可以作为一个版本管理中心,当然它也需要有一个公共的总控制点。

再给大家举一个例子吧,比如我和朋友一起开发一个软件,这个软件有很多代码片段,所以改动也比较频繁。如果使用svn,那我们无论谁每改动一段代码都要推送到svn中心去,而为了保证代码统一,其中一个人只要因为推送新的代码变动了控制中心,另一个人都要把改动的地方拉取到自己的电脑。所以这样就比较麻烦了。

而使用git时,我和朋友都可以在自己电脑上搞一个git控制中心,我们电脑里面的代码可以不一致,只需要用自己的git管理自己的那一部分代码。而git服务端只是用来合并我和朋友的最终版本代码的,平时的小改动由我们自己电脑里面的控制中心来管理,git服务端不用关心。

下面我用一个公司老总管理员工的例子再来总结一下svn和git的差异。svn架构里面的管理者比较独裁,不信任任何人,所有的事情都是亲力亲为,它宁愿管理所有员工也不设置下级管理者。

而git架构里面的老总比较明智,他比较偷懒,只管大事情,小事情都是交给下面的小leader去搞定的。每个小leader去管理自己的下属也不用关心其他leader的事情。但是所有leader都需要不定期向大boss汇报一下近期的情况。

github,是一个web界面的git管理平台,也就是说它底层的技术驱动依然是git。一句话区分,git是管理工具,github是在线的基于git的平台(或者叫做服务)。github的角色也就是我们上面例子中的大boss。github是公开的,谁都可以注册账号,并创建自己的项目,大部分项目以代码为主,比如wordpress、discuz都是托管在github里面的,当然还有好多好多开源的软件。

既然github是一个公共的,在线的提供服务的平台,那企业就可以把公司内部的代码托管在这里,为了安全我们可以选择付费服务,定制个性化方案。但毕竟github在国外,要想获得更好的功能还需要花钱,小企业或者个人用户自然是不愿意去开销了。

还好又一款开源的软件可以帮我们搭建一套类似github的平台,这就是接下来我要介绍的gitlab。 gitlab适合企业内部构建私有代码管理平台,它有健全的权限控制系统和各种强大的功能,很赞。

所以,gitlab和github一样,也是一个基于git的提供web界面的代码管理平台。

shell习题-shell中的小数


题目如下:

a=0.5  b=3  c=a*b   求c的值

 

参考答案

#!/bin/bash
a=0.5
b=3
c=`echo "scale=1;$a*$b"|bc`
echo $c

shell习题-成员分组


需求是,把所有的成员平均得分成若干个小组。这里,我会提供一个人员列表,比如成员有50人,需要分成7个小组,要求随机性,每次和每次分组的结构应该不一致。

参考答案

假设成员列表文件为members.txt

#!/bin/bash
f=members.txt
n=`wc -l $f|awk '{print $1}'`
get_n()

{
    l=`echo $1|wc -c`
    n1=$RANDOM
    n2=$[$n1+$l]
    g_id=$[$n1%7]
    if [ $g_id -eq 0 ]
    then
        g_id=7
    fi
    echo $g_id
}

for i in `seq 1 7`
do
    [ -f n_$i.txt ] && rm -f n_$i.txt
done
for i in `seq 1 $n`
do
    name=`sed -n "$i"p $f`
    g=`get_n $name`
    echo $name >> n_$g.txt
done

nu(){
    wc -l $1|awk '{print $1}'
}

max(){
    ma=0
    for i in `seq 1 7`
    do
        n=`nu n_$i.txt`
        if [ $n -gt $ma ]
        then
            ma=$n
       fi
    done
    echo $ma
}

min(){
    mi=50
    for i in `seq 1 7`
    do
       n=`nu n_$i.txt`
       if [ $n -lt $mi ]
       then
           mi=$n
       fi
    done
    echo $mi
}

ini_min=1
while [ $ini_min -le 7 ]
do
    m1=`max`
    m2=`min`
    ini_min=m2
    for i in `seq 1 7`
    do
        n=`nu n_$i.txt`
        if [ $n -eq $m1 ]
        then
           f1=n_$i.txt
        elif [ $n -eq $m2 ]
        then
          f2=n_$i.txt
        fi
    done
    name=`tail -n1 $f1`
    echo $name >> $f2
    sed -i "/$name/d" $f1
    ini_min=$[$ini_min+1]
done

for i in `seq 1 7`
do
    echo "$i 组成员有:"
    cat n_$i.txt
    echo
done

shell习题-计算单词重复次数


将文件内所有的单词的重复次数计算出来,只需要列出重复次数最多的10个单词。

 

参考答案:

假设文档名字叫做a.txt

sed 's/[^a-zA-Z]/ /g' a.txt|xargs -n1 |sort |uniq -c |sort -nr |head

redis持久化rdb和aof


redis如果不把数据做持久化,则是把数据存储在内存里面的,所以速度很快。而持久化的目的是为了保证数据安全。redis提供了两种持久化的方案:rdb和appendonly(简称aof)。

简单讲,rdb形式就是把具体的数据(key以及value)存到到一个文件中;而aof这种是把操作过程以日志的形式存到一个文件里,类似于mysql的bin-log。

rdb,需要定义dir,也就是数据所存放的目录,其实aof文件也会放到这个目录下面,而dbfilename则定义了rdb文件的名字。配置文件中有一个参数“save”来定义redis按照什么样的规则把内存中的数据刷新到磁盘上的rdb文件里。当然我们也可以用命令“save”或者“bgsave”来手动把内存里面的数据更新到磁盘上。如果想要关闭rdb持久化,可以直接把save参数的值设置为空,即save “”,或者在redis-cli命令行里面执行:config set save “”.

aof,有一个参数是控制它的开关。“appendonly yes” 只有这个是yes时,才会在dir目录中生成一个aof文件,文件名字默认是appendonly.aof,当然我们可以用appendfilename参数去修改它。

对于aof文件,如果我们不做特殊操作,它会无限制增长,以至于把磁盘撑爆。如果业务对redis数据没有那么高的要求的话,可以不用开启aof。另外有一个方法可以实现aof文件的优化,就是执行命令 BGREWRITEAOF,这样就会重写aof文件,最终将aof文件的体积减小。这个过程可能会耗费一定的资源,建议在凌晨执行。

最后,再来总结一下。rdb并不会实时把内存数据写到磁盘中,意外断电时会丢一部分数据的,但是aof就安全得多,它几乎是实时记录日志的,通过参数appendfsync控制,默认everysec是一秒记录一次。两种持久化的方式是可以并存的,当数据恢复时,以aof优先。

学习和求职心得


我是安徽人,2014年6月大学毕业的,2015年5月结婚了,一直在上海工作,第一份工作是做sharepoint开发和windows运维的。说实话,2015年6月份我换工作找linux运维,没人要我,一家公司开4.5k愿意要我,因为工资太低,不能养家糊口,最后选择了上海一家电商公司当网管,当时想着先挣钱,再通过培训学习linux。

之后了解了尚观、达内的linux培训都得一万多,而且每个周末都得去,家里不可能没有事情的,还是算了吧,最后在2015年的9月30报名阿铭linux,才三千多,卧槽,也太便宜了吧?

内容也都挺丰富的,十一回来之后正式开始学习,真是计划赶不上变化,老婆怀孕了,辞职休息,家人也不在上海,我还得照顾老婆,后来公司网络有点问题,上海联通访问美国的站点丢包,国际链路不稳定造成的,北京领导找了一个vpn代理商,搞了一个月没搞好,还把公司的网络搞断了几次网,把我给坑了,不仅没有拿到年终奖,还被公司警告了,写工作改进计划,领导为什么找这个傻逼公司过来?现成的资源明明可以很容易解决,最后一晚上用IPsec VPN搞定了,黑锅我来背,有苦说不出啊。

工作日我尽量在公司加班学习linux,每天赶10号线 最后一班地铁回家,老婆天天骂我不关心她,不照顾她,想学点知识真的不容易啊,还好,后来老婆不吐了,自己可以做点饭了,也理解我一些了,我才有时间学习,到今天2016年3月12日,已经拿到几份linux相关的offer,待遇也比网管好一些,感谢铭哥的课程,内容相当棒,真是很实用,感谢政超和廖鑫,在我找工作前修改简历并给我做了电话面试,还要感谢拍拍贷的面试官,人真好,我刚开始面试一直被打脸,按照他的方法去准备,果然好多了。

回到正题,找工作的准备工作:

一、找工作前铭哥的课程尽量看完,就算不深入,也得了解,面试官啥都问,负载均衡、高可用、监控、自动化运维、Nosql,最重要的是linux基础知识。

二、找工作前要把论坛里面的求职心得看看,看的越多越好,越细越好,这个是很多同学面试总结的经验啊,我也只看了一部分,确实很有用。

三、简历要做好,要吸引人,否则hr筛选简历,连面试机会都不会给你,注意,简历上面写熟悉和了解的知识点一定要很清楚,我遇到面试官一条一条问的情况,被别人打脸了,坑自己啊,另外,一定要有自己的项目,我就写的公司的6台基于阿里云的slb负载均衡,两台web和两台mysql主从,一个nfs和一台监控,实际上我根本不知道服务器在哪里,到底是什么架构。

四、笔试题发到群里面,同学帮忙,尤其是很多不会的,你要知道,笔试题没做好,面试官对你的印象和评价就不会高,工资可能就会低。

面试过程中会问到的问题太多了,能记得住的,写出来一点,答案大家自己网上查查,多少要能说几句,我写的答案未必对,仅供参考。

一、linux基础,ssh作用远程登录+执行命令 目录的x权限代表=cd + ls ,vim g G 行首行尾  curl + 域名 测试网站 200正常,301跳转,403 forbidden。

二、linux上面的服务,常见服务tomcat、ftp等等可以搭建,nfs共享可以存放代码和图片,供两台web取用。

三、nginx负载均衡基本上每次面试都会问到,upstream转发,ip_hash算法,nginx的session保持,再次访问转发到后台同一台web,联想到memcache的session保持,nginx负载均衡和lvs负载均衡有什么区别?lvs模式和算法?heartbeat和keepalived有什么区别?

四、redis和memcache有什么区别?redis支持数据持久化,保存数据到硬盘,重启数据不丢失,redis的value内可以存放sets、hash等多种类型数据。

五、apache和nginx做web服务器什么区别?怎么做域名限制?怎么做黑白名单?看内部教材书,实际上tomcat和windows上的IIS也可以做web服务器。

六、突然来一句,你用的mysql是什么版本的?这个回答错了,可以立马走人了,我就是啊,回答错了,常见是mysql常见5.1和5.6的,apache2.2的,php 5.4,nginx1.8。

七、监控你用的什么?我说nagios,监控哪些些东西?系统的服务和load,还可以监控一台主机是dead或者live,怎么自己定义监控系统负载?shell写好监控脚本,添加到nagios中,内核数是8,load是10,需要报警吗?不需要,8个电话厅,8个人在打电话,2个人在等待,load是10,未必需要报警,只是对系统性能影响不好,那load多少需要报警?我也不知道现在,大家自己查吧?你平常都是怎么监控和处理问题的?

八、一个技术总监让我现场写一个shell脚本,修改一个目录下所有文件名,都加上日期,手心都是汗,压力山大。

注意,面试过程中,你只需要记得,尽量去说,不太清楚了,就说让我想一下,然后说是怎样怎样的,但是不确定,实在不会的,就说记不清忘记了,让面试官进入下一个问题,千万别拧眉头不说话,那样很尴尬,也会影响自己的后面发挥的,切记。

跳槽的同学,有一个问题面试一定会被问到?就是你为什么重新找工作?或者为什么跳槽?针对我个人情况我是这样回答的,公司业务量小,客户少,系统稳定,基本上没事做,自己自学了很多东西,在公司也用不上,希望找个事情多一点的公司,在实践中去深入的理解,另外,我个人定位是未来3到5年从事Linux系统运维工作,想找个大点的平台长期稳定发展。

面试官听了之后,会是什么感觉呢?应该会觉得这孩子技术不错,另外也会长期稳定做linux运维工作,如果是这样,那这个问题回答的就算是很好了。

面试过程中,心态一定要好,抱着必死的态度,最坏的结果莫过于这场面试失败,既然这样,那就不必紧张了,大家就一起交流交流技术吧,对方想了解你的技术和实力,那你不妨问问他们的业务和运维团队以及未来的发展状况。注意,我把面试过程中遇到的问题都记下来,如果脑子记不住,干脆拿张纸记,回去查答案,不断积累面试经验,为什么这样做呢?

因为我发现很多面试官问到的问题竟然是相同的,因为linux能拿出来吹牛的就那么几个重要的知识点,就这样,多面试,多积累,面试自然就有经验了。说实话,我休假五六天,安排了十几场面试,还有一些安排不过来,我只去了前十家,后边的没时间去了,也没有必要去了,我相信如果前十家我全部失利,按照我的这种方法,在失败中不断总结,不断学习,后边十家全部安排上,也一定会有面试通过的。心态一定要好,在打击中成长,这是你最痛苦时候,是你成长最快的时候,也是最关键的时候,更一定要扛住。至于死地而后生,这一招是我通过面试的绝招,分享给大家。

从桌面维护到linux运维


这是13期学生的一篇求职心得分享。

我是一个在面试时,不太适合弄过多水分的人,诚恳的还是诚恳的好。

学习猿课3个月了,最近面试了七八份工作,都是带有一点吹水成分(那就是不诚恳呗),可是吹也不太会吹,吹得不太好(不懂得做一个很好的陈述)。

感谢13期的同学和铭哥,杨同学说过:有一身好技术,但不懂得推销自己,尽力将自己卖得更好的价钱,加上不是所有千里马都遇到好伯乐。面试过程有些回答错了当时自己都浑然不知,或者答不上,也许是自己小学的语文是最差,不善于总结,和小时候的营养种种原因,总之领悟性不高。

另外,目前自己年龄接近30,记性不大好,有时候忘记了之前接触过的东西,都要网上search一下或者看看文字总结的笔记。现在学习的知识不能完全熟悉,特别是通过配置优化方面和原理很长、一些服务上的细节。

我从2012年开始断断续续自学Linux,公司samba服务器上的细化配置是我自学时候成功搭建使用的。shell脚本,还有vsftpd,dns,postfix都搭建过,都是通过网上找资料来胡乱成功搭建。

出现系统故障在度娘上找解决方法,解决不了就重装,也曾去过一些线下教育机构咨询过,比如,广州尚观linux收费–五位数起步、广州柏图linux收费好像是8k多,但因为价格太过昂贵,有点犹豫。

11月底到12月收听了铭哥公开课和答疑课,觉得不错,后来在2015年12月15日决心在猿课上报铭哥课程就一直很用心学习,只要坚持努力就会有奇迹发生。所幸的是,我终于在多次莫打滚爬中成功拿到了一份入职offer,虽然对方给的薪资不高,但能转型做运维的工作这个机会对于我来说也算是一个好开始。3个月试用+五险一金,转正只有月薪7k+五险一金,还有平时的什么评级绩效和补贴。

小时候读书不好,所以与高中无缘,继而进入到了中专读书。原来在中专时候linux早已诞生生应该有十年(读大专时候才知道有Linux),目前的学历不是统招的大专(从学历上始终还是比别人差人一等),而是全日制的成人大专,那时候还考了CCNA的证书。

毕业后干过1年电信维护员,干了接近6年的桌面维护,自从报名铭哥课程后才真正觉醒。现在回想起来,年轻时悔恨自己没有好好学习,只顾着玩耍。从读书到出来工作了这么久是多么的愚昧,让自己的光阴白白流逝。也许是,当时没感受到生活压力吧。时间过去了追不回来,以后的生活还需要继续,所以为自己争气,为家人争气,这次我不能输!

谨以此文献给曾经年少不懂事的我和其他有类似经历的朋友们!青春真的值得大家珍惜,千万不要来这世上白走一遭!

shell习题-备份etc下面文件


设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式”yymmdd_etc.tar.gz”,yy为年,mm为月,dd为日。

 

参考答案:

#!/bin/sh 

if [ ! -d /root/bak ]
then
    mkdir /root/bak
fi
prefix=`date +%y%m%d`
d=`date +%d`
if [ $d == "01" ]
then
    cd /etc/
    tar czf  /root/bak/$prefix_etc.tar.gz ./
fi

shell习题-给文档增加内容


在文本文档1.txt第5行(假设文件行数大于5)后面增加如下内容:

# This is a test file.

# Test insert line into this file.

 

参考答案:

sed -i "5a # This is a test file.\n# Test insert line into this file." 1.txt