Java开发常见基础问题

news/2024/7/25 20:38:16/文章来源:https://blog.csdn.net/qq_33548747/article/details/139279712

Java开发的多个方面,包括但不限于Java基础知识、多线程并发、JVM、框架使用、数据库、设计模式、网络编程等。
以下是一些常见的问题以及回答的方向:

Java 开发技术常见问题(一)

Java 基础知识

  • 对象和类的区别是什么?
    类是蓝图,对象是根据蓝图创建的具体实例。
  • 什么是封装、继承和多态?
  1. 封装是隐藏对象的实现细节,只暴露操作的接口。
  2. 继承是从已有类派生新类的过程,新类能继承父类的属性和方法。
  3. 多态是同一个接口可以被不同的实例以不同的方式实现。

多线程并发

  • 什么是线程安全?
    线程安全是指在多线程环境中,代码的执行不会导致数据不一致或者程序状态异常。
  • 如何保证线程安全?
    可以使用synchronized关键字、Lock接口、volatile关键字、原子类等机制。

JVM

  • JVM的内存模型是怎样的?
    JVM内存模型包括方法区、堆、栈、程序计数器和本地方法栈。
  • 什么是垃圾回收?
    垃圾回收是JVM自动回收不再使用的对象所占用的内存。

框架使用

  • Spring框架的核心是什么?
    Spring框架的核心是控制反转(IoC)和面向切面编程(AOP)。
  • 什么是MVC模式?
    MVC模式将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分。

数据库

  • 什么是SQL注入?如何预防?
    SQL注入是一种攻击技术,攻击者可以通过在应用程序的输入字段中插入恶意SQL代码来破坏或操纵后端数据库。
    预防方法包括使用预编译的SQL语句、对输入进行验证和转义等。
  • 索引是如何工作的?
    索引是一种数据结构,可以快速定位到数据库表中的行,加速查询速度。

设计模式

  • 什么是单例模式?
    单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。
  • 工厂模式和抽象工厂模式有什么区别?
    工厂模式用于创建一个接口的实例,而抽象工厂模式用于创建一系列相关或依赖对象的实例。

网络编程

  • TCP和UDP有什么区别?
    TCP是面向连接的、可靠的传输层协议,而UDP是无连接的、不保证可靠性的协议。
  • HTTP和HTTPS有什么区别?
    HTTP是超文本传输协议,而HTTPS是HTTP的安全版本,通过SSL/TLS进行加密。

其他常见问题

  • 什么是RESTful API?
    RESTful API是一种设计风格,用于网络应用程序之间的交互,使用标准的HTTP方法。
  • 如何处理分布式系统中的一致性问题?
    可以使用分布式锁、事务、最终一致性模型等策略。

Java 开发技术常见问题(二)

  1. HashMap实现原理

    • HashMap基于哈希表的Map接口实现,通过键(Key)的hashCode来计算索引值,将键值对存储在哈希表中。
    • 当发生哈希冲突时,HashMap使用链表或红黑树(Java 8及以上版本)来解决冲突。
  2. ConcurrentHashMap实现原理

    • ConcurrentHashMap允许多个线程并发访问,通过分段锁(Segment)来提高并发性能。
    • 它内部由多个Segment组成,每个Segment是一个类似HashMap的结构,可以独立进行扩容和同步。
  3. 红黑树

    • 红黑树是一种自平衡的二叉查找树,每个节点要么是红色,要么是黑色。
    • 它通过颜色和特定的规则来保持树的平衡,查找、插入和删除操作的时间复杂度为O(log n)。
  4. 为什么允许局部不平衡

    • 局部不平衡允许红黑树在插入和删除操作中快速重新平衡,从而保持整体的平衡性。
  5. TCP和UDP的区别

    • TCP是面向连接的、可靠的传输层协议,提供数据包的顺序传输、错误检测和重传机制。
    • UDP是无连接的、不可靠的传输层协议,它提供更快的数据传输速度,但不保证数据包的顺序、完整性或可靠性。
  6. 为什么可靠和不可靠

    • TCP可靠是因为它能确保数据包的顺序和完整性,适用于需要可靠性的应用,如网页浏览。
    • UDP不可靠是因为它不保证数据包的顺序和完整性,适用于对实时性要求高的应用,如视频会议。
  7. 一次HTTP请求的全过程

    • 包括DNS解析,将域名转换为IP地址。
    • 通过IP地址定位主机,建立TCP连接(三次握手)。
    • 发送HTTP请求,服务器处理请求并返回响应。
    • 客户端接收响应,关闭TCP连接。
  8. TCP三次握手

    • 第一次握手:客户端发送SYN到服务器,请求建立连接。
    • 第二次握手:服务器收到SYN后,回复SYN-ACK,表示同意建立连接。
    • 第三次握手:客户端收到SYN-ACK后,发送ACK,完成连接建立。
  9. MySQL事务

    • 事务是一系列操作,要么全部成功,要么全部失败。
    • 四大特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
    • 四大隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。
  10. ConcurrentHashMap和Hashtable的区别

    • ConcurrentHashMap支持高并发,使用分段锁提高性能。
    • Hashtable是同步的,性能较低,且不允许空键和空值。
  11. Spring IOC和AOP

    • IOC(控制反转):Spring容器负责管理对象的创建和依赖注入,降低组件间的耦合。
    • AOP(面向切面编程):允许将横切关注点(如日志、事务)与业务逻辑分离。
    • 优点:IOC简化了对象创建和管理,AOP提高了代码的模块化和可维护性。
  12. 常用的线程池

    • 固定大小的线程池(FixedThreadPool)。
    • 缓存线程池(CachedThreadPool)。
    • 单线程线程池(SingleThreadExecutor)。
    • 调度线程池(ScheduledThreadPool)。
  13. Runnable和Thread创建线程

    • Runnable是任务接口,可以被Thread执行。
    • Thread是线程类,可以执行Runnable任务。
    • 使用Runnable可以更好地实现多线程,因为它允许多个线程共享同一个任务。
  14. Callable和Runnable的区别

    • Callable可以返回值和抛出异常,而Runnable不能。
    • Callable通常与ExecutorService一起使用。
  15. 线程方法中的异常处理

    • 线程方法中的异常需要在方法内部捕获和处理。
    • 主线程通常无法捕获到子线程中的异常,除非通过特定的机制(如Future)。
  16. synchronized和锁的区别

    • synchronized是Java的关键字,用于同步方法或代码块。
    • 锁(如ReentrantLock)是JDK提供的锁接口,提供了更多的灵活性和高级功能。
    • synchronized使用简单,但功能有限;ReentrantLock功能强大,但使用复杂。
  17. JVM的对象分配

    • 对象通常在堆(Heap)内存中分配。
    • 类加载器在加载类时,Class对象会被分配到方法区(在Java 8之前)或元空间(Java 8及之后)。

Java 开发技术常见问题(三)

  1. 常用的设计模式介绍

    • 单例模式:确保一个类只有一个实例,并提供一个全局访问点。
    • 装饰者模式:动态地给一个对象添加额外的职责,而不改变其结构。
  2. Java会出现内存溢出吗?什么情况下会出现?

    • 是的,Java也会出现内存溢出,特别是当JVM堆内存被占满且无法回收时。
  3. 双亲委派模型

    • 双亲委派模型是Java类加载机制,确保Java核心库的安全性和一致性。
    • 它要求除了顶层的启动类加载器外,其余的类加载器都应先委托其父加载器试图加载某个类。
  4. 对象什么情况下进入老年代?

    • 对象在新生代的Eden区和Survivor区之间经过多次GC后,如果仍然存活,会被晋升到老年代。
  5. 快速排序过程

    • 选择一个基准值(pivot)。
    • 将数组分为两部分,一部分包含比基准值小的元素,另一部分包含比基准值大的元素。
    • 递归地在这两部分上重复这个过程。
  6. AOP实现原理:动态代理

    • 动态代理可以在运行时动态地创建代理对象,拦截方法调用,并在方法调用前后添加额外的行为。
  7. BIO、NIO、AIO

    • BIO(阻塞I/O):每个连接都需要一个单独的线程处理,适合连接数较少的场景。
    • NIO(非阻塞I/O):通过缓冲区和通道的概念,可以处理更多的并发连接,且线程数不变。
    • AIO(异步I/O):进一步抽象,允许应用程序发出I/O请求而不必等待I/O操作完成。
  8. 消息中间件有哪些?他们之间的优劣势?

    • 常见的消息中间件有Kafka、RabbitMQ、ActiveMQ等。
    • Kafka适合高吞吐量的场景,RabbitMQ支持多种消息协议,ActiveMQ是JMS规范的实现。
  9. Redis,持久化框架

    • Redis支持RDB和AOF两种持久化方式。
    • RDB是快照方式,AOF是日志方式,记录每次写操作。
  10. 栈和队列

    • :后进先出(LIFO)的数据结构。
    • 队列:先进先出(FIFO)的数据结构。
  11. 垃圾回收算法

    • 标记-清除:标记需要回收的对象,然后清除它们。
    • 复制算法:将内存分为两个区域,复制存活的对象到另一个区域,然后清除原区域。
    • 标记-整理:在标记-清除的基础上,移动存活的对象,减少内存碎片。
  12. MySQL的索引

    • 索引用于快速查找、排序和分组数据。
    • 常见的索引类型有B树索引、哈希索引、全文索引等。
  13. Tomcat 类加载器

    • Tomcat使用类加载器隔离每个Web应用,确保应用之间的独立性。
  14. OOM内存泄漏,什么情况下会出现,如何排查

    • OOM(Out of Memory)当JVM堆内存耗尽时出现。
    • 内存泄漏通常由于长时间持有对象引用导致。
    • 排查内存泄漏可以使用工具如jmap、VisualVM等,分析堆转储文件。

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

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

相关文章

springcloud-服务拆分与远程调用

一 微服务 1.1简单了解 SpringCloud SpringCloud是目前国内使用最广泛的微服务框架。官网地址:Spring Cloud。 SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验&#xff1a…

FME学习之旅---day28

我们付出一些成本,时间的或者其他,最终总能收获一些什么。 教程:CSV 入门 逗号分隔值 (CSV) 是一种以 ASCII 文件格式存储结构化信息的方法,从而使其成为一个非常简单的数据库。这使其成为电子表格、数据…

Aws CodeCommit代码仓储库

1 创建IAM用户 IAM创建admin用户,增加AWSCodeCommitFullAccess权限 2 创建存储库 CodePipeline -> CodeCommit -> 存储库 创建存储库 3 SSH 1) window环境 3.1.1 上载SSH公有秘钥 生成SSH秘钥ID 3.1.2 编辑本地 ~/.ssh 目录中名为“config”的 SSH 配置文…

Java | Leetcode Java题解之第104题二叉树的最大深度

题目&#xff1a; 题解&#xff1a; class Solution {public int maxDepth(TreeNode root) {if (root null) {return 0;}Queue<TreeNode> queue new LinkedList<TreeNode>();queue.offer(root);int ans 0;while (!queue.isEmpty()) {int size queue.size();wh…

[xx点评完结]——白马点评完整代码+rabbitmq实现异步下单+资料,免费

项目所有功能已测&#xff0c;均可以跑通&#xff0c;Jmeter和RabbitMQ也都测了。 项目源码:dianpinghui: 仿黑马点评项目 资料: https://pan.baidu.com/s/1kTCn9PxgeIey90WgM4KRqA?pwdn66b 对佬有帮助可以给个star哈&#xff0c;感谢&#x1f339;&#x1f339;&#x1f3…

rk3568_semaphore

文章目录 前言1 什么是信号量1.1 信号量API函数2、信号量实验2.1 实验目的2.2函数源码2.3 运行结果图前言 本文记录rk3568开发板的信号量实验 1 什么是信号量 信号量是同步的一种方式,常常用于控制对共享资源的访问。 举个例子:停车场的停车位有100个,这100个停车位就是共…

了解区块链基础设施,共同构建安全且强大的Sui网络

区块链基础设施的范畴很广&#xff0c;但其核心是那些直接与网络互动的计算机。这些实体通常被称为节点&#xff0c;分为不同的类型&#xff0c;例如维护完整区块链副本的全节点&#xff0c;以及作为共识决定者的验证节点。除了这两种类型之外&#xff0c;还有其他类型的节点&a…

DataGear 制作服务端分页的数据可视化看板

DataGear 2.3.0 版本新增了附件图表数据集特性&#xff08;在新建图表时将关联的数据集设置为 附件 &#xff0c;具体参考官网文档定义图表章节&#xff09;&#xff0c;在制作看板时&#xff0c;可以基于此特性&#xff0c;结合dg-chart-listener&#xff0c;利用服务端数据扩…

服务器数据恢复—RAID5阵列崩溃如何恢复上层OA和oracle数据库的数据?

服务器数据恢复环境&故障&#xff1a; 某公司的一台服务器中的raid5磁盘阵列有两块磁盘先后掉线&#xff0c;服务器崩溃。故障服务器的操作系统为linux&#xff0c;操作系统部署了oa&#xff0c;数据库为oracle。oracle数据库已经不再对该oa系统提供后续支持&#xff0c;用…

LabVIEW高低温试验箱控制系统

要实现LabVIEW高低温试验箱控制系统&#xff0c;需要进行硬件配置、软件设计和系统集成&#xff0c;确保LabVIEW能够有效地监控和控制试验箱的温度。以下是详细说明&#xff1a; 硬件配置 选择合适的试验箱&#xff1a; 确定高低温试验箱的型号和品牌。 确认试验箱是否支持外…

springboot项目部署到linux服务器

springboot后端 修改前 修改后 vue前端 修改前 将地址中的 localhost改为 ip 重新生成war包 war上传到linux的tomcat的webapps下 其他环境配置和macOS大差不差 Tomcat安装使用与部署Web项目的三种方法_tomcat部署web项目-CSDN博客

【C++】list的使用方法和模拟实现

❤️欢迎来到我的博客❤️ 前言 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后…

告别裸奔,聊聊主流消息队列的认证和鉴权!

大家好&#xff0c;我是君哥。 我们在使用消息队列时&#xff0c;经常关注的是消息队列收发消息的功能。但好多时候需要对客户端有一定的限制&#xff0c;比如只有持有令牌的客户端才能访问集权&#xff0c;不允许 Producer 发送消息到某一个 Topic&#xff0c;或者某一个 Top…

【机器学习300问】103、简单的经典卷积神经网络结构设计成什么样?以LeNet-5为例说明。

一个简单的经典CNN网络结构由&#xff1a;输入层、卷积层、池化层、全连接层和输出层&#xff0c;这五种神经网络层结构组成。它最最经典的实例是LeNet-5&#xff0c;它最早被设计用于手写数字识别任务&#xff0c;包含两个卷积层、两个池化层、几个全连接层&#xff0c;以及最…

软件功能测试的类型和流程分享

在现代社会&#xff0c;软件已经成为人们生活中不可或缺的一部分&#xff0c;而在软件的开发过程中&#xff0c;功能测试是不可或缺的环节。软件功能测试指的是对软件系统的功能进行检查和验证&#xff0c;以确保软件在各种情况下能够正常运行&#xff0c;并且能够按照用户需求…

《Java数据结构》--单链表详解

一.单链表的概念 1.概念 单链表是一种物理存储结构是非连续&#xff0c;非线性的但是在逻辑结构上是连续且线性的&#xff0c;链表是通过一个个结点来实现的&#xff0c;使每个相邻结点之间存在一定关系来将所有结点串起来&#xff0c;在物理存储上像是一条链子。 2.链表的原…

【数据分析】Numpy和Pandas库基本用法及实例--基于Japyter notebook实现

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 承接上篇的博客 数据分析—技术栈和开发环境搭…

工作纪实50-Idea下载项目乱码

下载了公司的一份项目代码&#xff0c;发现是gbk格式的&#xff0c;但是我的日常习惯又是utf-8&#xff0c;下载项目以后全是乱码&#xff0c;一脸懵 借用网友的一张图&#xff0c;如果是一个一个文件这么搞&#xff0c;真的是费劲&#xff0c;好几百个文件&#xff01; 步骤…

React@16.x(11)ref

目录 1&#xff0c;介绍1.1&#xff0c;得到的结果 2&#xff0c;参数类型2.1&#xff0c;字符串&#xff08;不再推荐&#xff09;2.2&#xff0c;对象2.3&#xff0c;函数函数调用时机 3&#xff0c;注意点 1&#xff0c;介绍 reference 引用。和 vue 中的 refs 类似&#x…

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…