Java面试问题汇总(更新中)

来源:互联网 发布:xbox one手柄连mac 编辑:程序博客网 时间:2024/05/17 01:06

JavaSE部分
1. 说一下Overload,Overload的区别?
(1)Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同
(2)Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法

2. 说一下接口和抽象类的区别?
(1)抽象类里可以有构造方法,而接口内不能有构造方法。
(2)抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
(3)抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
(4)抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
(5)抽象类中可以包含静态方法,接口内不能包含静态方法。
(6)抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。
(7)一个类可以实现多个接口,但只能继承一个抽象类。

3. String类的常用方法
见 一个程序学习String类的所有常用方法

4.Java 实例化类的方法
见 Java 实例化类的方法

5.Java 多线程实现的几种方式
见JAVA多线程实现的四种方式

6.什么是死锁,怎么解决死锁的问题
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。

7.如何确保N个线程可以访问N个资源同时又不导致死锁?
使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。

8.说一下面向对象?
面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。下面的章节我们会逐个分析这些特性。

封装

封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。

下面列出了使用封装的一些好处:
通过隐藏对象的属性来保护对象内部的状态。
提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。
禁止对象之间的不良交互提高模块化。

多态

多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。

继承

继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。

9..数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同点:
– Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
– Array大小是固定的,ArrayList的大小是动态变化的。
– ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
– 对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

10.ArrayList和LinkedList有什么区别?
ArrayList和LinkedList都实现了List接口,他们有以下的不同点:
(1).ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
(2).相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
(3).LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

11.如果一个List中包含的是map对象,怎么样去除掉map中重复的值?
见代码:

List<Map> list = new ArrayList();        Map<String, Integer> map=new HashMap<>();        map.put("张三", 1);        map.put("李四", 2);        map.put("王五", 3);        map.put("赵六", 3);        map.put("孙琦", 4);        for (int i = 0; i < 5; i++) {            list.add(map);        }        System.out.println(list.get(1).get("赵六"));        System.out.println(list);        for (int i = 0; i < list.size(); i++) {            List<Integer> list1=new ArrayList<>();            List<String> list2=new ArrayList<>();            Set<Entry<String, Integer>> entrySet=list.get(i).entrySet();            Iterator<Entry<String, Integer>> it=entrySet.iterator();            while(it.hasNext()){                Entry<String, Integer> entry=it.next();                if(!list1.contains(entry.getValue())){                    list1.add(entry.getValue());                    list2.add(entry.getKey());                }else{                    it.remove();                }            }        }
0 0
原创粉丝点击