自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 问答 (1)
  • 收藏
  • 关注

原创 WebRTC入门教学和一对一通话实现

WebRTC入门教学和使用nodejs实现一对一通话

2022-11-24 11:52:39 1507 1

原创 Springboot为啥要有第二级缓存

在递归创建其他依赖的组件前,会将未完成的组件作为放入ObjectFactory类的一个实现类里面,生成他的代理对象objectProxy,然后把这个ObjectFactory对象放入到二级缓存里面,通过调用getEarlyBeanReference来获取未完成的bean,如果这个对象没有被aop动态代理,就直接返回原来的对象,如果被aop代理过,就为这个对象生成代理对象,然后返回的就是代理对象。,只要获取到它的地址,然后赋值过来就行了,所以它是在一级缓存还是在二级缓存并不重要。

2022-09-06 01:34:48 1801 3

原创 继承HashMap的R内部添加一个拥有泛型的data保存数据,data丢失的问题

R的核心代码:注意:如果调试的时候不会直接显示这个data的值这是因为idea在调试的时候,在这里显示的数据是通过调用对象的toString方法实现的,而R继承了HashMap,hashmap重写的toString方法只会显示map里面的内容,不会显示data的数据,但是这并不代表data没有值我们打印出来的值也没有data这个属性,因为sout打印对象时,也是调用的对象的toString方法,但是我们却可以通过getData拿到这个data的值,所以其实data的值在这里面,只是没有打印出来,并且解析

2022-07-09 19:14:41 892

原创 谷粒商城——第一篇 前后端基础

谷粒商城基础篇

2022-07-02 13:50:52 2168

原创 Dubbo——经典RPC框架

Dubbo经典之作

2022-06-04 19:44:25 1760

原创 SpringCloud学习

springcloud-netflix的简单学习

2022-06-04 15:51:30 496

原创 23种设计模式

本文包含了23种设计模式,以及他们的适用场景

2022-06-03 10:03:44 348

原创 Hadoop和MapReduce

Hadoop学习https://www.bilibili.com/video/BV1Qp4y1n7EN?p=21概述Hapdoop是用于分布式存储海量数据的架构,它可以将一个很大的文件的数据分散到多个服务器中进行存储。Hdfs:负责数据存储DataNode:用于实际存放数据NameNode:记录一个文件的数据存放在哪个DataNode的哪个位置上,是一个文件在集群查找的目录。NameNode2:作为NameNode的从节点,进行定期对主节点的数据进行备份,防止主节点故障后数据丢失,同时可以在主

2022-05-31 13:19:02 878

原创 设计模式——代理模式

代理模式(对原有方法进行增强)基本介绍类图通过调用代理对象来间接使用模板对象的方法,代理对象和目的对象需要实现相同的接口或者继承相同的父类代理对象会对原有方法进行补充静态代理(手动编写代理类)我们自己手动创建一个代理对象,和目标类实现相同的接口或者父类,然后对目标类的每一个方法进行改写编写一个接口:public interface ITeacher { void teach();}编写目标类:public class Teacher implements ITeache

2022-05-31 11:12:15 175

原创 设计模式——享元模式

享元模式(如果缓存中有从缓存中拿,缓存没有就创建)场景:网站外包我们想要一个网站以不同的形式展现出来。传统做法是每需要一个网站就new一个这样的对象出来,这样的缺点是系统内部会出现大量相似的对象,使得系统效率降低,要是网站出现了bug,所有创建的对象都要重新创建,维护起来会很麻烦。假如有多个用户想要以新闻的形式发布,我们可以让这些用于共享一个以新闻发布的网站,这样就不用重复地创建相同的对象,网站要是出现了bug,修改起来也会很容易,这也就是下面所说的享元模式享元模式也叫蝇量模式,常用于系统底层优

2022-05-31 11:10:36 382

原创 设计模式——外观模式

外观模式(将一个场景中的功能进行封装)场景:家庭影院使用DVD,音响等设备的功能传统方案:创建对应的对象直接使用外观模式:提供一个统一的客户端来调用这些设备完成一个功能需要许多组件配合完成,如果我们直接在main方法写回显得杂乱无章。我们可以将实现的每一个功能封装到一个外观类中,由这个外观类来负责完成这个场景的具体功能,而客户端通过调用外观类的方法来完成具体的的功能。这里外观类起到协调组件配合使用的功能实现其实下面这个一看就知道什么意思了,实现一个功能需要多个组件配合使用,我们可以把这个流程

2022-05-31 11:08:38 94

原创 设计模式——组合模式

组合模式(为一对多提供统一的接口)也叫部分整体模式,创建对象组的树形结构,将对象组合成树形结构以表示“整体-部分”的层次关系场景:院校展示每个学校有多个学院,每个学院有多个系按照这个思路,使用List来实现即可,实际上上一节我们也用到了组合模式实现编写一个Organization类作为所有组件的抽象,里面给出方法的默认实现(适配器模式)@Datapublic abstract class Organization { String name; String descripti

2022-05-31 11:07:22 83

原创 设计模式——装饰者模式

装饰者模式(动态添加新功能)场景:星巴克咖啡装饰者模式装饰者模式实现package DecoratorMode.DecoratorMode1;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@AllArgsConstructor@NoArgsConstructorabstract class Coffee{ protected int pri

2022-05-31 11:06:24 131

原创 设计模式——桥接模式

桥接模式(将一个继承关系变为组合关系)场景:多种手机现在有三类手机,每种类别的手机有三种不同的品牌,每种手机都有相同的功能(打电话等),现在需要我们创建调用某种手机的call方法传统实现:类似工厂模式,先按照手机类别创建三个类,每个类下根据品牌创建具体的手机对象可以实现功能,但是当类很多时会出现组合爆炸桥接模式桥接模式本质是使用合成复用原则将其中的一个继承变为了组合,使得代码的耦合度降低public interface Brand { void call();}publ

2022-05-31 11:04:41 3676 4

原创 设计模式——适配器模式

适配器模式(将不同类统一成一个类)适配器是让原来不能兼容的两个类可以兼容,可以交Adapter也可以叫Wrapper实现原理:调用源接口的方法来实现新接口的功能场景:手机充电手机充电需要5V电源,而现在只有220V的电源。解决方案是给电源添加一个适配器类适配器(通过继承src来适配)(不推荐)实现:手机(需要5V电压来充电)public class Phone { void charging(Voltage5V v){ if(v.getVoltage5V()==

2022-05-31 11:03:25 162

原创 设计模式——建造者模式

建造者模式(将产品,建造者,建造规范,指挥者分开)场景:盖房子直接想到的方式是将房子的属性,建造房子的步骤,以及调用这些步骤建造的过程都封装到一个类里面,具体的步骤设计为抽象方法,交给子类去实现这样做将房子和建造房子的过程耦合在了一起,我们将建造房子的过程分离出来,就成了建造者。这样职责更加分明,耦合度更低建造者模式的四个角色product就是我们需要建造的产品Builder是建造者的抽象层,用于定义有哪些建造的步骤,具体的实现由子类来完成。同时会调用Director来建造产品而不关心产品

2022-05-28 11:54:42 169

原创 设计模式——原型模式

原型模式(实现clone)场景:克隆羊创建10只姓名为Tom,年龄为1,颜色为白色的羊原始方法(灵活性差)@Data@NoArgsConstructor@AllArgsConstructorclass Sheep{ private String name; private Integer age; private String color;}public class CloneSheepDemo { public static void main(Stri

2022-05-28 11:53:34 74

原创 设计模式——原型模式

原型模式(实现clone)场景:克隆羊创建10只姓名为Tom,年龄为1,颜色为白色的羊原始方法(灵活性差)@Data@NoArgsConstructor@AllArgsConstructorclass Sheep{ private String name; private Integer age; private String color;}public class CloneSheepDemo { public static void main(Stri

2022-05-28 11:26:44 75

原创 设计模式——工厂模式

工厂模式(将创建对象的逻辑封装进工厂)场景:披萨订购简单工厂模式不要把大量的分支杂糅到业务代码中,把这种逻辑分离出来把根据……创建……的逻辑封装到一个工厂里面,然后调用工厂拿到对象(这里要依赖接口)。这个工厂可以使用聚合从外部传入,由驱动类创建工厂对象。如果这个工厂是唯一的,我们可以将创建对象的方法也设置为static,这样就可以直接调用这个类的方法而不需要创建这个工厂对象静态工厂,缺点是披萨属性特别多时,需要编写大量的披萨类,维护起来比较麻烦抽象工厂简单工厂只有一个工厂,要把所有的Bean的

2022-05-28 11:25:26 86

原创 设计模式——单例模式

单例模式(全局唯一)懒加载等到使用的时候采取加载这个对象单例模式就是全局只有一个对象,对外提供一个访问接口,一般适用于例如线程池这样的重量级对象。package 单例模式;public class Single { private static Single instance; Single(){ } public Single getSingle() { if(instance==null) {

2022-05-28 11:23:42 341

原创 Spring容器的创建和初始化流程

IOC容器的创建流程 @Override public void refresh() throws BeansException, IllegalStateException { //上锁 synchronized (this.startupShutdownMonitor) { //通知监听器开始创建IOC容器 StartupStep contextRefresh = this.applicationStartup.start("spring.conte

2022-05-28 11:18:13 372

原创 Springboot注解——Spring容器中Bean的生老病死

Spring注解驱动开发官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/IOC容器@Configuration和@Bean@Configurationpublic class TestConfig { @Bean("pet") Pet pet01(){ return new Pet("LTH",20); }}@Configuration声明为配置类,作用等价于配置文

2022-05-26 12:32:10 552

原创 Springboot启动流程

Springboot启动原理@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}我们前面讲解了启动类上的@SpringBootApplication,下面来说说SpringApplication.run(DemoApplica

2022-05-26 12:28:59 453

原创 Springboot核心功能和奇技淫巧(下)

Springboot底层原理(2)使用原生的Servlet使用注解声明为Servlet组件@WebServlet("/my")public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.get

2022-05-26 12:27:10 688

原创 Springboot核心功能和奇技淫巧(上)

springboot的常用技巧,全部手打(除了源代码部分来自idea)

2022-05-26 12:21:07 744

原创 Springboot基础原理

Springboot2基础https://blog.csdn.net/u011863024/article/details/113667634入门案例MAVEN的settings.xml中需要添加如下配置文件:<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name&

2022-05-26 12:09:07 151

原创 Spring 日志整合

日志整合log4j2.xml<?xml version="1.0" encoding="UTF-8"?><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--Configuration 后面的 status 用于设置 log4j2 自身内部的信息输出,可以不设置,当设置成 trace 时,可以看到 log4j2 内部各种

2022-05-26 12:07:13 281

原创 Spring 事务

事务数据库中一个基本的逻辑单元,这些操作要么都做要么都不做ACID特性原子性,一致性,隔离性,持久性事务操作xml中配置DataSourceTransactionManager,在里面注入之前配置的JDBCTemplate对象引入tx命名空间开启事务注解,指定事务管理器然后在需要事务的方法上加上@Transactional注解声明这是一个事务加在类上则为这个类的所有方法申明为事务,底层用AOP实现注解参数propagation 事务传播行为isolation 事务隔离级别设置事

2022-05-26 12:06:05 48

原创 Spring原理 原生JDBC使用

JDBCJDBCTemplateSpring对JDBC进行封装依赖:mysql-connectordruid(连接池)Spring-orm(用于整合mybatis)txproject struct 添加jar包使用流程1.配置数据库连接池,可以在xml 或者property配置2.注入到Spring容器中3.开启扫描路径4.自动装配,注入属性后即可使用:Tips:@Controller 加上这个注解后,url映射才能生效@Mapper 加上这个注解后,里面的字段必须已

2022-05-26 11:38:48 266

原创 Spring原理 AOP XML版

AOP原理概念:面向切面编程不通过修改源代码增加程序的功能使用动态代理来实现(1)有接口的动态代理(JDK动态代理)类和代理类都是这个接口的实现类用代理对象来增强方法使用Proxy类来创建代理对象:ClassLoader loader:类加载器Class<?>[] interfaces:类实现的接口(一个类可以实现多个接口)InvocationHandle h 需要实现这个接口来实现动态代理的具体逻辑将源对象作为构造方法的参数传入,作为代理类的属性,实现里面的invoke

2022-05-26 11:28:44 71

原创 Spring原理 —— IOC容器注解版

Spring5 框架概述轻量级来源框架解决企业应用开发的复杂性核心部分: IOC AOPIOC 创建对象的过程交给SpringAOP 面向切面编程特点方便解耦,简化开发,创建对象和调用对象的过程分开AOP支持方便程序的测试方便集成各种优秀框架降低J2EE API的使用难度方便的事务操作IOCSpring创建bean的方式在xml文件中设置bean的class(全路径名)和id(名称)然后用ClassPathXmlApplication读取配置文件,然后即为创建了一个Spri

2022-05-26 11:22:41 265

原创 Gin框架学习笔记

GIN框架学习前言这是一场试炼,战胜了过去的自己才能见到更好的未来!DAY 1今天用了一整天时间来学习go语言的语法。大致做了以下内容。搭建GO语言环境用vscode写代码时,需要打开一个工程文件夹,其中只能包含一个main.go文件和一个package main。当需要引入第三方的包时,需要在当前目录下用go mod init <工程名字> 来创建一个go.mod文件来存储第三方下载的包的依赖关系,然后再main.go中写代码即可。写一个最简单go语言程序= 表示赋值:= 表

2022-04-21 16:04:09 1203

原创 树状数组讲解(简洁好懂)

树状数组树状数组是用于维护前缀和的数据结构,支持单点的查询和修改,如果要修改区间的值则需要用到差分数组。数字太大时可以在排序后进行离散化。树状数组原理详解:首先我们需要知道lowbit(x)是返回x的最后一个1,例如二进制数10100就返回100.树状数组的核心思想是将一个数分解成若干零件,在维护的时候,直接对这些零件进行处理,在查询的时候再将这些零件组装成我们想要的数。我们先来看看树状数组是如何查询的:ll query(int p){ ll ans = 0; for (; p; p -=

2021-09-18 13:59:07 814

原创 2021-08-22

Add or Multiply 1Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 150 Accepted Submission(s): 36Problem Description前两段和第五题相同,但你不需要阅读第五题就可以完成这个题目。你有一个数字 x 和若干个操作,每个操作是 +ai 或者乘 ×ai 中的一种。你可以重新排列

2021-08-22 13:24:37 147

原创 2021-03-17

Problem Description上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后

2021-03-17 12:17:54 76

原创 判断有多少个素数

Problem DescriptionGive you a lot of positive integers, just to find out how many prime numbers there are.InputThere are a lot of cases. In each case, there is an integer N representing the number of integers to find. Each integer won’t exceed 32-bit si

2021-02-22 16:21:41 234

原创 Problem A

Problem ATime Limit : 10000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 10 Accepted Submission(s) : 5Font: Times New Roman | Verdana | GeorgiaFont Size: ← →Problem DescriptionThe Children’s Day has passed for

2021-02-22 15:29:19 69

原创 非常可乐

非常可乐Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 10 Accepted Submission(s) : 9Font: Times New Roman | Verdana | GeorgiaFont Size: ← →Problem Description大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因

2021-02-17 02:26:32 344

空空如也

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

TA关注的人

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