1.有个特殊的餐厅,对客人的要求是如果要离开餐厅一定要看下餐厅内有没有比你迟进来的人,一定要所有比你迟进来的人离开后你才能离开,有一天甲,乙,丙,丁四个客人先后进入了这家餐厅,那么他们离开的顺序不可能是:E

A: 丙,乙,甲,丁
B: 甲,乙,丙,丁
C: 乙,甲,丙,丁
D: 乙,丙,甲,丁
E: 丁,丙,甲,乙
F: 丁,丙,乙,甲

考点:堆栈
误区:甲乙丙丁不一定一次性全部进入餐厅,一般错在丁第一个出现,说明甲乙丙丁全部一次性入栈

2.在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起冲突的是:F

A: 其中一个DELETE操作,一个是SELECT操作
B: 其中两个都是UPDATE
C: 其中一个是SELECT,一个是UPDATE
D: 其中一个SELECT
E: 其中一个是DELETE,另一个是UPDATE
F: 两个都是DELETE

思路:可以理解为两个事务已经同时选中该行数据,若需要查询、修改的条件字段被删除或修改则会报错;当要删除的记录在数据库中不存在的时候,是不会报错的。都是SELECT也不会报错。

3.众所周知我们所处的宇宙的质能公式是E=mc 2 ,其中c是真空中的光速。和我们的宇宙平行的另一个宇宙meta,研究显示他们使用的质能公式是E=(2+ √3) m
,当一个物体的质量很大的时候,对应的能量E非常大,数据也非常的长。但meta宇宙里面的智慧生物非常的懒,他们只愿意把E取整,然后记录对应的能量E的最后一位整数,比如m=0时,他们会记录1,m=1时,他们会记录3,m=2时,他们会记录3.现在请问当m=80时,他们会记录多少?3

思路:必须高精度计算✔3=1.732050807568877才能找到规律1,3,3

4.页高速缓存是Linux kerne使用的主要的磁盘缓存技术。它允许系统把存放在磁盘上的一些数据保留在内存中,以便减少对磁盘的访问。进程对页高速缓存区中的数据修改之后,数据页被标记为“脏数据”在下列哪些条件下,脏数据不会被写入磁盘?B、F

A: 页高速缓存空间不足
B: 突然断电
C: 变脏以来,太久没有过更新
D: 通过系统调用(sync(),fsync(),fdataasync())来强E: 行对将对快设备的更新同步到磁盘
F: 内存足够大
G: 磁盘足够大

考点:缓存->磁盘

5.设一组初始关键字记录关键字为( 12,15,1,18,2,35,30,11 ),则以 12 为基准记录的一趟快速排序结束后的结果为

挖坑法: 11,2,1,12,18,35,30,15
左右指针法:2,11,1,12,18,35,30,15(左右先后顺序影响答案)
前后指针法:1,2,11,18,15,35,30,12

6.多项式 P(X)=a+bx+cx^2+dx^3 ,对于任意 x ,计算 P(X) 中最少需要用到乘法操作的次数是多少?3

思路:a+bx+cx^2+dx^3=a+x(b+x(c+xd))

7.有一个班31人,女同学15人,男同学16人,现在要玩一个结组游戏,每组由男女两名同学构成,每个同学最多只能在一个组。结组的同学可以到老师那里领100元钱,然后按照预先分配的协议进行分配,钱最小可分单元为1元。未能结组的同学无法领到钱,不允许在组之间传递利益。那么一下命题正确的是:男生和女生可以得到一样多的钱

误区:公平则男女15各50R,一个男0R;博弈则为15个女生99R,15个男生1R,一个男生0R

8.现代的企业是建立在大规模协作的基础上的,员工之间,团队之间,部门之间,企业之间的协作都是成功的重要因素。好的企业在协作上是高效的。以下说法中不合适的是(B

A: 一个项目能容纳的人员是有限的,当增加到一定规模项目进度反而会变慢。
B: 一个项目协作为了办证信息对称,多方参与的情况下直接召集多方在一起开会就能协调好
C: 协作建立的条件包括互补和共赢
D: 能力结构类似的成员之间较多样互补型员工之间更容易产生竞争关系
E: 协作中的权利和责任应当相称
F: 如果有可能的话,信息交互较多的事务更合适在一个团队内或有一个人完成,相较于进行分工。

9.以下程序的运行结果是?A


考点:线程的run()和start()
思路:start()启动线程,这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;run()直接调用则当作普通方法,这时要等待run方法体执行完毕后,才可继续执行下面的代码

10.输入图片大小为200×200,依次经过一层卷积(kernel size 5×5,padding 1,stride 2),pooling(kernel size 3×3,padding 0,stride 1),又一层卷积(kernel size
3×3,padding 1,stride 1)之后,输出特征图大小为:97

思路:
卷积向下取整,池化向上取整
输出尺寸=(输入尺寸-kernel尺寸+2*padding)/stride+1

(200-5+2*1)/2+1=99.5,向下取整99
(99-3)/1+1=97
(97-3+2*1)/1+1=97

11.一个二叉树有100个子节点数为2的节点,100个子节点数为1的节点,那么个子节点数为0的节点(叶节点)的个数为:101

思路:
度数(边数) = 所有节点数-1;
这里度数=2*100+100=300,总节点数=100(2节点数)+100(1节点数)+(0节点数)

12.某种类型的双核 CPU 的性能提升了 1/3 ,假定该提升是通过对每条指令缩短执行时间实现的,那么它每条指令执行时间缩短了 (1/4) 。

思路:
原来:1秒执行1条指令
现在:1秒执行4/3条指令,即执行1条指令花费1/(4/3)=3/4秒,节约1-3/4=1/4秒

13.一个map-reduce任务由m个mapper和r个reducer构成,计算的效率可以认为正比于mr的乘积(数据管道的个数),在限定任务的mr乘积约等于10000的情况下,假定每个mapper和每个reducer的成本分别为1和7,那么最佳的资源分配最接近于以下哪个方案?

思路
x*7x=10000,x=37.80≈38
即:reducer=38,mapper=10000/38=263.16≈264

14.如果你有相关经验,很多景点的餐馆商铺经营方式很有趣。以下描述错误的是:F(有点无语)

A: 由于景点的大部分顾客是一次性的,因此商铺的信用在其他条件相同时可能更低
B: 景点的餐馆为了招揽顾客使用托儿会比居民区的餐馆使用托儿效果好
C: 景点常常卖一些当地特产,比如青岛的海边会有卖贝壳的,这些贝壳产自附近的海域
D: 店铺使用托儿的有效原因是,人们常常做出多数人做出的选择,而忽视自己自然状态下的决策
E: 一些景点在出口位置上安排一个商店,商店内的通道曲折,为的是顾客多花些时间看东西
F: 景点内一些玩射箭的场所经营状况会比在居民区附近设置的类似场所好,原因是景点内的游人玩起来更在状态

15.一个机器人玩抛硬币的游戏,一直不停的抛一枚不均匀的硬币,硬币有A,B两面,A面的概率为3/4,B面的概率为1/4。问第一次出现连续的两个A年的时候,机器人抛硬币的次数的期望是多少?28/9

思路:
首先我们假设机器人抛硬币的期望为T,也就是说机器人停止游戏的话需要T次,接着分为三种情况(重复抛次数为T):
第一次抛到B,则需要重新抛置,概率为1/4,次数为T+1
第一次抛到A,第二次抛到B,仍然需要重新抛置,概率为1/4*3/4,次数为T+2
第一次抛到A,第二次抛到A,只需要两次,概率为3/4*3/4,次数为2
从而可以得到数学期望:
T = 1/4 (T+1)+3/16(T+2)+9/16 * 2,解得T=28/9

16.小a和小b一起玩一个游戏,两个人一起抛掷一枚硬币,正面为H,反面为T。两个人把抛到的结果写成一个序列。如果出现HHT则小a获胜,游戏结束。如果HTT出现则小b获胜。小a想问一下他获胜的概率是多少?2/3


17.假定某同学使用Naive Bayesian(NB)分类模型时,不小心将训练数据的两个维度搞重复了,那么关于NB的说法中正确的是:B、D

A: 这个被重复的特征在模型中的决定作用会被加强
B: 模型效果相比无重复特征的情况下精确度会降低
C: 如果所有特征都被重复一遍,得到的模型预测结果相对于不重复的情况下的模型预测结果一样。
D: 当两列特征高度相关时,无法用两列特征相同时所得到的结论来分析问题
E: NB可以用来做最小二乘回归
F: 以上说法都不正确

思路:
在朴素贝叶斯分类理论系统中,都有一个重要的条件独立性假设:假设所有特征之间相互独立,这样才能将联合概率拆分
对于A,冗余特征会使得并没有增加输入信息的前提下增加模型判别的置信度,这显然是不合理的。

18.以下哪个行为,不会明显加剧客户端运行过程中的卡顿:C

A: 在主线程集中处理耗时的操作
B: 在子线程集中处理耗时的操作
C: 在其它进程集中处理耗时的操作
D: 提高后台线程的优先级
E: 降低主线程的优先级
F: 页面存在多个重叠显示的控件

19.以下程序的输出是:3,5


思路:
f函数为斐波那契数列1 1 2 3 5 8 13 21 34 55...
count函数为MIT HAKM算法,统计n的二进制表示中1个数量(https://blog.csdn.net/msquare/article/details/4536388)

20.学校图书馆共有 300 万册图书,想统计其中 Computer , Science ,计算机,科学这几个词出现的次数,并按照自然年度分类,如 2016 年出版的书籍中这几个词各自出现的次数, 2015
年······依次类推。

思路:
将每本书都存在hdfs里作为一个文件,文件名为时间(4位年份)+书的id+书的名称
使用mapreduce进行运算,map输出为<日期,computer次数;science次数;计算机次数;科学次数>,reduce输出同样,不过作为value的字符串中的次数为总次数。代码如下:

public static class MyMapper extends Mapper<LongWritable,Text,Text,Text>{

    private static Text outputKey = new Text();
    private static Text outputValue = new Text();

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //得到hdfs文件名
        String filename = ((FileSplit) context.getInputSplit()).getPath().getName();
        String date = filename.substring(0, 4);

        //分别统计computer,science,计算机,科学出现的次数
        int computer = 0;
        int science = 0;
        int jisuanji = 0;
        int kexue = 0;

        String line = value.toString();
        String[] words = line.split(" ");
        for(String word : words){
            if(word.equals("computer")) computer++;
            if(word.equals("science")) science++;
            if(word.equals("计算机")) jisuanji++;
            if(word.equals("科学")) kexue++;
        }

        String outputVal = "" + computer + ";" + science + ";" + jisuanji + ";" + kexue;
        outputKey.set(date);
        outputValue.set(outputVal);
        context.write(outputKey, outputValue);

    }
}


public static class MyReducer extends Reducer<Text, Text, Text, Text> {

    @Override
    protected void reduce(Text key, Iterable<Text> values,Context context) throws IOException, InterruptedException {
        int allComputer = 0;
        int allScience = 0;
        int allJisuanji = 0;
        int allKexue = 0;

        for(Text value:values){
            String val = value.toString();
            String[] str = val.split(";");
            allComputer += Integer.parseInt(str[0]);
            allScience += Integer.parseInt(str[1]);
            allJisuanji += Integer.parseInt(str[2]);
            allKexue += Integer.parseInt(str[3]);
        }

        String finalVal = "" + allComputer + ";" + allScience + ";" + allJisuanji + ";" + allKexue;
        context.write(key, new Text(finalVal));
    }
}

21.设计接口并且实现一个多线程安全的堆,并且要求可以删除堆中任意元素(非堆顶元素),要求尽量高效,假设已有标准的mutex实现可以使用。

deleteElement(int[] heap, int index, int len) {    mutex.lock();
    heap[index] = heap[len-1];
    len--;
    while(2*index + 1 < len && (heap[index] > heap[2*index+1]|| heap[index] > heap[2*index +2])) {
         int swapi = heap[2*index+1] < heap[2*index +2]) ? 2*index+1 : 2*index+2;
          swap(heap,index,swapi);
         index = swapi;
    }
    mutex.unlock();
}

22.淘宝上的每个宝贝一般都有个默认的全国邮费(也可能没有),同时也支持到特定省份有特定的邮费,如果到特定的省份没有特别的邮费就用默认的全国邮费。请:
1.设计一个存储结构来保存一个宝贝的所有邮费信息;(简单用文字阐述一下做法)
2.给定一个宝贝的邮费存储信息和一个省份,编程快速得出宝贝到此省的邮费。 注意:邮费的类型是uint32_t,此外由于商品数量非常大(假定十亿量级),查询量也非常大,对存储和查询的效率要求非常高,因此存储效率和查询效率是考察的重点。

//假设34个省的id为0--33
struct postage_info{
    uint64_t mask;//总共34各省,用34位表示每个省的邮费是不是默认,是的话对应位为1
    struct postage *p; //用一个数组存储非默认省份的价格,假设此数组按province_id的大小已经排好序了
    uint32_t default; //默认价格
}
struct postage{
  int province_id;  // 省id
  int postage;      //邮费
}
uint32_t get_postage(int province_id, struct postage_info * info){
       if(1<<province_id && info->mask)
            return info->default;
       else
            return bsearch(province_id, info->p)//... 使用二分查找获取对应省份的邮费
}
Last modification:April 20th, 2020 at 09:53 pm
喵ฅฅ