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里面的数据结构是怎么实现的。

posted on 2018-08-20 21:36  stupid_one  阅读(259)  评论(6编辑  收藏  举报

导航