tomcat动态加载jsp原理
Tomcat加载JSP主要有以下几个类:JspServlet、JspServletWrapper、JspCompilationContext、JspRuntimeContext、JsperLoader、Compiler。
这几个类都在jasper.jar包中
1.Tomat将http请求通过servlet转给JspServlet
2.JspServlet在JspRuntimeContext的上下文中查找JspServletWrapper,如果没有找到就新建实例,找到了话就取出来用
3.JspServletWrapper初始化时也会初始化一个JspCompilationContext
4.JspServlet将请求转给JspServletWrapper的service方法进行处理
5.JspServletWrapper将判断系统是否允许重加载this.options.getDevelopment,如果允许将调用JspCompilationContext的编译方法compile
6.JspCompilationContext的compile方法通过判断jsp文件的时间戳来决定是否将类加载器JsperLoader的引用置null
7.JspServletWrapper通过getServlet方法从JspCompilationContext加载(load方法)jsp编译后的class类,并实例化
8.JspCompilationContext类在load时,首先要获得JsperLoader,如果它为null将新建一个实例,然后让JsperLoader这个类加载器加载jsp的class
9.JspServletWrapper获得实例化的servlet后,将把JspServlet转过来的请求交由这个servlet处理tomcat的shutdown.sh关闭程序的原理
tomcat的shutdown.sh主要目的找到catalina.sh脚本位置,将启动命令参数传递给catalina.sh执行
找到的一个tomcat专题http://blog.51cto.com/vekergu/category2.htmljava默认类加载器层次关系
借鉴下别人的文章http://blog.csdn.net/wangtaomtk/article/details/52262510
有些地方自己还没看懂,消化中。。。(0.0有种java刚入门的感觉)mysql 中delete、drop、truncate区别
1、truncate 和 delete 只删除数据不删除表的结构(定义),drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index),依赖于该表的存储过程/函数将保留,但是变为 invalid 状态
2、 delete 语句是DML语言,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发,truncate、drop 是DDL语言,操作立即生效,不能回滚,操作不触发 trigger
3、 delete 语句不影响表所占用的 extent, drop 语句将表所占用的空间全部释放,truncate 语句缺省情况下将空间释放到 minextents个 extent,除非使用reuse storage
4、速度,一般来说: drop> truncate > delete
5、删除部分数据行用 delete,删除表用 drop,保留表而将所有数据删除,如果和事务无关,用truncate,如果和事务有关,或者想触发trigger,还是用delete,如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
6、truncate能够快速清空一个表。并且重置auto_increment的值。而delete只能一行一行的删除。junit单元测试
Junit4注解:
@Test:将一个方法修饰成一个可测试的方法;
@Test(expected=XXException.class):表示这个方法一定会抛出某个异常;
@Test((timeout=XX):表示这个方法执行的超时时间,单位毫秒;
@Before:会在每一个测试方法被运行前执行一次;一般用于初始化测试数据————-同Junit3的setup()
@After:会在每一个测试方法运行后被执行一次;一般用于注销测试数据。———-同Junit3的tearDown()
@BeforeClass:它会在所有的方法运行前执行,static修饰;一般用于测试需要读取文件数据时
@AfterClass:它会在所有的方法运行结束后执行,static修饰;一般用于断开文件连接。
@Ignore:所修饰的测试方法会被测试运行器忽略;
@RunWith:可以更改测试运行器 org.junit.runner.Runner;网络包结构分析
版本号4bit 包头长度4bit 服务类型8it{
000 普通 (Routine)
001 优先的 (Priority)
010 立即的发送 (Immediate)
011 闪电式的 (Flash)
100 比闪电还闪电式的 (Flash Override)
101 CRI/TIC/ECP(找不到这个词的翻译)
110 网间控制 (Internetwork Control)
111 网络控制 (Network Control)
D 时延: 0:普通 1:延迟尽量小
T 吞吐量: 0:普通 1:流量尽量大
R 可靠性: 0:普通 1:可靠性尽量大
M 传输成本: 0:普通 1:成本尽量小
0 最后一位被保留,恒定为0
}
总长度16bit、标识符16bit 、标记3bit 、片偏移13bit 、 生存周期8bit 、 协议8bit{1 ICMP;2 IGMP;6 TCP;17 UDP;88 IGRP;89 OSPF} 、头部校验16bit 、 起始地址32bit 、 目标地址32bit 、 可选项(可变长字段)、 填充位(保证包头长度为32bit倍数)python基本数据类型
整数、浮点数、字符串、布尔值、空值、变量、常量(和其他语言基本数据类型没太大区别,只是表示方式上有区别,@_@)C++里fork()和fflush()
1、 fork(): 分叉函数;成功时返回两个值,子进程返回0,父进程返回子进程标记;一个进程通过调用fork函数,创建一个新进程,新进程成为子进程(child process);for函数被调用一次,但返回两次。
2、 fflush()(C/C++标准扩充函数):flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。select、poll、epoll之间的区别总结
因为笔试遇到这题,找来浏览了下,待深入理解
https://www.cnblogs.com/Anker/p/3265058.html
http://blog.csdn.net/ysu108/article/details/7570571递归程序的优化手段
尾递归优化:收集上一次递归的值作为此次递归参数传入
(以此提醒自己刷笔试题的重要性,在某刷题网站上看到原题。。。)基于TCP、UDP的协议
1、 基于TCP协议:FTP文件传输协议、Telnet远程登陆、SMTP简单邮件传送协议、POP3邮件接收协议、HTTP超文本传输协议
2、基于UDP协议:RIP路由选择信息协议、DNS域名解析服务、SNMP简单网络管理协议、 OICQ无连接的协议Linux文件权限命令
文件的权限是这样分配的 读 写 可执行 分别对应的是 r w x 如果没有那一个权限,用 - 代替
然后又分了三个类别的权限,分别是: 文件所属主 文件所属组 其他用户
最前的那个 - ,一般普通文件就是 - ,如果是目录的话,便是 d
暂时就这么多了,还有些需要整理的,下一篇再收拾下
&_&
@_@
¥_¥