java基础部分的面试

  • 讲一下java中的基本数据类型
    byte(字节型) 8
    short(短整型) 16
    int(整型) 32
    long(长整型) 64
    float(浮点型)32
    double(双精度浮点型) 64
    char(字符型) 16
    boolean(布尔型) 1

  • 面型对象的特征有哪些方面
    有四大基本特征:封装,继承,多态
    1、面向对象的封装性,即将对封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。
    抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。
    2、 在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。
    3、多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量法出的方法调用在编程时并不确定,而是在程序运行期间才确定,及一个引用变量到底会只想哪个类的实例对象,该引用变量的方法调用到底是那个类中实现的方法,必须在由程序运行期间才能决定。

  • 有了基本的数据类型,为什么还要对应数据类型的包装类
    java提供了8中基本数据类型,每一个基本数据类型都对应其一个包装类,(jdk 1.5之后)
    boolean->Boolean
    short->Short
    int->Integer
    long->Long
    double->Double
    char->Character
    float->Float
    byte->Byte
    装箱和拆箱:把基本的数据类型转换成对应的包装类型
    自动装箱:Integer i=1,实际上在编译时会调用Integer.valueOf方法来装箱
    手动装箱:int i=1;Integer j=Integer.valueOf(i);
    自动拆箱:就是把包装类型转换为基本数据类型,基本数据类型 名称=对应的包装类型,实际上会在编译时调用intValue();
    Integer i=1; int j=i;
    手动拆箱:Integer i=1;int i=i.intValue(i);
    java是一个面向对象的语言,而基本的数据类型,不具备面向对象的特性。

  • 说一下==和equals方法究竟有什么区别?
    ==用来判断两个变量之间的值是否相等。变量可以分为基本数据类型,引用数据类型。如果是基本数据类型的变量直接比较值,而引用数据类型比较对应的引用的内存的首地址。
    equals用来比较两个对象长的是否一样。判断对象的某些特性是否一样。实际上就是调用对象的equal方法。

  • String和StringBuffer的区别,StringBuffer和StringBuilder的区别?
    在java中提供了三个类String ,StringBuffer,StringBuilder来表示和操作字符串。字符串就是多个字符串的集合。
    String是内容不可变的字符串,底层使用了一个不可变的字符数组(final char[] )。String str=new String(“aaa”);
    而StringBuffer和StringBuilder,是内容可以改变的字符串,两个使用的是可变的数组
    字符串的拼接
    1、String进行拼接String c=“a”+“b”;
    2、StringBuilder或者StringBuffer
    StringBuilder s=new StringBuilder();sb.append();
    StringBuilder 是线程不安全的,而效率较高,而StringBuffer是线程安全的而效率较低

  • 讲一下java中的集合
    Java中的值分为value,key-value(Collection ,Map)两种。
    存储值分为List和Set。
    List是有序的,可以重复的。
    Set是无序的,不可以重复的,根据equals和hashcode判断,也就是如果一个对象要存储在set中,必须重写equals和hashcode方法。
    存储key-value的为map

  • ArrayList和LinkedList的区别?
    List常用的是ArrayList,LinkedLIst
    ArrayList底层使用的是数组,LinkedList使用的是链表。
    ArrayList查询元素很快,但是删除和添加,修改元素很慢(数组在内存中是一块连续的内存,如果插入或删除时需要移动内存)
    LinkedList不要求内存时连续的,在当前元素中存放下一个或者上一个元素的地址。查询时需要从头部开始,一个一个的找。所以查询效率低。插入时不需要移动内存,只需要改变指向即可。所以插入或者删除效率较高。
    ArrayList使用在查询比较多,但是插入和删除比较少,而LinkedList使用在查询比较少,而插入和删除比较多的情况。

  • 讲一下HashMap和HashTable的区别?HashMap和CurrentHashMap的区别
    相同点:HashMap和HashTable都可以使用来存储key-value的数据。
    区别:
    1,HashMap是可以把null作为key或者value的,而HashTable是不可以的。
    2,HashMap是线程不安全的,效率较高。而HashTable是线程安全的,效率较低。
    如何线程安全同时效率教高
    通过把整个Map分为N个Segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。

  • 实现一个拷贝文件的工具类使用字节流还是字符流
    我们拷贝的文件不确定只包含字符流,有可能又字节流(图片,声音,图像等),为考虑到通用性,要使用字节流

  • 线程的集中实现方式?
    1、通过继承Thread或者是实现Runnable接口来实现多线程
    继承Thread:扩展性不强,java总只支持单继承,如果一个类继承Thread就不能继承其他的类了。
    2、启动
    Thread thread = new Thread(继承了Thread的对象/实现了Runnable的对象);
    thread.start();启动线程使用start方法,而启动了以后执行的是run方法。
    3、区分线程
    在一个系统中有很多线程。通过标识线程来找到所需要的线程。
    thread.setName(“设置一个线程名称”);

  • 线程并发库
    jdk 1.5中增加了DougLea的并发库,这一引进给Java线程的管理和使用提供了强大的便利性。java.util.current包中提供了对线程有害,管理的各项操作,使得线程的使用变得得心应手。这个包提供了线程的运行,线程池的创建,线程生命周期的控制。
    Java通过Executor提供四个静态方法创建线程池,分别为:
    newCacheThreadPool创建一个定长线程池,可控制线程最大的并发数,超出的线程会在队列中等待。
    newFixedThreadPool创建一个定长的线程池,支持定时及周期性执行任务。
    newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。
    newSingleThreadExecutor 创建一个单线程池,它只会唯一的工作线程来执行任务,
    newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务指定顺序(FIFO,LIFO,优先级)执行任务
    线程池的作用?
    1,限定线程的个数,不会导致由于线程过多导致系统运行缓慢或崩溃
    2,线程池在开始不需要每次都取创建和销毁,节约了资源。
    3,线程池不需要每次都去创建,相应时间变快了

  • 常用的设计模式
    设计模式就是经过前人无数次的实践总结出的,设计过程中可以反复使用,可以解决特定问题的设计方法。
    单例:(1)构造方法私有化,除了自己类中能创建外其他地方都不能创建,(2)在自己类中创建一个单实例(饱汉模式是一出来就创建单实例,而饥汉模式需要的时候才创建)
    (3)提供一个方法获取该实例对象(创建时需要进行方法的同步)

工厂模式:Spring IOC使用的是工厂模式----对象的创建交给工厂去创建。
代理模式:Spring AOP是动态代理模式
包装模式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值