前言

各种框架眼花缭乱,各种逻辑需求,CRUD。久而久之,写的1000行代码中都是if else,@autowired等等,等出去面试的时候,基础题不断,而且还是不常用,或者说不在意的,往往这些就容易把人问懵。今日加深下基础映像吧

** 2024Java offer收割指南分享 **

闲着无事,看看理解, 加深映像!!!

JAVA 中的几种基本数据类型是什么,各自占用多少字节。

  • 四种整型,二种浮点型,一种字符型,一种布尔型
  • byte:占用 1 字节(8 位),范围是 -128 到 127。
  • short:占用 2 字节(16 位),范围是 -32,768 到 32,767。
  • int:占用 4 字节(32 位),范围是 -2,147,483,648 到 2,147,483,647。
  • long:占用 8 字节(64 位),范围是 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
  • float:占用 4 字节(32 位),用于表示单精度浮点数。
  • double:占用 8 字节(64 位),用于表示双精度浮点数。
  • char:占用 2 字节(16 位),用于表示单个字符(Unicode)。

    boolean:占用 1 字节(8 位),表示 true 或 false(实际占用可能因 JVM 实现而异)。

String 类能被继承吗,为什么

先看源码

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
}
  1. final 关键字:String 类被声明为 final,这意味着不能创建 String 类的子类。使用 final 关键字可以防止类被继承,从而确保其行为不被改变。
  2. 扩展下,如此设定了final关键字,代表着String不希望被动手脚,这种设计提高了安全性和性能,特别是在多线程环境中。禁止继承有助于保持这种不可变性。
  3. 性能优化,怎么优化呢,既然字符串是不能变了,使用字符串池(String Pool)来存储常量字符串,当你创建一个字符串字面量时,Java 会首先检查字符串池中是否已经存在相同的字符串。如果存在,Java 会重用这个字符串的引用,而不是创建一个新的对象。这种机制可以节省内存并提高性能,特别是在处理大量相同字符串时

String,Stringbuffer,StringBuilder 的区别。

老生常谈了,分为几类

  1. 不可变性 vs 可变性:上面说了,String是final,不可变,StringBuffer和StringBuilder是可变的
  2. 线程安全:String和StringBuffer是线程安全的,StringBuilder是非线程安全。String不可变,自然是安全。StringBuffer方法是同步的,因此线程安全。StringBuilder方法非同步,所以单线程环境下性能更好。
  3. 性能:String: 由于不可变性,频繁修改会导致性能下降,因为每次修改都会创建新的对象。StringBuffer: 由于线程安全,性能相对较低,适合需要安全的多线程操作。StringBuilder: 性能最佳,适合需要频繁修改字符串的单线程操作。

    以上总结使用场景:

    String: 用于常量字符串或不需要修改的字符串。

    StringBuffer: 用于需要线程安全的字符串操作。

    StringBuilder: 用于性能要求高且在单线程环境中操作的字符串。

ArrayList 和 LinkedList 有什么区别

有时间的话,可以看看源码,对理解更有帮助,对数据结构也有很大的认知。这边简要说明下(熟悉下源码,更好的理解下面所说)

  1. 结构不同:

    • ArrayList: 基于动态数组实现。内部使用数组来存储元素,支持随机访问。
    • LinkedList: 基于双向链表实现。每个元素(节点)包含对前一个和后一个节点的引用。
  2. 存储方式
    • ArrayList: 元素在内存中是连续存储的,适合快速随机访问。
    • LinkedList: 元素在内存中不连续存储,适合频繁插入和删除操作。
  3. 访问速度
    • ArrayList: 随机访问速度快(O(1)),因为可以通过索引直接访问。
    • LinkedList: 随机访问速度慢(O(n)),需要从头遍历到指定位置。
  4. 插入和删除速度
    • ArrayList: 在中间插入或删除元素时,可能需要移动大量元素,时间复杂度为 O(n)。
    • LinkedList: 在任意位置插入或删除元素时,只需调整节点的引用,时间复杂度为 O(1)(已知位置)。
  5. 内存使用
    • ArrayList: 由于使用数组,可能会有额外的内存开销(如数组扩容时,需要重新开辟新的空间去存储)。
    • LinkedList: 每个节点需要额外存储前后节点的引用,内存开销较大。
  6. 适用场景
    • ArrayList: 适合频繁读取和随机访问的场景。
    • LinkedList: 适合频繁插入和删除的场景,尤其是在列表的两端。

类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候,他们的执行顺序。

  1. 首先,Java 加载父类的静态数据(静态变量和静态块)。

  2. 父类静态初始化: 执行父类的静态初始化块(如果有)。

  3. 子类静态数据: 然后,加载子类的静态数据(静态变量和静态块)。

  4. 子类静态初始化: 执行子类的静态初始化块(如果有)。

  5. 创建对象: 当调用 new 创建对象时,执行以下步骤:

    • 父类构造函数: 首先调用父类的构造函数。
    • 父类字段初始化: 在父类构造函数中,父类的实例字段会被初始化。
    • 子类构造函数: 然后调用子类的构造函数。
    • 子类字段初始化: 在子类构造函数中,子类的实例字段会被初始化。
class Parent {
static {
System.out.println("Parent static block");
} Parent() {
System.out.println("Parent 构造方法");
}
} class Child extends Parent {
static {
System.out.println("Child static block");
} Child() {
System.out.println("Child 构造方法");
}
} public class Main {
public static void main(String[] args) {
Child child = new Child();
}
}
Parent static block
Child static block
Parent 构造方法
Child 构造方法

最后

在这些简要的答案中,还能更深层次的去挖,面试多加加分,例如String以及Stringbuffer,StringBuilder 源码的分析,从而知道其中的区别,实例化方面也可以深入到JVM,整个过程中JVM的变化。

今日一学,5道大厂的Java基础面试题的更多相关文章

  1. 32道常见的Java基础面试题

    1. 什么是 Java 虚拟机(JVM)?为什么 Java 被称作是“平台无关的编程语言”? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被编译成能被 Java 虚拟 ...

  2. 100道Java基础面试题收集整理(附答案)

    不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...

  3. 最新28道java基础面试题-上

    28道java基础面试题 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪 ...

  4. 28道java基础面试题-下

    28道java基础面试题下 15.Java语言如何进行异常处理,关键字:throws.throw.try.catch.finally分别如何使用? 答:Java通过面向对象的方法进行异常处理,把各种不 ...

  5. Java基础面试题(史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  6. 非常全面的java基础笔试题

    下面是java基础笔试题,当时我去笔试,做了1个小时(80道选择题,后面的简答题就没时间做了),结果很吓人,太挫了,最后被面试官忽悠去培训去了,呵呵.我偷偷把面试题弄了下来,用来学习吧,也希望能对你们 ...

  7. 经典的Java基础面试题集锦

    经典的Java基础面试题集锦,欢迎收藏和分享. 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”. 问题:Java里的传引用 ...

  8. Java基础机试题

    package day8;import java.util.Scanner;/** * Java基础机试题 * @author:lyrand * */public class convert {   ...

  9. 大数据学习--day04(选择结构、循环结构、大数据java基础面试题)

    选择结构.循环结构.大数据java基础面试题 switch: 注意: byte short int char String(jdk1.7支持) 不能是 long float double boolea ...

  10. 一份最贴近真实面试的Java基础面试题

    这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...

随机推荐

  1. Fiddler远程调试js

    使用Fiddler调试本地js 在我们前端开发的日常工作中,发现服务器上某个css/javascript文件有问题,需要修改,那真是家常便饭.通常,我们需要将文件进行修改,然后重新发布再验证,这样就很 ...

  2. Minnaert

    Minnaert 假设气泡关闭时发生周期性膨胀和收缩,周围水也跟着振动,就嗷地一声叫了出来!设有个半径为 \(r\) 的泡形成后开始简谐振动,半径有 \[r=r_0+a\sin\frac{2\pi t ...

  3. 巴特沃斯LPF设计(硬件电路实现)

    高阶 (2n) VSVC单位增益巴特沃斯低通滤波器设计,可分解为 n 个二阶低通,通过对这多个二阶低通的组合优化,可提高滤波器的低通特性和稳定性. 串联的传递函数是各个二阶滤波器传递函数的乘积:\({ ...

  4. Redmi AX6000 刷 OpenWrt

    一直想尝试玩玩软路由,但是家里实在没有软路由的需求,外加不知道该入手什么机器来刷软路由,所以迟迟没有入手.最近研究生要开学了,但是学校的有线网要下载专用软件认证才能上网,终于找到合适的理由入手一款软路 ...

  5. chroot 整理

    chroot 是什么? 就是change root directory ,比如默认是 /, 可以用这个chroot 把 / 换成其他指定的目录 chroot 干什么的? 增加了系统的安全性,限制了用户 ...

  6. Excel中制作目录的3种方法,你了解几种?

    点赞再看,养成习惯:言之无文,行而不远. 微信搜索[亦心Excel]关注这个不一样的自媒体人. 本文 GitHub https://github.com/hugogoos/Excel 已收录,包含Ex ...

  7. RSA 对称加密,对称解密----公钥私钥加密解密过程

    RSA 对称加密,对称解密----公钥私钥加密解密过程(Java) 公司说不能传铭文密码,所以只能加密,再解密:麻烦事,其实这在需求文档没有,开发时间点也没有,浪费了了一上午的时间,还占用了公司给的开 ...

  8. 【QT性能优化】QT性能优化之QT6框架高性能图形视图框架快速展示百万图元大规模场景

    QT性能优化之QT6框架高性能图形视图框架快速展示百万图元大规模场景 简介: 本文展示了使用QT图形视图框架在一个场景中绘制出百万个图元的程序的效果以及源代码:本文还介绍了QT图形视图框架的一些实用功 ...

  9. PHP提薪模块

    在使用es搜索的时候需要注意以下这几点 文档(Document)与索引(Index):在ES中,文档是最小的数据单元,类似于数据库中的一行记录.文档组织在索引中,索引类似于数据库中的表.了解如何创建索 ...

  10. 开源的键鼠共享工具「GitHub 热点速览」

    十一长假回来,我的手放在落灰的键盘上都有些陌生了,红轴竟敲出了青轴般的响声,仿佛在诉说对假期结束的不甘. 假期回归的首更,让我们看看又有什么好玩的开源项目冲上了开源热榜.一套键盘和鼠标控制多台电脑的工 ...