- 浏览: 184448 次
- 性别:
- 来自: 北京
-
最新评论
-
小黄牛:
基于支付系统真实场景的分布式事务解决方案效果演示:http:/ ...
spring 7 种分布式事务实现 -
blue2048:
看看两个实例的端口要不一样,另外,看看日志提示有没有错误
elasticsearch 单机部署 集群 -
mtsw2011:
我改了# Set the bind address speci ...
elasticsearch 单机部署 集群
文章列表
本文以申明式事务为例,开始下探,分析spring事务的源码结构,再以mybatis为例,分析spring事务是如何作用于ORM的。
首先看看spring的配置文件,简而言之,TransactionAttributeSourceAdvisor采用AOP方式,将事务transactionInterceptor织入注解的特定的方法上
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property n ...
这道题有个点,即使用空间来对树进行分层,这个点对于不完全二叉树还是很常见的技巧
/**
* Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
public class Solution {
public void conne ...
这题没啥难度,主要是仔细了
/**
* Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
public class Solution {
public void connect(TreeLinkNode root) {
...
这两道题没什么说的,就是杨辉三角形的性质
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<List<Integer>>();
if(numRows<0){
return triangle;
}
...
动态规划的
1. 转移函数f[i][j]从top到第i排第j个元素的最小距离
2. 考虑到边界问题,状态转移方程为
int left = j-1<0?0:j-1;
int right = j>i-1?i-1:j;
f[i][j]=Math.min(f[i-1][left], f[i-1][right])+triangle.get(i).get(j);
public class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
...
问题1比较简单, 使用一个pre变量,记录之前最小值就可以了
public int maxProfit(int[] prices) {
if (prices == null || prices.length == 0) {
return 0;
}
int max = 0;
int minPre = prices[0];
for (int i = 1; i < prices.length; i++) {
int price = prices[i]; ...
这道题估计难在审题上,题目描述太简单了,导致提交各种情况没想到,整个代码比较简单,可以解释题目,采用递归后续遍历的方式,从叶子节点开始算起,每次计算产生两个值,一个是最大通路值(maxPathSum ),一个是子树能为父节点提供的最大单支值(findSingleBranchMaxPathSum递归返回的值)
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeN ...
Statement在具体orm的过程总,主要靠这三个类进行参数装配,结果装配和相应的类型转换
parameterHandler
resultSetHandler
typeHandlerRegistry
protected BaseStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler) {
this.configuration = mappe ...
KeyGenerator接口有三个实现类,SelectkeyGenerator,Jdbc3KeyGenerator,NoKeyGenerator
其中SelectkeyGenerator对应于生成主键操作,即针对insert类型的sql语句,配置selectKey的策略,自动为insert语句的参数补全id
Jdbc3KeyGenerator和NoKeyGenerator对应于insert写库,是否取回表的自增Id,它对应的Configuration的useGeneratedKeys全局配置,或者Mapper中insert操作的useGeneratedKeys属性,可以看到如果配置了,则 ...
JDBC1.0 、JDBC2.0 、JDBC3.0 中分别用以下方法创建Statement 。 JDBC1.0 : createStatement() JDBC2.0 : createStatement(resultSetType, resultSetConcurrency) JDBC3.0 : createStatement(resultSetType, resultSetConcurrency, resultSetHoldability)
下面依次分析resultSetType 、resultSetConcurrency 、resultSetHoldability 这几个参数的含义。
...
如前文所诉,statementhandler是具体操作jdbc statement执行数据库sql的类
StatementHandler的初始化
跟随Executor,在Executor需要执行数据库操作时新建
依赖-Executor,MappedStatement, ResultHandler
StatementHandler的创建过程如下
//Executor执行数据库操作的方法中创建handler
StatementHandler handler = configuration.newStatementHandler(this, ms, par ...
这道题可以考虑两种方式解决
1. 深度优先遍历
2. 广度优先遍历
其中算法的效率取决于数组中单词的顺序,如果解决方案靠前,那么深度优先所用时间短;如果解在中间的位置,那么广度优先用时较短
深度优先采用回 ...
Executor的初始化
跟随SqlSession,Executory是SqlSession的对象属性
依赖-Transaction,执行时需要根据特定的事务,进行commit,rollback,close操作
Executory的创建过程如下
在Configuration的配置文件中执行全局的ExecutoryType,有BATCH,REUSE,SIMPLE,如果Cache开启的话还有CachingExecutor,他是前三种Executor的代理类
public Executor newExecutor(Transaction tra ...
SqlSession的初始化
声明周期-SqlSession为回话声明周期,理论上一次用户请求,即一个线程里只开启一次session,使 用后即关闭
依赖-DefaultSqlSessionFactory为SqlSesson的工场类,看下面的代码,即可知道Configuration, Executor和Connection为它所依赖对象
private SqlSession openSessionFromConnection(ExecutorType execType, Connection connection) {
tr ...
原始的初始化流程
1. 配置Configuration xml文件
2. SqlSessionFactoryBuilder.build拿到SqlSessionFactory(全局唯一)
3. 代码中的调用如下
SqlSession session= sqlSessionFactory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
UserVo vo = new UserVo();
vo.setName("a" ...