cyc 的面试宝典之(面试1(java se 基础篇))

19 篇文章 0 订阅
3 篇文章 0 订阅
1.java 基础

1.1.&&&区别

   &逻辑与,&&是短路与


1.2.final关键字修饰变量和方法,类分别表示什么意思。
        final 修饰变量时,变量的值不能改变。

        final 修饰方法时,方法不能被子类继承。

        final 修饰类时,类不能被继承。

1.3 请说出作用域publicprivateprotected 的作用域

作用域    当前类 同一package 子孙类 其他package 

public    √     √    √        √ 

protected  √        √     √      × 

friendly   √     √    ×      × 

private    √      ×    ×         ×


1.4 OverloadOverride的区别

overload 重载,override 重写

重载是相对于一个类的相同方法不同的参数列表。

重写是子类重写父类的方法。

1.5 一个房子里有椅子,椅子有腿和背,房子与椅子是什么关系,椅子与腿和背是什么关系?

如果房子有多个椅子,就是聚合关系,否则是一种关联关系,当然,聚合是一种特殊的关联。椅子与腿和背时组合关系。

(组合关系是离开了某一部分就不能算是一个整体,缺一不可)

1.6  构造器 Constructor 是否可被 override

   构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload


1.7  面向对象的特征有哪些方面
    抽象,封装,继承,多态。

1.8 抽象类和接口的区别

  1.抽象类可以有构造方法,接口中不能有构造方法。

   2.抽象类中可以有普通成员变量,接口中没有普通成员变量

   3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

   4. 抽象类中的抽象方法的访问类型可以是publicprotected和(默认类型,虽然

   eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

   5. 抽象类中可以包含静态方法,接口中不能包含静态方法(接口只有方法的声明,抽象类可以实现方法)

   6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static         final类型,并且默认即为public static final类型。

  7. 一个类可以实现多个接口,但只能继承一个抽象类。

1.9 java 中的基本数据类型

   基本数据类型包括byte char short float int long double boolean 


1.10  是否可以继承 String
    String 类是final 修饰的,是不可以被继承的

1.11  String s = new String("xyz"); 创建了几个 String Object?
    创建的对象可以是两个也可以是一个。这个地方需要看一下这段代码的前方有没有String对象指向了"xyz",
    前面的代码指向了xyz的话,就创建1个对象。
    前面的代码没有指向xyz的话,则创建了2个对象。

1.12   String   和StringBuffer的区别   

String类表示内容不可改变的字符串

StringBuffer类表示内容可以被修改的字符串


1.13  StringBufferStringBuilder的区别

StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。


1.14   数组有没有 length() 这个方法 ? String 有没有 length() 这个方法?
数组没有length()方法,直接.length。
String有length() 方法

1.15 异常处理
try{ 代码块} 
catch{ 异常处理} 
finally{ 最后处理}

1.16  final, finally, finalize 的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 内部类要访问局部变量,局部变量必须定义成final类型。

   finally是异常处理语句结构的一部分,表示总是执行。

   finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。


1.17 errorexception有什么区别

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。                  exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。


1.18  请说出你最常见到的 5 runtime exception
    sqlexception,classnotfoundException,arrayindexofboundsexception,
NullPointerException,ClassCastException

1.19  多线程有几种实现方法
    1.继承thread 类
    2.实现runnable 接口
    3.实现callable 接口

1.20  启动一个线程是用 run() 还是 start()

   启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代               

   码,run()方法是该线程所关联的执行代码。

1.21  HashMap Hashtable 的区别
   hashmap 是线程不安全的,value可为null。
    hashtable 是线程安全的,value的值不为null.

1.22  ArrayList Vector 的区别
       1.增长量
arraylist    = > 源码:oldCapacity + (oldCapacity >> 1) ,增长了0.5倍。
   vector = > 源码:oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity) 看设置的增长量的值,如果是设置了增长量的值的话,且大于0 则增长设置的值,否则增长量是1倍。
        2. arraylist 线程不安全的,vector 则是线程安全的。

1.22 Set 是由什么集合来实现的?
       map来实现的
        HashSet 是由HashMap实现的。
        TreeSet 是由  NavigableMap(该接口实现了sortmap)实现的。

1.23 ListMapSet三个接口,存取元素时,各有什么特点?

 list 可重复 有序。

set不可重复 有序或无序(hashset 无序,treeset 有序)。

map   存key value 值。

1.24  Collection 和 Collections的区别。

        Collection是集合类的上级接口,继承与他的接口主要有Set List。

      Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。


1.25 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢是用==还是equals()? 它们有何区别

equals()==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。


1.26  字节流与字符流的区别
字节流是按字节为单位来传输数据。
字符流是按字符为单位来传输数据。

1.27 垃圾回收的优点和原理

Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。


1.28 java内存泄漏
java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。

1.29  写一个 Singleton 出来


第一种:饱汉模式
public class SingleTon {
private SingleTon(){
}
 
//实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间
private final static SingleTon instance = new SingleTon();
public static SingleTon getInstance(){
return instance;
}
}
第二种:饥汉模式
public class SingleTon {
private SingleTon(){}
private static instance = null;//new SingleTon();
public static synchronized SingleTon getInstance(){
if(instance == null)
instance = new SingleTon();
return instance;
}
}


也可以下载资源链接是: 点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值