一次面试记录
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.sqlcreate 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');
相关文章推荐
- 记录一次壮烈牺牲的阿里巴巴面试
- 记一次FPGA面试记录,用于自省
- Spring MVC接收参数(Map,List,JSON,Date,2个Bean)(记录一次面试惨状)
- 最近的一次面试记录
- 【面试总结】--记录一次面试经历
- 记录一次壮烈牺牲的阿里巴巴面试
- 记录一次壮烈牺牲的阿里巴巴面试
- 记录一次壮烈牺牲的阿里巴巴面试!
- 记录一次面试经历:参加北京网梯科技发展有限公司的面试经历
- 【java 面试】记录一次“诡异的“CPU 100%问题
- 记录一次壮烈牺牲的阿里巴巴面试
- 记录一次面试
- 记录某公司(简称SMKJ) 的一次面试
- 2011年一次面试的实际记录
- 记录一次壮烈牺牲的阿里巴巴面试
- 记录一次很遗憾的面试经历
- 记录一次面试之旅和失败总结
- 大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)
- 记录我的第一场笔试和电话面试
- 美团面试,面一次,累一次