Java:
- Java的数据类型分为:基本数据类型和引用数据类型。
基本数据类型又分为:数值类型和布尔类型。包括:byte、short、int、long、char、float、double、boolean总共8种。
引用数据类型:包括类、数组和接口(出了8种基本数据类型意外的数据类型都是引用数据类型)。
而Byte、Short、Integer、Long、Character、Float、Double、Boolean这8种是上面几种基本数据类型的包装类 - 类中的成员变量存放在堆区,方法中的局部变量存放在栈区
- Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用两个字节;
Java虚拟机中通常使用UTF-16的方式保存一个字符
ResourceBundle能够根据Local的不同,选择性的读取与Local对应后缀的properties文件,以达到国际化的目的。 - java标识符格式:
标识符是以字母开头的字母数字序列。
数字是指0~9,字母指大小写英文字母、下划线(_)和美元符号($),也可以是Unicode字符集中的字符,如汉字; - List接口、Set接口、Map接口之间的关系:
Collection
----List
---LinkedList 非同步
---ArrayList 非同步,实现了可变大小的元素数组
---Vector 同步
---Stack
---Set 不允许有相同的元素
Map
---HashTable 同步,实现一个key-value映射的哈希表
---HashMap 非同步
---WeakHashMap 改进的HashMap,实现了“弱引用”,如果一个key不被引用,则被GC回收 - 整数数组类型int[]可以被转换成Object,但不能转换成对象数组。
- run方法和start方法的区别:
1.start方法
用start方法来启动线程,是真正实现了多线程,通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行。一旦得到CPU时间片,就开始执行run()方法。但要注意的是,此时无需等到run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程。
2、run方法
run()方法只是类的一个普通方法而已,如果直接调用run()方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
- jdk中的包和他们的基本功能:
java.awt:包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面
java.lang:提供java编程语言的程序设计的基础类
java.io:包含提供多种输入输出功能的类
java.net:包含执行与网络有关的类,如URL,SOCKET,SERVERSOCKET
java.applet:包含java小应用程序的类
java.util:包含一些实用性的类
JSP/Servlet:
- service()是在javax.servlet.Servlet接口中定义的,在javax.servlet.GenericServlet中实现了这个接口。
doGet/doPost则是在javax.servlet.http.HttpServlet中实现的,javax.servlet.http.HttpServlet是javax.servlet.GenericServlet的子类。
所以可以这样理解:其实所有的请求均首先由service()进行处理,而在javax.servlet.http.HttpServlet的service()方法中,主要做的事情就是判断请求类型是Get还是Post,然后调用对应的doGet/doPost执行。
Spring:
- Spring是一系列轻量级Java EE框架的集合;
- Spring中包含一个“依赖注入”模式的实现;
- 使用Spring可以实现声明式事物;
- 值得注意的是:Spring本身没有提供AOP方式的日志系统,它仅仅是支持AOP(面向方面/切面编程)。如果我们需要使用AOP编程的方式,需要借助Spring与日志系统log4j实现我们自己的日志系统
Struts2:
struts1与struts2的区别:
从Action类上分析:
1、 Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
2、 Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
从Servlet依赖分析:
1、Struts1 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。
2、Struts2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response.但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。
从Action线程模式分析:
1、 Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且在开发的时候要特别小心,因为Action资源必须是线程安全的或同步的。
2、 Struts2 Action对象为每一个请产生一个实例,因此没有线程安全问题。(实际上,Servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)