- 博客(56)
- 收藏
- 关注
原创 设计模式、线程状态、上下文切换、线程安全(JAVA并发第二期)
synchronized,即俗称的【对象锁】,它采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。默认情况下,java进程需要等待所有线程都运行结束才会结束,但是守护线程是一种特殊线程,只要其他非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。一个静态同步方法,一个普通同步方法:不会等待,因为锁的是不同对象(Class对象 vs 实例对象)两个普通同步方法,一个对象:线程会等待,因为锁的是同一个对象。
2025-12-28 15:50:01
710
原创 CSS3(Web前端开发笔记第二期)
Flex布局也叫弹性布局,是浏览器提倡的布局模型,非常适合结构化布局,提供了强大的空间分布和对齐能力。标准流也叫文档流,指的是标签在页面中默认的排布规则,例如块元素独占一行,行内元素可以一行显示多个。font是一个复合属性,即属性的简写方式,一个属性对应多个值的写法,各个属性值之间用空格隔开。在父级元素内容的最后一个添加一个块级元素,设置CSS属性clear:both。content:“”,用来设置伪元素的内容,如果没有内容,则引号留空即可。作用:布局网页的时候,根据标签的显示模式选择合适的标签摆放内容。
2025-12-20 18:42:52
796
原创 基本概念(JAVA并发第一期)
操作系统中有一个组件叫做任务调度器,将cpu的时间片(windows下时间片最小约为15毫秒)分给不同的线程使用,只是由于cpu在线程间(时间片很短)的切换非常快,人类感觉是同时运行的。当Context Switch发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条jvm指令的执行地址,是线程私有的。如果这时没有同优先级的线程,那么不能保证让当前线程暂停的效果。
2025-12-18 16:31:49
792
原创 Linux介绍(Linux基础笔记第一期)
虚拟机(Virtual Machine, 简称 VM) 就是通过软件模拟出来的、拥有一套完整硬件功能(如 CPU、内存、硬盘、网卡等)的“虚拟计算机”。每个小房间(虚拟机) 里都有自己独立的家具(操作系统和应用程序),住在里面的人(操作系统)完全感觉不到其他房间的存在,也互不干扰。虚拟机软件 是一个神奇的魔法,能在这个大房子里隔出几个独立的、功能齐全的小房间。内核提供系统最核心的功能,如:调度CPU、调度内存、调度文件系统、调度网络通讯、调度IO等。操作系统是计算机软件的一种。
2025-10-19 16:35:30
231
原创 实现全局唯一id、分布式锁、Redisson、消息队列(Redis笔记第三期)
Redisson是一个在Redis的基础上实现的java驻内存数据网络(In-Memory Data Grid),他不仅提供了一系列的分布式的java常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。不过要注意的是,当队列中没有消息时RPOP或LPOP操作会返回null,并不像JVM的阻塞队列那样会阻塞并等待消息。主从一致性:如果Redis提供了主从集群,主从同步存在延迟,当主宕机时,如果从并同步主中的锁数据,则会出现锁实现。分布式锁的核心是实现多进程之间互斥,常见的有三种。
2025-10-19 15:13:24
683
原创 替代session、缓存、一些问题(Redis笔记第二期)
解决方案:给不同的key的TTL添加随机值、利用Redis集群来提高服务的可用性、给缓存业务添加降级限流策略、给业务添加多级缓存。缓存雪崩是指在同一时段内大量的缓存key同时失效或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力。缓存有利有弊,在提升查询速度的同时也会带来数据一致性问题,当数据库数据更新而缓存未更新时就会导致数据不一致。缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会失效,这些请求都会打到数据库。互斥锁:没有额外的内存消耗、保证一致性、实现简单;
2025-10-12 14:38:14
614
原创 Redis介绍、数据结构(Redis笔记第一期)
Redis的SortedSet是一个可排序的Set集合,与java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。Redis的Set结构与java中的HashSet类似,可以看做是一个value为null的HashMap,因为也是一个hash表,因此具备与HashSet类似的特征:无序、元素不可重复、查找快、支持交集、并集、差集等功能。
2025-09-24 10:40:14
868
原创 ES(springcloud笔记第五期)
传统数据库(如MySQL)采用正向索引,例如给id创建索引,id则会形成B+树,用户根据id查询时会非常快,但是根据别的字段如Title字段则不适用,而且模糊匹配时会进行逐条扫描,效率很慢。复合查询可以将其它简单查询组合起来,实现更加复杂的搜索逻辑,例如:fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名。映射:索引当中文档的字段约束信息,类似于表的结构约束;倒排索引:对文档内容分词,对词条创建索引,并记录词条所在文档的信息,查询时先根据词条查询到文档id,然后获取到文档。
2025-09-10 15:59:41
869
原创 MQ、WQ、发布订阅模型(springcloud笔记第四期)
该协议与语言和平台无关,更符合微服务中独立性的要求。Topic Exchange与Direct Exchange类似,区别在于RoutingKey必须是多个单词的列表,并且以。2.在consumer服务中,编写两个消费者方法,分别监听fanout.queue1和fanout.queue2。2.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2。资源浪费:调用链中的每个服务在等待响应的过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源。
2025-09-04 09:09:02
910
原创 注册中心、Ribbon、Fegin、Gateway网关(springcloud笔记第二期)
Fegin运行自定义配置来覆盖默认配置,一般需要配置的就是日志级别;
2025-08-21 13:17:31
751
原创 Docker(springcloud笔记第三期)
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是将上述文件打包的过程部署一个java应用的步骤准备一个Linux容器安装JRE并配置环境变量拷贝jar包运行jar包。。。。。。。。。。。。。。构建有一个java镜像的步骤准备一个Linux运行环境安装JRE并配置环境变量拷贝jar包编写运行脚本docker会把构建镜像的每一步产生的文件分别打成压缩包,作为镜像的一部分,而不是将每一步产生的文件全部整成一个包作为镜像。
2025-08-13 14:41:28
978
原创 微服务介绍(springcloud笔记第一期)
微服务是一种经过良好架构设计的分布式架构方案微服务架构特征:单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发面向服务:微服务对外暴露业务接口自治:团队独立、技术独立、数据独立、部署独立隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题不同微服务,不要重复开发相同业务微服务数据独立,不要访问其他微服务的数据库微服务可以将自己的业务暴露为接口,供其他微服务调用。
2025-08-01 18:02:52
148
原创 事务处理与AOP(web后端笔记第四期)
而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程。在Spring中用JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息 ,如目标类名、方法名、方法参数等。作用:将当前方法交给spring进行事物管理,方法执行前,开启事务;事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。场景:案例部分功能运行较慢,定位执行耗时较长的业务方法,此时需要统计每一个业务方法的执行耗时。
2025-07-18 15:47:51
1084
原创 登录校验与异常处理(web后端笔记第三期)
拦截器:作用于Spring MVC层面,只拦截进入Spring MVC处理器的请求(即Controller的请求)。其定义了一种简洁的,自包含的格式,用于在通信双方以json数据格式安全的传输信息。会话:用户打开浏览器,访问web端的资源,会话建立,直到有一方断开连接,会话结束。会话跟踪:一种维护浏览器状态的方法,服务器需要多次识别请求是否来自同一服务器,以便在同一次会话的多次请求间共享数据。备注:放行后访问对应资源,资源访问完成后,还会回到Filter中,并执行放行后的逻辑。
2025-07-14 14:25:50
972
原创 MyBatis(Web后端开发第二期)
Lombok是一个实用的java类库,能够通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。lombok会在编译时,自动生成对应的java代码,我们使用lombok时,还需要安装一个lombok的插件(idea自带)XML映射文件的名称与Mapper接口名称名字一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)而且会自动去除子句开头的AND或者OR。
2025-06-16 21:32:02
1041
1
原创 Maven基础、HTTP协议、请求响应(Web后端笔记第一期)
注意:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错,如果该参数是可选的,可以将required属性设为false。路径参数:通过请求URL直接传递参数,使用{…集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系。简单实体对象:请求参数名与形参对象属性名相同,定义接收即可,即将参数封装为一个实体类。数组参数:请求参数名与形参参数名称相同且请求参数为多个,定义数组类型形参即可接收参数。
2025-04-25 10:33:56
804
原创 HTML5(Web前端开发笔记第一期)
p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解语法:双标签:标签通常成对出现,中间包裹内容单标签:只有开始标签,没有结束标签<>里面 放英文字母(标签名)结束标签比开始标签多"/"举例嵌套关系:一个标签里面包含了其他标签的写法并列关系:两个平级别的标签举例标题标签标签名:h1~h6(双标签)特点:文字加粗、字号逐渐缩小、独占一行(换行)段落标签一般用在新闻段落、文章段落、产品描述信息等标签名:p(双标签)特点:独占一行、段落之间存在间隙文本格式化标
2025-03-09 11:51:12
2662
原创 存储对象、锁(MySQL笔记第五期)
用户定义是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用’@变量名’使用就可以,其作用域为当前的会话赋值SET @变量名 = 值;SET @变量名 := 值;(推荐)SELECT @变量名 := 值;SELECT 字段名 INTO @变量名 FROM 表名;使用SELECT @变量名;举例-- 赋值set @myName = '张三';#(推荐)set @myGender := '男',@myHobby:= '玩游戏';-- 使用。
2025-03-01 16:33:39
1214
原创 存储引擎、索引、SQL优化(MySQL笔记第四期)
当字段类型为字符串(varchar、text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时会浪费大量的磁盘IO,影响查询效率.此时可以只将字符串的一部分进行前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。InnoDB:是MySQL的默认存储引擎,支持事务、外键,如果应用对于事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那InnoDB存储引擎是很适合的操作。如果索引了多列(联合索引),要遵守最左前缀法则。
2025-02-24 18:24:00
1272
原创 多表查询、事务(MySQL笔记第三期)
在项目开发中,进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系,基本上分为三种:一对一、一对多(多对一)、多对多。一对一:比如用户和用户详情的关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率;多表查询分类:连接查询(内连接、外连接[左外连接、右外连接]、自链接)、子查询。联合查询,即把多次查询的结果合并起来,形成一个新的查询结果集。
2025-02-15 13:35:37
1313
原创 SQL基础、函数、约束(MySQL第二期)
日期类型有:DATE(日期值,格式 YYYY-MM-DD)、TIME(时间值或持续时间,格式:HH-MM-SS)、YEAR(年份值,格式:YYYY)、DATETIME(混合日期和时间值,格式:YYYY-MM-DD HH-MM-SS)、TIMESTAMP(混合日期和时间值、时间戳,格式:YYYY-MM-DD HH-MM-SS)分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。插入数据时,指定的字段顺序要和值的顺序是一 一对应的。排序方式:ASC(升序,默认值)、DESC(降序)
2025-01-23 12:39:04
1142
原创 数据库概念(MySQL第一期)
关系数据库(RDBMS)是指建立在关系模型基础上,由多张相互连接的二维表组成的数据库。相互连接是指根据一张表中对应的数据来获取另一张表中所对应的数据。SQL:Structured Query Language(SQL),是操作关系数据库的编程语言,定义了一套操作关系数据库的统一。数据库管理系统:DataBase Management System(DBMS),是操作和管理数据库的大型软件。优点:使用表存储数据,格式统一,便于维护;数据库:DataBase(DB),是存储数据的仓库,数据是有组织的进行存储。
2024-12-30 16:29:17
410
原创 API(JAVA笔记第四十一期)
API:应用程序编程接口(Application Programming Interface)简单来说API就是别人写好的东西,不用我们自己编写,可以直接拿来使用(关于API的完整叙述请自行百度)而Java API指的就是JDK中提供的各种功能的Java类这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
2024-12-18 19:48:25
806
原创 多线程(JAVA笔记第三十九期)
当我们将任务给线程池的时候,线程池会自动创建一个线程来执行该任务,执行完后再将线程存回线程池中;理想情况下刚开始服务员应该在厨师处(即生产者抢到了CPU的执行权),然后厨师将食物(数据)给服务员,服务员再递交给顾客,顾客吃完后(处理完数据)服务员又回到厨师处循环往复。2.提交任务时,线程池会创建一个新的线程对象,任务执行完毕后,线程会归还给线程池;当厨师把菜做好给服务员后,看到顾客睡着了,便用大嗓门将顾客唤醒(3.但是如果提交任务时,线程池中没有空闲的线程,也无法创建新的线程时,任务就会排队等待。
2024-12-16 16:38:19
736
原创 爬虫(JAVA笔记第四十期)
正则表达式可以用来校验字符串是否满足一定的规则,并用来校验数据格式的合法性;也可以在一段文本中查找满足要求的内容。一般来说,一个正则表达式由字符类和数量词合组成。应用场景:用来对手机号码、身份证的格式验证。爬虫就是在一大段信息中获取自己想要的数据。
2024-12-04 18:38:51
400
原创 网络编程(JAVA笔记第三十八期)
采取这种架构的软件只需要一个浏览器,用户通过不同的网址。特殊IP:127.0.0.1,也叫做localhost,是回送地址也称本地回环地址,也称为本机IP,永远只会寻找当前所在的本机。IP(Internet Protocol):即互联网协议地址,也叫IP地址,是分配给上网设备的数字标签。广播,即一对多,一台电脑能给局域网中所有的电脑发送数据。:数据在网络上的传输的规则,常见的协议有UDP、TCP、http、https、ftp。网络编程,就是在网络通信协议下,不同计算机上运行的程序,进行的数据传输。
2024-11-21 16:46:44
2384
原创 IO流(下) (JAVA笔记第三十七期)
p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解目录高级流缓冲流字节缓冲流字符缓冲流转换流序列化流/对象操作输出流反序列化流/对象操作输入流高级流上述的字节流和字符流称为基本流,除此之外的都称为高级流缓冲流字节缓冲流。缓冲流只是将基本流进行了一个包装,所以起作用的还是基本流字符缓冲流其有两个特有的方法举例public static void main(String[] args) throws IOException {
2024-11-19 16:04:59
386
原创 IO流(上) (JAVA笔记第三十六期)
write方法的参数是整数,但实际上是写到本地文件中的是ASCII码表上对应的字符。write方法的参数是整数,但实际上是写到本地文件中的是字符集上对应的字符。按字节进行读取,遇到中文时一次读取多个字节,读取后解码,返回一个整数。操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中。操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。如果文件不存在就会创建一个新的文件,但是要保证父级路径存在。一次读取一个字节,读取出来的是数据在ASCII上对应的数字。字符流的底层其实就是字节流;
2024-11-18 17:16:18
698
原创 File(JAVA笔记第三十五期)
注意:由于每个人的路径不同,所以不要直接CV到自己的IDEA中运行,灵活变通。File对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径。这个路径可以是存在的,也可以是不存在的。路径分为两种:绝对路径、相对路径。也分为这两种:父级路径、子级路径。
2024-11-14 12:17:44
321
原创 方法引用(JAVA笔记第三十四期)
局限性:不能引用所有类中的成员方法,是跟抽象方法的第一个参数有关。这个参数是什么类型的,那么就只能引用这个类中的方法。方法引用是指把已经有的方法拿过来用,当作。该种方法引用有以下规定。其他类对象::方法名。super::方法名。
2024-11-12 17:10:14
355
原创 Stream流(JAVA笔记第三十三期)
双列集合keySet()或者entrySet()只能先转成Set单列集合在使用Stream流。Stream流可以比作工厂的流水线。所以Stream流的使用步骤为。前三个方法举例说明如下。
2024-11-10 13:18:05
536
原创 集合进阶(JAVA笔记第二十九期)
/创建一个HshMap集合,键是学生对象,值是籍贯//存储后遍历//要求:同姓名、同年龄的被认为是一个学生//核心:HashMap的键位置如果存储的是自定义对象,需要重写hasnCode和equals方法Student student1 = new Student("张三",18);Student student2 = new Student("李四",23);Student student3 = new Student("张三",18);
2024-11-09 13:39:37
1034
原创 异常(JAVA笔记第三十二期 )
意义:让控制台的报错信息更加见名知意步骤定义异常类写继承关系空参构造带参构造举例//NameFormat:当前异常的名字:表示姓名格式化问题//Exception:表示当前类是一个异常类//写继承关系//运行时:RuntimeException。核心:表示由于参数错误而导致的问题//编译时:Exception。核心:提示程序员检查本地信息。
2024-11-07 14:32:25
1020
原创 集合进阶------泛型(JAVA笔记第三十期)
泛型,顾名思义,广泛的类型,使用泛型可以帮助我们在一个特定的类、接口或集合、方法中操作不同数据类型的对象。如果不使用泛型限制集合的数据类型的话,因为多态的弊端性我们将无法调用集合中元素的特有方法,如果强制转化就会出现下面这种情况。的方法才是泛型方法,泛型类中使用了泛型的成员方法(比如将泛型变量作为方法形参)并不是泛型方法。如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。将类定义为泛型则类的所有方法都可使用泛型,但将方法定义为泛型则只有该方法能使用泛型。
2024-11-04 22:03:44
1064
原创 面向对象进阶(下)(JAVA笔记第二十五期)
public abstract 返回值类型 方法名(参数列表);public abstract class 类名{}接口用interface来定义格式public interface 接口名{}接口与类之间是实现关系,通过implements关键字表示格式public class 类名 implements 接口名{}注意:一个类可以实现单个接口(单实现),也可以实现多个接口(多实现)举例public class 类名 implements 接口名1,接口名2{}
2024-10-24 15:34:15
2167
原创 面向对象进阶(中)(JAVA笔记第二十四期)
缺点:由于构造代码块先于构造方法执行,这就导致所有构造方法执行前都要执行构造代码块,因此想要只运行某个不含有重复代码的构造方法而不运行构造代码块是不可能实现的,使得。定义方法的时候,使用父类的类型作为参数,可以接收所有的子类对象,体现了多态的扩展性和便利。final翻译为"最终的",一旦被final修饰了,就表示最终的、不可改变的。成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法。特殊:如果方法中的代码是抽取其他方法中共性的代码,这个方法一般也私有。
2024-10-20 10:07:49
804
原创 面向对象进阶(上)(JAVA笔记第二十三期)
继承就是子类继承父类的特征和行为,使得子类对象具有父类的方法,或子类从父类继承方法,使得子类具有父类相同的行为。原因:子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据。书写格式:在继承体系中,子类出现了和父类一模一样的方法声明,我们就称子类这个方法是重写的方法。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。即先在本类中查找有无该方法,若有就调用本类的该方法,若没有就调用父类中继承下来的该方法。
2024-10-19 14:09:09
832
原创 集合基础(JAVA笔记第二十一期)
/泛型:限定集合中存储数据的类型。//用E表示泛型ArrayList 变量 = new ArrayList();
2024-10-17 13:56:23
324
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅