近期海投笔面试遇到的问题(4)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzw_ice/article/details/79652910
  • 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.html

  • java默认类加载器层次关系
    借鉴下别人的文章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


暂时就这么多了,还有些需要整理的,下一篇再收拾下
&_&
@_@
¥_¥

猜你喜欢

转载自blog.csdn.net/wzw_ice/article/details/79652910