自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

易雪寒的博客

欲明明德者,致知在格物

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

转载 spring 事务传播行为实例分析

Spring事务传播行为:spring特有的事务传播行为,spring支持7种事务传播行为,确定客户端和被调用端的事务边界(说得通俗一点就是多个具有事务控制的service的相互调用时所形成的复杂的事务边界控制)下图所示为7钟事务传播机制。 传播行为 含义 PROPAGATION_REQUIRED(XML文件中为REQUIRED) 表示当前方法必须在一个具有事务的上下文中运行,如有客户端有事务在进行,那么被调用端将在该事务中运行,

2020-09-20 13:36:08 342

原创 redis缓存与数据库一致性问题解决

分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?Cache Aside Pattern最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时候,先更新数据库,然后再删除缓存。为什么是删除缓存,而不是更新缓存?原因很简单,很多时候,在复杂点...

2020-08-24 02:29:40 2261

转载 线程池原理及调度过程

1.关于线程池线程池的技术背景在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些”池化资源”技术产生的原因。例如Android中常见到的很多通用组件一般都离不开”池”的概念,如各种图片加载库,网络.

2020-08-13 17:19:13 520

转载 Netty 简单server和client示例

Netty 基于java NIO 网络通信框架,具有高效、简单、快速的应用特点。在当下互联网高并发场景下得到很好地应用,现在用java写的高并发产品(如dubbo 、zookeeper、hadoop、rocketmq)大都应用了netty作为底层的通信技术。下面简单的server和client的示例代码:一、 服务端ServerNetty:服务端的netty类ServerHandler :处理某个客户端请求的类MarshallingCodefactory:把信息序列化对象用pack.

2020-07-29 14:34:01 1041

转载 redis key命名规范

1.建议全部大写2.key不能太长也不能太短,键名越长越占资源,太短可读性太差3.key 单词与单词之间以 : 分开user id userName age 1 zhangsan 18 2 lisi 16 4.redis使用的时候注意命名空间,一个项目一个命名空间,项目内业务不同命名空间也不同。一般情况下: 1) 第一段放置项目名或缩写 如 project 1) 第二段把表名转换为key前缀 如, use...

2020-07-28 17:24:23 22831 1

转载 复杂sql语句练习(mysql)

下面是练习表数据和结构SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for course-- ----------------------------DROP TABLE IF EXISTS `course`;CREATE TABLE `course` (`id` int(11) NOT NULL,`name` varchar(22) DEFAULT NULL,PRIMA...

2020-07-28 17:14:19 1729

转载 MySQL常用SQL(含复杂SQL查询)

1、复杂SQL查询1.1、单表查询(1)选择指定的列[例]查询全体学生的学号和姓名select Sno as 学号,Sname as 姓名 from student;select Sno,Sname from student;(2)查询全部列[例]查询全体学生的详细信息select * from student;(3)对查询后的指定列进行命名[例]查询全部学生的“姓名”及其“出生年”两列select Sname as 姓名,(2014-Sage) as 出生

2020-07-28 16:21:53 1126

转载 Redis缓存穿透、缓存雪崩、缓存击穿及解决方案【持续更新中】

对于缓存的了解一支半解,只知道缓存可以减少数据加载或计算的时间。但是没有考虑过缓存存在的问题。面试官关注的缓存的三个主要问题如题目所示。下面我们分别讲一讲缓存的这三个问题具体是指的什么,怎么解决这些问题。首先给出一张应用架构图:如上图所示,我们在应用程序和Mysql数据库中建立一个中间层,即Redis缓存。通过Redis缓存可以有效减少查询数据库的时间消耗。缓存穿透第一次看到这个名字,会觉得是一个很高深的名词。但是和其他许多概念一样,它只是描述了一个很容易理解的现象:请求了不存在的...

2020-07-28 15:54:48 176

转载 Java设计模式之责任链模式(Chain of Responsibility)

一、责任链模式(Chain of Responsibility)定义责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。二、从击鼓传花谈起击鼓串花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客一次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时

2020-07-27 14:40:14 366 1

转载 JAVA设计模式之门面模式(外观模式)

医院的例子现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其"分而治之",把一个系统划分为几个较小的子系统。如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验。化验后再回到门诊室。上图描述的是病人在医院里的体验,图中的方框代表

2020-07-27 12:15:24 158

转载 Java设计模式之观察者模式

一、文章目录概念 自己实现一个观察者模式 使用Java自带的观察者模式类实现二、概念在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。观察者模式主要有两个角色Subject 观察主题对象,也可以叫被观察或者被订阅对象 Observer 观察者或者订阅者对象,当Subject有变动,就会通知到每一个Observer我们按照定牛奶的方式来理解,Subject实际上可以理解成奶厂,Observer可以理解成为我们每个用户,而观察者模式就是在

2020-07-27 11:40:59 124

转载 Java 后端微信支付demo

优质文章和资料会及时送达一、导入微信SDK二、在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建)三、实现微信的WXPayConfig接口package com.ieou.demo.common;import com.github.wxpay.sdk.WXPayConfig;import org.apache.commons.io.IOUtils;import java.io.ByteArrayInputStream;

2020-07-26 15:38:17 541

转载 spring的4种事务特性,5种隔离级别,7种传播行为

spring事务:什么是事务:事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.事务特性(4种):原子性 (atomicity):强调事务的不可分割.一致性 (consistency):事务的执行的前后数据的完整性保持一致.隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰持久性(durability):事务一旦结束,数据就持久到数据库如果不考虑隔离性引发安全性问题:脏读:一个事务读到了另一个事务的未提交的数据...

2020-07-23 15:12:30 154 1

转载 【Mysql中间件】Mycat安装部署+读写分离

说明:mysql-master:172.16.200.43Mycat:172.16.200.43mysql-slave1:172.16.200.45mysql-slave2:172.16.200.46.......................................................................................MariaDB5.5.51数据库..............................................

2020-07-22 18:21:06 237

转载 Spring中常见的设计模式——工厂模式

一、简单工厂模式  简单工厂模式(Simple Factory Pattern)由一个工厂对象决定创建哪一种产品类的实例,简单工厂模式适用于工厂类负责创建对象较少的情况,且客户端只需要传入工厂类的参数,对于如何创建对象不关心。public interface IBlog { //写随笔 public void write();}public class JavaBlog implements IBlog { @Override public void w

2020-07-22 01:05:20 540

转载 JAVA并发编程:LOCK(锁)

今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章,注意红色字体。  在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lo.

2020-07-21 01:58:53 328

转载 Spring中用到了哪些设计模式?

谈谈Spring中都用到了哪些设计模式?JDK 中用到了那些设计模式?Spring 中用到了那些设计模式?这两个问题,在面试中比较常见。我在网上搜索了一下关于 Spring 中设计模式的讲解几乎都是千篇一律,而且大部分都年代久远。所以,花了几天时间自己总结了一下,由于我的个人能力有限,文中如有任何错误各位都可以指出。另外,文章篇幅有限,对于设计模式以及一些源码的解读我只是一笔带过,这篇文章的主要目的是回顾一下 Spring 中的常见的设计模式。Design Patterns(设计模式) 表示面向对象

2020-07-16 01:20:55 1495

转载 Java的三种代理模式

1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经

2020-07-13 01:50:25 200

转载 你应该要理解的java并发关键字volatile

提高java的并发编程,就不得不提volatile关键字,不管是在面试还是实际开发中 volatile都是一个应该掌握的技能。他的重要性不言而喻。因此也有必要学好。一、为什么要用到volatile关键字?使用一个新技术的原因肯定是当前存在了很多问题,在Java多线程的开发中有三种特性:原子性、可见性和有序性。我们可以在这里简单的说一下:1、原子性(Atomicity)原子性是指在一个操作中就是cpu不可以在中途暂停然后再调度,既不被中断操作,要不执行完成,要不就不执行,就好比你做一件事,要么

2020-07-04 13:09:24 143

原创 用IDEA创建第一个用Gradle编译的SpringBoot项目

一、为什么要从maven切换到gradle在 2.3.0 中对 Spring Boot 进行了相当重大的更改,这是使用 Gradle 而非 Maven 构建的项目的第一个版本。Spring 的每个项目都独立的项目组在开发运营,在用户最常使用的白盒部分(例如 API 设计)保持一致性,对于用户不可见的黑盒部分,各个项目组选择自己适合工具没有统一的约定。例如: 项目构建工具。Spring Framework 自 2012 年的 3.2.0 起就使用 Gradle 构建,而一年后开始使用 Spring

2020-07-02 02:48:21 2057

转载 高并发,你真的理解透彻了吗?

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多,大概分成这样几类:1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等

2020-06-27 17:30:21 647

转载 redis key 通配符 查询相应的key keys pattern 查询相应的key

keys pattern 查询相应的key在redis里,允许模糊查询key有3个通配符*,?,[]*:通配任意多个字符?:通配单个字符[]:通配括号内的某1个字符redis127.0.0.1:6379>flushdbOKredis127.0.0.1:6379>keys*(emptylistorset)redis127.0.0.1:6379>msetone1two2three3four4OKre...

2020-06-18 00:32:12 1795

转载 一口气说出 6种@Transactional注解的失效场

引言昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败。所以今天简单的和大家分享一下@Transactional相关的知识。@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。一、事务事务管理在系统开发中是不可缺少的一部分,S

2020-06-16 00:00:59 354

转载 redis的key对应mysql数据表设计

根据用户名来查询用户信息#在关系型数据中,除主键外,还有可能其他列也步骤查询,如上表中, username 也是极频繁查询的,往往这种列也是加了索引的.转换到k-v数据中,则也要相应的生成一条按照该列为主的key-valueSet it_user:username:asion:id 1这样,我们可以根据username:sion:id ,查出userid=1,再查user:1:email ......

2020-06-11 13:23:04 657

原创 深入浅出多线程之线程创立四种方式(二)

1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口)2.实现Runnable接口,重写run方法3.实现Callable接口,重写call方法(有返回值)4.使用线程池(有返回值)1.继承Thread类,重写run方法  每次创建一个新的线程,都要新建一个Thread子类的对象  启动线程,new Thread子类().start()  创建线程实际调用的是父类Thread空参的构造器public class MyThread {

2020-06-07 00:49:54 146

原创 深入浅出多线程之基本概念(一)

概念和历史通俗的讲,多线程可以理解为程序运行的时候齐头并进的效果。一般的java程序在主线程启动之后,cpu的资源就是单纯为这个主线程来准备的(除去垃圾回收线程和其他的守护线程外),而多线程就不一样了。因为线程和主线程之间在资源上是竞争关系,所以cpu的资源会被所有的线程共享。有人可能会问,这样有什么用呢?当然有用,这样可以充分利用cpu的使用率。由于现在的服务器都是多核cpu,某个cpu在处理一件事的时候,其他的cpu都是空闲的。既然如此,我们就可以使用多线程来利用这些空闲的cpu去做一些别的工作

2020-06-07 00:11:29 228

原创 Spring Cloud Alibaba实战入门之Nacos注册中心(十四)

一、背景越来越多的读者在和我交流关于Spring Cloud Alibaba的种种事宜,甚至于在一次面试中,一半时间都在聊这个话题。所以,本着对技术钻研的热情,对Spring Cloud Alibaba进行了一番研究。在这里,并不想高谈阔论,也不想预言未来,只是挑选了几个从阿里巴巴中间件团队内脱胎出来的开源组件,对于解决实际业务问题有所裨益。现在,很明显的一个趋势就是:微服务。这个趋势的底层驱动力就来源于分布式系统的普及,而微服务的各个特性是如今大大小小的企业无法拒绝的诱惑。然后,用上了微服务的架构

2020-06-03 15:17:54 340

原创 Spring Cloud 和Spring Cloud Alibaba概述和比较(十三)

1、spring cloud概述SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。SpringCloud利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、

2020-06-03 13:27:51 9157 2

转载 Spring解决循环依赖

一、循环依赖循环依赖指两个或以上的对象之间出现相互引用的情况。Spring中出现循环依赖的情况包括:构造器注入的循环依赖。 属性注入的循环依赖。二、检测循环依赖在Bean的创建过程中给正在创建的对象Mark上标记,如果循环依赖了则会递归调用,这时发现对象仍反正在创建中,就会抛出异常。三、Spring解决循环依赖在spring中解决的是属性注入的方式造成的循环依赖,而构造方法的循环依赖因为在实例化阶段就无法进行所以不能解决。其中prototype类型的对象属性注入循环.

2020-05-21 13:37:19 638

原创 小程序开发之底部导航菜单(四)

一、小程序之底部导航学习过原生IOS和Android的朋友肯定做过底部导航菜单,这一经典设计和交互功能在移动手机端的APP上几乎无处不在,在原生的IOS和Android上实现这一功能并不十分简单(当然网上有很多成熟的模板可以参考和借鉴),在小程序上这一复杂功能的实现将彻底变得异常简单每一个底部菜单导航页面需要你新建一个页面模块(对应就是一个文件夹,包含四个同名文件);但是这样显...

2020-05-03 12:15:28 1290

原创 小程序开发之小程序原理和结构(三)

一、小程序原理小程序运行时会有两个线程:『View Thread』和『AppService Thread』,相互隔离,通过桥接协议WeixinJsBridage进行通信(包括 setData 调用、canvas指令和各种DOM事件)下述表格展示了两个线程的区别:线程名称 所属模块 运行代码 原理 备注 View 视图层(可能有多个) WXML/W...

2020-05-03 05:34:30 1380

原创 小程序开发之代码托管和发布(二)

一、代码托管程序猿写代码怎么能少得了代码托管,微信小程序提供了代码托管Git服务器,方便开发者随时随地将自己代码提交到Git服务器上,首先需要你到微信小程序Git服务器官网注册一个属于自己的专属账号,选择微信开发者工具中【工具】-》【微信开发者-代码管理】点击后会跳转到下面这个页面【微信小程序官方代码托管服务器主页】如果你没有账号,你需要首先设置自己的账号和密码,这个用于你...

2020-05-03 04:41:14 1907

原创 小程序开发之小程序入门(一)

一、什么是小程序其实小程序就是类似之前的服务号,公众号的存在,看下图,引用Allen Zhang 的话:“小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。”二、小程序能干什么1.小程序可以做游戏;2.小程序...

2020-05-03 04:08:56 1095 1

转载 Java多线程对CountDownLatch的使用实例

阅读目录介绍 实现原理 实例1 实例2(和join的相似处) 实例3(和join的不同处)回到顶部介绍CountDownLatch是一个同步辅助类,它允许一个或多个线程一直等待直到其他线程执行完毕才开始执行。用给定的计数初始化CountDownLatch,其含义是要被等待执行完的线程个数。每次调用CountDown(),计数减1主程序执行到await()函数会阻塞...

2020-04-23 01:26:08 279

转载 Java面试宝典之Spring事务的面试题

数据库事务和Spring事务是一般面试都会被提到,很多朋友写惯了代码,很少花时间去整理归纳这些东西,结果本来会的东西,居然吞吞吐吐答不上来。下面是我收集到一些关于Spring事务的问题,希望能帮助大家过关。事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。事务最重要的两个特性,是事务的传播级别和数据隔离级别。传播级别定义的是事务的控制范...

2020-04-22 14:51:25 1034

转载 Hashtable源码解析

Map--HashTable上一篇文章中,我们分析了HashMap的源码,这一篇文章我们学习Map接口的另一个实现类---HashTable,在学习之前,不熟悉hashMap的可以先看我的上一篇文章Map--HashMap,我们需要先了解下它和HashMap有哪些异同点。不同点 HashMap HashTable 继承的父类 Dictionary类 Abstra...

2020-04-21 17:08:09 304

转载 nacos简介以及作为注册/配置中心与Eureka、apollo的选型比较

一、Nacos简介Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。 动态配置管理 动态配置服务允许您在所有环境中以集中和动态...

2020-04-20 09:55:58 599 2

原创 LeetCode第1题Two Sum(含最优解)

一、题目给定一个整数数组,返回两个数字的索引,使它们相加成为一个特定的目标。您可能假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素。Example:Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].二、解法概览解法1:暴力法...

2020-04-17 15:32:48 2312

原创 IDEA开发流程Activiti需要注意的一些坑

1、慎用IDEA2020最新版本IDEA2020最新版本迎来了重大升级,对java和spring有了更好更强大的开发支持,但是对于Activiti流程开发却不再支持,可能是因为actiBPM插件太老,或者IDEA2020对插件支持做了规范要求等等,请各位喜欢尝鲜的码农们慎用,如果升级后无法继续支持actiBPM插件,请到IDEA官网下载更低版本的IDEA2019.3版本,亲测该低版本依然很好的...

2020-04-14 11:01:37 8028 16

转载 Spring循环依赖是什么?怎么解决

前言Spring如何解决的循环依赖,是近两年流行起来的一道Java面试题。其实笔者本人对这类框架源码题还是持一定的怀疑态度的。如果笔者作为面试官,可能会问一些诸如“如果注入的属性为null,你会从哪几个方向去排查”这些场景题。那么既然写了这篇文章,闲话少说,发车看看Spring是如何解决的循环依赖,以及带大家看清循环依赖的本质是什么。正文通常来说,如果问Spring内部如何...

2020-04-13 22:19:53 826

空空如也

空空如也

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

TA关注的人

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