zoukankan      html  css  js  c++  java
  • 一次面试记录 标签: 面试数据分析数据算法 2017-04-26 13:47 99人阅读 评论(0) 收藏

    前言(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.0520p1+10p2=5 ; 再用随机数的 numpy.random.rand() 数值模拟计算就行了, 跳过。

    编程题

    1. 请在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');
    
    
    
    
    
  • 相关阅读:
    当当网css代码
    当当网代码6
    游戏UI设计(2.1)窗口之父CXWnd的封装
    英语(1)备考——词汇
    UML的五类图(UML笔记)
    Sieve of Eratosthenes[ZT]
    std::map初体验
    “非计算机相关专业”的定义
    英语(1)备考——翻译
    使用回调函数发送自定义“消息”
  • 原文地址:https://www.cnblogs.com/actanble/p/7128677.html
Copyright © 2011-2022 走看看