⚙️ 1. Java跨平台原理(字节码文件与JVM)
  • 核心机制
    • Java源程序(.java)编译为与平台无关的字节码文件(.class,而非直接生成机器码。
    • 字节码由**Java虚拟机(JVM)**解释执行,JVM将字节码转换为目标平台的机器指令。
  • 关键特点
    • 一次编译,到处运行:只要目标平台安装对应的JVM,同一份.class文件即可运行。
    • 性能权衡:解释执行比C/C++直接编译为机器码效率低,但跨平台性强。
  • 对比C/C++
    • C/C++需针对不同平台重新编译生成特定机器码,Java通过JVM屏蔽底层差异。
      在这里插入图片描述
      在这里插入图片描述

🔐 2. Java的安全性
  • 语言层级安全
    • 取消指针:用引用替代指针,避免内存非法访问和越界问题。
    • 垃圾回收(GC):自动管理内存,防止内存泄漏和野指针。
    • 异常处理try/catch/finally结构化捕获错误,增强健壮性。
    • 强制类型检查:防止不安全的类型转换。
  • 底层安全机制
    • 字节码校验器:验证字节码合法性。
    • 类加载器(ClassLoader):隔离不同类访问权限。
    • 运行时内存布局:防止内存冲突。
    • 文件访问限制:沙箱机制限制恶意代码。

📦 3. Java三大版本
版本全称应用场景特点
J2SEJava 2 Standard Edition桌面应用、基础开发包含核心类库(I/O、网络等)
J2EEJava 2 Enterprise Edition企业级应用(电商、ERP系统)扩展Servlet/JSP/EJB等组件
J2MEJava 2 Micro Edition嵌入式设备(功能机、机顶盒)精简J2SE,专有API(不用于Android)

关系:J2EE包含J2SE,J2ME包含部分J2SE核心类。


🛠️ 4. JVM、JDK、JRE 核心概念
  • JVM(Java虚拟机)
    • 执行字节码的虚拟计算机,实现跨平台(不同OS有专属JVM)。
    • 核心功能:解释字节码、内存管理、安全控制。
  • JRE(Java运行环境)
    • = JVM + 核心类库(如rt.jar)。
    • 仅支持运行已编译的Java程序(无编译能力)。
  • JDK(Java开发工具包)
    • = JRE + 开发工具(javac编译器、jar打包工具等)。
    • 开发者必需,支持开发、调试、运行。

关系总结:JDK ⊃ JRE ⊃ JVM 。


📝 5. Java三种注释类型
类型语法用途
单行注释//注释内容临时注释单行代码
多行注释/* 注释内容 */注释多行代码(不可嵌套)
文档注释/** 注释内容 */生成API文档(通过javadoc工具)

示例

/**  * 动物类(文档注释)  * @author Developer  */  
public class Animal {  int age; // 单行注释:年龄属性  /* 多行注释:  void eat() { ... }  */  
}  

🧮 6. 8种基本数据类型及字节数
数据类型关键字字节数取值范围
字节型byte1-128 ~ 127
短整型short2-32768 ~ 32767
整型int4-2³¹ ~ 2³¹-1
长整型long8-2⁶³ ~ 2⁶³-1
单精度浮点型float4科学计数法(约±3.4e³⁸)
双精度浮点型double8科学计数法(约±1.8e³⁰⁸)
字符型char2Unicode字符(0~65535)
布尔型boolean1位true/false

布尔型大小:实际占用1位,但JVM通常以1字节处理。


🔄 7. i++ vs ++i 区别与示例
  • 共同点
    • 等价于 i = i + 1,若独立成句(如 i++;),效果相同。
  • 不同点
    • i++(后置自增):先取值,后自增。
      int a = 5;  
      int b = a++;  // b=5, a=6  
      
    • ++i(前置自增):先自增,后取值。
      int x = 5;  
      int y = ++x;  // y=6, x=6  
      

关键:在表达式中影响其他变量的计算结果。


⚡ 8. & vs &&| vs ||
  • &|
    • &:按位与(操作整数)或逻辑与(操作布尔值)。
    • |:按位或(整数)或逻辑或(布尔值)。
    • 特点:无论左侧结果如何,右侧操作数都会执行。
  • &&||
    • 短路特性
      • &&:左侧为false时,右侧不执行。
      • ||:左侧为true时,右侧不执行。
    • 高效场景
      if (list != null && list.size() > 0) // 避免空指针异常  
      

优先使用:短路运算符(&&/||)提升效率。


⏩ 9. 高效计算:2乘以8的最优解法
  • 答案2 << 3
  • 原理
    • 左移运算(<< n)等价于乘以2的n次方。
    • 2 << 3 = 2 × 2³ = 16。
  • 优势
    • CPU直接支持位运算,效率高于乘法指令。

扩展a * 8a << 3(适用于任意整数)。


🔄 10. 基本数据类型转换规则
  • 自动转换(隐式)
    • 小范围 → 大范围(如 byteint)。
    • 方向:byte → short → int → long → float → double
  • 强制转换(显式)
    • 大范围 → 小范围需手动转型,可能丢失精度或溢出。
    double d = 10.24;  
    long l = (long) d;  // l=10(精度丢失)  
    
  • 特殊规则
    • byte/short/char参与运算时自动提升为int
      在这里插入图片描述

📚 Java面试宝典:核心知识点详解(下)


🔄 11. if多分支 vs switch多分支
特性if-else if-elseswitch-case
适用场景分支较少(≤5),条件为区间或逻辑表达式分支多且为等值判断(整型/枚举/字符串)
执行逻辑条件从上至下判断,匹配即停止从匹配入口执行,不加break会穿透
条件类型支持任意布尔表达式(>, !=, 等)仅支持等值比较(不可用>, <
性能分支多时效率较低跳转表实现,多分支时效率更高

示例

// if处理区间判断  
if (score >= 90) grade = "A";  
else if (score >= 80) grade = "B";  // switch处理固定值  
switch (level) {  case 1: System.out.println("初级"); break;  case 2: System.out.println("中级");  
} // 若level=2,会输出"中级"并穿透后续case  

🔄 12. while vs do-while循环
循环类型执行顺序首次条件=false时适用场景
while先判断 ⇒ 后执行循环体一次都不执行需要前置条件检查
do-while先执行 ⇒ 后判断至少执行一次循环体必须执行一次的场景

关键区别

int i = 0;  
while (i > 0) {   // 不执行  System.out.println("while循环");  
}  do {              // 执行一次  System.out.println("do-while循环");  
} while (i > 0);  

⏩ 13. break 与 continue 作用
关键字作用示例场景
break立即退出整个循环体满足条件时提前终止循环
continue跳过本次循环,进入下一次迭代跳过无效数据,继续处理后续元素

嵌套循环

outer: for (int i=0; i<5; i++) {  for (int j=0; j<5; j++) {  if (j == 3) break outer; // 跳出外层循环  if (j == 1) continue;    // 跳过j=1的本次迭代  }  
}  

🧮 14. 递归算法示例:计算 n!
public static int factorial(int n) {  if (n == 1) return 1;           // 递归出口  return n * factorial(n - 1);    // 递归调用  
}  
// 调用:factorial(5) = 120  

⚖️ 15. 递归的优缺点
优点缺点
代码简洁,描述问题自然效率低(函数调用开销大)
解决复杂问题(如树遍历)栈溢出风险(深度过大)
数学定义直观映射(如斐波那契)难调试和维护

使用原则

  • 必须有明确的递归出口
  • 深度可控(一般 ≤ 1000 层)
  • 避免重复计算(可用缓存优化)

📦 16. 数组核心特性
  1. 类型统一:所有元素类型相同(声明时指定)
  2. 长度固定:创建后不可改变(arr.length
  3. 内存连续:分配连续空间,索引访问(O(1)
  4. 默认值
    • int0double0.0
    • booleanfalse, 引用类型 → null
  5. 索引从0开始:有效范围 [0, length-1]

🔢 17~19. 三大排序算法

1. 冒泡排序(优化版)

void bubbleSort(int[] arr) {  for (int i = 0; i < arr.length-1; i++) {  boolean swapped = false;  for (int j = 0; j < arr.length-1-i; j++) {  if (arr[j] > arr[j+1]) {  int temp = arr[j];  arr[j] = arr[j+1];  arr[j+1] = temp;  swapped = true;  }  }  if (!swapped) break; // 无交换时提前终止  }  
}  

2. 选择排序

void selectionSort(int[] arr) {  for (int i = 0; i < arr.length-1; i++) {  int minIndex = i;  for (int j = i+1; j < arr.length; j++) {  if (arr[j] < arr[minIndex]) minIndex = j;  }  int temp = arr[i];  arr[i] = arr[minIndex];  arr[minIndex] = temp;  }  
}  

3. 插入排序

void insertionSort(int[] arr) {  for (int i = 1; i < arr.length; i++) {  int key = arr[i], j = i-1;  while (j >= 0 && arr[j] > key) {  arr[j+1] = arr[j]; // 后移元素  j--;  }  arr[j+1] = key;  }  
}  

🔄 20. 可变参数(Varargs)特性
  • 语法类型... 参数名(如 String... names
  • 规则
    1. 必须是方法最后一个参数
    2. 内部按数组处理names.length 获取数量)
    3. 调用灵活:
      print("A");          // 等价于 print(new String[]{"A"})  
      print("A", "B", "C"); // 等价于 print(new String[]{"A","B","C"})  
      
  • 禁止:不能与同类型数组方法重载(编译冲突)

典型应用String.format()、日志工具等方法


🧩 21. 类与对象关系
概念定义现实比喻示例
对象的模板(抽象)汽车设计图class Car { ... }
对象类的实例(具体)根据图纸造的实体车Car myCar = new Car()

关键点

  • 类定义了属性(字段)和行为(方法)
  • 对象通过new创建,每个对象拥有独立内存空间
  • 同一类的对象共享方法定义,但属性值不同

🆚 22. 面向过程 vs 面向对象
维度面向过程面向对象
核心思想步骤为中心(函数驱动)对象为中心(数据封装)
代码组织按功能拆分成函数按现实实体抽象成类
典型语言C, PascalJava, C#, Python
优势简单问题高效复杂系统易扩展、维护
核心特性无封装、继承、多态支持三大特性

方法重载和方法重写(覆盖)的区别
在这里插入图片描述

开发演进
大型系统中,面向对象通过封装(隐藏细节)、继承(代码复用)、多态(接口统一)显著降低复杂度。


🔑 23. this 与 super 关键字
关键字作用使用场景
this1. 指代当前对象解决字段/局部变量同名冲突
2. 调用本类构造方法this()构造方法重载时复用代码
super1. 调用父类成员访问被重写的父类方法
2. 调用父类构造方法super()子类构造方法中初始化父类部分

约束

  • this()super() 必须在构造方法首行
  • 不可在静态方法中使用(无"当前对象"概念)

⚙️ 24. static 关键字详解

四大用途

  1. 静态变量:类级别共享(所有对象共用同一份)
    class Student {  static String school = "北大"; // 所有学生共享  
    }  
    
  2. 静态方法:无需对象即可调用(禁止访问非静态成员)
    Math.max(10, 20); // 经典用例  
    
  3. 静态代码块:类加载时执行一次(初始化静态资源)
    static {  System.out.println("类已加载!");  
    }  
    
  4. 静态内部类:不依赖外部类实例(可独立存在)

内存特性

  • 静态成员在方法区存储(非堆内存)
  • 类加载时初始化,程序结束时销毁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89265.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89265.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89265.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp微信小程序:editor组件placeholder字体样式修改

一、问题描述 微信小程序editor组件的placeholder字体默认为斜体字&#xff0c;官方对此没有属性可以设置它的样式&#xff0c;并且直接在组件上设置样式也是无效的。 二、解决方案 通过审查节点&#xff1a; 可以看到editor的placeholder其实是在一个伪元素上。 在页面或者…

PhoneRescue 4.3绿色版!解决iPhone数据丢失、系统崩溃等场景

目录 一、引言二、软件介绍1. 研发背景与定位2. 兼容性与技术优势 三、功能介绍1. 数据恢复功能&#xff08;核心痛点解决方案&#xff09;2. 系统修复功能3. 数据管理辅助 四、软件特色1. 操作极简&#xff0c;零技术门槛2. 安全可靠&#xff0c;零数据风险3. 高效精准&#x…

Vue 快速入门

一、Vue是什么 Vue是一款用于构建用户界面的渐进式的JavaScript框架。 官网&#xff1a;Vue.js - 渐进式 JavaScript 框架 | Vue.js 其核心特性包括&#xff1a; 响应式数据绑定&#xff1a;通过 Vue 的响应式系统&#xff0c;数据变化会自动反映到视图&#xff0c;减少手动 D…

JAVA-JWT

JWT简介 JSON Web Token&#xff08;JWT&#xff09;是一个非常轻巧的规范&#xff0c;这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。一个 JWT 实际上就是一个字符串&#xff0c;它由三部分组成&#xff0c;头部、载荷与签名。前两部分需要经过 Base64 编…

UI前端大数据处理挑战与对策:保障数据安全与隐私

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 一、引言&#xff1a;大数据时代的前端安全新挑战 在数字化转型的浪潮中&#xff0c;前端已从…

DTO、VO、POJO与实体类使用方案(结合Mapper.xml)

结合MyBatis的Mapper.xml文件&#xff0c;展示完整的层级数据流转和数据库操作。 1. 实体类优化&#xff08;Entity&#xff09; // User.java Data NoArgsConstructor AllArgsConstructor TableName("sys_user") public class User {TableId(type IdType.AUTO)pr…

开源|VDBBench 1.0正式官宣,完全复刻业务场景,支持用户自定义数据集

宣布个好消息&#xff0c;大家期待已久的VDBBench 1.0更新啦。 尝鲜链接&#xff1a; https://github.com/zilliztech/VectorDBBench/releases/tag/v1.0.0 对于这个功能的更新&#xff0c;我们准备了很久&#xff0c;也思考了很多。 因为对我们来说&#xff0c;VDBBench 从来不…

7,FreeRTOS列表与列表项的插入删除

一、实验目标 创建三个动态任务&#xff0c;栈空间大小均为128字。startTask、Task1、Task2。startTask仅运行一次&#xff0c;负责task1、task2任务的创建&#xff0c;startTask任务的删除。Task1负责初始化列表、列表项123&#xff0c;并进行列表项的插入实验与删除实验。Tas…

两款支持3D地图的WebGIS框架对比

前言 在当前的WebGIS技术发展中&#xff0c;3D地形图的可视化已经成为一个非常重要的功能&#xff0c;尤其是在城市规划、环境监测和虚拟旅游等领域中的应用。对于开发者而言&#xff0c;选择一个强大且适合的WebGIS框架是实现这些功能的关键。目前市场上较为流行的支持3D地形…

Github 2025-06-26 Go开源项目日报Top10

根据Github Trendings的统计,今日(2025-06-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10PureBasic项目1使用Gitleaks保护和发现机密信息 创建周期:2203 天开发语言:Go协议类型:MIT LicenseStar数量:14645 个Fork数量:13…

C++实现鱿鱼、羊了个羊、扫雷、原神模拟

C++ 鱿鱼游戏模拟实现 鱿鱼游戏中的经典场景可以通过C++模拟实现,例如“红绿灯”游戏。以下是一个简化版本的核心代码框架: #include <iostream> #include <thread> #include <chrono> #include <cstdlib> #include <ctime> #include <ve…

从用户到权限:解密 AWS IAM Identity Center 的授权之道

大家好&#xff0c;今天我们来解决一个非常具体的实战问题&#xff1a;如何让 IAM Identity Center 中创建的用户真正获得 AWS 账户的操作权限&#xff0c;从而取代老旧的 IAM 用户管理模式&#xff1f; 如果我们盯着用户详情页&#xff0c;想找一个“附加角色”的按钮&#x…

在 Spring Boot 中使用 MyBatis-Plus 的详细教程

前言 在现代的 Java Web 开发中&#xff0c;Spring Boot 和 MyBatis 已经成为主流框架组合。为了提升开发效率和简化数据库操作&#xff0c;MyBatis-Plus&#xff08;简称 MP&#xff09;应运而生。它是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改…

AI生成内容泛滥时代:从“袋鼠登机“视频看AI鉴伪与游戏智能的未来

近年来&#xff0c;AI生成内容的质量突飞猛进&#xff0c;从文本到图像再到视频&#xff0c;几乎达到了以假乱真的程度。近期一段"人类在飞机上吵架看呆袋鼠"的视频在社交网络疯传&#xff0c;获得数千万次观看后&#xff0c;才被证实是AI生成内容&#xff0c;这一事…

为什么在linux中不能直接使用pip进行安装

您好&#xff0c;这是一个非常深刻且关键的问题&#xff0c;触及了 Linux 系统管理与 Python 开发实践的核心原则。理解了这一点&#xff0c;您就真正开始像一位经验丰富的开发者那样思考了。 简单来说&#xff0c;答案是&#xff1a;为了保护操作系统自身的稳定和完整性。 让…

IDEA相关配置记录

IDEA相关配置记录 参考链接&#xff1a; 参考链接&#xff1a; 1、安装jdk D:\Program Files\Java\jdk-21 https://blog.csdn.net/2302_81410974/article/details/142031416 2、安装maven D:\Java\workspace-maven\apache-maven-3.9.10 . ├── LICENSE ├── NOTICE ├──…

FastGPT私有化部署完整指南

&#x1f680; FastGPT 私有化部署完整指南 &#x1f4cb; 环境要求 硬件要求 最低配置:CPU: 4核内存: 8GB存储: 50GB网络: 稳定互联网连接推荐配置:CPU: 8核内存: 16GB存储: 100GB SSD网络: 10Mbps带宽软件环境 必需软件:- Docker: > 20.10.0- Docker Compose: > 2.…

系统架构设计师论文分享-基于架构的软件设计方法及应用

我的软考历程 摘要 2023年2月&#xff0c;我所在的公司做了开发纱线MES系统的决定&#xff0c;该系统为国内纱线工厂提供SAAS服务&#xff0c;旨在提高纱线工厂的智能化和数字化水平。我在该项目中被任命为系统架构设计师&#xff0c;全面掌管该项目的架构设计工作。本文将结…

团结引擎发布纯鸿蒙应用

大家好&#xff0c;我是阿赵。   这里尝试一下用团结引擎发布纯鸿蒙系统的应用。 一、 安装鸿蒙系统发布需要的组件 在团结引擎的Hub里面找到Add modules: 然后找到OpenHarmony的支持选项&#xff0c;由于我已经安装过了&#xff0c;所以会显示Installed&#xff0c;如果没…

C++基础(FreeRDP编译)

安装 先安装openssl 保姆级OpenSSL下载及安装教程,OpenSSL下载及安装教程-CSDN博客 vcpkg integrate install 安装 vcpkg install zlib vcpkg install ffmpeg:x64-windows 编译指令 PS D:\freerdp\FreeRDP\build> cmake .. -G "Visual Studio 17 2022" -A x…