算法,运维

Posted shaozheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法,运维相关的知识,希望对你有一定的参考价值。

CMDB面试题

1.你们公司为啥要做CMDB

为了推行运维自动化,方便年底进行资产统计

2.CMDB的三套设计方案是啥?

agent方案,ssh类方案,saltstack方案

3.你们公司选用的方案是啥?并简述方案架构

agent方案
采集的脚本使用subprocess模块下的getoutput方法,执行linux的相关命令采集数据,然后将采集的数据通过requests模块发送给服务端的API端,API获取数据后,进行二次分析,然后将分析好的数据入库,最后起一个djangoweb服务,然后将数据最终展现到web界面,管理员就可以通过web界面对数据进行管理

4.你负责哪个模块?遇到了哪些问题?怎么解决的?

负责采集端数据的采集,在采集的时候,主要是linux的相关命令不太熟悉
解决的方法就是 查文档或者问运维

数据结构和算法

1.请手写一个快速排序算法?

def partition(data, left, right):
    tmp = data[left]
    while left < right:
        while left < right and data[right] >= tmp:
            right = right - 1
        data[left] = data[right]

        while left < right and data[left] <= tmp:
            left = left + 1
        data[right] = data[left]

    data[left] = tmp

    return left


def quick_sort(data, left, right):
    if left < right:
        mid = partition(data, left, right)
        quick_sort(data, left, mid)
        quick_sort(data, mid + 1, right)

2.请手写单链表的增删改查算法



class Hero(object):

    def __init__(self, no=None, name=None, nickname=None,pNext=None):
        self.no = no
        self.name = name
        self.nickname = nickname
        self.pNext = pNext


def add(head, hero):

    cur = head

    while cur.pNext != None:
        if cur.pNext.no > hero.no:
            break
        cur = cur.pNext

    # cur.pNext = hero

    hero.pNext = cur.pNext
    cur.pNext = hero

def getAll(head):
    cur = head

    while cur.pNext != None:
        cur = cur.pNext
        print("编号是%s, 名字叫%s, 外号是%s" % (cur.no, cur.name, cur.nickname))


head = Hero()

hero1 = Hero(1, '宋江', '及时雨')
add(head, hero1)

hero2 = Hero(2, '林冲', 'xxx')
add(head, hero2)

hero4 = Hero(4, '晁盖', '玉麒麟')
add(head, hero4)

hero3 = Hero(3, 'zekai', 'xxx')
add(head, hero3)

getAll(head)

3.贪心算法
现在去超市买东西,结账时,要求支付一定金额的现金,那么,按照生活常识,我们肯定会选择尽可能少的拿出钱的张数去满足支付金额,比如说:应付628元,这时候,我的钱包里有足够多的以下面额的钱:100,50,20,10,5,2,1,那么,我肯定会拿出6张100块的,1张20的,1张5块的,1张2块的,最后再拿出1张1块的,6*100+20+5+2+1 = 628;那么我用10张就可以愉快的完成支付了,正常情况下,绝对不会拿628张1块的去支付或者其它。


money = [100,50,20,10,5,2,1]

def howManyCash(money, num, waitToPay):

    count = 0

    for i in range(num):
        useMoney = waitToPay//money[i]

        count += useMoney
        waitToPay = waitToPay - useMoney*money[i]

        print("需要面额为 %d 的 %d 张" % (money[i],useMoney))
        print("剩下需要支付 RMB %d 
" % waitToPay)
    print("总共需要%d张RMB
"%count)
howManyCash(money, len(money), 628)

4.请写一个冒泡算法

def bubble_sort(li):

    for i in range(len(li)):
        for j in range(len(li)-1-i):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]

5.请写一个归并算法

def merge(li, low, mid, high):
    i = low
    j = mid + 1
    ltmp = []
    while i <= mid and j <= high:
        if li[i] <= li[j]:
            ltmp.append(li[i])
            i += 1
        else:
            ltmp.append(li[j])
            j += 1

    while i <= mid:
        ltmp.append(li[i])
        i += 1
    while j <= high:
        ltmp.append(li[j])
        j += 1

    li[low:high+1] = ltmp


def mergeSort(li, low, high):
    if low < high:
        mid = (low + high) // 2
        mergeSort(li, low, mid)
        # mergeSort(li, mid + 1, high)
        print("合并之前:",low, mid, high, li[low:high+1])
        # merge(li, low, mid, high)
        # print("合并之后", li[low:high+1])

6.请写一个计数排序

def count_sort(li):
    count = [0 for i in range(10)]

    for i in li:
        count[i] += 1

    li.clear()

    for n, num in enumerate(count):
        for j in range(num):
            li.append(n)

7.mysql的索引底层采用的数据结构?

B+树

以上是关于算法,运维的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

十七年运维老兵万字长文讲透优维低代码~

快看那个运维妹子在学算法二分查找

如何标记从卷积神经网络的分割算法生成的图像片段?

从搜索文档中查找最小片段的算法?

C语言100个经典算法源码片段