您的位置:首页 > 职场人生

一次面试记录

2017-04-26 13:47 218 查看

前言(Prefore)

找工作的时候因缘巧合面试了一个数据岗, 直接一条龙面试了5轮; 但是最终还是被刷下来了, 但是并不觉得可惜; 原因后面有叙述

过程和背景

首先, 那个公司人事通知我这个面试, 这个面试就是普通的交流群获取的, 时间0425面

0面_笔试 ( 1 h )

数据岗, 考了些数据分析的基础, 概率和数理统计、时间和序列分析、相关决策算法的基础理解和一些简单需求的编程设计

统计学基础

(不知道占多少分, 花了15min的样子)

关于前面的统计学这一块儿, 都是涉及的简单东西,比如F/t 检验的分布, 期望基础题, 移动平滑的意义; 贝叶斯分析的环境等

SQL

问题: 有下面这个表格要求返回每个ID中满足条件的ID,和数量

例如给出下面这个情况; 模拟生成A,B表; creatAB.sql; 后面有,要求编辑 c.sql输出答案。

+--------+-------+-------+-------+-------+
| ID     | item1 | item2 | item3 | item4 |
+--------+-------+-------+-------+-------+
| Zhang3 | ABC   | AA    | BB    | EE    |
| Li4    | AA    | BB    | DD    | EE    |
| Wang5  | A     | B     | C     | DD    |
| Zhao6  | BB    | BCD   | CC    | EE    |
| Gao7   | A     | AA    | AAA   | AAAA  |
| Xia8   | AA    | EE    | BB    | C     |
+--------+-------+-------+-------+-------+


下面是要求的答案; 在附件中运行 createAB.sql; 运行c.sql即可

####要求输出答案 <-- 添加新列A中字段在B中的数量###
+--------+-------+-------+-------+-------+----------+
| ID     | item1 | item2 | item3 | item4 | new_line |
+--------+-------+-------+-------+-------+----------+
| Zhang3 | ABC   | AA    | BB    | EE    |        3 |
| Li4    | AA    | BB    | DD    | EE    |        4 |
| Wang5  | A     | B     | C     | DD    |        1 |
| Zhao6  | BB    | BCD   | CC    | EE    |        3 |
| Gao7   | A     | AA    | AAA   | AAAA  |        1 |
| Xia8   | AA    | EE    | BB    | C     |        3 |
+--------+-------+-------+-------+-------+----------+


答案: c.sql

drop table if exists c;
create table c as(
select * from (
select ID,item1 as item from a
union all
select id,item2 as item from a
union all
select id,item3 as item from a
union all
select id,item4 as item from a
) as c
);
select A.* ,new_line  from(
(select id,count(id) as new_line from c
where c.item in (select item from b)
group by id) as d
join  A
on A.id = d.id
)


这是我写的答案; 不知道怎么, 她不满意; 后来面试还问了一堆外链接内连接, sql函数编写的事儿;她说这个题是用转置来解答的; 我半天没理解, 她还说了我一顿…现在一想什么转置啊, 是联合,肯定是她说错了; 我当时说这个用 pandas 的数据框处理非常简洁。可以自己编译一个函数; 她接着说你难道不会在sql编写函数吗,我无言以对。

基础算法设计

这里就不细致讲了, 非常简单; 就是说设计这样的一个抽奖活动并模拟, 让用户抽奖的钱币回报率大约是4%, 例如10000块的抽奖, 可以抽100次, 每次可以获取200元, 100元, 100-500随机积分(积分没有代价); 百分百中奖, 其中钱币中奖率5%, 但是用户钱币回报率是4%

很简单了 联立连个等式就是了 p1+p2=0.05 、20∗p1+10∗p2=5 ; 再用随机数的 numpy.random.rand() 数值模拟计算就行了, 跳过。

编程题

请在10000个无序数中找到最大的两个数。

我写了下面这个回答;

#coding = utf-8
# please find the max two num from 100000 range 0-10000

import numpy.random as nr
import numpy as np

max = 10 ###use 10 need change to 100000
l = [int(10000*nr.rand(1)[0]) for x in range(max)]

ans = list(np.ones(2)) ## max, max2
for i in l:
if(i < ans[1]):
pass
elif(i>ans[1] and i<ans[0]):
ans[1] = i
else:
ans[1] = ans[0]
ans[0] = i

print 'the origin array: ',l
print 'answer : max and cmax',ans


他问我这个时间复杂度是多少; 我说时间复杂度是 2*n; 也就是二十万。

他说不可能, 就算是快排也得n*log(n),大约八十万的样子; 你怎么可能这么快。非要我用代码实现, 我就给他写了如上。他还是不信。

我说这是个非常简单的题目, 不是盲目快排就好; 快排的第二层循环用得二分查找, 把元素查到排序好的数组中期望是logn, 你让我找到最大的两个数就可以了, 我需要把排好的元素进行遍历比较不; 你要是让我找10个甚至100个最大的数, 我肯定就用快排了。

,快排就是把后面待排的数和排好的作比较, 大的依次后移, 二分查找用在比较这个环节, 不用每次都从尾开始比较;;

后来面试问了几个小问题: 比如set, list, HashMap等的特性.

第二个面试算法题, 网上有, 是他第一次考的, 他没满意问了第二道题(上面的)。

我直接用的

题目:给定一个长度为n+1的int数组,其内元素为1到n,数组中除一个元素外其他元素都只出现一次,求重复出现的元素。要求时间小于O(n^2),空间为O(1)。

实际上他问的没有空间复杂度; 我是直接新建一个同样大的空间遍历的; 他说差评。 好吧; 搜到结果了。

//1, BinarySerch
public static int findDuplicate(int[] nums) {
if (nums.length == 0 || nums == null)return 0;
int low = 1, high = nums.length - 1, mid;
while (low < high) {
mid = low + (high - low) / 2;
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] <= mid)
count++;
}
if (count > mid)
high = mid;
else
low = mid + 1;
}
return low;
}
//2、通过位操作得到重复的位,把重复的位相加得到结果。
public int findDuplicate(int[] nums) {
int n = nums.length-1, res = 0;
for (int p = 0; p < 32; ++ p) {
int bit = (1 << p), a = 0, b = 0;
for (int i = 0; i <= n; ++ i) {
if ((i & bit) > 0) ++a;
if ((nums[i] & bit) > 0) ++b;
}
//b>a说明有重复的位
if (b > a) res += bit;
}
return res;
}


第一面 人事大概了解和谈笔试的部分内容

主要问觉得难不难, 以前的工作重点; 最后觉得我的价值观跟他们吻合…扯淡的议一轮

第二面 数据分析部运营部面

主要问得就是对业务的初步了解, 他觉得我可能喜欢技术些; 把我推到了挖掘部

第三面 数据分析部挖掘部面

这个应该是个分析部的研发主管; 问些数据库, 数据结构之类的; 再就是问了些数据比赛的一些经历和算法

第四面 直接主管

对我的作答进行说明; 另外额外问了些问题;

其他略

后记

笔试 – > 人事面 –>数据部(分三个部分) 数据部运营问(需求方) –> 数据部挖掘部 —> 研发总管 —-> 直系主管 —> 总监。

直系主管问得多些, 其他人问得都是不痛不痒的。

为什么说不可惜呢。 因为笔试的时候, 不能上机, 放在一个小屋子里面让我做题; 用户体验比较差了; 明显是编程题, 你不让人上机; 怎么都能写得完整…

附录

SQL 题目文件

creatAB.sql

create database ab;
use ab;

drop table if exists A;
create table A(
ID  char(8),
item1 varchar(8),
item2 varchar(8),
item3 varchar(8),
item4 varchar(9)
);

insert into A values('Zhang3','ABC','AA','BB','EE');
insert into A values('Li4','AA','BB','DD','EE');
insert into A values('Wang5','A', 'B','C','DD');
insert into A values('Zhao6','BB','BCD','CC','EE');
insert into A values('Gao7','A','AA','AAA','AAAA');
insert into A values('Xia8','AA','EE','BB','C');

drop table if exists B;
create table B(
item  varchar(8)
);
insert into B values('AA');
insert into B values('BB');
insert into B values('CC');
insert into B values('DD');
insert into B values('EE');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息