视频面试,一位略不耐烦的小哥哥。
以下问题都是记录的小哥哥原话。
Q1:操作系统调度有没有了解,为什么要进行调度?
A:(听到后感觉有点懵,调度这个概念是不是有点宽泛,我就说了说提高设备的利用率之类的)
知乎上看的一篇关于调度的讲解
Q2:进程和线程的区别,为什么线程的开销小
A:(线程是轻量级的进程,进程是资源分配的基本单位,同一进程内可以有多个线程,同一类线程共享内存空间和一组资源,线程的开销比进程小)
进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
Q3:死锁的概念,单线程会死锁吗?
A:(死锁就是多个进程互相占有对方想要获取的资源,但各自又无法释放,造成的一种僵持的状态;说的不会,但其实我不知道)
Q4:浏览器打开的tag,使用多进程还是多线程?
A:(不懂,猜的多线程,其实是多进程)
Q5:ip层和运输层的功能
A:(根据自己的理解说了说,ip层是根据ip地址寻找对方位于哪个网络中,运输层负责将数据传送过去)
网络层的任务是选择合适的网间路由和交换节点,确保数据及时传送。
运输层的主要任务是负责向两台主机进程之间的通信提供通用的数据传输服务。
Q6:tcp和udp的区别,为什么要4次挥手
A:(tcp是面向连接的,提供可靠交付服务,端到端的通信;udp是无连接的,尽最大努力交付)
关于三次握手和四次挥手的文章,强推
Q:tcp为什么可靠?
A:(说到了连接可靠,超时重传,确认机制)
Q:udp没有建立连接是如何把数据发送过去的?
A:在应用程序获取的数据前面加上UDP头部,然后交给IP层去发送。接收数据时,根据IP头部中的发送方和接收方IP地址,以及UDP头部中的发送方和接收方端口号找到相应的套接字,将数据交给相应的应用程序即可。
Q:发送10M的数据,可以用哪个发,发送10个字节收到10个字节吗
A:(不会)
关于用哪个发的问题,自己下来思考了一下,如果10M的数据要求完整可靠的发送,就要考虑TCP,而如果是为了即时发送,对数据完整性要求不高,可以考虑UDP。
Q7:Mysql中的存储引擎,MyISAM和InnoDB中索引的区别
A:(MyISAM不支持事务,InnoDB支持事务)
MyISAM不支持事务和行级锁,只有表级锁且不支持外键,更强调性能,执行速度比InnoDB更快,最大的缺陷是崩溃后无法安全恢复。
Innodb支持事务,行级锁和表级锁,默认为行级锁,支持多版本并发控制(MVCC)
Mysql在5.5版本后默认存储引擎为InnoDB。
Q8:不用数学库,如何求一个数的平方根
A:(有点懵,没说出来,其实是二分思想,挺简单的)
结果自然不用多说了,继续加油吧,争取春招能找个实习。