Contents
  1. 1. 面试概况
  2. 2. 面试内容
    1. 2.1. 第一轮面试:NLP相关
    2. 2.2. 第二轮面试:编程

面试概况

面试时间:2016年3月1日 14:00-15:07

面试形式:电话面试

面试数量:两轮面试;

面试官:一位NLP面试官,一位code面试官;

面试内容

第一轮面试:NLP相关

1.简单介绍自己

2.从简历中挑选两个最典型的项目

(1)事件抽取

简单介绍事件抽取;

Q:事件的定义?

A:这个也是国内所做项目涉及的概念,一种结构化知识的方法。

N元模型》Hybrid HMMs(这个Hyrbid HMMs是我自己改进的)

Q:Hybrid HMMs与HMM有何区别?

A:如实回答。

(2)医疗社区用户生成数据分析

简单介绍工作内容;

Q:对NB,KNN,DT,SVM各种模型的理解?

A:介绍对NB的理解,先验概率,条件概率,联合概率,后验概率。。。

Q:NB有哪些不足?

A:没答上来。(面试官:条件独立性假设导致的不足)

Q:如何用SVM做多分类?

A:1 vs. rest

Q:一共多少类?具体如何做的?

A:10类,十个svm

Q:这样会导致什么问题?

A:数据不均衡

Q:如何解决?

A:欠采样,从其余9类中抽部分数据

Q:还有一种方式?

A:1 vs 1

Q:对,这种方式比第一种方式要好

Q:如何对SVM优化?

A:SMO

Q:讲讲SMO原理?

A:线性问题》拉格朗日对偶化》拉格朗日因子向量》每次选择2个进行拉格朗日因子进行优化,把大问题分解为小问题;

Q:介绍项目中的几种表示方式?

A:如实回答。

Q:实验结果怎么样?

A:几种模型中SVM最好,几种知识表示方式取决于数据量,数据量少的情况下term-based最好,领域词典次之,lda-based最差。

Q:有没有尝试几种模型的组合?加权重;几种知识表示方式的组合?连接;

A:没有。

Q:给一批新闻语料,想办法把他们按地域分类(北京,上海,深圳)

A:从中提取名词,人物,地点,根据这些特征进行分类

Q:如何获取地点知识库?

A:半结构化知识,结构化知识,非结构化知识。

百度百科,新闻,社交网络(面试官提示:采用地图API获取地点信息)

Q:假设你追一个女孩子,表白成功的概率为p,如果表白被拒绝,你的信心下降,表白成功的概率会衰减为p = λ*p,问表白成功所需次数的期望值是多少?

A:不会。

Q:介绍科研成果

A:如实回答。

6.向面试官提问

(1)团队规模?

计划扩展到20人,目前有7人。

(2)具体工作?

主要负责搜狐新闻的推荐、分类、质量评估等;

(3)入职培训?

入职有集体培训,组内每周五有讨论;

第二轮面试:编程

使用熟悉的语言,编程实现链表的插入,删除和查找;

听到题目的时候有点蒙,对于这道题目的印象还停留在学习C语言的时候(09年)。

【下边的代码是我面试时候写的,存在很多不足,都加了相应注释,正确版本也不难,可以参考我以前写的《二叉树的一些操作》。】

关于语言,从Python和C中选择了C,涉及到指针的时候,还是使用C更舒服。

【完成功能的过程中遇到一些坎坷,不过面试官最后的评价:编码风格,命名以及缩进都不错。】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
typedef struct{
int val;
Node * next;
} Node;//很久没有使用C自定义结构体,有些不熟练

Node* insert(Node *head, int val) {//【面】插入返回值应为bool,而非链表指针Node *
//【面】如何从尾部插入?【我】一直next,知道next为空。【面】改进?【我】循环链表,尾部指向头部(错误)【面】增加一个tail结点
Node *tmp = (Node *)malloc(sizeof(Node));
tmp->val = val;
tmp->next = head->next;//【面】为什么把head改成head->next?【我】取决于第一个元素是否有值。
head->next = tmp;
return head;
}

bool deleteNode(Node *head, int val) {

if (head->next == NULL) return false;

Node *tmp = head;
while (tmp->next != NULL) {
if (tmp->next->val == val) {
Node *tmp_del = tmp->next;
tmp->next = tmp_del->next;
free(tmp_del);
return true;
}
tmp->next = tmp->next->next;
}
return false;
}

bool findNode(Node *head, int val) {//【面】这个findNode应该返回Node *,而不是bool

if (head->next == NULL) return false;

Node *tmp = head;
while (tmp->next != NULL) {
if (tmp->next->val == vall) {
return true;
}
tmp->next = tmp->next->next;
}
return false;
}
Contents
  1. 1. 面试概况
  2. 2. 面试内容
    1. 2.1. 第一轮面试:NLP相关
    2. 2.2. 第二轮面试:编程