JAVA 面试常见问题详解

JAVA 面试常见问题详解

目录

  1. 基础知识
    • Java基础
    • 面向对象编程
    • 异常处理
  2. 高级特性
    • 多线程与并发
    • 集合框架
    • JVM原理
  3. 实战问题
    • 代码优化
    • 设计模式
    • Spring框架
  4. 常见算法与数据结构
    • 排序算法
    • 树与图
    • 动态规划
  5. 系统设计与架构
    • 高并发系统设计
    • 分布式系统
    • 微服务架构

基础知识

Java基础

  1. JDK与JRE的区别

    • JDK (Java Development Kit) 是Java开发工具包,包含JRE以及编译器和其他工具。
    • JRE (Java Runtime Environment) 是Java运行环境,仅包含Java虚拟机(JVM)和Java类库,不包含开发工具。
  2. Java的基本数据类型

    • 八种基本数据类型:byte, short, int, long, float, double, char, boolean
    • 默认值:int默认为0,float默认为0.0f,boolean默认为false等。
  3. Java中的变量作用域

    • 局部变量:在方法内声明,作用域仅限于方法。
    • 实例变量:在类内声明,不带static关键字,作用于对象实例。
    • 类变量:在类内声明,带static关键字,作用于整个类。

面向对象编程

  1. 面向对象的四大基本特征

    • 封装:将数据和方法封装在类中,控制访问权限。
    • 继承:子类继承父类的属性和方法,支持代码重用。
    • 多态:同一方法可以有不同的表现形式,主要通过方法重载和方法重写实现。
    • 抽象:通过抽象类和接口实现,定义抽象方法由子类实现。
  2. 方法重载与方法重写的区别

    • 方法重载:在同一个类中,方法名相同但参数不同。
    • 方法重写:在子类中重新定义父类的方法,方法签名必须相同。

异常处理

  1. Java中的异常分类

    • 检查型异常(Checked Exception):编译期异常,必须进行处理,例如IOException。
    • 非检查型异常(Unchecked Exception):运行期异常,不强制处理,例如NullPointerException。
  2. try-catch-finally结构

    • try块:包含可能产生异常的代码。
    • catch块:捕获并处理异常。
    • finally块:无论是否发生异常,最终都会执行的代码。

高级特性

多线程与并发

  1. 创建线程的方式

    • 继承Thread类并重写run方法。
    • 实现Runnable接口并实现run方法。
    • 使用Callable接口并实现call方法,结合FutureTask。
  2. 线程同步与锁

    • 使用synchronized关键字修饰方法或代码块,确保线程安全。
    • 使用ReentrantLock进行显式锁操作,支持更高级的线程控制。

集合框架

  1. 常见集合类

    • List接口:ArrayList, LinkedList
    • Set接口:HashSet, TreeSet
    • Map接口:HashMap, TreeMap
  2. 集合类的特点和使用场景

    • ArrayList:基于数组,查询速度快,增删慢,适用于查询操作频繁的场景。
    • LinkedList:基于链表,增删速度快,查询慢,适用于增删操作频繁的场景。

JVM原理

  1. JVM内存结构

    • :存储对象实例,分为新生代和老年代。
    • :存储方法调用和局部变量,每个线程一个栈。
    • 方法区:存储类信息、常量、静态变量。
  2. 垃圾回收机制

    • 新生代垃圾回收:采用复制算法(Copying)。
    • 老年代垃圾回收:采用标记-清除算法(Mark-Sweep)和标记-整理算法(Mark-Compact)。

实战问题

代码优化

  1. 代码性能优化

    • 避免不必要的对象创建,使用对象池。
    • 使用StringBuilder替代String进行字符串拼接。
    • 优化循环和递归,减少时间复杂度。
  2. 内存优化

    • 使用软引用和弱引用管理内存。
    • 避免内存泄漏,及时释放不再使用的资源。

设计模式

  1. 常见设计模式
    • 单例模式:确保一个类只有一个实例,提供全局访问点。
    • 工厂模式:定义创建对象的接口,将实例化推迟到子类。
    • 观察者模式:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖的对象都会收到通知。

Spring框架

  1. Spring的核心概念

    • IOC(控制反转):通过依赖注入(DI)实现对象的创建和管理。
    • AOP(面向切面编程):通过切面分离业务逻辑和系统级服务,例如日志记录和事务管理。
  2. Spring Boot简介

    • 提供简化的配置和开发方式,集成常用的框架和库。
    • 支持自动配置,减少开发者的配置工作。

常见算法与数据结构

排序算法

  1. 常见排序算法
    • 冒泡排序:时间复杂度O(n^2),适用于数据量小的情况。
    • 快速排序:时间复杂度O(n log n),不稳定,适用于大多数情况。
    • 归并排序:时间复杂度O(n log n),稳定,适用于数据量大且对稳定性有要求的情况。

树与图

  1. 二叉树

    • 二叉搜索树(BST):左子树节点值小于根节点值,右子树节点值大于根节点值。
    • 平衡二叉树:例如AVL树,红黑树,确保树的高度平衡。
  2. 图的遍历

    • 深度优先搜索(DFS):利用栈结构,适用于路径搜索。
    • 广度优先搜索(BFS):利用队列结构,适用于最短路径搜索。

动态规划

  1. 动态规划的核心思想

    • 子问题重叠:将大问题拆分为子问题,子问题之间存在重叠。
    • 最优子结构:通过子问题的最优解构建原问题的最优解。
  2. 经典动态规划问题

    • 背包问题:01背包,多重背包,完全背包。
    • 最长公共子序列(LCS):求两个字符串的最长公共子序列长度。

系统设计与架构

高并发系统设计

  1. 负载均衡

    • 硬件负载均衡:如F5。
    • 软件负载均衡:如Nginx,HAProxy。
  2. 缓存策略

    • 本地缓存:如Guava Cache。
    • 分布式缓存:如Redis,Memcached。

分布式系统

  1. 分布式系统的特点

    • 一致性:所有节点数据一致。
    • 可用性:系统一直可用。
    • 分区容忍性:系统可以容忍分区故障。
  2. CAP理论

    • 一致性(Consistency):所有节点在同一时间看到相同的数据。
    • 可用性(Availability):每个请求都能收到一个(成功或失败)的响应。
    • 分区容忍性(Partition Tolerance):系统在网络分区的情况下仍能继续运行。

微服务架构

  1. 微服务的核心思想
    • 将单一的应用程序拆分为多个

小的服务,每个服务独立部署和运行。
- 各个服务通过轻量级的通信机制(如HTTP,RPC)进行交互。

  1. 微服务的优缺点
    • 优点:提高系统的可扩展性和可维护性,便于持续集成和部署。
    • 缺点:增加了系统的复杂性,需要处理分布式系统的各种问题。

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

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

相关文章

fiddler抓包工具

概念 概念: Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。 http:不加密,端口为80 https:加密,端口为443 原理: 其实就在访问服务器时&#xff0…

如何在写代码中找到乐趣

平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。 如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。 参考资料: 实战!工作中常用到…

[方法] Unity 3D模型与骨骼动画

1. 在软件中导出3D模型 1.1 3dsmax 2014 1.1.1 TGA转PNG 3dsmax的贴图格式为tga,我们需要在在线格式转换中将其转换为Unity可识别的png格式。 1.1.2 模型导出 导出文件格式为fbx。在导出设置中,要勾选三角算法,取消勾选摄像机和灯光&#…

三秒4张图!让 Stable Diffusion 出图速度暴增的新一代生成模型LCM!

前言 大家好,这里是和你们一起探索 AI绘画月月~ 最近一种新的图像生成形式逐渐兴起,即生成的图像会随输入的文字或笔画动作迅速变化,这让图像生成有了更多灵活探索和准确控制的空间。这种「实时反馈」的感觉源于模型能在几秒钟内&#xff0…

springMVC中的拦截器

文章目录 11、拦截器11.1书写拦截器的步骤一、首先需要在SpringMVC.xml中配置拦截器二、处理完配置文件进行配置类的书写书写的类需要实现HandlerInterceptor接口 11.2多个拦截器的执行顺序⑴如果每个拦截器的preHandle()都返回true⑵如果某个拦截器的preHandle()返回了false⑵…

fiddler 返回Raw乱码

有时会发现自己发送的请求后,返回结果Raw里面是乱码,可以勾选Decode并重新发送请求就解决了 这个时候将Decode勾选一下 此时就好了

【C++ | 委托构造函数】委托构造函数 详解 及 例子源码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

解释一下MVP和MVVM设计模式及其优缺点

MVP(Model-View-Presenter)设计模式 定义: MVP是一种软件架构设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和展示器(Presenter&#xff…

模版总结小全

BFS 最短步数问题 #include<iostream> #include<queue> #include<cstring> using namespace std;const int N 50; char g[N][N],d[N][N]; int dx[] {-1,0,1,0}; int dy[] {0,1,0,-1}; int n,m;int bfs(int x,int y){queue<pair<int,int> > q…

【Ubuntu】如何用指令设置静态IP

这里介绍的是利用netplan 的配置文件一般在 /etc/netplan/ 目录下&#xff0c;文件名类似 01-network-manager-all.yaml。 用 nano/ vim 编辑器打开配置文件&#xff1a; sudo nano /etc/netplan/01-network-manager-all.yaml # 替换成你的文件名修改配置文件 network:versi…

MySQL高级-SQL优化-insert优化-批量插入-手动提交事务-主键顺序插入

文章目录 1、批量插入1.1、大批量插入数据1.2、启动Linux中的mysql服务1.3、客户端连接到mysql数据库&#xff0c;加上参数 --local-infile1.4、查询当前会话中 local_infile 系统变量的值。1.5、开启从本地文件加载数据到服务器的功能1.6、创建表 tb_user 结构1.7、上传文件到…

mysql_config 命令, 可以查看mysqlclient库的位置在/usr/lib64/mysql下

好吧&#xff0c;其实我是从这里知道了 -l 后面加的库名和so文件这种名不一样&#xff0c;因为库文件实际叫下面这个名&#xff08;前面有lib)。

策略模式、工厂模式和模板模式的应用

1、策略模式、工厂模式解决if else Cal package com.example.dyc.cal;import org.springframework.beans.factory.InitializingBean;public interface Cal extends InitializingBean {public Integer cal(Integer a, Integer b); }Cal工厂 package com.example.dyc.cal;impo…

一分钟彻底掌握Java迭代器Iterator

Iterator Iterator 是 Java 的 java.util 包中的一个接口 iterator() 是 Java 集合框架中的一个方法&#xff0c;它返回一个 Iterator 对象&#xff0c;该对象可以用来遍历集合中的元素。 Iterator确实是一个接口&#xff0c;你不能直接实例化一个接口。但是&#xff0c;你可以…

MySQL之覆盖索引

什么是覆盖索引&#xff1f; 覆盖索引&#xff1a;查询时使用了索引&#xff0c;且需要返回的列&#xff0c;在改索引中已经全部能找到。 示例&#xff1a;有user表如下&#xff1a; CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 技术主键,name varch…

Git企业开发---初识Git

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 引言 不知道大家有没有经历这种困惑&#xff0c;当我们要去交某文档时&#xff0c;总是要进行修改&#xff0c;修改后再交…

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…

人生最有力,最棒的十句话!

人生最有力&#xff0c;最棒的十句话 1、允许一切事发生&#xff0c;所有一切发生的事不是你能阻挡了的&#xff0c;你接受&#xff0c;他也发生&#xff0c;你不接受&#xff0c;他也发生&#xff0c;你还不如坦然面对接受现实。 2、你焦虑的时候千万不要躺着啥也不干&#xf…

全网唯一免费无水印AI视频工具!

最近Morph Studio开始免费公测&#xff01;支持高清画质&#xff0c;可以上传语音&#xff0c;同步口型&#xff0c;最重要的是生成的视频没有水印&#xff01; Morph Studio国内就可以访问&#xff0c;可以使用国内邮箱注册&#xff08;我用的163邮箱&#xff09;&#xff0c;…

Java--回顾方法的调用

1.静态方法与非静态方法 1.当二者皆为静态方式时&#xff0c;可直接类名.方法名调用其方法 2.当调用的方法是静态&#xff0c;被调用的方法为非静态时&#xff0c;调用将会报错 3.出现2情况可通过进行实例化这个类的方式进行调用&#xff0c;如图所示 4.当处于一个类下&#xf…