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+树的区别
【腾讯】
2、红黑树和AVL树的区别。
脏读:就是自己操作的东西,还没提交,就被别人用了。
不可重复读:就是一开始你读到的东西是A,然后因为另外一个事物commit了,再读一次的话你读到的东西变了B
幻读:在第三种隔离机制之下,是两个事务一起commit了,才可以各自看到对方的改变,然后假如B加入了111这条语句,你A就会插入不了,但是看不见它的存在,就像幻觉一样。
4、项目内容
【微信】
1、屏蔽词算法的实现
2、malloc函数和free函数的实现
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) 编辑 收藏 举报