自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 问答 (3)
  • 收藏
  • 关注

原创 http缓存梳理

借鉴并且摘抄了这篇博客的部分内容http缓存详解,http缓存推荐方案http请求和响应头的缓存字段1. Cache-control缓存控制头,http缓存控制的最高指令no-store:所有内容都不缓存no-cache:缓存,但是浏览器使用缓存前,都会请求浏览器判断缓存资源是否是最新max-age=x:请求缓存后的X秒不再发起请求,属于http 1.1的属性,与 Expire(http 1.0) 类似,但是优先级比 Expires 。这是一个相对时间,expire是绝对时间。max-age

2020-12-11 00:52:00 299

原创 数据库锁的基本了解

表锁就是在数据表层面加锁。分别是有读锁和写锁。很好理解,读读兼容,写写,读写互斥。加锁的方式和释放方式如下。lock table user write;lock table user read;unlock tables;行锁innodb可以给行加锁,相比表锁,这样可以减少加锁的粒度,减少锁的冲突,提高并发能力。行锁有以下两种。共享锁(shared lock):允许事务读行,使用共享锁后,其他事务可以获取相同数据集的共享锁,但是不能获得排他锁。手动加锁方式select * from t

2020-12-01 23:01:53 266

原创 事务隔离级别示例

mysql 数据库事务并发产生的问题:脏读:读到没有提交的事务产生的数据不可重复度:一个事务因为别的事务修改或者删除数据导致前后重复读的数据不一致幻读:一个事务因为别的事务提交了数据,导致前后重复读第二次读取的数据更多为了解决这些问题,mysql提供了以下事务隔离级别,不同隔离级别分别可以解决上述的问题。 隔离级别 脏读 不可重复读 幻读 读未提交 可能

2020-12-01 22:31:06 185

原创 微服务调用链路治理–Zipkin

微服务调用链路治理–ZipkinZipkin 介绍zipkin官方网站,点此进入Zipkin是一个分布式链路调用监控系统,聚合各业务调用延迟数据,以达到链路调用监控跟踪架构图如下总体划分,zipkin 可以分为 client 和 server 两部分。client 就是我们需要管理的各个服务,在各种调用行为的过程当中收集数据发送给server。server 用于收集各个 client 上报的数据,存储,分析,以及展示等等。Zipkin Server主要包括四个模块:Collector

2020-11-13 11:27:31 705

原创 Netty学习-CS模式的简单示例

package timeserver;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.N.

2020-11-03 22:59:46 253

原创 Netty学习-HTTPserver

package httpserver;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channe

2020-11-03 22:59:38 103

原创 Netty学习-java对象的序列化

package subscribeserver;import io.netty.bootstrap.Bootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.Nio

2020-11-03 22:59:27 147

原创 Netty学习-使用LineBasedFrameDecoder对粘包的处理

解决粘包问题的示例package timeserver;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.chan

2020-11-03 22:59:14 279

原创 Java Stream 使用的简单示例

一些简单示例,备忘List<Integer> list = new ArrayList<Integer>(){{ add(1); add(2); add(3); add(4); add(5); }}; //@FunctionalInterface 装饰的接口可以用lambada表达式 Consumer<Integer> echo = t -> System.out.print(t + ", ");

2020-10-20 23:02:56 139

原创 线程池

package multhread;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class ExecutorsDemo implements Runnable{ @Override

2020-06-14 21:06:04 101

原创 CountDownLatch 和 CyclicBarrier

CountDownLatch 可以让线程阻塞在别的线程执行之后。构造函数 new CountDownLatch(int count)。 count表示 countdown()要执行多少次,线程才能结束等待。countdown() 表示上述构造函数的 count 减去1。当 count 为 0 的时候 await 结束countDown具体使用示例如下:package multhread;import java.util.concurrent.CountDownLatch;public

2020-06-14 21:05:03 134

原创 线程挂起和唤醒,LockSupport

LockSupport 可以挂起和唤醒线程park() 和 unpark() 是两个静态方法分别表示挂起和唤醒unpark() 可以执行在 park() 之前。标识这个线程已经做过唤醒操作,线程会直接略过阻塞。package multhread;import java.util.concurrent.locks.LockSupport;public class LockSupportDemo implements Runnable{ @Override public void run(

2020-06-14 21:04:25 284

原创 读写锁,ReentrantReadWriteLock

读写锁是为了减少读操作的互斥,提高执行效率。同步具体表现为读读不互斥读写互斥写写互斥以下是一个基本的使用示例:package multhread;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteLockDemo{ private static ReentrantReadWriteLock l

2020-06-14 21:03:56 110

原创 信号量,Semaphore

信号量可以同时允许多个线程进入临界资源区。new Semaphore(int permits) //构造函数中指定允许的线程数量acquire() release() 分别表示获取信号量准许和释放准许public class SemaphoreDemo implements Runnable { final Semaphore semp = new Semaphore(5); @Override public void run() { try { //当前线程获取信号

2020-06-14 21:03:20 201

原创 重入锁,ReentrantLock 和 Condition 的使用

重入锁 ReentrantLock 主要特点:容易控制加锁的粒度。lock unlock等待锁的过程当中可以响应中断,lockInterruptibly可以有限时间内尝试获取锁, tryLock公平锁,尽量保证各个线程获取锁的公平使用 Condition 对线程进行等待和唤醒重入锁的基本使用 lock() 和 unlock() 分别加锁和释放锁,必须一一对应。class RetrantLockDemo implements Runnable{ private static Reentr

2020-05-11 23:36:05 281

原创 sql 中的 case 表达式

case 表达式的基本用法case when sex=1 then "男" when sex=2 then "女" else '其他' end或者case sex when 1 then "男" when 2 then "女" else '其他' end注意事项每个条件具有排他性,执行到符合条件的分支就不会继续执行下去。th...

2020-02-29 23:33:56 451

原创 单例模式 - Head First设计模式学习

单例模式是比较简单的设计模式。直接给出定义就明白了。单例模式确保一个类只有一个实例,并提供一个全局访问点要保证一个类只有一个实例需要做到以下几点:私有类构造器,防止别的类直接用类构造器实例化实例既然构造器私有了,那么只有类本身能够实例化。类需要提供一个公开的接口获取实例类本身需要保证实例的单一类图如下:类怎么创建单一的实例,有以下几种办法:错误的示范public class...

2020-02-29 23:31:40 133

原创 装饰者模式 - Head First设计模式学习(二)

咖啡店因为业务扩张,准备更新自己的订单系统,以合乎他们的饮料供应要求。原先设计的类是这样的:Beverage(饮料)是一个抽象类,店内提供的饮料都必须继承自此类。cost()方法是抽象的,子类必须定义自己的实现。通过cost()来返回饮料的价钱。购买咖啡时,也可以要求在其中加入各种调料,例如 蒸奶(Steam Milk),豆浆(Soy),摩卡(Mocha)等等。那么如果按照...

2020-01-28 17:10:48 133

原创 egg 学习与分享

egg 学习与分享什么是 eggegg.js是基于koa为底层,由阿里nodejs团队封装的企业级Web应用解决方案,以约束和规范化团队开发,帮助开发团队和开发人员降低开发和维护成本为核心设计理念的优秀解决方案。官方文档地址:https://eggjs.org/zh-cn/index.html创建一个 egg 应用创建工程目录,进入工程目录下执行以下命令,初始化一个基本的 egg 工...

2020-01-16 22:30:30 405

原创 等待线程结束 join 和谦让 yield

join 表示当前线程要等待目标线程执行结束,然后继续执行当前线程。join有两个api.分别是//无限等待public final void join() throws InterruptedException//设置最长的等待时间,到了限制时间就不等待了public final syschronized void join(long millis) throws Interrupt...

2020-01-16 22:29:42 115

原创 线程挂起和唤醒,Object 的 wait 和 sinal

wait() 和 notify() 顾名思义一个是等待,一个是唤醒。分别表示线程的挂起和唤醒。两者都是Object类的方法。wait() 使用的时候必须注意在 synchronized 的代码块里执行。因为执行 wait 函数之前会先获取到目标对象的监视器,然后释放监视器,方便其他等待在这个目标对象上的线程可以继续执行下去。package demo1;public class Simp...

2020-01-16 22:29:16 617

原创 线程中断,stop() 和 interrupt()

正常来说线程里的代码执行完之后线程就自动中断了,但是一些处于无线循环当中的线程需要另外通过程序进行中断。stop(),顾名思义就是停止线程,但是当前这个api已经被废弃,不建议使用。原因是调用 stop() 会立即中断线程,无论线程执行到了哪里都立即停止,并且释放其占有的锁。这对于线程执行的完整性造成了破坏。例如下面这个例子package demo1;public class Stop...

2020-01-16 22:28:22 937

原创 观察者模式 - Head First设计模式学习(一)

有这么一个需求。气象站会发布气象监测数据,包括(温度,湿度,气压)需要开发一个应用,从气象站取得数据,并更新应用的布告板。布告板有三类,分别是显示当前天气情况,气象统计数据,天气预报。气象站提供的数据结构如下,很简单,就是温度,湿度,气压的获取,以及气象数据变化时触发的方法。public class WeatherData { private float temperatur...

2020-01-16 22:20:13 94

原创 Spring cloud服务发现过程

基本使用示例基础结构服务注册中心 :Eureka提供的服务端,提供服务注册与发现的功能。服务提供者:提供服务的应用,可以是Spring boot应用,也可以是其他技术平台且遵循 Eureka 通信机制的应用。它将自己提供的服务注册到 Eureka 以供其他应用发现。服务消费者: 消费者应用从服务注册中心获取服务列表,从而使消费者可以知道去何处调用其所需要的服务。很多时候,客户端既是服...

2019-11-11 15:04:10 1111

原创 fastdfs 数据同步和迁移

最近做了一次fastdfs文件迁移的工作,把操作步骤记录下来,留给后面做迁移的时候参考。其中有些细节原理尚不清楚,后续有研究再补充。旧的 fastdfs(110.119.19.20)我们这么命名tracker_oldstorage_old新的 fastdfs(110.119.19.21)我们这么命名tracker_newstorage_new我们为了不影响旧的 fastdf...

2019-10-13 00:05:25 4508

原创 Spring Security用户名密码登陆和token授权登陆两种实现

最近研究了一下Spring boot的web工程里通过Spring security做登陆验证。因为要满足授权登陆和用户名密码登陆两种方式,因此有一些配置和自定义的验证方式需要添加。这里简单说一下,主要留着备忘,之后有继续对这个框架研究再继续完善这份文档。简单先说说spring security对于登陆验证的流程。security本身带有一系列的拦截器,对于web资源的请求,都会根据secur...

2019-08-31 13:12:10 12478 4

原创 《Spring Boot实战》学习(五):Spring Cloud 搭建

文章目录微服务配置服务服务发现路由网关负载均衡断路器示例搭建父模块搭建服务发现配置服务Person服务some 服务UI服务断路器的监控微服务将传统的单块式架构按照定义好的边界切割成独立的组件。Spring cloud为分布式的微服务架构提供了解决方案。配置服务Spring Cloud提供了Config Server。可以在git或者文件系统中集中的放置配置文件。Spring Cloud...

2019-06-22 12:33:24 137

原创 《Spring Boot实战》学习(四):Spring Boot的基础配置

Spring boot的基本配置入口类和@SpringBootApplication如前面所示,Spring boot有一个名为 *Application的入口类。类中的main方法就是项目的入口方法。使用SpringApplication.run(SpringBootSampleApplication.class, args);启动项目。@SpringBootApplication 是一...

2019-06-22 12:33:09 111

原创 《Spring Boot实战》学习(三):Spring Boot工程的搭建

网上提供了一些便捷的方式快速搭建 Spring Boot 工程。如下:http://start.spring.io . 打开这个网址,可以根据一些自选的选项下载一个基础的Spring 工程的源码。然后在此基础上进行开发。工程源码导入到 eclipse 当中。工程目录如下Spring Tool Suite . 这是一个专门为 spring 开发定制的 eclipse 版本。可以使用这...

2019-06-22 12:32:56 103

原创 《Spring Boot实战》学习(二):Spring的常用配置

ScopeScope描述的是Spring容器如何创建Bean的示例的。Spring的Scope有以下几种,通过@Scope注解来实现。Singleton,一个Spring容器中只有一个Bean实例,这个是默认配置。即单例。Prototype,每次调用创建一个Bean的实例Request,Web项目中,给每一个http request新建一个Bean实例。Session,Web项目中,给...

2019-06-22 12:32:37 98

原创 《Spring Boot实战》学习(一):依赖注入和面向切面编程

Spring框架的四大原则:使用POJO进行轻量级和最小侵入式的开发。通过依赖注入和基于接口编程实现松耦合。通过AOP和默认习惯进行声明式编程。使用AOP和模板减少模式化代码。依赖注入控制反转(Inversion of Control-IOC)和依赖注入(dependency injection-DI)控制反转是通过依赖注入实现的。所谓的依赖注入指的是容器负责创建对象和维护对象间...

2019-06-22 12:32:22 218

原创 javascript原型的理解

javascript创建的对象会继承其原型对象的属性。javascript的继承关系就是通过原型完成的。有以下几个关键的知识点:由构造函数创建的对象都会存在一个指向其构造函数的原型对象的引用(_proto_)。也称之为隐式原型,我试了在node.js里是不能直接访问这个属性的,浏览器中可以访问。应该是和他们各自提供的javascript运行环境有关。这个原型对象也就是创建这个对象的构造...

2019-05-18 17:35:50 106

原创 javascript中的apply()以及call()方法的使用

关于this的使用this 在javascript中是一个只读的变量。在不同的上下文语境当中,this的引用会有改变。this 引用的规则:在最外层的代码中,this引用的是全局对象。浏览器的环境下,就是Window对象。在函数内,this引用根据函数调用的方式的不同而有所不同。函数内部的this引用规则:函数的调用方式this引用的引用对象构造函数调用所生成...

2019-05-18 17:29:11 135

原创 spring实现数据库的自动切换

我们要实现的是多个数据库之间的自动切换,因此面临的主要问题就是:数据源是否有效的检测程序中切换使用的数据库数据源的有效检测方法:​ 单开一条线程,间断的发送一条命令执行,如果执行成功则认为数据库有效,不成功则认为该数据源无效。数据库的切换:​ Spring提供了一个抽象类 AbstractRoutingDataSource ,实类中有一个抽象方法​ protected O...

2019-05-11 00:20:24 411

原创 mysql双机热备配置

mysql双机热备配置一:概念所谓的双机热备就是保证两个数据库的状态同步。其中一个数据库的操作会自动同步到另外一个数据库中去,保证两个数据库的数据一致。二:作用容灾切换,当一个数据库服务器宕机可以将连接切换到另一个数据库。负载均衡,做读写分离,数据库的读和写分摊到不同的数据库当中,减轻单个数据库服务器的压力…三:原理大概介绍一下数据库是如何实现双机热备的。首先先说说主从同步概...

2019-05-11 00:19:03 1396

原创 mysql数据备份

​ 首先看一下我们当前服务器的数据备份逻辑。​ 第一点,要开启数据库的binlog。在数据库的配置文件中添加以下配置,为了避免binlog太大,指定了8天为binlog的有效期。log_bin = /var/lib/mysql/bakup/mysql-bin.logexpire_logs_days = 8max_binlog_size ...

2019-05-11 00:15:46 206

原创 mycat数据库代理配置

一:介绍mycat的具体概念以及作用这里不作概述,相关内容的了解和学习可以参考mycat开源社区: http://www.mycat.io/mycat文档:http://www.mycat.io/document/mycat-definitive-guide.pdf这里介绍怎么使用mycat配置两个mysql数据库节点,并且在其中一个节点宕机的时候自动切换到另外的mysql数据...

2019-04-24 22:05:06 993

原创 redis分布式方案redis cluster的介绍和实践

简要介绍redis cluster是redis官方提供的分布式解决方案。主要作用有两点:将数据根据分区规则分布到不同的redis节点上,降低单个redis节点的读写压力。内置提供高可用支持,集群中的每个主节点可以设置多个从节点,主节点故障后,从节点可以自动替换继续保证redis的使用。分布式的方案要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负...

2019-04-24 21:37:16 882

原创 redis高可用方案redis sentinel的介绍和实践

方案介绍首先对redis 高可用方案sentinel作一些介绍。redis的基本使用以及各种概念原理内容比较多,本文不作展开。推荐一本书籍,本文中的内容也主要是从这本书中了解学习得来。**《Redis开发与运维》 付磊 张益军编著 **redis sentinel是redis官方提供的高可用方案。主要功能是基于redis的主从复制基础上,提供节点故障检测,主节点选举,故障切换等等功能。保证服...

2019-04-24 18:56:58 362

原创 spring实现数据库的自动切换

spring实现数据库的自动切换我们要实现的是多个数据库之间的自动切换,因此面临的主要问题就是:数据源是否有效的检测程序中切换使用的数据库数据源的有效检测方法:​ 单开一条线程,间断的发送一条命令执行,如果执行成功则认为数据库有效,不成功则认为该数据源无效。数据库的切换:​ Spring提供了一个抽象类 AbstractRoutingDataSource ,实类中有一个抽...

2019-04-21 22:09:05 2309 1

空空如也

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

TA关注的人

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