zoukankan      html  css  js  c++  java
  • 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里面的数据结构是怎么实现的。

  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/9508299.html
Copyright © 2011-2022 走看看