自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 JavaEE进阶(3) Spring Web MVC 小练习:用户登录

使用 Spring MVC 处理用户登录,Session 记录登录状态。使用 AJAX 实现异步数据请求,提升用户体验。提供多种方式获取 Session,增强代码灵活性。采用进行字符串校验,提升代码可读性。🎯至此,Spring MVC 用户登录功能已实现!🚀。

2025-03-08 15:11:45 475

原创 JavaEE进阶(2) Spring Web MVC: Session 和 Cookie

通过本文的学习,你应该对 Spring MVC 的 Session 和 Cookie 处理有了更深入的理解,并能在实际开发和面试中灵活应用!

2025-03-08 14:23:27 758

原创 Java 网络八股(1) TCP/IP五层网络模型/套接字编程详解/封装分用/TCP长短连接/TCP UDP区别

理解TCP/IP模型的分层与封装过程是网络编程的基础,而掌握Socket API的使用能帮助开发者实现高效的网络通信。根据需求选择TCP(可靠)或UDP(高效),合理设计长短连接策略,是优化网络应用性能的关键。

2025-03-02 13:44:37 986

原创 Java 网络八股(2) TCP6大核心机制/异常处理

面试必考

2025-03-02 13:43:53 693

原创 Java 网络八股 TCP协议:三次握手四次挥手全图解

掌握TCP协议,就像获得网络世界的“内功心法”!无论是面试还是调优,这些知识点都能让你一眼看穿网络问题的本质! 🚀

2025-02-27 00:23:07 776

原创 JavaEE 编写Java程序,实现简单的echo程序(网络编程TCP实践练习)

通过深入理解TCP通信机制和Java网络API的实现原理,开发者可以构建出稳定高效的网络应用程序。多线程服务器的设计需要特别注意资源竞争和线程安全问题,在实际生产环境中建议使用。返回响应(response)等高级并发工具进行线程管理。发送数据(request)

2025-02-26 23:13:16 956 1

原创 JavaEE 编写Java程序,实现一个简单的echo程序(网络编程UDP实践练习)

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的网络协议,相比于TCP,它不保证数据包的可靠送达和顺序。因此,UDP在网络应用中,尤其是对实时性要求较高、容错能力强的应用场景中,得到了广泛的应用。本文将结合 UdpClient 和 UdpServer 这两个示例程序,分析它们的实现及相关的注释内容,帮助大家更好地理解UDP的使用。

2025-02-26 23:11:56 935

原创 JavaEE进阶(1) Spring Web MVC 注解和参数传递

在学习 Spring Web MVC 时,我们常用不同的注解来处理 HTTP 请求和响应。Spring MVC 提供了一系列的注解,简化了我们的开发工作,让我们能够通过更简洁和可读的方式来处理请求。以下将详细讲解这些注解的使用方式,结合代码示例以及常见的应用场景,帮助大家深入理解 Spring MVC 中的请求处理。

2025-02-25 13:00:43 1386

原创 编译原理(形式语言和自动机)第1讲:计算理论导论 (Introduction to the Theory of Computation)

文法规定了语言中的字符串如何生成,是描述计算机语言、编译器、自然语言处理 (NLP) 等应用的核心概念。研究计算的本质,即计算机能解决哪些问题,以及如何高效地解决这些问题。本文将介绍计算理论的基础,包括。:你能设计一个不同的文法来生成同样的语言 ( L(G) ) 吗?即,所有 ‘a’ 和 ‘b’ 数量匹配的字符串。如果你想更深入地了解编译原理、形式语言理论,掌握。等计算机科学领域,是计算机科学的重要基础!从起始符号 ( S ) 开始,通过。本文介绍了计算理论的基础概念,包括。,最终生成的字符串 ( w )

2025-02-25 12:58:46 580

原创 Java数据结构 (Arraylist详解:ArrayList的三种构造方法/扩容方法/add/remove(index)/remove(Object)/遍历foreach iterator)

两种创建方式,上面的使用ArrayList,下面的使用List,上面的可以使用ArrayList的所有方法,下面的只能使用List这个结构的方法。

2025-02-11 20:10:44 398

原创 MySQL 进阶专题 (ACID/事务隔离性(脏读/不可重复读/幻读)隔离级别(READ UNCOMMITED/READ COMMITED/REPEATABLE READ/SERIALIZABLE)

秋招必看

2025-02-06 16:51:08 511

原创 MySQL 进阶专题:索引(索引原理/操作/优缺点/B+树)

在数据库中,索引是一种特殊的数据结构,用于加快查询操作的速度。当我们执行SELECT查询时,数据库默认会通过逐行扫描的方式来完成查询。例如,当我们使用WHERE语句进行条件查询时,数据库会依次读取数据表的每一行,并将其带入条件中进行判断。这种遍历操作的时间复杂度是 O(N),其中 N 是表中的总行数。然而,这种遍历操作有一个显著的问题:每次读取一行数据都需要访问硬盘💾。硬盘 I/O 的速度远低于内存操作,尽管时间复杂度是 O(N),实际执行效率却受到硬盘性能的极大限制。

2025-02-04 18:52:50 941

原创 MySQL 进阶专题:自连接、子查询与合并查询的深入探讨

自连接适合表内对比或层级关系处理;子查询便于分步处理复杂逻辑;合并查询适合数据集合的灵活操作。通过这三种技术,SQL开发者可以更高效地解决复杂的业务需求,同时优化查询性能。

2025-02-04 18:25:35 483

原创 MySQL 进阶专题:聚合查询与分组操作详解(GROUP BY/HAVING)

聚合函数用于对一组值执行计算并返回单个值。COUNT:计算行数。SUM:计算列值之和。AVG:计算列值的平均值。MAX:返回最大值。MIN:返回最小值。通过GROUP BY子句和聚合函数的组合,可以对数据进行多维度的统计和分析。结合WHERE和HAVING子句,我们可以在分组前后应用不同的条件,从而满足复杂的业务需求。如果你在实际项目中遇到了其他分组相关的问题,欢迎在评论区留言讨论!

2025-02-02 14:30:00 638

原创 MySQL 进阶专题:笛卡尔积内连接外连接详解(JOIN ON/ OUTER JOIN)

笛卡尔积是 SQL 中两个表在没有任何连接条件的情况下进行组合时的结果。每个表中的行会与另一个表的每一行进行配对,从而生成巨大的数据量。笛卡尔积是表连接的基础,但结果可能不符合实际需求。使用WHERE可以过滤笛卡尔积,但写法不够直观。使用JOIN是更推荐的做法,语义清晰且功能强大。内连接用于返回两个表中满足条件的记录。外连接可以返回一个表的所有记录,适用于需要保留部分空值的场景。结合GROUP BY,可以对连接后的数据进行分组和统计。

2025-02-02 11:30:00 630

原创 MySQL 基础学习(5):数据库约束

约束是一种规则,用于限制表中数据的有效性,确保存储的数据符合业务逻辑和不一性需求。NOT NULL:列值不能为空。UNIQUE:列值必须唯一。DEFAULT:为列定义默认值。:NOT NULL 和 UNIQUE 的结合,用于标识表中唯一记录。:确保表与表之间的引用完整性。CHECK:限制列值满足某些条件(MySQL 不完全支持)。在数据库设计中,使用约束可以帮助开发者控制数据的有效性和不一性。NOT NULL:确保必要的列不能为空。UNIQUE:用于需要唯一标识的列。DEFAULT。

2025-02-01 17:35:53 918

原创 MySQL 基础学习(4):条件查询(WHERE)更新操作(UPDATE)删除操作(DELETE)分页查询(LIMIT)

在 MySQL 的数据操作中,条件查询、更新和删除是最常用的功能。熟练使用WHERE子句可以帮助我们快速筛选所需数据,而UPDATE和DELETE操作需要特别注意条件的准确性,以免误操作导致数据丢失。在实际开发中,还需结合性能优化方法,确保数据库的高效运行。希望本文对你理解 MySQL 操作有所帮助!如果你有任何疑问或补充,欢迎在评论区留言讨论!

2025-02-01 12:20:04 1151

原创 MySQL 基础学习(3):排序查询和条件查询

通过熟练掌握 MySQL 的别名、去重、排序和条件查询操作,你可以更高效地从数据库中提取和分析数据。在使用这些功能时,需要特别注意性能优化和语法细节,以确保查询的准确性和效率。如果你对本文有任何疑问或建议,欢迎留言讨论!

2025-01-26 23:34:23 768

原创 MySQL 基础学习(2): INSERT 操作

MySQL 中的INSERT操作是数据写入的重要手段。在实际使用中,合理利用批量插入、指定列插入等技巧,不仅可以提高效率,还能避免常见错误。希望本文对你理解INSERT操作有所帮助,欢迎在评论区分享你的经验!

2025-01-25 17:16:42 444

原创 MySQL 基础学习(1):数据类型与操作数据库和数据表

在这篇博客中,我们将深入学习 MySQL 的基础操作,重点关注数据库和数据表的操作,以及 MySQL 中常见的数据类型。希望本文能帮助你更好地理解和掌握 MySQL 的基本用法。

2025-01-25 12:00:21 1071

原创 Java数据结构 (链表反转(LinkedList----Leetcode206))

把它放在斜坡上,有趣的现象发生了,铁路轨道原来是这样运作,兄弟俩买轨道玩具研究,终于搞懂了这个原理,常数背后的秘密,10秒钟教会你勾手发球的不同旋转原理,飞行原理最好的风洞教具,马士兵预测计算机行业未来3-5年内即将被淘汰的5种语言:Java、python、golang、C、C++、C#、前端、后端、大数据、AI、测试、运维、开发...,三年级上册期末成绩汇报!,如何在不可编程计算器上编写简单程序(整活版),为什么美国不敢直接禁止我国使用Windows系统?,你眼中的黑客技术VS实际上的黑客技术。

2025-01-21 21:54:43 1369

原创 Java数据结构 (从0构建链表(LinkedList))

在本文中,我们将基于类,深入探讨单链表的实现,包括创建、插入、删除等核心操作,同时分享完整的代码示例。单链表是一种灵活的数据结构,适用于处理需要频繁插入和删除操作的场景,例如实现队列 📜、链式栈 🔥、循环队列 🔄 等。在计算机科学和实际开发中,链表结构被广泛应用。它不仅可以高效地处理插入和删除操作,还能够根据实际需求实现不同的链表结构。🚀本篇不仅涵盖了基本功能的代码展示,还补充了各种操作的实现细节和优化建议,旨在让读者能够全面掌握单链表的使用与实现。😊💡a.b.c.

2025-01-20 20:43:47 1501

原创 Java数据结构 (从0构建Arraylist)

动态数组的核心是通过扩容解决容量限制问题。合理的边界检查和错误处理可以提高代码的鲁棒性。本实现涵盖动态数组的常见操作,是理解动态数组的良好示例。

2025-01-19 20:23:22 595

原创 操作系统(12) (并发(3)------哲学家进餐问题(Dining Philosophers Problem)解决方案/管程(monitor))

Mesa风格:灵活、易于实现,适合多任务调度的操作系统。Hoare风格:同步更强,但实现复杂,常用于理论讨论。哲学家进餐问题展示了并发编程中的同步挑战。简单的实现容易导致死锁,而使用信号量可以避免死锁但并行度有限。通过 Monitor 实现,解决了死锁问题并最大化了并行度,是一种高级而高效的并发控制方法。Monitor 作为一种抽象数据类型,封装了共享数据和同步操作,在解决并发问题时提供了极大的便利。

2024-11-10 23:28:42 1218 1

原创 在配置环境变量之后使用Maven报错 : mvn : 无法将“mvn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

配置Maven,确保JAVA_HONE环境变量配置好

2024-11-09 17:00:54 933

原创 操作系统(11) (POSIX--Linux线程编程---Mutex互斥锁语法应用)

在多线程编程中,是确保线程安全访问共享资源的关键,尤其在涉及数据一致性和防止竞态条件时。**互斥锁(Mutex)**是 POSIX 线程编程中实现线程同步的重要机制,能够确保只有一个线程在特定时间内访问共享资源。本文将介绍互斥锁的基本原理、函数用法,并通过示例展示如何在 C 语言中实现多线程同步。

2024-11-09 16:29:12 367

原创 操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)

8000字详解,先收藏,慢慢看

2024-11-04 22:48:22 864

原创 操作系统(9) (并发-----原子性/互斥临界区/生产者消费者问题/临界区问题三条件/互斥性/进展性/公平性)

生产者和消费者共享一个有限大小的缓冲区,生产者负责往缓冲区中添加项,消费者则从缓冲区中取出项。和其他并发计算一样,生产者和消费者可能会因为共享资源(缓冲区)和计数器而产生竞争条件(Race Condition)。// 环形缓冲区的实现。// 环形缓冲区的实现。// 当缓冲区为空时,消费者等待。// 当缓冲区满时,生产者等待。// 有空间时,生产者添加新项。// 从缓冲区中取出项。

2024-11-04 22:05:55 865

原创 操作系统(8) (POSIX--Linux线程编程---使用多线程计算平方pthread_t/create/join应用)

宏定义指定了要创建的线程数量,在这里我们设置为5。这样方便在代码中灵活更改线程数量。线程函数参数传递:使用void*来传递不同类型的参数,传递后在函数内部将其转换回正确的类型。动态内存分配:在线程函数中,使用malloc分配内存以返回计算结果。主线程在使用完返回值后,需要调用free释放内存。数据竞争与解决方案:避免数据竞争的一个常用方法是为每个线程创建独立的参数,而不是共享同一个变量。本文通过一个简单的线程计算平方值的例子,介绍了pthread库的基础用法。

2024-10-29 23:24:13 464

原创 操作系统(7) (POSIX--Linux线程编程---c语言相关语法/pthread_t/create/join应用)

pthread_t类型变量用于存储线程ID,以便稍后对线程进行操作。

2024-10-29 00:04:46 1019

原创 JavaEE 多线程第四节 (线程核心操作----线程开始/线程终止)

start()是启动线程的正确方法,它调用 run()来执行任务,并通过底层系统 API 创建真正的操作系统级线程。不能在同一个线程对象上调用 start()两次,否则会抛出 IllegalThreadStateException。run()方法可以被直接调用,但它不会启动新线程,而是在当前线程执行任务。使用isQuit控制线程的退出,主线程可以在某个时间点设置isQuit为true,从而通知子线程退出。lambda表达式中捕获外部变量时需要保证变量是不可变的,即有效final。使用。

2024-10-27 23:41:30 526

原创 Java 代码优化 工厂模式(Factory Pattern)

在面向对象的设计中,工厂模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,允许子类决定将哪一个类实例化。工厂方法使得类的实例化过程延迟到子类中进行,从而实现了对开放-封闭原则的遵循

2024-10-24 16:30:26 439

原创 Java 代码优化 修饰器模式(Decorator Pattern)

在软件设计中,装饰模式是一种非常有用的结构型设计模式,它允许你在不修改现有类的情况下,动态地为对象添加新的功能。这个模式通过将对象包裹在装饰器对象中,实现功能的扩展和增强。

2024-10-24 16:24:30 518

原创 Java 代码优化 策略模式(Strategy Pattern)

策略接口 策略实现 策略上下文 策略调用

2024-10-23 23:23:12 790

原创 JavaEE 多线程第三节 (lambda方法实现多线程/Thread属性和方法/前台线程后台线程)

守护线程通常用于执行后台任务或辅助功能(如垃圾回收器),它不应该是程序的核心逻辑。用户线程(前台线程)是程序的核心工作线程,确保程序在完成任务后才退出。

2024-10-22 22:51:33 1353

原创 操作系统(6) (Named /Unnamed Semaphore信号量详解)

sem_init:创建和初始化无名信号量。sem_wait:等待并占用信号量,进入临界区。sem_post:释放信号量,离开临界区。:销毁信号量,释放资源。4. 对比标识方式通过名字(字符串)通过指针创建方式sem_open()sem_init()共享范围跨进程线程之间或共享内存进程间销毁方式使用场景进程间同步线程间同步,或同内存进程间同步性能开销稍大,适用于跨进程高效,适用于线程同步。

2024-10-19 16:58:04 1257

原创 操作系统(5) (POSIX--Linux线程编程pthread_t/create/join/exit)

讲解基本POSIX语法

2024-10-19 15:55:45 451

原创 操作系统(4) (POSIX--Linux进程编程/fork()/exec()/waitpid())

fork()fork()是在 Unix 和 Linux 操作系统中用于创建新进程的系统调用。它的主要作用是,创建一个,从而实现多进程的操作。子进程与父进程几乎完全相同,但它们有各自独立的进程ID和内存空间。

2024-10-15 23:31:58 751

原创 操作系统(3) (线程/进程与线程的对比/线程的优点/三种线程实现方式/三种线程模型)

例子说明:**用户级线程(User-Level Threads)和内核级线程(Kernel-Level Threads)**在开销上的对比:图表中的数据展示了"Null Fork"操作和"Signal Wait"操作的时间差异。可以看出,进程的操作时间显著高于线程。总结:使用线程的好处主要体现在:定义:用户级线程由用户空间中的库或程序直接管理,操作系统内核对这些线程没有直接感知。这意味着,所有与线程相关的管理任务(如创建、销毁、同步、调度等)都在用户空间完成。在这张图中,用户级线程的管理完全发生在用户空间,

2024-10-15 21:58:47 1252

原创 JavaEE 多线程第二节 (多线程的简单实现Thread/Runable)

Java创建线程

2024-10-14 22:17:25 764

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除