腾讯实习面试(二)

本文解析了HTTP请求的生命周期,详细介绍了从HTTP服务器捕获请求到构造响应报文的过程。同时探讨了一个典型的多线程场景下读者/写者问题,并给出了Java代码实现。

昨天进行了二面,记录如下:

1. HTTP请求的生命周期?

我以Tomcat+Servlet为例进行的说明。

一些简要背景:

1) Servlet在web.xml中配置,每个Servlet与一个确定的url pattern绑定
2) Servlet需要实现对应的HTTP请求处理方法,如post对应doPost, get对应doGet, head对应doHead等
3) 处理HTTP请求时,可以访问和修改一些保存了HTTP请求上下文信息的全局变量,例如cookie, session, request, response等

所以可以简要归纳如下:

1) HTTP服务器捕获HTTP请求
2) 请求中包含URL,根据web.xml中定义的url pattern-Servlet分发规则,将请求分发给具体的Servlet处理
3) 请求中包含了一些上下文信息,例如url-encode过的参数、cookie等,被包装进对应的上下文信息容器对象,作为参数传给Servlet的HTTP请求处理方法
4) HTTP服务器执行Servlet中定义的HTTP请求处理方法后,根据改变后的上下文信息构造响应HTTP报文,反馈给客户端

自己想出来的,表述可能有不规范之处,但大致的过程正确。

2. 多线程读者/写者问题:现在有一个队列,队首出列,队尾追加。有1个写者线程,4个读者线程,如何保证操作的正确性?请写出Java代码。

典型的信号量P/V操作问题:读者/写者通过两个信号量full/empty同步,读者间通过mutex获取对队列的操作,保证出列操作正确性。详见操作系统相关书籍。

Java中提供了Semaphore类,位于java.util.concurrent包中。C/C++可以使用sem_wait和sem_post方法。

其他问题都比较水,在这里就不写了。

备注:进入HR终面,下午再次奔赴市区。

转载于:https://www.cnblogs.com/mdyang/archive/2011/05/12/2044134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值