java基础知识学习(二)

  1. Tomcat的优化经验
    • 去掉web.xml的监视,把jsp提前编辑成servelt 有富余物理内存的情况下,加大tomcat使用jvm的内存
  2. HTTP请求GET和POST方式的区别?
    1. GET请求数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后在传输
    2. POST请求会把请求的数据放在HTTP请求包的包体中.
      因此,GET请求的数据会暴露在地址栏中,而POST则不会
    3. 传输数据的大小
      HTTP规范中,没有对URL的长度和传输的数据大小进行限制.但是在实际开发过程中,对GET,特定的浏览器和 服务器对URL的长度有限制.因此,在使用GET请求时,传输数据会受到URL长度的限制
      对于POST提交数据大小进行限制,Apache,IIS都有各自的配置
    4. 安全性
      POST的安全性比get高.
  3. 解释一下什么是servelt
    1. servelt的运行过程

      1. Web服务器首先检查是否已经装载并创建了该servelt的实例对象,如果是指定第4布,如果不是则执行第2部
      2. 装载并创建servlet的一个实例对象
      3. 调用servlet实例对象的init()方法
      4. 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应 消息的HttpServletResponse对象,然后调用servlet的service()方法并将请求和响应对象作为参数传递进去
      5. WEB应用程序被停止或重启之前,servlet引擎将卸载servlet,并在写在之前调用Servlet的destory()方法
    2. servlet接口的实现类
      两个默认的实现类 ,分别为GenericServlet,HttpServlet

      HttpServlet指能够处理HTTP请求的Servlet,它在原有Servlet接口上添加了一些HTTP协议处理方法,它比Servlet接口的功能更为强大,因此开发人员在编写Servlet时,通常应该继承这个类,避免直接去实现Servlet接口

      HttpServlet在实现Servle接口的时候,覆盖了service方法,该方法体内的方法会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如果是POST请求,则调用doPost方法.因此开发人员通常只需要覆盖doGet或者doPost方法,而不需要去覆盖service()

  4. servlet中forward和redirect的区别?
    前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,后者则是完全跳转,浏览器将会得到跳转的地址,并重新发送请求链接.这样,从浏览器的地址栏中可以看到跳转后的链接地址,所以前者更加高效,在前者满足需要时,尽量使用forword()方法,并且,这样也有助于隐藏实际的链接,在有些情况下,例如,需要跳转到其他服务器上的资源,则必须使用sendRedirect()方法
  5. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
    JSP是Servle技术的扩展,本质上是servlet的简易方式,更强调应用的外表表达
    JSP编译后是类Servlet,servlet的应用逻辑是在java文件中,并且完全从表层中的HTML里分离开来,而JSP的情况是java和HTML可以组成一个扩展名为.jsp的文件,JSP侧重于视图,servlet主要集中于控制逻辑
  6. 视图
    1. view,是一种有结构(有行有列),但是没有结果(结果中不真实存放数据)的虚拟表,虚拟表的结构不是自己定义,而是从对应的基表中产生
    2. 创建视图 create view 视图名称 as select语句
    3. 修改视图 :alter view 视图名称 as 新的select语句
    4. 删除视图 drop view 视图名称
    5. 视图的意义
      1. 视图可以节省sql语句,将一天复杂的sql语句使用视图进行保存,以后可以直接对视图进行操作即可
      2. 数据安全,视图是主要针对查询的,如果删除视图不会影响基表的数据
      3. 视图往往在大的项目中使用,可以对外 提供有用的数据,隐藏关键的字段
    6. 视图数据操作
      1. 单表视图插入数据(多表视图不能新增数据) insert into viewone values('小王',23,176);
      2. 单表视图删除数据(多表视图不能删除数据) delete from viewone where c_id = 5;
    7. 事物
      1. 事物一系列要发生的连续操作
      2. 事物安全:是一种保证连贯操作同事实现的机制
      3. 事物操作分两种,自动事物和手动事物
        1. 手动事物:
          1. 开启事物:告诉系统以下所有操作,不要直接写入数据表,先存放到事物日志.start transition
          2. 进行事物操作,一系列操作
          3. 关闭事物:选择性的将日志文件中操作的结果保存到数据表,或者直接清空事物日志,即某一个步骤操作失败,此时真正的表数据是不会发生改变的
            1. 提交事物:同步数据表(操作成功);commit
            2. 事物回滚:直接清空日至(操作失败);rollback
      4. 事物原理
        1. 事物开启之后所有的操作都会保存到事物日志中,事物日志只有在得到commit之后,才会同步到数据库,其他任何情况都会清空
      5. 回滚点
        1. 在某个成功的操作完成之后,后续的操作有可能成功,也有可能失败,不管成功还是失败,前面的操作都已经成功,可以在当前成功的位置设置一个点,当后续操作失败的时候,返回到该位置,而不是返回所有的操作,该点,成为回滚点
      6. 事物特性(事物有四大特性)
        • A : atomic ,原子性,事务的整个操作不可分割,要么全部成功,要么全部失败。
        • C:consistency,一致性, 事务操作的前后,数据表中的数据没有变化。
        • I : isolation,隔离性, 事务操作是相互隔离不受影响的。
        • D:持久性,数据一旦提交,不可改变,永久的改变数据表中的数据。
  7. 触发器
    1. trigger,事先为某张表绑定好一张代码,当表中的某些内容发生改变的时候,系统会自动触发代码然后执行
      • 一个出发器主要有下面三个部分组成
      • 触发器:时间类型,触发时间,触发对象
      • 时间类型:增删改,insert,delete,update
      • 触发时间:前后:before,after
      • 触发对象:表中的每一条记录
      • 一张表中只能有一种触发的时间的类型的触发器,最多一张表能有6个触发器
    2. 创建触发器
      1. 触发器的基本语法

        临时修改语句结束符

  	delimiter 自定义符号:后续代码中只有碰到自定义符号才算结束
  	create trigger 触发器名称 触发时间 事件类型 on 表名 for each row
  	begin --表示左大括号:开始
  			--里面就是触发器的内容:每行语句都必须使用语句结束符:分号
  	end --代表右大括号:结束
  自定义符号:
  	-- 将临时修改修正过来
  	delimiter;
3. 触发器的记录
	- 触发器记录:不管触发器是否触发,只要当某种操作准备执行,系统就会将当前要操作的记录的状态i和即将执行之后的新的状态给分别保留下来供触发器使用.其中,要操作的当前状态保存到old中,操作之后的可能的形态保存给new.
  1. Class.forName的作用?为什么要用?
    • 按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过,则返回代表该字节码的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类,则抛出ClassNotFoundException。加载完这个Class字节码后,接着就可以使用Class字节码的newInstance方法去创建该类的实例对象了。
      有时候,我们程序中所有使用的具体类名在设计时(即开发时)无法确定,只有程序运行时才能确定,这时候就需要使用Class.forName去动态加载该类,这个类名通常是在配置文件中配置的,例如,spring的ioc中每次依赖注入的具体类就是这样配置的,jdbc的驱动类名通常也是通过配置文件来配置的,以便在产品交付使用后不用修改源程序就可以更换驱动类名。
  2. 说说连接池的工作机制是什么?
    • J2EE服务器在启动时会建立一定数量的池连接并一直维持不少于此数目的池连接.客户端程序需要连接的时候,池驱动程序会返回一个未使用的池连接并将其标记为忙.如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定.当使用的池连接调用完成后,池驱动程序将此连接标记为空闲,其他的调用就可以使用这个连接了
    • 实现方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正的关闭连接,而是把它代理的Connection对象返回到连接池中
原文地址:https://www.cnblogs.com/zddsblog/p/7448979.html