三层架构和分层解耦
一、Java Web 三层架构Java Web 应用可以大致分为三层: Controller 层(控制层) Service 层(业务逻辑层) Dao 层(数据访问层) 1. Controller 层Controller 层主要负责接收前端发送的 HTTP 请求,并对请求进行处理后响应数据。 职责: 接收来自客户端(如浏览器、移动设备等)的 HTTP 请求(GET、POST、PUT、DELETE 等)。 解析请求中的参数(如查询字符串或表单数据)。 调用 Service 层的方法处理业务逻辑。 注:Controller 层不直接实现业务逻辑,而是通过调用 Service 层的方法来完成具体操作。 2. Service 层Service 层负责实现具体的业务逻辑,是应用的核心部分。 职责: 实现复杂且核心的业务逻辑(例如银行系统中的转账业务)。 管理事务处理,确保多个数据库操作要么全部成功(提交事务),要么全部失败(回滚事务)。 为 Controller 层提供业务处理方法。 3. Dao 层Dao 层(Data Access Object...
gdb
编译程序时添加调试信息为了让 GDB 能够读取源码并关联变量信息,你必须在编译时加入调试符号。例如,对于 C 程序,可以这样编译: 1gcc -g -o my_program my_program.c 对于 C++ 程序,则用: 1g++ -g -o my_program my_program.cpp 启动 GDB在终端中输入以下命令启动 GDB 调试器,并加载可执行文件: 1gdb my_program 进入 GDB 后,会看到提示符 (gdb),这时就可以开始调试了。 常用 GDB 命令查看源码和设置断点 list (l) 显示源码,默认显示当前停留位置附近的代码。 1(gdb) list break (b) 在指定的函数或行设置断点。 示例:在 main 函数入口设置断点: 1(gdb) break main 或在具体文件的某一行设置断点:1(gdb) break my_program.c:20 启动和控制程序运行 run (r) 启动程序执行,可以附带命令行参数。1(gdb) run arg1 arg2 continue (c) ...
hutool
📚简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当; Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。 #🎁Hutool名称的由来Hutool = Hu + tool,是原公司项目底层代码剥离后的开源库,“Hu”是公司名称的表示,tool表示工具。Hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。 #🍺Hutool如何改变我们的coding方式Hutool的目标是使用一个工具方法代替一段复杂代码,从而最大限度的避免“复制粘贴”代码的问题,彻底改变我们写代码的方式。 以计算MD5为例: 👴【以前】打开搜索引擎 -> 搜“Java MD5加密” ->...
HTTP协议
概念: 超文本传输协议,规定了浏览器和服务器数据传输的规则 例子: Response 123456HTTP/1.1 200 Content-Type: text/html;charset=UTF-8 Content-Length: 10 Date: Wed, 19 Mar 2025 08:22:49 GMT Keep-Alive: timeout=60 Connection: keep-alive Request 12345678910111213141516GET /hello?name=ith HTTP/1.1Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflate, br, zstdAccept-Language:...
Educational-Codeforces-Round-176题解
近期来打得最好的一场,但是B题细节真有点多啊喂。。 A. To Zero给定 n, k, 求把n变0次数 k >= n 答案是1, 否则n先减去k,之后无论如何选择的减数必然是偶数,然后计算次数即可 1234567891011121314151617181920212223242526272829303132333435363738#include<bits/stdc++.h>using namespace std;using i64 = long long;void solve() { i64 n, k; cin >> n >> k; i64 ans = 0; if (k >= n) { cout << 1 << '\n'; return; } n -= k; ans++; if (k & 1) { k--; } ...
Maven
Maven是管理Java项目根据,apache旗下一个东西 当前市场上的主流是Maven 1. Maven的基本概念 构建生命周期: Maven通过一组预定义的构建生命周期来管理项目的构建过程。最常用的生命周期有三个: clean: 清理项目的输出目录。 default: 执行项目的构建过程,包括编译、测试、打包等。 site: 生成项目的文档。 每个生命周期由多个阶段组成,Maven会按照一定的顺序执行这些阶段。 插件和目标: Maven通过插件来扩展功能,每个插件包含若干个目标(goals)。比如,编译Java代码的插件是maven-compiler-plugin,它的目标是compile。 依赖管理: Maven使用POM文件(pom.xml)来管理项目的依赖、构建配置等信息。每个依赖都由以下几部分定义: Group ID: 依赖所属的组。 Artifact ID: 依赖的唯一标识符。 Version: 依赖的版本。 仓库: Maven通过仓库来存储和获取依赖项。可以是本地仓库、中央仓库或私有仓库。 2....
JavaScript
脚本语言,不用编译直接运行 组成 ECMAScript: 规定了JS基础语法核心知识,包括变量,数据类型,流程控制,函数,对象等 BOM: 浏览器对象模型,用于操作浏览器本身,如:页面弹窗,地址栏操作,关闭窗口等。 DOM: 文档对象模型,用来操作HTML文档,如更改标签内内容,更改标签内字体样式 JS 核心语法JS引入方式 内部引入 必须在\\ 之间 在HTML文档中可以在任何地方放任何数量script 一般把脚本置于\元素底部 外部引入 写完了引入 书写规范 : 结束符,每行结尾以分号结尾,结尾分号可有可无 基础语法变量 JS中用 let 关键字声明变量(弱类型语言, 变量可以存放不同类型的值)12345<script> let a = 20; a = "Hello"; alert(a);</script> const 声明常量 输出方式123console.log() // 输出到控制台window.alert(a) // 弹出警告框document.write() //...
网络编程
基本的通信架构 基本的通信架构包括两种 : CS架构(Client客户端/Server服务端), , C需要程序员开发 BS架构(Browser浏览器/Server架构) : B不需要程序员开发 网络通信三要素 : IP, 端口, 协议 IP InetAddress 1234567891011121314151617181920212223242526package demoInetAddress; package demoInetAddress; import java.net.InetAddress; public class Net { public static void main(String[] args) { try { // 1. 获取本机IP对象 InetAddress ip1 = InetAddress.getLocalHost(); ...
线程
进程和线程的定义 进程: 一个应用程序 线程: 一个进程内的多个处理部分 每当启动一个进程,CPU会分配给进程一部分时间单元,进程内的线程可以调用本进程内的资源 eg. 对于Java程序来说,在DOS命令窗口中输入:1java HelloWorld 回车后,会先启动JVM, JVM就是一个进程,之后JVM在启动一个主线程调用main方法(main就是主线程)同时启动垃圾回收线程复制看护,回收垃圾 最起码,Java程序至少有两个线程并发,一个是垃圾回收机制, 一个是main的主线程。 线程的生命周期 出生状态 就绪状态 执行状态 阻塞状态 等待状态 死亡状态 线程的构造方法 实现线程主要是通过两种Java提供的方式, 分别为继承Java.lang.Thread类与实现Java,lang.Runnable接口 1....
lombok
1.Lombok简介官方介绍Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more. 大概的意思:Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。官网链接 简而言之:Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。博客及源码GitHub链接 .Lombok使用使用Lombok需要的开发环境Java+Maven+IntelliJ...
