首页
学习
活动
专区
工具
TVP
发布

大闲人柴毛毛

专栏成员
189
文章
261737
阅读量
63
订阅数
常用的分布式事务解决方案
众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事务解决方案。废话不多说,那就开始吧~ 什么是事务? 事务
大闲人柴毛毛
2018-03-29
4.8K0
手把手0基础项目实战(三)——教你开发一套电商平台的安全框架
写在最前 本文是《手把手项目实战系列》的第三篇文章,预告一下,整个系列会介绍如下内容: 《手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)》 《手把手0基础项目实战(二)——微服务架构下的数据库分库分表实战》 《手把手0基础项目实战(三)——教你开发一套安全框架》 《手把手0基础项目实战(四)——电商订单系统架构设计与实战(分布式事务一致性保证)》 《手把手0基础项目实战(五)——电商系统的缓存策略》 《手把手0基础项目实战
大闲人柴毛毛
2018-03-29
1.4K0
10分钟搞懂蚁群算法
蚂蚁几乎没有视力,但他们却能够在黑暗的世界中找到食物,而且能够找到一条从洞穴到食物的最短路径。它们是如何做到的呢? 蚂蚁寻找食物的过程 单只蚂蚁的行为及其简单,行为数量在10种以内,但成千上万只蚂蚁组成的蚁群却能拥有巨大的智慧,这离不开它们信息传递的方式——信息素。 蚂蚁在行走过程中会释放一种称为“信息素”的物质,用来标识自己的行走路径。在寻找食物的过程中,根据信息素的浓度选择行走的方向,并最终到达食物所在的地方。 信息素会随着时间的推移而逐渐挥发。 在一开始的时候,由于地面上没有信息素,因此蚂蚁们的行走
大闲人柴毛毛
2018-03-29
8.3K7
Java异常体系中的秘密
相信大家每天都在使用Java异常机制,也相信大家对try-catch-finally执行流程烂熟于胸。本文将介绍Java异常机制的一些细节问题,这些问题虽然很小,但对代码性能、可读性有着较为重要的作用
大闲人柴毛毛
2018-03-29
1K0
揭秘ThreadLocal
ThreadLocal是开发中最常用的技术之一,也是面试重要的考点。本文将由浅入深,介绍ThreadLocal的使用方式、实现原理、内存泄漏问题以及使用场景。 ThreadLocal作用 在并发编程中时常有这样一种需求:每条线程都需要存取一个同名变量,但每条线程中该变量的值均不相同。 如果是你,该如何实现上述功能?常规的思路如下: 使用一个线程共享的Map<Thread,Object>,Map中的key为线程对象,value即为需要存储的值。那么,我们只需要通过map.get(Thread.curre
大闲人柴毛毛
2018-03-29
1.1K0
程序员必知的并发编程注意事项
获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 单例对象会被多线程共享,因此要保证它是线程安全的,它其中的方法都要保证是线程安全的。 工具类、资源驱动类、单例工厂类都要注意这个问题。 创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者 “过度切换”的问题。
大闲人柴毛毛
2018-03-29
1.4K0
缓存世界中的三大问题及解决方案
目前的IO设备远不能满足互联网应用海量的读写请求。于是便出现了缓存,利用内存的高速读写性能来应付海量的查询请求。然而内存资源非常宝贵,将全量数据存储在内存中显然是不切合实际的。因此目前采用内存和IO结
大闲人柴毛毛
2018-03-29
1.2K0
聊聊对称/非对称加密在HTTPS中的应用
目前常用的加密算法主要分成三类: 对称加密算法 非对称加密算法 消息摘要算法 在互联网中,信息防护主要涉及两个方面:信息窃取和信息篡改。对称/非对称加密算法能够避免信息窃取,而消息摘要算法能够避免信息篡改。 对称加密算法 发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥。 相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。 非对称加密算法 接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方。发送放
大闲人柴毛毛
2018-03-29
1.7K0
图的遍历(BFS+DFS)
图的遍历与树的遍历基本类似,但要注意两个不同: 1. 图中可能有环路,因此可能会导致死循环; 2. 一个图可能由多个独立的子图构成,因此一条路径走到头后要重新选择尚未遍历的起点。 图的邻接表数据结构请参见:图的邻接表示法Java版 宽度优先遍历 思路 选择一个尚未访问的起点,依次访问它的相邻结点; 若相邻结点还有相邻结点的话,再依次访问尚未访问的相邻结点;直到以该结点为起点的这条路径上所有的结点都已访问; 再选择一个尚未访问的结点作为起点,重复上述操作,直到所有结点都已访问为止; 代码实现 /*
大闲人柴毛毛
2018-03-12
1.1K0
图的邻接表示法Java版
边节点 一个边节点有一条边 和 一个终止节点组成。 /** * 边节点(由一条边和一个终止节点构成) */ class ENode{ int id;// 终止节点的编号 in
大闲人柴毛毛
2018-03-12
1.4K0
回溯法(一)——n皇后问题
问题描述 在一个n*n的棋盘上放置皇后,要求:一个皇后的同一行、同一列、同一条对角线上不允许出现其他皇后。请给出所有的放置方案。 算法思路 思路很简单,由于每行每列不能出现两个皇后,因此每行只能放一
大闲人柴毛毛
2018-03-12
1.6K0
Spring速查手册——Bean装配
Spring提供三种Bean的装配方式,分别是: 1. 自动装配Bean 2. 在Java中装配Bean 3. 在XML中装配Bean 1. 自动装配Bean(注解) Spring从两个角度完成Bean的自动化装配: - 组件扫描:扫描上下文中所有的Bean(由@Component、@Named注解完成) - 自动装配:将指定的Bean注入到指定的Bean中(由@Autowired、@Injected注解完成) 1.1. 开启组件扫描 Java的配置方式 @Configuration
大闲人柴毛毛
2018-03-12
8750
Spring速查手册(二)——Bean的作用域
Bean的四种作用域 单例(Singleton):整个应用中,只创建一个bean。 原型(Prototype):每次注入或请求要给bean的时候都创建一个新的bean。 会话(Session):每个session创建要给bean。 请求(Request):每个WEB请求创建一个bean。 PS:Spring默认的bean是单例的! 使用会话/请求作用域的注意点 // 创建一个session的bean @Component @Scope(value=WebApplicationContext.SCOPE_S
大闲人柴毛毛
2018-03-12
6220
Spring速查手册(三)——Spring+JDBC
Spring的数据访问异常体系 JDBC提供了SQLException异常,它是一个检查异常,必须要捕获。 但该异常过于笼统,只要是数据访问发生问题都抛出这个异常。因此很难在抛出该异常后进行恢复,因此该异常就没有抛出的必要。 Spring对JDBC的异常进行了转换,并进行了扩充,使得异常更加具体化,能够根据异常来进行恢复。 此外,Spring的数据访问异常均继承自DataAccessException,它是一个非检查型异常,因此Spring的数据访问异常可抛可不抛。 数据访问模板 Spring
大闲人柴毛毛
2018-03-12
8390
Git命令速记
生成SSH Key ssh-keygen -t rsa -C "youremail@example.com" 在用户主目录里找到.ssh目录 将id_rsa.pub中的数据放到服务器的.ssh目录下 克隆远程仓库 git clone https/git 查看所有的版本提交记录 git log (--pretty=oneline) $ git log commit affd8ca1bc90c0865fbdc425726513b1dd09a523 Author: chaimm <350142639@qq.co
大闲人柴毛毛
2018-03-12
7390
我的Java学习之路
我认为,作为一名合格的程序员,精通一门语言只是最最基本的要求,除此之外,具备扎实的基础知识、了解主流的技术框架、具备快速学习的能力也都非常重要。语言是帮助你实现想法的工具,而作为程序员来说最为重要的东西是语言背后的你的想法,而这些想法需要通过长期的基础积累、经验积累而获得。 我从大二的时候开始接触编程,到现在也有五个年头了。这五年我走了不少弯路、踩了不少坑。至此收到阿里offer,也算是达到了我人生第一阶段的目标。我把我这五年踩过的坑与大家分享,希望大家能少走弯路、在技术的道路上越走越远。 回归正题,我觉
大闲人柴毛毛
2018-03-12
7790
MyBatis源码解析(二)——动态代理实现函数调用
如果我们要使用MyBatis进行数据库操作的话,大致要做两件事情: 1. 定义DAO接口 在DAO接口中定义需要进行的数据库操作。 2. 创建映射文件 当有了DAO接口后,还需要为该接口创建映射文件。映射文件中定义了一系列SQL语句,这些SQL语句和DAO接口一一对应。 MyBatis在初始化的时候会将映射文件与DAO接口一一对应,并根据映射文件的内容为每个函数创建相应的数据库操作能力。而我们作为MyBatis使用者,只需将DAO接口注入给Service层使用即可。 那么MyBatis是
大闲人柴毛毛
2018-03-12
1.1K0
MyBatis源码解析(一)——MyBatis初始化过程解析
1. 准备工作 为了看清楚MyBatis的整个初始化过程,先创建一个简单的Java项目,目录结构如下图所示: 1.1 Product 产品实体类 public class Product {
大闲人柴毛毛
2018-03-12
8530
了解你服务器的心情——top命令详解
top是Linux较为常用的命令,可以监控服务器的CPU、内存、进程的运行情况,话不多说,直接操作。 输入top即可启动: 下面我们就来逐一介绍top向我们展示的内容。 第一行:系统概况 top -
大闲人柴毛毛
2018-03-12
1.7K0
服务器性能优化基础知识
性能调优整体思路 空间换时间 对热点数据缓存,减少数据查询时间。 分而治之 将大任务切片,分开执行。HDFS、MapReduce就是这个原理。 异步处理 若业务链中有某一环节耗时严重,则该环节将拉长业务链的整体耗时。可以将耗时业务采用消息队列异步化,从而缩短业务链耗时。 并行处理 采用多进程、多线程同时处理,提升处理速度。 离用户更近一点 如CDN技术,将静态资源放到离用户更近的地方,从而缩短请求静态资源的时间。 提升可扩展性 采用业务模块化、服务化的手段,提升系统的可扩展性,从而
大闲人柴毛毛
2018-03-09
2.1K0
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档