Java进阶知识
常见异常:
空指针异常NullPointerException,调用了未经初始化的对象或不存在的对象,或访问或修改了null对象的属性或方法;
找不到类名异常ClassNotFoundException,的确不存在,开发环境进行了调整或,如类的根目录结构、编译运行时发生变化的等;
类名不合法异常IllegalAgreementException,向方法传递了不合法或不正确的参数;
输入不匹配异常InputMismatchException,由scanner抛出表获取内容与期望类型的模式不一致或内容超出预期;IllegalAccessException,应用程序试图创建一个实例、设置或获取一个属性,或调用一个方法,但当前正在执行的方法无法访问指定类、属性、方法或构造方法的定义时;
ClassCastExceptiom,当试图将对象转换为不是实例的子类时抛出;
SQLException,数据库访问或其他错误信息的异常;
IOException,发生某种I/O异常。
运行时异常和检查时异常的区别:
运行时异常,不要求程序在编译时对异常进行处理,也能编译通过;
检查时异常又称非运行异常,要求程序员必须在编译时进行处理,否则编译不通过。
【企业面试常考】ArrayList和LinkList的区别:
前者采用数组进行顺序存储,在插入或删除数据时,需要批量移动数据元素,故性能较差;在查询数据元素时,因为数组是是连续存储的,可以通过下标进行访问,故在遍历元素或随机访问元素时效率高。LinkList则相反。
顺序存储结构和链式存储结构的优缺点:
前者 优点:节省存储空间(分配的存储单元全用来存放节点的数据,节点间逻辑关系没有占用额外的存储空间);增加访问速度(存储单元存放可实现节点的随机存取);查找速度快。缺点:插删慢
后者 优点:插删快。 缺点:占用空间大(每个节点都由数据域和指针域组成);查找速度慢(通过指针逐个查找)。
栈和队列两种数据结构特点:
栈Stack:先进后出或后进先出;只能在一端进行插入和删除操作的特殊的线性表。
队列Queue:先进先出或后进后出;只允许在队头进行删除操作和在队尾进行插入操作。
二分(折半)查找优缺点及其适用范围:
优点:比较次数少;查找速度快;平均性能好。缺点:要求待查数据为有序结构;插入删除困难。
适用范围:数据不常变动而查找频繁。
Set接口和List接口的区别:
Set接口为无序、不允许重复 故不可通过索引访问Set接口中的数据元素;
List接口为有序,允许重复,操作此接口的用户可对这个序列中每个元素进行精确控制。
Collections和Collection的区别:
Collections工具类,是集合对象工具类,提供了操作集合的工具方法,如排序、复制和反转排序等。
Array工具类,是数组的工具类,提供了操作数组的工具方法,如排序、二分查找等。
Collection是最基本的集合接口,继承自Iterable接口,一个Collection代表一个Object,每个Object即Collection中的元素。
Comparable和Comparator的区别:
ComparableTreeSet集合内默认是按照自然顺序排序的,在集合内元素间的比较,由compareTo(Object o)方法完成,故称为内部比较器;string和各种包装类已经实现了Comparable接口;存入TreeSet中的对象需要实现Comparable接口。
Comparator为外部比较器,当集合中的对象不支持自比较或自比较功能不满足程序员需求时用;配合Collections的sort(List list,Comparator c)方法配合使用;和内部比较器Comparable相比,可重用性好。
泛型:解决程序可读性及强制类型转换时的稳定性问题。
泛型产生原因:装入集合的各种类型对象都被当成Object对待,失去了自己的类型,而从集合中取出对象时需要进行类型转换,效率低下且容易出错。
要使编写Java程序具有跨平台性,在进行文件操作时需要注意:
File类创建一个路径的抽象时,保证创建的File类也跨平台,并注意不同操作系统对文件路径的设定。Linux和Unix系统下,PATH分隔符为“:”,路径分隔符为"/";而Window系统下路径分隔符为反斜杠"\"或双斜杠"//"。
字节流和字符流的区别,及字符流的好处:
字节流:处理单位是字节,常用来处理音乐图片文件等二进制文件;1个汉字将通过2次才可操作。
字符流:处理单位是Unicode编码字符;1个汉字只需操作一次。
字符流好处:在操作汉字、国际化等方面具有优势。
静态导入及静态导入的优缺点:
静态导入:用来指定类的某个静态属性或方法,或全部静态属性或方法。
优点:省略了System和Integer的书写,代码编写相对简单。
缺点:代码相对简单的同时使代码可读性性降低;可能引起静态导入冲突,如同时导入Integer和Long类,编译器无法识别两类中都有Max_value常量属性。
为什么使用缓冲流:
字节流和字符流都是无缓冲的输入输出流,每次读写都交给操作系统处理,每次读写都可能引发磁盘硬件的读写或网络访问顺而占用大量操作系统资源,影响效率的同时还可能对系统的性能造成很大影响。
缓冲流是一种装饰器类,目的是让原字节流字符流新增缓冲的功能。以字符流为例,字符缓冲流从字符流中读取写入字符,不立刻要求系统进行处理,而是缓冲部分字符,从而实现按规定字符数、按行等方式的高效读取或写入。缓冲区的大小可以指定(缓冲流构造方法指定)。
有些情况下,不是非要等缓冲区满才向文件系统写入,如在处理一些关键数据时,需要立即将这些关键数据写入文件系统,可调用flush()方法,手动刷新缓冲流。
调用一次flash()方法将刷新Writer和OutputStream链中的所有缓冲区。
装饰器模式和适配器模式:
装饰器模式在实际中的使用过程:对象的引用要传入装饰类中,动态地给这些对象增加额外的功能,形成新的对象,而这些新的对象才是实际需要的字节流和字符流。
适配器模式:将字节流转换为字符流,实际上使用的一种设计模式。意图是将一个类的接口转换成用户希望的另外一个接口,该模式使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
XML表示数据的优点及XML文档的应用范围:
优点:简单、灵活、交互性好、可扩展性。
应用范围:存储数据、系统配置、数据交换。
解析XML文档技术有哪些及它们的区别:
DOM解析:DOM是W3C标准,提供的是标准的解析方式。
DOM解析方式一直不如人意的原因:DOM解析XML文档时,把所有内容一次性转载人内存,并构建一个准留在内存中的节点树;如果需要解析的XML文档过大,或只对该文档的部分感兴趣,这中做法会引起性能问题。
SAX解析:既是一个接口,也是个软件包。在解析XML时是事件驱动型,
SAX解析工作原理:对文档进行顺序扫描,当扫描文档开始与结束、元素开始与结束等地方时通知事件处理程序,有事件处理程序做相应动作,然后继续同样的扫描,直到文档结束。
SAX解析缺点:要用SAX对文档进行解析时,就要实现多个事件处理程序,用来处理可能触发的事件,对程序员而言操作起来相对复杂。