算法,运维
CMDB面试题
1.你们公司为啥要做CMDB
?
为了推行运维自动化,方便年底进行资产统计
2.CMDB
的三套设计方案是啥?
agent方案,ssh类方案,saltstack方案
3.你们公司选用的方案是啥?并简述方案架构
agent
方案
采集的脚本使用subprocess
模块下的getoutput
方法,执行linux
的相关命令采集数据,然后将采集的数据通过requests
模块发送给服务端的API
端,API
获取数据后,进行二次分析,然后将分析好的数据入库,最后起一个django
的web
服务,然后将数据最终展现到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 \n" % waitToPay)
print("总共需要%d张RMB\n"%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+树