MyBatis持久层框架详细解读:配置文件实现增删改查操作实战训练

我们为什么使用 MyBatis 开发呢?不难理解,MyBatis 作为一款优秀的持久层框架,支持自定义 sql,存储过程以及高级映射,它几乎免除了所有的 JBDC 代码以及设置参数和获取结果集的工作。解决了使用 JBDC 基础性的代码操作数据库时面临的 Java 代码的硬编码和操作繁琐的问题。
分类: 数据库 发布时间: 01-30 09:24 阅读次数: 0

rabbitmq简介以及使用场景

订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作假如:在下单时库存系统不能正常使用。这个短暂的高峰期积压是没问题的,因为高峰期过了之后,每秒就只有50个请求进入MQ了,但是系统还是按照每秒2000个请求的速度在处理,所以说,只要高峰期一过,系统就会快速将积压的消息消费掉。引入了MQ之后,虽然ABCD系统没出错,但MQ挂了以后,整个系统也会崩溃。以上三个任务完成后,返回给客户端。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

高并发下缓存失效的三个问题-穿透、雪崩、击穿

客户端发起一个查询请求的时候,首先去缓存中查询,如果数据在缓存中存在,则直接将缓存中的数据返回给客户端;如果数据在缓存中不存在,则继续查询数据库,如果数据在数据库中存在,则将该数据放入缓存中,并返回给客户端,如果数据在数据库中也不存在,则直接返回null给客户端。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

分布式锁-Redisson

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

分布式锁原理及使用

每个线程在访问时,先会去判断这个“坑位”有没有加锁,如果没有加锁,则自己占住加锁(然后获取数据,从缓存/数据库),别人来的时候看到加锁就会等待,当从坑位离开时,会删除锁,然后其他的才会继续站位。我们可以同时去一个地方“占坑”,如果占到,就执行逻辑。否则就必须等待,直到释放锁。占坑可以去Redis,也可以去数据库,可以去任何大家都可以访问到的地方。NX – 只有键key不存在的时候才会设置key的值。# 可以多开几个窗口进行测试。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

缓存-SpringCache

举个例子:在我们程序中,很多配置数据(例如一个商品信息、一个白名单、一个第三方客户的回调接口),这些数据存在我们的DB上,数据量比较少,但是程序访问很频繁,这种情况下,将数据放一份到我们的内存缓存中将大大提升我们系统的访问效率,因为减少了数据库访问,有可能减少了数据库建连时间、网络数据传输时间、数据库磁盘寻址时间……@Cacheble注解表示这个方法的结果可以被缓存,调用该方法前,会先检查对应的缓存key在缓存中是否已经有值,如果有就直接返回,不调用方法,如果没有,就会调用方法,同时把结果缓存起来。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

阿里巴巴sentinel限流

想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响,当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。即如果系统在此之前长期处于空闲的状态,我们希望处理请求的数量是缓步的增多,经过预期的时间以后,到达系统处理请求个数的最大值。该字段的值有以下三种选项,分别对应不同的场景。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

常见限流算法

Google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法(Token Bucket)来完成限流,非常易于使用.RateLimiter经常用于限制对一些物理资源或者逻辑资源的访问速率.它支持两种获取permits接口,一种是如果拿不到立刻返回false,一种会阻塞等待一段时间看能不能拿到。原理见《guava--RateLimiter源码分析》
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

JAVA 线程实现/创建方式

有返回值的任务必须实现 Callable 接口,类似的,无返回值的任务必须 Runnable 接口。执行 Callable 任务后,可以获取一个 Future 的对象,在该对象上调用 get 就可以获取到 Callable 任务 返回的 Object 了,再结合线程池接口 ExecutorService 就可以实现传说中有返回结果的多线程了。如果自己的类已经 extends 另一个类,就无法直接 extends Thread,此时,可以实现一个 Runnable 接口。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

进程 线程 协程 的区别

1.进程是资源分配的单位;2.线程是CPU调度的单位;3.协程是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

SpringIOC和AOP

2.Spring可以解决企业应用开发的复杂性3.Spring有两个核心部分:IOC、AOP​ (1)IOC:控制反转,把创建好的对象给Spring进行管理​ (2)AOP:面向切面编程,不修改源代码的情况下进行功能增加。
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

小黄车编程 考试试题

小黄车编程题
分类: 数据库 发布时间: 01-30 03:22 阅读次数: 0

MyBatis 持久层框架详细解读:Mapper代理开发

使用 MyBatis 原生方式开发,部分过程依赖于字符串常量值,存在硬编码的问题,同时使用命令空间和 sql 唯一标识作为执行 sql 的参数,在编写代码时比较麻烦。使用 Mapper 代理的方式具有更多的优势,首先他不依赖于字符串的字面值,会更加的方便和安全。其次,如果你的 IDE 有代码自动补全的功能,那么它可以帮你快速的是选择映射文件的 sql 语句,而不依赖于对应的 id。
分类: 数据库 发布时间: 01-29 21:36 阅读次数: 0

MyBatis持久层框架详细解读:MyBatis快速入门篇

JavaEE 企业级 Java 项目中的经典三层架构为表现层,业务层和持久层,使用Java 代码操作数据库属于持久层内容,而 MyBatis 对 JDBC 代码进行了封装,作为一款优秀的持久层框架,专门用于简化JDBC开发。
分类: 数据库 发布时间: 01-29 17:48 阅读次数: 0

MySQL基本操作(CRUD)详解

关于SQL的常用操作:CRUD,增加(create),查询(retrieve),更新(update) 以及删除(delete) 已经做了一个硬核的整理,为深入学习sql做了充分的准备。从今天开始,你也是一个会sql的人了!
分类: 数据库 发布时间: 01-29 12:09 阅读次数: 0

【Java编程进阶】标识符和关键字

标识符是用于给程序中的变量、类、方法等命名的符号。标识符有一套要遵循的命名规则。
分类: 数据库 发布时间: 01-29 12:09 阅读次数: 0

一文带你吃透数据库的约束,不做CRUD程序员

在SQL标准中,一共规定了6种不同的约束,包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习。
分类: 数据库 发布时间: 01-29 12:09 阅读次数: 0

【Java编程进阶】常量变量及作用域

变量的概念显然是十分重要的,假定没有变量的概念,要操作数据时,就要使用内存地址,这时显然是效率低的。局部变量和成员变量不同的是,局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
分类: 数据库 发布时间: 01-29 12:09 阅读次数: 0

【Java编程进阶】运算符与表达式

计算机诞生的初衷是为了进行数学的运算,Java 作为一门计算机编程语言,同样也提供了用于操纵变量的`运算符`来进行数学运算。我们把用于数据的运算,赋值,比较等的一系列符号称之为运算符。
分类: 数据库 发布时间: 01-29 12:09 阅读次数: 0

MySQL单表查询进阶

查询是数据操作至关重要的一部分,比如说在所有商品中查找出价格在规定范围内的所有商品,要想把数据库中的数据在客户端中展示给用户,一般都进行了查询的操作。在实际开发中,我们要根据不同的需求,并且考虑查询的效率来决定怎样进行查询。
分类: 数据库 发布时间: 01-29 12:09 阅读次数: 0