常见java知识点1

news2024/11/26 4:37:27

目录

1    什么是Spring框架?Spring框架有哪些主要模块?

2    使用Spring框架有什么好处?

3    Java常用的包(列举六个)

4    Arraylist 和 Linkedlist 的区别

5    HashMap和Hashtable的区别

6    Java中常见的 io 流?

7    说一下常见的几个线程池?(Java里面有4个线程池)

8    深拷贝和浅拷贝的区别

9    堆栈是什么以及他们的区别


1    什么是Spring框架?Spring框架有哪些主要模块?

Spring框架是一个开源的Java应用程序开发框架,旨在简化企业级应用程序的开发。它提供了一种轻量级的方式来开发Java应用程序,通过依赖注入和面向切面编程等特性,提高了应用程序的可测试性、可扩展性和松耦合性。


 Spring框架包含以下主要模块: 

核心容器(Spring core), Spring上下文(Spring context),Spring面向切面编程(Spring AOP),Spring DAO模块,Spring ORM模块,Spring Web模块,Spring MVC框架(Spring WebMVC)。
 1. Spring Core:提供了框架的基本功能,包括依赖注入(Dependency Injection)和控制反转(Inversion of Control)等。
 2. Spring AOP:提供了面向切面编程(Aspect-Oriented Programming)的支持,可以实现横切关注点的模块化。
 3. Spring MVC:提供了一个基于模型-视图-控制器(Model-View-Controller)的Web应用程序开发框架,用于构建Web应用程序。

 除了以上主要模块外,Spring框架还提供了许多其他模块和扩展,用于集成其他技术和框架,如Spring Batch、Spring Integration、Spring Cloud等。


2    使用Spring框架有什么好处?

使用Spring框架有以下好处:
 1. 轻量级:Spring框架是一个轻量级的框架,不需要依赖庞大的第三方库,可以快速启动和运行。
 2. 松耦合:Spring框架通过依赖注入和控制反转的特性,降低了组件之间的耦合性,提高了代码的可维护性和可测试性。
 3. 面向切面编程:Spring框架提供了面向切面编程(AOP)的支持,可以将与业务逻辑无关的横切关注点(如日志、事务管理等)模块化,提高了代码的可重用性和可维护性。
 4. 容器管理:Spring框架提供了一个容器,负责管理应用程序中的对象的生命周期和依赖关系,简化了对象的创建和管理过程。
 5. 集成其他框架和技术:Spring框架可以与许多其他框架和技术(如Hibernate、MyBatis、JPA、RESTful服务等)无缝集成,提供了更强大的功能和灵活性。
 6. 提供丰富的功能模块:Spring框架提供了许多功能模块,如数据访问、事务管理、安全性、缓存等,可以快速开发各种类型的应用程序。
 7. 社区支持和活跃度高:Spring框架拥有庞大的开发者社区,提供了丰富的文档、教程和示例代码,可以获得广泛的支持和帮助。
 总之,使用Spring框架可以提高开发效率、降低开发成本、提高应用程序的可维护性和可扩展性,是Java应用程序开发的首选框架之一。


3    Java常用的包(列举六个)

以下是Java中常用的六个包:
1. java.lang:包含Java语言的核心类,如基本数据类型的包装类,异常类,线程类等。
2. java.util:提供了常用的工具类,如集合类,日期和时间类,随机数生成类等。
3. java.io:提供了输入输出相关的类和接口,用于文件和流的读写操作。
4. java.net:提供了网络编程相关的类和接口,用于实现网络通信和传输数据。
5. java.sql:提供了与数据库交互的类和接口,用于数据库的连接、查询和更新等操作。
6. java.awt:提供了图形用户界面(GUI)相关的类和接口,用于创建和管理窗口、组件等图形界面元素。
这些包是Java开发中常用的核心包,涵盖了各种常见的功能和需求。

除此之外还有:

7. javax.servlet:提供了Servlet相关的类和接口,用于Web应用程序的开发。

8. javax.swing:提供了更加丰富和强大的GUI组件和工具,用于创建更加复杂的图形界面。

9. org.junit:提供了JUnit测试框架,用于编写和运行Java单元测试。

10. org.apache.commons:提供了常用的工具类和组件,如字符串处理、文件操作、加密解密等。


4    Arraylist 和 Linkedlist 的区别

ArrayList和LinkedList是Java集合框架中常用的两种List实现类,它们有以下区别:
 1. 内部数据结构:ArrayList是基于动态数组实现的,而LinkedList是基于双向链表实现的。
 2. 插入和删除操作:在ArrayList中,插入和删除元素需要移动其他元素,因为它是基于数组实现的,需要保持元素的连续存储;而LinkedList在插入和删除元素时,只需要修改指针的指向,效率更高。
 3. 随机访问效率:由于ArrayList是基于数组实现的,可以通过索引直接访问元素,因此随机访问的效率较高;而LinkedList需要从头或尾开始遍历链表,因此随机访问的效率较低。
 4. 内存占用:ArrayList在内存中连续存储元素,因此占用的内存空间相对较小;而LinkedList需要额外的指针来维护链表结构,因此占用的内存空间相对较大。
 5. 迭代性能:由于LinkedList是双向链表,可以从头或尾开始遍历,因此在迭代操作中,LinkedList的性能较好;而ArrayList需要通过索引遍历,效率较低。
 综上所述,如果需要频繁进行插入和删除操作,或者需要在集合的中间位置进行插入和删除操作,可以选择LinkedList;如果需要频繁进行随机访问和遍历操作,可以选择ArrayList。


5    HashMap和Hashtable的区别

ArrayList和LinkedList是Java集合框架中常用的两种List实现类,它们有以下区别:
 1. 内部数据结构:ArrayList是基于动态数组实现的,而LinkedList是基于双向链表实现的。
 2. 插入和删除操作:在ArrayList中,插入和删除元素需要移动其他元素,因为它是基于数组实现的,需要保持元素的连续存储;而LinkedList在插入和删除元素时,只需要修改指针的指向,效率更高。
 3. 随机访问效率:由于ArrayList是基于数组实现的,可以通过索引直接访问元素,因此随机访问的效率较高;而LinkedList需要从头或尾开始遍历链表,因此随机访问的效率较低。
 4. 内存占用:ArrayList在内存中连续存储元素,因此占用的内存空间相对较小;而LinkedList需要额外的指针来维护链表结构,因此占用的内存空间相对较大。
 5. 迭代性能:由于LinkedList是双向链表,可以从头或尾开始遍历,因此在迭代操作中,LinkedList的性能较好;而ArrayList需要通过索引遍历,效率较低。
 综上所述,如果需要频繁进行插入和删除操作,或者需要在集合的中间位置进行插入和删除操作,可以选择LinkedList;如果需要频繁进行随机访问和遍历操作,可以选择ArrayList。


6    Java中常见的 io 流?

Java中常见的IO流主要有以下四种:
1. 字节流(InputStream和OutputStream):用于读写字节数据,如读写图片、音频、视频等二进制文件。
2. 字符流(Reader和Writer):用于读写字符数据,如读写文本文件等。
3. 缓冲流(BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter):在字节流和字符流的基础上,提供了缓冲区,可以减少IO操作的次数,从而提高读写效率。
4. 对象流(ObjectInputStream和ObjectOutputStream):用于读写Java对象,可以将一个对象以二进制形式写入文件或网络流中,也可以从文件或网络流中读取二进制数据并转换成Java对象。
 这些IO流在Java开发中非常常见,可以用来处理各种输入输出操作,如读写文件、网络通信等。


7    说一下常见的几个线程池?(Java里面有4个线程池)

Java中常见的四个线程池是:
1. FixedThreadPool:固定大小线程池,线程数量固定,适用于执行长期的任务,可控制线程的最大并发数。当线程池中的线程都处于活动状态时,新任务会进入等待队列中等待执行。
2. CachedThreadPool:缓存线程池,线程数量不固定,根据任务数量动态调整线程数量。适用于执行大量的短期任务,当线程池中的线程空闲时,会重用空闲线程执行新任务,没有空闲线程时,会创建新线程。
3. ScheduledThreadPool:定时任务线程池,适用于需要定时执行任务的场景。可以指定任务的延迟时间和执行周期,线程数量固定。
4. SingleThreadPool:单线程线程池,只有一个工作线程的线程池,适用于需要保证任务按照顺序执行的场景。所有任务按照FIFO的顺序执行,保证了任务的顺序性。
 这些线程池都是通过ThreadPoolExecutor类实现的,可以通过Executors工具类来创建这些线程池。线程池的使用可以避免频繁创建和销毁线程的开销,提高了线程的复用和执行效率,同时还可以控制线程的并发数,避免资源过度占用。


8    深拷贝和浅拷贝的区别

深拷贝和浅拷贝是Java中常用的两种对象拷贝方式,它们的主要区别在于:
1. 浅拷贝只是拷贝了对象的引用,两个对象指向同一个内存地址,修改其中一个对象会影响另一个对象;而深拷贝会创建一个新的对象,拷贝对象的所有属性值,两个对象互不影响。
2. 浅拷贝只会拷贝对象本身,不会拷贝对象引用的其他对象,即如果对象中包含其他对象的引用,那么拷贝后的对象和原对象仍然共享这些引用;而深拷贝会递归拷贝对象的所有属性,包括引用的其他对象,因此拷贝后的对象和原对象完全独立。
3. 浅拷贝的效率比深拷贝高,因为它只需要拷贝对象本身,不需要递归拷贝对象的所有属性;而深拷贝需要递归拷贝对象的所有属性,效率较低。
 在Java中,可以通过实现Cloneable接口和重写clone()方法来实现对象的拷贝,Object类中的clone()方法实现的是浅拷贝,如果需要实现深拷贝,可以通过序列化和反序列化实现,或者手动递归拷贝对象的所有属性。


9    堆栈是什么以及他们的区别

堆和栈都是计算机内存中的一种数据结构,它们的主要区别在于:
1. 堆是动态分配的内存区域,用于存储Java对象,由JVM自动管理,不需要手动分配和释放。堆中的对象可以被多个线程共享,因此需要考虑线程安全的问题。堆中的对象大小不固定,可以动态增加或缩小。
2. 栈是一种线性数据结构,用于存储局部变量和方法调用栈,由JVM自动分配和释放,存储的数据大小固定。栈中的数据只能由所在线程访问,因此不存在线程安全的问题。栈中的数据遵循LIFO(Last In First Out)的原则,也就是最后进栈的数据最先出栈。
 在Java中,堆和栈的使用方式也有所不同。Java中的基本数据类型和对象引用都存储在栈中,而对象本身存储在堆中。当创建一个对象时,JVM会在堆中分配一块内存存储对象,并在栈中创建一个对象引用,指向堆中的对象。当对象不再被引用时,JVM会自动回收堆中的内存空间,释放内存资源。
 总之,堆和栈都是计算机内存中的一种数据结构,用于存储不同类型的数据。堆用于存储Java对象,栈用于存储局部变量和方法调用栈。堆中的对象可以被多个线程共享,栈中的数据只能由所在线程访问。

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

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

相关文章

vue-sticky简单使用(实现吸顶效果)

参考链接 vue-sticky:在页面滚动时将指定元素固定在窗口上的某个位置 生效条件如下: 1、父元素不能设置 overflow:hidden 或者 overflow:auto 属性 2、至少指定 top 、bottom 、left 、right 4 个值中的一个,否则只会处于相对定位 3、父元素…

OpenCVForUnity(六)图像的对比度和亮度

文章目录 前言公式讲解Unity嵌套循环实现使用convertTo实现亮度和对比度调整:伽马矫正 前言 图片处理中这也是非常常用的功能,下面我们一起来学习一下如何在OpenCVForUnity中修改图像的对比度亮度 图像处理中的常见算子可以将一个或多个输入图像转换为输出图像。这些变换包括点…

tdengine超级表创建

tdengine有官网文档,这里就把实际使用的SQL贴出来吧。 创建超级表: CREATE STABLE superTable(time TIMESTAMP, val double) TAGS (point varchar(100));执行SQL后会创建一个叫superTable的超级表。 建完超级表后再创建子表,SQL如下&#…

8、PHP访问权限配置与报错处理:You don‘t have permission to access this resource.

这是由于阿帕奇服务器的权限设置导致的。 解决办法: 1、由于我们之前已经设置了虚拟主机,我们在WAMPserver中,找到添加虚拟主机的配置文件的路径 2、打开这个文件,修改相应的虚拟主机的访问权限,Require后面改为all …

Cesium Terrain Builder (CTB) 简单使用_地形切片

Cesium Terrain Builder (CTB) 简单使用_地形切片 目录 Cesium Terrain Builder (CTB) 简单使用_地形切片 官网地址: winr(cmd)打开命令提示符工具运行: Create a GDAL Virtual Dataset (optional) Create Cesium Terrain fi…

CentOS系统下Docker安装部署Strapi

Nodejs 16 安装 移除旧版本的 node yum remove -y nodejs npm使用以下命令将存储库添加到系统 curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -配置存储库之后可以安装 yum install -y nodejs查看版本 node -v下载 yarn 包管理 curl -sL https://dl.yar…

数字化时代,智能文件工具让办公升级

无论是在办公室还是在学校,文件管理是我们日常工作中不可或缺的一环。传统的文件整理方式可能需要花费大量的时间和精力,而且常常容易出现混乱和遗漏。然而,随着科技的不断进步,我们现在有幸生活在一个数字化时代,因此…

ELK(elasticsearch+logstash+kibana+beats)

什么是ELK Elasticsearch:Elasticsearch(以下简称ES) 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 ES是 Elastic Stack 的核心,采用集中式数据存储,可以通过机器学习来…

ylb-接口2首页产品数据和接口3产品列表

总览: 1、service处理(分页查询) 在api模块下service包,创建一个产品接口ProductService:(目前方法为分页查询queryByTypeLimit(Integer pType,Integer pageNo,Integer pageSize)) package…

如何破解中小企业数字化转型难点?建议来了!

打开任何一个搜索引擎,只要输入“中小企业数字化转型”,关于痛点、难处的文章就会铺面而来,难在哪里,其实很好解答,关键在于,如何解决这一个个难处。 PS:给大家整理了一份完整版的《中小企业如…

物理层 ———— 奈氏准则 香农定理

1. 失真的现象----码间串扰 2.奈氏准则 eg: 3.香农定理 eg: 3.两个准则的比较

excel表格设置下拉选项

excel表格设置下拉选项 最后保存,即可设置完成。

RAM Failed to establish a new connection: [Errno 11001] getaddrinfo failed

在跑RAM(​Recognize Anything Model​)的时候报了一个错: Failed to establish a new connection: [Errno 11001] getaddrinfo failed ① 没有帮助我解决,对大家可能有用: 查到别人的解决方案是: 开放C:\Windows\System32\drivers\etc\hos…

和chatgpt学架构02-环境搭建

目录 1 安装vs code2 vs code功能介绍3 安装nodejs4 安装vue5 在vs code打开工程总结 我们在上一篇 技术选型 里咨询了chatgpt前后端的框架选择和数据库的选择。有了框架之后就需要选择合适的开发工具了,继续咨询一下chatgpt 我现在选型,前端使用vue&am…

Kubernetes集群故障排查—审计

Kubernetes 审计(Auditing) 功能提供了与安全相关的、按时间顺序排列的记录集, 记录每个用户、使用 Kubernetes API 的应用以及控制面自身引发的活动。 审计功能使得集群管理员能够回答以下问题: 发生了什么?什么时候…

跨文化合作:如何解决海外网红营销中的文化差异?

随着社交媒体的快速发展,海外网红营销已成为许多品牌和企业获取国际市场的有效方式。然而,由于不同国家和地区存在着独特的文化差异,如语言、价值观、习俗等,这也给品牌进行海外网红营销带来了一系列挑战。本文Nox聚星将和大家探讨…

linux主机上面使用kubectl连接 Kubernetes 集群

**kubectl连接Kubernetes集群,应用场景在一台linux主机上面可以使用kubectl命令查看k8s集群信息。 1、首先需要在linux或者debain上安装kubectl命令。 官网安装地址:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux/#install-kubec…

什么是70v转12v芯片?

问:什么是70v转12v芯片? 答:70v转12v芯片是一种电子器件,其功能是将输入电压范围在9v至100v之间的电源转换为稳定的12v输出电压。这种芯片通常被用于充电器、车载电池充电器和电源适配器等设备中。 问:这种芯片的最大…

回归预测 | MATLAB实现基于ELM-Adaboost极限学习机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于ELM-Adaboost极限学习机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于ELM-Adaboost极限学习机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于ELM-Adaboost极限学…

Flink-端到端精确一次(End-To-End Exactly-Once)

1.总结 目的:想要在故障恢复后不丢数据 输入端 保证可以重复发送数据如果是kafka,Flink负责维护offset,不用kafka维护设置kafka的隔离级别为:读已提交flink 开启检查点采用对齐或者不对齐的精确一次输出端 kafka 幂等事务两阶段…