原创 2021-Java后端工程师面试指南-(Java基础篇)

发布时间:2021-08-02 19:53:54 浏览 793 来源:猿笔记 作者:六脉神剑

    会整理一些比较常见的面试题和自己实际开发碰到的问题等题目。###Java字符型常量和字符串常量的区别,字符串常量代表一个地址值(该字符串在内存中存放位置),也就意味着String引用的字符串内容是不能被改变的,需要拼接些字段的时候我们会习惯的用+,我们可以在运行期间获取对象的类型信息。同时也可以解决Java泛型擦除等令人苦恼的问题,在Java中有下列方法可以获取一个对象的反射类。其实就是想知道我们的实际开发是否有注意到这些点。###说说你平时是怎么把一个逗号隔开的字符串变成一个集合的。-至于原因就是Arrays.asList()将数组转换为集合后。


    #前言

    文本已收录至我的GitHub仓库,欢迎Star:

    * *种一棵树最好的时间是十年前,其次是现在* *

    ##Tips

    面试指南系列,很多时候不会深挖细节。这是小刘流扮演被采访者的角色复习知识的一种方式,所以我默认了大部分东西。作为面试官,你必须明白。

    以上是脑地图地址

    ##叨絮

    可能大家都觉得有点老套,确实是。面试问题,面试书,随机搜索都写不完看不到,那我写这个有什么意义呢?实际上,我写这篇文章的目的如下

    ——首先是通过一个系统进行回顾,让写在你面前的文章再去一遍,总结升华

    ——二是通过写文章帮助你建立复习体系。我将以点和区域的形式向您介绍大多数知识点

    然后下面是之前文章的总结

    -2021-Java后端工程师面试指南-(简介)](

    最后,我们将以面试问题的形式复习所有知识点,梳理一些常见的面试问题和我们在实际发展中遇到的问题。

    ##Java基本功

    ###Java字符常量和字符串常量的区别

    在开发过程中,我们应该使用更多的字符串,所以我们应该熟悉字符常量,并且可以回答它们

    -Formal:字符常量是用单引号括起来的字符;字符串常量是用双引号括起来的0或几个字符

    -含义:一个字符常量相当于一个整数值(ASCII值),可以参与表达式运算;字符串常量表示地址值(字符串存储在内存中的位置)

    -占用内存大小的字符常量只占用2个字节;字符串常量占用几个字节

    ###String和StringBuilder、StringBuffer的区别?

    -Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。

    -String是只读字符串,这意味着字符串引用的字符串内容不能更改。

    -而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

    其实,小刘流是在告诉自己,这个问题大部分人都会回答,都会背下来,只是我们在发展过程中真的没有遵守罢了。比如有时候我们处理一些逻辑,需要拼接一些字段的时候,就会习惯使用+。不知道同段有没有发展。哈哈,小刘流和大家都在努力养成良好的发展习惯

    # # #谈谈反射的使用和实现

    Java反射机制是一个非常强大的功能,在Spring、MyBatis等很多项目中都可以看到。通过反射机制,我们可以在运行时获得对象的类型信息。有了这个,我们可以实现工厂模式、代理模式等设计模式,解决Java泛型擦除等令人头疼的问题。

    获取对象对应的反射类。在Java中,有下列方法可以获取对象的反射类

    -new一个对象,然后对象.getClass()方法

    -通过Class.forName()方法

    -使用类.class

    # # #说说你有没有遇到BigDecimal的坑,或者需要注意的地方

    -我们在使用BigDecimal时,为了防止精度丢失,推荐使用它的BigDecimal(String)构造方法来创建对象。

    其实我只是想知道我们的实际发展有没有注意到这几点。

    # # #请告诉我您通常如何将逗号分隔的字符串转换成集合,如(“1,2,3”)

    -ListmyList=Arrays.stream(myArray).collect(Collectors.toList()),建议使用这种方式,而不是ListmyList=Arrays.asList(1,2,3);

    ——至于原因,Arrays.asList()将数组转换成集合后,底层其实就是数组。

    ###说说Strings="abc"和Strings=newString("abc")区别;

    -这个问题相信大家都很熟悉,答案也是众所周知的,一两个。

    -首先,在堆(而不是常量池)中创建一个指定的对象“abc”,并让str引用指向这个对象

    -检查字符串常量池,查看是否有内容为“abc”的字符串对象

    -如果存在,新的字符串对象与字符串常量池中的对象相关联

    -如果它不存在,在字符串常量池中创建一个内容为“abc”的字符串对象,并将堆中的对象与它相关联

    ###聊聊Java中的SPI

    对于系统设计的每个抽象,通常有许多不同的实现方案。在面向对象设计中,一般建议基于接口在模块之间编程,不要硬编码模块之间的实现类。一旦代码涉及到一个特定的实现类,它就违反了可插入性原则。如果需要替换实现,需要修改代码。为了避免模块组装过程中程序的动态指定,需要一种服务发现机制。

    JavaSPI提供了这样一种机制:为接口寻找服务实现机制。类似于IOC的思路,就是把组装的控制权移出程序,这在模块化设计中尤为重要。所以SPI的核心思想是去耦。

    ###聊聊Java8有哪些特性

    -功能界面

    -接口可以有实现方法,不需要实现类来实现它们的方法。

    -lambda表达式

    -stream流

    -日期时间APILocalDateTime年月日十分秒;LocalDate日期;LocalTime时间

    -Optional类

    虽然最新版本已经是15了,但是大部分企业还是用8,那就说说吧。

    # # #成员变量和局部变量有什么区别?

作者信息

六脉神剑 [等级:3] Java开发工程师
发布了 171 篇专栏 · 获得点赞 1615 · 获得阅读 136341

相关推荐 更多