- 博客(305)
- 资源 (37)
- 收藏
- 关注
原创 分布式事务简介
分布式事务是指跨越多个数据库或服务的一系列操作,这些数据库或服务可能分布在网络的不同节点上,它们共同组成一个完整的逻辑工作单元,必须满足事务的ACID特性(Atomicity, Consistency, Isolation, Durability),即原子性、一致性、隔离性和持久性。原子性:分布式事务中的所有操作作为一个整体,要么全部成功,要么全部失败,不允许部分成功部分失败。一致性:事务完成后,无论事务内部包含多少步骤,都会确保系统从一个有效状态转换到另一个有效状态,保持数据的完整性。隔离性。
2024-03-02 09:19:10
406
原创 mybatis 查询返回Map<String,Object> 类型
mybatis 查询返回Map<String,Object> 类型,平时没太注意怎么用,今天又遇到了总结记录一下,方便以后处理此类问题。Mapper.java中的方法:@MapKey("userId")Map<String,UserInfo> personalInfoByUserIds(List<String> list);mapper.xml文件中的配置:<select id="personalInfoByUserIds" resul
2022-03-25 16:19:28
4673
3
原创 Zabbix监控通过企业微信报警
直接上代码通过Python脚本实现:#!/usr/bin/python#_*_coding:utf-8 _*_import requests,sys,jsonimport urllib3import osimport logginglogging.basicConfig(level = logging.DEBUG, format='%(asctime)s, %(filename)s, %(levelname)s, %(message)s', datefmt='%a, %d %b
2022-02-25 16:19:18
1926
原创 Seata入门demo
通过一段时间的Seata学习,以及对Seata的理解记录下来。执行逻辑:1、每个项目中的相同配置seata相关文件,暂时使用file作为配置中心和注册中心,数据存储使用数据库。file.conf## transaction log store, only used in seata-serverstore { ## store mode: file、db、redis mode = "db" ## file store property file {...
2021-11-16 23:01:15
1916
原创 seata介绍
1、AT模式1.1 前提1.2 整体机制1.3 写隔离1.4 读隔离2、工作机制2.1 一阶段2.2 二阶段——回滚2.3 二阶段——提交Seata 是一款开源的分布式事务解决方案,Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式。1、AT模式1.1 前提基于支持本地 ACID 事务的关系型数据库。 Java 应用,通过 JDBC 访问数据库。1.2 整体机制两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同
2021-10-09 18:06:03
585
原创 redis设计与实现:简单动态字符串SDS
1、SDS定义SDS遵循C字符串以空字符结尾的惯例,保存空字符的一字节空间不计算在SDS的len属性里面。空字符对于SDS使用者是透明的,遵循空字符结尾的好处是SDS可以直接重用一部分C字符串函数库里面的函数。2、SDS和C字符串的区别1)常数复杂度获取字符串长度:C语言获取一个字符串的长度需要遍历整个字符串时间复杂度为O(N),而SDS在属性len中记录了字符串长度,获取字符串长度的时间复杂度为O(1)。2)杜绝缓冲区溢出:C字符串在执行拼接字符串时,如果长度不够...
2020-05-19 11:25:09
360
原创 机器学习:KNN用java代码实现
KNN算法:使用欧式距离计算方法,从源对象集合中选取距离目标节点最近的K个节点,判断K个节点所属类别最多的节点,即为目标节点所属的类别。此处只是简单的实现KNN算法的过程,其中有一些优化的地方不再修改,还请小伙伴自行优化。KNN的model类:package com.spring5.bigdata.knn;/** * @author yinxf * @date 2020-05-16 */public class KnnNode { private float x; //X坐
2020-05-19 11:10:50
1155
原创 如何设计一个秒杀系统总结
通过学习"如何设计一个秒杀系统"课程,总结秒杀相关的一些重要问题。1.秒杀系统主要解决两个问题,一个是并发读,一个是并发写。 并发读的优化就是尽量减少客户端到服务端来读数据,或者读更少的数据;并发写处理原则也一样,在数据库独立出一个库,做特殊处理。2.秒杀的整体架构包括稳、准、快三个关键字: 稳:即流量符合预期时整体架构要满足高可用,就算超出预期也不能掉链子...
2019-11-13 15:45:03
5003
3
原创 org.springframework.beans.factory.NoUniqueBeanDefinitionException导致错误原因之一:spring事物
项目运行过程中报错报错信息如下:org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected sing...
2019-02-19 15:30:44
4081
4
原创 MySQL中不等号索引问题
最近在使用MySQL中的一个小总结。在MySQL中,不等号<>在主键字段和唯一索引字段中会走索引,在普通索引的字段上不会走索引。 1.当不等号<>作用在普通索引字段上 表信息:使用explain查看普通索引字段,没有走索引2.当不等号<>作用在主键索引字段上 使用explain查看主键索引字段,走索引。 3...
2019-01-31 17:22:06
15443
3
转载 支付对账系统怎么设计?
支付对账系统是整个支付清结算体系中具体基础性意义的一个环节,是确保支付平台与各类第三方支付渠道数据一致性的关键系统,是商户资金结算、资金划拨、资金报表等逻辑准确运行的重要前提。 支付对账涉及账单下载处理、核心对账、差错处理等诸多细节逻辑,同时根据交易量大小的不同,需要处理的数据量规模也不尽相同,需要在数据处理时进行一些比较细致地思考。在本文中,作者以单渠道日成功交易订单量300W左右规模...
2019-01-15 13:13:43
2987
2
原创 多级缓存实例
一个使用了Redis集群和其他多种缓存技术的应用系统架构。 首先用户的请求被负载均衡服务器分发到Nginx上,此处常见的负载均衡算法有轮询和一致性哈希,轮训可以使服务器的请求更加均衡,而一致性哈希可以提高Nginx应用的缓存命中率。 接着,Nginx服务器读取本地缓存,实现本地缓存的方式可以是lua shared dict,或者面向磁盘或内存的Nginx proxy ca...
2019-01-15 13:06:06
2201
3
转载 互联网账户系统如何设计(下篇)
导读 在上一篇文章中(互联网账户系统如何设计(上篇)?)我们通过场景举例的方式,讨论了一套相对通用的互联网业务账户系统,从业务模型上应该如何定义。那么除了从业务模型上进行定义外,在具体系统实现上又该如何设计?又有哪些需要注意的地方呢?在本篇内容中小码农就和大家一起讨论下账户系统的实现细节,希望可以和大家一起交流进步。 事实上账户系统的业务逻辑是比较复杂的,对数据的一致性要求很高,特...
2019-01-04 11:13:55
1210
转载 互联网账户系统如何设计(上篇)
在很多互联网公司业务发展的早期,业务模式比较单一的情况下,涉及用户账户资金交易相关的逻辑也比较简单,但是随着公司业务模式的不断创新及类型的多元化发展,会渐渐发现现有系统账户逻辑越来越雍肿,不仅难以支持新业务的扩张,对现有业务的支持也适配困难,最终导致新业务系统不得不重新搭建自己的业务账户逻辑,造成重复建设不说,也往往给后续的财务资金核算造成混乱。以某互联网A租车公司的业务发展路径为例?...
2019-01-04 11:10:15
2308
原创 Centos7中MySQL的安装并设置开机启动
CentOS 7不带Mysql数据库了,默认的数据库是MariaDB(Mysql的一个分支)。可以按照以下步骤手动安装Mysql数据库。1.首先检查系统中是否安装有mysqlrpm -qa | grep mysql如果返回空值,说明没有安装MySQL2.下载mysql的repo源 如果提示没有wget命令,可以使用 yum install -y wget安装wge...
2018-12-27 00:05:51
19506
3
原创 oracle数据库查看表空间默认大小及使用情况总结
oracle查询数据库的默认表空间情况操作步骤如下: 1. 查询用户对应的表空间,我们可以看到针对不同的数据库用户Oracleselect username, default_tablespace, temporary_tablespace from dba_users; 2. 查询用户的对应的数据文件,以及数据文件大小select tablespace_name, f...
2018-12-10 13:10:04
11087
原创 JVM内存模型介绍
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。 java虚拟机所管理的内存将会包括以下几个运行时数据区域,有程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。以下将分别进行介绍。 一、程序计数器 程序计数器是一块较小的内存空间,可以看做是当前线程所执行的...
2018-08-21 16:03:03
446
转载 BTree和B+Tree详解
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大...
2018-08-08 17:00:42
56606
11
原创 Java nio完成网络通信(三)
使用Java nio实现网络通信。以下是用nio实现简单网络通信的demo/** * 使用NIO完成网络通信 * *1.通道channel:负责连接 * java.nio.channels.Channel * |--selectableChannel * |--socketchannel * |--serverSocketChannel * ...
2018-08-06 10:38:16
689
原创 java NIO中的channel、分散、聚集(二)
Java NIO中的通道(channel)介绍、通道的实现方式、直接缓冲区和非直接缓冲区、nio中的分散聚集。/** * * * 一.通道(channel):用于源节点和目标节点的连接。在Java nio中负责数据的传输, * channel本身不存储数据,因此需要配合缓冲区进行传输。 * * 写数据到Buffer有两种方式: 从...
2018-08-06 10:33:06
7625
原创 java nio中几个重要的属性(一)
最近学习一下Java NIO非阻塞式IO,下面是NIO中几个重要的属性和方法,方便大家理解/** * nio 非阻塞IO * nio核心 Channel,Buffer 和 Selector * * 1.缓冲区buffer:在nio中负责数据的存取,缓冲区就是数据,用于存储不同的数据类型 * * 数据类型不同(boolean除外),提供对应的缓冲区,其实就是数组 * Byt...
2018-08-03 15:50:24
854
原创 centos7安装rabbitmq操作步骤
本文使用的是Centos7一、编译安装方式1.依赖环境的安装-如果需要用编译安装erlang语言环境,需要安装C++编译。yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson2.er...
2018-07-26 17:08:15
11619
5
原创 Java 排序算法冒泡排序、插入排序、选择排序、奇偶排序、并行奇偶排序
本章将介绍一些常用的排序算法,有常用的串行排序,如冒泡排序、选择排序、插入排序、奇偶排序;还有对奇偶排序的并行实现方法。一、串行排序直接上代码public static void main(String[] args) { int[] array = {9,8,23,34,65,78,3,46,24}; // sortBubble(array); //冒泡 // selectSorts(...
2018-06-27 11:10:42
622
8
原创 mysql实用总结
MySQL 5.7版本中实用功能总结,有些功能低版本也可以使用。1.GROUP_CONCAT(fieldName)将分组中每个字段的值显示出来SQL : SELECT t.user_id,GROUP_CONCAT(bank_name) from account t GROUP BY t.user_id查询结果如下:2.WITH ROLLUP在所有查询出的分组记录之后增加一条记录,该记录计算查询出的...
2018-06-11 10:58:57
502
原创 用mybatis往oracle批量插入数据报错java.lang.StackOverflowError
往oracle中批量插入10000条数据,报错如下java.lang.StackOverflowError at java.util.HashMap.hash(HashMap.java:362) at java.util.HashMap.getEntry(HashMap.java:462) at java.util.HashMap.get(HashMap.java:417) at com.alib...
2018-06-07 10:22:07
4416
1
原创 mybatis 缓存总结以及遇到的问题
一级缓存MyBatis 默认开启了一级缓存,一级缓存是在SqlSession 层面进行缓存的。即,同一个SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一次数据库查询,然后把数据缓存到缓冲中,以后直接先从缓存中取出数据,不会直接去查数据库。 但是不同的SqlSession对象,因为不同的SqlSession都是相互隔离的,所以相同的Mapper、参数和方法,他...
2018-06-01 15:05:47
9218
1
转载 数据库事务的四大特性以及事务的隔离级别
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。⑵ 一致性(Consi...
2018-03-02 14:20:48
296
转载 详解java类的生命周期
引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当抛砖引玉,希望对在这个问题上有疑惑的朋友有所帮
2018-01-26 11:27:23
530
原创 rocketmq初学者入门
最近由于工作需要开始学习消息中间件rocketmq首先,介绍一下rocketmq的安装。1.解压rocketmq2.新解压的rocketmq是没有执行权限的,需要修改文件权限。3.修改runbroker.sh和runserver.sh的内存设置,因为这两个文件启动时默认内存比较大。具体根据电脑配置进行修改。两个文件的修改结果相同,结果如下4.后台
2018-01-21 22:04:11
8497
4
转载 互联网支付系统整体架构详解
互联网支付系统整体架构详解在互联网产品运营中,有很多小伙伴或许会遇到这样的困扰:产品好不容易推出来了,流量成本节节攀升,用户的活跃度、留存度却持续下降。因此在瞬息万变的互联网产品环境中,需要研发接入支付系统来加入商业行为的闭环,支付系统能够帮助企业更好地实现商业化,利用那些为用户而生的支付体系产品,实现用户积累、商业变现。对于支付系统
2018-01-09 14:37:54
7040
原创 20个非常有用的Java程序片段
先收藏了,以后应该用的到。下面是20个非常有用的Java程序片段,希望能对你有用。1. 字符串有整型的相互转换String a = String.valueOf(2); //integer to numeric string int i = Integer.parseInt(a); //numeric string to an int2. 向文件末尾添加内容
2017-12-26 09:08:20
408
原创 二维码的两种生成方法(前端js生成,后端java生成)
最近项目中需要开发生成二维码的功能,方便使用手机支付,在网上查了一些资料,把用过的方法进行总结。1.前端js生成二维码demo下载:http://download.youkuaiyun.com/download/yin767833376/10165335html页面代码: Render in tableRend
2017-12-20 10:32:39
49624
7
转载 大规模分布式应用之海量数据和高并发解决方案总结一二
一、网站应用背景开发一个网站的应用程序,当用户规模比较小的时候,使用简单的:一台应用服务器+一台数据库服务器+一台文件服务器,这样的话完全可以解决一部分问题,也可以通过堆硬件的方式来提高网站应用的访问性能,当然,也要考虑成本的问题。当问题的规模在经济条件下通过堆硬件的方式解决不了的时候,我们应该通过其他的思路去解决问题,互联网发展至今,已经提供了很多成熟的解决方案,但并不是都具有适
2017-12-19 10:53:55
601
原创 曾经的王者Dubbo低调重启维护 焕发新春的它要走向何处
几个月前,开源社区发生了一件大事,那个曾经风靡国内Java开发者的开源RPC服务框架——Dubbo,低调宣布将重新得到官方维护与支持。对于Dubbo框架,大部分Java开发者都不会感到陌生,它自诞生起就备受关注。2011年末,阿里巴巴在GitHub上开源了基于Java的分布式服务治理框架Dubbo,之后它成为了国内该类开源项目的佼佼者,许多开发者对其表示青睐。同时,先后有不少公司在
2017-12-13 11:47:09
2567
转载 @Transactional事务几点注意
这里面有几点需要大家留意:A. 一个功能是否要事务,必须纳入设计、编码考虑。不能仅仅完成了基本功能就ok。B. 如果加了事务,必须做好开发环境测试(测试环境也尽量触发异常、测试回滚),确保事务生效。C. 以下列了事务使用过程的注意事项,请大家留意。1.不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注
2017-10-24 14:42:20
1303
转载 如何通过Mysql的二进制日志恢复数据库数据
经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响。所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlog)来恢复数据。 系统环境:操作系统:CentOS 6.5 X64 (虚拟机);WEB服务:PHP+Mysql+apache;网站:为方便,直接在本地搭建一个DEMO站点;
2017-09-30 16:24:23
650
转载 ireport制作小技巧
首先ireport中大小写问题:1、parameter中如果小写,引用也小写2、$F{},一般都大写3、子报表中引用父报表中查询出来的值时,只需要小写即可,即在子报表的parameter中只需要小写一、iReport 中获取系统当前时间1、选择TextField类型为 Java.util.Date,选择TextField的Expressi
2017-09-08 11:45:45
927
转载 使用存储过程将Oracle数据批量导出为多个csv文件
数据库有如下表结构:aaa ( obj_id NUMBER, (Primary Key) obj_name VARCHAR2(80), obj_size NUMBER NOT NULL obj_time NUMBER NOT NULL
2017-08-30 16:46:19
3975
转载 Spring注解详解
概述注释配置相对于 XML 配置具有很多的优势:它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。注释和 Java 代码位于一个文件中,
2017-08-29 16:49:42
383
阿里巴巴Java开发手册
2017-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人