自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

转载 RPC和 Java RMI的区别

Java RMI与RPC的区别一:RPC 远程过程调用RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务。一次RPC调用的过程大概有10步:  1.执行客户端调用语句,传送参数2.调用本地系统发送网络消息3.消息传送到远程主机4.服务器得到消息并取得参数5.根据调用请求以及参数执行远程过程(服务)6.执行...

2018-11-28 17:38:17 137

转载 JUC介绍 以及JUC中的锁框架

Java JUC 简介在Java 5.0 提供了java.util.concurrent(简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类。用于定义类似于线程的自定义子系统,包括线程池、异步IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的Collection 实现(JUC集合)锁结构:下面这个图更方便理解:在本篇文章之前,我们已经对并发...

2018-11-28 17:33:20 1322

转载 分布式锁以及三种实现(包含测试代码)

分布式锁分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接...

2018-11-28 16:27:58 2327

转载 AQS详解(面试)

AQS原理AQS:AbstractQuenedSynchronizer抽象的队列式同步器。AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。CLH(Craig,Landi...

2018-11-28 14:51:57 195932 49

原创 Volatile关键字以及java并发和锁的相关知识

volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、完整地理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用synchronized来进行同步。本文我们来解释一下Volatile关键字修饰变量的意义。首先我们先简述一下内存模型的相关概念:1.高速缓存:解决CPU执行速度和内存读写速度不匹配的问题。也就是,当程序在...

2018-11-28 11:43:29 295

原创 Atomic的介绍和使用(原子变量)

开始之前,我们来看一下上一篇文章中《CAS (全 ) && concurrent包的实现》中提到了concurrent包的实现图。下图中的原子变量类就是Atomic类中的一部分。也就是说,atomic类首先是一个乐观锁,然后底层实现也是根据CAS操作和Volatile关键字实现的。Atomic在JDK1.5之后,JDK的(concurrent包)并发包里提供了一些类来支持...

2018-11-28 10:54:03 9709

原创 CAS (全 ) && concurrent包的实现

CAS:当多个线程使用CAS获取锁,只能有一个成功,其他线程返回失败,继续尝试获取锁;CAS操作中包含三个参数:V(需读写的内存位置)+A(准备用来比较的参数)+B(准备写入的新值):若A的参数与V的对应的值相匹配,就写入值B;若不匹配,就写入这个不匹配的值而非B;我们先拿AtomicInteger来研究在没有锁的情况下是如何做到数据正确性的。private volatile int va...

2018-11-28 10:21:13 563

原创 Lock与synchronized 的区别

https://www.cnblogs.com/jiaqingshareing/p/7598593.html‘https://www.cnblogs.com/bky-xiaogui/p/7652948.html’相关技术知识:wait()与sleep()的区别:wait和notify方法都是Object类的,sleep是Thread类的。sleep()方法其实就是让出cpu给其他线程,保...

2018-11-28 10:19:22 1370

原创 String、StringBuffer和StringBuilder的区别

1.可变与不可变  String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。private final char value[];StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种...

2018-11-27 10:09:23 98

原创 C++中的虚函数和析构函数的定义和作用

虚函数定义:C++中的虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。虚函数的使用方法是:在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。在类外定义虚函数时,不必再加virtual。在派生类中重新定义此函数,要求函数名、函数类型、函数参数个数和类型全部与基类...

2018-11-27 09:32:16 643

原创 C语言中全局变量和局部变量的区别

1.局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。2.a.全局变量是没有定义存储类型的外部变量,其作用域是从定义点到程序结束.省略了存储类型符,系统将默认为是自动型.b.静态全局变量是定义存储类型为静态型的外部变量,其作用域是从定义点到程序结束,所不同的是存储类型决定了存储地点,静态型变量是存放在内存的数据区中 的,它们在程...

2018-11-27 09:19:10 17833

原创 C语言中的Struct和C++中的Struct的区别

C语言中:Struct是用户自定义数据类型(UDT)(User Defined Type),是一种数据结构的实现体。C++语言中:Struct是抽象数据类型(ADT)(Abstract Data Type),支持成员函数的定义,是一种对象的实现体。C++中的struct其实几乎等同于类,只是class的成员变量默认是private,struct的成员变量 默认是public。在标准C++...

2018-11-27 09:10:34 1352

原创 深入理解java虚拟机之类加载机制

回顾我们《深入理解java虚拟机之初识JVM》这篇文章https://blog.csdn.net/mulinsen77/article/details/84391796,我们了解了类加载的过程,我们知道了类加载的生命周期有以下七个阶段:加载、验证、准备、解析、初始化、使用、卸载。其中解析和初始化交换顺序可以实现动态绑定。类初始化的时机:(类初始化的时候加载验证准备也会随着发生)JVM规范中严...

2018-11-26 21:01:06 362

原创 深入理解java虚拟机之 内存分配和回收策略

上一篇我们学习了GC的 收集算法和七种收集器,今天我们来学习一下内存的分配和回收策略。1.优先在Eden中分配一般情况下 ,大多数的新对象都是在新生代中实例化的,当Eden区的空间不够的时候,发起Minor GC;2.大对象直接进入老年代-XX:PretenureSize Threshold参数,大于此值的对象直接在老年代分配,避免在Eden区和Survivor区之间的大量的内存复制。3...

2018-11-26 10:51:09 227

原创 深入理解java虚拟机之垃圾回收算法和垃圾回收器

Garbage Collection上一篇文章我们介绍了jvm中的内存模型,其中PCR、虚拟机栈(VM stack)、本地方法栈(Native Stack)是线程独立的,线程结束之后就会自动消失。java堆和方法区是线程共享的,所以需要在一个方法结束之后进行垃圾回收。首先,我们来学习一下如何判断对象已死:1.引用计数算法(Reference Counting) :给类的对象添加一个计数器,出...

2018-11-23 17:32:32 254

原创 深入了解java虚拟机之 初识JVM

java技术由java编程语言、java类文件、java虚拟机、java API四个部分组成。JVM的三种解释:对JVM规范的的比较抽象的说明;  对JVM的具体实现;  在程序运行期间所生成的一个JVM实例。JVM的作用:Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平...

2018-11-23 14:53:54 178

原创 深入理解java虚拟机之内存模型

完整:https://blog.csdn.net/FanceFu/article/details/79356803简单:https://www.cnblogs.com/jilodream/p/6147791.htmlRTSJ java的实时运行规范 Real Time Specification for Javajava虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、堆、本地方法...

2018-11-23 10:16:43 9569

原创 线程范围内共享数据的例子

设计四个线程,其中两个线程每次给增加j增加一,另外两个给j减一。package martina.TraditionalThread;/** * 设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。 * 方式一:调用两个继承了Runnable类的类进行数据的加减操作 */public class ThreadScopeDataTest{ public static...

2018-11-22 23:22:09 162

原创 线程并发库的应用之线程池

在线程池的编程模式下,任务是提交给整个线程池,而不是直接交给某个线程,线程池在拿到任务之后,在内部找到空闲的线程去执行该任务。其实就是对线程的封装。任务是提交给线程池的,一个线程只能同时执行一个任务,但是可以同时向一个线程池提交多个任务。固定线程池:三个线程的固定线程池 public static void main(String[] args){ //新建含有三个线程的固...

2018-11-22 21:51:38 657

原创 ThreadLocal实现线程范围内数据共享

线程范围内数据共享的作用和目的见我的上一篇文章。ThreadLocal其实就是相当于Map,可以set和get就好了。package martina.TraditionalThread;import java.util.Random;public class ThreadLocalTest { static ThreadLocal<Integer> threadLo...

2018-11-22 20:54:59 2059

原创 线程范围内共享数据的作用和目的

线程范围内的共享变量其实就是用于转账入账等操作时,我们对同一个数据进行操作,但是有不同的执行者,那么我们就需要通过Map将不同的线程对数据的操作放在一起。例如A和B两个人同时对账户里的钱data进行操作,一个设置data一个是取出data(存钱、取钱),我们希望A和B他们的操作时独立的。线程范围内共享数据的作用和目的:线程范围内的共享变量就是在一个相同的线程内部,不同的模块可以对相同的数据进...

2018-11-22 17:07:58 392 1

原创 线程同步互斥通信问题之互斥

线程同步互斥通信问题之互斥使用wait()和notify()实现线程之间的通信。要用到同步锁、同一数据或者同一算法的方法都尽量放在同一个类中:程序的健壮性、高类聚实现代码如下:package martina.TraditionalThread;public class TraditionalThreadCommunication { final static Business...

2018-11-22 15:44:55 231

原创 线程之间同步互斥的通信问题之 同步

线程之间同步互斥的通信问题:同步内部类不可以在其外部类的main方法中直接new,因为内部类的实例化必须在外部类的实例化之后。当出现两个线程同步进行的时候,会出现小概率事件,那么我们就可以使用Synchronized修饰要被同步运行的方法。package martina.TraditionalThread;public class TraditionalThreadSynchron...

2018-11-22 14:44:31 587

原创 java创建多线程两种方式&&定时器

多线程:创建线程的两种方式:Thread thread=new Thread(); thread.run();//直接创建一个Thread对象,在run方法中实现操作;Thread thread=new Thread(){@Overridepublic void run(){Thread.currentThread.getName();//该方法获取到当前线程}}//创建一个Thread...

2018-11-22 14:44:04 643

原创 设计模式之桥接模式Bridge、State模式、Adapter模式、Mediator模式、Facade模式简介

继承关系要慎用,因为继承意味着高耦合,子类与父类之间的耦合度极高,而我们设计的时候强调的是高内聚,低耦合。桥接模式(Bridge)是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。B...

2018-11-21 17:28:00 479

原创 设计模式之factory 工厂系列

静态工厂方法:只要是在类内部的方法中封装了产生自己对象的逻辑,就可以称之为工厂相关的方法。public class Car { private static Car car=new Car(); private Car(){ } //静态工厂方法:Car对象的实例化由Car类内部的方法控制,想要实例化对象必须调用getInstance方法 public s...

2018-11-21 15:33:25 531

原创 设计模式之 Strategy 策略模式

策略模式简述:在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据应用场景的不同选择不同的算法或者策略来完成该功能。把一个类(A)中经常改变或者将来可能改变的部分提取出来,作为一个接口(B),然后在类(A)中包含这个接口(B),这样类(A)的实例在运行时就可以随意调用实现了这个接口的类©的行为。比如定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得算法可...

2018-11-20 17:22:51 171

原创 Think in OO

在理解面向对象之前,首先我们要了解类和对象之间的关系。了解什么是类,什么是方法,什么是属性。接下来我们通过介绍一些OO的特性来了解面向对象的过程。1.隐藏和封装(降低耦合度)就是一个类的操作尽量交给他自己去做,如果有两个类之间有关系,类A也尽量调用类B中已经封装好的函数,而不是直接在类A中实现关系操作。举例:老张开车去东北。类:Person Car Address那么在Person中...

2018-11-20 14:14:45 145

原创 设计模式之责任链模式

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。用大白话来说,责任链模式就像是javaWeb中的通过一个个的拦截器或...

2018-11-19 01:17:14 103

原创 使用git上传本地项目到

将本仓库的地址拷贝,使用git clone url,clone之后就会出现以本仓库为名的文件夹,里面只有一个文件然后我们将自己的项目拷贝至文件夹下,然后执行下面操作。9.接下来依次输入以下代码即可完成其他剩余操作:git add . (注:此操作是把本文件夹下面的文件都添加进来)git commit -m “提交信息”git push -u origin mast...

2018-11-19 01:15:37 121

原创 IDEA中创建一个Web项目

之前从Eclipse转到IDEA是为了学习Springboot,所以一直没有用IDEA创建简单的Web项目或者简单的Java项目。现将使用IDEA创建Web项目的过程记录如下:1.打开IDEA,选择new project。2.选择创建module之后,就可以创建web下的classes文件夹和lib文件夹。打开project Structure的快捷键:alt+shift+ct...

2018-11-18 23:29:58 297

原创 EJB RPC 同步异步调用

极限编程:先测试 再编程。EJB(Enterprise JavaBean):sun下的JavaEE服务器端组件模型,设计目标和核心就是部署分布式应用程序。商务软件的核心部分是它的业务逻辑。业务逻辑抽象了整个商务过程的流程,并使用计算机语言将他们实现。J2EE 对于这个问题的处理方法是将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件...

2018-11-18 20:05:15 368

原创 负载均衡

负载均衡需要多台机器来进行性能的水平扩展以及避免单点故障。但是要如何将不同的用户的流量分发到不同的服务器上面就用到了负载均衡。又分为四层负载均衡和七层负载均衡。四层负载均衡工作在OSI模型的传输层,主要工作是转发,它在接收到客户端的流量以后通过修改数据包的地址信息将流量转发到应用服务器。 七层负载均衡工作在OSI模型的应用层,因为它需要解析应用层流量,所以七层负载均衡在接到客户端的流量以后,...

2018-11-18 19:29:56 282

原创 GUNS后台管理系统框架

用户、角色管理、部门管理 菜单管理 字典管理业务日志和登录日志 监控管理 通知管理 代码生成(重点)guns-parent:Maven的父工程guns-admin 基础业务工程guns-core 核心包guns-rest REST支撑guns-generator 代码生成需要补充学习的:REST 前后端分离字典(数据库)shiroswagger验证beetl模板myb...

2018-11-07 15:38:06 3222 1

原创 IDEA中修改默认的全局配置(例:修改Maven的本地仓库位置)

一次偶然发现原来自己改用IDEA之后Maven的依赖jar包依然是下载在默认的c盘的.m2的文件夹下了,查询资料之后修改了项目的File-Settings,搜索maven,将maven的版本修改之后,并将Settings file的路径修改。如下图。但是我发现,这样只是修改了本项目的maven依赖的本地仓库,新建项目的时候依然使用的是默认的maven版本和默认的本地仓库。解决办法如下:修改...

2018-11-07 09:58:58 40614 7

空空如也

空空如也

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

TA关注的人

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