
it java
文章平均质量分 81
qq_43171869
小刀爱编程,爱学习,分享一些知识给大家
展开
-
基于Spring的RPC通讯模型给大家简单分析一下
一、概念和原理RPC(remote procedure call),远程过程调用,是客户端应用和服务端之间的会话。在客户端,它所需要的一些功能并不在该应用的实现范围之内,所以应用要向提供这些功能的其他系统寻求帮助。而远程应用通过远程服务暴露这些功能。RPC 是同步操作,会阻塞调用代码的执行,直到被调用的过程执行完毕。Spring支持多种不同的RPC模型,包括RMI、Caucho的Hessian...转载 2018-09-18 16:16:04 · 205 阅读 · 0 评论 -
来一次彻底解决Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。其实,对...原创 2018-10-24 19:35:20 · 1746 阅读 · 1 评论 -
深入浅出JVM内存模型与JVM参数详细配置
JVM内存结构由上图可以清楚的看到 JVM的内存空间分为3大部分:堆内存方法区栈内存其中 栈内存 可以再细分为 java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代, 新生代中还可以再次划分为Eden区、From Survivor区和To Survivor区。其中一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及...原创 2018-11-01 19:56:23 · 148 阅读 · 0 评论 -
Java 多线程— 线程的生命周期及方法
这篇博客介绍线程的生命周期。线程是一个动态执行的过程,它也有从创建到死亡的过程。线程的几种状态在 Thread 类中,有一个枚举内部类:上面的信息以图片表示如下:第一张图:第二张图:把等待、计时等待、阻塞看成阻塞一个状态了1、新建状态(new):使用 new 创建一个线程,仅仅只是在堆中分配了内存空间新建状态下,线程还没有调用 start()方法启动,只...原创 2018-11-03 19:23:33 · 168 阅读 · 0 评论 -
如何用 redis 实现分布式幂等服务中间件
背景在编程领域,幂等性是指对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。在分布式系统里,服务通常通过 RPC 或 HTTP 或其他形式对外提供。不管怎样,client 调用 server 服务都是将调用数据按特定协议封装好,然后通过网络发送给 server,server 将需要返回的数据同样按特定协议封装然后通过网络发送给 client。由于网络环境的复杂...原创 2018-11-06 16:49:05 · 404 阅读 · 0 评论 -
Java核心-深入理解BIO、NIO、AIO
导读:本文你将获取到:同/异步 + 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO 最底层最核心的操作技巧。BIO、NIO、AIO 的区别是什么?同/异步、阻/非阻塞的区别是什么?文件读写最优雅的实现方式是什么?NIO 如何实现多路复用功能?带着以上这几个问题,让我们一起进入IO的世界吧。在开始之前...原创 2018-11-09 20:49:21 · 355 阅读 · 0 评论 -
Java并发:volatile的实现原理
synchronized 是一个重量级的锁, volatile 通常被比喻成轻量级的 synchronizedvolatile 是一个变量修饰符,只能用来修饰变量。volatile写:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。volatile读:当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读...原创 2018-11-02 19:40:02 · 157 阅读 · 0 评论 -
老司机带你深入浅出Java反射
反射,它就像是一种魔法,引入运行时自省能力,赋予了 Java 语言令人意外的活力,通过运行时操作元数据或对象,Java 可以灵活地操作运行时才能确定的信息这里笔者就深入浅出总结下Java反射,若有不正确地方,感谢评论区指正交流~ 建议打开idea,写一个Java反射的demo,跟着调试,效果会更好 :)反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状...原创 2018-11-07 19:24:25 · 208 阅读 · 0 评论 -
Java并发-从同步容器到并发容器
引言容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线程安全的,即在多线程的环境下,都需要其他额外的手段来保证数据的正确性,最简单的就是通过synchronized关键字将所有使用到非线程安全的容器代码全部同步执行。这种方式虽然可以达到线程安全的目的,但存在几个...原创 2018-11-05 14:41:17 · 150 阅读 · 0 评论 -
Redis 分布式锁进化史
按:系统架构经过多年演进,现在越来越多的系统采用微服务架构,而说到微服务架构必然牵涉到分布式,以前单体应用加锁是很简单的,但现在分布式系统下加锁就比较难了,我之前曾简单写过一篇文章,关于分布式锁的实现,但有一次发现实现的分布式锁是有问题的,因为出问题的概率很低,所以当时也没在意,前几天和朋友聊这个问题,想起来看过一篇文章,写的不错,今天特转载过来,希望能让更多的人看到,同时也加深一下记忆。原文链接...原创 2018-11-08 20:42:20 · 142 阅读 · 0 评论 -
详解netty原理分析
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于N...原创 2018-11-14 16:13:51 · 1008 阅读 · 0 评论 -
Java中线程池,你真的了解会用吗
在《 深入源码分析Java线程池的实现原理 》这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理。在文中有这样一段描述:可以通过Executors静态工厂构建线程池,但一般不建议这样使用。关于这个问题,在那篇文章中并没有深入的展开。作者之所以这么说,是因为这种创建线程池的方式有很大的隐患,稍有不慎就有可能导致线上故障,如:一次Java线程池误用引发的血案和总结( zhuan...转载 2018-10-31 15:52:43 · 267 阅读 · 0 评论 -
详解SpringBoot的配置外部化
在前面的课程中,我们给大家分享过SpringBoot精妙的启动配置,主要阐述的是spring的IoC容器在SpringBoot中的加载过程,并与传统项目中Spring的IoC容器加载过程进行了一个对比.我们在开发的过程中,除了IoC容器的配置之外,当然还有许多其他的配置,诸如数据库的链接信息,端口,以及项目的内部使用的一些个性化信息等.那SpringBoot是如何管理这些配置呢?我今天呢,就从以下...原创 2018-10-26 16:43:33 · 600 阅读 · 0 评论 -
JavaScript数据结构之 - 队列
前面我们学习了 栈的实现 ,队列和栈非常类似,但是使用了不同的原则,而非后进先出。队列是遵循FIFO(First In First Out,先进先出)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。在计算机科学中,一个最常见的例子就是 打印队列 。比如说我们要打印五份文档。我们会打开每个文档,然后点击打印按钮。每个文档都会被发送至打印队列。...转载 2018-10-29 14:21:03 · 321 阅读 · 0 评论 -
深入理解 JVM:让你轻松搞定这些问题所在
一:JVM体系概述1:JVM是运行在操作系统之上的,他与硬件没有直接的交互。深入理解 JVM:让你轻松搞定这些问题所在二:JVM内存结构Java虚拟机在运行时,会把内存空间分为若干个区域。Java虚拟机所管理的内存区域分为如下部分:方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。深入理解 JVM:让你轻松搞定这些问题所在1、类装载器ClassLoader负责加载class文件,cl...转载 2018-09-19 17:59:51 · 131 阅读 · 0 评论 -
JVM:带你查看常见的问题,以及分析处方法
一.前言各位开发和运维同学,在项目实施落地的过程中,尤其是使用EDAS、DRDS、MQ这些java中间件时,肯定会遇到不少JAVA程序运行和JVM的问题。我结合过去遇到的各种各样的问题和实际处理经验,总结了JAVA问题的处理方式,希望能帮助到大家。二.问题处理总体概括如下图所示:问题处理分为三大类:1.问题发生后的紧急处理原则2.问题归类和分析3.分析排查工具和命令通常来说,最后的...转载 2018-09-19 19:51:26 · 1875 阅读 · 0 评论 -
教你清楚了解JAVA动态代理
代理在生活中很常见,比如说婚介网站,其实就是找对象的代理;还有社保代理、人事代理;还有找黄牛抢票,其实也是一种代理;而这些代理,在JAVA中也是有对应实现的。1、为什么要动态代理动态代理的作用其实就是在不修改原代码的前提下,对已有的方法进行增强。关键点:不修改原来已有的代码(满足设计模式的要求)对已有方法进行增强2、举个栗子我们用一个很简单的例子来说明: Hello 类,有一个 in...原创 2018-09-25 14:44:52 · 146 阅读 · 0 评论 -
并发-Java并发编程基础
Java并发编程基础并发在计算机科学中,并发是指将一个程序,算法划分为若干个逻辑组成部分,这些部分可以以任何顺序进行执行,但与最终顺序执行的结果一致。并发可以在多核操作系统上显著的提高程序运行速度。并发与并行联系与区别这里参考ErLang之父的解释,ErLang之父谈到了如何向一个5岁小孩解释并发与并行。[](并发-Java并发编程基础直观来讲,并发是两个等待队列中的人同时去竞争一台...原创 2018-09-25 20:48:31 · 285 阅读 · 0 评论 -
大牛深入剖析 Java 7 中的 HashMap 和 ConcurrentHashMap
本文将深入剖析 Java7 中的 HashMap 和 ConcurrentHashMap 的源码,解析 HashMap 线程不安全的原理以及解决方案,最后以测试用例加以验证。1 Java7 HashMapHashMap 的数据结构:大牛深入剖析 Java 7 中的 HashMap 和 ConcurrentHashMap从上图中可以看出,HashMap 底层就是一个数组结构,数组中的每一项又...转载 2018-09-20 14:23:09 · 116 阅读 · 0 评论 -
「JAVA」:踩过无数次坑实现的哈夫曼压缩
话不多说,进入正题首先先来讲讲哈夫曼树哈夫曼树属于二叉树,即树的结点最多拥有2个孩子结点。若该二叉树带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树, 权值较大的结点离根较近。「JAVA」:踩过无数次坑实现的哈夫曼压缩哈夫曼树的构造假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、...转载 2018-09-20 20:09:58 · 289 阅读 · 0 评论 -
并发编程-java多线程总结大纲
先了解几个概念多线程:进程和线程是一对多的关系,一个进程(一个程序),由不同的线程来运行。有共享的空间也有独立的空间。并行: 同时进行,拿两个cpu来跑同样的程序同样的代码片段,那就并行了。并发:不同时进行,只有一个cpu,而多个线程都在争取这个cpu资源。便是并发。用TPS和QPS去衡量并发程度。TPS:Transactions Per Second(每秒传输的事物处理个数),简单说就是...原创 2018-09-26 15:20:18 · 235 阅读 · 0 评论 -
阿里P7实例讲解Java异常处理
一、在 Finally 中清理资源或使用 Try-With-Resource 语句在实际开发中会经常遇到在 try 中使用资源的情况,比如一个 InputStream ,在使用后你需要关闭它。在这种情况下,一个常见的错误是在 try 的尾部关闭了资源。public void doNotCloseResourceInTry() {FileInputStream inputStream = nu...转载 2018-09-27 15:12:48 · 394 阅读 · 0 评论 -
Dubbo深入分析之Transport层
Transporter类分析dubbo为通讯框架提供了统一的bind和connet接口,方便进行管理和扩展,封装在接口类:Transporter中:@SPI("netty")public interface Transporter { @Adaptive({Constants.SERVER_KEY, Constants.TRANSPORTER_KEY}) Serve...原创 2018-10-25 15:31:50 · 528 阅读 · 0 评论 -
简单易懂带你了解Java Agent
Java Agent这个技术,对于大多数同学来说都比较陌生,但是多多少少又接触过,实际上,我们平时用的很多工具,都是基于Java Agent实现的,例如常见的热部署JRebel,各种线上诊断工具(btrace, greys),还有阿里最近开源的arthas。其实Java Agent一点都不神秘,也是一个Jar包,只是启动方式和普通Jar包有所不同,对于普通的Jar包,通过指定类的main函数进...原创 2018-10-28 19:16:49 · 9275 阅读 · 0 评论 -
Java并发编程之锁机制之(ReentrantLock)重入锁
ReentrantLock基本介绍ReentrantLock 是一种 可重入 的 互斥锁 ,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有时,调用 lock 的线程将成功获取该锁并返回。如果当前线程已经拥有该锁,此方法将立...原创 2018-11-23 20:45:50 · 155 阅读 · 0 评论