网易校招题目演练

一面 (50mins 现场面,两个面试官混合双打,过)

因为我写了个静态http服务器,为了替代博客上的hexo的部分功能。
nginx多了解?配置情况?

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。


什么是反向代理?

计算机网络中,反向代理是代理服务器的一种。服务器根据客户端的请求,从其关联的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器簇的存在

根据正向代理,退出反向代理


我那http服务器一个连接到结束的整个流程


为什么需要timewait?

四次挥手最后一次等待时间,确认最后一次报文能够到达。断开连接


握手三次挥手四次?要是接收到FIN的时候没有消息要发送了呢?

 


tcp怎么实现可靠传输?

TCP 可靠传输

1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。

2、数据校验

3、数据合理分片和排序:


(我不小心讲到了拥塞控制去了)拥塞控制和可靠传输和有关吗?


从输入网址到浏览器显示网页的过程?尽量详细

DNS域名解析,TCP连接,HTTP协议


讲一下dns协议

域名解析协议,将域名解析为ip地址


讲一下ip包在路由器的传播

 


arp协议怎么运作的?

 


一个arp包会穿过路由器传播吗?

 


http1.0和1.1的区别

1、HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理

HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。


浏览器怎么解析http的?

 


网络攻击有哪些?除了sql注入有了解过其他方面吗?


有在linux下抓过包吗?


如果遭遇Syn Flood攻击,怎么追查?wireshark用什么命令过滤?

 

epoll和select区别

 

(1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。

(2)select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,而且把current往等待队列上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,只是一个epoll内部定义的等待队列)。这也能节省不少的开销。

 

简单磊说,select,poll 需要不断轮询fd集合, epoll只需要判断就绪链表是否为空

select,poll每次调用都要需要把fd集合从用户态往内核态拷贝,epoll不需要拷贝。


c++多态?尽量详细

子类重写父类虚函数, 父类指针指向子类函数,调用子类虚函数,多态。


类的内存分配?有无虚函数和多继承情况下?


tcp/ip模型?


每层各有什么协议?


应用层有哪些协议用到udp?

 

数据库范式了解吗?建表的时候有用到?


数据库性能调优?


数据库引擎有哪些?区别?


数据库回滚是什么原理?


InnoDB普通查询会不会加锁?


乐观锁悲观锁讲一下?

为什么需要锁(并发控制)?

  在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。

典型的冲突有:

  • 丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。
  • 脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:用户A,B看到的值都是6,用户B把值改为2,用户A读到的值仍为6。

为了解决这些并发带来的问题。 我们需要引入并发控制机制。

  悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。[1]

  乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。[1] 乐观锁不能解决脏读的问题。


除了自旋互斥锁还有什么锁?
进程线程之间通信的方式

一、进程间的通信方式


管道( pipe ): 
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。


有名管道 (namedpipe) : 
有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。


信号量(semophore ) : 
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。


消息队列( messagequeue ) : 
消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。


信号 (sinal ) : 
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。


共享内存(shared memory ) : 
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。


套接字(socket ) : 
套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同设备及其间的进程通信。

 

二、线程间的通信方式
锁机制:包括互斥锁、条件变量、读写锁 
互斥锁提供了以排他方式防止数据结构被并发修改的方法。 
读写锁允许多个线程同时读共享数据,而对写操作是互斥的。 


条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。


信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
信号机制(Signal):类似进程间的信号处理 


线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。
 

 

windows api了解吗?


linux系统怎么看系统资源状况?


怎么看io情况?除了top呢?

 

我们来写一个简单的sql吧!(只写了外面一层sql,发现是leetcode原题178. 分数排名。)

 

为什么要做静态http服务器?


讲一下你的epoll怎么运作的

委托内核监听IO事件,处理IO请求。


如果对端传数据传的很慢,那么用非阻塞epoll是不是就读到不完整的请求了?

是的,改用水平触发模式可以解决

 

水平触发会不断提醒,边缘触发只会提醒一次


如果读的文件非常大,write返回0,但是文件还没写完怎么办,怎么办?(改用阻塞的话,tcp会自动阻塞直到可以发出。继续用非阻塞的话,服务端就要判断返回eagain的时候是否已经发送完成了,客户端方面可以使用Content-type,表示文件总大小)
手写一下get的请求和应答头


应答头和文件的分隔符?文件的结束符?


讲一下输入网址到显示网页


dns协议?


arp协议?


a主机访问b主机,在不同的局域网,那么ip包怎么传输?


tcp为什么不能是两次握手?


map和unordermap的区别?


求topK怎么求,N>>k


快排求topk复杂度

O(N)

(下面来了,我开始崩盘了,基本只回答了10%吧)
操作系统了解不?
物理内存和虚拟内存的区别?
为什么要用虚拟内存?
一个进程在内存中是不是连续的?
一个进程在内存中如果是不连续的,那么会产生很多内存碎片吧,内存碎片无法被利用,那怎么办?
Linux写入一个文件的过程中,这个文件被移动了,那怎么办?从linux的文件系统原理分析一下?

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值