【Java 核心面试宝典】Day1,java 高级工程师面试宝典
[6、解释 this 和 super 关键字](about:blank#6%E3%8
0%81%E8%A7%A3%E9%87%8Athis%E5%92%8Csuper%E5%85%B3%E9%94%AE%E5%AD%97)
7、解释字符串三剑客(String、StringBuilder、StringBuffer)
Hello,你好呀,我是灰小猿,一个超会写 bug 的程序猿,
经过多方面的深思熟虑,我还是开了这样一个专栏“Java 高薪面试宝典”,听着名字可能有些浮夸了,毕竟在坐的各位肯定都是技术领域的大佬呀,在这个专栏中,我想和大家分享一些在 java 面试中常见的一些面试问题,还有我们众多 Java 程序猿经常容易忽略或者在开发中常常会用到的一些问题,包括技术和管理等众多方面。
毕竟很多的面试都并不会让你直接的去讲述一个完整的项目的完成过程,而是对于在项目开发中经常会被程序员们忽略反而又比较重要的一些问题,甚至有时候还会拿一个看似很简单的问题来让我们交智商税。但是很多时候呢,又恰恰是那些不太起眼的面试题,却让我们与心爱的 offer 失之交臂。
所以考虑了很久之后,还是想在这里出一个关于 Java 面试的专栏,来帮助大家解决和应对在面试中可能会遇到的那些坑,同时也是在对我自己在 Java 学习之路进行一个记录和总结,之前我也和大家分享了几个互联网面试常见的应对技巧,感兴趣的小伙伴可以看我的这篇文章“互联网面试六大常见问题及应对技巧,2021不再入坑!”
在进行完整的学习之前,我先来和大家分享开胃小菜,Java 面试中常见的几个小问题:
1、JDK、JRE、JVM 是什么?
=====================
**JDK:**开发者提供的开发工具箱,是给程序开发者用的,它包括完整的 jre、Java 运行环境,还包括了其他供开发者使用的工具包。
**JRE:**运行时所必须的包依赖的环境都在 jre 中
**JVM:**当我们运行一个程序时,JVM 负责将字节码转换为特定机器代码,JVM 提供了内存管理、垃圾回收和安全机制等,他独立于硬件和操作系统,正是 java 程序可以一次编写多处执行的原因。
2、什么是面向对象
=============
封装:封装把一个对象的属性私有化、同时提供一些可以被外界访问的属性的方法。
继承:
java 是多单继承的,
子类拥有父类非 private 的属性和方法
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
子类可以用自己的方式实现父类的方法
多态:父类的引用指向子类
3、Java 的数据类型有哪些?
===================
很多人都会在这个看似简单的问题中入坑,一说到数据类型,很多人第一时间想到的就是 int、char 等类型,但是我们仔细看题就会发现,题中所问的问题是数据类型,而不是基本数据类型。
数据类型有两种,分别是“基本数据类型”和“引用数据类型”
基本数据类型包括的内容如下表:
<table border="1" cellspacing="0"><tbody><tr><td style="vertical-align:top;width:117px;"><p></p></td><td style="vertical-align:top;width:63px;"><p>byte</p></td><td style="vertical-align:top;width:47.35pt;"><p>short</p></td><td style="vertical-align:top;width:47.35pt;"><p>int</p></td><td style="vertical-align:top;width:47.35pt;"><p>long</p></td><td style="vertical-align:top;width:47.35pt;"><p>double</p></td><td style="vertical-align:top;width:47.35pt;"><p>float</p></td><td style="vertical-align:top;width:47.35pt;"><p>char</p></td><td style="vertical-align:top;width:47.35pt;"><p>boolean</p></td></tr><tr><td style="vertical-align:top;width:117px;"><p>字节大小</p></td><td style="vertical-align:top;width:63px;"><p>1</p></td><td style="vertical-align:top;width:47.35pt;"><p>2</p></td><td style="vertical-align:top;width:47.35pt;"><p>4</p></td><td style="vertical-align:top;width:47.35pt;"><p>8</p></td><td style="vertical-align:top;width:47.35pt;"><p>8</p></td><td style="vertical-align:top;width:47.35pt;"><p>4</p></td><td style="vertical-align:top;width:47.35pt;"><p>2</p></td><td style="vertical-align:top;width:47.35pt;"><p>1</p></td></tr><tr><td style="vertical-align:top;width:117px;"><p>占位大小</p></td><td style="vertical-align:top;width:63px;"><p>8</p></td><td style="vertical-align:top;width:47.35pt;"><p>16</p></td><td style="vertical-align:top;width:47.35pt;"><p>32</p></td><td style="vertical-align:top;width:47.35pt;"><p>64</p></td><td style="vertical-align:top;width:47.35pt;"><p>64</p></td><td style="vertical-align:top;width:47.35pt;"><p>32</p></td><td style="vertical-align:top;width:47.35pt;"><p>16</p></td><td style="vertical-align:top;width:47.35pt;"><p>8</p></td></tr></tbody></table>
而引用数据类型包括的是三种:类、接口、数组
那么在 Java 中为什么会有“基本数据类型”和“引用数据类型”?
原因是因为引用类型在堆里,基本类型在栈里,
栈空间小且连续,往往会被放在缓存。引用类型的高速缓存率高且要多一次解引用。
而且对象还要再多储存一个对象头,对基本数据类型来说空间浪费率太高。
4、解释一下构造方法
==============
构造方法有哪些规定?
构造方法名必须与类名一致
构造方法不举办任何返回值类型、关键字 void 也不能加入
任何类都有构造方法,如果没有显示的定义,则系统会为该类定义一个默认的无参构造器
如果显示的定义了构造器,系统就不会创建默认的不含参数的构造器了,
一个类中可以编写多个构造方法,构造方法之间构成重载关系。
5、如何理解方法的重载和重写?
===================
对于方法的重载和重写,这是两个非常容易混淆的概念,所以在这里做了一个表格的对比:
<table border="1" cellspacing="0"><tbody><tr><td style="vertical-align:top;width:213.05pt;"><p>重载</p></td><td style="vertical-align:top;width:213.05pt;"><p>重写</p></td></tr><tr><td style="vertical-align:top;width:213.05pt;"><ol><li><p>发生在同一个类中</p></li><li><p>方法名必须相同、参数不同,包括类型、个数、顺序,方法返回值和访问修饰符可以不同。</p></li><li><p>发生在编译时</p></li></ol></td><td style="vertical-align:top;width:213.05pt;"><ol><li><p>发生在父子类中</p></li><li><p>方法名、参数列表必须相同</p></li><li><p>返回值范围小于等于父类</p></li><li><p>访问修饰符范围大于等于父类</p></li><li><p>抛出的异常范围小于等于父类</p></li></ol></td></tr></tbody></table>
以上是几个在 Java 面试中常见的概念型面试题,接下来再和大家分享几个对比类的面试题
6、解释 this 和 super 关键字
=====================
在 this 和 super 关键字使用过程中有以下这些注意事项:
Super 关键字用于从子类访问父类的变量和构造方法,也包含构造方法
Super 调用父类中的其他构造方法时,调用时要放在构造方法的首行
this 关键字用于引用类的当前实例,this 可以调用当前类的构造方法
this 调用本类中的其他构造方法时,也要放在首行
this 和 super 都不能用在 static 方法中
7、解释字符串三剑客(String、StringBuilder、StringBuffer)
=================================================
<table border="1" cellspacing="0" style="width:466.55pt;"><tbody><tr><td style="vertical-align:top;width:87.95pt;"><p></p></td><td style="vertical-align:top;width:125.05pt;"><p>可变性</p></td><td style="vertical-align:top;width:80.4pt;"><p>线程安全</p></td><td style="vertical-align:top;width:173.15pt;"><p>性能</p></td></tr><tr><td style="vertical-align:top;width:87.95pt;"><p>String</p></td><td style="vertical-align:top;width:125.05pt;"><p>由 final 修饰,不可变</p></td><td style="vertical-align:top;width:80.4pt;"><p>安全的</p></td><td style="vertical-align:top;width:173.15pt;"><p>进行改变时,重新指向</p></td></tr><tr><td style="vertical-align:top;width:87.95pt;"><p>StringBuilder</p></td><td style="vertical-align:top;width:125.05pt;"><p>char[] value 可变</p></td><td style="vertical-align:top;width:80.4pt;"><p>不安全</p></td><td style="vertical-align:top;width:173.15pt;"><p>比 StringBuffer 有 10%-15%的提升</p></td></tr><tr><td style="vertical-align:top;width:87.95pt;"><p>StringBuffer</p></td><td style="vertical-align:top;width:125.05pt;"><p>char[] value 可变</p></td><td style="vertical-align:top;width:80.4pt;"><p>加锁、安全的</p></td><td style="vertical-align:top;width:173.15pt;"><p></p></td></tr></tbody></table>
8、equals 和 == 的区别
评论