腾讯一面淘汰面试总结

腾讯软件开发面试:
第一次面试就赶上腾讯了,前一天晚上收到通知,今天白天背了一天C++基本概念,结果一个网络编程直接拍死。哎。回答的磕磕绊绊,好多都不知道人家在问啥。问了几个问题面试老师就不耐烦了,就结束了。记下了三个我回答不知道的。

简单讲一下进程线程和协程
程序运行后就会生成一个进程,他有自己独立的地址空间,是资源分配的最小单位
进程间的通信有:有名管道,无名管道,消息队列,信号量,共享内存,套接字
通信开销比较大但是稳定。
线程可以叫做轻量级进程,是操作系统调度和资源调度的最小单位,是进程的实体,拥有很小的独立资源(程序计数器,寄存器和栈),和同属一个进程的线程共享进程的资源,通信主要通过共享内存,但是不够稳定容易丢失数据。
协程:是比线程更加轻量级的存在,不被操作系统内核管理,是由程序控制的,也就是说在用户态执行。有很高的执行效率,他没有线程切换的开销。切换时会保存寄存器上下文和栈,切换回来时会恢复。可以不加锁访问全局变量。
协程和线程的区别:
1、一个线程可以有多个协程,一个进程也可以有多个协程
2、线程和进程是同步机制,协程是异步机制
同步机制:必须完成一个操作才能到下一个操作
异步机制:正在操作中可以中断执行另一个操作
3、协程能够保留上一次调用的状态
4、协程是非抢占式,同一时间只有一个协程在运行
5、线程是被分割的CPU资源,协程是组织好的代码流程,协程需要线程来承载,协程利用的是执行器
6、线程是协程的资源
讲一下多线程的锁机制
由于多线程之间是并发进行的,系统调度又是随机的。
线程之间有:互斥锁,条件锁,自旋锁,读写锁,递归锁
互斥锁:一个线程正在执行会上锁,当执行完成后开锁,下一个处于休眠状态的线程继续
自旋锁:同互斥锁,但是待处理线程不会休眠,他会一直循环访问看正在执行的线程有没有结束
读写锁:一个线程正在读的时候,下一个线程可以访问读申请,不能申请写
一个线程正在写的时候,下一个线程不可访问读和写
有 :读锁,写锁 ,无锁 三个
*四次挥手和他的timewait *

TIME_WAIT状态产生:
Client发送最后一个ACK,进入TIME_WAIT状态。此状态持续2MSL时间后,返回Closed状态,即TCP连接彻底断开。在TIME_WAIT的2MSL时间内,不能基于此连接的四元组client_ip、client_port、server_ip、server_ip重新创建新的TCP连接。 MSL:任何IP数据包能够在因特网中存活的最长时间。RFC 1122中的建议值是2min,不过源自Berkeley的实现传统上改为30s。

TIME_WAIT状态存在的原因:
1.保证TCP全双工连接的可靠释放:四次挥手client最后一个ACK可能丢失,那么server必须重发FIN,在该FIN到达之前,client必须维护连接状态2MSL,这样才能保证client能够收到server重发的FIN,后client重发ACK后,经过2MSL时间周期没有再收到另一方的FIN之后,该TCP连接才能恢复初始的CLOSED状态。
2.允许老的重复分节在网络中消逝 :如果在TCP连接中缺少维护TIME_WAIT状态这一操作,我们在关闭TCP1连接后,立刻基于TCP1四元组建立新的连接TCP2(TCP2称为TCP1的化身),TCP协议栈并不能区分TCP1和TCP2的区别,那么TCP1的数据就可能被TCP2处理,显然这样是错误的,因此维持TIME_WAIT状态2MSL时间,足够让TCP1上的重复分解在网络中消逝。

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务