博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2015-08-11 [今日头条]--数据抓取和处理工程师--1面
阅读量:5326 次
发布时间:2019-06-14

本文共 2227 字,大约阅读时间需要 7 分钟。

时间: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个字节。面试官这里想考察虚函数的原理。

该类型的题目总结在这里:

 

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

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

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

Singleton的总结:

 

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

例如:

文件A 

chinaabcabcdefabddxyz

 文件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++》

 

转载于:https://www.cnblogs.com/lovers/p/4721823.html

你可能感兴趣的文章
vim中文帮助教程
查看>>
MySQL基础3
查看>>
RxJS & Angular
查看>>
面向对象(多异常的声明与处理)
查看>>
MTK笔记
查看>>
ERROR: duplicate key value violates unique constraint "xxx"
查看>>
激活office 365 的启动文件
查看>>
无法根据中文查找
查看>>
[简讯]phpMyAdmin项目已迁移至GitHub
查看>>
转载 python多重继承C3算法
查看>>
【题解】 bzoj1597: [Usaco2008 Mar]土地购买 (动态规划+斜率优化)
查看>>
css文本溢出显示省略号
查看>>
git安装和简单配置
查看>>
面向对象:反射,双下方法
查看>>
鼠标悬停提示文本消息最简单的做法
查看>>
课后作业-阅读任务-阅读提问-2
查看>>
面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>