- 博客(61)
- 收藏
- 关注
原创 mysql进阶-sql调优
在MySQL初阶的课程中已经介绍了索引,我们知道InnoDB存储引擎使⽤B+树作为索引默认的数据结构来组织数据,为频繁查询的列建⽴索引可以有效的提升查询效率,那么如何利⽤索引编写出⾼效的SQL查询语句?以及如何分析某个查询是否⽤到了索引?当前的索引还有没有优化的空间?下⾯我们来讨论关于索引和优化相关的问题。关于mysql索引的理解,除了自动创建的主键索引是将所有的字段都放在索引树当中,其他的索引都只有索引字段和主键,那么其他的索引检索到要查询的数据后还是需要根据存储的主键id去主键索引去查找全部的数据的。
2025-08-08 15:13:03
348
原创 mysql基础-联合查询
连接条件必须是要同一个学生,因为要求是显示同一个学生的计算机原理成绩比java成绩要高的学生。返回的参数类型是要和判断的参数类型一模一样的,对参数名不做要求,一般也对约束没有要求。如果是结构完全相同的两个表的话,就可以不指定列直接使用*来合并所有的数据集。多行子查询使用in来做条件判断。如果子查询过多,建议分开来查询。在三张表以内尽量使用联合查询。
2025-08-08 11:05:28
139
原创 JavaEE-初阶-文件操作和IO
和读取一样,这个outputStream也是一个抽象类,需要通过子类实例化来引用对象。不管是字节流读取写入,还是字符流读取写入读取,都有多种方法,根据需要来调用指定的方法。相对路径是项目目录的路径,实际上项目目录当中并没有这个文件,但是程序还是运行成功了。只有实现了这个接口的方法才能放在try()里面自动调用close;这些存储当中只有硬盘能实现存储持久化。InputStream 概述。
2025-07-10 13:40:22
149
原创 JavaEE-初阶-多线程初阶
但是之前的方法有缺陷,会导致cpu资源被占用严重,所以在判断到队列为空和时间未到都会开始阻塞,而时间未到的阻塞还会另外设定一个时间,这个时间就是距离实际执行方法时间的差值,尽管线程被唤醒可能还是没有到执行时间,因为是优先级队列,唤醒的是最早执行的,那么也不过是再进去while循环做一次时间和队列为空判断,对于长时间循环而言,这些消耗微不足道。比较重要的就是判断后台线程和判断是否存活的方法。在一些情况下,有要求,线程要有结束的先后顺序,那么就可以通过线程的对象,来等待线程,来做到线程的结束顺序变为可控。
2025-07-09 14:53:21
664
原创 Java-数据结构-集合框架
算法就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。
2025-07-04 10:55:14
320
原创 JavaEE-MyBatis-Plus
MyBatis-Plus(简称 MP) 是⼀个 MyBatis 的增强⼯具, 在 MyBatis 的基础上只做增强不做改变, 为简化开发. 提⾼效率⽽⽣ 特性: mybatis支持的数据库mybatis-plus都支持添加MyBatis-Plus和MySQL依赖, 配置数据库连接信息类名也需要和表名对应,或者使用大驼峰写法,或者要与表名完全一样,不然没法匹配。在创建出来的SpringBoot⼯程中,在src下的test⽬录下,已经⾃动帮我们创建好了测试类 ,我们可以直接使⽤这个测试类来进⾏测试. 编写⼏个
2025-06-30 14:38:28
700
原创 JavaEE-Spring事务和事务的传播机制
事务是⼀组操作的集合, 是⼀个不可分割的操作.事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时成功, 要么同时失败.为什么需要事务?事务的操作Spring 中事务的实现创建好数据库后就是配置数据库相关的配置,创建实体类,创建mapper的sql语句和服务层代码,就是先完成和数据库的通信准备。就是mybatis的步骤。Spring 编程式事务(了解)Spring 声明式事务 @Transactional@Transactional 详解。
2025-06-27 14:30:17
261
原创 JavaEE-统一功能处理
实现强制登录的功能, 后端程序根据Session来判断⽤⼾是否登录, 但是实现⽅法是⽐较⿇烦的需要修改每个接⼝的处理逻辑需要修改每个接⼝的返回结果接⼝定义修改, 前端代码也需要跟着修改有没有更简单的办法, 统⼀拦截所有的请求, 并进⾏Session校验呢, 这⾥我们学习⼀种新的解决办法: 拦截器拦截器快速入门什么是拦截器?拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执行预先设定的代码.
2025-06-25 15:04:25
485
原创 JavaEE-Mybatis进阶
之前的插⼊⽤户功能,只是有⼀个 gender 字段可能是选填项,如果有多个字段,⼀般考虑使⽤标签结合标签,对多个字段都采取动态⽣成的⽅式。注册分为两种字段:必填字段和⾮必填字段,那如果在添加⽤户的时候有不确定的字段传⼊,程序应该如何实现呢?这个时候就需要使⽤动态标签 来判断了,⽐如添加的时候性别 gender 为⾮必填字段,具体实现如。prefix:表⽰整个语句块,以prefix的值作为前缀。suffix:表⽰整个语句块,以suffix的值作为后缀。结尾,在最后拼接好的字符串还会以。多个 组织的语句都以。
2025-06-23 11:23:30
273
原创 JavaEE-Mybatis初阶
什么是MyBatis什么是MyBatisMyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发。MyBatis本是 Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了google code,并且改名为MyBatis。2013年11⽉迁移到Github创建项目时添加依赖上面有提到⼀个词:持久层持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的.
2025-06-22 17:00:44
403
原创 Spring Boot日志
SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范,标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤门面模式(外观模式)SLF4J是⻔⾯模式的典型应⽤(但不仅仅使⽤了⻔⾯模式).⻔⾯模式定义⻔⾯模式(Facade Pattern)⼜称为外观模式, 提供了⼀个统⼀的接⼝, ⽤来访问⼦系统中的⼀群接⼝.其主要特征是定义了⼀个⾼层接⼝, 让⼦系统更容易使⽤.
2025-06-19 15:52:37
746
原创 SpringBoot配置文件
配置文件作用配置文件作用计算机上有数以千计的配置⽂件, 我们使⽤的绝⼤多数软件, ⽐如浏览器, 微信, Idea, 甚⾄电脑, ⼿机, 都离不开配置⽂件. 我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上, ⽐如C:\Users, C:\Windows⽂件夹, 以及各种 *.config, *.xml ⽂件。
2025-06-19 10:35:11
910
原创 JavaEE-Spring-IoC&DI
什么是 IoCSpring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因.但是这个概念相对来说, 还是⽐较抽象.⽤⼀句更具体的话来概括Spring, 那就是: Spring 是包含了众多⼯具⽅法的 IoC 容器容器是⽤来容纳某种物品的(基本)装置。⽣活中的⽔杯, 垃圾桶, 冰箱等等这些都是容器.之前接触的容器List/Map -> 数据存储容器Tomcat -> Web 容器什么是 IoC。
2025-06-18 14:30:22
1017
原创 JavaEE-Spring-Web-Mvc
学习Spring MVC, 其实就是学习各种Web开发需要⽤的到注解@RequestMapping: 路由映射@RequestParam: 后端参数重命名@RequestBody: 接收JSON类型的参数@PathVariable: 接收路径参数@RequestPart: 上传⽂件@ResponseBody: 返回数据@CookieValue: 从Cookie中获取值@SessionAttribute: 从Session中获取值@RequestHeader: 从Header中获取值。
2025-06-17 14:29:13
775
原创 JavaEE-SpringBoot
可以看到, Spring让Java程序更加快速, 简单和安全. Spring对于速度、简单性和⽣产⼒的关注使其成为世界上最流⾏的Java框架。Spring官⽅提供了很多开源的项⽬, 覆盖范围从Web开发到⼤数据, Spring发展到了今天, 已经形成了⾃⼰的⽣态圈. 我们在开发时, 也倾向于使⽤Spring官⽅提供的技术, 来解决对应的问题.
2025-06-11 17:43:46
789
原创 JavaEE-Maven
当我们开发了⼀个项⽬之后, 代码需要经过编译, 测试, 打包, 发布等流程, 每次代码的修改, 都需要经过这些流程, 如果代码反复调试修改, 这个流程就需要反复进⾏, 就显得特别⿇烦,, ⽽Maven 给我们提供了⼀套简单的命令来完成项⽬的构建.⽐如 A 依赖B, B依赖C, 那么 A项⽬引⼊B 的同时, 也需要引⼊C, 如果我们⼿动管理这个依赖, 这个过程就会⽐较⿇烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的。但使⽤maven的话, 就可以避免管理所需依赖的关系。
2025-06-11 15:02:06
1259
原创 同步&异步日志系统-日志器的实现
该模块是针对于前几个模块的整合,也是直接面向客户所使用的,对于该模块的实现,我们基于:继承+建造者设计模式来实现;因此我们需要抽象出一个日志器抽象基类;该基类提供的接口如下:1、 debug();//站在用户的角度来说就是我只需要调用该接口就能完成debug版本日志消息的输出;
2025-02-17 20:31:23
757
原创 同步&异步日志系统-日志落地模块的实现
功能:将格式化完成后的日志消息字符串,输出到指定的位置扩展:支持同时将日志落地到不同的位置位置分类:1.标准输出2.指定文件(时候进行日志分析)3.滚动文件(文件按照时间/大小进行滚动切换)扩展:支持落地方向的扩展用户可以自己编写一个新的落地模块,将日志进行其他方向的落地。实现思想1.抽象出一个落地基类2.之后根据落地方向从基类派生出不同落地方向的子类3.使用工厂模式进行创建与表示分离。
2025-02-17 17:41:07
455
原创 同步&异步日志系统-日志实用类、等级类、消息类的实现
先将日志系统所包含的所有日志等级分类枚举出来UNKKNOW=0,位置默认的等级DEBUG: 调试等级的日志INFO: 提示等级的日志WARN: 警告等级的日志ERROR: 错误等级的日志FATAL: 致命错误等级的日志OFF: 任何日志都不能输出每一个项目当中都会设置一个默认的日志输出等级,只有输出的日志等级大于等于默认限制等级的时候才可以进行输出。
2025-02-17 16:51:27
344
原创 同步&异步日志系统-设计模式
在继承类时,务必重写⽗类中所有的⽅法,尤其需要注意⽗类的protected⽅法,⼦类尽量不要 暴露⾃⼰的public⽅法供外界调⽤。使⽤建议:⼦类必须完全实现⽗类的⽅法,孩⼦类可以有⾃⼰的个性。⽤例:跑步运动员类-会跑步,⼦类⻓跑运动员-会跑步且擅⻓⻓跑, ⼦类短跑运动员-会跑步且 擅⻓短跑。⽤例:⽼师让班⻓点名--⽼师给班⻓⼀个名单,班⻓完成点名勾选,返回结果,⽽不是班⻓点 名,⽼师勾选。⽤例:修改密码,不应该提供修改⽤⼾信息接⼝,⽽就是单⼀的最⼩修改密码接⼝,更不要暴 露数据库操作。
2025-02-17 16:51:04
583
原创 同步&异步日志系统-项目介绍
为什么需要⽇志系统⽣产环境的产品为了保证其稳定性及安全性是不允许开发⼈员附加调试器去排查问题, 可以借助⽇志系统来打印⼀些⽇志帮助开发⼈员解决问题上线客⼾端的产品出现bug⽆法复现并解决, 可以借助⽇志系统打印⽇志并上传到服务端帮助开发⼈员进⾏分析对于⼀些⾼频操作(如定时器、⼼跳包)在少量调试次数下可能⽆法触发我们想要的⾏为,通过断 点的暂停⽅式,我们不得不重复操作⼏⼗次、上百次甚⾄更多,导致排查问题效率是⾮常低下,可 以借助打印⽇志的⽅式查问题。
2025-02-17 16:44:44
346
原创 linux-线程
进程是操作系统分配资源的基本单元。线程是操作系统调度的基本单元。进程是由线程构成的,每一个进程至少会有一个线程。线程是在进程的地址空间内运行。线程也需要被管理,但是线程的控制块是被保存在用户区当中的共享区内。tid就是该线程块的地址。线程比进程更加轻量化。已初始化和未初始化的全局变量是共享的。线程在切换的时候,不需要切换进程地址空间这些结构,只需要切换一部分的寄存器和栈,信号表等就可以。线程也有自己的lwp。lwp与pid相同的那个线程被称为主线程,也就是第一个线程。
2024-12-07 16:42:52
824
原创 linux-信号
信号是发给进程的,进程接收到信号后会有内置的对应信号的处理行为。信号是操作系统发给进程的,用户只是让操作系统发给进程。进程必须要有识别信号,并且处理对应信号的能力。即使没有收到信号,也需要直到该信号的处理方法。在进程收到信号时,也许并不适合立即处理该信号,会把这个信号保存起来,合适的时候再进行处理。也就是说,在信号产生时到信号被处理之前,会有时间窗口,进程具有分辨哪些信号被处理了的能力。自定义信号处理用户也可以将信号处理的动作自定义,让这个信号的处理按照自己定义的来执行。前台进程和后台进程。
2024-11-26 15:11:50
580
原创 linux-进程间通信
进程的通信是两个或多个进程实现数据的交互,让不同的进程看到同一份资源,而这份资源是由操作系统创建管理的。如果让其中一个进程来提供的话会破坏该进程的独立性,因为这个进程内部的数据可以被其他进程看到,那这个独立性就遭到了破坏。
2024-11-24 16:25:13
969
原创 linux-inode和软硬链接
硬链接并不是一个独立的文件它与原文件时同一个inode,并且文件的硬链接数会打印在文件权限的右边,可以看到temo.c的硬链接数是2.这个统计硬链接数的属性,本质上就是一个引用技术,保存着映射指向该inode的文件名有几个。软链接既然是独立的文件,那么也有自己独立的数据块,这个数据块里保存着的就是指向的文件的路径,对软链接调用就是通过软链接保存的路径去找到目标文件进行调用。软链接是一个独立的文件,因为软链接和原文件的inode是不相同的,每一个文件只有一个inode。ln -s 原文件 软连接文件名。
2024-11-15 15:57:12
329
原创 linux-缓冲区
调用系统调用接口是需要时间成本的,如果使用缓冲区,存储的字符串到一定长度再调用系统调用,能够有效减少调用系统调用的次数。这个缓冲区是语言设置的,缓冲区满足条件就用系统调用接口write将缓冲区的内容刷新到linux内核中。也就是说这些要写入的库函数,里面必定封装了对应的系统调用。每个被打开的文件都有对应的语言级别的缓冲区。无缓冲:直接刷新 fflush可以直接刷新。全缓冲:缓冲区满了刷新 文件写入是全缓冲。行缓冲:有\n刷新 显示器就是行刷新。缓冲区保存在各自的文件流FILE对象里。
2024-11-14 14:49:04
375
原创 linux-文件的读写
操作系统一切皆文件,访问文件实际上就是访问硬件,因为文件都保存在硬件上,或者文件就是硬件,而要访问硬件,就需要操作系统提供的系统调用,所以c/c++函数中关于访问硬件设备,基本上是由系统调用封装而成的。
2024-11-13 09:23:50
646
原创 linux操作系统进程
linux操作系统是对下的软硬件进行管理,为了能够对上提供稳定,快速,安全的服务而诞生的软件。广义上的操作系统是包含搭载在操作系统上的软件和函数库等文件的。狭义上的操作系统就是操作系统内核,进行进程管理,文件管理,驱动管理,内存管理而linux对用户提供服务的方式是系统调用接口,系统调用接口实际上是用c语言实现的操作系统内部的函数调用。因为操作系统不相信用户,所以就用有限制的系统调用接口来为用户提供服务。
2024-11-03 10:14:19
981
原创 linux-gcc/g++ 和makefile的使用
gcc和g++是一款编译语言的编译器,可以在linux上编译c语言文件和c++文件。格式:gcc/g++ 目标文件在不加任何选项的时候,编译出来的可执行文件名默认是 a.out。
2024-10-29 17:22:12
873
原创 linux文件的权限
在linux操作系统中,账户分为两类,一类是普通用户,一类是超级用户,普通用户在许多方面受权限约束,而超级用户几乎不受约束。
2024-10-27 15:59:44
940
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1