日常学习之小tip

JavaEE

识别合法的构造方法

1:构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行;
重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载。
2 当一个类中没有定义任何构造方法,Java将自动提供一个缺省构造方法;
3 子类通过super关键字调用父类的一个构造方法;
4 当子类的某个构造方法没有通过super关键字调用父类的构造方法,通过这个构造方法创建子类对象时,会自动先调用父类的缺省构造方法
5 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public、private、protected修饰;
6 构造方法不是类的成员方法;
7 构造方法不能被继承。

服务器端与客户端创建实例

服务器端:ServerSocket提供的实例 ServerSocket server = new ServerSocket(端口号)
客户端:Socket提供的实例 Socket client = new Socket(IP地址,端口号)

&、&& ;||、|

(1)使用“与”操作,所有表达式的判断结果都是TRUE才为真;若有一个为FALSE,那么最终判断结果则为FALSE。
(2)使用“或”操作,所有表达式的判断结果都是FALSE才为假;若有一个为TRUE,那么最终的结果则为TRUE。
// TODO 短路

位运算符

<<  //表示左移位
>>  //表示带符号右移位
>>> //表示无符号右移

hashMap跟hashTable的区别

// TODO:Map List源码学习
HashMap和Hashtable都实现了Map接口
HashMap是非synchronized,而Hashtable是synchronized
HashTable使用Enumeration,HashMap使用Iterator
HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

二维数组创建方式

	int a[][] = new int[6][6];
	int b[][] = new int[6][];
        //数组命名时名称与[]可随意排列
	int []c[] = new int[6][];
	int [][]d = new int[6][];

super()

  1. 构造器中第一行默认是super(),一旦直接父类的构造器中没有无参的,那么必须显式调用父类的某个有参构造。
  2. 构造器中第一行的super()可以换成this(),但是this()和super()只能出现一个。

抽象类VS接口

1.接口允许定义成员,但必须是常量。
2、抽象类和接口类的无法实例化,任何编译器中直接使用new会报错。
3.单继承 多实现

泛型

代表小于等于A的范围 代表大于等于A的范围 代表全部范围



JVM

加载顺序

1.父类静态对象,父类静态代码块
2.子类静态对象,子类静态代码块
3.父类非静态对象,父类非静态代码块,父类构造函数
4.子类非静态对象,子类非静态代码块,子类构造函数





Servlet

Servlet的生命周期

每一次请求来到容器时,会产生HttpServletRequest与HttpServlceResponse对象,并在调用service()方法时当做参数传入。
在WEB容器启动后,会读取Servlet设置信息,将Servlet类加载并实例化,并为每个Servlet设置信息产生一个ServletConfig对象,
而后调用Servlet接口的init()方法,并将产生的ServletConfig对象当作参数传入。





Struts

Struts1 VS Struts2

Action 类:
• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口。
• Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去 实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式:
• Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
• Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

Servlet 依赖:
• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
• Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。

可测性:
• 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
• Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

捕获输入:
• Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。
• Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。

表达式语言:
• Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
• Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).

MyBatis

三个对象的作用域

SqlSessionFactoryBuilder SqlSessionFactory SqlSession
有效范围 局部变量 整个程序 一次会话
生命周期 方法体内 application jsp里的session

二级缓存

一级缓存是指session,二级缓存是指factory
查询顺序:先去一级缓存中查找->若有则返回,若无则去二级缓存查找->若有则返回,若无则去数据库查找

posted @ 2020-02-06 15:03  VVII  阅读(295)  评论(0)    收藏  举报