前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《面试季》高频面试题-基础篇(三)

《面试季》高频面试题-基础篇(三)

作者头像
IT学习日记
发布2022-09-13 12:38:36
1890
发布2022-09-13 12:38:36
举报
文章被收录于专栏:IT知识进阶学习
  • 💂 个人网站: IT知识小屋
  • 🤟 版权: 本文由【IT学习日记】原创、需要转载请联系博主

前言

  • 大家好,这里是IT学习日记,相信大家对今年IT的行情应该也有所了解了,从大厂到小厂,各种裁员消息。公司裁员我们无法决定,我们能做的就是不断提升自己,提前准备。
  • 本系列文章主要分享了之前博主真实面试中遇到的一些问题,希望能够帮助准备就业或者跳槽的朋友。

一: String和StringBuilder、StringBuffer的区别?

  1、String类被final修饰,对象是不可变的,但是StringBuffer和StringBuilder是可变的(既意味着它们不会产生中间对象,所以它们很适用于需要多个字符串拼接的场景)

  2、String是不可变的、StringBuffer类中方法使用了synchronize加锁,所以它们都是线程安全的,但是StringBuilder是线程不安全的

  3、因为StringBuffer方法中加了锁,String是不可变的,在操作时会产生大量的中间对象,所以它们的执行效率都比StringBuilder低,既执行效率: StringBuilder > StringBuffer > String

追问1: s1 = new String(“hello”)和s1 = “hello”有什么区别?

  new String(“hello”)是先在堆中创建一个对象,并返回给s1,”hello”是一个常量,会先到字符串常量池中查询是否存在这个字符串,没有则分配一个空间并存放”hello”,并将”hello”在常量池的地址存放在new出来的对象中(所以:如果”hello”字符串在常量池中存在则该语句创建一个对象,不存在则创建两个)

  s1 = “hello”则表示直接到常量池中查询,有则返回地址,没有则创建新的再返回地址(所以:如果常量池中存在,则不创建对象,不存在则创建一个对象)

追问2: s1 = “a” + “b”和s1 = a1 + a2 (注:a1 = “a”,a2=”b”)有什么区别

  如果是变量相加如(s1 = a1 + a2 (注:a1 = “a”,a2=”b”)),则先开空间,再拼接(每一个字符串变量在常量池中都有一个地址,如果是多个拼接,则生成新的对象并返回这个对象的地址)。

  如果是常量相加如:s1 = “a” + “b”,则是先将字符串拼接好,再到常量池中查找。

  所以,在进行比较的时候,一般判断清除是拼接完再查询还是查询后再拼接,这样使用在进行比较的时候也是不一样的。

二: Object中有哪些公共方法?

  • equals()
  • getClass()
  • hashCode()
  • notify()
  • notifyAll()
  • toString()
  • wait()

三: java中==和eqauls()的区别?

   ==是运算符,用于比较两个变量是否相等,而equals是Object类的方法,用于比较两个对象是否相等。

  默认Object类的equals方法是比较两个对象的地址,此时和==的结果一样。当比较类型是基本类型时,==比较的是它们的值,默认下,如果使用==比较对象,则比较的是对象的内存地址。

  如果需要比较对象内容,需要重写equal方法,如String就重写了equals方法,但要注意,如果重写equals方法,则也一定要重写hashCode方法,具体原因在上一篇有讲解到,感兴趣的可以看: 【秋招冲刺-每日打卡】应届生JAVA岗-每日5道高频面试题【Day2】-基础篇(2)

四: 接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

  1、接口可以继承(extends)接口,且支持多继承(即一个接口继承多个接口)

  2、抽象类可以实现(implements)接口

  3、抽象类可继承具体类也可以继承抽象类。

五: JAVA中final关键字的作用

  (1)修饰类:表示该类不能被继承;

  (2)修饰方法:表示方法不能被重写;

  (3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

追问1: final、finally、finalize三个关键字的区别

  • final:修饰符、关键字,表示“不可变的”,有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract是反义词。将变量声明为final,可以保证它们在使用中不被改变,被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。被声明为final的方法也同样只能使用,不能在子类中被重写。
  • finally:通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。
  • finalize:Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。

小结

   不积跬步,无以至千里;不积小流,无以成江海。今天播种努力的种子,总会有一天发芽!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/03/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一: String和StringBuilder、StringBuffer的区别?
  • 追问1: s1 = new String(“hello”)和s1 = “hello”有什么区别?
  • 追问2: s1 = “a” + “b”和s1 = a1 + a2 (注:a1 = “a”,a2=”b”)有什么区别
  • 二: Object中有哪些公共方法?
  • 三: java中==和eqauls()的区别?
    • 四: 接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
    • 五: JAVA中final关键字的作用
      • 追问1: final、finally、finalize三个关键字的区别
        • 小结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档