1.http协议中time_wait和close_wait的区别
在服务器的日常维护过程中,会经常用到下面的命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
它会显示例如下面的信息:
TIME_WAIT 814
CLOSE_WAIT 1
FIN_WAIT1 1
ESTABLISHED 634
SYN_RECV 2
LAST_ACK 1
常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。一般不到万不得已的情况也不会去查看网络状态,如果服务器出了异常,百分之八九十都是下面两种情况:
(1)服务器保持了大量TIME_WAIT状态
(2)服务器保持了大量CLOSE_WAIT状态
因为linux分配给一个用户的文件句柄是有限的(可以参考:http://blog.youkuaiyun.com/shootyou/article/details/6579139),而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,而且是“占着茅坑不使劲”,一旦达到句柄数上限,新的请求就无法被处理了,接着就是大量Too Many Open Files异常,tomcat崩溃。。。
2.SpringMvc中DispatcherServlet的加载过程
在使用 SpringMVC 进行 Web 开发时,通常在 web.xml 中配置的 Servlet 都是 org.springframework.web.servlet.DispatcherServlet
(1)Tomcat调用DispatcherServlet 的构造函数
(2)FrameworkServlet 的构造函数
(3)调用HttpServletBean 中的 init()
(4)初始化Web应用上下文
(5)创建Web应用上下文
3.sql交差并
intersect,except,union
4.sql:查询每门课程分数大于80的学生姓名
SELECT s.name FROM student s GROUP BY s.name Having MIN(s.score)>=80
5.sql:删除表中除自动主键以外所有数据都相同的重复(只保留一条)记录
delete from test where id not in (select * from ((select min(id) from test group by co1,co2)) tmp);