- 博客(26)
- 收藏
- 关注
原创 二分法及二分法的变形
常规二分法public int bSearch(int[] a, int n, int value){ int low = 0; int high = n-1; while (low <= high) { int mid = (low + high)/2; if (a[mid] == value) { return mid; } else if (a[mid] < value) { low = mid + 1; } else { high = mid
2021-10-18 14:58:11 132
原创 实现分布式锁的三种方式
实现分布式锁的三种方式概述简而言之,要保证一个方法在同一时间内只能被同一个线程执行特性互斥性:可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行可重入:这把锁要是一把可重入锁(避免死锁)避免死锁:有一个客户端在持有锁的过程中崩溃而没有解锁,设置超时自动释放锁,让其他客户端能够加锁持锁人解锁:要保证加锁的客户端与解锁的客户端为同一个数据库分布式锁实现设置一张表,当某个客户端加锁时,插入一条数据,包括方法名,版本号,加锁的客户端信息,重入次数等信息。解
2021-06-01 10:01:41 169
原创 JAVA八股文(未整理完)
JVM字节码文件中包含哪些内容版本号信息 226静态常量池(符号常量)类相关的信息字段相关的信息方法相关的信息调试相关的信息JVM的运行时数据区有哪些程序计数器Java虚拟机栈堆内存方法区运行时常量池本地方法栈常用的JVM启动参数有哪些# JVM启动参数不换行 # 设置堆内存 ‐Xmx4g ‐Xms4g # 指定GC算法 ‐XX:+UseG1GC ‐XX:MaxGCPauseMillis=50 # 指定GC并行线程数 ‐XX:ParallelGCThre
2021-06-01 10:00:50 1037
原创 支付系统风险总结
造成资金损失风险原因网络异常问题当支付系统调用银行系统后,接口因网络原因发生异常,支付系统未到达最终状态,使用try catch处理后一般会走失败分支。但银行侧的最终状态可能是成功、失败、或处理中、但是商户侧走失败分支后,可能会触发重试机制造成重复出款。网络异常包括(Connection Reset 、Connection Refuse、The target server failed to respond、Connection Timed Out、Socket Read Timed Out等)
2021-05-18 16:57:03 982 1
原创 Mysql数据备份
数据备份几种方式1、全量备份2、全量+增量备份binlog模式statement Level(5.7.7之前)只会存储sql语句,没有真正的数据,无法进行数据恢复Row Level基于行的复制,并且会将每一条的数据变化记录到日志文件中,是没有sql语句的。此方式可以解析出真正的数据,生产模式中推荐采取这种模式存储日志。###缺点1、记录数据时产生大量的binlog,2、面对存储过程时可能出现数据不一致的情况。Mined默认是statement Level模式,某些时候会切换到Row
2021-05-18 15:52:06 66
原创 Spring事务传播性
是什么当多个含有事务的方法进行嵌套调用时,多个方法处理事务的规则传播行为PROCPAGATION_REQUIRED理论如果外层方法开启了事务,内层方法就会加入到外层事务如果外层方法未开启事务,内层方法就会开启新的事务可保证多个嵌套的事务方法在同一个事务内执行,也就是保证多个事务方法同时提交、同时回滚,这个机制可以满足大多数业务场景。实例@Servicepublic class ServiceA { @Autowired private SerivceB serbiceB;
2021-05-18 15:51:36 174
原创 延时任务的实现与优化
延时任务概述在工作中,我们可能会接到一些需求,需要我们做一些延时的处理,用户使用一个功能,处理业务逻辑时,不是立即执行的,可能是用户设置一个时间,过了这个时间后才执行相应的业务逻辑。举例case 1在医院中某床位安装了一个智能看护床垫设备,当床垫监测到床上的人离开床后,会向服务器发送一条离床消息,当离床的时间超过了用户设定的阈值时,需要产生一条报警数据。case 2订单超时的关闭,当用户下单后,超过一定的时长未付款,则自动关闭该订单分析处理这些业务功能时,都需要流程开始时进行计时,到时间后
2020-08-26 23:37:53 336
原创 Mysql学习笔记
Mysql学习笔记Linux安装Mysql安装验证安装是否成功启动/停止MYSQL用户管理用户管理命令用户权限查看Mysql权限管理赋予权限收回权限Mysql架构整体架构连接层服务层引擎层存储层show profile开启 profile使用 profile查询流程MyISAM 和 和 InnoDB四、索引概念特点优点缺点Mysql索引B-树(B树)规则B+树(B+tree)规则B树与B+树区别聚簇索引和非聚簇索引索引分类单值索引唯一索引主键索引复合索引索引应用场景适合创建场景不适合创建的场景Explain
2020-08-21 16:35:24 2381
原创 代理模式学习笔记
代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客服端和目标对象之间起到中介作用,代理模式属于结构型设计模式。使用代理模式主要有两个目的:一保护目标对象,二增强目标对象事务代理、非侵入式日志监听等,这些都是代理模式的实际体现。静态代理概述一个类要完成的事情交给另一个类去做,以快递举例,快递送到家本来需要自己去取,现在由快递员送到家首先编写顶层接口,里面有取快递方法public interface GetPackage { void
2020-08-21 01:08:53 163
原创 原型模式学习笔记
原型模式原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些 原型创建新的对象使用场景类初始化消耗资源较多,或者构造函数比较复杂new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等),因为原型模式是在内存中对这个对象进行拷贝,要比直接new这个对象性能要好很多,在这种情况下,需要的对象越多,原型模式体现出的优点越明显需要一个对象的大量公共信息,少量字段进行个性化设置的时候,或者循环体中生产大量对象时构造函数问题public class P
2020-08-18 02:23:48 1206
原创 JVM学习笔记
JVM内存模型图运行时数据区域程序计数器作用当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都依赖该指示器的记录完成特点线程私有,每个线程都需要独立的程序计数器如果当前线程正在执行java方法,计数器记录正在执行的虚拟机字节码指令的地址如果正在执行native方法,计数器值为空占用内存空间少,没有规定内存溢出Java虚拟机栈...
2020-08-18 00:23:16 245
原创 Redis学习笔记
Redis学习笔记NoSql的四大分类k-v键值对文档型数据库(bson和Json格式相同)列存储数据库图关系数据库Redis介绍概述性能作用特征性能测试Redis基础数据库划分单线程五大数据类型StringListSetHashZset三种特殊数据类型geospatialhyperloglogbitmaps事务特性过程放弃事务监控NoSql的四大分类k-v键值对新浪:Redis美团:Redis + Tair阿里、百度:Redis + memecache文档型数据库(bson和Json格式相
2020-07-08 00:07:52 239
原创 JUC学习笔记(二)
volatile关键字JMM(Java Memory Model | Java内存模型)JMM是一种抽象的概念,不是真实存在的,它描述了一种规范,通过这组规范定义了程序中的访问方式JMM同步规定程序加锁前,必须读取主内存中的最新值到工作内存程序解锁前,必须将工作内存中的最新值写入到主内存加锁解锁是同一把锁原理由于 JVM 运行程序的实体是线程,而每个线程创建时 JVM 都会为其...
2020-05-20 15:46:01 852
原创 JUC学习笔记(一)
JUC学习笔记(一)多线程售票问题线程的六种状态集合类安全问题8锁问题消费者生产者模型ConditionDemoCallableCountdownLatchCyclicBarrierSemaphoreReadWriteLockBlockingQueue多线程售票问题package com.Test;import java.util.concurrent.locks.Lock;import...
2020-04-26 13:43:37 185
原创 单例模式学习笔记
单例模式学习笔记饿汉式单例懒汉式单例线程不安全的懒汉式同步方法单例模式双重锁单例静态内部类单例反射破坏单例序列化破坏单例注册式单例枚举单例容器缓存单例ThreadLocal 线程单例单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例常见的单例模式:Spring框架中的ApplicationContext,数据库连接池等饿汉式单例public clas...
2020-04-25 10:49:22 134
原创 工厂模式学习笔记
设计模式学习笔记工厂模式简单工厂模式举例工厂方法模式实例抽象工厂模式实例工厂模式的设计案例工厂模式简单工厂模式简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类 的实例,但它不属于 GOF23 种设计模式举例我们先定义一个顶层课程接口,然后创建一个Java课程实现这个接口public interface ICourse{ //录制 ...
2020-04-18 01:44:37 133
原创 六大设计原则
六大设计原则开闭原则开闭实现方式实例依赖倒置原则实例依赖注入构造器注入单一职责原则实例接口隔离原则举例迪米特法则实现里氏替换原则开闭原则开闭原则(Open-Closed Principle, Ocp)是指类、模块、函数等软件实体,对扩展开放,对修改关闭。强调用抽象构建框架,用实现扩展功能,提高软件系统的可复用性及可维护性。开即为开放扩展,扩展意为增加新的代码闭即为关闭修改,修改意为修...
2020-04-14 17:36:59 348
原创 stream流式处理demo
package com.Test;import java.util.Arrays;import java.util.List;import java.util.function.Consumer;import java.util.function.Function;import java.util.function.Predicate;import java.util.functi...
2020-03-02 22:15:14 299
原创 隐藏idea不想看到的文件
打开setting,搜索FileType,在框中输入要隐藏的文件后缀即可;*.classpath;*.gitignore;*.hprof;*.idea;*.iml;*.out;*.project;*.pyc;*.pyo;*.rbc;*.settings;*.sh;*.yarb;*~;.DS_Store;.git;.hg;.svn;CVS;__pycache__;_svn;logs;targe...
2019-12-07 15:43:09 389
原创 mysql根据拼音首字母查询某字段以及mavicat创建函数遇到的坑
业务需求上,需要做一个根据英文首字母查询名称的功能,在网上查阅相关资料后,决定采用mysql函数的方式完成。函数来源于https://blog.csdn.net/omayyouhappy/article/details/78352789,感谢这位博主,函数代码如下,支持三个字母以内的查询CREATE DEFINER=`root`@`%` FUNCTION `GET_FIRST_PIN...
2019-11-04 14:48:52 299
原创 feigh调用遇到的问题
在SpringCloud项目中,由于业务需要可能会出现,调用一个微服务的接口时,需要操作另一个微服务的数据。此时,feigh调用是一个好的选择,至于feigh调用如何实现,比较简单,相关的博文有很多,具体的调用过程以后再补。该篇文章记录feigh调用时遇到的坑。 一、List无法解析,报No primary or default constructor found for int...
2019-11-04 14:15:04 1094
原创 java线程、并发性学习笔记
1.并发性 多任务:在同一刻运行多个程序的能力。如今单台计算机可能拥有多个cpu,但是并发执行的进程数目并不是由cpu的数目制约的。操作系统将cpu的时间片分配给每一个进程,给人并行处理的感觉 多线程程序:通常,每一个任务称为一个线程,多线程程序指可以同时运行一个以上线程的程序2.线程 线程(英语:thread):操作系统能够进行运算调度的最小单位。它被包含...
2019-10-28 13:48:01 141
原创 mysql批量修改数据库数据
UPDATE cn_omc_set_meal_item t1 INNER JOIN cn_omc_expense_item t2 ON t1.expense_item_id = t2.id INNER JOIN cn_omc_expense_type t ON t2.expense_type_id = t.idSET t1.expense_type_name = t.`n...
2019-10-12 22:59:47 639
原创 List删除指定元素以及List删除与另一List相同元素的方法
List删除指定元素在List类中,提供了删除元素的remove()方法,有如下两种传参方式 1.根据index删除,会删除指定位置的元素,源码如下public E remove(int index) { try { ListIterator<E> e = listIterator(index); E outCast = e...
2019-10-12 22:50:06 5794
原创 SpringBoot多环境配置
开发应用时,通常同一套程序会被应用和安装到几个不同的环境中,如开发、测试、生产等。每个环境的数据库地址、服务器端口配置都不同。对于这种情况,SpringBoot可以配置多分不同环境的配置文件,再通过打包命令加载需要的配置文件 在Spring Boot中,多环境的配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应...
2019-05-08 11:00:38 88
原创 使用Java语言调用shell脚本重启tomcat
public static void runShell(String Location){//传入参数为shell脚本的路径 Process process = null; InputStreamReader ir = null; LineNumberReader input = null; try { process = Runtime.g...
2018-05-15 16:48:12 2104 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人