- 博客(87)
- 收藏
- 关注

原创 2024 重整行装再出发
先介绍一下我的情况,我是来自河南某大学的一名计算机类学生,平心而论,当时在高考完之后并没有想过自己会被计算机专业录取,当时报的时候应该是电子类专业或者是自动化类专业的几率要大一些,因为这些学科与我的分数更加匹配,结果,阴差阳错的让我被计算机类专业录取了,其实当时我其实还蛮庆幸的,因为计算机专业是大家口中的热门专业,但是之后我的态度就发生了转变。今天是我开始写博客的50天的节点,也是我即将开始进行java部分学习的关键节点。
2024-01-26 20:02:45
477
3
原创 JavaEE-MyBatis概述&第一个程序
我们通常在文献中看到的framework这种单词我们称之为框架Java常用的框架如下Spring, SpringMVC, MyBatis(SSM), SpringBoot, SpringCloud(微服务相关)框架本质上就是对通用代码的封装, 作为我们Java程序员, 我们不需要特别在意底层的实现原理, 而是面对具体的业务进行业务代码的编写即可(所有的技术最终都要服务于业务)框架通常都以jar包的形式存在(包含各种class文件以及配置文件。
2025-03-23 17:53:07
1022
原创 JavaWeb-cookie机制详解
在商城业务中, 存在一种购物车机制, 在我们没有登录的时候, 我们可以点击商品信息然后添加进入购物车, 此时我们的购物中的一些商品的信息就会成为cookie保存在我们浏览器上, 此时我们进行登录, 我们打开购物车会发现这些商品并没有消失, 是因为我们客户端保存了这些cookie信息, 在登录的时候展示购物车, 会把这些商品的信息一并发出去, 然后进行展示…我们上面了解到, 服务器端发送cookie到客户端, 那么现在思考, 客户端保存的那么多的cookie, 我们访问这么多的网站,商城业务的购物车机制。
2025-03-11 15:34:41
874
原创 JavaWeb-session会话详解
目前我们的浅显理解,会话就是从你打开浏览器一顿操作, 然后直到关闭浏览器, 这一系列的操作称之为一次会话(本质上是服务器端session对象从创建到销毁的全过程)而一次请求指的是客户端向服务器端发送的一次请求的信息, 从这个角度看,会话的作用域要比请求大, 毕竟一次会话中可以包含多条请求信息Java的Servlet规范种session对象对应的类名是session机制并不是java的专属, 而是所有的BS架构的程序都有这一特性session最主要的作用就是保存对话的状态, 比如保留登录的状态我们上文中说,
2025-03-10 19:36:11
957
原创 JavaWeb-转发和重定向剖析
我们现在在浏览器中访问AServlet的资源, 显然, 跳转到了BServlet中。创建一个BServlet对象作为AServlet的转发请求的地址。第一次向CServlet发送了请求, 这是第一次的请求响应信息。转发不可以在不同的方法之间完成跳转, 测试如下。注解的使用就是通过key=value的形式使用。而且注解的使用比较简单, 查看先前讲注解的篇章。和转发不同, 重定向调用的API位于。上面可以观察到, 在转发的场景中,假设我们把 BServlet中的。可以发现, 响应时的状态码是。
2025-03-06 19:59:45
1039
3
原创 JavaWeb-HttpServletRequest请求域接口
其实关于请求域这个词也蛮熟悉的, 因为我们之前学习过应用域这一概念,应用域的生命周期很长, 伴随这服务器的启动和终止, 作用范围也很广, 对所有的处于当前webapp也就是 web 应用的所有Servlet对象都生效是位于包下面的一个接口继承了ServletRequest接口之前我们学习过HTTP协议的相关内容, 这个对象中封装的其实就是网络传输的时候, 发送的HTTP请求(Request)中封装的相关参数内容信息。
2025-03-05 18:45:49
970
原创 JavaWeb-HttpServlet源码分析
我们通过浏览器访问资源的时候一般通过http://ip:port/项目/资源路径的方式获取我们的欢迎页访问方式是http://ip:port/项目的方式访问欢迎页相当于一个站点的门头。
2025-03-05 16:59:27
951
原创 JavaWeb-ServletContext应用域接口
接口和Servlet和ServletConfig接口一样, 都是位于这个包下的接口, 其中Servlet接口的实现对象, 代表着提供服务的类的对象,接口对应的相应的Servlet对象的一些配置信息(位于web.xml文件下的servlet标签中的信息)对象, 代表的是应用域信息,每一个webapp项目, 有且仅有一个对象关于上面三个接口之间的关系, 我想我们可以通过下面的视图来简单描述一下对于一个Tomcat服务器(Servlet容器)来说, 相当于一个学校, 其中管理许多不同的webapp。
2025-02-26 23:22:52
1055
原创 JavaWeb-GenericServlet源码分析(适配器/模板方法)
我们上面学习Servlet接口的时候, 知道有一个方法, 这个方法的作用就是返回一个ServletConfig对象其实也就是上面我们分析的Tomcat服务器创建传入的那个对象一个Servlet对象有且仅有唯一一个ServletConfig对象保存的是该Servlet对象在web.xml中配置的servlet标签一些信息下面是ServletConfig接口中的常见的方法getInitParameter(String name): 返回一个name对应的参数值。
2025-02-25 12:40:47
1033
原创 JavaWeb-Servlet对象生命周期
思考, 假设我们定义一个有参数的构造方法会怎样呢?启动服务器, 进行测试虽然服务器可以正常的启动, 但是我们获取资源的时候, 会报出下面的错误提示服务器端错误也就是说, 不允许有带参数的构造方法所以官方不建议我们手动的指定无参数的构造方法(因为你指不定哪天就写成带参数的构造方法了)所以我们不建议明确的指定构造方法…也就是使用init进行初始化对象。
2025-02-24 17:53:28
1024
原创 JavaWeb-在idea中配置Servlet项目
我们实现接口的时候, 会发现产生编译错误, 这是因为我们没有Servlet的接口的导入, idea中导入这个接口的方法, 具体途径还是上面导入web页面的位置进行相关配置我们找到Tomcat中的lib文件中的jar包进行导入导入完毕之后, 我们发现我们的项目的多出来了两个jar包重写Servlet接口的相关方法return "";
2025-02-24 16:26:03
925
原创 JavaWeb-Servlet底层原理&创建项目
我们之前的博客写过很多的关于BS架构通信的原理, 但是今天我们的原理是最深刻的, 我们画图模拟一下。中的相关方法, 我们提供一个JavaEE的帮助文档, 这里我们提供两个, 我们用的是。上面我们解释了, 上面的代码找不到, 所以根部完不成编译, 此时我们就要找到相关的。所以我们更改我们的类加载的路径, 类加载的路径除了当前路径还有。注意, 下面我们的类都是在一个包下面的, 所以没有导包的操作。是一套接口, 其实这个说法还不是很准确, 准确的说,很显然, 我们此时的程序是根本无法完成编译的,
2025-02-23 15:55:43
544
原创 JavaWeb-Tomcat服务器
Tomcat服务器是Apache开源组织开发的一款轻量级的Web服务器,具有轻量级, 速度快, 免费开源等优点, 而且Tomcat服务器是由纯Java语言开发的(所以运行需要安装JRE, 所以安装JDK是必要的), 而且还要设置JAVA_HOME环境变量, 后面配置要用tomcatcatalina。
2025-02-21 20:04:21
898
原创 JavaEE-SpringBoot快速入门
关于环境准备, 由于社区版的限制过多, 所以建议直接上专业版, 因为专业版是收费的, 所以你可以采用一些 “科技” 手段来绕开…, 我们下面提供一些途径教程链接maven就是一个项目管理工具, 基于的概念, 通过一小段信息的描述, 来进行项目的管理与创建简单点说就是Maven是一个项目管理工具, 通过配置文件添加jar包(也就是添加依赖), 而不是手动的添加jar包, 其实我们在JDBC的那一篇章也学习过Maven, 我们这里只是做一个简单的复习早期的时候, 我们需要手动的添加Maven, 但是现在,
2025-02-17 18:21:59
982
原创 网络编程-网络原理HTTP1
GET方法的含义是, 获取某一种资源, 我们现在抓一个GET的请求看一看尝试访问一个搜狗的网页请求响应上面是使用GET请求获取到了一个网页的请求和响应POST的语义是传输某一种数据信息, 通常使用body部分进行数据的传输, 关于POST最常见的场景就是,登录, 上传我们尝试抓取一个POST的信息来看一看请求响应。
2025-01-24 23:46:47
997
原创 网络编程-网络原理HTTP初识
关于自定义协议, 主要分为两个阶段根据需求, 明确需要传输那些消息约定好传输文件的格式说成大白话就是你自己编一个自己能看懂的协议就行了下面我们列举几种常见的自定义协议的方式我们使用的案例均为: 外卖订餐的场景我们外卖订餐的时候, 向服务器发送的请求数据一般是如下的内容(简化版本)请求: 客户ID, 客户地址, 客户联系方式, 商家ID, 商家商品编号…响应: 是否成功订餐(1/0), 预计多长时间送达, 福利信息(优惠卷)关于应用层的协议, 除了自定义的, 还有好多官方的协议。
2025-01-20 23:10:59
895
原创 网络编程-TCP套接字
和UDP类似,TCP的Socket操作的网卡资源,也可以抽象为一种文件资源,也占用文件操作符表的内存资源,所以如果我们不用的话,要及时的调用。如果我们直接运行上面的代码,我们就会发现,是无法直接运行的,说明上面的代码存在一些问题,我们现在处理一下这些问题。由于TCP协议传输的时候,是通过字节流的方式进行传输的,所以不同的消息之间,并没有一个非常明显的界限,所以我们。不再多说,因为这也是一种文件的资源,所以当我们不用的时候,要进行及时的关闭,避免占用文件操作符表的资源,
2025-01-18 19:36:48
820
原创 网络编程-UDP套接字
TCP和UDP其实是传输层的两个协议的内容,差别非常大,对于我们的Java来说,JVM对操作系统提供的关于网络的API进行了封装,提供了两套的API下面是网络连接中的一些特点有/无连接:抽象的概念,虚拟的,逻辑上的连接,而不是物理的连接,其实就是看,在网络通信的过程中,是否保存了对端的一些信息,比如说IP端口号之类的可靠传输/不可靠传输:网络传输的过程中,传输的信息是十分容易丢失的,不可能100%的到达,这里说的可靠传输还是不可靠传输是指的是,尽可能的到达。
2025-01-17 20:08:22
1011
原创 八股基础-常见锁策略
按照之前的方式, 当我们抢不到锁就会进入阻塞等待状态(操作系统级别), 但是我们完全没必要这么干, 因为对于乐观锁来说, 只需要很短的时间我们就可以重新拿到锁, 所以没有必要放弃先前抢夺的。本节设置的目标主要是解决一些在面试中常考的一些概念性的问题, 需要自行记忆以及适当的理解背诵, 注意, 接下来的关于锁的策略的相关信息, 不是只针对于。其实公平锁和非公平锁没有好坏之分, 而是使用场景的问题, 但是操作系统内部的线程的调度是随机的, 所以天然的锁就是。不是针对于某种具体的锁, 而是某个具体的锁具备。
2024-12-10 22:36:40
1080
原创 JavaSE-线程池专题
由于我们关于线程池的构造比较的复杂, 所以JDK提供了另外一套类来对线程池进行更加抽象的封装, 这个类就是Executors之前说过, 这个类其实也是一个工厂类(存在大量的静态工厂方法), 关键的方法也就三个(第一个我们上面说, 获取默认的已经说过了): 构造并返回一个线程池, 这个线程池可以自行的扩容(上限是一个非常大的值): 返回一个固定线程大小的线程池, 这个线程池的容量是确定的返回的实际上是一个类型, 这是一个接口,实现了这个接口在任务执行完毕之后, 使用下面的方法关闭线程池。
2024-12-02 21:06:45
1082
原创 JavaSE-经典多线程样例
在包饺子的过程中, 存在一个擀饺子皮的人, 我们称之为生产者, 擀出来的饺子皮放到一个竹盘上, 这个竹盘相当于一个中间的媒介, 生产者生产的物质在上面与消费者进行交互, 而包饺子的人就是一个消费者, 从中间媒介中取出东西, 也就是消费的过程, 我们的中间的竹盘相当于一个缓冲, 如果包饺子的人包的快的话, 就需要等待做饺子皮的人, 如果做饺子皮的人做的快的话, 当竹盘放不下的时候就需要阻塞等待。很明显, 这样的懒汉式的代码是线程不安全的, 那要如何进行改进呢?图中我们也有解释, 越靠上游的消耗的资源越少。
2024-12-01 23:42:02
1010
原创 JavaSE-线程安全
线程安全问题是整个多线程专题的最核心也是最重要的章节, 如果不理解线程的安全, 是无法写出正确的多线程的代码的, 我们之前所写的代码都是在单一的线程环境之下写出的 “玩具式” 的代码, 不存在多线程的复杂关系, 下面我们给出一段代码来引出线程安全的话题…// 定义一个计数器// 定义一个循环的次数// 重置计数器countcount = 0;// 创建线程t1i++){count++;});// 创建线程t2i++){count++;});// 开启线程t1, t2。
2024-11-28 18:46:55
660
原创 JavaSE-多线程基础知识
基础的一些关于线程/进程的一些基础的概念, 已经在之前的帖子中有过解释简单复习一下线程是轻量级的进程(进程太重了, 创建销毁代价大)进程包括线程进程是操作系统资源分配的基本单位线程是操作系统调度执行的基本单位线程的调度是操作系统进行的, 在应用层无法进行干预, 也无法感知线程是操作系统级别的概念, 操作系统内核实现了这种机制并封装提供用户一些APIJava中的Thread类可以视为是对操作系统的API的进一步封装和抽象定义一个static变量作为标志位然后打标记。
2024-11-19 23:38:22
1035
原创 算法.图论-习题全集(Updating)
并查集是一种用于大集团查找, 合并等操作的数据结构, 常见的方法有find: 用来查找元素在大集团中的代表元素(这里使用的是扁平化的处理)isSameSet: 用来查找两个元素是不是一个大集团的(其实就是find的应用)union: 用来合并两大集团的元素关于并查集打标签的技巧, 其实我们之前的size数组也是一种打标签的逻辑, 其实打标签就是给每一个集团的代表节点打上标签即可, 还有我们在并查集的题目中通常会设置一个sets。
2024-11-18 21:52:17
614
原创 JavaSE-多线程入门
进程是指操作系统中的一段程序, 它是一个正在执行的程序实例,具有独立的内存空间和系统资源, 所以进程之间资源不共享, 如文件, 网络端口等, 在计算机运行时, 一般是先创建进程, 后创建线程, 一个进程通常可以包含多个线程线程是指的是进程中的一个执行单元, 是进程的一部分, 负责在进程中执行代码,每一个线程都有自己的栈和程序计数器并且可以共享进程的资源, 多个线程可以在同一个时刻执行不同的操作, 从而提高程序的执行效率, 线程与线程之间的资源并不是完全共享的, 下面会详细介绍…大白话总结。
2024-10-30 21:48:53
1084
原创 Java & MySQL-JDBC编程
Maven其实是一种基于项目对象模型的项目管理工具,可以对 Java 项目进行构建、依赖管理等操作, 其实简单点理解就是, 可以理解为一个云的应用商店, 如果没有maven的话,我们配置JDBC也就需要下载各大服务器厂商的驱动Jar包到本地使用,如果Jar包的内容过多就不是很方便,但是通过Maven我们就不需要下载, 通过远程加载maven仓库中的依赖的方式直接使用Jar包, 更加便捷。
2024-10-26 17:49:59
1307
原创 MySQL-存储引擎入门概念
注意, 本节的内容大多属于是那种概念性的内容, 基本上没有代码层面的东西, 所以主要是以记忆了解为主, 后续当我们进行更加深入的学习之后, 我们有可能会更加深入的解释存储引擎相关的一些东西MySQL存储引擎决定了数据在磁盘中的存储方式和访问方式, 不同的存储引擎实现了不同的存储和检索算法(index), 因此他们在处理和管理数据的方式上存在差异MySQL常见的存储引擎包括有InnoDBMyISAMMemoryArchive等, 每个引擎都有自己的适用场景比如InnoDB。
2024-10-24 19:25:40
1027
原创 MySQL-存储过程/函数/触发器
简单点说就是普通的SQL语句加上一些其他编程语言进行逻辑判断的一些成分, 比如循环, 函数, 这些, 但本质上是一种SQL语句的集合, 或者说叫做,过程化SQL语言存储过程可称为过程化SQL语言,是在普通SQL语句的基础上增加了编程语言的特点,把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中,通过逻辑判断、循环等操作实现复杂计算的程序语言。换句话说,存储过程其实就是数据库内置的一种编程语言,这种编程语言也有自己的变量、if语句、循环语句等。
2024-10-22 21:30:06
1297
原创 MySQL-常见DBA命令
本节主要是一些Java程序员的基本的DBA命令, 把这个当作是一个文档看就可以了, 不用去记忆, 因为作为Java工程师并不需要经常管理数据库, 有专业的DBA来管理, 所以有需要的话, 就打开这个文档查一下就可以了。
2024-10-21 23:01:40
540
原创 MySQL-DQL练习题
本节简介:主要是一些给出一些习题, 关于DQL查询相关的, DQL查询语句是最重要的SQL语句, 功能性最复杂, 功能也最强, 所以本节建议适合以及有了DQL查询基础的食用, 另外注意我们使用的是Navicat, SQL编辑的格式规范也是Navicat指定的默认格式, 不是dos命令行窗口…
2024-10-17 22:45:59
546
原创 MySQL-事务Transaction详解
事务是最小的一个工作单元, 在数据库当中, 事务表示一件完整的事一个业务的完成可能需要多条DML语句共同配合才能完成, 例如转账业务, 需要执行两条DML语句, 先更新张三的业务, 再更新李四的业务, 为了保证转账业务不出现问题, 就必须保证这两条DML语句必须同时成功或者同时失败, 所以我们就需要借助业务这一机制来完成也就是说使用了事务机制之后, 在同一个事务内部, 多条DML语句会同时成功或者同时失败, 不会出现一部分成功一部分失败的现象事务。
2024-10-15 20:56:47
1186
原创 MySQL-三范式 & 视图
所谓三范式, 其实是表设计的三大原则, 目的都是为了节省空间, 但是三范式是必须要遵守的吗?答案是否定的(但是第一范式必须遵守) 因为有时候严格遵守三范式会导致查询的效率下降(DQL链接查询的笛卡尔积现象)所以表的最终设计, 在生产环境中还是要根据具体的要求进行操作。
2024-10-13 21:40:25
1123
原创 MySQL-约束Constraint详解
约束是我们在创建表的时候, 我们可以给表中的字段添加约束确保我们的数据的完整性和有效性, 比如大家平时上网时注册用户常见的 : 用户名不能为空, 对不起, 用户名已经存在等提示信息约束通常包括下面的这6种约束类型约束关键字非空约束not null默认约束default检查约束check唯一约束unique主键约束外键约束下面我们会详细的剖析这几种约束(默认约束省略, 就是一个简单的在不插入这个字段的数据时插入默认值)
2024-10-11 21:44:13
1912
1
原创 MySQL-表相关(DDL & DML)
数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。DDL语句是我们SQL语句中的一种, 下面是DDL的相关简介, 其实也就是修改表本身的结构, 其实这个内容相对不是特别重要, 因为开发的过程中, 当以及拥有庞大用户量之后, 修改表的结构其实时一件很危险的行为。思考一下, 我们新添加的d字段, 带有非空约束, 但是我们之前是没有加入过d这一列数据的, 那么会执行成功么, 答案是会执行成功的, 但是之前的所有位置的这个d列都是空, 不是null, 就是空(什么都没有)
2024-10-10 23:19:55
1155
原创 算法.图论-BFS及其拓展
bfs的特点是逐层扩散, 从源头到目标点扩散了几层, 最短路就是多少bfs的使用特征是任意两个节点的距离(权值)是相同的(无向图, 矩阵天然满足这一特点)bfs开始的时候可以是单个源头, 也可以多个源头(单源bfs, 和多源bfs)bfs进出队列的时候可以是单点弹出, 也可以是整层弹出如果是单点弹出的时候, 队列中存放的是当前的节点和距离源点的距离整层弹出则不需要, 只需要保留一个level计数就可以知道到源点的距离。
2024-10-09 23:33:07
1266
原创 算法.图论-并查集
定义:并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等方法作用作用就是查找一个元素所在大集合的代表元素, 返回这个元素判断传入的两个元素是不是同属一个大集合, 返回T/F合并传入的两个元素所代表的大集团(注意不仅仅是这两个元素)并查集的时间复杂的要求就是实现上述的操作的时间复杂度都是O(1)下面是关于并查集的一些常见的操作的图示。
2024-09-19 22:48:11
1184
原创 算法.图论-建图/拓扑排序及其拓展
拓扑排序的存在条件是在一个有向且无环图中的排序, 拓扑排序在某种程度上反应的是一件事的执行的先后顺序, 请看下图这张图中, 黑色的字符表示节点的名称, 蓝色的数字指的是该位置的入度是多少, 上面我们提到过, 拓扑排序的过程可以视为完成某一件事的先后顺序, 假设我们最终想要完成的任务是f, 那我们下面的字符的序列也就是完成最终事件的顺序拓扑排序不是唯一的, 比如下面的图在这张图中, 先完成a还是先完成b都是可以的, 所以产生的拓扑排序的情况就有两种,
2024-09-12 22:40:42
1021
原创 算法-双指针技巧
设置两个指针的技巧,其实这种说法很宽泛,似乎没什么可总结的有时候所谓的双指针技巧,就单纯是代码过程用双指针的形式表达出来而已。没有单调性(贪心)方面的考虑有时候的双指针技巧包含单调性(贪心)方面的考虑,牵扯到可能性的取舍。对分析能力的要求会变高。其实是先有的思考和优化,然后代码变成了双指针的形式。3)所以,双指针这个“皮”不重要,分析题目单调性(贪心)方面的特征,这个能力才重要。常见的双指针类型:3. 同向双指针4. 快慢双指针5. 从两头往中间的双指针6. 其他。
2024-09-08 22:34:24
1123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人