记一组面试题

1.是否了解线程的同步和异步?

2.是否了解网络的同步和异步?

3.一个数组存放10个数[8,5,3,0,7,1,2,6,4,9] 编程实现这10个数有小到大的排序,找出效率最好的方式

"""
我当时用的是Python的内置函数,现在想想应该自己实现一个堆排序的,这个才是最好的排序方式
堆排序里面的存储结构是数组  逻辑结构是二叉树
"""
def HeapSortMax(lst, n):
    # 找出最大值登顶对顶
    # n = len(lst)
    if n <= 1:
        return lst
    depth = n // 2 - 1  # 这个深度是0~depth
    # 下面开始调整堆 从最后一个非终端节点开始调整
    for i in range(depth, -1, -1):
        topmax = i
        leftchild = 2 * i + 1
        rightchild = 2 * i + 2  # 左右孩子节点
        # 从这三个节点里面选出最大值 还要不能越界才得行
        if leftchild <= n - 1 and lst[leftchild] > lst[topmax]:
            topmax = leftchild
        if rightchild <= n - 1 and lst[rightchild] > lst[topmax]:
            topmax = rightchild
        if i != topmax:
            lst[topmax], lst[i] = lst[i], lst[topmax]
    return lst
def HeapSort(lst):
    n = len(lst)
    for i in range(n):
        lastmesslen = n - i
        # 每次登顶了数组长度就少了一个了
        HeapSortMax(lst, lastmesslen)
        # print(lst)
        if i < n:
            lst[0], lst[lastmesslen - 1] = lst[lastmesslen - 1], lst[0]
            # 这个位置为什么是lastmesslen-1呢?道理很简单
            # 最后一个元素本来就是lastmesslen-1,lastmesslen已经越界了
        # print("ex", lst)
    return lst
if __name__ == "__main__":
    lst = [3, 1, 5, 4, 7, 6, 8, 0]
    # lst = HeapSortMax(lst)
    lst = HeapSort(lst)
    print(lst)

4.找出字符串里面出现最多的字符

def func(str):
    dic = {}
    for el in str:
        if dic.get(el):
            dic[el] = dic[el] + 1
        else:
            dic[el] = 1
    key, value = "", 0 
    for item in dic.items():
        if item[1] > value:
            value = item[1]
            key = item[0]
    return key, value

数据库的相关知识 就是crud

还有一个动态规划的问题 说真的 我一直觉得动态规划是最最最牛逼的算法 我一定要把每一个类型都搞得清清楚楚明明白白透透彻彻。

posted @ 2019-06-21 13:23  Jonathan1  阅读(177)  评论(0编辑  收藏  举报