mybatis切换多数据源
引语有时候我们需要切换多个数据源,来使用不同的数据,这时候我们可以使用mybatis的DataSourceTransactionManager来实现数据源的切换.下面我们一起来看下来一个简单的实现方式.
步骤:1.首先我们jdbc.properties(名字不一定是这个,代指保存数据库连接信息的配置文件)里面有多个数据源,一个老的一个新的
123456789jdbc.driver:com.mysql.Driverjdbc.url:xxxjdbc.username:xxxjdbc.password:xxxold.jdbc.driver:com.mysql.Driverold.jdbc.url:xxxold.jdbc.username:xxxold.jdbc.password:xxx
2.写一个CustomerContextHolder,里面的属性ThreadLocal保存的就是当前数据源的key,每一个数据源对应一个key,这里默认是新数据库-new,另一个是老数据库-old
1234567891011121314151617public class CustomerContextHol ...
linux中的零拷贝
linux中的零拷贝技术大家平时一定听说过零拷贝这个词,通常可能是在使用netty,kafka等框架的时候听到的,如果你没用听说过这个词,也没有关系咱们今天就来看一看这个零拷贝是啥?
咱们先来看看零拷贝的概念:摘自维基百科:零复制(英语:Zero-copy;也译零拷贝)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。从这句话上咱们可以知道不需要CPU来复制数据,提高了传输效率。因此为了提高传输效率,在网络非常发达的今天显得更加有必要,想想看咱们平时动不动就4G,5G看电影刷短视频等,需要大量的网络传输,数据量越大,复制拷贝的成本就越高。所以咱们还是有必要好好了解一下零拷贝技术,毕竟在生活和工作中都有很大的用处。咱们知道每种语言中很多特性其实都是参考操作系统的,比如java中的JMM内存模型,就是参考的操作系统的内存模型。所以我们讲java的零拷贝之前,先学习一下操作系统中的零拷贝是怎么回事,学完之后,那再学习java的零拷贝就回清晰很多。
我们看下linux的传统传输流程图:首先引入一个概念:DM ...
shell中的单引号和双引号理解
#### 问题描述: 最近在写shell脚本的时候,涉及到一个使用shell脚本发送json数据的问题,就是发送的json数据双引号不见了,导致数据格式不正确,收到了错误的响应。后来仔细查看了资料才发现自己之前对shell单引号和双引号的理解有一些问题,在此记录一些现象和结果。
问题解析: 1.首先,我这边使用的是bash脚本,放一下bash脚本的手册地址; 2.然后我们看一下官方的手册里面是怎么介绍的: 2.1 单引号:
12Single Quotes:Enclosing characters in single quotes (‘'’) preserves the literal value of each character within the quotes. A single quote may not occur between si ...
理解shell脚本中的2_&1
#### 问题描述: 最近在写crontab的时候,看到一条0 10 * * * * sh /abc/f.sh > /abc/log 2>&1大致长成这样的一条定时任务。不知道最后面的2>&1是起什么作用的,然后就去学习了一下。
问题分析: 1.首先我们看前面的0 10 * * * * sh /abc/f.sh > /abc/log,这个比较好理解,意思是每天的10点整去执行f.sh脚本,并且将标准输出重定向到log文件中 2.我们再来看后面的2>&1, 然后我们还得知道一个概念,文件描述符,可以参考下,wiki对文件描述符的简绍和文件描述符的原理链接。简单的来说就是有一个整数,它的枚举值是0(标准输入),1(标准输出),2(标准错误),然后0是从键盘输入,1和2都是输出到屏幕上。   ...
机器学习3-线性代数回顾
机器学习3-线性代数回顾
引语:这一节基本上就是大学中学的线性代数的内容的复习。
1.矩阵和向量矩阵定义:矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。matrix:rectangular array of numbers矩阵的维数:是指它的行数和列数,比如上图就是一个4x2的矩阵dimension of matrix:number of rows x number of columns矩阵的元素:是矩阵中的数值,使用Aij来表示第i行第j列的数值
向量是特殊的矩阵:只有一列的矩阵,向量通常用小写字母表示,矩阵通常用大写的字母表示,向量有下标从0开始和1开始的,在机器学习中使用下标从1开始的更加常见一些。
2.加法和标量乘法矩阵的加法:行列相同的两个矩阵把Aij和Bij相加。比如下图中结果C11(C是结果) = A11 + B11, 5 = 1 + 4。剩下的结果也直接对应的相加就可以得出结果。但是只能是行列相同的矩阵进行加法,不同的行列没法进行加法。
矩阵的标量乘法:矩阵的每一项和标量相乘即可。
3.矩阵向量 ...
不同路径II
leetcode63 Unique Paths II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
例如,上图是一个7 x 3 的网格。有多少可能的路径?
说明:m 和 n 的值均不超过 100。
输入:[ [0,0,0], [0,1,0], [0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共有 2 条不同的路径:
向右 -> 向右 -> 向下 -> 向下
向下 -> 向下 -> 向右 -> 向右
题解:这道题跟上道题有些类似,也是使用动态规划来解决,但是要考虑更多的边界条件,因为有障碍物的存在,很多路径是不能走的.和上题一样,我们先设dp[m,n]为m,n的不同路径结果.根据上道题和测试过障碍物在只占一个格子是0种路径,
得出装填转移方程是:$$dp[m,n]\begin{cases}dp[i][j] = 0 , obstac ...
去除链表倒数节点
要不要组队来刷leetcode呀 咳咳咳,今天这篇文章感觉水分有点多,不是很干。一是因为最近加班比较多,其实准备是打算写dubbo的,看了一些源码,然后写写源码的分析之类的。 二是最近跟几个同学一起建了一个刷题的群,相互学习学习,就写写题解,推广推广吧。(虽然我知道并没有啥粉丝)
这个算一篇发起刷题的文章吧,文章流程是写了leetcode的一个题解,为后面建群学习抛砖引玉,然后建了一个leetcode刷题的群,咱们可以相互监督,相互解答,相互提高自己的算法水平,开阔思路。 毕竟程序就是算法加数据结构,而刷题能很大程度的提高咱们算法和数据结构的熟练度和让自己变得更聪明。你想想你有一个苹果,我有一个橙子,我们交互一下,还是每人只有一个水果。 但是你有一个方法,我有一个方法,我们交换一下,每人就有了两个方法,互利双赢,稳赚不赔啊。群内还有微软的acm大神坐镇,还在等什么赶紧加入一起学习吧~
不想看刷题的可以先溜了~ 想一起刷题的可以看下本文下方的二维码的群,加入一下。
首先,咱们来看题,这是leetcode的20题。
给定一个链表,删除链表的倒数第 n 个节点,并且返 ...
leetcode114-二叉树展开为链表
leetcode114 二叉树展开为链表题目:123456789101112131415161718192021222324给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6
思路:一开始最初的想法就是遍历一次二叉树,然后把节点依次存入到一个新的链表中。后来写完后发现题目说的是原地展开为一个单链表,那么就是不能创建空间复杂度是大于O(1)的数据结构了(原地算法要求引入的数据结构是常量级别的)。
方法一:最开始的想法引入了O(n)的栈用来前序遍历二叉树
12345678910111213141516171819202122public void flatten(TreeNode root) { List<TreeNode> result = new LinkedList<>(); Stack<TreeN ...
是否有效二叉搜索树
题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:
12345输入: 2 / \ 1 3输出: true
示例 2:
123456789输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。
题解:这个题可以利用中序遍历来解决,当然遍历也是使用递归,只不过因为是二叉搜索树,有特殊的特性,是左子树的值不能大于根节点,根节点的值不能大于右子树的值。所以从左中右的顺序来看是一个递增的顺序。于是我们可以使用遍历左子树,根节点,右子树来判断是否是一颗二叉搜索树。
12345678910111213141516171819class Solution { long currentValue = Long.MIN_VALUE; public b ...
环形链表II
环形链表II这是leetcode的142题,朋友说这是链表中比较经典的快慢指针题目,就去做了一下,不过没用快慢指针做出来。用的hash写的,毕竟hash写法比较容易。但是快慢指针的方式很巧妙,就像用两个已知速度的运动员去测量一个跑道是否是环形的。用现实的例子听起来很蠢。。。不过方法是听聪明的,待我慢慢说来。呆!先看题
题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
说明:不允许修改给定的链表。
示例 1:
输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0输出:tail connects to node index 0解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:h ...