打包后端项目最好先执行 clean
然后执行 packge
这个时候你会发现已经打包成功
上传该 jar 文件到你的服务器上
cd ~
mkdir rrcommunity
将文件夹上传到新建好的 rrcommunity 文件夹下
重命名(可选)
mv rrcommunity-1.0-SNAPSHOT.JAR rrcommunity.jar
在jar包同级目录下新建 DockerFile 文件
FROM openjdk:8VOLUME /rrcommunityADD rrcommunity.jar rrcommunity.jarEXPOSE 8848ENTRYPOINT ["java","-jar","/rrcommunity.jar"]
参数说明:
from openjdk:8 拉取一个 jdk 为 1.8 的依赖环境
rrcommunity.jar 就是你上传的 jar 包,替换为 jar 包的名称
rrcommunity.jar 是你将该 jar 包重新命名为什么名称,在容器中运行
expose 该容 ...
什么是读写分离
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(insert、update、delete),而从数据库直接处理 select 查询操作。数据库复制用来把事务性操作导致的变更同步到集群中的从数据库。一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离来提升数据库的并发负载能力
为什么要读写分离
一个项目中数据库是最基础的,目前主流的是单机数据库,读写都在一个库中。当用户逐渐增加,单机数据库无法满足性能要求时,就会进行读写分离(适用于读多写少),写操作一个库,读操作多个库,通常会做一个数据库集群,开启主从备份(主从同步),一主多从,提高查询性能
关于主从集群及同步,可以看这篇文章:
引用站外地址
MySQL实现主从同步
一主一从
后台服务代码实现读写分离本文章所用框架为:SpringBoot,MyBatis,连接池采用 druid ...
前期准备
Linux版本:CentOS7
分别创建两个虚拟机作为主从节点(有钱的话可以买两个服务器😁)
两台虚拟机上都安装好mysql
Master配置配置文件
修改 my.cnf 文件,[mysqld] 下加入下面内容
# 服务的唯一编号server-id = 1# 开启mysql binlog功能log-bin = mysql-bin# binlog记录内容的方式,记录被操作的每一行binlog_format = ROW# 减少记录日志的内容,只记录受影响的列binlog_row_image = minimal# 指定需要复制的数据库名为test,主库从库必须一样binlog-do-db = test
修改好配置文件后,重启 mysql 服务,使修改生效
systemctl restart mysqld
创建从库同步数据的账号登录客户端mysql -uroot -pxxx
添加一个用户【用于在从库主机中登录进行同步】create user 'replicate'@'%' identified by 'replica ...
两数之和先贴出题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例:
输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
哈希表法
这题因为题目已经说了有一种答案,所以不用担心 [3],6 这种情况,哪怕有重复元素,也会被最新的覆盖
两数之和没法用双指针,因为返回的数组存储的是索引,没法排序
class Solution { public int[] twoSum(int[] nums, int target) { int[] res = new int[2]; if(nums == null || nums.length == 0){ ...
动态规划的题总能让人绝望,简单的几行代码,想破脑袋都想不出来😭
打家劫舍题目描述
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
示例 1:
输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。
思路
看了 Carl 哥的题解,豁然开朗,当前房屋偷不偷,取决于前一家或者两家偷不偷
如果偷第 i 间房间,那么 dp[i] = dp[i - 2] + nums[i],第 i - 1间不会考虑
如果不偷第i间房间,那么dp[i] = dp[i - 1],这里并不是说一定偷第i - 1房间,只是考虑
所以:dp[i] = Math.max(dp[i - 2] + nums[i],dp[ ...
前期准备
Linux版本:CentOS7
Redis版本:6.0.5
下载Redis方式一:官网(https://redis.io/download)
稳定版:(https://download.redis.io/releases/)
方式二:(推荐)
步骤:
找好需要的版本,使用 wget 命令:
wget https://download.redis.io/releases/redis-6.0.5.tar.gz
解压安装Redis:
tar -zvxf redis-6.0.5.tar.gz -C /usr/local/redis
注意:Redis 是c语言编写的,如果没有安装gcc,请先安装:
yum install gcc-c++
进入redis目录,进入redis-6.0.5,执行:
make
安装:
make PREFIX=/usr/local/redis install
出现以上界面说明安装成功了。
查看版本:
redis-cli -v
进入 src目录,启动:
cd src./redis-server
配置:
vim redis.conf
做以下修 ...
Java
未读
看到标题你可能会觉得奇怪,因为你刚做完一道非常难的不同路径问题,确实,在 LeetCode 中,这类题被标记为中等难度,但是这道题在动规里真的算简单的啦,毕竟我这种菜鸡花点时间也能做出来,但是,当阁下碰到不同的二叉搜索树这道题,你又该如何应对?难!太难了!哪怕是做过一次,过了一段时间再做,如果没有动笔复现当时的思路,一样是毫无头绪。这次,就好好花时间来解决这道题!
题目描述:
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。(描述如此简短,想必这题应该十分简单吧😁)
二叉搜索树的概念就不过多解释了,一句话简单概括:对于·二叉树中的任意节点,它的左子树中的节点都应小于根节点,它的右子树中的节点都应大于根节点。
参考卡哥:代码随想录 (programmercarl.com)
我们可以使用动态规划的思路来解决这个问题。具体的步骤如下:
定义一个数组 dp,其中 dp[i] 表示有 i 个节点时可以构成的不同的二叉搜索树的数量。
初始化 dp[0] = 1,表示空树也是一棵合法的二叉搜索树。
...
Java
未读Seata 学习笔记分布式事务
单体应用被拆分成微服务应用,原来的多个模块被分成多个独立的应用,分别使用多个独立的数据源,业务操作需要调用多个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没有办法保证。
一句话总结:一次业务操作需要跨多个数据源或需要跨多个服务进行远程调用,就会产生分布式事务问题
本地事务本地事务,也就是传统的单机事务。在传统数据库事务中,必须满足四个原则:
原子性
一致性
隔离性
持久性
分布式事务分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务,例如:
跨数据源的分布式事务
跨服务的分布式事务
综合情况
在数据库水平拆分、服务垂直拆分后,一个业务操作通常要跨多个数据库、服务才能完成。例如电商行业中比较常见的下单付款案例,包括下面几个行为:
创建新订单
扣减商品库存
从用户账户余额扣除金额
完成上面的操作需要访问三个不同的微服务和三个不同的数据库。
订单的创建、库存的扣减、账户扣款在每一个服务和数据库内是一个本地事务,可以保证ACID原则。
但是当我们把三件事情看做一个”业务”,要满足保证“业务”的 ...
几个月前才做过这道题,当时没做出来,花了点时间看题解,结果现在又刷到,还是没有思路😭,再来!
LeetCode 中,「岛屿问题」是一个系列问题,如果你看到这了,不妨再尝试以下解决下面几道题:(这里透露一个小技巧,中文输入法下输入uubd可以打出类似「」等各种符号)
L200. 岛屿数量
463. 岛屿的周长
695. 岛屿的最大面积
827. 最大人工岛
DFS 基本结构先理解二叉树上的 DFS 遍历:
void traverse(TreeNode root){ // 判断 base case if(root == null) return; // 递归访问左右子树 traverse(root.left); traverse(root.right);}
两个要素:
「访问相邻节点」
对于二叉树,即递归访问左右子树
「判断 base case」
对于二叉树,即判断 root == null ,root 指向的子树为空了,就不需要再往下遍历了
类比网格:
「相邻节点」:上下左右四个,对于格子(r, c)来说(r 和 c 分别代表行坐标 ...