• 算法,运维


    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+树

  • 相关阅读:
    面向对象概述(课堂笔记)
    final
    static方法
    Ubuntu中Qt5.7.0无法输入中文
    Ubuntu中Qt+opencv图像显示
    Ubuntu中Qt新建窗体提示lGL错误
    Ubuntu中Qt5.7.0的安装及opencv2.4.13配置
    Ubuntu16.04删除客人会话
    ffmpeg的安装--opencv视频处理必备
    CentOS+OpenCV图像的读入、显示
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11890388.html
Copyright © 2020-2023  润新知