- Vue2+vue-office/excel 实现在线加载Excel文件预览
777VG
vue.jsexceljavascript
一、GitHub链接:GitHub-501351981/vue-office:支持word(.docx)、excel(.xlsx,.xls)、pdf等各类型office文件预览的vue组件集合,提供一站式office文件预览方案,支持vue2和3,也支持React等非Vue框架。Web-basedpdf,excel,wordpreviewlibrary一、安装VueOfficeExcel插件npm
- java发送邮件
西凉的悲伤
javajavamailsmtpjava邮件发送邮件javaemail
目录一、准备工作二、引入依赖三、代码一、准备工作.发送的邮件账号要开通POP3和SMTP服务,获取到授权码以qq邮箱为例,打开QQ邮箱,点击设置。选择账号,把POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务下面,POP3/SMTP选择开启,如果已经开启了先关闭再开启。手机验证后会得到一串授权码,授权码要保存好,下面要用。二、引入依赖javax.mailmail1.4
- javax.mail/jakarta.mail框架发送smtp邮件
Echoo华地
springbootjavaspringbootsmtp邮件jakarta
项目需求是完成某些业务后发送smtp邮件通知用户引入依赖直接引入对应的springbootstarter,这样就不用管版本问题了org.springframework.bootspring-boot-starter-mail也可以单独引入javax.mail依赖com.sun.mailjavax.mail1.6.2注意,如果是SpringBoot3.0以上版本就要改成jakarta.mail,Sp
- 解除 Excel 表格的文档保护全攻略
@井九
excel
在日常工作和学习中,我们可能会遇到Excel表格被保护无法编辑的情况。别担心,今天就为大家分享几种解除Excel表格文档保护的方法。一、导入腾讯文档可以将受保护的Excel表格上传到腾讯文档。在部分情况下,腾讯文档会尝试自动解除表格保护,这样你就能够编辑内容了。如果文档仍然受保护,不妨尝试通过“另存为”其他格式,再导出为Excel文件,有时这种方法可以成功解除保护。二、导入GoogleSheets
- Java 发送邮件
哈哈哈116
QQ邮箱java
importcom.sun.mail.util.MailSSLSocketFactory;importjakarta.activation.DataHandler;importjakarta.activation.FileDataSource;importjakarta.mail.*;importjakarta.mail.internet.InternetAddress;importjakarta
- SPI(Service Provider Interface)机制示例及流程图
Wade_Crab
分布式微服务架构系统架构
SPI(ServiceProviderInterface)机制示例及流程图1.什么是SPI?SPI是Java提供的一种服务发现机制,允许应用程序在运行时动态地加载和使用服务提供者的实现。通过SPI,接口的实现类可以在运行时被自动发现并加载,而不需要在编译时指定。2.SPI使用示例假设我们有一个简单的场景:定义一个发送消息的服务MessageService,可以有不同的实现,如通过短信、电子邮件、或
- Mybatis-plus实现分页查询
无名指的等待712
mybatis
importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;importcom.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept
- java复习宝典,jdbc与mysql数据库
Xiao Tong333
javamysql开发语言
一.java1.面向对象知识(1)类和对象类:若干具有相同属性和行为的对象的群体或者抽象,类是创建对象的模板,由属性和行为两部分组成。类是对象的概括或者抽象,对象是类的实例化。举例:例如车有很多类型,但是这些都是车,车这个大类就是一个类,每种车都是一个对象。1.类的声明[修饰符]class类名{//类的声明部分[成员变量][成员方法]}员变量的声明:[修饰符]数据类型变量名[=初始值];成员方法的
- vue中使用day.js实现时间格式的互相转换
疯狂拔头发
javascriptvue.js开发语言
简介Day.js是一个轻量的处理时间和日期的JavaScript库,被设计用于在浏览器和Node.js中工作。安装npm安装>npminstalldayjs--save项目中使用importdayjsfrom'dayjs'//或vardayjs=require('dayjs')dayjs().format()常用正常时间格式转Unix时间戳(毫秒)let<
- 数据权限的设计与实现系列3——MybatisPlus数据权限插件实现机制及使用示例
学海无涯,行者无疆
#数据权限数据权限数据权限设计数据权限插件Mybatisplus数据权限实现
背景上篇我们深度剖析了若依开发平台关于数据权限的设计与实现,并指出了其模式的局限性。今天我们来看一下MyBatisPlus提供的数据权限插件的实现机制与使用示例。官方说明:https://baomidou.com/plugins/data-permission/实现机制在SQL执行前拦截SQL语句,并根据用户权限动态添加权限相关的SQL片段。这样,只有用户有权限访问的数据才会被查询出来。拦截S
- PyTorch库学习之torch.mean函数
Midsummer-逐梦
#torchpytorch学习人工智能
PyTorch库学习之torch.mean函数一、简介torch.mean是PyTorch库中的一个函数,用于计算张量的均值。它可以沿着指定的维度或者整个张量计算均值,是数据分析和机器学习中常用的操作之一。二、语法和参数语法:torch.mean(input,dim=None,keepdim=False,*,out=None)参数:input(torch.Tensor):输入张量。dim(int,
- JavaScript 数据结构 ==== 二叉树
前端 贾公子
数据结构
目录二叉树结构二叉树和二叉搜索树介绍1.创建树2.插入一个键3.树的遍历中序排序先序遍历后序遍历4.搜索树中的值5.删除节点二叉树在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(leftsubtree)和“右子树”(rightsubtree)。二叉树常被用于实现二叉查找树和二叉堆。一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节
- Java8 关于最佳线程数
没有颜色的菜
前言关于最佳线程数的设置,总是那么模糊,不知道该如何设置,偶然间在Java并发编程实践里看到了对他的定义:要使处理器达到期望的使用率,线程池的最佳大小等于:1695055395.jpg需要注意的是,我们需要制定一个CPU的利用率,如果是100%,那么线程数就取决于WaitTime/ComputeTime如果我们的任务是计算型任务,那么等待时间为零,那么线程数设置为CPU+1如果我们的任务是IO密集
- 257. 二叉树的所有路径
杰克尼
LeetCode算法
目录一:题目:二:代码:三:结果:一:题目:给你一个二叉树的根节点root,按任意顺序,返回所有从根节点到叶子节点的路径。叶子节点是指没有子节点的节点。二:代码:/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr
- 红黑树原理详解
eqa11
数据结构
文章目录红黑树原理详解一、引言二、红黑树的基本性质1、基本性质2、红黑树的效率三、红黑树的操作1、插入操作1.1、插入节点1.2、调整颜色和结构1.3、修复2、删除操作2.1、删除节点2.2、调整颜色和结构2.3、修复四、总结红黑树原理详解一、引言红黑树(Red-BlackTree)是一种自平衡的二叉查找树,以其优秀的性能在计算机科学领域中广泛应用。它由RudolfBayer在1972年发明,并被
- spring和Mybatis的逆向工程
eqa11
springmybatisjava
文章目录十二、注解开发1、注解方式单表的增删改查的操作十三、逆向工程13.1、创建逆向工程的步骤⑴添加依赖⑵配置MyBatis的核心配置文件⑶创建逆向工程的配置文件,该文件文件名必须是:generatorConfig.xml13.2测试十四、分页插件14.1、使用步骤14.2分页插件的使用十二、注解开发注解方式比较简单,但是实际开发不推荐使用注解,使用配置文件的方式,不需要改源代码)1、注解方式单
- java中的set集合
eqa11
java开发语言
java中的set集合文章目录java中的set集合1.HashSet集合1.1HashSet的特点1.2HashSet常用方法2.LinkedHashSet集合2.1LinkedHashSet集合的特点3.TreeSet集合3.1TreeSet集合的特点3.2TreeSet的基本使用4.HashSet、LinkedHashSet、TreeSet的使用场景5.list和set集合的区别5.1有序性
- linux下shell脚本语法4【IF流程语句】
注水猪肉
【if单语句格式】if[-erun.sh]thenecho"存在"elseecho"不存在"fi【if多条件语句格式】if[-erun.sh]thenecho"存在"elifthenecho"不存在"elseecho"注水猪肉的猫"fi
- python爬虫番外篇 | Reuqests库高级用法(1)
摆烂牛杂
爬虫python爬虫c++
文章目录1.会话对象(SessionObjects)2.请求和响应对象(RequestandResponseObjects)3.准备好的请求(PreparedRequests)4.SSL证书验证5.客户端证书6.CA证书7.正文内容工作流程(BodyContentWorkflow)8.keep-alive9.流式上传(StreamingUploads)10.块编码的请求(Chunk-Encoded
- 关于el-table的扩展表格expand
lemontree-xy
前端javascriptvue.js
一、修改el-table的扩展表格expand图标所在列的宽度正常用width修改即可,默认不给width有时候会很宽。如果想修改单元格里面的样式,可用如下代码/*调整宽度*/:deep(.el-table__expand-column.cell){width:30px;/*调整为你想要的宽度*///}二、修改展开表格的表头样式,header-row-class-name=".childHeade
- 回文子串问题梳理
灵海之森
算法python
https://leetcode.cn/problems/palindromic-substrings/https://leetcode.cn/problems/longest-palindromic-subsequence/https://leetcode.cn/problems/palindrome-partitioning/description/https://leetcode.cn/pr
- java 中的虚拟机的介绍
慢慢成长的码农
java开发语言
Java虚拟机(JavaVirtualMachine,简称JVM)是运行Java应用程序的核心组件。它提供了一个平台无关的执行环境,使Java程序可以在各种硬件和操作系统上运行。以下是JVM的详细介绍:1.JVM的基本概念JVM是一种虚拟计算机,它能够执行以字节码(Bytecode)形式存在的Java程序。字节码是Java编译器将Java源代码编译后生成的中间语言代码。JVM负责将这些字节码解释或
- [leetcode刷题]力扣刷题4之整数转罗马数字(中等)
孙小二写代码
leetcode算法贪心算法哈希表
这题要比罗马数字转整数难,题目输入整数,输出罗马数字。示例:输入:num=3749输出:"MMMDCCXLIX"思路贪心法则:我们每次尽量使用最大的数来表示。比如对于1994这个数,如果我们每次尽量用最大的数来表示,依次选1000,900,90,4,会得到正确结果MCMXCIV。所以,我们将哈希表按照从大到小的顺序排列,然后遍历哈希表,直到表示完整个输入。.-力扣(LeetCode).-备战技术面
- Android开发之okhttp /java.net.ConnectException: Failed to connect to localhost/127.0.0.1
Abandon-Lv
android
在启用后端后,在andorid设置baseurl为127.0.0.1:8080,结果在运行的时候报了Failedtoconnecttolocalhost/127.0.0.1这个错误一开始以为是什么地方写错了导致127.0.0.1:8080前多了一个/,查阅资料发现android模拟器(simulator)把它自己作为了localhost,也就是说,代码中使用localhost或者127.0.0.1
- Android13 Launcher3 锁定Hotseat栏,apk无法替换与生成文件夹
Hogan爱Android
Android13Launcher3客制化androidjava
1需求概述公司业务需要需要固定Hotseat栏的apk列表,使其不能被替换,固定几个apk,可以让用户快速使用,增加用户使用感。2实现功能核心类代码路径packages\apps\Launcher3\src\com\android\launcher3\DropTarget.javapackages\apps\Launcher3\src\com\android\launcher3\Workspace
- 基于Maven+ SpringMVC+ MyBatis +Druid+MySql员工管理系统新手教程
小丑皇_0624
基于Maven+SpringMVC+MyBatis+Druid+MySql员工管理系统新手教程前言百度上搜这个还能跳出来个100+RMB的课程。这课有好多人看。我看了一下目录,发现大概比我的系统全面。但是,如果你只是要使用这些工具搭建一个员工管理系统,看我的就够了。虽然我只是个新手,但是我实现了,并且尽我所能讲清楚代码。项目目标我们搭建的员工管理系统是要有员工,部门和员工,部门的关系和对前三者在应
- 从C到C++ 番外篇 new和delete运算符
Gelercat
从C到C++c++
1、内存分配编程中我们往往需要对内存进行动态分配,这也是C++和C贴近底层的体现。在C中动态内存分配机制使用了malloc和free两个函数.#defineSIZE100int*arr=(int*)malloc(SIZE*sizeof(int));free(arr);C++中也提供了这样的内存分配机制:new和delete。这两个函数务必搭配使用二次编辑:new出来的对象如果不进行delete,在
- 2022-2023学年英语周报九年级第10期答案及试题(初三第十期)
gaokaos
阅读理解:CastleRock,Colorado,isintheFrontRange进入查看:2022-2023学年英语周报九年级第10期答案及试题(初三第十期)CastleRock,Colorado,isintheFrontRangebetweenDenverandColoradoSprings.Thetownwasfirstsettledinthe1870sandnamedfortherock
- Java 编程中的无参构造函数:为何建议自定义?
需要重新演唱
Java基础java开发语言
Java编程中的无参构造函数:为何建议自定义?在Java编程中,构造函数是用于初始化对象的特殊方法。Java提供了默认的无参构造函数,但在某些情况下,建议自定义一个无参构造函数。本文将深入探讨这一建议背后的原因,并通过丰富的代码示例和详细的解释,帮助你全面理解无参构造函数的必要性及实际应用。前置知识在深入探讨之前,我们需要了解一些基本概念:构造函数:构造函数是用于初始化对象的特殊方法,与类同名,没
- kafka-生产者拦截器(SpringBoot整合Kafka)
小丁学Java
Kafkakafkaspringbootlinq生产者拦截器
文章目录1、生产者拦截器1.1、创建生产者拦截器1.2、KafkaTemplate配置生产者拦截器1.3、使用Java代码创建主题分区副本1.4、application.yml配置----v1版1.5、屏蔽kafkadebug日志logback.xml1.6、引入spring-kafka依赖1.7、控制台日志1、生产者拦截器1.1、创建生产者拦截器packagecom.atguigu.kafka.
- 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层,要保证针对主库进行写操作,对多个从库进行读操作。当然在一些请求中,为了避免主从复制的延迟导致的数据不一致性,部分的读操作也要到主库上。(这种需求一般通过业务垂直分开,比如下单业务的代码所部署的机器,读去应该也要从主库读取数