zoukankan      html  css  js  c++  java
  • 2015-08-11 [今日头条]--数据抓取和处理工程师--1面

    时间:2015-08-11 10:00 ~ 11:30

    地点:知春路甲48号盈都大厦B座11层今日头条

    1. 二分查找算法

    我先写了一个递归的,然后面试官又让我写一个非递归的。

    递归:

    int BinarySearch(int A[], int from, int to, int target)
    {
        if (from < to)
            return -1;
    
        int m = (from + to) / 2;
    
        if (A[m] == target)
            return m;
        else if (A[m] < target)
            return BinarySearch(A, m + 1, to, target);
        else
            return BinarySearch(A, from, m - 1, target);
    }    

      

    非递归: 

    int BinarySearch(int A[], int size, int target)
    {
        int left = 0;
        int right = size - 1;
        int m;
        
        while (left <= right) {
            m = (left + right) / 2;
            if (A[m] == target)
                return m;
            else if (A[m] < target)
                left = m + 1;
            else 
                right = m - 1;
        }
    
        return -1;
    }

    2. sizeof 类 的大小:

    class A {
        const int a;
    }
    
    // 问sizeof(A) 是多少?

    答案是4个字节。面试官这里想考察虚函数的原理。

    该类型的题目总结在这里:C++ 对象的sizeof问题

     3. 写一个Singleton模式,以及需要注意的问题。

    class Singleton {
    
    publicstatic Singleton * GetInstance()
        {
            if (_instance == NULL)
                _instance = new Singleton();
            return _instance;
        }
    
    private:
        static Singleton * _instance;
    }

    这个是最简单的Singleton,需要注意的时多线程情况需要使用锁。

    Singleton的总结:设计模式--Singleton

    4. 算法题:有两个文本文件,文件A是一个关键字文本,该文本中包含10w个关键字(可以使中文哦);文件B是一个内容文本,例如新闻吧,大概占硬盘1GB空间,也就是说非常大。问题是遍历文件B,输出所有遇到的文件A中的关键字的位置。(包括子串)

    例如:

    文件A 

    china
    abc
    abcdef
    abdd
    xyz

     文件B

    china is abcdef, xyz is aabcdef, ....
    0 9 16 24

     注意:需要包括子串,例如"aabcd" 就匹配到了关键字"abc"。

    我的想法如下,(我只考虑到了英文的情况),对文件A中的关键字建树。如下,

              a                                            c                              x

              b                                            h                              y

        c [1]         d                                  i                               z[1]

                  d[1]     e                             n

                             f[1]                         a[1]

    注:[1]表示从根节点到当前节点是一个单词。

    接下来遍历文件B中的字符串,遍历过程如下:

    当前字符   当前是否为一个单词   之后的合法的字符

    c             否                          h

    h             否                          i

    i             否                          n

    n             否                          a

    a                                      所有根节点,即a,c,x

    i             否                          NULL 非法,  因为没有为"i"的根节点

    s             否                          NULL 非法,因为没有为"s"的根节点

    a             否                          b

    b             否                          c

    c                                       所有根节点,即a,c,x 或者 继续 d

    d            否                           d,e

    e            否                           f

    f                                        所有根节点,即a,c,x

    ...          ...                           ...

    但是我没有考虑到中文。面试官提醒了好几次。可以将中文转换成拼音,然后按照上面的方法继续。但是中文拼音是有歧义的,如 "jishi" -> "计时", "及时", "即使"等。这时候需要在每个单词后面缀上对应的关键字,用来排除歧义。

    例如,

    j

    i

    s

    h

    i  -> "计时", "及时", "即使"

    对于中文的情况还需要完善下。

    5. 算法题:有N个数组,每个数组最多包含M个整数,每个数组都是排好序的。

    [0] 1 2 3 9999 999999

    [1] 0 10000 111111

    [2] 3 7 9 11 22 33 44 555

    [3] 5 9 100 112 333

    求所有数组中出现的整型。

    我的答案是两个数组依次merge。

    面试官的答案是:每次merge N个数组。 

    6. 算法题:一个字符串 "abcdcddeefefghi...",求其中连续的三个字符的最大长度。

    例如:题目中的最长的连续的三个字符是:“ddeeffef”,长度为8。

    需要补充。

    7. 看多的C++的书籍。

    《C++ Primer》

    《C++程序设计语言》

    《Effective C++》

  • 相关阅读:
    DNNClassifier 深度神经网络 分类器
    浏览器对MP4视频 帧宽度 高度的兼容性
    UnicodeEncodeError:'latin-1' codec can't encode character
    文件夹下 文件计数
    the largest value you actually can transmit between the client and server is determined by the amount of available memory and the size of the communications buffers.
    the “identity” of an object
    广告特征 用户特征
    如果一个维度全覆盖,则有效维度应该对该维度全覆盖
    a high-level neural networks AP
    使用 LDA 挖掘的用户喜好主题
  • 原文地址:https://www.cnblogs.com/lovers/p/4721823.html
Copyright © 2011-2022 走看看