自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

十字路口

如有异议,评论提出,共同进步。谢谢~~~~~

  • 博客(31)
  • 收藏
  • 关注

原创 缓存与数据库的数据更新

缓存的更新策略更新数据库和Redis本身就不是原子操作,所以无论采取何种方式都不能保证强一致性,只能保证最终一致;只能尽可能降低不一致性发生的几率,不能从根本上完全避免。先更新数据库,在更新缓存业务角度对于读少的场景,浪费性能资源线程安全容易产生脏读。比如A线程更新数据库,B线程更新数据库;B线程更新缓存,A线程更新缓存先删除缓存,再更新数据库线程安全请求A进行更新操作,先删除缓存;请求B查询缓存,发现缓存失效,读取数据库,写入缓存;请求A将数据写入数据库.长时间读取到的都是脏数据解

2022-01-06 11:29:34 1072

原创 枚举类获取映射

枚举类package com.fanhuaholdings.cbs.utils;import lombok.Getter;public interface RnEnum { //获取描述 String getDesc(); //获取代码 Integer getCode(); enum SumType implements RnEnum{ SUPPLIER_COMPAny(1,"公司"), MANAGE_DEPT(2,"机构"

2022-01-06 11:27:36 317

原创 获取泛型类型对象

统一接口package com.fanhuaholdings.cbs.common;import com.fanhuaholdings.cbs.common.view.BaseVO;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.an

2022-01-06 11:26:08 863

原创 枚举类抽象方法

枚举类package com.fanhuaholdings.cbs.util;import com.fanhuaholdings.cbs.rncontinue.calculator.AbstractRnContinueCalculator;import com.fanhuaholdings.cbs.rncontinue.calculator.redis.RnContinueCalculatorGraceFunction;import com.fanhuaholdings.cbs.rncontinu

2022-01-06 11:24:51 311

原创 变量的类型和内存位置分配

内存类型成员变量(实例变量、属性)定义:在类中定义,在类对象被创建时,分配内存。属于是对象的属性,类被实例化后才有意义的变量,所以又叫实例变量。作用范围:实例变量初始化之后,类中所有位置都可访问出生:对象被创建时,开辟内存空间死亡:堆内存中对象,在栈内存中没有引用指向,等待GC回收局部变量(本地变量)定义:在方法中定义的变量以及方法的形参作用范围:在方法中,定义之后的位置可以访问出生:执行到定义语句死亡:对应代码块执行结束或方法执行结束类变量(类变量、静态变量)定义:static修饰

2022-01-06 11:23:12 500

原创 JVM内存分配和垃圾回收

Java内存模型内存分为对内存和非堆;非堆主要是由线程栈组成。调用栈和本地变量存放在线程栈上,对象本身存放在堆上。拿方法参数为例,相当于参数的引用,只是栈内存中对堆内存中对象的引用而已;局部变量、成员变量、静态变量的存储基本数据类型的成员变量,存储在栈内存(线程栈)上;引用类型的成员变量,引用存放在线程栈上,但是对象本身仍然存放在堆上;一个对象可能包含方法,这些方法可能包含局部变量。这些局部变量存放在线程栈上,即使这些方法所属的对象是存放在堆内存上;一个对象的成员变量,跟随这个对象一起存放在堆

2022-01-06 11:19:54 367

原创 应用通信

TCP/IPTCP四层模型应用层、传输层、网络层、链路层、物理传输层OSI七层模型表达层和会话层三次握手协议三次握手协议是指在发送数据的准备阶段,服务器和客户端之间需要进行三次交互。具体过程以下参考:https://www.cnblogs.com/qq78292959/p/3922231.htmlSYN(synchronous建立联机)ACK(acknowledgement确...

2019-03-30 12:42:00 177

原创 Netty相关

NIO/BIO/AIO的区别BIO:一个请求一个线程,线程开销大。伪异步:将请求连接放入线程池,一对多。NIO:一个请求一个线程,但客户端发送的请求都会注册到多路复用器上,多路复用器轮询到连接有io请求时才启动一个线程进行处理。AIO:一个有效请求一个线程,客户端的io请求都是由os先完成后再通知服务器应用去启动线程进行处理。BIO的stream是单向的,阻塞的,NIO的chan...

2019-03-30 12:40:11 141

原创 HashMap产生高并发问题的原因

多线程操作map造成死锁或者死循环的问题可以通过jps + jstack命令查看堆栈信息进行判断1 同时put造成的数据丢失在HashMap中会获取到数据存储位置后,调用addEntrty()方法,添加一个新的Entrty对象。当多个线程需要put的数据hash值相同,需要放置在同一位置时,并没有对put方法进行同步的实现。所以,在调用Entrty方法的时候,会造成只有最后执行的线程...

2019-03-27 23:03:38 1104

原创 设计模式-单例模式

单例模式的关键点:构造方法不对外开放,为private确保单例类只有一个对象,尤其是多线程情况下通过静态类或枚举返回单例对象确保单例类在反序列化的时候不会重新创建对象懒汉式如果没有用到该对象,会造成资源的浪费。调用效率高,但是不能延时加载public class AAA{ private static AAA a = new AAA(); private...

2019-03-27 23:03:31 73

原创 代码片段-Http请求的调用和创建

使用的依赖包org.apache.httpcomponentshttpclient4.3.6http请求发送public static sendMessage(String sendUrl,String sendData){ //获取默认的http请求客户端 //默认是创建的短连接,获取长链接??? CloseableHttpCilent client = ...

2019-03-27 23:03:18 213

原创 常用代码片段-xml文件的解析和封装

微信用xml来进行消息的传递,所以需要在获取到HttpServletRequest对象之后,进行xml解析。还需要在处理完毕之后,将返回的信息组装成xml文件返回给客户端。编码格式必须为utf-8xml文件解析public static Map<String,String> paresXML(HttpServletRequest request){ //创建map集合存...

2019-03-27 23:03:10 292

原创 JAVA理论基础-I/O模型

I/O模型1.阻塞/非阻塞的区别、同步/异步的区别?例子烧水1.同步阻塞水壶烧水,然后你进行等待,每隔一段时间去查看水开没开。2.同步非阻塞水壶烧水,然后去做其他事,每隔一段时间去查看水开没开。3.异步阻塞水壶烧水,然后站在那等待,水开以后,自动通知你水开了。4.异步非阻塞水壶烧水,然后去做其他事,水开以后,自动通知你水开了。分析同步和异步同步就是水开与否,需要你去查看...

2019-03-27 23:03:03 137

原创 常用工具-git分支重建

git checkout the_branch 切换分支git pullgit branch the_branch_backup 备份一下这个分支当前的情况git reset --hard the_commit_id 把the_branch本地回滚到the_commit_idgit push origin :the_branch 删除远程 the_branchgit push origi...

2019-03-27 23:02:53 1001

原创 JAVA基础-java关键字

1 volatilevolatile是java提供的一种轻量级的同步机制,与synchronize(重量级锁)相比,volatile更轻量级。多线程编程中,线程相互是不可见,也就是说,线程B无法检测到共享对象是否被其他线程进行过修改。可见性指的是当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的。出现这种状况的原因1.java内存模型(JMM)JAVA虚拟机拥有自己的内存模...

2019-03-27 23:01:05 204

原创 SpringBoot资源加载

属性private boolean addCommandLineProperties = true; 默认为true,在加载PropertiesSource时候会根据该参数和参数可变参args的长度 判断是否将args添加进PropertiesSource中。可通过setAddCommandLineProperties()进行设置private Class<?> main...

2019-03-27 23:00:51 349

原创 SpringBoot源码浅读

一注解1.@EnableAutoConfiguration 会从classpath中搜索所有的(包含外部jar)META-INF/spring.factories配置文件,然后将org.springframework.boot.autoconfiguration.EnableAutoConfiguration key对应的配置添加到spring容器中该文件的value值可以时@configu...

2019-03-27 23:00:35 147

原创 JDK源码-1.7 ArrayList

变量DEFAULT_CAPACITY = 10 初始默认的ArrayList大小为10。HashMap为1<<4=16Object[] EMPTY_ELEMENTDATA = {} 无参构造函数创建的数组private transient Object[] elementData 底层存储数据的数组,不参加序列化private int size ArrayLis...

2019-03-27 23:00:27 167

原创 分布式相关-分布式解决方案

分布式解决方案1.谈谈分布式Session的几种实现方式?Session Replication session复制简介: 将一台机器上的session数据广播复制到集群中其他服务器上。使用场景:机器较少,网络流量较小优点:实现简单,配置较少,当网络中有机器down掉是不影响用户访问。缺点:广播式复制到其他机器有一定延迟;带来了一个定的网络开销;占用服务器内存。session Sti...

2019-03-27 23:00:19 237

原创 分布式-MQ比较

1 作用应用耦合、异步消息、流量削峰2 应用场景异步处理场景: 用户注册以后需要发送注册邮件和短信。串行方式: 注册完成-》发送邮件-》发送短信-》返回并行方式: 注册完成之后,发送邮件的同时发送短信-》返回消息队列: 注册完成,将信息写入消息队列,然后返回。邮件和短信的发送异步进行处理。应用解耦场景: 用户下单之后,订单系统需要通知库存系统传统: 订单系统调用库存系统的接口...

2019-03-27 23:00:10 583

原创 服务器-linux命令整理

最基本操作1.权限rwx 对应二进制 111, — 对应 000一个文件有三组权限,如rwx r-x --x 三个为一组 111 101 001 对应的数字为 751对的分别是 拥有者 拥有组 其他用户赋予某文件或文件夹权限 chmod 777 /test/aaa.sh| 管道符 作用是 前面命令的输出,作为后面命令的输入例如: ps -ef 会列出多有正...

2019-03-27 22:59:56 195

原创 类的继承和方法的调用

public class extendsTest { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D();...

2019-03-26 13:40:21 1103 1

原创 JAVA基础-JDK源码

JDK源码1.ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet、CopyOnWrite容器和Queue的实现原理ArrayList实现原理ArryList是基于数组实现的。是一个动态数组,默认初始大小为10.不是线程安全的,多线程环境下应该考虑Collections.synchronizedList(List ...

2019-03-26 13:39:40 272

原创 CountDownLatch,CyclicBarrier,Semphore区别和用途

1)CountDownLatch和CyclicBarrier都能够实现线程之间的等待,只不过它们侧重点不同:CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行;而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行;另外,CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。2)Sema...

2019-03-26 13:38:31 302

原创 多线程调优-Master-Worker模式

简介Master-Worker是常见的并行设计模式。核心思想是: 系统中有两个进程协议工作。Master进程负责接收和分配任务,Worker负责处理子任务。当worker进程将子任务处理完毕之后,将结果返回给Master进程,由Master进行归纳和汇总。优势:可以将大任务分解成若干小任务,并发执行,从而提高系统性能。对于客户端(请求发起者)来说,任务一旦提交,Master进程就会立刻分配任...

2019-03-26 13:37:18 228

原创 多线程调优-生产者消费者

简介生产者消费者模式中,有两类线程:若干个生产者线程和若干个消费这线程。生产者主要负责提交用户的请求。消费这用于处理生产者提交的任务。生产者消费者通过共享的内存缓冲区进行数据通信。生产者消费之间并不是直接通信,从而可以减少他们之间的耦合。生产者不需要消费者直接存在,消费这也不需要知道生产者的存在。内存缓冲区主要的功能是实现数据在多线程间的共享。此外,通过缓冲区可以缓解生产者和消费者之间的性能差...

2019-03-26 13:36:20 163

原创 多线程常用API

1.wait()wait()通过对象的monitor对象来实现,wait方法的使用必须在同步范围内,否则就会排除IllegalMonitorStateException异常。wait的作用是阻塞当前线程等待notify、notifyAll方法的唤醒,或等待超时后自动唤醒。2.notify/notifyAll因为wait是通过对象的monitor去实现的,所以只要在同一对象上调用notify...

2019-03-26 13:35:06 446

原创 线程相关基础概念

并发与并行需要通过不断切换需要运行的线程让其运行的方式叫做并发。在多cpu系统中,可以让两个以上的线程同时运行,这种方式叫做并行线程与进程每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。一个进程包含1-n个线程同意类线程共享代码和数据空间。每个线程有独立的运行栈和程序计数器,线程的切换开销小。多进程是指操作系统可同时运行多个任务(程序)多线程是指同一程序中...

2019-03-26 13:34:16 65

原创 线程间的互斥通信

Synchornized1.用来控制对类成员变量的访问: 每个类实力都对应一把锁,每个Synchornized方法都必须获得调用该方法的类实例的所才可以进行执行,否则所属线程阻塞,方法一旦执行,则独占该锁,直到该方法执行完毕,其他线程才能获取该锁。这种机制保证了同一时刻对于每一个类的实例。其所有生命为Synchornized的成员方法之多只有一个处于执行状态,因为只有一个可以获取...

2019-03-26 13:33:37 173

原创 ThreadLocal相关

作用和原理ThreadLocal就是为每一个使用该变量的线程都提供了一个变量值的副本。是Java中一种较为特殊的线程绑定知己,是每一个线程都可以独立的改变自己的副本,而不会跟其他线程的副本发生冲突。从线程的角度来看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且ThreadLocal实例是可以访问的;在线程结束后,其线程的局部实例的所有副本都会被垃圾回收,除非存在对这些...

2019-03-26 13:32:57 80

转载 redis分布式锁的实现和优化

目前实现分布式锁的方式主要有数据库、Redis和Zookeeper三种,本文主要阐述利用Redis的相关命令来实现分布式锁。相关Redis命令SETNX如果当前中没有值,则将其设置为并返回1,否则返回0。EXPIRE将设置为秒后自动过期。GETSET将的值设置为,并返回其原来的旧值。如果原来没有旧值,则返回nil。EVAL与EVALSHARedis 2.6之后支持的功能,可以将一...

2019-03-26 13:31:49 337

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除