秋招

1. 拼多多 笔试挂

9.1笔试

2. 百度 oc

9.3笔试

第二题为找最短路径的变形,牛客上运用dfs+dp
最短路径笔试时没有写完

int main(){
    int n;
    cin>>n;
    vector > grid;
    for(int i=0;i  tmp;
        for(int j=0;j>a;
            tmp.push_back(a);
        }
        grid.push_back(tmp);
    }
    int dx[4]={0, 0, 1, -1};
    int dy[4]={1, -1, 0, 0};
    vector > res(n, vector(n, 9999));
    map candi;
    map visited;
    visited[0]=0;
    res[0][0]=0;
    int x=0, y=0;
    int k=n*n;
    while(k-->0){
        for(int i=0;i<4;i++){
            int tmpx=x+dx[i], tmpy=y+dy[i];
            if(tmpx>=0 && tmpx=0 && tmpy

9.27
一面 35min
实习经历
项目经历
在基础这块问的比较多:python 深浅拷贝,可变与不可变类型、原因,垃圾回收技术(不了解)
linux了解什么命令
传统机器学习,树模型了解什么
手撕代码:口述给定一个字符串,找出第一个重复字符,时间/空间复杂度
手撕三选一:两个栈实现一个队列、1-50中找重复数字、链表反转

二面 45min
自我介绍
实习经历
搜索是否了解,搜索一个query,如何召回
手撕:给定n个数,找出pair的个数,满足 x&y >= x^y
(差点凉凉,提示后写出)位运算原理,统计为1的最高位,如果x, y的最高位相同,则成立。
反问

三面 40min
有点像hr面
自我介绍
实习经历——bert模型介绍
实习中的难点
最近经历过最有压力的事情
本科通信,研究生为什么转计算机
研究生转计算机有没有遇到什么困难
导师的优点、缺点
反问

3. b站 笔试ak无后续

9.4笔试 1+1+0.8
第三题:大鱼吃小鱼,每个数可以吃掉右边第一个比它小的数
input:
3
5 4 3
output: 1
排除降序

n = eval(input())
fish = list(map(int, input().split()))
fish.append("#")
stack, cnt, pre = [], 0, len(fish)
while fish:
    if fish[0] == "#":
        fish.append(fish.pop(0))
        if len(fish) == pre:
            break
        else:
            pre = len(fish)
            cnt += 1

    stack.append(fish.pop(0))
    while fish[0] != "#" and int(stack[-1]) > int(fish[0]):
        stack.append(fish.pop(0))
    fish.append(stack.pop(0))
    while stack:
        stack.pop()
print(cnt)

3. 腾讯 笔试挂

9.6笔试

第一题: 找山谷,用了一次最长上升子序列和一次最长下降子序列

思路:求出每个数值 i 的最长下降子序列([0, i])与最长上升子序列([i, n) )
进而求出vec[i]==vec[j] min(left, right)*2;

#include
using namespace std;
const int maxn=500;
int a[maxn];
int f1[maxn];
int f2[maxn];
int N;
int ANS;
int main(){
    scanf("%d",&N);
    for(int i=1;i<=N;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=N;i++){
        f1[i]=1;
        f2[i]=1;
    }
    for(int i=2;i<=N;i++){
        for(int j=1;ja[j]){
                f1[i]=max(f1[i],f1[j]+1);
            }
        }
    }
    f2[N]=1;
    for(int i=N-1;i>=1;i--){
        for(int j=N;j>i;j--){
            if(a[i]>a[j]){
                f2[i]=max(f2[i],f2[j]+1);
            }
        }
    }

    for(int i=1;i<=N;i++){
        ANS=max(ANS,f1[i]+f2[i]-1);
    }
    cout<

第二题: 牛顿法求0值
暴力法,

第三题: 概率密度积分

第四题: 用了字典树来比较
排序转字符串放set里面ac
第五题: 两次dijistra算法,输入数据可能有重边,得取重边最小值

4. 粉笔教育 oc

9.8 一面 1h
自我介绍
实习经历提问
项目提问:有关crf, 维特比算法,crf与马尔科夫模型区别
手撕代码:二叉搜索树的插入与删除
智力题:圆内三个点在同一个半圆内的概率
反问

9.14 二面 1h
自我介绍
实习经历
bert, transformer细节:mask区别
LR 损失函数与似然函数的关系,从先验角度解释L1, L2正则化
正则化方法
手撕代码:白板编程
旋转数组,找出给定数字的下标,若不存在返回-1;
dp, 给定一个词典,判断一个字符串能否被词典数分割。

9.17 三面 1h 20min

  1. 实习经历
  2. 项目经历
  3. 场景题:模型在训练集上loss很小,在测试集上loss很大,可能原因与解决方法。——来自不同的数据集,有偏,数据归一化;过拟合解决方法
  4. 梯度消失、原因——LSTM高速路径,激活函数
  5. 决策树划分策略——ID3, C4.5, CART树
  6. bagging, xgboost异同:
    1)随机森林的抽样比:随机抽取一定数量的数据集,随机抽取特征属性
      a)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(这种采样方式称为bootstrap sample方法),作为该树的训练集;
    随机森林进一步在决策树训练时加入随机属性选择:
      b) 如果有M个输入变量,每个节点都将随机选择m(mM均方根
      因此随机森林即有样本随机性(来自bagging的boostrap sampling)又有特征随机性。
    2)xgboost 对比 GBDT,以及防止过拟合措施:
    1、损失函数中加入了正则化项,相当于预剪枝
    2、shrinkage
    即在迭代中为树的叶子结点乘以一个权重衰减稀疏,以削弱每棵树的影响力,为后面的树留下提升空间(gbdt 学习率)
    3、列采样,即特征采样。
    有按层采样和建树之前随机采样两种方式。
    其中按层采样是在同一层的结点进行分裂之前随机选择部分特征,对这些部分特征进行遍历,寻找最优切分点,而不用遍历全部特征。
    建树之前随机选择特征是在建树之前就选择部分特征,在之后的结点的分裂中,只使用这部分特征
    4、行采样,也可以理解成样本采样。
    利用的是bagging思想,训练时选取部分样本进行训练,增加了树的多样性
  7. 智力题:
    1)从1到100层,抛两个鸡蛋,求最小次数;
    2)拓展:从1到200层,抛三个鸡蛋,求最小次数;
    3)给定一个庞大的数据流,求其中位数——优先队列与堆也只能把时间复杂度降低到logn
  8. 手撕代码:给定一个IP段与对应城市,数据量在200-200万之间,求一个IP段的归属城市。——花了很长时间理解题意,最终用二分勉强做了出来。
  9. 最近看过论文,学习途径,推荐相关部分知识

5. 美团 一面挂

9.11 一面
无自我介绍,面试官先介绍了自己~
实习经历——延伸,训练集数据不均衡时处理方法

  1. 剩采样——调整样本权重
  2. 训练过程中采样,比如每种样本都抽取5000,放回取样不断调整子训练集
    项目经历
    为什么用双向LSTM而不用双向RNN
    bert后接RNN和CNN相比,哪个更好?
    手撕代码:给定一个数组,找出所有能被17整除的整数对,保证有解,返回二维数组
    给定一个数组A和B,定义同一位置A[i]>B[i],则加1;限定B的位置不变,调整A的位置使得最终结果最大,返回最大值

9.14 挂,应该为对项目与实习经历不满意

网易 三面挂

9.12 笔试 1+1+0.7+0.3
t3: 给定一个字符串,返回满足“abcxyz”各偶数位的最长字符串,0也为偶数
leetcode 1371
哈希表方法,记录每个元素出现次数
考虑到不在“abcxyz”中的字母str(s).find(s[i])会返回-1, 因此写成
1 << string("abcxyz").find(s[i])+1>>1

int findTheLongestSubstring(string s) {
        unordered_map m{{0, -1}};
        int res = 0, n = s.length(), cur = 0;
        for (int i = 0; i < n; i++) {
            cur ^= 1 << string("aeiou").find(s[i]) + 1 >> 1;
            if (!m.count(cur)) m[cur] = i;
            res = max(res, i - m[cur]);
        }
        return res;
    }

t4: 男女匹配,来源于裸二分图匹配

9.19一面
自我介绍
项目与实习经历
multi head self attention: 相比单头优势,映射到多个子空间,学习到不同空间的特征;减少参数
seq2seq模型
概率题:0-1不均衡随机数生成,生成0,1均衡的随机数生成器
手撕代码:二叉树的最长直径;给定一个整型数组,求乘积为正的最长子数组的长度。——dp算法

9.23 二面:
手撕代码:
https://www.jiuzhang.com/solution/maximum-average-subarray-ii/

9.29 三面:
全程围绕一道场景题:
110接线员接到的大部分电话都是有关车辆违规停放需要挪放的,希望和网易合作,通过机器人实现关于车辆违规的智能问答。
这种问题最好自己先考虑一下需求,针对需求提出后续解放方案。

58同城 oc

9.16 一面:
自我介绍、兴趣爱好、在校表现
项目+实习经历
SVM相关:目标函数,损失函数——合页损失,与LR在线性可分数据集上的区别/作用区域
dropout增强泛化原理——dropout原理,实现方法
深度神经网络层数加深的好处
BN实现需要的参数

9.16 二面:
自我介绍
实习
bert, transformer相对于word2vec优势, 以及elmo
L1, L2正则化作用、原理
xgboost
linux相关(涉及)
场景题:类似于大数据流中,选出前100个点赞数靠前的直播间

京东 oc

9.17 一面 1h20min
自我介绍
论文详细介绍
项目
实习——关注在数据集构建(广告架构部主要处理数据相关)
决策树
GBDT系列算法
树模型与LR区别(大概,对类别特征、连续值处理问的很详细)
手撕代码:给了一个云文档,在文档里面写寻找两个字符串的公共子序列)
怼了简历···

  1. 类别特征:
    1)转化成one-hot编码
    问题:a.只能采用o vs rest进行切分,在类别很多的情况下,类别数量很少,导致增益很小,可以理解成不平衡的切分与不切分没有区别,相当于浪费了类别特征;b. 影响决策树的学习。划分成多个零碎的子空间,而决策树利用统计信息,在统计信息很少的情况下,决策树的学习会变差。
    2)类别特征的最优切分——LGB
    采用了Many vs many的切分方式,实现了类别特征的最优切分。用Lightgbm可以直接输入类别特征。算法流程为:在枚举分割点之前,先把直方图按每个类别的均值进行排序;然后按照均值的结果依次枚举最优分割点。
    3)转化为数值特征
    a. embedding
    b. 统计每个类别对应的label(训练目标)的均值

  2. 特征工程——离散值、连续值处理
    离散只能用自然数表示,是统计得到的。连续是按测量或者计量到得到数,比如各种传感器采集得到的数。
    连续性特征:[4654.1313, 11, 0, 4564654, …]——归一化,标准化
    离散型特征::[‘AskReddit’, ‘Jokes’, ‘politics’, ‘explainlikeimfive’, ‘gaming’]
    在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
    1)离散特征的增加和减少都很容易,易于模型的快速迭代
    2)稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展
    3)离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰
    4)逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合
    5)离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力
    6)特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问
    7)特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

  3. 树模型 vs 逻辑回归
    1)逻辑回归是将所有特征变换为概率后,通过大于某一概率阈值的划分为一类,小于某一概率阈值的为另一类;决策树是对每一个特征做一个划分。
    ②逻辑回归着眼于整个数据集的拟合,对数据整体的全局结构的分析优于决策树,但缺乏探查局部结构的机制;而决策树采用分隔的方法,能够深入数据内部,对局部结构的分析优于逻辑回归,但一旦分层形成将切断不同层面节点间可能存在的关系。
    逻辑回归通常情况下不需要考虑数据量的问题;而决策树由于切分,节点数目增多样本数量降低,分层数目收到数据量的限制。
    逻辑回归可用于高维稀疏数据场景,比如ctr预估;决策树变量连续最好,类别变量则稀疏性不能太高。
    ⑤逻辑回归更适合线性关系,能够找到适合线性分割(输入特征x与logit之间是线性的,除非对x进行多维映射);而决策树可以找到非线性分割,对线性关系效果较差。
    ⑥逻辑回归对极值比较敏感,容易受极端值的影响;而决策树在这方面表现较好。
    ⑦逻辑回归原则上可以提供数据中每个观察点的概率;而决策树只能把挖掘对象分为有限的概率组群,结果更为粗略。
    ⑧逻辑回归模型较为简单,不容易产生过拟合。决策树容易产生过拟合,通常通过剪枝避免产生过拟合。
    ⑨逻辑回归既可以用于回归问题,也可以用于分类;而决策树通常用于分类问题。
    ⑩如果数据中只有单一的一条决策边界,并且不需要与坐标平行,那么逻辑回归的效果会更好。同时如果数据中包含多个决策边界,那么决策树的效果会更好。如果有多条决策边界,并且不平行与坐标,通常使用支持向量机。

9.25 京东二面 50min

  1. 自我介绍
  2. 项目和实习经历
  3. 手撕代码:二叉树翻转;口述给定一个字符串,求去除k个字符子字符串的最大值
  4. 场景题:给定大文件,记录单词,统计前10个出现频率最高的单词:设计数据处理方法,将相同的单词放在一起,提示说这一步可以用哈希散列
  5. C++ osi七层模型、多态、进程与线程:
    物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
    tcp/ip模型:数据链路层、网络层、传输层、应用层
    进程和线程
  6. linux查看内存使用的命令,开发机相关命令
  7. spark, redies是否了解(不了解), hive表查看分区

360 oc

9.18 一面 1h20min

  1. 介绍transformer, self-attention
    为了解决这一由长序列到定长向量转化而造成的信息损失的瓶颈,Attention注意力机制被引入。Attention机制跟人类翻译文章时候的思路有些类似,即将注意力关注于我们翻译部分对应的上下文,重点寻找源语句中相对应的几个词语,并结合之前的已经翻译的部分作出相应的翻译。这样,当我们decoder预测目标翻译的时候就可以看到encoder的所有信息,而不仅局限于原来模型中定长的隐藏向量,并且不会丧失长程的信息。
    缺点:RNN受顺序结构训练方式速度受到限制;且在句子序列太长,词语之间距离较远时效果较差
    Self-Attention则利用了Attention机制,计算每个单词与其他所有单词之间的关联,在这句话里,当翻译bank一词时,river一词就有较高的Attention score。利用这些Attention score就可以得到一个加权的表示,然后再放到一个前馈神经网络中得到新的表示,这一表示很好的考虑到上下文的信息。
    这里面Multi-head Attention其实就是多个Self-Attention结构的结合,每个head学习到在不同表示空间中的特征,如下图所示,两个head学习到的Attention侧重点可能略有不同,这样给了模型更大的容量。
    另一解释:Attention机制的实质其实就是一个寻址(addressing)的过程:给定一个和任务相关的查询Query向量 q,通过计算与Key的注意力分布并附加在Value上,从而计算Attention Value,这个过程实际上是Attention机制缓解神经网络模型复杂度的体现:不需要将所有的N个输入信息都输入到神经网络进行计算,只需要从X中选择一些和任务相关的信息输入给神经网络。
    attention矩阵相乘如果是单条数据
  2. bert改进——roberta, albert
  3. bert时finetune,冻结embedding层参数原因
  4. bert效果优于lstm的原因: 同上
  5. 手撕代码:求二叉树的最长路径:注意异常值,主要是负值
  6. 解释crf
  7. l1, l2正则化,以及当前l2使用更加广泛的原因
    L2正则化可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量。由于输入和权重之间的乘法操作,这样就有了一个优良的特性:使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。 L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。。这样做可以提高模型的泛化能力,降低过拟合的风险。
  8. SVM能否用梯度下降求解
    可以!!!
    sklearn 的linearsvc用的是梯度下降法,而sklearn.svm则使用的是传统的smo的求解方法,这种方法的问题难以扩展到数量巨大的样本上,而使用这种梯度下降法求解的svm则可以比较容易的扩展到海量的样本上,毕竟内存不够可以增量训练。
  9. bert模型相对比较重,因此上线时可以有什么trick

9.28 360 hr面
360搜索部门:360安全卫士 导流机制,用户转化率较高,四级分发机制、收入型
第二曲线,0-1 or 1-n

滴滴 一面挂

9.22 一面
一面很奇怪的面试体验,大概是简历面
迟到20分钟,可能kpi了

新浪 二面后无后续

9.28 一面 35min
未答上来
C++:深浅拷贝,智能指针

9.30 二面
面试后面试官表示通过,但无下文

微软 四面挂

10.12 一面
手撕代码

  1. 找出峰值数字,返回下标
  2. 旋转数组,找出最小值
  3. 求二叉树最大路径和

10.12 二面
手撕代码:
字符串转化成ip地址, 如“2552552552” -》 “255.255.255.2”,“255.255.25.52”

  1. stl模型库
  2. unordered_map map 区别,内部结构:
    1)map 有序,unordered_map 无序
    2)map内部结构为红黑树,二叉搜索树,空间占用大(存储子节点);unordered_map 内部结构为哈希表,查询效率高 O(1)
    unordered_set vs set: 相似,key-key键值对
  3. 线程内部,虚拟地址转化为物理机真实地址的方法:
    32位CPU上,运行进程时,将4G大小的虚拟内存映射到2G大小的真实地址上,分段分页
  4. hdfs 对象:

三面 10.13
自我介绍
手撕代码:含有重复数字的非减数组,找出目标数字出现的次数
给定一个0,1字符串,要求0和1的个数相同,返回满足条件的最长字符串长度;
智力题:海盗分金币问题,改成sleep sort

四面 10.27

快手 oc

9.24 一面
面试官很nice,发现我的经历与nlp相关,很耐心问了一些机器学习相关的知识

10.1 二面

你可能感兴趣的:(秋招)