八股

面经
第一篇
默写交叉熵和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
刷题
单调栈
使用单调栈来优化时间复杂度的想法非常妙!
递归与回溯
- 可以通过临时赋值省去check二维数组的空间
- 关键是明白什么时候标记,什么时候回溯取消标记:进入当前节点,且该节点满足条件,标记;该节点处理完毕之后,回溯取消标记
- 可以不使用for循环,而是对于超出边界的在子递归节点中判断
dp
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院)、中西部政策行省分(国开门槛最高,进出口招人最少,农发招人最多)
笔试注意点

赛码网可以通过查看提交记录来看
耗时和占用内存,优化了半天,最后也没做出来,不如少两个循环,就差点就过了
携程第三题
x的处理是对的,但是根据复杂度可以看到还很富裕,所以说y可以直接遍历,其实y遍历的话是很小的,通过直接算的方式反而容易出错,遍历的话就不重不漏了

https://www.nowcoder.com/discuss/470695167230595072
python读入数据超时的解决办法
#python 不要用input
#用sys.stdin.readlines()
#获取后面的不要split 再map 值
#用 int(line[2:-1])