ExcellentBoy
  • ⏱所有文章
  • 🔖标签
  • 👨🏻‍💻分类
  • 🔍搜索
  • 🙋🏻‍♂️关于我
  • GitHub 

分布式基础

分布式基础 分布式含义 权威定义 利用物理架构形成多个自治的处理元素,不共享主内存,但是通过发送信息合作。 分布式作用 分布式的好处 增大系统容器 加强系统可用性 因为模块化,所有系统模块重用度更高 因为软件服务模块被拆分,开发和发布速度可以并行而变得快 系统扩展性更高 团队协作、技术升级更容易 分布式与单体结构对比 单体架构 分布式架构 新人的学习成本 业务逻辑成本高 架构逻辑成本高 部署、运维 容易 发布频繁、发布顺序复杂、运维难 隔离性 一损俱损,殃及鱼池 故障影响范围小 架构设计 难度低 难度巨大 系统性能 响应快、吞吐量小 响应慢、吞吐量大 测试成本 低 很高 技术多样性 技术单一且封闭 技术多样且开放 系统扩展性 扩展性差 扩展性很好 系统管理成本 成本低 成本高 CAP 定理 CAP 的重要性 C(Consistency,一致性):读操作是否总能读到前一个写操作的结果 A(Availability,可用性):非故障节点应该在合理的时间内做出合理的响应 P(Partition tolerance,分区容错性):当出现网络分区现象后,系统能够继续运行 ...

2020-12-01     更新 2020-12-01  |  546字    2分钟    作者: XiangLin    Java

ThreadLocal 基础

ThreadLocal ThreadLocal 典型应用场景 场景介绍:资源持有、线程安全、线程一致、并发计算 线程独享对象 每个 Thread 内有自己的实例副本,各个线程间不共享。 线程保存全局变量(资源持有) 避免参数在各个方法之间传递 ThreadLocal 主要 API ThreadLocal<T>() 构造函数 ...

2020-11-30     更新 2020-11-30  |  302字    1分钟    作者: XiangLin    Java

Java 线程池学习

线程池是一种基于池化管理线程的工具,经常出现在多线程服务器中。既避免处理任务时创建销毁线程的开销,也避免了线程数据膨胀导致过分调度的问题。

2020-11-29     更新 2020-11-29  |  3949字    8分钟    作者: XiangLin    Java

Spring 事务管理

Spring 事务管理 事务的基础概念 什么是事务 事务是指逻辑上的一组操作,要么一起成功、要么一起失败。 事务的特性 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性:一致性指事务前后数据的完整性必须保持一致。 隔离性:隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。 持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有影响。 事务隔离级别 READ_UNCOMMITED:允许读取还未提交的数据,可能导致脏读、不可重复读、幻读。 READ_COMMITTED:允许读取并发事务已提交的数据,可防止脏读,但不可重复读、幻读仍可能发生。 REPEATABLE_READ: 在统一事务中读取的数据保持一致,即使其他事务对其修改并提交。 SERIALIZABLE:将并发事务串行化,解决一切问题。 Spring 接口介绍 三个抽象接口 事务管理器:PlatformTransactionManager 事务定义信息(隔离级别、传播行为、超时、只读):TransactionDefinition 事务运行状态:TransactionStatus FlatformTransactionManager TranscationDefinition 事务的传播行为 事务传播行为 描述 PROPAGATION_REQUIRED 支持当前事务,如果不存在就新建一个 PROPAGATION_SUPPORTS 支持当前事务,如果不存在就不使用事务 PROPAGATION_MANDATORY 支持当前事务,如果不存在则抛出异常 PROPAGATION_REQUIRES_NEW 创建一个新事务,如果有事务存在则挂起 PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在则挂起 PROPAGATION_NEVER 以非事务方式运行,如果存在事务则抛出异常 PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行 TransactionStatus Spring 事务管理操作 准备转账案例 表设计 CREATE TABLE `account` ( `id` int(11) NOT NULL, `name` varchar(50) NOT NULL, `money` decimal(10, 2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; INSERT INTO imooc_demo.account (id, name, money) VALUES (1, 'a', 1000.00); INSERT INTO imooc_demo.account (id, name, money) VALUES (2, 'b', 1000.00); INSERT INTO imooc_demo.account (id, name, money) VALUES (3, 'c', 1000.00); 实现 DAO 层 public interface AccountDao { void accountAdd(String name, BigDecimal decimal); void accountSub(String name, BigDecimal decimal); } public class AccountDaoImpl implements AccountDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Override public void accountAdd(String name, BigDecimal decimal) { String sql = "update account set money = money + ? where name = ?"; this.jdbcTemplate.update(sql, decimal, name); } @Override public void accountSub(String name, BigDecimal decimal) { String sql = "update account set money = money - ? where name = ?"; this.jdbcTemplate.update(sql, decimal, name); } } 实现 Service 层 public interface AccountService { void transfer(String from, String to, BigDecimal money); } public class AccountServiceImpl implements AccountService { private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } @Override public void transfer(String from, String to, BigDecimal money) { accountDao.accountSub(from, money); accountDao.accountAdd(to, money); } } 使用 XML 方式声明对象 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://hostip:port/dbname"/> <property name="username" value="name"/> <property name="password" value="password"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="accountDao" class="dao.AccountDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate"/> </bean> <bean id="accountService" class="service.AccountServiceImpl"> <property name="accountDao" ref="accountDao"/> </bean> 测试转账效果 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class AccountServiceImplTest { @Resource private AccountService accountService; @Test public void transfer() { accountService.transfer("a", "b", BigDecimal.valueOf(200)); } } 编程式的事务管理 配置事务管理器 ...

2020-11-29     更新 2020-11-29  |  1187字    3分钟    作者: XiangLin    Spring

MyBatis 拦截器

MyBatis 插件原理及 PageHelper 分页插件介绍 从 JDBC 开始 JDBC 介绍 JDBC(Java Database Connectivity)API 是 Java 语言与广泛数据库产品交互的基础,JDBC 技术体现了 Java "write Once,Run AnyWhere"的思想,即Java 为数据库访问提供一套纯 Java API,同时提供一个驱动管理器(DriverManager)。数据库供应商提供自己的数据库驱动,并注册到 Java 提供的DriverManager 中。 ...

2020-10-31     更新 2020-10-31  |  6919字    14分钟    作者: XiangLin    Mybatis

Ubuntu 安装 MySQL

Ubuntu 安装 MySQL Ubuntu Server 和 MySQL Ubuntu Server MySQL Server 使用 APT 安装 MySQL 使用命令安装 MySQL Server sudo apt install mysql-server 查看 MySQL 运行情况 sudo service mysql status 或者 sudo /etc/init.d/mysql status sudo /etc/init.d/mysql status ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-10-08 22:41:04 CST; 2 days ago Main PID: 55128 (mysqld) Status: "Server is operational" Tasks: 40 (limit: 2319) Memory: 332.3M CGroup: /system.slice/mysql.service └─55128 /usr/sbin/mysqld Oct 08 22:41:03 iZwz92js0u6m08arfj6jp8Z systemd[1]: Starting MySQL Community…... Oct 08 22:41:04 iZwz92js0u6m08arfj6jp8Z systemd[1]: Started MySQL Community …er. Hint: Some lines were ellipsized, use -l to show in full. 启动、停止、重启MySQL 的命令类似 ...

2020-10-10     更新 2020-10-10  |  353字    1分钟    作者: XiangLin    Ubuntu  Mysql

SpringMVC

Spring MVC Spring MVC 环境搭建 引入 spring-mvc 相关依赖 <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> </dependencies> 在web.xml中配置DispatcherServlet <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 创建并配置applicationContext.xml ...

2020-10-06     更新 2020-10-06  |  2805字    6分钟    作者: XiangLin    Spring Mvc

VirtualBox 的安装和使用

VirtualBox VirtualBox 安装 VirtualBox 安装比较简单,参考其官方说明即可:Download VirtualBox。 VBoxManage 基础命令 VBoxManage list 列出已安装的虚拟机 ➜ ~ VBoxManage list vms "fedora" {b9daec39-7e85-485f-969b-629fa52bd549} "centos" {49074fd5-386b-42ca-9e25-af29f5e42f1f} 列出正在运行的虚拟机 ➜ ~ VBoxManage list runningvms "centos" {49074fd5-386b-42ca-9e25-af29f5e42f1f} VBoxManage startvm 命令格式 ➜ ~ VBoxManage startvm Usage: VBoxManage startvm <uuid|vmname>... [--type gui|headless|separate] [-E|--putenv <NAME>[=<VALUE>]] 以窗口模式启动虚拟机 ...

2020-10-04     更新 2020-10-04  |  355字    1分钟    作者: XiangLin    Virtual Box

Spring 基础

Spring Spring IOC IOC:控制反转 IOC 控制反转,全称 Inverse of Control,是一种设计理念。 由代理人来创建与管理对象,消费者通过代理人获取对象。 IoC 的目的是降低对象之间的直接耦合。 DI:依赖注入 IOC 是设计理念,是现代程序设计遵循的标准,是宏观目标。 DI(Dependency Injection)是具体技术实现。 DI 在 Java 中利用反射技术实现对象注入。 Bean 配置方式 基于 XML 配置 JavaBean:applicationContext.xml 基于注解配置 JavaBean 基于 Java 代码配置 JavaBean 路径表达式: ...

2020-10-04     更新 2020-10-04  |  2246字    5分钟    作者: XiangLin    Spring

Redis 基础

Redis 介绍 Redis 简介 Redis 是 key-value 型 NoSQL 数据库 Redis 将数据存储在内存中,同时也能持久化到磁盘中 Redis 常用于缓存,利用内存的高效提高程序的处理速度 Redis 特点 速度快 广泛的语言支持 支持数据磁盘持久化 多种数据结构 支持主从复制 支持分片 分布式与高可用 Redis 常用配置项 配置 示例 说明 daemonize daemonize yes 是否启用后台运行 port port 6379 设置端口号 databases databases 16 设置 redis 数据库个数 requirepass requirepass abc123 设置 redis 连接密码 Redis通用命令 select set get keys dbsize exists del expire ttl Redis 数据结构 string:字符串,值的长度不能超过 512 MB,是二进制安全的。 set key value [EX seconds] [PX milliseconds] [NX|XX] EX:将键的过期时间设置为seconds秒,set key value ex seconds等同于setex key seconds value PX:将键的过期时间设置为milliseconds毫秒,与psetex key milliseconds value 等价 NX|XX:只有在键不存在|存在时,才对键执行设置操作,set key value NX等同于setnx key value mset key value [key value ...] mget key [key ...] incr key | incrby k increment decr key | decrby key decrement exists key [key ...] del key [key ...] expire key seconds ttl key hash:键值类型 list:列表,Redis lists基于Linked Lists实现。 set:无序排列 zset:有序排列 Redis Redis 为啥这么快 Redis 支持 100000+QPS。 ...

2020-10-03     更新 2020-10-03  |  2555字    6分钟    作者: XiangLin    Redis
« 上一页  下一页  »
© 2026 Daily Record Powered by Hugo & PaperMod