zoukankan      html  css  js  c++  java
  • 算法,运维

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

  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11890388.html
Copyright © 2011-2022 走看看