• 2018-8-20 21:32:39 面试


    2020-08-02 21:36:52

    准备的面试题:

    1. new和malloc的区别

    malloc是一个函数,new是一个关键字,需要编译器的支持。

    new出来的东西放在自由存取区上, malloc放在堆上。

    new返回的是对象指针,malloc返回的是void*

    new可以重载

    2. 左值引用和右值引用的区别

    3. 进程和线程的区别

    遗留问题1: CPU在运行A进程的a线程,切换去B进程的b线程,需要切换进程吗。(应该是要的)

    名词是对客观事物的指代,形容词是对客观事物的描述。

    进程和线程都是一个时间段描述,是一个CPU工作时间段的描述。是运行中程序指令的一种描述。他们的资源隔离级别不同。

        1. 进程是资源分配的基本单位,线程是CPU调度的基本单位。

        2. 进程间通信通过管道,共享内存,信号量,消息队列等等。。线程间通信就简单,直接操作共同的内存,或者更高级的通过发送消息来共享数据。

        3. 进程间的内存是隔开的受保护的。

    4. HTTP1.0 --- HTTP2.0 ---HTTP3.0

    http1.0:一个request一个tcp

    http1.1:多个request可以复用一个tcp,但是要排队(无论请求还是response)

    http2.0:有了帧这样的一个概念,然后可以在一个tcp上发送/返回多个请求/响应,而不需要同步等待。http流中的定义就是一个request/response

    http3.0:也是QUIC,2015年提出的SPDY v3演化而来的新协议。。

    5. TCP三次握手和四次挥手

    ACK:确认序号有效。
    FIN:释放一个连接。
    PSH:接收方应该尽快将这个报文交给应用层。
    RST:重置连接。
    SYN:发起一个新连接。
    URG:紧急指针(urgent pointer)有效。

      三次握手:

        客户端 -》 服务端: SYN = 1, seq = 100

        服务端 -》 客户端: SYN = 1, ACK = 1, seq = 300, ack = 101

        客户端 -》服务端:  ACK = 1, seq = 101(不会真的使用这个seq)  

      四次挥手:

        客户端 -》 服务端: FIN=1,seq = 100

        服务端 -》 客户端:ACK=1, ack=101,seq=300

        服务端-》 客户端: FIN=1,ACK=1,ack=101,seq=301

        客户端-》 服务端: ACK=1, ack=302, seq=101

    6. MVCC

    7. 多态是怎么实现的

    多态的关键就是通过基类指针去调用一个虚函数的时候,编译期并不确定真实的调用函数,要在运行期才能确定。

    多态函数的调用语句被编译成一系列根据指向的对象,他的虚函数表,然后找到函数地址。 

    8. 设计一种协议(header(header用开始符号和定长确定) + body)。

    1. 发送的时候要发送一个seqnum,返回的时候再返回一样的过来,这样就知道对面收到了。

    9. 平衡树,B树和B+树,红黑树的区别

    平衡树就是二叉平衡树,使得树扁平化。

    B树就是多路平衡树,充分利用了磁盘块的原理(数据在磁盘中以块来存储,一块是4k)可以一次加载出来。

    B+树的查询每次都要落到叶子节点上的,查询相对稳定,而且非叶子节点没有记录原数据信息。(叶子节点存储所有数据,非叶子节点只存储索引)

    红黑树相当于平衡树的优势在于,调整的时候,旋转的时候由于自带颜色,旋转层数不会像平衡树那么多。

    10. 怎么写一个线程池

    线程池的作用:

    1. 不需要频繁的创建/销毁线程

    2. 异步解耦的作用,就是一直把一些任务异步扔出去。

    ---------------------------------------------

    所以需要:

    1. 任务队列

    2. 线程池id队列

    3. 管理组件,让线程有秩序工作(并发问题)

        1. mutex锁

     2. 等待某个条件触发,(条件变量) 

    11. Redis为什么快

    1. 存内存操作。

    2. 单线程不需要枷锁

    3. 数据结构高效:

       3.1 不同数量级的数据,用不同的方法存储。

            例如 zset, 数据少于128个的时候,就用普通数组。后面就使用跳表。

       3.2 key是不同的数据类型的话,所用的存储方法也不同。

       例如set,如果全部是int的话,就用intset,如果突然插入一个string,就要变成hash,还有渐进式hash,就是需要预先分配两份。string的hash也是很优秀的,用的siphash

    typedef struct intset {
        uint32_t encoding;
        uint32_t length;
        int8_t contents[];
    } intset;

     4.  非租塞IO和多路服用。

    12. 抢红包设计思路:

    2020-08-02 21:36:56

    实际的面试题:

    2020-08-06 【头条 AI LAB】

    一面(30min):

    1. 两个字符串A和B,定义一些规则比如'a' -> 'b'是相等的,规则可以传递。问A和B是否相等。。

    规则变成 "abc" -> "cde"怎么做。

    2. 问项目

    二面(60min):

    1. 介绍项目

    2. HTTP基本知识

       HTTP1.0 --> HTTP2.0,http2.0的流是什么意思。HTTP经常换基站怎么解决。

       HTTP状态码

       HTTPS

    3. linux,怎么查看一个进程状态,怎么查看他有多少个TCP链接,然后展开了一波TCP链接(time_wait, close_wait那些)

    4. 进程、线程、协程。

    5. python内存泄露怎么处理。

    6. linux systemd看门狗服务怎么做的。wait监控这着这个进程,相当于进程挂了,父亲就知道

    7. python怎么做多态的,继承那些。python @propoty那些

    8. cpp问了一下发现我不会就没问了。

    9. QPS怎么定义。就是那一秒是怎么规定的。[0ms, 1000ms]算1s, [500ms, 1500ms]也算一秒,问那一秒是那一秒。

    10. redis分布式锁,怎么做限流。

    11. DDOS攻击。

    12. DNS原理。

    13. 7层负载均衡和4层负载均衡

    14. 闭包有什么缺点

    15. zookeeper

    最后:二叉树Z形打印。

    三面(60min):

    1. 问项目,优化过程。

    2. 一个大文件,全部是URL,如何去重然后输出到一个文件里面。。如果允许误杀,怎么处理。

    3. 算法题。一个数组a(len_a <= 1000),sum_a <= 10000,分成两批,求最大乘积。

    2020-08-15 【BIGO 音视频直播媒体】

    一面(58min + 20min-coding)

    1. 简历上的全部项目

    2. 抓包是怎么抓的。

    3. 出现大量close_wait是什么原因

    4. tcp黏包是什么

    5. 设计一个访问量很大的封禁IP的系统要怎么设计(查询几ms级别)。感觉问的好深,

    6. cpp share ptr原理,直接说了不会,不知道说一个引用计数会不会好一点

    7. socket编程有没用过

    8. 有没改造过tcp链接。。。。。(没

    9. 一致性hash是什么

    最后:算法题:两个字符串相加,有正负号,有小数点。相加

    二面(47min + 15min-coding)

    1. 问项目,然后项目被吐槽。。

    2. HTTP range

    3. curl www.baidu.com最详细的过程

    4. 算法题:ipstr -> int val,错误码自己定义。注意大端小端

    5. std::share_ptr是不是线程安全的

    2020-08-31 22:44:55  微信【开放平台基础部】

    一面:【一小时10分】

    1. 一个小时四道算法题:

      1.链表奇数偶数拆分,按位置奇偶。

           a -> x -> b -> y -> z 应该输出 a -> b -> c -> x -> y -> z

      2. 排序二叉树找第k大。排序二叉树左小右大

      3. 木块积水问题。

      4. 给一个rand35,生成一个rand47.

    2. 问项目,10min结束好惨。。。

    3. HTTPS怎么交换对称秘钥的,对称秘钥怎么生成的。

    2020-09-07 网易游戏(游戏应用与开发平台发展事业部)

    一面:【60min】
    1. 自我介绍 + 项目
    2. 多线程 + HTTP断点续传
    3. py __init__.py作用
    4. py继承怎么调用父类方法,多继承的时候假如不同的父类有相同的方法怎么办。
    5. linux 文件标志位 777那种
    6. 怎么看内存使用
    7. top里面CPU的id字段代表什么意思
    8. MySQL中,select * from table_1 where verchar_column = 数字5会不会走索引,用inode索引树分析一下。同时分析一下为什么verchar做索引长度不要太长。
    9. HTTPS,每个步骤哪里是明文,哪里是非对称加密了。(面试官说细节没说清)
    10. DNS,里面用到了那些协议。(面试官说最后不是看/etc/reslove.conf这些DNS服务器,还有其他地方的)

    11. HTTPS中证书认证怎么认证。(我说的是根据内置证书,后面他们说不是很全面)
    12. HTTP keep alive
    13. 怎么拿到客户端IP proxy_set_header X-Forwarded-For $remote_addr,继续问这个数组,哪一个是客户端真实IP
    14. 一个大文件,都是URL,怎么去重。怎么找前K个。
    15. 如何设计一个短连接服务。我以为是给一个长连接,然后映射去一个用户自定义的串。所以我就希望用户自定义串后可以加一个前缀,比如go/user_link,这样可以以后做分组之类的。

    这题应该问清楚需求,比如需求其实是,扔一个URL给你,给一个短的回来。相当于问如何生成一个UUID。

    16. 删除一个文件需要什么权限,删除一个目录需要什么权限。

    17. linux物理地址,逻辑地址,虚拟地址是什么 

    2020-09-14 08:00 微信【微信小店】120min

    1. 一小时5道算法题。

    2. 问项目,展开了一些问题。

    3. linux wait命令怎么实现。

    4. cpp多态原理。

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    【头条】

    1、算法题,找出1--n中字典序最小的数字。

    2、gorountine内核的实现(调度算法,保存上下文,遇到阻塞变成回调)

    3、mysql主从热备的原理

    4、socket监听的原理。

    5、ssd字节对其是为了什么。

    【阿里】

    1、项目内容。。xxxyyy

    2、linux基本东西,查看那个程序监听了哪一个端口,还有文件系统的755代表什么。

    3、linux内核namespace是怎么实现的。(大概就是把PID,NET,IPC, USER, UTS, MNT)

    1.Mount namespace(CLONE_NEWNS):系统挂载点 
    2.UTS namespace (CLONE_NEWUTS):Hostname等信息 
    3.IPC namespace(CLONE_NEWIPC):进程间通讯 
    4.PID namespace(CLONE_NEWPID):进程号 
    5.Network namespace(CLONE_NEWNET):网络相关资源 
    6.User namespace(CLONE_NEWUSER):用户ID 

    4、如何知道什么时候使用cache更好,因为有时候可能不要浪费内存(1、客户需求量,2、cache读写比)

    5、TCP三次握手是怎样的

    6、一个http的访问过程。

    7、讲一个熟悉的数据结构并且让他知道用在哪一个产品(AC自动机屏蔽词)

     8、mysql索引,B树和B+树的区别

    【腾讯】

    1、mysql的自增ID表,1s大概插入多少次,2500

    2、红黑树和AVL树的区别。

    3、mysql事物隔离级别有多少种(4种)

    对比性解析

    脏读:就是自己操作的东西,还没提交,就被别人用了。

    不可重复读:就是一开始你读到的东西是A,然后因为另外一个事物commit了,再读一次的话你读到的东西变了B

    幻读:在第三种隔离机制之下,是两个事务一起commit了,才可以各自看到对方的改变,然后假如B加入了111这条语句,你A就会插入不了,但是看不见它的存在,就像幻觉一样。

    4、项目内容

    【微信】

    1、屏蔽词算法的实现

    2、malloc函数和free函数的实现

    3、如何自己实现FTP,socket接受请求一定能接受吗?

    ans:

      FTP需要监听两个端口,一个是命令端口,一个是传输数据的端口。因为一些登录,改变目录,删除文件等操作,可以直接用命令端口执行即可。

      数据端口用于传输数据,

      分为两种模式:一种是主动模式,客户端另外监听一个端口,告诉服务器,让服务器去连接这个端口然后用来传输文件。这种方法有个bug就是可能客户端防火墙活过滤掉。第二种是被动模式,服务器又新开一个端口,告诉客户端让客户端自己去连接这个端口。

      另外还需要注意FTP需要加上断点传输功能,REST,因为网络上传会有点慢。TODO:怎么实现断点传送,怎么保存文件。

      

    4、数据库索引是怎么实现的,为什么不用红黑树和hash(hash的话不满足非唯一索引)

    5、假如mysql速度慢,有什么优化方法。

    6、自己做一个cache要怎么实现,考虑什么问题。

    7、数据库的ACID是怎么做的

    8、redis里面的数据结构是怎么实现的。

  • 相关阅读:
    BAT 大厂最流行的测试技术体系与测试职业发展晋级指南
    通知 | 2021 第一期《测试开发实战宝典》赠书活动顺利结束!
    你还缺个好工作?但7月毕业季即将来临怎么办
    一图看懂云栖大会「云原生」重磅发布
    阿里云重磅发布业务中台产品 BizWorks,中台发展进入下一个阶段
    云栖·追踪云原生|Serverless入围阿里云十大核心技术
    先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了
    New homework
    German
    suggestion
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/9508299.html
Copyright © 2020-2023  润新知