自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

quwenjing_blog

在校大学生

  • 博客(53)
  • 收藏
  • 关注

原创 理解ADT与OOP

目录ADT1.概念2.组成3.意义OOP1.概念2.核心概念ADT与OOP的关系

2022-06-18 23:19:00 243 1

原创 设计模式是怎样解决设计问题的,在实际编程中是如何使用的?

信息专家模式是面向对象设计的最基本原则。通俗点来讲,就是一个类只干该干的事情,不该干的事情不干。在系统设计时,需要将职责分配给具有实现这个职责所需要信息的类。信息专家模式对应于面向对象设计原则中的单一职责原则。 例如:常见的网上商店里的购物车(ShopCar),需要让每种商品(SKU)只在购物车内出现一次,购买相同商品,只需要更新商品的数量即可。如下图:针对这个问题需要权衡的是,比较商品是否相同的方法需要放到那里类里来实现呢?分析业务得知需要根据商品的编号(SKUID)来唯一区分商品,而商品编号是唯一存在

2022-06-18 23:12:58 489

原创 从类、API、框架三个层面学习如何设计可复用软件的学习心得

目录软件复用软件复用的分类 三方面讲述软件复用 1.类 2.API2.框架框架的复用类型总结早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。是面向对象程序设计实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。其实就是一种引用数据类型,它的本质是代表一种数据类型,是作为现实生活中一类具有共同特征事物的抽象,类的内部封装了

2022-06-18 23:03:09 301

原创 MIT 6.031 Reading5 : Version Control学习心得

目录版本控制系统介绍版本控制系统的类型1. 本地版本控制系统2. 集中式版本控制系统3. 分布式版本控制系统版本控制术语版本控制系统的功能Git简介如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等

2022-06-18 16:01:09 241

原创 设计模式 | 抽象工厂模式(Abstract Factory)

目录抽象工厂模式(Abstract Factory)1. 抽象工厂模式解决2. 抽象工厂类图UML3. 抽象工厂模式的主要角色4. 代码实现5. 抽象工厂方法再探究6. 优缺点7. 适用示例抽象工厂模式(Abstract Factory)解决工厂方法模式的问题:一个具体工厂只能创建一类产品,而实际过程中一个工厂往往需要生成很多的产品,这种可以采用抽象工厂模式。1. 抽象工厂模式解决定义:提供一个创建一系列相关或者互相依赖对象的接口,无需指定他们的具体的类

2022-01-16 21:15:00 517

原创 设计模式 | 工厂方法模式(Factory Method)

工厂方法模式目录工厂方法模式1. 工厂方法模式介绍2. 工厂方法模式类图UML3. 工厂方法模式角色说明4. 代码实现5. 工厂模式再探究6. 优缺点7. 应用场景1. 工厂方法模式介绍定义:工厂方法模式是对简单工厂模式进一步的抽象化,好处是可以使系统不修改原来代码的情况下引进新的产品,即满足开闭原则。定义一个用于创建对象接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类中。2. 工厂方法模式类图UML3. 工厂方法模式角色说明抽象工厂

2022-01-13 22:07:38 955

原创 设计模式 | 简单工厂模式(SimpleFactoryPattern)

简单工厂模式目录简单工厂模式1. 简单工厂介绍2. 简单工厂类图UML3. 简单工厂角色说明4. 代码实现5. 优缺点6. 使用场景1. 简单工厂介绍简单工厂有一个具体的工厂类,可以生产不同的产品,属于创建型设计模式。注意:简单工厂模式 不属于23种设计模式之列2. 简单工厂类图UML3. 简单工厂角色说明简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类的创建产品类的方法可以被外界直接访问,创

2022-01-07 14:07:04 355

原创 设计模式 | 创建型设计模式---单例模式

创建型模式特点和分类关注的问题:创建对象,将对象的创建和使用分离,这样的目的可以降低代码的偶尔度的问题单例模式、工厂模式、抽象工厂模式、建造者模式、原型模型单例模式(Singleton Pattern)单例介绍定义:单例模式(Singleton Pattern):保证一个类只有一个实例,并提供一个访问他的全局访问点单例类图:单例中包含的角色:单例类:包含一个实例且能自行创建这个实例类单例模式特点:1、单例类只有一个实例对象2、单例对象必须由单例类自

2022-01-02 16:51:55 160

原创 设计模式 | 23种设计模式及六大原则

1. 设计模式的概念它是解决特定问题的一系列的套路,是前任代码设计的经验总结,一套被反复使用,被多数人知晓,代码设计经验的总结。目的是提高代码的可用性,代码的可读性和可靠性。2. 设计模式的优点代码复用:减少开发时间, 提高开发效率; 简洁易维护:便于代码的可读性和代码的维护; 设计模式是开发工程化,规范化3. 23种设计模式创建型模式(对象是如何产生或创建出来等问题),共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式(主要说明对象之间的关

2021-12-13 12:15:36 298

原创 Redis | Redis高可用---主从复制、哨兵模式

Redis高可用介绍高可用基础-主从复制Redis的复制功能是支持将多个数据库之间进行数据同步,主数据库可以进行读写操作,当主数据库数据发生改变时会自动同步到从数据库,从数据库一般是只读的,会接收注数据库同步过来的数据。一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库默认情况下,每台服务器都是主节点,可以通过配置来设置Redis节点称为从数据库复制原理1、当启动一个从节点时,它会发送一个psync(此同步过程分为全量复制和部分复制)的命令给主节点2

2021-12-04 23:22:56 750

原创 Redis | Redis缓存穿透、缓存击穿、缓存雪崩问题及解决方案

目录缓存问题1. 缓存穿透---查不到解决方案2. 缓存击穿---量太大,缓存过期解决方案3. 缓存雪崩解决方案缓存问题1. 缓存穿透---查不到缓存穿透是指用户想查询一个数据,发现Redis中没有,也就是缓存没有命中,就向持久性数据库发起查询,发现数据库也没有这个数据,于是查询失败了。当用户请求很多的情况下,缓存没有命中,数据库也没有数据,会给数据库造成很大的压力,这就是缓存穿透。解决方案第一种解决方案:使用布隆过滤器使用布隆过滤器之后,将存储

2021-12-01 22:41:07 5894

原创 Redis | Redis中如何保证缓存数据和数据库数据一致

缓存数据插入时机:对于服务器而言,查询数据步骤:首先到缓存查询数据,如果数据存在则直接获取数据返回 如果缓存不存在,需要查询数据库,从数据库获取数据并插入缓存,将数据返回 当第二次查询时,后续查询操作就可以查询缓存数据更新数据时操作:1、先删除缓存,再更新数据库进行更新数据库数据时,先删除缓存,然后更新数据库,后续的请求再次读取数据时,会从数据库中读取数据更新到缓存。存在问题:删除缓存之后,更新数据库之前,这个时间段内如果有新的请求过来,就会从数据库中读到旧的数据写入缓存,

2021-12-01 22:22:02 2148

原创 Redis | Redis配置文件介绍

目录redis配置文件介绍包含NETWORK:网络GENERAL:通用SNAPSHOTTING 快照REPLICATION 复制,主从复制SECURITY 安全CLIENTS 客户连接限制MEMORY MANAGEMENT 内存管理内存淘汰策略有哪些?APPEND ONLY MODE 模式 aop配置redis配置文件介绍启动的时候,就是通过读取配置文件来启动配置文件unit单位是对大小写不敏感。包含NETWORK:网络bin

2021-12-01 14:23:46 215

原创 Redis | Java连接Redis

Java连接Redis在java的体系下,有三个常用的Redis的客户端:jedis、Redisson和Lettuce。Redis的客户端:Jedis:其API提高了比较全面的Redis命令的支持,暴露了Redis比较底层的Redis的API,和Redis的命令保持一致。Redisson:实现了分布式可扩展的Java的数据结构,提供了分布式相关的操作。比如分布式锁、分布式集合,但是和jedis相比,不支持字符串操作,不支持排序,事务等。Lettuce:用于线程安全的同步,异步和响应

2021-11-30 22:26:37 137

原创 Redis | Redis内存淘汰策略、过期策略

内存维护的方案主要是过期策略和内存淘汰策略过期策略:用户处理过期的缓存数据;内存淘汰策略:用于在内存空间不足时需要额外申请空间的数据。1. Redis内存淘汰策略在redis作为缓存使用过的程中,当内存不足时(内存使用已经超过mexmemory参数设定值时),需要处理新写入的且需要申请格外的空间的数据,Redis根据配置进行缓存淘汰大部分keys,保证后续写入能够成功。1.1 内存维护解决方案在Redis的配置文件中redis.conf 中memeory managent.

2021-11-30 21:46:46 439

原创 Redis | Redis事务

目录Redis事务事务命令Redis的事务机制总结:Redis事务Redis事务可以一次执行多个命令,一次性,顺序性,排他性的执行一个队列中的一系列的命令。Redis不保证原子性:在Redis中,单条命令是原子执行的,但是事务不保证原子性,且没有回滚的概念。事务中任意命令执行失败,其余的命令仍会执行。Redis事务是没有隔离级别的概念:在发送exec命令前,批量的操作都只是被放入队列,并不会实际执行,所以在事务内的查询是看不到事务里的更新的,且事务外查询也不能看到

2021-11-29 17:25:24 103

原创 Redis | Redis持久化

目录Redis持久化RDB(Redis DataBases):内存快照触发RDB方式优点缺点AOF(Append Only File):日志文件AOF回写策略优点缺点Redis持久化数据安全性问题,将内存数据存储到磁盘当中,即持久化问题RDB(Redis DataBases):内存快照内存快照:就是指内存中数据在某一时刻的状态记录。RDB是Redis中默认的持久化方案。RDB持久化会将内存中的数据写入到磁盘中,在指定的目录下生产一个dump.rdb文

2021-11-26 20:37:01 695

原创 BIO、NIO、AIO的比较

目录BIO、NIO、AIO的比较1. 释义BIO:同步阻塞IO模型NIO:同步非阻塞IO模型AIO:异步非阻塞IO模型2. 应用场景BIO、NIO、AIO的比较1. 释义BIO:同步阻塞IO模型在JDK1.4之前网络通信使用的都是BIO模型,BIO模型中accept()、read()、write()、Connection()都会阻塞,BIO要同时支持处理多个客户端的连接,就必须使用多线程,即每次accept阻塞等待客户端连接对象socket,为每一个socke

2021-11-26 17:18:40 459

原创 网络编程 NIO

NIO的介绍NIO(New IO)同步非阻塞IO模型,采用了事件驱动的思想来实现一个复用器,来解决大并发的问题。读、写、可连接、可接受等操作在BIO中是阻塞处理,在NIO中,将其设置为非阻塞,并将这些操作视为事件,当关注某个事件时,将其注册到复用器Selector(本质上使用底层操作系统提供的IO复用器:select、poll,epoll)。由系统来监听事件是否准备就绪, 当socket有读或者可写操作时,系统会通知相应的用户程序来处理,将流读取到缓冲区或者写入到系统中。一个复用器上是可以注册多

2021-11-26 17:15:02 504 1

原创 网络编程 AIO

AIO模型介绍AIO(Asynchronous I/O) 异步非阻塞模型, 在java jdk.17版本开始支持AIO,AIO模型需要操作系统的支持。AIO最大的特性是异步能力,对socket和I/O起作用。与NIO模型不同,一读写操作为例,只需直接调用read和write的API即可。对于读操作:当有流可读时,系统会将可读的流传入到read方法的缓冲区,并通知应用程序。读写都是异步的,完成之后会主动调用回调函数。在JDK 1.7中,aio也称为nio.2.0,主要在java.nio.

2021-11-25 21:30:00 806

原创 Reids | Redis的特殊类型命令---geospatial、hyperloglog、bitmaps

Redis的三种特殊类型geospatial 地理空间主要用于存储地理位置信息,并对存储的信息进行操作,适用场景如定位、附近的人等。城市经纬度查询:城市经纬度查询-国内城市经度纬度在线查询工具geoadd:添加位置添加地理位置 格式:geoadd key 纬度 经度 名称(两极直接无法添加)geopos:返回给定名称经纬度返回给定名称的纬度和经度 格式:geopos key 名称geodist:返回给定位置距离返回两个给定位置之间的距离 格式:geo

2021-11-21 20:47:55 553

原创 Redis | Redis的底层数据结构实现、命令应用场景

目录应用场景1、缓存2、数据共享3、分布式锁4、全局ID5、计数器6、限流7、Top问题8、消息队列9、用户关注、推荐模型10、排行榜底层数据结构实现stringlisthashsetintsetzset应用场景1、缓存一般使用String类型。缓存热点数据(weibo 热搜)、对象缓存、页面缓存,降低数据库压力2、数据共享redis相对于引用是独立服务,可以在多个应用之间共享例如:共享session3、

2021-11-21 19:55:22 507

原创 Java-IO模型中的BIO模型

java中的IO模型之BIO网络编程模型介绍,服务端、客户端的操作

2021-11-20 20:15:00 85

原创 Redis | Redis基本数据类型命令---Set集合、SortSet集合

目录Redis的基本数据类型1. Set:集合saddsmemberssismemberscardsremsrandmemberspopsmovesinter、sunion、sdiff2. SortSet:有序集合zaddzrangezrangebyscorezremzcardzcountRedis的基本数据类型1. Set:集合redis中的set是String类型的无序集合,数据是无序的,并且属性元素是唯一的,意味着.

2021-11-19 23:01:32 1518

原创 网络编程 | Socket编程

socket编程网络编程:服务端需要等待客户端连接,服务需要先于客户端进行启动;网络编程通信必须需要IP和端口。服务端流程:服务端需要先启动ServerSocket实例 绑定端口 等待客户端的连接 进行读写操作 关闭资源服务端(Server.java):public class Server { public static void main(String[] args) { ServerSocket serverSocket = null...

2021-11-19 21:30:00 947

原创 IO模型 | 常见的五种IO模型介绍

常见IO模型对于一次 IO 访问,它会经历两个阶段:等待数据准备就绪 (Waiting for the data to be ready);将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)。举例来说:读函数:分为等待系统可读和真正的读。写函数:分为等待网卡可以写和真正的写。说明:等待就绪的阻塞是不使用 CPU 的,是在“空等”。而真正的读写操作的阻塞是使用 CPU 的,真正在“干活”,而且这个过程非常快,属于

2021-11-19 21:15:00 4031 2

原创 IO模型 | IO读写原理、同步/异步、阻塞/非阻塞介绍

目录1. Java IO读写原理1.1 内核缓冲区和进程缓冲区1.2 Java 读写IO的底层流程2. 同步/异步、阻塞/非阻塞介绍2.1 同步(Synchronization) / 异步(Asynchronization)2.2 阻塞(Block) / 非租塞(NonBlock)1. Java IO读写原理内存是存储和CPU打交道的数据,在Linux上内存主要分为两部分(内核部分和用户部分)。先强调一个基础知识:read系统调用,并不是把数据直接从物理设备,读数据

2021-11-19 11:30:00 330

原创 Javaweb | cookie实现两周内免登录

目录1. 问题2.解决思路3. 解决步骤3.1 编写登录页面(lg.jsp)3.2 编写一个登录成功页面(success.jsp)3.3编写登录失败页面(fail.html)3.4 写一个cookie的类用来存储从页面获取的用户信息(Login.java)3.5在登录页面(lg.jsp)添加检索Cookie是否存在4. 运行结果1. 问题在用户登陆界面中,输入账号和密码,登陆成功时,进入欢迎页面。在登录时,如果勾选了两周内免登录,则在下次登录时,可以不用输入密..

2021-11-18 16:46:05 4519 4

原创 Redis | Redis基本数据类型命令---String、Hash、List

目录Redis的基本数据类型1. String:字符串setgetexistsappendstrlenincr decrincrby decrbygetrangesetrangesetex ttlsetnxmset mgetgetset2. Hash:哈希hset、hgethmset hmgethgetallhdelhlenhexistshkeys hvalshincrbyhsexnx3. List:列表

2021-11-18 15:48:48 704

原创 SSM | SSM整合案例(详细步骤)

目录SSM 整合1. 整合思路2. 数据准备2.1 创建表user2.2 添加数据3. 依赖Jar包4. 开发dao层4.1 在mybatis-config.xml文件中4.2 mapper.java接口(UserMapper.java)4.3 Mapper.xml文件(UserMapper.xml)5. 实体类(User.java)6. spring-config.xml7. Service层(UserService.java)8. Contrlle

2021-11-18 12:26:44 536

原创 Redis | Redis优点、操作、为什么执行的很快?

目录Redis 介绍课程内容1. 了解Redis1.1 Redis介绍1.2 Redis的优点1.3 Redis的基本操作selectdbsizekeysflushdb flushall1.4 Redis的单线程的Redis 介绍课程内容了解Redis Redis支持的数据类型:5种基础类型、3种特殊类型,基础命令介绍 数据持久化:两种方法 Redis的事务 Redis.conf详解 Jedis:通过Java代码操作Redis Redis问

2021-11-15 21:39:53 283

原创 SpringMVC | SpringMVC中映射器和适配器的两种配置方式

目录处理器映射器和处理器适配器的配置1. 基于注解形式实现2. 基于非注解形式实现处理器映射器和处理器适配器的配置SpringMVC中对组件的配置形式主要有两种,注解形式和非注解形式,下面来具体演示介绍这两种方式。给定需求:展示用户列表pojo类用户类(User):public class User { private Integer id; private String name; private String password; p

2021-11-14 19:21:45 1320

原创 SpringMVC | SpringMVC使用Demo

目录Spring MVC使用Demo1. 创建SpringMVC项目2. 引入SpringMVC依赖jar包3. 在web.xml配置文件中配置前端控制器4. 创建spring-mvc.xml配置文件5. 编写controller层6. 编写jsp页面7. 将服务部署到容器中8. 启动服务器Spring MVC使用Demo按照项目创建步骤从零开始搭建一个SpringMVC项目,结构目录如下:1. 创建SpringMVC项目打开Idea,选择n.

2021-11-14 16:09:52 1119 1

原创 SpringMVC | 初识SpringMVC

目录SpringMVC介绍Web服务演进过程Spring MVC的架构SpringMVC介绍在JavaEE开发中,项目从上到下分层为应用层,web层,业务层,持久层 。SpringMVC属于web层的框架,spring主要是业务层,而mybatis框架是持久层所使用。SPringMVC是一个基于Java代码来实现了web MVC设计模式来设计的框架,基于请求/响应的事件驱动模型的思想实现(B/S模型)。Web服务演进过程在早期 Java Web 的开发中,统一把显示层(

2021-11-13 23:17:59 896

原创 MyBatis | MyBatis中模糊查询LIKE的三种方式

模糊匹配字符串模糊匹配:使用 like 关键字%:表示一个或者是多个字符_:表示一个字符需求:查询student表中用户名含L的所有用户select * from student where Sname like %L%;写法1:直接将通配符拼接在参数上selectStudentByName("%L%")写法2:使用MySQL提供的concat函数MySQL还提供字符串拼接的方法:concat(x1,x2) ->x1x2 <sele..

2021-11-09 20:55:19 3867

原创 连接池介绍

连接池的作用在JDBC请求MySQL数据库的SQL操作都要进行连接、释放的过程,在并发量大请情况下,频繁的连接和释放势必会消耗系统性能。可以使用连接复用的方式来让连接重复使用连接池工作原理:数据库连接池的基本思想为数据连接简历一个缓冲池,预先在池中放入一定数量的连接,当有数据库操作时,在池中获取一个空闲的连接来支持数据库操作,当当前的数据库操作完成之后,将连接放回池中,连接池的优势:1、资源复用2、更快的响应速度3、新的资源分配手段4、统一的连接关系,避免数据

2021-11-09 20:44:44 1006

原创 动态SQL的使用

动态SQL动态SQL根据条件,动态的对SQL进行拼接组装。执行原理:使用OGNL从SQL参数中计算表达式的值,根据表达式的值,动态的拼接SQL,以此完成动态SQL功能。标签:如;if标签,where、trim、foreach等标签。if标签:通过student中的条件查询对象或对象结果。通过id查询:select * from student where SID= ?通过name查询:select * from student where Name= ?通过id和name

2021-11-07 20:51:00 289

原创 使用#{}和${}的区别

#{}和${}的区别1.引入日志依赖 <!--log4j日志依赖--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependen...

2021-11-03 07:30:00 524

原创 mybatis的接口绑定方法

mybatis的接口绑定方法mybatis实现了接口绑定,使用会更加方便,接口绑定:mybatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,就可以直接调用接口方法使用。接口绑定方式:通过注解绑定,直接在方法上面加上@Select ,@Update等注解,在注解里包含SQL绑定; 通过XML里面SQL绑定,需要在xml配置文件里的namespace必须指定接口的全限定名1. XML方法的方法1.1 创建接口文件public interface StudentMapp

2021-11-02 19:30:00 1013

原创 JVM的内存结构介绍

JVM的内存模型1. Java的内存布局在java中,内存布局分了5大块,分别是堆区,虚拟机栈、本地方法栈、方法区、程序计数器。其中,绿色区域是线程共享区域、红色区域是线程私有空间。内存区域的维度:介绍、作用、是否线程共享、生命周期、异常问题(OOM)2. 程序计数器2.1 概念程序计数器是一个较小的内存空间区域,是用来表示当前线程执行的字节码的行号指示器。由字节码解释器工作时通过改变计数器的值来选择下一条要执行的字节码执行。对于分支、循环、异常等都需要依赖计数器来指定执行位置,该区域

2021-11-02 09:58:23 209

空空如也

空空如也

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

TA关注的人

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