当前位置: 永利棋牌 > 儿童文学 > 正文

常被人问的问题分析,百度网页搜索

时间:2019-10-01 13:19来源:儿童文学
正文  - 初步了, 直接聊天 原稿链接: 以下都以友好面试中相见的广阔的难题.如有不妥的地方就当见笑了. 哈哈 百度面试-网页搜索部   单向:面试官很消瘦,个头异常高。后来开掘人

正文  -  初步了, 直接聊天

原稿链接:

  以下都以友好面试中相见的广阔的难题.如有不妥的地方就当见笑了. 哈哈

百度面试-网页搜索部

 图片 1

单向:面试官很消瘦,个头异常高。后来开掘人很nice,很随和~,起码面试进程中令人以为很清爽。一些本身答复出来的主题材料大概记得的不是很精通了,首要记录一些作者答的不是很好的难点。首先自己介绍,然而刚刚开始就被卡住开首举行领会了,从学科至项目,聊了广大,面试官在百度的地点or他附属于的单位属于百度的框架开垦类职位,及相对于战略类的多个任务。无论自己的学科或然经历其实对于框架开拓类职位相比较欠缺,相比偏计谋一些。不过接二连三面试嘛,小编感兴趣分布,针对那些也很感兴趣的~

1. 商量你们服务器的架构吧.

1.linux二十多线程编制程序的知识,这些答的不是很好,因为本身的确基本没写过多线程的学识,只是并行程序设计使用MPI落成过粗略的算法,概念知识不是很领会,所以本着linux三十二线程编制程序知识还索要补给一下。那时候贰个难题正是锁的品种?

分析:

2.linux汉语件叙述符FD的定义?那时候竟然是何等,然后边试官提醒了刹那间,0,1,2,就想到了指令行中平时用到1,2就答了一晃才打听到平日应用的这几个就是文本描述符,自身却不亮堂概念。

  假设那是首先个难点, 你能够走了. 大概外市点原因他不想要你. 恐怕其余意外已经有人更相符了. 

正规输入(standard input)的文书陈说符是 0,规范输出(standard output)是 1,标准错误(standard error)是 2。

抑或只是为着学一点东西.哈哈.平日面试游戏服务器开辟的时候,那地点鲜明会问的. 关于游戏服务器架设,

3.因为是寻觅公司,所以面试官让自个儿汇报一下全勤搜索引擎的历程,包含客户提交query之后的一文山会海专门的工作,这有个别概念缺点和失误非常多,答的比较不好。计划面试一家找寻集团,并且在搜索集团实习过一段时间,竟然不能够完整答出那几个难题,其实挺糟的。

亟待团结拼命积存是硬武术.未有个100页doc难搞下去.且分化集团框架结构依旧很区别样.

其一寻觅一下相比好的架构~最棒针对已经有些开源项目分析其框架最棒。针对本人说不定解析一下Nutch和Solr比较好。

只是为着回应面试,能够参见

4.针对数组A和数组B,五个数组的要素内容一样,不过数组A是早就排序的,数组B是乱序的,针对数组的中位数,存在以下两组前后相继,相比其功用并解析原因。

   MMORPG服务器架设  

次第见原链接

   云风的 BLOG 

以此标题以前在互连网浏览到过,知道有序的数组的效用其实比冬天的要高比很多,然而原因其实想不出去。今后搜一下,原本是stackoverflow上面的经文问答呢,原因不是编译器动手脚,而是CPU动的动作,CPU有八个叫分支预测的工夫,是以此工夫导致有序数组的频率相当高。 CPU指令实践的长河是流程,轻巧的分支预测方案是对准当下因素判别下一个元素的命令跳转方向,有序的话分支预测的准确率相当高,冬日的话分支预测本事就不奏效了,无法提前装载指令步入流程,那样就消耗了自然的CPU时间。

起码能够归纳扯一点, 对吧.平时这几个难点决定你最终资格,非常首要, 也是大家干程序的顺其自然要积累的.

5.设想析构函数的应用场景。

 

当即答的是指向父类的指针实际指的子类对象,delete的时候须求调用子类析构函数!那是唯一运用场景!那时候多嘴答了刹那间援用也可。其实援引必须出示创造对象,那样编写翻译器就能够自行调用其析构函数,所以不属于这一行使场景,即便指针和引用均可成功多态。

2. 不常候也会问,项目组正在开辟中难点. 因公司而异.

试验实例:见原链接

比方说怎么设计跨过服务器对战的事体, 怎么规划叁个棋牌的妄动排序算法.

6.STL中list的底层实现?双链表,因为能够升高后退。STL中的deque的暗中认可使用容器?其实那时候不太鲜明,思索了一晃,猜了弹指间vector,因为许多器皿默许容器均运用vector。那时一经问小编deque的平底完成就好了,那一个本人尤其精晓-_-。

分析: 

7.vector的insert和erase操作,那些亦不是很熟悉,不过属于一而再空间的插入和删除,必得做内部存款和储蓄器的调治~,翻看一下STL源码具体的贯彻。

  1)对于跨越服务器对阵, 当初是个卡片战役类, 轻便些. 依照老套路

8.五个简易的算法标题,时间相比急,代码写的相比较冗余。

    a) 种种服前10名, 特定期刻提请

a.一个数组中唯有三个数字出现1次,其余数字现身四回。

    b) 依据服务器id,游戏用户id 营造二个新服

挺简单的标题,因为见过,所以就跳过了这些主题素材,所以成分异或就可以。

    c) 参照老套路了, 有了新服对阵最初了...

b.一个m*n得棋盘,每一种格子中有三个数字,总结从左上角至右下角的最大路线和,每一步行只好够向右或然向下行动。

  2) 对于棋牌的自由算法, 基本都以二个傻大哈方法

一个简便的动态规划难题,第一种办法首先时间复杂度O(mn)空间复杂度O(mn)的写了代码,代码有些长,后来改进了二个时间复杂度O(mn)空间复杂度O(min(m,n))的算法,后来面试官问假若须求还原路线如何是好?选取O(mn)的附加空间记录种种单元走的门道就可以。

//
//    简单棋牌随机算法
//  chess    : 存放棋牌的数组
//    len        : 棋牌处理长度
//
void chess_rand(char chess[], int len) {
    if (!chess || len < 2)
        return;

    for (int i = 0; i < len; ++i) {
        int j = rand() % len;
        if (i != j) {
            char c = chess[i];
            chess[i] = chess[j];
            chess[j] = c;
        }
    }
}

面试总计:算法标题实在挺轻巧的,只不过非常多基础知识缺乏稳固,比方linux的部分基础知识(复习下《鸟哥linux私人民居房菜》),八线程的编制程序知识(学习下《posix多线程程序设计》并简短实施一下),STL的文化和C++的文化也照样要求巩固复习(STL源码剖判,Effective C++,More Effective C++,深度搜求C++对象模型一本书内容依旧挺晦涩的,照旧要拜读一下,面试的时候即便可能不涉及那样深远的知识,但是依旧要承继读书),别的正是竭尽的逛一些才具社区,看有些东西了。因为像有序,冬日数组那些标题,以为完全是技术视界的难点,看见了就能,没看出怎么能够想到是CPU的优化,笔者都觉着是编写翻译器的优化,答题方向都调节错了。

现实就是您做过就依据你做过的思绪说, 没做过就依照自身思绪实诚一点说. 哈哈

二面:二面包车型大巴面试官相对于一面包车型地铁面试官不是那么的应答如流,越来越多的是让自身去说,他去加一些唤起,然后小编接二连三的回应。可是面试官也很nice,因为答题的历程个中给了自笔者多数的辅导,因为主题素材小编答的都不是很完善T_T!

 

1.率先是问八个大数目管理的主题材料,五个UWranglerL文件,分别有20亿条记下,每一个UPRADOL的项目差非常少1KB。文件中有重复的U奥迪Q5L记录,如何去除重复?

3. 用过哪些数据, 什么数据库引擎,优化什么的扯个淡.

因为在一方面包车型大巴进程中打探到,有序的数组去除重复的时候能够收获长足的去重,所以就思量到了第一排序,不过五个如此大的文书单机排序?外界排序,k路归并排序,然前边试官就因时制宜的问了自家k路归并排序的文化,k路归并排序的年华预计,因为k路归并排序非常多时间在磁盘的IO上边,所以本身质疑或许磁盘的IO才是岁月的安静,各类成分最后进出磁盘4次,所以本身估量的方法是因素数量*4*磁盘IO平均时间。不晓得那几个办法对不对。

分析:

多机的恢弘,MapReduce程序应该能够成功,然则作者对hadoop不是很精通(所以这么些点子未有答)。自个儿想转手多机的扩大吧,当然也是分治,想想也足以多机k路归并排序,后来面试官辅导作者说能够不排序么?作者才意识到原有失常态只是为着去除重复,所以那边分治並且选取hash的不二秘籍应该能够完成很便捷的算法(复习一下《大型网址架构》那本书)一致性simhash方法应该是消除这么些题指标。

  日常都是mysql, 问多少个简单的sql查询.然后问innodb 和 myisam 不一样.

2.设计形式,单例设计格局的中肯讨论。(复习《head first》设计情势)

  MyISAM和InnoDB的区别 

a.单例设计情势的应用场景?

  Mysql二种索引类型的界别及适用境况

b.单例方式的代码(白纸代码)?

实则现在开荒本人感觉从C++ 软件开垦层面. mysql未有mariadb优势大, 高端层面包车型地铁优化交给数据库开荒者. 业务层开荒也正是索引等等.

c.十二线程安全的单例格局代码(必要加锁)?

到这里偶尔候会细问DB Server 设计. 缓存服务器设计等. 因集团业务区别, 说一讲罢全能够.

d.如何完结三个便捷的线程安全的单例形式代码?(存在不加锁的缓解方案吧?)

  高并发服务器的规划--缓存的设

3.轻易的聊了品种然后就问了三个算法题目。中夏族民共和国象棋中帅,将和一个将身边大巴,输出其制造地点的方案。

  想在C++游戏服务器中落到实处热更,数据缓存要哪些做啊?

刚见到那几个算法标题标时候还卡了一晃,然则新兴和好把棋盘编号为1,2,3,4,5,6,7,8,9从此茅塞顿开~可是笔者的代码if,else非常多,3类境况枚举,后来在面试官的提示下实行典型合併,节省了非常多的代码。

也能扯个半天.

次第见原链接

 

面试总计:对于系统规划海量数据的标题只怕要早为之所的,照旧须要复习《大型网址架构》一书,书中描述了过多海量数据管理的知识。学习下july的博客,领悟一些常用的法门。别的正是设计情势中单例格局的主宰必得求那贰个的耳熟能详,不要让面试官不断的唤醒更正错误,那样会引出更多的标题,我此番面试正是,纵然那时候的匡正难题,可是都可以引出别的的主题素材,举个例子讲一下线程和进度?纵然那一个难题比较日常,然则这种引出其他题材恐怕尽量幸免。

4. 这起来扯除了架构之外最重大的了, 八线程设计了.

三面:这一面真是等了贰个早上,12:30-4:20那么些历程当成等待的十分短久,脑袋都秀逗了,面试官中午来了后来以为正是聊天了,也远非指向本身问一些技艺难题,首要问了见习的有个别职业,轻巧的聊了半个小时就终止了,也不曾说后续的新闻。不晓得是还是不是还会有继续,反正面试官如故很详细的叙说了弹指间百度的景色,也很认真的解答了自家问的多少个有关百度的难点。那时也不佳意思去问后续音信,就赶回了。T_T。

分析:

  首先平日面试官会那样起初, 啊, 那线程和进程的争论是什么啊?那东西常问, 不管是应届新手依旧老油条.

因为面试官许多问本人原先被外人问的, 能够参照天涯论坛上研究, 基本都知情了, 能够来回扯了.

  线程和经过的分别是什么样?

自然那只是个初阶,一时候会令你现场写代码. 那就必要团结回想 pthread POSIX 那套了. 当然蒙受必须手写的话, 表达那个家伙也是狼狈你.

你也得以放心了. 前边欢跃自然些. 他可能还没你知道多. 详细的能够领略下边知识.

  [转]关于多线程并发:每一个开荒人士都应驾驭的剧情

骨子里关于线程真实工作中, 实战经验为零. 最扯淡的是, 会说的不必然会写, 会写的难说. 仍旧推荐能够看看 云风 的 github,

上边多线程代码不菲. 还可能有正是POSIX 二十八线程那本书极其杰出.很给力.

享受个多个线程顺序循环试行的代码, 哈哈如下:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>

// 测试线程数量
#define _INT_THS    (3)

struct threadarg {
    pthread_t tids[_INT_THS];
    sem_t sids[_INT_THS];
};

// 简单运行函数
static void * _run(void * arg) {
    int i = -1, j = -1;
    struct threadarg * ths = arg;
    pthread_t tid = pthread_self();
    pthread_detach(tid);

    // 确定这是第几个线程
    while (++i < _INT_THS)
        if (pthread_equal(tid, ths->tids[i]))
            break;

    // 循环个特定遍数就结束吧
    while (++j < _INT_THS) {
        // 第 i 个线程, 等待 第 i - 1 个线程, 输出 'A' + i 
        sem_wait(ths->sids + (i - 1 + _INT_THS) % _INT_THS);
        putchar('A' + i);
        // 第 i 个线程, 激活 第 i 个信号量
        sem_post(ths->sids + i);
    }

    return NULL;
}

//
// 写个测试线程信号量代码
// 开启 _INT_THS 个线程, 顺序打印数据 A->B->C->...->A->B->....
//
void test_pthread_sem(void) {
    // 开始初始化了
    int i, j;
    struct threadarg targ;

    // 先初始化信号量,后初始化线程
    for (i = 0; i < _INT_THS; ++i) {
        // 0 : 表示局部信号量当前可用; 0 : 当前信号量值为0
        if (sem_init(targ.sids + i, 0, 0) < 0)
            goto __for_exit;
    }

    // 开启线程
    for (j = 0; j < _INT_THS; ++j) {
        // 开启三个线程
        if (pthread_create(targ.tids + j, NULL, _run, &targ) < 0)
            goto __for_exit;
    }

    // 激活第一个线程, 输出 'A' 开头
    sem_post(targ.sids + _INT_THS - 1);

    // 中间等待一些时间吧
    getchar();

__for_exit:
    // 注意的是, 假如信号量释放了, 线程还在跑, 会异常
    for (j = 0; j < i; ++j)
        sem_destroy(targ.sids + j);
#ifdef __GNUC__
    exit(EXIT_SUCCESS);
#endif
}

编写翻译指令是

test_pthread_sem.exe:test_pthread_sem.c
    gcc -g -Wall --entry=$(basename $@) -nostartfiles -o $@ $^ -lpthread

背后也足以参照他事他说加以考察上面链接学习一下.

   时限信号量与规范变量的差别

 

5. 那再一遍到语法基础部分了. C++种种语法鬼怪来了. 哈哈

编辑:儿童文学 本文来源:常被人问的问题分析,百度网页搜索

关键词: