对于程序员开始,没有什么寒冬,只是你不够努力,有时间还不如看几道面试题

本文详细介绍了Java的基本数据类型、引用类型、字符串常量池、修饰符的作用范围等核心概念,并对比了==与equals的区别、get与post的不同之处,还探讨了final、finally与finalize的区别。

1.java八大基本数据类型及包装类

   byte  Byte

   short  Short

   Int  Integer

   long  Long

   Char  Charater

   boolean  Boolean

   double  Double

   float  Float

2.引用数据类型

  数组、字符串

3.==和equals区别

 ==:两个字符串中内存地址(堆内存)数值是否相同,属于数值比较

 equals:比较的是两个字符串的内容是否相同

 比如:

      int a=22;float b=22f; 如果用==比较,结果是true;如果用equals比较是false

4.装箱和拆箱

   int i=10;

   手动装箱:Integer a=nex Integer(i);

   自动装箱:Integer b=10

Integer j=new Integer(10);

手动拆箱:Int b=j.intValue(j);

自动拆箱:int n=j;

5.switch支持哪些数据类型

   jdk5之前:byte char int short 包装类:Byte Charater integer Short 枚举 

  jdk7加入了String

6.Object有哪些公用方法

   clone、finalize、wait、getclass、equals、notify、toString、hashcode、notifyall

7.final finally finalize区别

   final用来修饰类、方法、变量(成员变量、局部变量);修饰的类不能被继承,修饰的方法不能被重写,修饰的变量不能修改

   finally:在处理异常时候有些程序必须要执行,就可以放在finally中,finally中的程序最后都会执行(除非finally前面有system.exit(0))

   finalize:垃圾回收机制

8.修饰符的范围:

                       default                   private                     protected                    public

同类                  *                               *                                 *                                  *

同包、子类       *                                                                  *                                  *

同包、非子类    *                                                                 *                                  *

不同包、子类                                                                                                          * 

不同包、非子类                                                                                                      *

9.get和post区别

   URL的可见性:get参数脇可见;post不可见

   数据传输方式:get通过拼接URL进行传输参数;post是通过body体传输参数

   缓存性:get请求可以缓存;post不可以

   后退页面反应:get后退页面不产生影响;post会重新发送请求

   数据传输大小:get数据(2-4k,但也会因浏览器觉得,不会相差太大);post是根据php.ini文件决定,可以无限大

   安全性

10.什么是字符串常量池

    字符串常量池是java堆内存中一个特殊的存储区域,当创建一个String对象,假如此字符串值已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象

11.为什么字符串是不可变的

    在定义String a="123"   a="234"  (在堆中有两个对象(123和234),只是对于栈内存的a对于堆内存的引用改变了,变成a引用234,所以“字符串是不可改变的”表示的堆内存中的对象值没改变)

12.String a=new String("111");  

   总共有两个对象,一个对象存储在String池中,一个存储在堆中,所以是两个对象,并把堆中的对象交给s持有。

   如果String a1="111":表示有一个对象a1存储在String池中,所以a==a1为false

    字符串不可b

13 final、finally、finalize区别

    final 用于声明属性,方法和类,分别表示属性不可改变,方法不可覆盖,类不可继承。
    finally 是异常处理语句结构的一部分,表示总是执行。
    finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例 如关闭文件等。

14. &和&&的区别 ?

    &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;
    但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止

15.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

   12 -11

16.数组有没有length()这个方法? String有没有length()这个方法?

   数组没有length()这个方法,String有length()
17.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

    Overload 方法参数名、个数、类型不同,返回值也可以不同,在一个类中可以实现
    Override 方法签名必须相同,返回值也必须相同,在两个类中实现

18.最常见到的runtime exception ?

    ClassCastException, 类型强制转换异常
    ClassNotFoundException 类没找到时,抛出该异常
    FileNotFoundException, 文件未找到异常
    IndexOutOfBoundsException, 下标越界异常
    IOException, 输入输出异常
    NullPointerException, 空指针异常
    SQLException, 操作数据库异常
    SystemException, 系统异常

19.error和exception有什么区别?
Exception 和Error 都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本类型
Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
Error是指正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序处于非正常的、不可恢复的状态。

20.List, Set, Map是否继承自Collection接口 ?
List,Set是,Map不是。

21.abstract class和interface有什么区别 ?
抽象类可以有构造方法,接口不行。
抽象类可以有普通成员变量,接口不行。
抽象类可以包含非抽象方法,接口不行。
抽象类中可以包含静态方法,接口不行。
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,
但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

22.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口
抽象类可以实现接口
抽象类可继承具体类也可以继承抽象类。

23.启动一个线程是用run()还是start()? 选答题
start()来启动
实现并启动线程有两种方法
1、写一个类继承自Thread类,重写run方法。用start方法启动线程

24.是否可以继承String类?
不可以,被 final 修饰

25.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,后

26.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;
如果两个对象的hashCode相同,它们并不一定相同。

27.float f=3.4;是否正确?
不正确。java 里面带点号的默认是 double 类型,不带点的是 int 类型。这里 double 转 float ,精度不够,需要强转

28.char 型变量中能不能存贮一个中文汉字?为什么?
可以。在Java中,char类型占2个字节,而且Java默认采用Unicode编码,一个Unicode码是16位,所以一个Unicode码占两个字节,Java中无论汉子还是英文字母都是用Unicode编码来表示的。所以,在Java中,char类型变量可以存储一个中文汉字。

29.构造器Constructor是否可被override?
不能

30.arraylist和linklist区别
    都是实现list接口的列表,arraylist是数组类型的数据结构,linklist是基于链表的数据结构,对于查询某个元素来说:arraylist比linklist快,arraylist只需要通过 数组下标就可以获取,linklist则需要移动指针;但如果是添加元素或者删除元素:linklist比arraylist快,只需要将指针移到指定的位置添加或者删除就可以,而 arraylist要移动数据

  Vector相对于ArrayList来说:前者是同步,线程安全

31.如何让多线程共享数据(只需创建一个Runnable,这个Runnable里有那个共享数据。

   public class ThreadData implements Runnable{
    private  int ticked=10;
    public void run() {
        while (ticked>0){
            ticked--;
            System.out.println("当前票数:"+ticked);
        }
    }
    public static void main(String[] args) {
        ThreadData threadData=new ThreadData();
        new Thread(threadData).start();
        new Thread(threadData).start();
    }

32.sleep和wait区别:
        (1)sleep,wait调用后都会暂停当前线程并让出cpu的执行时间,但不同的是sleep不会释放当前持有的对象的锁资源,到时                间后会继续执行,而wait会放弃所有锁并需要notify/notifyAll后重新获取到对象锁资源后才能继续执行
        (2)sleep需要捕获或者抛出异常,而wait/notify/notifyAll不需要

33.java的四种引用方式(https://www.cnblogs.com/huajiezh/p/5835618.html

            强引用,软引用,弱引用,虚引用

          作用:

                  第一是可以让程序员通过代码的方式决定某些对象的生命周期;

                  第二是有利于JVM进行垃圾回收。

           强引用:是指创建一个对象并把这个对象赋给一个引用变量。

                    缺点:强引用有引用变量指向时永远不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。

           软引用(用于网页缓存、图片缓存):

                    如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;

                    如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。

           弱引用:弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对                    象。

           虚引用:

                    虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类                    表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

34.用最有效率的方法计算2乘以8?

    2<<3

35.switch是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int;从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型;从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

35.String和StringBuilder、StringBuffer的区别?
答:Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰(非同步),因此它的效率也比StringBuffer要高。

 

框架:

   1.spring的ico和aop
    ioc:将类的创建和依赖关系写入配置文件中,由配置文件进行注入,实现松耦合
    aop:将关于事务、安全的功能提取出来,由spring配置文件进行添加,提高了复用性

2.mybatis中$和#区别

   mybatis中#和$区别:在mybatis中sql传参数#默认是为参数添加单引号,$没有
    #{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
       ${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
      name-->cy
     eg:  select id,name,age from student where name=#{name}   -- name='cy'
               select id,name,age from student where name=${name}    -- name=cy

3.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值