Spring&Mybaits数据库配置解惑

一、前言

一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能会遇到坑,所以下面对这些配置项进行一一解说 阅读全文

《Python3.6官方文档》– 第十一章

第二部分涵盖了更高阶的模块,支持更专业的编程需求,这些模块很少出现在小的脚本中。

格式化输出

reprlib 提供一系列repr() 对很大或深度层叠的容器进行定制化的压缩展示。

import reprlib

reprlib.repr(set('supercalifragilisticexpialidocious'))

pprint 提供更成熟的控制,将内建对象和用户定义对象更易读地打印出来,当结果长于一行时,”pretty printer”添加行数和缩进来将数据结构更清楚地展现出来。

阅读全文

一次线上问题排查所引发的思考

前言

之前或多或少分享过一些内存模型对象创建之类的内容,其实大部分人看完都是懵懵懂懂,也不知道这些的实际意义。

直到有一天你会碰到线上奇奇怪怪的问题,如:

  • 线程执行一个任务迟迟没有返回,应用假死。
  • 接口响应缓慢,甚至请求超时。
  • CPU 高负载运行。

这类问题并不像一个空指针、数组越界这样明显好查,这时就需要刚才提到的内存模型、对象创建、线程等相关知识结合在一起来排查问题了。

正好这次借助之前的一次生产问题来聊聊如何排查和解决问题。

阅读全文

MySQL 中基于 XA 实现的分布式事务

五、MySQL 中基于 XA 实现的分布式事务

5.1 XA协议

首先我们来简要看下分布式事务处理的XA规范

 

image.png

阅读全文

《架构方法论》分层架构

原文链接  作者;方腾飞

软件架构有多种架构模式,其中分层架构是目前最流行,应用最广泛的架构模式。那么什么是分层架构?为什么要采用分层架构?一个系统应该分几层合适?分层架构的好处有哪些?这些问题将是这篇文章要探讨的。大家可以在阅读本文之前先思考下这些问题,然后再看看本文的观点,看完之后欢迎通过评论进行交流。

什么是分层架构?

分层架构是将软件模块按照水平切分的方式分成多个层。一个系统由多层组成,每层由多个模块组成。那么到底分几层合适?我认为根据不同的复杂度分成不同的层次,最基本的是分层架构是三层,即表现层,领域层和数据持久层。而《领域驱动设计》Eric Evans建议分四层分别是表现层,应用层、领域层和基础层,业务逻辑在领域层,基础层比持久层的范围更大,不仅可以提供持久层服务,还可以提供缓存等服务。四层中的应用层是对三层架构中领域层进行进一步拆分。但是无论怎么分层,业务逻辑永远在领域层。

阅读全文

何为脏读、不可重复读、幻读

2.0 前言

事务的隔离性是指多个事务并发执行的时候相互之间不受到彼此的干扰的特性,隔离性是事务ACID特性中的I,根据隔离程度从低到高分为Read Uncommitted(读未提交),Read Committed(读已提交),Repeatable Read(可重复读),Serializable(串行化)四种隔离级别。在具体介绍事务隔离性前先介绍几个名词,以便说明数据库在并发操作时候可能存在的问题,以便展开来探讨这四种隔离级别对应存在哪些问题,哪些隔离级别解决了哪些问题。 阅读全文

认知升级-成败取决于见识

最近在读吴军的《谷歌方法论》和《见识》,结合自己的理解分享一下里面的观点。一本书其实观点也就一页纸这么多,其他的内容都是在举例子证明这些观点。不同的人在不同的年龄段对书中观点的理解会不一样,因为观点的理解和自己的经历有关,经历和观点产生共鸣才能有所收获。所以我并没有把书中全部的观点总结出来,而是结合自己的经历来做一次分享。

人生学会做减法

生有涯,知无涯。如果做得事情不对,就算提高了效率也是徒劳,事情多效率也很难提升,所以人生要学会做减法,要学会少做事,甚至不做事,意思是自己要能识别重点做哪些事,哪些事可以不做,这些事不做天不会塌下来。因为如果把时间集中起来将事情做的比别人好,会带来十倍的收益。比如你在学习架构,可以花一个月的时间来系统化学习写一篇长篇文章,价值一定远大于你一晚上写出来的短文。人在工作中容易捡芝麻丢西瓜,喜欢做简单的事情,真正有创造性的工作做不来,捡几百个芝麻不如一个西瓜。我们需要能够跳出思维定式,换一个角度来判断一件事情的重要性,需要舍弃很多利益。能力晋升一个台阶,职责影响力增加一个数量级。大家可以思考下自己在工作中哪些是在捡芝麻,哪些是在做西瓜。

阅读全文

分布式事务- TCC编程式模式

一、前言

严格遵守ACID的分布式事务我们称为刚性事务,而遵循BASE理论(基本可用:在故障出现时保证核心功能可用,软状态:允许中间状态出现,最终一致性:不要求分布式事务打成中时间点数据都是一致性的,但是保证达到某个时间点后,数据就处于了一致性了)的事务我们称为柔性事务,其中TCC编程模式就属于柔性事务,本文我们来阐述其理论。 阅读全文

《Python3.6官方文档》– 第一章

1. 开胃小菜

如果你有许多在电脑上的工作要做,并发现其中的任务一些是可以自动化的。 例如,你可能希望执行一个能够搜索并替换大量的文本文件程序,或者是有需要以一种复杂的方式去重命名和重新排列一堆照片文件。 又或许你想写一个小的自定义数据库或专门的GUI应用程序,或简单的游戏。

如果你是一个专业的软件开发人员,你可能需要开发一个引入数个C / C ++ / Java库的程序,但发现常规的写/编译/测试/重新编译的开发方式太慢了。 也许你正在为这样一个库编写一个测试套件并发觉为它编写测试代码是一项乏味的任务。 或者,你希望使用一种可扩展的语言写一个程序,但是你并不想设计和实现一个全新的语言。

那么,Python就是为你量身定制的。

阅读全文

我的阿里面试之路

前言

最近有些朋友在面试阿里,加上 Java-Interview 项目的原因也有小伙伴和我讨论,近期也在负责部门的招牌,这让我想起年初那段长达三个月的奇葩面试经历?。

本来没想拿出来说的,毕竟最后也没成。但由于那几个月的经历让我了解到了大厂的工作方式、对候选同学的考察重点以及面试官的套路等都有了全新的认识。

当然最重要的是这段时间的查漏补缺也让自己精进不少。

阅读全文

分布式事务- 三阶段协议

一、前言

前面我们介绍了为解决分布式事务而提出来的的二阶段协议,本文首先来讲解二阶段的不足,然后阐述三阶段协议,三阶段协议也是一个标准的协议,也并没有说具体如何实现。 阅读全文

分布式事务- 二阶段协议

一、前言

在单个数据库实例时候,我们可以在一个数据源的事务(本地事务)内做多步数据库操作,在事务内的多个操作要么全部执行生效,要么全部不生效。在多数据实例节点时候,我们对多个实例的数据源进行操作时候就没办法把多个操作放到一个大的事务内来保证原子性了,因为多个实例操作的是不同的数据源,而数据库自带的事务是针对单个数据源来说的。 阅读全文

Guava 源码分析之Cache的实现原理

前言

Google 出的 Guava 是 Java 核心增强的库,应用非常广泛。

我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的。

缓存

本次主要讨论缓存。缓存在日常开发中举足轻重,如果你的应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能。

缓存之所以可以提高性能是因为它的读取效率很高,就像是 CPU 的 L1、L2、L3 缓存一样,级别越高相应的读取速度也会越快。

但也不是什么好处都占,读取速度快了但是它的内存更小资源更宝贵,所以我们应当缓存真正需要的数据。其实也就是典型的空间换时间。下面谈谈 Java 中所用到的缓存。

阅读全文

Java 使用 happen-before 规则实现共享变量的同步操作

前言

熟悉 Java 并发编程的都知道,JMM(Java 内存模型) 中的 happen-before(简称 hb)规则,该规则定义了 Java 多线程操作的有序性和可见性,防止了编译器重排序对程序结果的影响。按照官方的说法:

当一个变量被多个线程读取并且至少被一个线程写入时,如果读操作和写操作没有 HB 关系,则会产生数据竞争问题。 要想保证操作 B 的线程看到操作 A 的结果(无论 A 和 B 是否在一个线程),那么在 A 和 B 之间必须满足 HB 原则,如果没有,将有可能导致重排序。 当缺少 HB 关系时,就可能出现重排序问题。

阅读全文

Java NIO AsynchronousFileChannel

原文链接 , 原文作者:Jakob Jenkov,  翻译:Neil Hao

在Java 7,AsynchronousFileChannel 被添加到了Java NIO中。使用AsynchronousFileChannel可以实现异步地读取和写入文件数据。
阅读全文

return top