面试(Java)

来源:互联网 发布:淘宝网薄印花半大开衫 编辑:程序博客网 时间:2024/06/04 13:02

http://www.cnblogs.com/xrq730/p/5260294.html

–Java部分
*private、默认、protected、public作用范围
1)private,同类
2)默认,同类、同包
3)protected,同类,同包,子类
4)public,所有

*抽象类与接口的异同
同:具有抽象方法
异:
1)抽象类可以有构造器,非抽象方法,非公有属性,仅可以单继承抽象类
2)接口仅有公有抽象方法或者公有静态常量,可以同时实现多个接口

通俗说法:接口比抽象类更抽象(接口不能有属性,只能有方法,但抽象类可以,抽象类还可以有具体实现的方法,接口则只能有抽象方法),对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。
个人使用经验:一般在控制层使用抽象类,提取公共初始化方法、框架定制化工具方法等
一般会在业务层使用接口

*ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

*Java中的transient关键字的作用:transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

*List、Set、Collections区别
1)List,有序可重复
2)Set, 无序不可重复
3)Collections,集合工具类

*Collection和Collections的区别
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。Collections中常用的方法有Collections.sort(),Collectios.max(),Collections.binarySearch(),Collections.replaceAll(),Collections.reverse(),Collections.fill()等等

*向上转型,向下转型
向下转型Father f = new Son();
向上转型Son s = new Father();

*Java 启动线程三种方式
继承Thread,实现Runnable接口,直接在函数体使用
实现Runnable接口优势:
1)适合多个相同的程序代码的线程去处理同一个资源
2)可以避免Java中的单继承的限制
3)增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。
继承Thread类优势:
1)可以将线程类抽象出来,当需要使用抽象工厂模式设计时。
2)多线程同步(值得商榷,实现Runnable接口也可以实现多线程同步)
在函数体使用优势
1)无需继承thread或者实现Runnable,缩小作用域。
另外,实现Runnable接口的线程自身无法启动,只能通过系统线程启动,如:Thread t = new Thread(new Runnable()).start();

*Java实现多线程的3种方法:继承Thread类、实现runnable接口、使用ExecutorService,Callable、Future实现有返回值的多线程。前2种线程的实现方式没有返回值,第三种实现方式可以获取线程执行的返回值。

*线程池的submit和execute方法的区别:前者执行会返回一个future对象,可以通过这个future对象获取到线程内部的内容,后者只是会执行线程,但是没有返回值。

*重写就是再写一遍,重载就是再多一个。
重写:父类里有,子类再照猫画虎写一个。
重载:自己类里面有,觉得不够再写一个。
java的重写,是指在子类中对父类的某方法进行重新定义,其子类的该方法名以及参数搜索位置和个数均与父类相同,从而在调用子类的该方法时,不会执行父类的方法.如果在父类中以final定义的方法,在子类中无法重写.
1、重载:
方法名相同,参数列表不同
2、重写:
也叫覆盖,指在子类中定义一个与父类中方法同名同参数列表的方法。因为子类会继承父类的方法,而重写就是将从父类继承过来的方法重新定义一次,重新填写方法中的代码。
重写方法上可以加@Override,重载不可以
重写是覆盖,重载是多态

*覆写equals方法必须覆写hashCode方法是为了保证数据的唯一性
解释:对象存入带hash的集合,如hashSet,hashMap,都要基于hashCode和equals方法,当hashCode方法返回的值一样时,还会调用equals方法判断,如果两个方法返回的都是一致,才判断两个对象是同一个对象,不存入集合(带hash的集合都保证数据是唯一的!)。
equals是object类的方法,所有没有重写这个方法的类中的这个方法比较的都是地址,也就是和’==’是一样的,重写过这个方法的类就按照重写的方法来比较,比如String类就重写了这个方法,比较的是内容

–JSP,JS部分
–框架部分
–数据库部分
*inner join、left join、 right join区别
1)inner join,两表字段都有值才会显示一条记录
2)left join,两表字段值相同,以及左表字段有值,右表字段值为null,如果用where的话,由表字段为null,查询的时候会报错。
3)right join,与上相反

*数据库优化
1 查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;再比如用使用存储过程;
2 数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3 数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4 存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
对多个表进行连接查询时应遵循的优化原则:
(1) 用于连接的子句的列应被索引、在Where子句中应尽量利用索引,而不是避开索引。
(2) 连接操作应从返回较少行上驱动。
(3) 如果所连接的表A和B,A表长度远远大于B表,建议从较大的A表上驱动。
(4) 如果Where子句中含有选择性条件,Where No=20,将最具有选择性部分放在表达式最后。
(5) 如果只有一个表有索引,另一表无索引,无索引的表通常作为驱动表。如A表的No列以被索引,而B表的No 列没被索引,则应当B表作为驱动表,A表作为被驱动表。
(6) 若用于连接的列和Where子句中其他选择条件列均有索引,则按各个索引对查询的有效性和选择性分别定出级别,结合表中具体数据构成情况,从中选出优化路径,一般需要考虑:子句中哪些列可以使用索引、哪些索引具有唯一性及被查询表行数目等。

*过程主要是针对数据处理。业务性的。视图主要是取得数据。一般来说,视图只是select,没有update,delete功能。过程啥都能干。

*Oracle sql”NOT IN”语句优化,查询A表有、B表没有的数据
记录量大的情况下,采用NOT IN查询,那肯定会慢的无法接受。比如:
[sql] view plain copy
SELECT A.*
FROM TABLE_A
WHERE A.USER_ID NOT IN (SELECT B.USER_ID FROM TABLE_B)

目前找到的最优方法,可以秒查。示例如下,查询A表有、B表没有的DEPT_ID数据:
[sql] view plain copy
SELECT A.*
FROM TB_DEPT A, TB_DEPT_LEV B
WHERE A.DEPT_ID = B.DEPT_ID(+)
AND B.DEPT_ID IS NULL
(+)号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。这里加号写在右表,左表就是全部显示,故是左连接。
原文链接:http://blog.csdn.net/dengjh_business/article/details/35226227

0 0
原创粉丝点击