<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[mhfaaa的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/mhfaaa</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mhfaaa]]></copyright><item><title><![CDATA[MQ消息队列]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/118495303</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/118495303</guid><author>mhfaaa</author><pubDate>Mon, 05 Jul 2021 17:50:08 +0800</pubDate><description><![CDATA[MQ消息队列
消息队列中间件是分布式系统中重要的组件，主要解决应用解耦，异步消息，流量削锋等问题，实现高性能，高可用，可伸缩和最终一致性架构。
使用场景主要有异步处理，应用解耦，流量削锋和消息通讯四个场景
目前使用较多的消息队列有ActiveMQ，RabbitMQ，ZeroMQ，Kafka，MetaMQ，RocketMQ
JMS消息服务
JMS（JAVA Message Service，java消息服务）API是一个消息服务的标准/规范，允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分]]></description><category></category></item><item><title><![CDATA[缓存(入门)]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/118367913</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/118367913</guid><author>mhfaaa</author><pubDate>Thu, 01 Jul 2021 17:21:26 +0800</pubDate><description><![CDATA[缓存
为了减少数据库的访问次数，以浪费内存为代价，提高查询效率，所以引入缓存

优化顺序： 内存&gt;网络&gt;磁盘
问题：双写问题

缓存常见的实现方案

memcached
redis   11万读/8万写

Redis缓存


使用场景

降低后端负载
加速请求响应
大量写合并为批量写



Redis缓存策略

LRU、LFU、FIFO
超时剔除
主动更新



缓存粒度控制

通用性：全量属性更好
占用空间：部分属性更好
代码维护：表面上全量属性最好



缓存穿透问题

现象：请求访问red]]></description><category></category></item><item><title><![CDATA[Shiro(2)]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/118391355</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/118391355</guid><author>mhfaaa</author><pubDate>Thu, 01 Jul 2021 17:20:02 +0800</pubDate><description><![CDATA[Shiro
shiro是apache旗下一个Java安全框架，它将软件系统的安全认证相关的功能抽取出来，实现用户身份认证、权限授权、加密、会话管理等功能，组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权、加密，会话管理等功能的开发，可为任何应用提供安全保障，降低系统成本
Shiro功能

登录/身份认证，登录失败次数限制
对用户执行访问控制，如: 判断用户是否拥有角色admin，判断用户是否拥有访问的权限
在任何环境下使用Session API。例如CS程序
加密，保证数据安全；
]]></description><category></category></item><item><title><![CDATA[shiro框架]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/118367835</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/118367835</guid><author>mhfaaa</author><pubDate>Wed, 30 Jun 2021 19:28:20 +0800</pubDate><description><![CDATA[shiro框架
什么是shiro
shiro是apache旗下一个Java安全框架，它将软件系统的安全认证相关的功能抽取出来，实现用户身份认证、权限授权、加密、会话管理等功能，组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权、加密，会话管理等功能的开发，可为任何应用提供安全保障，降低系统成本
基础RBAC
Shiro功能

登录/身份认证，登录失败次数限制
对用户执行访问控制，如: 判断用户是否拥有角色admin，判断用户是否拥有访问的权限
在任何环境下使用Session API。]]></description><category></category></item><item><title><![CDATA[NoSQL-Redis]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/118367788</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/118367788</guid><author>mhfaaa</author><pubDate>Wed, 30 Jun 2021 19:26:07 +0800</pubDate><description><![CDATA[NoSQL
NoSQL即Not Only SQL不仅仅是SQL，泛指非关系型的数据库
NoSQL数据库可以分为4大类：键值key-value存储、列存储、文档数据库、图形数据库
CAP原理
CAP原则又称CAP定理，指的是在一个分布式系统中， Consistency（一致性）、 Availability（可用性）、Partition tolerance（分区容错性），三者不可得兼。CAP原则是NOSQL数据库的基石。
分布式系统的CAP理论：理论首先把分布式系统中的三个特性进行了如下归纳：

一致性C：在分]]></description><category></category></item><item><title><![CDATA[SpringBoot Redis]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/118367755</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/118367755</guid><author>mhfaaa</author><pubDate>Wed, 30 Jun 2021 19:24:21 +0800</pubDate><description><![CDATA[SpringBoot Redis
两种应用开发方式：SpringBoot cache提供的注解和Spring data提供的RedisTemplate。
RedisTemplate的用法
依赖
&lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifac]]></description><category></category></item><item><title><![CDATA[springboot开发]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/117567869</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/117567869</guid><author>mhfaaa</author><pubDate>Fri, 04 Jun 2021 17:18:40 +0800</pubDate><description><![CDATA[使用Thymeleaf+SpringBoot开发用户管理系统
Spring Boot支持FreeMarker、Groovy、Thymeleaf和Mustache四种模板解析引擎，官方推荐使用Thymeleaf。
口令加密问题
口令解密存放是有必要的，可以避免廉政危机
###加密算法

对称加密


优点：算法公开、计算量小、加密速度快、加密效率高、可逆
缺点：双方使用相同钥匙，安全性得不到保证

算法: 在对称加密算法中常用的算法有：DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、ID]]></description><category></category></item><item><title><![CDATA[Spring 原理]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116536793</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116536793</guid><author>mhfaaa</author><pubDate>Sat, 08 May 2021 18:06:26 +0800</pubDate><description><![CDATA[一、 IoC(Inversion of control): 控制反转
1、IoC：

概念：控制权由对象本身转向容器；由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心：bean工厂；在Spring中，bean工厂创建的各个实例称作bea

二、AOP(Aspect-Oriented Programming): 面向方面编程
1、 代理的两种方式：　　　　
静态代理：

针对每个具体类分别编写代理类；
针对一个接口编写一个代理类；　　　　
动态代理：
针对一个方面编写一个InvocationHa]]></description><category></category></item><item><title><![CDATA[Spring（1）]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116499227</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116499227</guid><author>mhfaaa</author><pubDate>Fri, 07 May 2021 18:03:44 +0800</pubDate><description><![CDATA[IoC/DI和AOP是什么
DI是依赖注入
IOC,控制反转
所谓控制反转，即依赖关系的获取方式（controll）反过来了。所谓依赖，从程序的角度看，就是比如A要调用B的方法，那么A就依赖于B，反正A要用到B，则A依赖于B。所谓反转（inversion），你必须理解如果不反转，会怎么着，因为A必须要有B，才可以调用B，如果不反转，意思就是A主动获取B的实例：B b = new B()，这就是最简单的获取B实例的方法（当然还有各种设计模式可以帮助你去获得B的实例，比如工厂、Locator等等），然后你就可以]]></description><category></category></item><item><title><![CDATA[Java Spring框架(一)]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116481540</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116481540</guid><author>mhfaaa</author><pubDate>Fri, 07 May 2021 09:35:09 +0800</pubDate><description><![CDATA[Java Spring框架是什么？它有哪些好处？
Spring 是另一个主流的 Java Web 开发框架，该框架是一个轻量级的应用框架，具有很高的凝聚力和吸引力。Spring 框架因其强大的功能以及卓越的性能而受到众多开发人员的喜爱。
Spring 是分层的 Java SE/EE full-stack 轻量级开源框架，以 IoC（Inverse of Control，控制反转）和 AOP（Aspect Oriented Programming，面向切面编程）为内核，使用基本的 JavaBean 完成以前只]]></description><category></category></item><item><title><![CDATA[MyBatis分页插件]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116133467</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116133467</guid><author>mhfaaa</author><pubDate>Sun, 25 Apr 2021 17:09:55 +0800</pubDate><description><![CDATA[目录MyBatismybatis核心配置反向映射配置测试测试结果
MyBatis
mybatis核心配置
&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd"&gt;
&lt;configuration&gt]]></description><category></category></item><item><title><![CDATA[Mybatis原理]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116133365</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116133365</guid><author>mhfaaa</author><pubDate>Sun, 25 Apr 2021 17:02:56 +0800</pubDate><description><![CDATA[Mybatis原理


加载mybatis全局配置文件（数据源、mapper映射文件等），解析配置文件，MyBatis基于XML配置文件生成Configuration对象和一个个MappedStatement（包括了参数映射配置、动态SQL语句、结果映射配置），其对应着&lt;select | update | delete | insert&gt;标签项
SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory，用来开启SqlSession
]]></description><category></category></item><item><title><![CDATA[MyBatis反向映射配置文件]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116062173</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116062173</guid><author>mhfaaa</author><pubDate>Fri, 23 Apr 2021 16:52:42 +0800</pubDate><description><![CDATA[第一步
pom.xml中加入插件：
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.]]></description><category></category></item><item><title><![CDATA[RowBounds]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116061856</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116061856</guid><author>mhfaaa</author><pubDate>Fri, 23 Apr 2021 16:45:22 +0800</pubDate><description><![CDATA[RowBounds
软分页


Mybatis可以通过传递RowBounds对象，来进行数据库数据的分页操作，然而遗憾的是，该分页操作是对ResultSet结果集进行分页，也就是人们常说的逻辑分页，而非物理分页。效率低下，不建议使用。


RowBounds实现分页（本质，在sql层面将所有数据查出来，最后在Java层面利用RowBounds对象，实现分页）


参数

offset属性是偏移量，即从第几行开始读取记录，起始位是0；
limit是限制条数，如果要取第一条数据应该是"select * from]]></description><category></category></item><item><title><![CDATA[BeanUtils工具类]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116061344</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116061344</guid><author>mhfaaa</author><pubDate>Fri, 23 Apr 2021 16:37:46 +0800</pubDate><description><![CDATA[BeanUtils
commons-beanutils 是apache commons子项目中的一个软件包，其主要目的是利用反射机制对 JavaBean 的属性进行处理。
Maven：
&lt;dependency&gt;
  &lt;groupId&gt;commons-beanutils&lt;/groupId&gt;
  &lt;artifactId&gt;commons-beanutils&lt;/artifactId&gt;
  &lt;version&gt;1.9.3&lt;/version&g]]></description><category></category></item><item><title><![CDATA[Maven的生命周期]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116042621</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116042621</guid><author>mhfaaa</author><pubDate>Fri, 23 Apr 2021 09:31:06 +0800</pubDate><description><![CDATA[Maven的生命周期
Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。
Maven的生命周期是抽象的，即生命周期不做任何实际的工作，实际任务由插件完成，类似于设计模式中的模板方法。
三生命周期
Maven有三套相互独立的生命周期，分别是clean、default和site。每个生命周期包含一些阶段（phase），阶段是有顺序的，后面的阶段依赖于前面的阶段。
1、clean生命周期：清理项目，包含三个pha]]></description><category></category></item><item><title><![CDATA[Mybatis（forEach）标签]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116024584</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116024584</guid><author>mhfaaa</author><pubDate>Thu, 22 Apr 2021 18:03:40 +0800</pubDate><description><![CDATA[mybatis动态sql中foreach标签的使用
我们通常可以将之用到批量删除、添加等操作中。
foreach标签主要用于构建in条件，他可以在sql中对集合进行迭代。如下：

&lt;delete id="deleteBatch"&gt; 

　　　　delete from user where id in

　　　　&lt;foreach collection="array" item="id" index="index" open="(" close=")" separator=","&gt;

　]]></description><category></category></item><item><title><![CDATA[mybatis中#{}和${}的区别]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/116024360</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/116024360</guid><author>mhfaaa</author><pubDate>Thu, 22 Apr 2021 17:55:42 +0800</pubDate><description><![CDATA[mybatis中#{}和${}的区别

#将传入的数据都当成一个字符串，会对自动传入的数据加一个双引号。如：order by #user_id#，如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id，则解析成的sql为order by “id”.
$将传入的数据直接显示生成在sql中。如：order by useriduser_iduseri​d，如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id，则解析成的sq]]></description><category></category></item><item><title><![CDATA[分层框架（二）]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/115900147</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/115900147</guid><author>mhfaaa</author><pubDate>Tue, 20 Apr 2021 11:48:11 +0800</pubDate><description><![CDATA[具体的业务实现类
package com.yan.biz;

public class UserServImpl implements IUserServ{
}

业务工厂类

简化版的静态工厂方法模式

package com.yan.util;

import com.yan.biz.IUserServ;
import com.yan.biz.UserServImpl;

public class ServiceFactory {
    public static IUserServ getUserS]]></description><category></category></item><item><title><![CDATA[分层架构（部分示例代码）]]></title><link>https://blog.youkuaiyun.com/mhfaaa/article/details/115893585</link><guid>https://blog.youkuaiyun.com/mhfaaa/article/details/115893585</guid><author>mhfaaa</author><pubDate>Tue, 20 Apr 2021 09:49:36 +0800</pubDate><description><![CDATA[JavaEE企业级开发中的分层架构
微软推荐的分层式结构一般分为三层，从下至上分别为：数据访问层、业务逻辑层、表示层。分层式设计可以达至如下目的：分散关注、松散耦合、逻辑复用、标准定义。
JavaEE中分层架构：表现层、业务层、持久层
轻量级开发中采用的是：表现层、业务层、持久层、域对象层


表现层：MVC模式，SpringMVC，收集客户动作和显示业务数据


业务层：Spring框架，封装业务逻辑，逻辑复用


持久层：DAO模式、ORM模式，MyBatis，封装数据访问逻辑


域对象层：实现层和层]]></description><category></category></item></channel></rss>