常见java知识点1

目录

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的区别

HashMap和Hashtable是Java中常用的两种集合类,它们都实现了Map接口,用于存储键值对。然而,它们之间存在一些区别,如下所示:
 1. 线程安全性:Hashtable是线程安全的,而HashMap不是。Hashtable的方法是同步的,可以在多线程环境下安全使用,但会降低性能。HashMap在多线程环境下需要外部同步控制,否则可能导致不可预期的结果。
 2. null值:HashMap允许键和值都为null,而Hashtable不允许。如果在Hashtable中尝试存储null键或值,将会抛出NullPointerException。
 3. 继承关系:Hashtable是Dictionary类的子类,而HashMap是AbstractMap类的子类。由于Dictionary类是过时的,不建议使用Hashtable。
 4. 迭代器:Hashtable的迭代器是通过Enumeration实现的,而HashMap的迭代器是通过Iterator实现的。Iterator提供了更强大和灵活的迭代方式。
 5. 性能:由于Hashtable是线程安全的,它的性能通常比HashMap要低。在单线程环境下,HashMap的性能更好。
 综上所述,如果在单线程环境下使用,且允许键或值为null,建议使用HashMap。如果在多线程环境下使用,或不允许键或值为null,可以考虑使用Hashtable。


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.mzph.cn/news/4712.shtml

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

相关文章

小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述 Ansible是一种开源的自动化工具,用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法,可以通过SSH协议远程管理和配置多台计算机。 Ansible的主要特点包括: 1、简单易用:设计简单&a…

LCD—STM32液晶显示(1.显示器简介及LCD显示原理)(6000字详细介绍)

目录 显示器简介 液晶显示器 液晶 像素 液晶屏缺点 LED显示器 OLED显示器 显示器的基本参数 STM32板载液晶控制原理(不带微控制器) 液晶控制原理 控制信号线(不带液晶控制器) 液晶数据传输时序 显存 总结 3.2寸液晶屏介绍(搭载…

基于单片机的智能鞋柜的设计与实现

功能介绍 以51单片机作为主控系统;通过DHT11温湿度采集;通过按键设置逻辑处理;通过LED紫外线消毒;通过继电器控制风扇进行换气除湿;通过继电器控制加热片进行加热;整个电路以5v供电; 电路图 PCB 源代码 #i…

cocosCreator 3.6以上接入腾迅Bugly 捕捉JS错误 Android

cocosCreator3.6以上接入Bugly上报其实很简单,不需要网上那么多弯弯绕,三须三步走。 1. 按照官网方式接入android的bugly 2. android端写一个Bugly上报管理类 3. 修改你工程目录下native\engine\common\Classes\目录下的Game.h, Game.cpp两个文件&…

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解 1.GPT 模型 1.1 GPT 模型简介 在自然语言处理问题中,可从互联网上下载大量无标注数据,而针对具体问题的有标注数据却非常少&#x…

【JavaEE】Tomcat的安装和使用、创建Mevan项目使用Servlet写一个程序

目录 前言 一、Tomcat的下载和安装 二、写一个简单的Servlet项目 1、创建一个Maven项目 2、引入依赖 3、创建目录 4、编写Servlet代码。 5、打包程序 6、将程序部署到Tomcat上 7、验证程序运行结果 三、在IDEA上安装Smart Tomcat插件 四、Servlet中的一些常见错误 …

基于timegan扩增技术,进行多维度数据扩增(Python编程,数据集为瓦斯浓度气体数据集)

1.数据集介绍 瓦斯是被预测气体,其它列为特征列,原始数据一共有472行数据,因为原始数据比较少,所以要对原始数据(总共8列数据)进行扩增。 开始数据截图 截止数据截图 2. 文件夹介绍 lstm.py是对未扩增的数据进行训练…

ChatGLM-6B+LangChain实战

目标:原始使用ChatGLM-6B可接受的文字长度有限,打算结合LangChain实现长文本生成摘要. 方法: step1:自定义一个GLM继承LangChain中的langchain.llms.base.LLM,load自己的模型. step2:使用LangChain的mapred…

electron globalShortcut 快捷键与系统全局快捷键冲突

用 electron 开发自己的接口测试工具(Post Tools),在设置了 globalShortcut 快捷键后,发现应用中的快捷键与系统全局快捷键冲突了,导致系统快捷键不可正常使用。 快捷键配置 export function initGlobalShortcut(main…

MySQL数据库(一)

目录 一、MySQL安装与配置 1.1什么是数据库 1.2数据库的分类 二、MySQL服务器安装 2.1Windows绿色安装 2.2配置环境 一、MySQL安装与配置 1.1什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问…

typescript manual

这里写目录标题 throw new Error在浏览器中调试Json定义类型定义数组 functionNamed functionanonymous function Axios经典片段 错误及解决ref valuebecause it is a constantAPI 和 客户端定义的数据结构不一样ServerClient throw new Error throw new Error(“Get data err…

leetcode 1218. Longest Arithmetic Subsequence of Given Difference(给定差值的最长算术子序列)

给数组arr和一个差值difference, 不打乱arr中数字的顺序,抽取最长的子序列,使序列中每相邻两个元素的差值为difference. 求满足条件的最长子序列的长度。 思路: DP 因为差值difference是固定的,每抽取一个元素,它前…

【lesson2】Linux基本指令1

文章目录 touch创建文件更新文件最新修改时间 lslsls -lls -als -i pwd...cdcd 路径法一:cd 绝对路径法二:cd 相对路径 cd - stattreemkdirmkdir创建一个目录mkdir -p创建一串路径目录 ~/rmdirrmrmrm -frm -rrm -i mancpcpcp -r mvnaocatcatcat -n ta…

信息泄露与大数据:隐私安全的挑战与对策

随着大数据时代的到来,我们生活的方方面面都与数据息息相关。然而,随之而来的信息泄露问题也日益严重,给个人隐私和数据安全带来了巨大挑战。本文将围绕信息泄露与大数据展开讨论,探讨其中的问题、原因以及如何应对。 山海鲸大屏 …

16 | 视图:如何实现服务和数据在微服务各层的协作?

目录 服务的协作 1. 服务的类型 2. 服务的调用 微服务内跨层 微服务之间的服务调用 领域事件驱动 3. 服务的封装与组合 基础层 领域层 应用层 用户接口层 4. 两种分层架构的服务依赖关系 松散分层架构的服务依赖 严格分层架构的服务依赖 数据对象视图 基础层 领…

【Linux】分布式存储系统 Ceph

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 分布式存储系统 Ceph Ceph 概述1、Ceph 简介2、存储基础3、Ceph 优势4、Ceph 架构4、Ceph 核心组件5、OSD 存储后端6、Ceph 数据的存储过程7、Ceph 版本发行生命周期 Ceph 集…

向量检索增强chatglm生成

背景: 基于chatglm构建agnet:chatglm实现Agent控制 - 知乎 前面一篇文章已经介绍了如何去搭建LLM Agent控制系统,也简单介绍了如何去构建Toolset和构建Action。但是在上篇文章中Toolset其实是基于搜索api构建的,从这篇文章开始后…

svn迁移到git实际操作

1.到svn项目目录右键选中gitbash打开窗口&#xff0c;执行获取用户并映射成git样式账号命令如下: svn log -q | awk -F | /^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" "$2" <"$2"163.cn>…

【原创】实现ChatGPT中Transformer模型之Encoder-Decoder

作者&#xff1a;黑夜路人 时间&#xff1a;2023年7月 Transformer Block &#xff08;通用块&#xff09;实现 看以上整个链路图&#xff0c;其实我们可以很清晰看到这心其实在Encoder环节里面主要是有几个大环节&#xff0c;每一层主要的核心作用如下&#xff1a; Multi-he…

中小企业部署MES管理系统需要考虑哪些问题

随着制造业的快速发展&#xff0c;越来越多的中小企业开始意识到数字化管理的重要性。为了提高生产效率、降低成本、提升品质及满足客户需求&#xff0c;部署MES生产管理系统成为了中小企业实现数字化转型的关键一步。然而&#xff0c;在部署MES管理系统时&#xff0c;中小企业…