数据工程师-面试总结1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Zoe_Su/article/details/53750089

数据工程师-面试总结1:


面试流程总结:

1.笔试(5题选2题)
2.面试
    2.1 自我介绍
    2.2 关于笔试题目进行提问
    2.3 关于简历项目进行提问

笔试题目及答案(Python):

1.给一列无序数组,求出中位数并给出算法的时间复杂度

def max_heapify(A,i,heap_size):
    l=i*2
    r=2*i+1
    if l<=heap_size and A[l]>A[i]:
        largest=l
    else:
        largest=i
    if r<=heap_size and A[r]>A[largest]:
        largest=r
    if largest!=i:
        A[i],A[largest]=A[largest],A[i]
        max_heapify(A,largest,heap_size)

def build_max_heapify(A):
    heap_size=len(A)-1
    for i in range(heap_size,-1,-1):
        max_heapify(A,i,heap_size)

def heap_sort(A):
    N=len(A)-1
    heap_size=N
    build_max_heapify(A)
    for i in range(N,0,-1):
        A[i],A[0]=A[0],A[i]
        heap_size-=1
        max_heapify(A,0,heap_size)
    return A

if __name__=='__main__':
    a=[2,3,4,5,7,9,0]
    b=heap_sort(a)
    median=b[len(b)/2]

2.strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

def strstr(str1,str2):
    len1=len(str1)
    len2=len(str2)
    if not str2:
        return 0
    if len1<len2:
        return None
    for i in range(len1-len2+1):
        k=0
        j=i
        while (str1[j]==str2[k] and k<len2):
            if j==len1-1 or k==len2-1:
                break
            k+=1
            j+=1
        if (k==len2-1) and str1[j]==str2[k]:
            return i

    return None

3.将数字n因式分解,求其所有素数(质数)因子。

from math import sqrt
def isPrime(num):
    if num == 1 or num==0:
        return False
    k = int(sqrt(num))
    for j in range(2, k+1):
        if num%j == 0:
            return False
    return True

def decompose(num):
    num_list=[]
    for i in range(2,num):
        if isPrime(i) and num % i ==0:
            num_list.append(i)

    return num_list
  1. 翻转字符串但不翻转单词
def reverseWords(s):
    s=list(s)
    def reverse(s, begin, end):
        for i in xrange((end - begin) / 2):
            s[begin + i], s[end - 1 - i] = s[end - 1 - i], s[begin + i]

    reverse(s, 0, len(s))
    i = 0
    for j in xrange(len(s) + 1):
        if j == len(s) or s[j] == ' ':
            reverse(s, i, j)
            i = j + 1
    str_reverse=''.join(s)
    return str_reverse

5.一栋楼有N阶楼梯,兔子每次可以跳1、2或3阶,问一共有多少种走法?

def allmethod(stairs):
    if isinstance(stairs,int) and stairs>0:
        basic_num={1:1,2:2,3:3}
        if stairs in basic_num.keys()
            return basic_num[stairs]
        else:
            return allmethod(stairs-1)+allmethod(stairs-2)+allmethod(stairs-3)
    else:
        return Flase

项目提问:

1.CNN 卷机的作用?
图像维度高,从而网络层级复杂,每层节点多,此时权重参数过多。CNN采用局部关联和共享权重,降低了参数的数量级,同时卷机操作可以从图像中提取特征,同时保留像素间的空间关系。
2. 1*1卷积核的作用是什么?
主要作用:1.实现跨通道的交互和信息整合。2.进行卷积核通道数的升维和降维。

3.不同的receptive field大小有什么影响?
窗口越小,训练效果越小,但是训练越复杂。(LeNet 到AlexNet ,大卷积到小卷积)

4.不同图像大小如何进行相似度比较?
图像需要先resize 成同一个大小的图片。

5.回归树的生成。
在训练数据所在的输入空间中,递归地把每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。
1). 选择最优切分变量j和切分点 s,求解:

minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]

遍历所有变量j,对固定切分变量j扫描切分点s
2).用选定的(j,s)划分区域并决定相应的输出。
R1(j,s)={x|xjs},R2(j,s)={x|xjs}

cm=1NmxiRm(j,s)yi

3). 继续对两个子区域调用1) 2)直到满足停止条件。
4).将输入空间化成M个子区域 R1,R2,...RM ,生成决策树:
f(x)=m=1McmI(xRm)

6.信息增益的公式。
数据集为D,|D|表示样本个数,有K个类 Ck,k=1,2,3...K |Ck| 为属于类 Ck 的样本个数,则 Kk=1|Ck|=|D|
设特征A有n个不同的取值 {a1,a2,...an} ,对应地将D划分为 D1,D2,...Dn |Di| Di 的样本个数,设子集 Di 中属于 Ck 的样本的集合为 Dik |Dik| Dik 的样本个数。则:

H(D)=k=1K|Ck||D|log|Ck||D|

H(D|A)=i=1n|Di||D|k=1K|Dik||Di|log|Dik||Di|

g(D|A)=H(D)H(D|A)

7.tf-idf的理解,如何得到tf-idf?
tf-idf(term frequency-inverse document frequency)是一种统计方法,用于评估一字词对于一个文件集或一个语料库中的其中一个文件的重要程度。tf(term frequency)是指某一个给定的词语在该文件中出现的次数。idf(inverse document frequency)是一个词语普遍重要性的度量。

tfi,j=ni,jknk,j

上式中 ni,j 表示词 ti 出现在文档 dj 中的次数,分母表示文件 dj 中所有词出现的次数之和。
idfi=log|D|1+|{j:tidj}|

上式中|D|表示所有文件总数, {j:tidj} 表示词 ti 出现的文档个数。
tf=idfi,j=tfi,jidfi

8.文本的特征有哪些?

猜你喜欢

转载自blog.csdn.net/Zoe_Su/article/details/53750089