剑指offer-75、买卖股票的最好时机
题⽬描述
假设你有⼀个数组 prices ,⻓度为 n ,其中 prices 是股票在第 i 天的价格,请根据这个价格数组,返回买卖股票能获得的最⼤收益
你可以买⼊⼀次股票和卖出⼀次股票,并⾮每天都可以买⼊或卖出⼀次,总共只能买⼊和卖出⼀次,且买⼊必须在卖出的前⾯的某⼀天
如果不能获取到任何利润,请返回 0
假设买⼊卖出均⽆ ...
spring6-与juint和mybatis的集成
spring对junit的支持
主要是自动从spring容器中获取bean。不用手动获取了。
spring对junit4的支持
1.引入spring和junit4的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.4</version>
</dependency>
<!-- spring对junit支持的依赖,s ...
spring-事务管理
事务支持
什么是事务?
在一个业务流程中,需要多条DML(insert、delete、update)语句联合才能完成。这些语句必须同时成功或者同时失败。这样才能保证数据安全。
多条DML同时成功或者同时失败,叫做事务。
事务处理的四个过程
开启事务
执行业务代码
提交事务(没出现异常,提交成功。commit transaction)
回滚事务(出 ...
剑指offer-74、n个骰⼦的点数
题目描述
把 n 个骰⼦扔在地上,所有骰⼦朝上⼀⾯的点数之和为 s 。输⼊ n ,打印出 s 的所有可能的值出现的概率。
你需要⽤⼀个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰⼦所能掷出的点数集合中第 i ⼩的那个的概率。
示例1:
输⼊: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]
示例2
输⼊: 2
输 ...
记录使用Arthas修改线上源码重新加载的一次过程
前情提要
线上跑的代码找不到源码了,项目又需要调整某个字段的校验规则,早有耳闻知道可以通过Arthas完成这个场景的需求,实际动手试了试,在此记录一下。
警告!警告!
# !!! 重要警告 !!!
# 1. 生产环境谨慎使用,先测试
# 2. 修改前备份原始类
# 3. 确保修改符合JVM规范
# 4. 注意内存泄漏风险
# 5. 重启后会丢失修改
# 安 ...
spring6-代理模式和AOP
jdbcTemplate
jdbcTemplate是spring提供的一个jdbc模板类,是对jdbc的封装。
当然你也可以使用其他框架融入MyBatis、Hibernate。
GoF之代理模式
代理模式的作用
当一个对象需要受到保护的时候,可以使用代理对象去完成某个行为。
需要给某个对象进行功能增强的时候,可以找一个代理进行增强。
A对象和B对象无法直接交互时 ...
AQS深度探索:以ReentrantLock看Java并发编程的高效实现
概述
AQS ( Abstract Queued Synchronizer )是一个抽象的队列同步器,通过维护一个共享资源状态( Volatile Int State )来表示同步状态 和一个先进先出( FIFO )的线程等待队列来完成资源获取的排队工作,通过CAS完成对State值的修改。
AQS整体框架如下:
当有自定义同步器接入时,只需重写第一层所需要的部分方法即可 ...
5、FileDescriptor的源码和使用注意事项(windows操作系统,JDK8)
操作系统使用文件描述符来指代一个打开的文件,对文件的读写操作,都需要文件描述符指向存储设备的不透明标识符。Java虽然在设计上使用了抽象程度更高的流来作为文件操作的模型,但是底层依然要使用文件描述符与操作系统交互,而Java世界里文件描述符的对应类就是FileDescriptor。同时,Java规定了FileDescriptor只能由 ...
剑指offer-73、连续⼦数组的最⼤和(⼆)
题⽬描述
输⼊⼀个⻓度为n 的整型数组array ,数组中的⼀个或连续多个整数组成⼀个⼦数组,找到⼀个具有
最⼤和的连续⼦数组。
⼦数组是连续的,⽐如[1,3,5,7,9] 的⼦数组有[1,3] , [3,5,7] 等等,但是[1,3,7] 不是⼦数组
如果存在多个最⼤和的连续⼦数组,那么返回其中⻓度最⻓的,该题数据保证这个最⻓的只存在⼀个
该 ...
spring6-注解式开发
spring框架创建bean就是利用反射机制
反射机制的代码如下:
public static void main(String[] args) throws Exception {
System.out.println("Hello, World!");
// 使用反射机制调用方法
// 获取类
Class<?> clazz = Class.forName("com.ali.bean2.SomeService");
// 获取方法
Method method = cl ...
Redisson 使用手册:从 API 误区到看门狗失效,在此终结分布式锁的噩梦
写在前面
在上一篇《分布式锁的代价与选择:为什么我们最终拥抱了Redisson?》中,我们聊到了手写 SETNX 的"茹毛饮血"时代。既然选择了 Redisson,就意味着我们已经告别了那些让人提心吊胆的死锁噩梦。
很多时候,我们以为只是调用了一个简单的 lock.lock(),但背后其实是一整套复杂的自动续期、Lua 脚本原子执行和发布订 ...
剑指offer-72、礼物的最⼤价值
题⽬描述
在⼀个m × n的棋盘的每⼀格都放有⼀个礼物,每个礼物都有⼀定的价值(价值⼤于 0)。你可以从棋盘的左上⻆开始拿格⼦⾥的礼物,并每次向右或者向下移动⼀格、直到到达棋盘的右下⻆。给定⼀个棋盘及其上⾯的礼物的价值,请计算你最多能拿到多少价值的礼物?
如输⼊这样的⼀个⼆维数组,
[
[1,3,1],
[1,5,1],
[4,2, ...
spring6-bean的生命周期与循环依赖
bean的生命周期
粗略划分5步
实例化bean
调用的是无参数的构造方法
bean属性赋值
执行set注入
初始化bean
调用bean的init()方法,需要自己写,自己配
使用bean
销毁bean
调用bean的destroy(),需要自己写,自己配
注意:自定义的init()和destroy()需要在配置文件配置
<!-- init-method指定初始化方 ...
一种多选项的高效存取(存储、查询)解决方案
本文主要内容
对于多选项的值,如何保存?本文提供了一种非常规的方案。
对于记录在数据库中的多选项的值,如何快速查询那些记录是包含了某个(某些)选项?本文使用了“与位运算”解决查询问题。
源码地址:https://github.com/HackyleShawe/JavaBackEndDemos/tree/master/BusinessCommonSolution/multi-options-storage- ...
剑指offer-71、剪绳子(进阶版)
题⽬描述
给你⼀根⻓度为 n 的绳⼦,请把绳⼦剪成整数⻓的 m 段( m 、 n 都是整数, n > 1 并且 m >
1 , m <= n ),每段绳⼦的⻓度记为 k[1] ,..., k[m] 。请问 k[1] * k[2] * ... * k[m] 可能的最⼤乘积是多少?例如,当绳⼦的⻓度是 8 时,我们把它剪成⻓度分别为 2 、3 、3 的三段,此时得到的最⼤乘积是 18 。
由于 ...
Java中的数据类型
Java 数据类型详解
目录
数据类型分类
基本数据类型
引用类型
基本类型 vs 引用类型
包装类
String 详解
字符串常量池
内存布局
对象生命周期
常见问题
数据类型分类
Java 数据类型
├── 基本类型(8种)
│ ├── 整数类型:byte, short, int, long
│ ├── 浮点类型:float, double
│ ├── 字符类型:ch ...
线程如何停止?线程之间如何协作?线程之间的异常如何处理?
线程停止
stop方法
stop 方法虽然可以停止线程,但它已经是不建议使用的废弃方法了,这一点可以通过 Thread 类中的源码发现,stop 源码如下:
stop 方法是被 @Deprecated 修饰的不建议使用的过期方法,并且在注释的第一句话就说明了 stop 方法为非安全的方法。
原因在于它在终止一个线程时会强制中断线程的执行,不管run方 ...
收入写RAFT算法(一)Leader选举
Raft Leader 选举实现文档
目录
1. 概述
2. 核心概念
3. 涉及的类及其职责
4. 实现细节
4.1 节点状态与转换
4.2 选举超时机制
4.3 投票请求处理
4.4 选举发起流程
4.5 投票响应处理
4.6 心跳机制
4.7 安全性保证
5. 测试指南
6. 使用示例
7. 常见问题
1. 概述
1.1 目的
本文档详细说明了 LingRaft-Lite 模块中 Raft L ...
keycloak~分布式部署中会话过期清理机制
Keycloak 分布式部署中会话过期清理机制
在 Keycloak 分布式部署(使用外部独立部署的 Infinispan)的架构下,sessions 和 clientSessions 的过期清理涉及两种不同的部署模式,机制略有不同:
架构模式 1:Embedded + Remote Store(嵌入式缓存 + 远程存储)
这种模式下,Keycloak 节点有本地嵌入式缓存,同时配置了远程存 ...
BlockingQueue:阻塞操作与条件队列的高效结合
BlockingQueue和BlockingDeque
BlockingQueue
BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是对这个原理的阐述:
一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue。
一个线程将会持续生产新对象并将其插入到队列之中,直到队列达到它所能容纳的临界点。也就是说,它是有 ...