Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1371698
  • 博文数量: 478
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4833
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 11:12
文章分类

全部博文(478)

文章存档

2019年(1)

2018年(27)

2017年(21)

2016年(171)

2015年(258)

我的朋友

分类: Android平台

2016-10-21 16:19:16

http://blog.csdn.net/qq_25827845/article/details/52592520?ref=myread

1、加载驱动方法              2016-09-20

1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");      调用方法 Class.forName
2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());            通过registerDriver方法注册

3.System.setProperty("jdbc.drivers", "com..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上查看代码片派生到我的代码片
  1. public class Test{   
  2.     public String name="abc";   
  3.     public static void main(String[] args){   
  4.         Test test=new Test();   
  5.         Test testB=new Test();   
  6.         System.out.println(test.equals(testB)+","+test.name.equals(testB.name));   
  7.     }   
  8. }  
输出为:false和true
 
解析:equals没重写时候和==一样,比较的是对象的地址,题中new 了两个对象,所以各自地址不一样,使用equals比较为false,但是string类型中的equals方法Java默认重写了,可以比较对象里的值;两个对象指向的同一个string成员变量里的值相同,所以eqauals比较也相同。
即equals方法没重写之前也是比较地址,重写之后可以比较值是否相等。

 

 

 4、虚拟机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上查看代码片派生到我的代码片
  1. "font-size:14px;">int i = 5;  
  2. int j = 10;  
  3. 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上查看代码片派生到我的代码片
  1. byte b1=1,b2=2,b3,b6;   
  2. final byte b4=4,b5=6;   
  3. b6=b4+b5;   
  4. b3=(b1+b2);   
  5. 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上查看代码片派生到我的代码片
  1. public class TestClass {  
  2.    private static void testMethod(){  
  3.         System.out.println("testMethod");  
  4.    }  
  5.    public static void main(String[] args) {  
  6.         ((TestClass)null).testMethod();  
  7.    }  
  8. }  

若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语句块是不管有没有出现异常都要执行的内容。

 


 

20、静态内部类和非静态内部类创建对象的区别:    10-17

 

 

 

 


阅读(803) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~