返回 登录
0

java基础概念

1、加载驱动方法

1.Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); 调用方法 Class.forName

  1. DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 通过registerDriver方法注册

3.System.setProperty(“jdbc.drivers”, “com.MySQL.jdbc.Driver”); 通过添加系统的jdbc.drivers属性

2、接口中的数据类型和方法类型

publicinterfaceIService {

          String NAME="default";

 }   的默认数据类型等价于:public static final  String NAME=“default” ;

接口中的变量默认是public static final 的,方法默认是public abstract 的

3、equals和==的区别:

[java] view plain copy 在CODE上查看代码片派生到我的代码片
01.public class Test{
02. public String name=”abc”;
03. public static void main(String[] args){
04. Test test=new Test();
05. Test testB=new Test();
06. System.out.println(test.equals(testB)+”,”+test.name.equals(testB.name));
07. }
08.}

输出为:false和true

解析:equals没重写时候和==一样,比较的是对象的地址,题中new 了两个对象,所以各自地址不一样,使用equals比较为false,但是string类型中的equals方法Java默认重写了,可以比较对象里的值;两个对象指向的同一个string成员变量里的值相同,所以eqauals比较也相同。

即equals方法没重写之前也是比较地址,重写之后可以比较值是否相等。

4、Java虚拟机JVM的功能:

(1)通过 ClassLoader 寻找和装载 class 文件
(2)解释字节码成为指令并执行,提供 class 文件的运行环境
(3)进行运行期间垃圾回收
(4)提供与硬件交互的平台

5、会话跟踪技术:

(1)Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端
(2)关闭浏览器意味着会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期
(3)在禁用Cookie时可以使用URL重写技术跟踪会话

6、java 类加载器

(1)引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
(2)扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
(3)系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
(4)tomcat 为每个 App 创建一个 Loader,里面保存着此 WebApp 的 ClassLoader。需要加载 WebApp 下的类时,就取出 ClassLoader 来使用

7、以下代码输出结果为:(C)

[java] view plain copy 在CODE上查看代码片派生到我的代码片
01.int i = 5;
02.int j = 10;
03.System.out.println(i + ~j);

A Compilation error because”~”doesn’t operate on integers
B -5
C -6
D 15

解析:很有趣的一个符号,以前没有见过。。。。。。 涉及到补码等知识,公式:~j=-j-1

8、标准输入输出流:

     一般用(System.in)创建InputStream对象,表示从标准输入中获取数据,用(System.out)创建OutputStream对象,表示输出到标准输出设备中。

9、关于运算时的类型问题:

[java] view plain copy 在CODE上查看代码片派生到我的代码片
01.byte b1=1,b2=2,b3,b6;
02.final byte b4=4,b5=6;
03.b6=b4+b5;
04.b3=(b1+b2);
05.System.out.println(b3+b6);

以上的代码片段叙述正确的为(C)

A 输出结果:13
B 语句:b6=b4+b5编译出错
C 语句:b3=b1+b2编译出错
D 运行期抛出异常

解析:

  被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了

而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。

10、HashMap解决哈希冲突的方法:

HashMap通过开放地址法解决哈希冲突 错

解析:

    源码程序中用到了一个重要的内部接口:Map.Entry,每个 Map.Entry 其实就是一个 key-value 对。当系统决定存储 HashMap 中的 key-value 对时,完全没有考虑 Entry 中的 value,仅仅只是根据 key 来计算并决定每个 Entry 的存储位置。Entry是数组,数组中的每个元素上挂这个一条链表。
   链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。很显然我们使用的不是开放地址法。

11、并发与并行的区别与联系:

   并发:在 操作系统 中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个 处理机 上运行。


   并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特性;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。

12、Struts1和Struts2的区别:

从action类上分析:
1.Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
2. Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
从Servlet 依赖分析:
3. Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
4. Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
从action线程模式分析:
5. Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
6. Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

13、非线性数据结构和线性数据结构: 2016-10-07

数据的逻辑结构分为线性结构和非线性结构。

常用的线性结构有:线性表,栈,队列,双队列,数组,串。

常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。

14、8中基本数据类型的默认初始值 2016-10-08

15、Java标识符: 2016-10-10

标识符:

用来表示变量名,方法名,类名,数组名和文件名的有效字符序列。

也就是说,任何一个变量,常量,方法,对象和类都需要有名字,这些名字就是标识符。

规定如下:

(1)标识符可以由数字、字母、下划线或美元符号等组合而成。

(2)必须以字母、下划线或者美元符号开头,不能以数字开头路。

16、静态static方法竟然可以这么玩。。。

以下程序能正确输出。

[java] view plain copy 在CODE上查看代码片派生到我的代码片
01.public class TestClass {
02. private static void testMethod(){
03. System.out.println(“testMethod”);
04. }
05. public static void main(String[] args) {
06. ((TestClass)null).testMethod();
07. }
08.}

若testMethod( )方法为非静态方法,则报错:空指针异常。。。

17、Java初始化顺序: 10-12

初始化过程:

  1. 初始化父类中的静态成员变量和静态代码块 ;

  2. 初始化子类中的静态成员变量和静态代码块 ;

3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;

4.初始化子类的普通成员变量和代码块,再执行子类的构造方法;

18、Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet

(2)创建:通过调用servlet构造函数创建一个servlet对象

(3)初始化:调用init方法初始化

(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求

(5)卸载:调用destroy方法让servlet自己释放其占用的资源

19、Java中的异常相关概念: 10-15

throw用于在方法内抛出异常对象。

throws关键字用于在方法上抛出异常。

try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。

finally语句块是不管有没有出现异常都要执行的内容。

评论