-
Redis-接口的幂等性之Redis解决方案
最近工作的过程中,遇到了解决接口幂等性的需求,最终使用了Redis分布式锁 + token + spring拦截器的方案解决,在这里记录下。什么是接口幂等性 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条。这就没有保证接...…
-
SpringCloud学习-分布式配置中心Spring Cloud Config(二)-总结
在上一篇博文中,实现了一个简单的 Spring-Cloud-Config 应用,其中包含了服务端和客户端两部分,实现了客户端从分布式配置中心获取配置的基本功能,这篇博文,将对Spring-Cloud-Config 做一个总结,并简单介绍其个性化配置及特殊功能。阅读本文之前,务必阅读上一篇博文!链接:SpringCloud学习-分布式配置中心Spring Cloud Config(一)-基础用途 用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持。解决痛点 在分布式系统...…
-
SpringCloud学习-分布式配置中心Spring Cloud Config(一)-基础
介绍 先来说说为什么需要 Spring Cloud Config,以及它能用来干什么 用途:用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持。 解决痛点:在分布式系统或微服务应用中,各个模块或服务之间的配置文件都是独立的,但是大多数时候很多配置都是重复的,这样一来造成了很大的维护成本,而Spring Cloud Config 解决了这个问题。 其次来看看它的特点: 分为客户端和服务端两部分。 服务端也称为分布式配置中心,用来连接配置仓库并为客户端提供获取配置信息...…
-
SpringCloud学习-SpringBoot入门及使用Mysql
为什么要使用SpringBoot Spring Boot可以说是至少近5年来Spring乃至整个Java社区最有影响力的项目之一,也被人看作是:Java EE开发的颠覆者。SpringBoot的优点 去除了之前Spring项目的大量的xml配置文件 简化了复杂的依赖管理 配合各种starter使用,基本上可以做到自动化配置 快速启动容器 嵌入式Tomcat,Jetty容器,配合Maven或Gradle等构件工具打成Jar包后,Java -jar 进行部署运行还是蛮简单的入门He...…
-
数据库、SQL相关
写在前面 这篇博客来和大家一起回顾和总结一下SQL相关的知识,主要分为两大部分:数据库三大范式、事务的隔离级别。关于SQL的基本增删改查这里就不再赘述了,这些大家应该都很熟练。三大范式 我们先来看看什么是范式:以下关于范式的解释摘抄于百度百科: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-...…
-
NIO-缓冲区的分类和通道的使用
写在前面 之前的一篇博客和大家一起学习了缓冲区最基本的使用,了解了缓冲区的一些基本方法,大家应该都对NIO的高效有所耳闻,而阅读上一篇博客之后大家应该并没有体会到NIO如何高效,那么阅读这篇博文之后大家应该就对NIO的高效有一个初步的了解了。 这篇博客会先和大家学习NIO缓冲区的两种分类———直接缓冲区和非直接缓冲区,之后在此基础上再来学习通道,并且用复制文件这个例子来体会缓冲区和通道的应用。 注:直接缓冲区的速度和效率要比非直接缓冲区以及传统IO操作高许多许多!!! 直接缓冲区和非直...…
-
NIO-简介及缓冲区的简单使用
写在前面 前段时间工作之余了解了一下 NIO ,现在拿出来做以总结,打算花6篇左右的博客,对 NIO 的基本特性和日常使用,做个小小的总结。NIO简介 有过一定JAVA基础的朋友们应该都对 IO (输入输出)有一定的了解,那么 NIO 其实是JDK1.4之后推出的一种新的 IO 类型,当时因为对高并发和大数据处理的要求并不高,并且 NIO 与传统 IO 的原理和使用方式都完全不同,所以并没有普及,之后经过 JDK 几个版本的改良,并且市场环境发生变化之后,NIO 才真正的大规模投入了使...…
-
JAVA进阶学习-反射机制
JAVA 反射机制 Java Reflaction in Action中有这么一句话,反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变。通俗的讲就是反射可以在运行时根据指定的类名获得类的信息。 平时开发中我们实例化一个类的过程一般是这样的:引入需要的“包类”的名称–>通过new实例化–>取得实例化对象 而JAVA得反射机制允许我们将这个过程反过来:实例化对象–>getClass()方法–>得到完整的“包类...…
-
JAVA源码解析-HashMap源码
写在前面 在JAVA这么多的集合框架中,HashMap在我看来是必须要重点理解并且掌握的,之前我按照前几篇集合源码分析的博客的套路写了一篇HashMap的源码分析,但是始终觉得写的差了一点什么,所以这篇我干脆从网上找了一篇转载过来。这篇博客转载的是美团点评技术团队的一篇博文,我阅读了互联网上很多关于HashMap的博文之后,在我看来这篇博文是写的最好,最透彻的。 虽然这篇文章属于转载,但是以后我还是会坚持原创,这篇文章写的很好,所以就想着贴出来做一个记录。 原文链接: 点击即可→Ja...…
-
JAVA源码解析-LinkedList源码
概述 LinkedList 是 list 接口的链表实现,它是基于双向循环链表实现的,这一点在源码中很容易就能看出来。除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList 和 ArrayList 一样,它不是线程安全的,在多线程下可以考虑使用 Collections.synchronizedList方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问:代码如下:List list = Collections.synchroni...…
-
JAVA源码解析-ArrayList源码
概述 ArrayList 是基于数组实现的,是一个动态数组,其容量能自动增长。ArrayList不是线程同步的,在多线程下可以考虑使用 Collections.synchronizedList 方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问:代码如下:List list = Collections.synchronizedList(new ArrayList(...));继承的父类及实现的接口 ArrayList 继承了 AbstractList 类,此...…
-
JAVA源码解析-String源码
一、String类 String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例来实现的。首先String类是被final所修饰的,所以不允许被继承和修改,String类实现了Serializable、Comparable、CharSequence这三个接口,Serializable接口使得String可序列化;Comparable为String提供了比较器,使其可进行排序;CharSequence接口有length(),charAt(int ind...…
-
Spring-AOP切面编程总结
1 AOP简介 AOP是面向切面编程(Aspect-Oriented Programming)的缩写,是对传统的面向对象编程的一种补充,下面来介绍下在AOP中经常用到的一些术语。 切面(Aspect):横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象 通知(Advice):切面必须要完成的工作 目标(Target):被通知的对象 代理(Proxy): 向目...…
-
JAVA进阶学习-多线程基础详解(三)-锁
这几天又没更新了,哎,还是懒啊!大家看了博客之后有啥看法可以说出来嘛,我们讨论讨论,这样我就更有写下去的动力了,最近在学驾照,就快要考科目二了,所以会更的比较慢。好了,进入正题。 额,我又插几句题外话,其实这时候这篇博客已经写完了,我是回过头来写的这段话,现在是凌晨两点三十分,很困,没想到会写到这么晚。大家看这篇博客之前一定要去看看上一篇博客,因为这篇的代码是基于上一篇改动过来的,至少也应该理解上篇博客的代码之后再来阅读,传送门就在下一段。希望大家学业有成、事业顺...…
-
JAVA进阶学习-多线程基础详解(二)-同步
之前有些朋友读了第一篇博客之后说我写的有点晦涩,不够通俗易懂,想了一下言之有理,决定在以后的博客里换个风格,总之大家一起共勉吧,我也不是什么大神,有啥问题大家一定要提出来,本人有则改之,无则加勉! 之前的一篇博客里给大家介绍和分析了创建线程的两种方法,这篇博客我们就来分析下关于线程同步的一些问题。 在实际开发中我们经常见到这样的一种情况:两个或两个以上的线程存取同一个对象,并且每个线程都调用了一个修改该对象的方法,这时错误就会在你不经意间发生了,这是为什么呢?我们来举一个例子:现在...…
-
SpringCloud微服务基础搭建--传统spring项目如何接入spring cloud体系?
项目目录简介 demo – spring cloud注册中心 eureka-client – spring cloud服务提供者 eureka-consumer – spring cloud服务消费者 mvc-demo – 传统spring项目接入spring cloud服务体系进行服务的注册和消费spring boot的特点核心功能 独立运行Spring项目Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx....…
-
JAVA进阶学习-多线程基础详解(一)
线程与进程的区别定义 进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。区别 简而言之, 一个程序至少有一个进程,一个进程至少有一个线程。 线...…
-
机器学习--简单的线性回归算法
写在前面 前一段时间一直忙于毕业答辩,完了还去桂林完了一圈,算是毕业旅行了吧。今天终于有空来更新了,之前的那篇博客主要说了关于机器学习的一些概念性的知识,阐述了监督学习和无监督学习的概念,这篇博客我会介绍这个系列的第一个算法内容:线性回归算法,并且阐述代价函数的定义。如果要流畅的阅读本文,还是需要一点高数的基础知识的,不过也不难。让我们开始吧!线性回归 之前的那片博客为了说明监督学习的概念我们举了一个关于房价的例子,如下图: 图中横坐标代表房子的价格,纵坐标代表房子的面积,其中的红色...…
-
机器学习--啥子是监督学习和无监督学习?
阅读本文大概需要花费三分钟。引言 上篇文章我们大概了解了人工智能当下的应用情况和学习人工智能的必要性,从这篇文章开始,我们开始真正的去学习机器学习知识,这篇文章先带大家了解一下机器学习的概念,然后分别探讨下监督学习和无监督学习。机器学习 之前有一次一个朋友问我一个问题,涉及到人工智能方面,我反问他懂不懂机器学习和深度学习是什么,他说机器学习就是学习的时候没有技巧,深度学习就是学习的时候有技巧学的比较有深度,这个回答让我当时实在觉得不知道该如何纠正才好,气氛一度十分尴尬。不知道有多少...…
-
朋友,你应该懂点人工智能--我为什么要懂人工智能?
阅读本文大概需要花费两分钟。引言 《朋友,你应该懂点人工智能》,这是我打算再今后的一段时间里持续的在博客还有公众号中更新的一个系列文章,更新这个文章的主要目的是想带着大家去了解下人工智能的相关技术,我不会写的很深入,这个系列的文章主要是面对以前并没有去了解过人工智能相关技术的互联网从业者,即使你对人工智能没有兴趣,为了不被淘汰,你也必须了解。 该系列会涉及到机器学习和深度学习的方方面面(如果对这两个词有点陌生可以大概百度下),其中的每一个常用算法以及概念知识点我都会尽量通俗的像...…