- 博客(40)
- 收藏
- 关注
转载 一、SpringCloud技术栈
前言: 最近在企业开发中,微服务这一热门技术被越来越多的开发者锁中意,如果要提到微服务这其中就有一个要离不开说一说的SpringCloud,那么我们来具体看一下SpringCloud在整个微服务架构中扮演者什么样的角色;一、微服务技术栈: 负载均衡,网关路由:高可用、集群部署,校验、请求转发、服务集成。 服务治理:服务注册、发现。 容错:避免雪崩。...
2019-09-29 15:35:00 2092
转载 一、什么是分布式架构
前言: 随着互联网的快速发展和进步,各个行业迎来了飞速发展的机遇,而在这其中Java这门语言在互联网时代中作为中流砥柱,也在不断的革新,而我们的互联网等公司由于越来越复杂的业务和用户需求使我们传统的单机项目越来越难以满足要求,而在这其中诞生出了另一种理念《分布式》,分布式的出现则是为了应对企业持续复杂化的业务和需求。一、单机项目时代: 优势: 在传统的单机项目时...
2019-09-21 16:28:00 682
转载 四、编写分布式的Lua脚本
前言: 前面我们分析了分布式锁的原理,以及接触了用Lua解决分布式锁的线程安全问题,那么现在就让我们编写一下之前我们分析完毕的分布式锁,并且运用到实际的项目中进行测试,来看看是否可以实现我们想要的需求:一、普通互斥锁: 先来看看前面版本2中锁的实现; 1、获取锁:直接使用客户端的setnx命令即可,无需脚本; 2、释放锁:因为要判断锁中的标识是否是自己...
2019-09-18 17:33:00 155
转载 三、Redis执行Lua脚本
前言: 前面我们已经分析了如何实现分布式锁,以及在实现的过程中分布式锁存在的各种问题,并且提出了解决办法,虽然我们上面看似实现了分布式锁,但是却存在一个致命问题,原子性问题,无论是获取锁还是释放锁,都是用多行Redis命令来实现,如果无法保证这个命令执行的原子性,则整个过程中就存在安全问题,在这里我们要引入另一门语言Lua,Lua脚本语言则可以用来解决多行Redis命令原子性问题,...
2019-09-18 16:03:00 202
转载 二、Redis实现分布式锁
前言: 前面我们了解了什么是分布式锁,以及分布式锁使用的场景和分布式实现的原理,那么接下来我们就来看一下在实际开发中我们要向实现一个分布式锁,应该如何实现,常见的分布式所得实现方法有:基于数据库实现、基于缓存实现、基于zookeeper等,在这里我们来看一下基于缓存的分布式锁的实现。一、版本一、基本实现: 前面我们分析了我们要向实现一个分布式锁,要不许满足两个条件: ...
2019-09-17 18:29:00 98
转载 一、分布式锁的原理
前言: 随着互联网的快速发展,尤其是电商项目等大型项目越来越火,传统的单机项目已经不能满足业务的需求,在这种情况下出现了分布式、集群以及微服务的概念,随着这些新生的概念的出现同时伴随了一系列开发中的问题,下面来看一下这其中之一的分布式锁。一、什么是分布式锁: 在这里为了引出分布式锁先来看一个案例,例如在一个大型的电商项目中传统的单击项目会对服务器造成超负荷的压力,而在这时...
2019-09-17 15:55:00 143
转载 十一、多线程控制类(2)
前言: 前面我们介绍了多线程的控制类ThreadLocal和一些原子类,下面我们来看一下其中两个比较重的关于多线程的控制类和关键字。一、Lock类: 如下是一张关于Lock接口的接口以及实现类的关系图,接下来就具体来看一下其中的关系: 1、Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),Rea...
2019-09-13 22:38:00 135
转载 十、多线程控制类(1)
前言: 前面我们介绍了要想保证多线程变现过程中的安全问题,我们就要保证在读线程编写过程中保证多线程的三大特性,那么java为了保证多线程的三大特性引入了很多线程控制机制,下面就来介绍场用的几种。一、ThreadLocal: ThreadLocal线程本地变量,它可以为每一个线程刚保存一份线程内变量的副本,可以保证线程线程之间的变量时互不影响的,且是原子类可以保证变量的原子...
2019-09-13 21:48:00 167
转载 九、线程的三大特性
前言: 前面我们分析了多线程在编程的过程中为什么会出现线程安全问题,就是多个线程在读写数据时,工作内存和主内存的数据从在不一致,那么要想解决这一问题,那么解决这些问题就会涉及到多线程编写的三个特性:原子性、有序性、可见性,下面我们来具体看一下多线程的这三个特性。一、原子性: 多线程中的原子性,即一个操作或多个操作要么全部执行并且执行过程不能被打断,或者要么全部不执行。...
2019-09-13 14:37:00 146
转载 八、多线程为什么会出现安全问题
前言: 在前面我们主要介绍了一下线程的创建,一些枯燥的概念,以及线程间如何通信和多线程存在线程安全的问题,那么为什么多线程在执行的时候会造成安全问题呢,这一问题我们并没有深入的进入下去,下面我们来了解一下所谓的线程安全倒地时怎么来的。一、内存模型简述 java内存模型之前专门写过一篇总结,虽然都是拿网上的资料东拼西凑的,也多次的去掌握这方面知识,但一些东西还是不了解,网上...
2019-09-10 19:32:00 175
转载 七、线程间的通讯
前言: 我们都了解在CPU执行时,它是并发执行的,并不是获取到一个线程必执行完才能执行下一个,而是以抢占的方式来执行的,有时后我们希望CPU按照某种规律来执行,此时就需要各个线程之间的协调通讯。一、线程间通讯的方式: 在java中为我们提供了不同的方式来实现了线程之间的通讯,来看看具体有哪些方式,可以实现线程之间的通讯; 1、Object中的wait()、notif...
2019-09-10 15:08:00 114
转载 六、线程死锁
前言: 前面我们分析了为什么在多线程中会出现线程安全问题,并且也提出了一些解决的方法,多线程的编写里面中可以提高系统的利用率和处理能力,然而并发也带来了一系列严重的问题,其中之一就是死锁,下面我们来看看什么是死锁,什么情况下会产生死锁,以及死锁的一些避免方式。一、什么是死锁: 在多线程中,死锁是指多个线程竞争抢占资源而导致一种僵直状态(也就是互相等待),若无外力干涉这些进...
2019-09-08 15:40:00 295
转载 五、线程安全
前言: 在我们学习多线程的过程中,总会遇到了一问题那就是线程安全问题,那么,什么是线程安全问题,怎样去判断是否存在线程安全问题,在知道了线程安全问题,开发中我们有如何去避免出现线程安全等问题,接下来我们具体了解一下关于线程安全这方面的一些知识。一、什么是线程安全 通常理解就是多个线程同时操作一个实现了Runnable接口的类,程序每一次调用的结果和单线程调用的结果都是一样...
2019-09-08 15:33:00 128
转载 四、线程的生命周期
前言: 之前我们学习了关于现成的创建的方式,和线程池方面的只是,那么我们来向再想一下关于一个线程从创建到销毁,都经历了哪些阶段,下面来看一下网上的一张,关于线程从创建到销毁生命周期的问题: 一、新建阶段: 在我们用new关键字创建了一个线程后,这个线程就处于新建状态,jvm会为线程分配内存空间,初始化成员变量二、就绪阶段: 当我们创建的线程对象调用了sta...
2019-09-08 12:11:00 127
转载 三、线程池
前言: 在前面的例子中,我们都是手动去实现Runbale、Callable或者继承Thread类来创建一个线程的,但是在实际的开发中,我们通常不会这样做,而是使用线程池,将创建线程的动作交给线程池我们直接拿来用就可以了,线程池相似于数据库连接池,线程池里从放了一定数量已经创建好的线程,我们直接拿来用就可以了,至于线程的销毁什么的都不用我们操心,线程池会负责。一、为什么使用线程池...
2019-09-06 17:47:00 128
转载 二、线程的创建
前言: 前面介绍了并发、并行,进程和线程的却别,接下来我们来看一下我们在java开发中如何创建一个线程,创建线程的方式又有那些,相比较这些方式那个比较好用一、 继承Thread类: 在java开发中,java为我们提供了Thread类,我们想要创建一个线程时,只要继承Thread类重写里面的run()方法就可以了,下面来看一下简单的实现:public clas...
2019-09-06 15:25:00 122
转载 一、并发与并行,进程与线程
前言 在学习多线程的时候,我们必不可少的要寄出几个概念,这就是并发与并行、进程与线程之间的关系与区别,这是我们学习多线程最基础的只是,有只充分理解这个的概念,接下来在多线程的学习中才能更加深入充分。一、并发与并行 并发的概念:指一个时间段内可以做多个事情: 为了更加深入的理解举一个例子:就比如我们在上厕所拉粑粑的时候这时候突然一看时间到了十二点,想起来自己玩...
2019-09-05 16:58:00 98
转载 四、jdk1.8新特性Stream流式处理
前言: 之前在学习JDK1.8的时候接触到了1.8的两个重要的新特新,一个是lambda函数式编程、另一个则是接口的变化,在这里还有一个非常重要的内容就是strema流式处理方式,在传统的java代码中,如果我们要对一个集合做一些操作,就必须遍历这个集合那个集合中的元素逐个操作,而在JDK1.8引入stream流式处理方式后,我们可以不用对集合进行遍历可以直接操作集合得到我们想要的...
2019-09-01 17:04:00 731
转载 三、jdk1.8新特新Lambda表达式方法引用
前言 在之前我们接触了JDK1.8引入的新特新lambda表达式没在某种程度上,它可以简化我们的代码,帮助我们快速的编写代码,但在这其中我们之前的编写方式并不是lambda表达式最简洁的方式,而在头屑情况下我们可以使用lambda表达式的方法引用是代码进一步简洁化。一、方法引用: 在java中方法引用主要是用来替代lambda表达式进一步简化代码,方法引用符号的写法是两个...
2019-08-31 14:10:00 144
转载 二、jdk1.8新特性接口
前言: 在我们刚开始学习java的时候,我们都学过接口的定义,在java中接口只能存在抽象方法和常量,而不能出现方法的实现,而这一规定则在JDK1.8引入的新特新中被打破,下面我们来看一下在最新的JDK版本总对接口做了哪些更新。一、default方法: 接口在JDK1.8引入的新特新,出现了default关键字修饰的方法,由defultf修饰的方法可以有自己的实现。 ...
2019-08-28 16:28:00 109
转载 一、jdk1.8新特性Lambda表达式
前言: JDK1.8是2014年发布更新的新特性有、接口的更新、lambda表达式、方法的引用、Stream API、函数式接口、Hashorn、JavaFX、DateTime,同是出现了一种新的编程思想“函数式编程思想”,在早起我们接触到Java中d的编程思想都是面向对象的编程思想,而面向对象强调的是“一切皆对象”,若果想要做什么事情,必须先构建对象,函数式编程思想则强调的是“做...
2019-08-28 15:54:00 137
转载 一、简介
作者:YSOcean出处:【http://www.cnblogs.com/ysocean/】前言: 本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子。 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比...
2019-04-30 10:27:00 80
转载 Object.clone()方法与对象的深浅拷贝
转载:【https://www.cnblogs.com/nickhan/p/8569329.html】引言 在某些场景中,我们需要获取到一个对象的拷贝用于某些处理。这时候就可以用到Java中的Object.clone方法进行对象复制,得到一个一模一样的新对象。但是在实际使用过程中会发现:当对象中含有可变的引用类型属性时,在复制得到的新对象对该引用类型属性内容进行修改,原始对象响...
2019-04-28 17:51:00 295
转载 Java中newInstance()和new()区别
前言: 最近在看springIOC和AOP是看见代码中很实用newInstance来实例化一个对象,之前对newInstance和new实例化对象的区别很模糊,特意在这里记录一下一、newInstance()和new()区别: 1、两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类: 2、newInstance创建类是这个类必须已经加载过且已经连...
2019-04-28 16:54:00 100
转载 Java 单例模式
转载:【https://biezhi.me/article/how-to-correctly-write-singleton-pattern.html】 单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道...
2019-04-24 16:13:00 66
转载 Java 静态内部类的加载时机
参考文章:【https://www.cnblogs.com/maohuidong/p/7843807.html】前言: 在看单例模式的时候,在网上找帖子看见其中有一种(IoDH) 实现单例的方式,其中用到了静态内部类,文章中有写到当jvm加载外部类的时候,并没有加载静态内部内这和之前自己想的不一样,特意在网上找了一些帖子总结一下。一、学习前千的疑问: 稍微了解Java...
2019-04-24 15:13:00 454
转载 深入理解SpringIOC容器
转载来源:【https://www.cnblogs.com/fingerboy/p/5425813.html】前言: 在逛博客园的时候突然发现一篇关于事务的好文章,说起spring事物就离不开AOP和动态代理,在研究的过程中突然想起spring的两大特性IOC和AOP,之前对这方面也是理解很浅,于是在网上查了一下关于springIOC的文章,发现了一篇好文章,自己也跟着手动创建...
2019-04-17 14:56:00 131
转载 五、Redis持久化配置
转载:【https://www.cnblogs.com/xingzc/p/5988080.html】Redis提供的持久化机制(RDB和AOF)Redis提供的持久化机制 Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能、持久存储、适应高并发应用场景等优势。它虽然起步较晚,但发展却十分迅速。近日,Redis的作者在博客中...
2019-04-15 11:20:00 82
转载 Comparable和Comparator的区别
参考博客:【https://www.cnblogs.com/xrq730/p/4850140.html】前言: 在开发中,有时候我们要用的排序,例如我们需要导出EXCEL表格,而根据SQL语句查询出来的数据排序不能满足我们的需求是,这时候就需要我们自定义排序,而这其中就需要用到Comparable和Comparator接口,在这里总结一下两者的区别:一,Comparable...
2019-04-15 11:03:00 98
转载 四、Jedis操作Redis
前言: 原来我们操作mysql需要用的jdbc,现在操作redis则需要jedis,jedis是客户端,而redis是服务器,使用jedis客户端来操作redis。 在这里要使用jedis操作redis需要引入下面两个jar包 一、Jedis简单操作 1、使用jedis 客户端,完成jedis简单操作:public class JedisTes...
2019-04-11 15:32:00 85
转载 三、Redis基础操作
前言: Redi是key-value的NoSQL,我们用Redis提供的redis-cli就能操作String类型key和各种数据类型value。但是放入的不是特定类型数据,添加的都是一个一个String,只是redis把这些值组织成了各种数据数据构。一、对value为String类型的操作: setkey value(注:将字符串value关联到key) get...
2019-04-11 14:56:00 131
转载 二、Redis安装
一、下载Redis: 下载地址:https://github.com/MSOpenTech/redis/releases。 由于redis并不支持window系统,而window版本的redis的是由微软的一个技术团队推出、维护的,我在官网并没有找到window版本的下载链接,这里给出官网地址,供大家查询文档什么的: 官方网址:redis.io, 中文官方网址:redi...
2019-04-11 13:55:00 232
转载 JAXB注解的使用详解
前言: 最近一直在做各种接口的对接,接触最多的数据类型就是JSON和XML数据,还有XML中包含JSON的数据,而在Java中对象和XML之间的转换经常用到JAXB注解,抽空在这里总结一下,首先做一下准备工作 测试类代码:@XmlRootElementpublic class Student { private String name; //...
2019-04-04 14:33:00 256
转载 Java 面向对象的基本特征
前言: 在刚开始接触Java的时候,那时候面对Java面向对象的几大特征一直理解的不是很理解,借着空闲时间在这里整理一下,同时在加深一下印象。一、封装: Java面向对象的特征之封装,所谓的封装就是指一个类把自己内部的实现细节隐藏,对外提供set/get方法,封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行...
2019-04-03 18:19:00 119
转载 java 虚拟机内存模型
【声明】欢迎转载,但请保留文章原始出处→_→文章来源:【http://www.cnblogs.com/smyhvae/p/4748392.html】文章来源:【http://www.cnblogs.com/smyhvae/p/4810168.html】【正文】声明:本文只针对Java虚拟机的内存划分、以及垃圾回收机制的一些总结,对于有可能涉及到Java中的四中引用...
2019-04-03 16:45:00 100
转载 final关键字总结
参考文章【https://www.cnblogs.com/xrq730/p/4820296.html】 前言:在Java中final作为最常见的一个关键字,平常用到的地方也很多,接下来就来看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看...
2019-03-29 17:40:00 198
转载 static关键字总结
参考博客:【https://www.cnblogs.com/xrq730/p/4820992.html】一、static关键字的基本用法: 1、static修饰变量,static修饰的变量不依赖类的初始化,在类的class文件加载的时候就已经加载了,可以直接用类名.变量名获取,不需要创建对象(注:接口中定义的变量会被默认为static变量) 2、static修饰方法,st...
2019-03-18 15:08:00 93
转载 一、Redis-NoSQL数据库
转载:【https://blog.csdn.net/aaronthon/article/details/81714528 】 【https://www.cnblogs.com/StanleyBlogs/p/10522254.html】一、首先在学习redis之间要解释一个概念,NoSQL 1、非关系型数据库《NoSQL》: NoSQL,简单通俗一点来说就是菲...
2019-03-12 21:32:00 194
转载 一、Mysql安装
一、官网下载:https://dev.mysql.com/downloads/mysql/ 二、解压下载好的压缩包,本人存放的位置如下: 如下图解压后的文件目录,因版本的差异、一开始解压后的文件夹下可能没有my.ini文件或者只有my-default.ini文件,如果没有my.ini文件需要手动创建一个,如果存在my-default.ini文件则改成my.ini文件...
2019-03-02 14:18:00 231
转载 一、微信开发前言、准备
【声明】欢迎转载,但请保留文章原始出处→_→ 工作也有一段时间了,接触微信开发也有两年,之前一直没有想多动手写一些东西的想法,但在最近由于自己开始研究Java源码等,才发现自己在很多方面的欠缺,同时也想动手写一些东西,一来加深自己的理解和学习能力,二来希望能够帮助有需要的小伙伴,本系列文章主要是介绍一些微信公众号的基本功能,至于现在流行的小程序、微信红包等,接口都是大同小异...
2019-01-28 18:04:00 169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人