标签 ‘ JAVA

java服务器调试指南

java服务器调试指南

在实际开发中,总会遇到程序启动不起来或者运行结果不符合期望的情况,如果是在本地,直接debug就行了,几乎人人都会,但是如果到了远程,大多数情况下我们可以看日志,通过日志排查定位到问题,但是如果你的日志不多,或者日志中看不出问题,此时情况就比较难以处理了,而实际上我们仍然可以通过debug的形式来解决,只不过由原来的本地在ide中通过GUI来debug变为通过命令行来debug;

阅读全文

领域事件 disruptor 使用场景之实现Spring事件驱动模型 ApplicationEvent

前言

Disruptor 是一个开源的并发框架。由英国外汇交易公司LMAX开发的一个高性能队列,并且大大的简化了并发程序开发的难度,获得2011Duke’s程序框架创新奖。

阅读全文

Java 内存模型

前言

在并发编程中,当多个线程同时访问同一个共享的可变变量时,会产生不确定的结果,所以要编写线程安全的代码,其本质上是对这些可变的共享变量的访问操作进行管理。导致这种不确定结果的原因就是可见性有序性原子性问题,Java 为解决可见性和有序性问题引入了 Java 内存模型,使用互斥方案(其核心实现技术是)来解决原子性问题。这篇先来看看解决可见性、有序性问题的 Java 内存模型(JMM)。

阅读全文

Java 并发之 Fork/Join 框架

什么是 Fork/Join 框架

Fork/Join 框架是一种在 JDK 7 引入的线程池,用于并行执行把一个大任务拆成多个小任务并行执行,最终汇总每个小任务结果得到大任务结果的特殊任务。通过其命名也很容易看出框架主要分为 Fork 和 Join 两个阶段,第一阶段 Fork 是把一个大任务拆分为多个子任务并行的执行,第二阶段 Join 是合并这些子任务的所有执行结果,最后得到大任务的结果。

这里不难发现其执行主要流程:首先判断一个任务是否足够小,如果任务足够小,则直接计算,否则,就拆分成几个更小的小任务分别计算,这个过程可以反复的拆分成一系列小任务。Fork/Join 框架是一种基于 分治 的算法,通过拆分大任务成多个独立的小任务,然后并行执行这些小任务,最后合并小任务的结果得到大任务的最终结果,通过并行计算以提高效率。

阅读全文

看山聊并发:Java 中 Vector 和 SynchronizedList 的区别

Java 中 Vector 和 SynchronizedList 的区别

你好,我是看山。

本文还是折腾 Java 中的队列,上次比较了 Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList,当时感觉挺明白,后来想想又有些不理解的地方,所以今天在重新翻出来研究一下,我承认我钻了牛角尖了。

阅读全文

看山聊并发:认识 Java 中的队列:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList

认识 Java 中的队列:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList

你好,我是看山。

书接上文,上次聊了聊 在多线程中使用 ArrayList 会发生什么,这次我们说说平时常用的列表:Vector、ArrayList、CopyOnWriteArrayList、SynchronizedList。

阅读全文

看山聊并发:如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)

如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)

你好,我是看山。

前面写过一篇文章 《如果非要在多线程中使用 ArrayList 会发生什么?》,有读者反馈,Java 11 代码已经修复,还会出现 null 元素。

为了便于理解,当时只是通过代码执行顺序说明了异常原因。其实多线程中还会涉及 Java 内存模型,本文就从这方面说明一下。

阅读全文

看山聊并发:如果非要在多线程中使用ArrayList会发生什么?

如果非要在多线程中使用ArrayList会发生什么?

你好,我是看山。

我们都知道,Java中的ArrayList是非线程安全的,这个知识点太熟了,甚至面试的时候都很少问了。

但是我们真的清楚原理吗?或者知道多线程情况下使用ArrayList会发生什么?

前段时间,我们就踩坑了,而且直接踩了两个坑,今天就来扒一扒。

阅读全文

聊聊 Feign 的实现原理

What is Feign

Feign 是⼀个 HTTP 请求的轻量级客户端框架。通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文的方式直接调用。服务消费方拿到服务提供方的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。让我们更加便捷和优雅的去调⽤基于 HTTP 的 API,被⼴泛应⽤在 Spring Cloud 的解决⽅案中。开源项目地址:Feign,官方描述如下:

Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign’s first goal was reducing the complexity of binding Denominator uniformly to HTTP APIs regardless of ReSTfulness.

阅读全文

volatile 关键字需要知道的几点

本文作者 https://github.com/lich0079 转载请注明

可见性

多核执行多线程的情况下,每个core读取变量不是直接从内存读,而是从L1, L2 …cache读,所以你在一个core中的write不一定会被其他core马上观测到。

解决这个的办法就是volatile关键字,加上它修饰后,变量在一个core中做了修改,会导致其他core的缓存立即失效,这样就会从内存中读出最新的值,保证了可见性。

阅读全文

如何使用java实现Open Addressing

你好! 我们这里总共向您提供三种open addression的方法,分别为linear probing、quadratic probing和double hashing。

Linear Probing

Linear probing是计算机程序解决散列表冲突时所采取的一种策略。散列表这种数据结构用于保存键值对,并且能通过给出的键来查找表中对应的值。Linear probing这种策略是在1954年由Gene Amdahl, Elaine M. McGraw,和 Arthur Samuel 所发明,并且最早于1963年由Donald Knuth对其进行分析。

阅读全文

Spring Boot 如何快速集成 Redis 哨兵?

Redis Sentinel 介绍

Redis Sentinel:哨兵,放哨,看中文名字就知道它是一种 Redis 高可用解决方案,主要是针对 Redis 主从模式实现主从节点监控、故障自动切换。

没有 Redis Sentinel 架构之前,如果主节点挂了,需要运维人员手动进行主从切换,然后更新所有用到的 Redis IP 地址参数再重新启动系统,所有恢复操作都需要人为干预,如果半夜挂了,如果系统很多,如果某个操作搞错了,等等,这对运维人员来说简直就是恶梦。

有了 Redis Sentinel,主从节点故障都是自动化切换,应用程序参数什么也不用改,对于客户端来说都是透明无缝切换的,运维人员再也不用担惊受怕了。

阅读全文

为什么说Java程序员到了必须掌握 Spring Boot 的时候?

Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 Spring Boot 之时,我自己也在思考: Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot? 传统企业使用 Spring Boot 会给我们带来什么样变革?

带着这些问题,我们一起来了解下 Spring Boot 到底是什么?

阅读全文

为什么我们放弃了Vue?Vue和React深度比较

我使用Vue和React已经很长一段时间了,两个框架上实践代码量都在10万行以上。不得不说都是都很不错的,帮助开发者减少很多工作量,某种框架是现代化Vue和React在两者之间的选择并不像选择苹果或香蕉一样简单,两者在工程实践上的差异让我们逐渐放弃了Vue。此处以不一样的角度对彼此进行深度对比。

阅读全文

深度解析springcloud分布式微服务的实现

分布式系统

微服务就是原来臃肿的项目拆分为多个模块互不关联。如:按照子服务拆分、数据库、接口,依次往下就更加细粒度,当然运维也就越来越难受了。

分布式则是偏向与机器将诺大的系统划分为多个模块部署在不同服务器上。

微服务和分布式就是作用的“目标不一样”。

阅读全文

return top