常见java知识点1

目录

[1 什么是Spring框架?Spring框架有哪些主要模块?](#1 什么是Spring框架?Spring框架有哪些主要模块?)

[2 使用Spring框架有什么好处?](#2 使用Spring框架有什么好处?)

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

[4 Arraylist 和 Linkedlist 的区别](#4 Arraylist 和 Linkedlist 的区别)

[5 HashMap和Hashtable的区别](#5 HashMap和Hashtable的区别)

[6 Java中常见的 io 流?](#6 Java中常见的 io 流?)

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

[8 深拷贝和浅拷贝的区别](#8 深拷贝和浅拷贝的区别)

[9 堆栈是什么以及他们的区别](#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开发中常用的核心包,涵盖了各种常见的功能和需求。

除此之外还有:

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

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

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

  4. 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对象,栈用于存储局部变量和方法调用栈。堆中的对象可以被多个线程共享,栈中的数据只能由所在线程访问。

相关推荐
湫ccc39 分钟前
《Python基础》之字符串格式化输出
开发语言·python
弗拉唐39 分钟前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi771 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
mqiqe1 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin1 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
少说多做3432 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀2 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
蓝黑20202 小时前
IntelliJ IDEA常用快捷键
java·ide·intellij-idea