首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

个人java基础小结

2012-11-03 
个人java基础总结!--@page { margin: 2cm }P { margin-bottom: 0.21cm }--string、stringbuffer、stringbu

个人java基础总结

<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }-->

    stringstringbufferstringbuilder的区别

String:

是对象不是原始类型.

为不可变对象,一旦被创建,就不能修改它的值.

对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.

?

String是final类,即不能被继承.

  public final class String    implements java.io.Serializable, Comparable<String>, CharSequence{    /** The value is used for character storage. */    private final char value[];...
?

StringBuffer

是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象

它只能通过构造函数来建立,

StringBuffersb = new StringBuffer();

对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer

中付值的时候可以通过它的append方法.

?

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大

Stringbuffer底层是用char[]实现的,默认长度16,默认增长长度(value.length+ 1) * 2

?

Stringbuffer比StringBuilder唯一区别即增加synchronized关键字,所以是线程安全的;

?

    说一下ErrorExceptionRuntimeException并举例开发中是怎么用的。

Throwable是所有 Java 程序中错误处理的父类,有两种资类: Error 和Exception 。

Error:表示由 JVM所侦测到的无法预期的错误,由于这是属于 JVM层次的严重错误 ,导致 JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。

Exception:表示可恢复的例外,这是可捕捉到的。

?

Java提供了两类主要的异常 :runtimeexception 和 checkedexception 。 checked异常也就是我们经常遇到的 IO异常,以及 SQL异常都是这种异常。 对于这种异常, JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch 块去处理可能的异常。

但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run() 抛出,如果是单线程就被 main()抛出 。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception 的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。

如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。

异常处理的目标之一就是为了把程序从异常中恢复出来。

    Java内存溢出与泄漏,举例说明

原因有很多种,比如:

?

1.数据量过于庞大;死循环;静态变量和静态方法过多;递归;无法确定是否被引用的对象;例如:读大文件

?

2.虚拟机不回收内存(内存泄漏);例如:数据库连接不关闭

    Java的垃圾回收机制

Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,问到这个问题的时候,70%以上的人回答的含义是回收对象,实际上这是不正确的。

System.gc()

Runtime.getRuntime().gc()

上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。

    Xml有哪些解析技术,区别是什么

Java中xml有4中解析技术,其中2种是基本的解析技术dom、xas

DOM是基于XML文档树结构的解析,一次性全部读入内存

Sax是基于事件流的解析

DOM4J是一个非常非常优秀的JavaXML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,hibernate就是使用的此种技术

JDOM:为减少DOM、SAX的编码量,出现了JDOM;优点:极大减少了代码量

    Listmap set都继承自collection接口吗?说出其异同

List中的元素可以重复,而set中的元素不可以重复

LinkedList是用内部类实现的双向链表

privatestaticclassEntry<E>{

Eelement;

Entry<E>next;

Entry<E>previous;

?

Entry(Eelement, Entry<E>next, Entry<E>previous) {

this.element= element;

this.next= next;

this.previous= previous;

}

}

ArrayList是以Object[]elementData数组的形式实现的,初始长度为10.

默认增长newCapacity= (oldCapacity * 3)/2 + 1;

?

CopyOnWriteArrayList 线程安全的集合,为jdk1.5新增的类

也是采用Object[] 实现的,但是初始长度为0

它是采用Array.copy技术实现的数组增长,所以不存在默认增长长度问题

?

HashSet采用哈希技术,TreeSet虽然存入的顺序跟存储的顺序不同,但是存储是按照排序存储的。

HashMap是线程不安全的,HashTable是线程安全的,TreeMap是排序的

?

ConcurrentHashMap 也是线程安全的,为jdk1.5新增加的类,

HashTable在同步过程中会锁定整个hashtable,效率较低

而ConcurrentHashMap将整个hashtable分成16个桶,同步过程中只锁定目标桶即可,所以允许最多16个进程同时操作,比HashTable效率要高

?

    Oracle的事物隔离级别

?ANSI/ISOSQL92标准定义了一些数据库操作的隔离级别:

???????????未提交读(readuncommitted)

???????????提交读(readcommitted)

???????????重复读(repeatableread)

???????????序列化(serializable)

??????????通过一些现象,可以反映出隔离级别的效果。这些现象有:

???????????更新丢失(lostupdate):当系统允许两个事务同时更新同一数据是,发生更新丢失。

???????????脏读(dirtyread):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

???????????非重复读(nonrepeatableread):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(Atransaction rereads data it has previously read and finds thatanother committed transaction has modified or deleted the data.?)

???????????幻像(phantomread):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(Atransaction reexecutes a query returning a set of rows that satisfiesa search condition and finds that another committed transaction hasinserted additional rows that satisfy the condition.? )

??????????下面是隔离级别及其对应的可能出现或不可能出现的现象

?

DirtyRead?

NonRepeatableRead?

PhantomRead?

Readuncommitted

Possible

Possible

Possible

Readcommitted

Notpossible

Possible

Possible

Repeatableread

Notpossible

Notpossible

Possible

Serializable

Notpossible

Notpossible

Notpossible

?

?

ORACLE的隔离级别

?

??????????ORACLE提供了SQL92标准中的readcommitted和serializable,同时提供了非SQL92标准的read-only。

???????????readcommitted:

??????????这是ORACLE缺省的事务隔离级别。

??????????事务中的每一条语句都遵从语句级的读一致性。

    保证不会脏读;但可能出现非重复读和幻像。

    ???????????serializable:

    ??????????简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。

    ??????????仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改。

    ??????????保证不会出现非重复读和幻像。

    ??????????Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作。

    ??????????如果有在serializable事务开始时未提交的事务在serializable事务结束之前修改了serializable事务将要修改的行并进行了提交,则serializable事务不会读到这些变更,因此发生无法序列化访问的错误。(换一种解释方法:只要在serializable事务开始到结束之间有其他事务对serializable事务要修改的东西进行了修改并提交了修改,则发生无法序列化访问的错误。)

    ???????????read-only:

    ??????????遵从事务级的读一致性,仅仅能看见在本事务开始前由其它事务提交的更改。

    ??????????不允许在本事务中进行DML操作。

    ??????????readonly是serializable的子集。它们都避免了非重复读和幻像。区别是在readonly中是只读;而在serializable中可以进行DML操作。

    ??????????Exportwith CONSISTENT = Y sets the transaction to read-only.

    ???????????readcommitted和serializable的区别和联系:

    ??????????事务1先于事务2开始,并保持未提交状态。事务2想要修改正被事务1修改的行。事务2等待。如果事务1回滚,则事务2(不论是readcommitted还是serializable方式)进行它想要做的修改。如果事务1提交,则当事务2是readcommitted方式时,进行它想要做的修改;当事务2是serializable方式时,失败并报错“Cannotserialize access”,因为事务2看不见事务1提交的修改,且事务2想在事务一修改的基础上再做修改。

      statementpreparedstatementcallablestatement有什么区别

      数据库命令分类

    Ddl数据定义语言:create、alter、drop

    Dml数据控制语言:insert、update、delete

    Dcl数据库控制语言:授权、角色控制等grant、revoke

    Tcl事务控制语言:commit、rollback

      Getset的区别

    1.get是从服务器上获取数据,post是向服务器传送数据。

    2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTMLHEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

    3.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。

    4.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

    建议:

    1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;

    2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

热点排行