嘘~ 正在从服务器偷取页面 . . .

面经


八股

image-20230220155020210

面经

第一篇

面经第一篇

默写交叉熵和softmax:

import numpy as np

def cross_entropy(y, y_hat):
    # n = 1e-6
    # return -np.sum(y * np.log(y_hat + n) + (1 - y) * np.log(1 - y_hat + n), axis=1)
    assert y.shape == y_hat.shape
    res = -np.sum(np.nan_to_num(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat)))
    return round(res, 3)

def softmax(y):
    # 防止输入增大时输出为nan,每个数都减去最大值,这样所有的数都<=0,值域<=1
    y_shift = y - np.max(y, axis=1, keepdims=True)
    y_exp = np.exp(y_shift)
    y_exp_sum = np.sum(y_exp, axis=1, keepdims=True)
    return y_exp / y_exp_sum

if __name__ == "__main__":
    y = np.array([1, 0, 0, 1]).reshape(-1, 1)
    y_hat = np.array([1, 0.4, 0.5, 0.1]).reshape(-1, 1)
    print(cross_entropy(y, y_hat))
    # y = np.array([[1,2,3,4],[1,3,4,5],[3,4,5,6]])
    # print(softmax(y))

求反向传播:

https://blog.csdn.net/weixin_41722370/article/details/83590276

卷积参数量和计算量:

https://www.jianshu.com/p/c2a0ba5bb3d1

考虑偏置,参数量:$(K\times K \times C_{in}+1)\times C_{out}$

计算量:MAC(Multiply Accumulate)乘加次数,考虑偏置为:$C_{in}\times K\times K \times H_{out} \times W_{out} \times C_{out}$,解释:每有一个点,就做$C_{in}\times K\times K$次计算,共有$H_{out}\times W_{out}\times C_{out}$,由于一个MAC包括一次乘一次加,做卷积计算是做n次乘法,n-1次加法,再加上一次偏置,正好是n次乘法,n次加法

FLOPs(floating point operations),浮点运算量,指计算量,跟乘加次数有点不同,考虑偏置为:$(C_{in}\times 2\times K\times K)\times H_{out}\times W_{out} \times C_{out} $,和MAC不同,所以每有一个点,就做$C_{in}\times 2\times K\times K$次计算,

FLOPs不考虑偏置:$(C_{in}\times 2\times K\times K-1)\times H_{out}\times W_{out} \times C_{out} $

Python的多线程,为什么说他是伪多线程,什么时候应该使用?

https://blog.kamino.link/2021/03/01/Python-Multithreading-in-detail/

https://www.cnblogs.com/luyuze95/p/11289143.html

求mIoU:

目标检测的IoU,会有两个检测框:

#RT:RightTop
#LB:LeftBottom
def IOU(rectangle A, rectangleB):
    # 关键是先求出交集的宽和高
    W = min(A.RT.x, B.RT.x) - max(A.LB.x, B.LB.x)
    H = min(A.RT.y, B.RT.y) - max(A.LB.y, B.LB.y)
    if W <= 0 or H <= 0:
        return 0;
    SA = (A.RT.x - A.LB.x) * (A.RT.y - A.LB.y)
    SB = (B.RT.x - B.LB.x) * (B.RT.y - B.LB.y)
    cross = W * H
    return cross/(SA + SB - cross)

进程和线程的区别?

看了一遍排在前面的答案,类似”进程是资源分配的最小单位,线程是CPU调度的最小单位“这样的回答感觉太抽象,都不太容易让人理解。

做个简单的比喻:进程=火车,线程=车厢

  • 线程在进程下行进(单纯的车厢无法运行)
  • 一个进程可以包含多个线程(一辆火车可以有多个车厢)
  • 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
  • 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
  • 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
  • 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
  • 进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
  • 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-”互斥锁”
  • 进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”

作者:知乎用户
链接:https://www.zhihu.com/question/25532384/answer/411179772
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

第二篇

https://www.jianshu.com/p/c713c2022ab0

第三篇

https://blog.csdn.net/qq_41375609/article/details/115473923

第四篇

https://www.nowcoder.com/discuss/802751?source_id=discuss_experience_nctrack&channel=-1

https://www.nowcoder.com/discuss/765855?source_id=discuss_experience_nctrack&channel=-1

https://www.nowcoder.com/discuss/765025?source_id=discuss_experience_nctrack&channel=-1

https://www.nowcoder.com/discuss/761647?source_id=discuss_experience_nctrack&channel=-1

https://www.nowcoder.com/discuss/781895?source_id=discuss_experience_nctrack&channel=-1

https://zhuanlan.zhihu.com/p/86103903

https://cloud.tencent.com/developer/article/1426223?from=article.detail.1368191

刷题

单调栈

leetcode 654最大二叉树

使用单调栈来优化时间复杂度的想法非常妙!

递归与回溯

剑指 Offer 12. 矩阵中的路径

  • 可以通过临时赋值省去check二维数组的空间
  • 关键是明白什么时候标记,什么时候回溯取消标记:进入当前节点,且该节点满足条件,标记;该节点处理完毕之后,回溯取消标记
  • 可以不使用for循环,而是对于超出边界的在子递归节点中判断

dp

acwing整数划分

n = int(input())
f = [[0 for i in range(n+1)] for j in range(n+1)]
for i in range(n+1):
    f[i][0]=1
for i in range(1,n+1):
    for j in range(1,n+1):
        f[i][j]=(f[i-1][j]+f[i][j-i])%(1e9+7) #边界条件从递归公式来找,看递推公式可能出现哪个
        # 边界条件
print(int(f[n][n]))
  • 边界条件从递推公式来找
  • 有时候上边是不行的,就得从头分析最开始是从哪一步递归而来的

简历

你要根据投递的公司适当调整你的项目内容

不是所有的都适合放上去的

不然容易变成坑自己的点

暑期的时候没有实习,就把论文展开讲一下

看一下STAR法则

看了几个简历分享几个小点可以改改,一个是实习经历或者项目经历不一定要按时间顺序排列,可以把你觉得做的好的有的讲的往前放,面试官都没空看简历的一般从上往下问。然后模板还是简单点好,用超级简历就行了,不要搞的太花哨。然后项目经历啥的用数字来表示效果会更直接,比如某某算法提升了10个点,或者帮公司运营什么,社群增长了1000人这个样子举例子

投递

有些部门根本就不招人,投的时候要注意

国企

1.第一年薪资30w以上卷王之选:招商银行总行、中国银联总部、航天一院一部总体/战武、头部券商/公募基金
2.WLB+户口+薪资的相对性价比之选:四大行总行(建总最高、中总最低)、人寿研发/数据中心、农行天研、邮储苏研、中金所技术
3.每个月收入与当地房价比大于1的超高性价比之选:中物院(绵阳9院)、中西部政策行省分(国开门槛最高,进出口招人最少,农发招人最多)

笔试注意点

image-20230328210430945

赛码网可以通过查看提交记录来看

耗时和占用内存,优化了半天,最后也没做出来,不如少两个循环,就差点就过了

携程第三题

x的处理是对的,但是根据复杂度可以看到还很富裕,所以说y可以直接遍历,其实y遍历的话是很小的,通过直接算的方式反而容易出错,遍历的话就不重不漏了

image-20230329212646897

https://www.nowcoder.com/discuss/470695167230595072

python读入数据超时的解决办法

#python 不要用input
#用sys.stdin.readlines()
#获取后面的不要split 再map 值
#用 int(line[2:-1])

文章作者: dch
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 dch !
评论
  目录