一些Java题目

1.String str = new String("abc"); 请问定义了几个对象。定义了两个对象,一个"abc", 一个是new String().<String s = "abc";首先到堆中查找值为"abc"的对象,没有就新建一个对象,"abc"本身就是一个对象。>

2.面向对象的东西:abstract & interface的各自的作用,区别。

3.面向对象的特征,以及怎么实现的。1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4.多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

4.HashMap & Hashtable, ArrayList & Vector的区别。

5.HashMap,LinkedList,HashSet的区别。1、Collection 接口:集合中每一个元素为一个对象,这个接口将这些对象组织在一起,形成一维结构。
2、List      接口:代表按照元素一定的相关顺序来组织(在这个序列中顺序是主要的),List 接口中数据可重复。
3、Set      接口:是数学中集合的概念:其元素无序,且不可重复。(正好与List 对应)
4、SortedSet 接口 :会按照数字将元素排列,为“可排序集合”。
5、Map     接口 :接口中每一个元素不是一个对象,而是一个键对象和值对象组成的键值对(Key-Value)。
6、SortedMap接口:如果一个Map 可以根据key 值排序,则称其为SortedMap。

注意:在“集合框架”中,Map 和Collection 没有任何亲缘关系。
?Map 的典型应用是访问按关键字存储的值。它支持一系列集合操作的全部,但操作的是键-值对,而不是单个独立的元素。因此Map 需要支持get() 和put() 的基本操作,而Set 不需要。
?返回Map 对象的Set 视图的方法:
Set set = aMap.keySet()注:以上有序的意思是指输出的顺序与输入元素的顺序一致
    HashSet、HashMap通过hashCode(),equals()来判断重复元素
    在java中指定排序规则的方式只有两种:1、实现java.util包下的Comparator接口
                                                       2、实现java.lang包下的Comparable接口


二、    迭代器:Iterator
1、使用Iterator接口方法,您可以从头至尾遍历集合,并安全的从底层Collection中除去元素
2、remove() 方法可由底层集合有选择的支持。当底层集合调用并支持该方法时,最近一次next() 调用返回的元素就被除去
3、Collection 接口的iterator() 方法返回一个Iterator
4、Iterator中的hasNext()方法表用于判断元素右边是否还有数据,返回True 说明有。然后就可以调用next()动作。
5、Iterator中的next()方法会将游标移到下一个元素,并把它所跨过的元素返回。(这样就可以对元素进行遍历)
6、用于常规Collection 的Iterator 接口代码如下:
    /*迭代遍历*/
        List l = new ArrayList();
        Iterator it = l.iterator();
        while(it.hasNext()){
            Object o = it.next();
            System.out.println(o);
        }
注:工具类是指所有的方法都是公开静态方法的类。
            Java.util.collections就是一个工具类;

四、    ArrayList和LinkedList集合
1、ArrayList 底层是object 数组,所以ArrayList 具有数组的查询速度快的优点以及增删速度慢的缺点。
    Vector 底层实现也是数组,但他是一个线程安全的重量级组件。
2、而在LinkedList 的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。
3、双向循环链表的查询效率低但是增删效率高。所以LinkedList 具有查询效率低但增删效率高的特点。
4、ArrayList 和LinkedList 在用法上没有区别,但是在功能上还是有区别的。
LinkedList 经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。
堆栈:后进先出的数据结构。
(堆栈就是一种只有增删没有查询的数据结构)
注意:使用堆栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。
LinkedList 提供以下方法:(ArrayList 无此类方法)
addFirst();
removeFirst();
addLast();
removeLast();
在堆栈中,push 为入栈操作,pop 为出栈操作。
Push 用addFirst();pop 用removeFirst(),实现后进先出。
用isEmpty()--其父类的方法,来判断栈是否为空。
在队列中,put 为入队列操作,get 为出队列操作。
Put 用addFirst(),get 用removeLast()实现队列。
List 接口的实现类(Vector)(与ArrayList 相似,区别是Vector 是重量级的组件,使用使消耗的资源比
较多。)
结论:在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)。
5、面试经验(知识点):
java.util.stack(stack 即为堆栈)的父类为Vector。可是stack 的父类是最不应该为Vector 的。因为Vector的底层是数组,且Vector 有get 方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
对于堆栈和队列只能用push 类和get 类。
Stack 类以后不要轻易使用。
!!!实现堆栈一定要用LinkedList。
(在JAVA1.5 中,collection 有queue 来实现队列。)

五、    HashSet集合
1.、HashSet是无序的,没有下标这个概念。HashSet集合中元素不可重复(元素的内容不可重复);
2、HashSet 底层用的也是数组。
3、HashSet如何保证元素不重复?Hash算法和equals方法。
当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode:
int hc=o.hashCode(); 返回的hashCode 为整数值。
Int I=hc%n;(n 为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n 为6 为例,
如果I=0 则放在数组a[0]位置,如果I=1,则放在数组a[1]位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode 不同。如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。
在实例中,定义student 对象时覆盖它的hashcode。
因为String 类是自动覆盖的,所以当比较String 类的对象的时候,就不会出现有两个相同的string 对象的情况。
现在,在大部分的JDK 中,都已经要求覆盖了hashCode。
结论:如将自定义类用hashSet 来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode 返回相同的整数,而且equals()返回值为True。
如果偷懒,没有设定equals(),就会造成返回hashCode 虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。
我们要保证相同对象的返回的hashCode 一定相同,也要保证不相同的对象的hashCode 尽可能不同(因为数组的边界性,hashCode 还是可能相同的)。例子:
public int hashCode(){
return name.hashcode()+age;
}

六、    TreeSet集合
1、 TreeSet是SortedSet的实现类TreeSet通过实现Comparable接口来实现元素不重复。
2、    TreeSet由于每次插入元素时都会进行一次排序,因此效率不高。
3、    java.lang.ClassCastException是类型转换异常。
4、    在我们给一个类用CompareTo()实现排序规则时
5、    从集合中以有序的方式抽取元素时,可用TreeSet,添加到TreeSet 的元素必须是可排序的。“集合框架”添加对Comparable 元素的支持。一般说来,先把元素添加到HashSet,再把集合转换为TreeSet 来进行有序遍历会更快。

Day09
一、    HashMap集合
1.    HashMap就是用hash算法来实现的Map
2.    在实际开发中一般不会用自定义的类型作为Map的Key。做Key的无非是八中封装类。
3.    HashMap的三组操作:
【1】改变操作允许您从映射中添加和除去键-值对。键和值都可以为null。但是,您不能把Map 作为一个键或值添加给自身。
–Object put(Object key, Object value)
–Object remove(Object key)
–void clear()
        【2】查询操作允许您检查映射内容:
–Object get(Object key)
–intsize()
–boolean isEmpty()
        【3】最后一组方法允许您把键或值的组作为集合来处理。
–public Set KeySet();
–public Collection values()
4、    HashMap和HashTable的区别等同于ArrayList和Vector的区别。只不过HashTable中的Key和Value不能为空,而HashMap可以。
5、    HashMap 底层也是用数组,HashSet 底层实际上也是HashMap,HashSet类中有HashMap 属性(我们如何在API 中查属性)。HashSet 实际上为(key.null)类型的HashMap。有key 值而没有value 值。

二、HashMap 类和TreeMap 类
?集合框架提供两种常规Map 实现:HashMap和TreeMap。
?在Map 中插入、删除和定位元素,HashMap 是最好选择。
?如果要按顺序遍历键,那么TreeMap 会更好。
?根据集合大小,先把元素添加到HashMap,再把这种映射转换成一个用于有序键遍历的TreeMap 可能更快。
?使用HashMap 要求添加的键类明确定义了hashCode() 实现。
?有了TreeMap 实现,添加到映射的元素一定是可排序的
?HashMap和TreeMap 都实现Cloneable 接口。

6.计算数据值:如果n的值很大,计算1 + (-2 ) + 3 + (-4) + 5 + (-6) + 7 + ...... + (-n)

    采用递归来实现。

8. public void test() {

          try {

                     return 2;

           } catch(Exception e) {

                     return 3;

            } fanally {

                     return 4;

             }

       }

9. public void test() {

          try {

                      throw new Exception();

           } catch(Exception e) {

                     return 3;

            } fanally {

                     return 4;

             }

       }

10.比较变态的问题,jdk版本之间的特性差异,很难回答,了解的不多。

jdk1.5:增加了泛型. jdk1.4:HashMap & ArrayList 现在的版本中,是非同步的,非线性安全。Hashtable & Vector是同步的,线性安全的。还有,数组中增加了排序。

11.UML的用途和优点,标签符号,或者根据具体的材料,画个相关的类图。或根据程序代码,画个类图。

12.进程& 线程。

13.冒泡法排序的程序,数据结构的东西,一般会考这个的。

14.交换两个数据,不用第三个变量.

int a = 3, b = 4;

a = a + b;

b = a - b;

a = a - b;

15.jsp的内部的几个对象:request, response, application, session, page

16.<jsp: import > <jsp: include> <jsp:forward>一些jsp标签相关的命令。

17.forward & redirect 的区别.

18.给出一些代码,判断输出结果或可能出现的情况,有关线程的东西比较多。

19.(C语言)static 的作用(定义常量,定义方法,方法中的参数),在给定的一段代码中,数值的输出.

     或者说,(Java)在类中的表现。

20.常用的开源组件,以及对其认识。

21.Struts 的原理(ActionServlet & RequestProcessor组件)。

22.数据库JDBC的连接.给出具体的连接代码,然后把数据输出。

23.关于数据库,给出表结构,写出一些SQL语句,例:学生信息表,课程表,学生成绩表,会查询:有选修课程的学生信息,选修全部课程的学生信息,没有选修课程的学生,选修课程超过3门课的学生,所有学生的选修课程学生信息,包括没有选修课的学生信息等等。另外,还会有关分组的东西,当有聚合函数时,要采用分组。数据库的分页操作。

24.注意在SQL语句中,有逻辑判断时,会用到CASE语句。

25.JSP 和 Servlet 的区别。JSP(Java server pages),Servlet是java 服务器的应用程序。

26.Servlet & ActiveServlet 的原理,加载调用的方法(init() load()),及各方法的作用。

27.A.jsp ----> B.jsp ----> C.jsp,由A页面的页面信息,传递到C页面,最简单的方法(不用session)。

28.有关EJB的东西,我不懂。

29.j2ee的模式,工厂模式之类的东西。

30.web service 的东西,不懂。

31.抽象类的定义,在给出的代码中,判断哪个是对的。

32.void test () {

     int i = 0, j = 0;

    while (5 > i++ && 5 > j++) {

         System.out.println("i = " + i);         System.out.println("j = " + j);

    }

}

答案应该是i = 5, j = 4。这个主要是考察"&&"的用法。

33.MVC的理解.

34.HTTP中,get 和 post 的区别.

35.线程的实现方法:继承 Thread 类和实现 Runnable 接口.

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值