面试记录

这个月还是发生了不少事情了,面试,换房子,真快。

还是决定了换工作,工作这两年我知道自己做什么的时候速度快,我知道我做什么速度慢,我知道我喜欢什么不喜欢什么,两年的售前也让我意识到有些东西是性格和兴趣综合决定的结果,性格太难改变了,兴趣太难找了,现在我很高兴我知道自己的性格,不适合做售前,不适合去做销售,我骗不了别人也说服不了别人,我觉得挺好,这算是认识了自己,可能这个认识来的有些太晚了。兴趣这东西吧,我其实自己应该知道自己喜欢什么了,哈哈哈。我觉得我这么多年做了好多事情,我那天惊喜的发现自己还搭过热血江湖的服务器,现在还有客户端和服务器的package。两年对自己了解的差不多了,我应该可以确定我的目标了,剩下就是时间的问题了。
最近发生的事情还是让我惊讶的,新来的同事是从医院出来的医生,产品基本上很快就玩起来了,最重要的是走到哪儿都有医院,有合作商想挖走。对比一下我自己就不是这样了,我还真的是没什么发展。其实说起来毕竟人家是五年的医科大学毕业,应该的。但是心里其实是不平衡,我也想凭我自己的本事,自己的知识变成这样,我可以不去,但是我一定有机会去。
决定了换工作也是突然的决定,觉得自己还是应该给自己一个答案,我还是应该去试试,我在这个公司自己闭门造车也是造车,出去大公司造车也是造车,可能比我自己造车强吧,毕竟我遇到的事情就不一样了,问题也多了。我的专业是技能,我应该在这个那个领域继续走下去,我的价值大概应该在这里,所以我决定来了,我觉得我找到了自己的价值所在,就像同事的价值很明确,医学知识和人脉。我的价值其实在公司也很明确,去尝试不同的开源架构和解决方案,应付公司的目前产品的问题。
面试对数据中心还是挺感兴趣的,但是是个应用运维岗位,我和面试官聊了,很直接,我想从运维进架构师,面试官和我说的是,走到架构去需要可以写的了代码,要有能力,我目前不行,差得好多。
算是我自己的一个总结吧,两年还行。可能其他公司的岗位和行业更好一些吧。去个IT公司吧。


面试题

  1. 有一个字符串s=“kjdfdsfevsdf”,使用python单独输出每个字符并在后面加上”th”.

    1
    2
    3
    s = "asdfaurhgauh"
    for i in s:
    trueprint(i+'th')
  2. 数据库问题,增删改查。基本上都没答上来。select语句对数据库内容Where做一个筛选。

  3. 提取b.txt中的所有域名,awk我写的grep。
    grep -E -o “www.[[:alpha:]]*.com” ./b.txt | sort | uniq -c | sort -nr
    awk -F / ‘{print $3}’ b.txt | sort | uniq -c | sort -nr
    我写的这个唯一个不好的地方就是不能匹配数字的部分,如果域名有数字就提取不出了。其实中间如果全部用正则也可以,但是正则会特别的长。

  4. nginx的反向代理配置文件是不是能看懂,考了一个upstream模块,考了一个weight的分配,考了一个 proxy_pass模块的调用。

  5. 描述Raid0 , 1 ,5的区别,但是没让说raid10。

  6. 描述如果你有多的资源如何搭建高可用和高并发,这种题目其实还挺无聊的,高并发靠负载均衡分流,四层转发七层代理。高可用靠的冗余和故障的快速切换。没什么特别的架构,web服务也就是keepalived + lvs。硬件的话F5直接搞,虽然我没见过,但是也听说过。

  7. 容器问了一个私有的register,不记得叫什么名字,但是我知道Docker官方有文档。软件名称是Harbor

  8. k8s没什么可说了,昨天晚上听了一堆的k8s的理论,一个集群简单而要三个网络,要不是设计思路清晰,网络就已经是一锅粥了。软件的架构真的是越来越复杂了,现在的网络里面不是桥桥桥,就是NAT转换。

  9. 查看Linux系统CPU,MEM,NET-IO,DISK-IO的命令。top | htop | free -m | iostat -a

  10. ext4如果分区超过2T如何操作。这题估计本来是问Ext3文件系统的,改的。Ext4随便分了已经。

  11. 如何理解top命令中的load average的含义
    这个问题本来是聊到了服务器性能的观察,我说到了top命令查看系统的当前状况,所以后续有了这个问题,其实在系统中,这三个数值的计算方式是通过CPU进程队列的长度来进行计算的,具体的数值及计算公式网上有很多,等我不记得了我在去找资料吧,这种东西已经是死知识了,到处都是。
    我说说我的理解,这三个数值其实是system load average,是系统的负载状态,其实是描述了系统的压力变化趋势,计算的CPU参数主要是Running Process & uninterreptable Process , 其实就是正在运行不可中断运行的进程,这些是CPU的工作量。还有一个衡量的参数实际上是IO,IO的指标也会体现在三个不同时间点的计算中。
    如何查看或者分析是我一直理解的不透彻的点,记录一下。单项指标的观察不足以解决系统的问题,需要搭配其他的工具进行分析才可以。
    看三个参数的变化趋势,1,5,15三个时间点:

    • 如果1分钟高,但是后面两个都低,说明系统当前的状态是压力高的,但是是暂时的。
    • 如果是三个数值都高,可以说明可能是系统的性能不足或者有问题需要解决。
    • 如果1分钟的数值低,但是15分钟的数值高,说明系统的压力会慢慢平稳下来,不会持续太久。
  12. ps命令的使用

    • ps aux
      • To see every process on the system using BSD syntax
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
        root 1 0.1 0.0 186736 10160 ? Ss 09:32 0:03 /sbin/init
        root 2 0.0 0.0 0 0 ? S 09:32 0:00 [kthreadd]
        root 3 0.0 0.0 0 0 ? I< 09:32 0:00 [rcu_gp]
        root 4 0.0 0.0 0 0 ? I< 09:32 0:00 [rcu_par_gp]
        root 6 0.0 0.0 0 0 ? I< 09:32 0:00 [kworker/0:0H-kblockd]
        root 8 0.0 0.0 0 0 ? I< 09:32 0:00 [mm_percpu_wq]
        root 9 0.0 0.0 0 0 ? S 09:32 0:00 [ksoftirqd/0]
        root 10 0.0 0.0 0 0 ? I 09:32 0:00 [rcu_preempt]
        root 11 0.0 0.0 0 0 ? I 09:32 0:00 [rcu_sched]
        root 12 0.0 0.0 0 0 ? I 09:32 0:00 [rcu_bh]
      • ps axjf / ps -ejH
        • To print a process tree
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
          1 555 555 555 ? -1 Ssl 0 0:00 /usr/bin/gdm
          555 585 555 555 ? -1 Sl 0 0:00 \_ gdm-session-worker [pam/gdm-launch-environment]
          585 789 789 789 tty1 789 Ssl+ 120 0:00 | \_ /usr/lib/gdm-x-session gnome-session --autostart /usr/share/gdm/g
          789 791 789 789 tty1 789 Sl+ 120 0:01 | \_ /usr/lib/Xorg vt1 -displayfd 3 -auth /run/user/120/gdm/Xautho
          791 848 789 789 tty1 789 S+ 0 0:00 | | \_ xf86-video-intel-backlight-helper intel_backlight
          789 939 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gnome-session-binary --autostart /usr/share/gdm/gree
          939 970 789 789 tty1 789 Sl+ 120 0:04 | \_ /usr/bin/gnome-shell
          970 1032 1032 789 tty1 789 Sl 120 0:00 | | \_ ibus-daemon --xim --panel disable
          1032 1035 1032 789 tty1 789 Sl 120 0:00 | | \_ /usr/lib/ibus/ibus-dconf
          1032 1200 1032 789 tty1 789 Sl 120 0:00 | | \_ /usr/lib/ibus/ibus-engine-simple
          939 1086 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-rfkill
          939 1088 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-smartcard
          939 1089 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-clipboard
          939 1090 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-xsettings
          939 1091 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-housekeeping
          939 1092 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-mouse
          939 1093 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-power
          939 1094 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-screensaver-proxy
          939 1095 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-sound
          939 1099 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-color
          939 1101 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-keyboard
          939 1103 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-print-notifications
          939 1104 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-sharing
          939 1105 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-a11y-settings
          939 1106 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-wacom
          939 1107 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-datetime
          939 1108 789 789 tty1 789 Sl+ 120 0:00 | \_ /usr/lib/gsd-media-keys
  13. Buffer 和 Cache的区别

    • Buffer:A buffer is somthing that has yet to be “written” to disk.
    • Cache:A Cache is something that has been “read” from the disk and stored for later use.

    free 或者 top 命令中的buffer 和 cache:

    • Buffer: 作为Buffer-cache的一部分内存,是块设备的读写缓冲区。
    • Cache: 作为Page-cache的一部分内存,是缓冲文件系统的cache。
    • Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。
    • Cache(缓存)则是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。
      答案来源链接:
      知乎
  14. iptables的链表结构:
    表:

    • Filter 一般的过滤功能

    • NAT NAT功能的相关设置

    • Mangle 用于对特定数据包的修改

    • Raw 一般设置不需要iptables过滤及监控的流量,提高性能使用。

      • Raw表的使用:
        iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j NOTRACK
        iptables -t raw -A PREROUTING -s 1.2.3.4 -p tcp --sport 80 -j NOTRACK
        iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT

      链:

    • PREROUTING 数据包进入路由表之前的Hook函数

    • INPUT 数据包经过路由表后进入本机的数据

    • FORWARD 数据包经过路由表后不是本机的数据

      • 前面三个经过路由表的选择,后面两个不会再次经过路由表
    • OUTPUT 数据包是本机产生的,向外发送

    • POSTROUTING 发送到网卡接口之前

  15. 如何观察网卡的流量及tcpdump的使用

文章目录
  1. 1. 面试题