- python蓝桥杯备赛(day8)[KMP算法]
kiki坤哥
蓝桥杯职场和发展
第四章字符串part02[KMP算法]今日任务28.实现strStr()题目链接:28.找出字符串中第一个匹配项的下标-力扣(LeetCode)文章链接:代码随想录这题要用kmp算法,一下是我认为搞清楚kmp需要知道的前缀表是什么:记录下标i之前(包括i)的字符串(即子串)中,最大长度相同前缀后缀前缀表有什么作用:前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始
- Git常用命令
墨明&棋妙
git后端
1、git常用命令创建和克隆仓库:gitinit:在当前目录初始化一个新的Git仓库。gitclone:克隆远程仓库到本地。基本操作:gitadd:将文件添加到暂存区。gitcommit-m"":提交暂存区的文件到本地仓库。gitstatus:查看工作区和暂存区的状态。gitdiff:查看修改的文件内容差异。gitlog:查看提交日志历史。gitbranch:查看分支列表。gitcheckout:
- 终极指南:styled-components 深度解析与实战对比
ox0080
#北漂+滴滴出行WebVIP激励styled-comCSS
一、CSS-in-JS革命:现代Web样式新范式1.1传统CSS的三大痛点全局污染:class命名冲突导致"样式战争"状态隔离:动态样式需要操作DOM类名架构割裂:样式文件与组件逻辑分离//传统CSS的典型问题实例//Button.css.btn{background:blue;}//全局作用域//App.css.btn{padding:10px;}//意外覆盖1.2CSS-in-JS的核心优势真
- Pinia第二章:Pinia 安装与基础配置
道不尽世间的沧桑
vue.js前端javascript
2.1安装流程全解析#使用npm安装(推荐用于标准项目)npminstallpinia--save#使用yarn安装(推荐用于Monorepo项目)yarnaddpinia#针对Vite项目的优化安装(自动处理Tree-shaking)npminstallpinia@next-D安装注意事项:需要Vue3运行时环境(要求Vue>=3.2)与VueRouter无版本冲突生产环境会自动启用Tree-s
- MFC—加法器
nqqcat~
MFCmfcc++
1.需要为编辑框添加变量2.在cpp文件中的按钮中添加代码voidCMFCAddtionDlg::OnBnClickedButton1(){//TODO:在此添加控件通知处理程序代码UpdateData(true);//把控件里的值更新给变量m_add=m_add1+m_add2;//加法UpdateData(false);//把控件相加的值赋值给控件}
- 力扣-动态规划-322. 零钱兑换
猿小喵
算法#力扣leetcodejava算法
力扣-动态规划-322.零钱兑换322.零钱兑换题目描述给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/coin-change著作权
- python爬虫之自动化爬取网页
陌小
pythonseleniumpythonchrome
以下为公开源码fromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsimporttimefrombs4importBeautifulSoupurl='https://movie.douban.com/'chrome_optins=Options()chrome_optins.add_argument
- 通过理解 sk_buff 深入掌握 Linux 内核自定义协议族的开发实现
109702008
编程#C语言网络linux网络人工智能
要开发Linux内核中的自定义协议族(如私有传输层或网络层协议),需基于sk_buff的结构和操作,结合内核网络栈的扩展机制。以下是实现这一目标的分步指南:1.协议族开发的核心步骤(1)注册自定义协议族定义协议号在或自定义头文件中分配唯一的协议标识符(例如ETH_P_MYPROTO)。注册协议处理函数使用dev_add_pack()(链路层)或inet_add_protocol()(网络层)注册协
- 经典SQL查询语句大全
小崔不闹
数据库sqloracle
一、基础1、说明:创建数据库CREATEDATABASEdatabase-name2、说明:删除数据库dropdatabasedbname3、说明:备份sqlserver---创建备份数据的deviceUSEmasterEXECsp_addumpdevice'disk','testBack','c:\mssql7backup\MyNwind_1.dat'---开始备份BACKUPDATABASEp
- vue-cli开启gzip打包报错TypeError: Cannot read property ‘tapPromise‘ of undefined-解决
JackieDYH
VueERRORtapPromisegzip打包报错vue-clivue
给项目增加gzip打包yarnaddcompression-webpack-plugin-D(默认安装的是7以上的最新版本)修改vue.config.jsconstCompressionWebpackPlugin=require('compression-webpack-plugin');configureWebpack:{plugins:[newCompressionWebpackPlugin(
- 【ARM】SMMU系统虚拟化(4)
Lambor_Ma
ARM系列arm开发SoC硬件架构IC
ReducedIAwidth这个概念的理解是,假如使用的是4KB的granule,IA(inputaddress)的位宽是35位,根据IAbitsresolvedatdifferentlevelsoflookup表格,可以得出initiallevel为level1。level1从38:30,相当于有4-bit的减少。这个时候意味着translationtablesize被减少了2^4倍。但是又因为
- 大数据查重-哈希表应用2
liujjjiyun
算法数据结构大数据散列表数据结构算法
大数据查重-哈希表应用模拟问题有一个字符串,这个字符串里有重复的字符,也有没有重复的字符,让你找出来第一个没有重复出现过的字符。#include#include#include#include#include#include#includeusingnamespacestd;intmain(){stringsrc="jjhfgiyuhrtytrs";//让你找出来第一个没有重复出现过的字符unor
- host.docker.internal 及 host-gateway 知多少
强哥之神
dockergateway容器人工智能语言模型deepseek
在开始本文之前,我们先看一下最近在使用界面工具进行与大模型交互时,我们一般会用到OpenWebUI,部署方式如下,具体要了解DeepSeek的本地化部署,可参见《本地使用CPU快速体验DeepSeekR1》。dockerrun-p3000:8080--rm--nameopen-webui\ --add-host=host.docker.internal:host-gateway\ -vopen-w
- 怎么样换手机ip地址?这些方法你知道吗
hgdlip
更换ip地址手机ip智能手机tcp/ip智能路由器
在当今数字化时代,IP地址作为设备在网络中的唯一标识,对于保护个人隐私、绕过地域限制以及提升网络安全等方面都至关重要。有时候,我们可能需要更换手机的IP地址,以实现特定的网络活动或解决某些网络问题。本文将详细介绍如何更换手机的IP地址,帮助读者轻松掌握这一技能。一、了解IP地址首先,我们需要明确什么是IP地址。IP地址是互联网协议地址(InternetProtocolAddress)的缩写,它
- The underlying provider failed on open 问题解决
yyueshen
SQLServer链接字符串
用EntityFramework6,链接MSSqlServer,本地测试没问题,同事用IP访问就提示了“Theunderlyingproviderfailedonopen”,在网上查,有人说是连接字符串写的有问题,喵了个咪的,连接字符串写的有问题,为啥我用Add-Migration和update-database命令可以成功更新数据库,连接字符串有问题,为啥我IISExpress下的localho
- 455. 分发饼干(LeetCode)
和光同尘@
算法LeetCodeleetcode算法职场和发展c++数据结构
题目来源:455.分发饼干-力扣(LeetCode)题目内容:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。示例1
- 【LeetCode】第64题——最小路径和(难度:中等)
Se7en_Dayz
LeetCode题解动态规划javaleetcode
【LeetCode】第64题——最小路径和(难度:中等)题目描述解题思路代码详解注意点题目描述给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例1:输入:grid=[[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径1→3→1→1→1的总和最小。示例2:输入:grid=[[1,2,3]
- LeetCode热题100JS(17/100)第三天|76.最小覆盖子串
Alicesflower
LeetCode热题100JSleetcode算法职场和发展
76.最小覆盖子串题目链接:76.最小覆盖子串难度:困难刷题状态:2刷新知识:-`'A'.codePointAt(0)`读A的ACSII码值-`tmp.join(',')`把数组压缩成一个字符-`map={}Object.keys(map).length`map的key的个数解题过程思考示例1:输入:s="ADOBECODEBANC",t="ABC"输出:"BANC"解释:最小覆盖子串"BANC"
- ubuntu20.04 安装Kubernetes
Henry_Wu001
dockerubuntulinuxkubernetes容器云原生
安装Kubernetes完成Docker的安装后,我们可以开始安装Kubernetes。首先,添加Kubernetes的官方GPG密钥:curl-shttps://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg|sudoapt-keyadd-添加Kubernetes的源:sudoapt-add-repository"debhttps://mirr
- LeetCode 热题100-70-搜索二维矩阵Ⅱ
一条吃猫的鱼
Leetcode热题100
核心思想:z字形搜索思路:我们可以从矩阵matrix的右上角(0,n−1)进行搜索。在每一步的搜索过程中,如果我们位于位置(x,y),那么我们希望在以matrix的左下角为左下角、以(x,y)为右上角的矩阵中进行搜索,即行的范围为[x,m−1],列的范围为[0,y]:如果matrix[x,y]=target,说明搜索完成;如果matrix[x,y]>target,由于每一列的元素都是升序排列的,那
- LibreCAD使用记录
三皮仔
产品设计LibreCAD
https://www.librecad.org/LibreCAD的基本使用使用记录HowtoaddnewlfffontintoLibreCAD?command
- CSS实现图片缺角效果
凉风听雪
CSS炫酷使用css前端css3html
效果:源码:123body{margin:0;padding:0;background:#f9f9f9;display:flex;align-items:center;justify-content:center;height:100vh;}.row{display:flex;padding:30px;gap:30px;flex-wrap:wrap;background:inherit;}.box
- element ui 中select框向下滚动加载更多
wwll177
uivue.js前端
Vue.directive("loadmore",{bind(el,binding){//获取element-ui定义好的scroll盒子constselectDOM=el.querySelector(".el-select-dropdown.el-select-dropdown__wrap");selectDOM.addEventListener("scroll",function(){cons
- SpringBoot系列:Spring Boot集成MyBatis,基于注解sql方式
前端罗欢
Java经验分享面试java
@PostMapping(“addUser”)publicStringaddUser(Useruser){userService.addUser(user);return“添加用户成功”;}/**删除用户@paramid*/@GetMapping(“delUser”)publicStringdelUser(@RequestParam(value=“id”)intid){userService.de
- 当你尝试拉取远程仓库的代码时,如果本地文件有未提交的更改,Git 会警告你这些更改可能会被覆盖。
hdufu123
git
当你尝试拉取远程仓库的代码时,如果本地文件有未提交的更改,Git会警告你这些更改可能会被覆盖。为了解决这个问题,你可以采取以下几种方法:1.提交你的更改如果你希望保留当前的更改,可以先将其提交。你可以创建一个新的分支来保存这些更改。给i他branch查看当前分支gitcheckout-bmy-new-branchgitadd.gitbranchgitcommit-m"Savemychanges"如
- C语言---一维数组动态求和
编程小程
C语言c语言leetcode算法
给你一个数组nums。数组「动态和」的计算公式为:runningSum[i]=sum(nums[0]…nums[i])。请返回nums的动态和。示例:输入:nums=[1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为[1,1+2,1+2+3,1+2+3+4]。题目来源:https://leetcode-cn.com/problems/running-sum-of-1d-array首
- 力扣热题 100:哈希专题三道题详细解析(JAVA)
剑走偏锋o.O
leetcode哈希算法java
文章目录一、两数之和1.题目描述2.示例3.解题思路4.代码实现(Java)5.复杂度分析二、字母异位词分组1.题目描述2.示例3.解题思路4.代码实现(Java)5.复杂度分析三、最长连续序列1.题目描述2.示例3.解题思路4.代码实现(Java)5.复杂度分析在力扣(LeetCode)平台上,热题100是许多开发者提升算法能力的必刷清单。今天,我们就来详细解析热题100中与哈希相关的三道题,帮
- 【机试】合并区间问题
sofaraway13
机试准备算法leetcode数据结构
56.合并区间.-力扣(LeetCode)classSolution{public:vector>merge(vector>&intervals){vector>res;vectora,b;a=intervals[0],b=intervals[1];for(inti=1;ib[0]){a[1]=b[1];b=intervals[i+1];}else{res.push_back(a);a=inter
- pnpm的基本用法
前端熊猫
pnpm
以下是pnpm的核心命令和使用指南,涵盖从安装依赖到项目管理的常见操作:1.基础命令(1)安装依赖pnpminstall#安装package.json中的所有依赖pnpminstall#安装指定包(自动添加到dependencies)
[email protected]#指定版本安装(2)添加依赖pnpmadd#添加开发依赖(保存到devDependencies)pnpmadd--save-dev#
- 深入了解 NAT 模式:网络地址转换的奥秘
东锋1.3
运维计算机网络与通信服务器网络安全
深入了解NAT模式:网络地址转换的奥秘在计算机网络的世界里,NAT模式(NetworkAddressTranslation,网络地址转换)扮演着至关重要的角色。它就像是网络中的翻译官,在不同网络地址之间进行转换,解决了公网IP地址不足的问题,同时也增强了网络的安全性和灵活性。什么是NAT模式NAT模式是一种将一个IP地址域映射到另一个IP地址域的技术,主要用于实现私有网络与公共网络之间的通信。简单
- SQL的各种连接查询
xieke90
UNION ALLUNION外连接内连接JOIN
一、内连接
概念:内连接就是使用比较运算符根据每个表共有的列的值匹配两个表中的行。
内连接(join 或者inner join )
SQL语法:
select * fron
- java编程思想--复用类
百合不是茶
java继承代理组合final类
复用类看着标题都不知道是什么,再加上java编程思想翻译的比价难懂,所以知道现在才看这本软件界的奇书
一:组合语法:就是将对象的引用放到新类中即可
代码:
package com.wj.reuse;
/**
*
* @author Administrator 组
- [开源与生态系统]国产CPU的生态系统
comsci
cpu
计算机要从娃娃抓起...而孩子最喜欢玩游戏....
要让国产CPU在国内市场形成自己的生态系统和产业链,国家和企业就不能够忘记游戏这个非常关键的环节....
投入一些资金和资源,人力和政策,让游
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
商人shang
jvm内存
jvm区域总体分两类,heap区和非heap区。heap区又分:Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)。 非heap区又分:Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。
HotSpot虚拟机GC算法采用分代收
- 页面上调用 QQ
oloz
qq
<A href="tencent://message/?uin=707321921&Site=有事Q我&Menu=yes">
<img style="border:0px;" src=http://wpa.qq.com/pa?p=1:707321921:1></a>
- 一些问题
文强chu
问题
1.eclipse 导出 doc 出现“The Javadoc command does not exist.” javadoc command 选择 jdk/bin/javadoc.exe 2.tomcate 配置 web 项目 .....
SQL:3.mysql * 必须得放前面 否则 select&nbs
- 生活没有安全感
小桔子
生活孤独安全感
圈子好小,身边朋友没几个,交心的更是少之又少。在深圳,除了男朋友,没几个亲密的人。不知不觉男朋友成了唯一的依靠,毫不夸张的说,业余生活的全部。现在感情好,也很幸福的。但是说不准难免人心会变嘛,不发生什么大家都乐融融,发生什么很难处理。我想说如果不幸被分手(无论原因如何),生活难免变化很大,在深圳,我没交心的朋友。明
- php 基础语法
aichenglong
php 基本语法
1 .1 php变量必须以$开头
<?php
$a=” b”;
echo
?>
1 .2 php基本数据库类型 Integer float/double Boolean string
1 .3 复合数据类型 数组array和对象 object
1 .4 特殊数据类型 null 资源类型(resource) $co
- mybatis tools 配置详解
AILIKES
mybatis
MyBatis Generator中文文档
MyBatis Generator中文文档地址:
http://generator.sturgeon.mopaas.com/
该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中文版的文档的也会有一定的障碍,所以本章根据该中文文档以及实际应用,使用通俗的语言来讲解详细的配置。
本文使用Markdown进行编辑,但是博客显示效
- 继承与多态的探讨
百合不是茶
JAVA面向对象 继承 对象
继承 extends 多态
继承是面向对象最经常使用的特征之一:继承语法是通过继承发、基类的域和方法 //继承就是从现有的类中生成一个新的类,这个新类拥有现有类的所有extends是使用继承的关键字:
在A类中定义属性和方法;
class A{
//定义属性
int age;
//定义方法
public void go
- JS的undefined与null的实例
bijian1013
JavaScriptJavaScript
<form name="theform" id="theform">
</form>
<script language="javascript">
var a
alert(typeof(b)); //这里提示undefined
if(theform.datas
- TDD实践(一)
bijian1013
java敏捷TDD
一.TDD概述
TDD:测试驱动开发,它的基本思想就是在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完全部功能的开发。
- [Maven学习笔记十]Maven Profile与资源文件过滤器
bit1129
maven
什么是Maven Profile
Maven Profile的含义是针对编译打包环境和编译打包目的配置定制,可以在不同的环境上选择相应的配置,例如DB信息,可以根据是为开发环境编译打包,还是为生产环境编译打包,动态的选择正确的DB配置信息
Profile的激活机制
1.Profile可以手工激活,比如在Intellij Idea的Maven Project视图中可以选择一个P
- 【Hive八】Hive用户自定义生成表函数(UDTF)
bit1129
hive
1. 什么是UDTF
UDTF,是User Defined Table-Generating Functions,一眼看上去,貌似是用户自定义生成表函数,这个生成表不应该理解为生成了一个HQL Table, 貌似更应该理解为生成了类似关系表的二维行数据集
2. 如何实现UDTF
继承org.apache.hadoop.hive.ql.udf.generic
- tfs restful api 加auth 2.0认计
ronin47
目前思考如何给tfs的ngx-tfs api增加安全性。有如下两点:
一是基于客户端的ip设置。这个比较容易实现。
二是基于OAuth2.0认证,这个需要lua,实现起来相对于一来说,有些难度。
现在重点介绍第二种方法实现思路。
前言:我们使用Nginx的Lua中间件建立了OAuth2认证和授权层。如果你也有此打算,阅读下面的文档,实现自动化并获得收益。SeatGe
- jdk环境变量配置
byalias
javajdk
进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置:
1、下载jdk(http://java.sun.com/javase/downloads/index.jsp),我下载的版本是:jdk-7u79-windows-x64.exe
2、安装jdk-7u79-windows-x64.exe
3、配置环境变量:右击"计算机"-->&quo
- 《代码大全》表驱动法-Table Driven Approach-2
bylijinnan
java
package com.ljn.base;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.uti
- SQL 数值四舍五入 小数点后保留2位
chicony
四舍五入
1.round() 函数是四舍五入用,第一个参数是我们要被操作的数据,第二个参数是设置我们四舍五入之后小数点后显示几位。
2.numeric 函数的2个参数,第一个表示数据长度,第二个参数表示小数点后位数。
例如:
select cast(round(12.5,2) as numeric(5,2))  
- c++运算符重载
CrazyMizzz
C++
一、加+,减-,乘*,除/ 的运算符重载
Rational operator*(const Rational &x) const{
return Rational(x.a * this->a);
}
在这里只写乘法的,加减除的写法类似
二、<<输出,>>输入的运算符重载
&nb
- hive DDL语法汇总
daizj
hive修改列DDL修改表
hive DDL语法汇总
1、对表重命名
hive> ALTER TABLE table_name RENAME TO new_table_name;
2、修改表备注
hive> ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comm
- jbox使用说明
dcj3sjt126com
Web
参考网址:http://www.kudystudio.com/jbox/jbox-demo.html jBox v2.3 beta [
点击下载]
技术交流QQGroup:172543951 100521167
[2011-11-11] jBox v2.3 正式版
- [调整&修复] IE6下有iframe或页面有active、applet控件
- UISegmentedControl 开发笔记
dcj3sjt126com
// typedef NS_ENUM(NSInteger, UISegmentedControlStyle) {
// UISegmentedControlStylePlain, // large plain
&
- Slick生成表映射文件
ekian
scala
Scala添加SLICK进行数据库操作,需在sbt文件上添加slick-codegen包
"com.typesafe.slick" %% "slick-codegen" % slickVersion
因为我是连接SQL Server数据库,还需添加slick-extensions,jtds包
"com.typesa
- ES-TEST
gengzg
test
package com.MarkNum;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation
- 为何外键不再推荐使用
hugh.wang
mysqlDB
表的关联,是一种逻辑关系,并不需要进行物理上的“硬关联”,而且你所期望的关联,其实只是其数据上存在一定的联系而已,而这种联系实际上是在设计之初就定义好的固有逻辑。
在业务代码中实现的时候,只要按照设计之初的这种固有关联逻辑来处理数据即可,并不需要在数据库层面进行“硬关联”,因为在数据库层面通过使用外键的方式进行“硬关联”,会带来很多额外的资源消耗来进行一致性和完整性校验,即使很多时候我们并不
- 领域驱动设计
julyflame
VODAO设计模式DTOpo
概念:
VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对
- 单例设计模式
hm4123660
javaSingleton单例设计模式懒汉式饿汉式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
&nb
- logback
zhb8015
loglogback
一、logback的介绍
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-class
- 整合Kafka到Spark Streaming——代码示例和挑战
Stark_Summer
sparkstormzookeeperPARALLELISMprocessing
作者Michael G. Noll是瑞士的一位工程师和研究员,效力于Verisign,是Verisign实验室的大规模数据分析基础设施(基础Hadoop)的技术主管。本文,Michael详细的演示了如何将Kafka整合到Spark Streaming中。 期间, Michael还提到了将Kafka整合到 Spark Streaming中的一些现状,非常值得阅读,虽然有一些信息在Spark 1.2版
- spring-master-slave-commondao
王新春
DAOspringdataSourceslavemaster
互联网的web项目,都有个特点:请求的并发量高,其中请求最耗时的db操作,又是系统优化的重中之重。
为此,往往搭建 db的 一主多从库的 数据库架构。作为web的DAO层,要保证针对主库进行写操作,对多个从库进行读操作。当然在一些请求中,为了避免主从复制的延迟导致的数据不一致性,部分的读操作也要到主库上。(这种需求一般通过业务垂直分开,比如下单业务的代码所部署的机器,读去应该也要从主库读取数