- 博客(47)
- 收藏
- 关注
原创 JDBC和JdbcTemplate详解
JDBC(Java Database Connectivity)是Java提供的一套标准API,用于连接和操作各种关系型数据库。JDBC API涵盖了从加载数据库驱动、建立连接、执行SQL语句、处理结果集,到管理事务和关闭资源等一系列操作。本文将详细介绍JDBC的所有主要API组件、接口和类,以及它们的使用方法和最佳实践。JDBC API:一组Java接口和类,用于与数据库交互。JDBC驱动程序:实现JDBC接口的具体类,用于与特定数据库的通信。数据库。
2024-10-13 16:27:47 695
原创 一文解释IO端口与网络端口
I/O端口是用于计算机与外围设备之间通信的接口。每个I/O端口都对应一个唯一的地址,操作系统和程序通过这些地址与设备通信。网络端口是计算机网络中用于标识不同服务和应用程序的逻辑端口号。它们是TCP/IP协议栈中的一个重要组成部分,用于区分同一台计算机上的不同网络服务。I/O端口和网络端口在计算机系统中起着不同但同样重要的作用。I/O端口用于计算机与硬件设备之间的通信,而网络端口用于计算机网络中的服务和应用程序之间的通信。理解这两种端口的功能和应用有助于更好地管理和优化计算机系统。
2024-06-23 11:44:09 1167
原创 Java JVM 浅析
在90年代初,软件开发面临一个大问题,即不同的操作系统和硬件架构要求开发不同的版本。这不仅增加了开发的复杂性,还大大增加了维护成本。而JVM 的设计即源于一种强烈的需求——实现“一次编写,到处运行”(Write Once, Run Anywhere)的理念。这一理念的核心是希望开发者能编写一次代码,然后在任何支持JVM的平台上无需修改代码就能运行。逻辑上,Java虚拟机(JVM)是一种能够执行Java字节码(Bytecode)的抽象计算机。
2024-05-10 14:40:31 1026
原创 Java内存模型详解
实现方式:方法区是JVM规范中的概念,永久代是HotSpot JVM对方法区的一种实现,而元空间是JDK 8引入的,用本地内存替代了永久代来存储类元数据。存储位置:永久代位于JVM堆内,而元空间使用本地内存。内存限制:永久代的大小是固定的,可以通过参数调整,但如果超出预设值会导致内存溢出;元空间的大小主要受操作系统可用内存限制,提供了更大的灵活性和扩展性。目的:两者都旨在存储类元数据,但元空间的引入是为了解决永久代空间固定可能导致的内存溢出问题,并利用操作系统的内存管理机制来优化内存使用。
2024-05-10 11:52:51 1201
原创 java垃圾收集器详解
Parallel Old收集器是Java虚拟机中一种高效的老年代垃圾收集器,适用于需要高吞吐量和长时间运行的大型应用场景。它利用多线程并行处理垃圾回收任务,能够充分利用多核处理器的计算资源,提高垃圾回收的效率。选择合适的垃圾收集器需要根据应用的需求和特性来进行评估,Parallel Old收集器是在高吞吐量要求下的一个很好的选择。Serial收集器工作在新生代使用标记-复制(Mark-Copy)算法,在老年代使用标记-清除-整理(Mark-Sweep-Compact)算法。标记。
2024-05-08 18:00:42 1232
原创 java注解详解
元注解(Meta-annotation)是作用于其他注解的注解,它们提供了关于注解本身的元数据。在 Java 中,元注解用于定义注解的属性和行为,它们是注解的注解。Java 提供了四个标准的元注解,它们可以被用来注解其他注解,以提供额外的信息给编译器和开发工具,如 JavaDoc 和 IDE。元注解的主要用途是为自定义注解提供元数据,这样编译器和工具可以识别和处理这些注解。元注解是 Java 注解系统的一个重要组成部分,它们使得注解更加灵活和强大,同时也为注解的使用者提供了更多的上下文信息。
2024-05-07 16:31:04 439
转载 java语言必备前置常识合集
在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的(不过,和 C、 C++,Rust,Go 等语言还是有一定差距的),而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
2024-05-07 16:27:44 43
原创 java泛型详解
Java 泛型(Generics)是 Java 语言在 5.0 版本中引入的一个核心概念,用于在编译时提供更严格的类型检查,并支持编写可重用的代码。通过使用泛型,你可以在类、接口和方法中定义类型参数,这些类型参数在实例化类或调用方法时被具体的类型替代。泛型提高了代码的可读性和安全性,同时减少了代码中的冗余。Java 泛型提供了一个框架,让开发者在编写、使用集合类或其他类型的时候,可以提供更严格的类型检查。泛型的引入大大增强了Java语言的表达力和安全性,是现代Java编程的一个基石。
2024-04-28 16:31:14 778
原创 java IO模型详解
阻塞 vs 非阻塞:这两个概念描述了程序在等待 I/O 操作完成时的状态。阻塞意味着等待,非阻塞意味着在等待过程中能够执行其他任务。同步 vs 异步:这两个概念描述了 I/O 操作的执行方式。同步操作中,I/O 请求和处理是连续的过程,而在异步操作中,I/O 请求和处理是分离的。在现代编程实践中,选择适当的 I/O 模型对于优化性能、资源利用和用户体验至关重要。例如,高性能的服务器和应用通常采用异步非阻塞 I/O 模型来处理大量并发的客户端请求。
2024-04-28 16:00:58 1176
原创 计算机的堆、栈你知道吗?堆栈呢?!
这一计算机术语的起源可以追溯到早期的计算机科学和程序设计领域,其命名和功能的设计模仿了现实世界中的一种物理堆叠方式——如同堆放在一起的盘子或书本。在计算机科学中,堆栈是一种特殊的数据结构,它遵循“后进先出”(Last In, First Out,简称LIFO)的原则。这意味着最后被加入到堆栈中的数据项会是第一个被移除的。这种数据结构的特性非常适合处理那些需要临时存储并且按顺序恢复的数据,比如在程序中处理函数调用时的局部变量和返回地址。
2024-04-26 17:11:17 815 1
原创 java浮点数详解
浮点数的二进制表示包括三个部分:符号位(Sign),指数位(Exponent),和尾数位(Mantissa,也称为Significand)。这意味着浮点数的表示是有限的,并不能精确表示所有的小数。浮点数在计算机中的表示和运算常常伴随着精度丢失的风险,这是由于浮点数的存储方式以及浮点运算的本质导致的。这种表示方法允许计算机以固定的格式存储和计算浮点数,虽然可能会带来精度上的限制和计算上的误差。是一个处理浮点数和整数之间转换的重要工具,特别是在需要对浮点数的低级表示进行精确控制和分析的场景中。
2024-04-25 17:55:58 1478 1
原创 java包装类型详解
一、用途在Java语言中,包装类型(Wrapper Classes)是一种特殊的类,它们将八个基本数据类型(byte、short、int、long、float、double、char、boolean)封装在一个类中。这些包装类(如Integer、Long、Double、Character等)在java.lang包中定义,提供了一系列实用的类方法和属性。尽管在很多情况下使用基本数据类型就足够了,包装类型的存在却对Java编程模式和功能的扩展至关重要。下面详细探讨Java为什么需要包装类型。
2024-04-24 15:56:32 1664
原创 Java的对象都存储在堆中?
在Java中,传统上几乎所有的对象实例都是在堆内存(Heap)中分配的。这是因为堆是由Java虚拟机(JVM)在运行时动态分配内存给对象实例的区域,它不仅可以动态地扩展和收缩,还能被所有线程共享。然而,这种方式虽然灵活,但在对象创建和回收时会涉及到较高的开销,特别是涉及到垃圾收集(Garbage Collection, GC)时,可能会影响应用程序的性能。
2024-04-24 15:13:21 491
原创 整数的补码设计&字和字节的区别
一、整数的表示形式在数字计算机系统中,整数通常可以以三种不同的二进制编码方式来表示:原码(sign-magnitude representation)、反码(ones' complement)和补码(two's complement)。这些方法各有其特点,尤其在表示有符号整数(即正负数)时,它们的行为和效率上有所不同。
2024-04-24 15:01:16 779
原创 mysql--分库&分表&分区浅析
一、简介MySQL分库分表是一种常用的数据库架构优化方法,特别适用于数据量大、访问压力高的情况。通过将数据分布到多个数据库或表中,可以提高系统的可扩展性、性能和管理效率。以下是MySQL分库分表的一些关键应用场景和考虑因素。
2024-04-23 17:44:41 811
原创 mysql索引详解
MySQL支持多种类型的索引,每种索引类型都适用于特定的场景和用途。复合索引是数据库设计中的一种强大工具,能够针对多种不同的查询和操作场景提供性能优化。正确设计和使用复合索引可以显著提高应用程序的响应速度和数据库的处理能力。在实际应用中,应结合具体的业务需求和查询特点来合理规划索引策略。聚集索引:适合用作主键,尤其是当频繁进行范围查询和排序操作时。例如,订单数据按日期排序。非聚集索引:适合用在查询经常访问但不经常作为排序或范围查询基础的列。例如,查询中常用的状态字段或分类字段。
2024-04-22 20:52:56 1290
原创 站在设计者的角度看进程与线程
本文将深入探讨关于进程和线程的更多内容,包括:进程的生命周期和实现,有了支持多进程的顺序进程模型为什么还需要线程的概念,经典的线程模型及其各种实现方式的原理和优劣,对于应用程序开发者和操作系统都必不可少的进程与线程通信方式等等问题
2024-04-21 18:31:39 1253
原创 计算机硬件组成详解
时钟信号(Clock Signal)是一种定时信号,通常表现为一个连续的方波,其特点是具有固定的频率和周期。时钟信号的主要功能是提供一个统一的时间参考,以确保系统内各部件的操作能够同步进行。这个信号由系统的振荡器产生,并被分配到CPU、内存、输入输出设备等各个组件。每一次信号的上升沿或下降沿都标志着一个新的时钟周期的开始。每个时钟周期(通常称为“时钟脉冲”)都标志着数据处理和传输可以进行的一个基本时间单位。时钟信号的频率(即每秒中时钟周期的次数)直接影响了计算机的处理速度。
2024-04-20 16:36:11 3670
原创 读屏障、写屏障...计算机的各种屏障你明白吗?
计算机领域有多种关于屏障的同步机制,虽然他们在名称上相似,都是并发编程中用于同步的机制,但它们在目的和应用上有明显的区别...
2024-04-20 16:32:06 1680
原创 避免上下文切换--Linux原子函数
在现代操作系统中,原子函数是一类特殊的函数,它们能够保证在并发环境中执行的操作是不可分割的。这意味着一旦一个原子函数开始执行,它的操作会在任何其他线程或进程可以介入之前完全完成。这是通过多种机制实现的,包括硬件支持的原子操作指令和锁。Linux操作系统广泛地使用原子函数来处理多线程和多进程中的资源共享问题,尤其是在内核开发中。上下文切换是一个计算成本较高的操作,涉及到保存当前任务的状态并加载另一任务的状态,通常在多任务操作系统中处理CPU时间分配时发生。
2024-04-16 11:15:37 717
原创 避免上下文切换--Linux原子函数
在现代操作系统中,原子函数是一类特殊的函数,它们能够保证在并发环境中执行的操作是不可分割的。这意味着一旦一个原子函数开始执行,它的操作会在任何其他线程或进程可以介入之前完全完成。这是通过多种机制实现的,包括硬件支持的原子操作指令和锁。Linux操作系统广泛地使用原子函数来处理多线程和多进程中的资源共享问题,尤其是在内核开发中。上下文切换是一个计算成本较高的操作,涉及到保存当前任务的状态并加载另一任务的状态,通常在多任务操作系统中处理CPU时间分配时发生。
2024-04-15 22:25:33 386
原创 缓存与数据库的数据一致性解决方案分析
在现代应用中,缓存技术的使用广泛且至关重要,主要是为了提高数据访问速度和优化系统整体性能。缓存通过在内存或更快速的存储系统中存储经常访问的数据副本,使得数据检索变得迅速,从而避免了每次请求都需要从较慢的主存储(如硬盘或远程数据库)中读取数据的延迟。这种技术特别适用于读取操作远多于写入操作的场景,如网页浏览、内容分发网络(CDN)和大规模的信息检索系统等。缓存的实现方式多样,包括但不限于内存缓存、分布式缓存和浏览器缓存等。这些缓存策略可以单独使用,也可以组合使用,以适应不同层级的需求和优化目标。
2024-04-14 22:57:02 3033
翻译 Kafka文档&教程(一)
事件流是人体中枢神经系统的数字等效物。它是构建“永远在线”世界的技术基础,在这个“永远在线”的世界中,企业越来越多地被软件定义和自动化,软件的用户更多地是软件本身。从技术角度来说,事件流是实时从事件源(如数据库、传感器、移动设备、云服务和软件应用程序)捕获数据的做法,以事件流的形式存储这些事件流以供后续检索,实时以及回顾性地操作、处理和响应事件流,以及根据需要将事件流路由到不同的目标技术。事件流确保了数据的连续流动和解释,以便正确的信息在正确的地点、正确的时间可用。
2024-04-13 15:57:13 37
原创 java集合详解
对象的容器,定义了对多个对象进行操作的常用方法。可实现数组的功能List接口是Collection接口的子接口List集合类中的每个元素都有序(即添加顺序和取出顺序一致)、且可重复List集合当中的每个元素都有其对应的顺序索引(从零开始)JDK API中的List接口的实现类有:常用的有:ArrayList、LinkedList和Vector。
2024-04-12 09:57:25 1330
原创 java序列化和反序列化详解
如果默认的序列化机制不符合需求,可以通过实现和方法来自定义序列化和反序列化的行为。Java序列化是一个复杂但强大的机制,允许开发者轻松地持久化和传输对象。虽然它对于简单的用途来说可能显得有些重,但它提供了一种标准方式来处理对象的深复制,以及对象状态的保存和恢复。正确使用Java序列化需要对其工作原理有深入的理解,尤其是在涉及版本控制和自定义序列化行为时。
2024-04-11 10:28:35 2300
原创 操作系统与编程系列专栏(一):导言
本文是系列专栏的第一篇文章,将带你深入浅出操作系统的前世今生和基础原理,包括它们的发展历程、核心组件、运行机制以及在现代计算中的重要性。操作系统,作为计算机硬件与软件资源的管理者,确保了计算资源的有效分配与使用。从早期的批处理系统到今天的多任务并行处理系统,操作系统经历了飞速的发展,不断地适应新的计算需求和技术标准。
2024-04-08 22:29:40 1163
原创 前端基础技术栈教程--HTML、CSS与javascript
在这份《前端基础技术栈教程》中,我们将一步步引导你深入浅出地探索HTML、CSS和JavaScript的奥秘。不论你是编程新手,还是希望巩固基础知识的开发者,这份教程都将为你提供清晰的指导和实践机会。
2024-04-05 13:40:28 1739
原创 Quill文档(三):构建自定义模块
当您在Quill的API之上实现功能时,将其组织为一个模块可能会很方便。为了本指南的目的,我们将逐步介绍一种构建单词计数器模块的方法,这是许多文字处理器中常见的功能。一个函数可以注册为Quill模块,并且它将被传递相应的Quill编辑器对象以及任何选项。在内部,模块是Quill的许多功能的组织方式。您可以通过实现自己的模块并使用相同的名称注册来覆盖这些默认模块。本质上,单词计数器只是在编辑器中计算单词数量,并在某些UI中显示这个值。来接受计数器容器的选择器,而不是硬编码的字符串。
2024-04-02 09:37:27 935
原创 Java的心脏:深入解析Java虚拟机、进程与线程的精妙互动
进程(Process)和线程(Thread)是操作系统中非常基础且重要的概念,它们对于理解程序的执行、资源分配和并发编程至关重要。我将从操作系统(OS)和Java编程语言的角度来详细解释这两个概念。
2024-03-29 16:49:42 1303
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人