自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

nrsc

Java进阶之路

  • 博客(263)
  • 资源 (1)
  • 收藏
  • 关注

原创 详解价内税&价外税

(1)本文将对价内税、价外税、含税价、不含税格等概念进行介绍(2)通过三个例题让你彻底明白计算价内税、价外税、商家可得金额、消费者应付金额的具体逻辑(3)对一些常用的税率公式进行了较为详细的推导和总结。

2023-01-03 23:30:21 1637 1

原创 基于springboot的国际化解决方案

本文对应源码地址:https://github.com/nieandsun/NRSC-STUDY/tree/master/i18n-study1 引子 1.1 国际化简单概述作为一个服务端开发人员,这里我想先站在自己的角度对国际化(internationalization,因在i和n之间共有18个字母,所以国际化也称为i18n)所要做的事做一个简单的概述:国际化在实际项目中所要承担的职责是按照客户指定的语言让服务端返回相应语言的内容。1.2 spring/springboot工程中国

2022-09-12 13:07:37 2185

原创 lambda表达式对List集合进行排序的两种姿势---改变/不改变原List集合

这里写自定义目录标题1. 改变原list集合2. 不改变原list集合1. 改变原list集合codeclass NrscDemoApplicationTests { @Data @AllArgsConstructor @NoArgsConstructor static class Human { private String name; private int age; } @Test void chan

2021-06-16 11:14:30 995

原创 【dubbo源码解析】--- dubbo的过滤器链底层原理探析

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 dubbo的过滤器链集成进RPC链条的底层原理2 dubbo过滤器链封装为Invoker的好处1 dubbo的过滤器链集成进RPC链条的底层原理Filter(过滤器) 在很多框架中都有使用过这个概念, 基本上的作用都是类似的, 在请求处理前或者处理后做一些通用的逻辑, 而且 Filter 可以有多个, 支持层层嵌套。Dubbo 的 Filter 实现入口是在ProtocolFilt.

2020-07-21 00:36:24 816 1

原创 【dubbo源码解析】 --- dubbo集群容错(cluster)、负载均衡(loadbalance)底层原理探析 + 扩展自己的集群容错、负载均衡组件

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 集群容错和负载均衡的概念2 dubbo集群容错 + 负载均衡底层原理3 简单测试4 自己扩展一个dubbo集群容错组件和负载均衡组件4.1 扩展一个集群容错组件(Cluster)4.2 扩展一个loadbalance组件4.3 不要忘了在MATE-INF/dubbo文件夹下指定这些SPI扩展组件4.3 测试1 集群容错和负载均衡的概念摘自dubbo官方博客:http://dubbo.

2020-07-20 01:20:18 1213

原创 【dubbo源码解析】--- dubbo中Invoker嵌套调用底层原理

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 dubbo中Invoker的重要性2 dubbo RPC链条中代理对象的底层逻辑2.1 以之前的文章为基础实现一个简单的dubbo服务端+消费端2.2 代理对象的底层逻辑2.3 跳过代理对象利用直接构造的RpcInvocation对象拉通整个RPC链条3 dubbo中Invoker嵌套调用底层原理4 dubbo的RPC调用简图最终效果1 dubbo中Invoker的重要性上篇文章《【d.

2020-07-19 20:57:33 1217 1

原创 【dubbo源码解析】--- dubbo的服务注册与发现机制底层原理探析

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 dubbo的RPC远程调用整体过程简单回顾1 dubbo的RPC远程调用整体过程简单回顾上篇文章《【dubbo源码解析】— dubbo的服务暴露+服务消费(RPC调用)底层原理深入探析》非常详细的介绍了dubbo的RPC远程调用过程,这里做一个简单的回顾。【首先】 需要明确的是,在dubbo的RPC远程调用过程中,最核心的动作是如下两个:(1)protocol. export(.

2020-07-19 12:35:15 2275

原创 【dubbo源码解析】--- dubbo的服务暴露+服务消费(RPC调用)底层原理深入探析

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 Protocol+Invoker简介1 Protocol+Invoker简介想要在一个JVM里调用另一个JVM里的的方法,或许你会想到如下的姿势: HttpClient RestTemplate WebService ServerSocket/Socket RMI — 可以参看我的上篇文章《【dubbo源码解析~番外篇】— JDK和Spring的RMI使用姿势简介》但是.

2020-07-15 02:03:20 1261

原创 【dubbo源码解析~番外篇】--- JDK和Spring的RMI使用姿势简介

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 RMI简介2 JDK原生的RMI使用姿势1 RMI简介在不考虑dubbo的情况下,一个JVM里如何调用另一个JVM的方法? 我能想到 + 用到的姿势有: HttpClient RestTemplate WebService FeignClient ServerSocket/Socket最近又学到了一种姿势RMI — Remote Method Invocation(远.

2020-07-09 19:22:23 562

原创 【dubbo源码解析】 --- dubbo spi 机制之@Activate简介

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 @Activate标签的应用场景2 @Activate标签 及其使用简介2.1 简单看一下@Activate标签的源码2.2 @Activate标签的使用姿势2.2.1 定义标有@Activate注解的实现类2.2.2 在META-INFO/dubbo文件夹下建立配置文件2.2.3 测试1 @Activate标签的应用场景除了上篇文章《【dubbo源码解析】 — dubbo spi .

2020-07-04 17:39:34 1399

原创 【dubbo源码解析】 --- dubbo spi 机制(@SPI、@Adaptive)详解

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 @SPI 标签 及其使用简介上篇文章《【SPI】 — java spi 机制简介》中, 可以看到,java spi 机制非常简单, 就是读取指定的配置文件, 将所有的类都加载到程序中。 而这种机制, 存在很多缺陷, 比如:所有实现类无论是否使用, 直接被加载, 可能存在浪费不能够灵活控制什么时候什么时机, 匹配什么实现, 功能太弱Dubbo 基于自己的需要,对SPI 机制进.

2020-07-03 21:00:06 1357 2

原创 【dubbo源码解析】--- 通过javassist/JavassistCompiler动态生成一个实例对象

本文对应源码地址:https://github.com/nieandsun/dubbo-study1 问题的提出相信对于每一个java程序员来说,早已经习惯了写一个java文件 —> 编译成class文件 —> 加载到JVM生成一个实例对象的开发流程。但是有没有想过其实没有Java文件,也没有编译好的class文件,我们照样可以向JVM中添加一个类实例呢? —》 javassist就可以完成这种骚操作。而且读过dubbo源码的人肯定都知道,在dubbo框架里很多地方用到了这种姿势!.

2020-07-02 23:19:12 1018

原创 【SPI】 --- java spi 机制简介

本文对应源码地址:https://github.com/nieandsun/dubbo-study文章目录1 spi需要解决的问题剖析2 java spi使用简介2.1 使用java spi需要遵循的约定2.2 示例1 spi需要解决的问题剖析首选看如下代码:@Testpublic void demo1() { JdbcService jdbcService = new JdbcServiceAImpl(); int i = jdbcService.insert("jame.

2020-06-26 18:03:52 596

原创 【ZooKeeper】 --- ZK数据模型、节点类型、节点属性、watch机制

文章目录1 、ZK数据模型2 、ZK节点类型3 、ZK节点属性1 、ZK数据模型ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或ZNode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”。需要注意的是 创建znode时,每个znode都必须指定值,如果没有值,节点是不能创建成功的。在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据 ; 且通过客户端可对znode进行增删改查的操作,还可以

2020-06-23 10:07:32 1941

原创 【实用小技巧】--- Sublime + 正则表达式快速构建domain类

文章目录1 面临的问题2 我的解决方式3 简单介绍一下2中正则表达式的含义1 面临的问题今天下午与另外一个部门对接,他们的一张表总共有42个字段,而且我们之间的交互使用的是webservice, 要求我必须把类似于下面的数据:立项单编号 ZLXBH projectNum转换成如下的java属性:@ApiModelProperty("立项单编号") @XmlItem(name = "ZLXBH", type = XmlElementType.ELEMENT)private Strin

2020-06-17 21:14:09 1300 1

原创 【springboot】--- springboot的starter原理探究 + 如何自定义自己的starter

本文对应的源码: https://github.com/nieandsun/NRSC-STUDY文章目录1 写作背景2 为什么会有starter机制2.1 springboot项目的默认扫描机制2.2 starter机制的必然性3 springboot的starter机制前置知识介绍3.1 通过@Import注解 + 实现ImportSelector 接口的方式向IOC容器里注入Bean3.2 springboot对`@Import注解 + 实现ImportSelector接口方式向IOC容器.

2020-06-14 20:00:25 4531 4

原创 【redis知识点整理】 --- linux中Redis客户端 + springboot项目中RedisTemplate如何调用lua脚本

本文代码对应的github地址:https://github.com/nieandsun/redis-study1 redis脚本我在《【redis知识点整理】 — redis事务简介》那篇文章里翻译过Redis官网( https://redis.io/topics/transactions )的一段话,现再次贴在下面:这段话啥意思呢?(1) redis脚本可以做现在redis提供的事务的任何工作,且脚本方式更简单,更快(2)之所以又有脚本方式、又有本文介绍的这些方式,是因为本文介绍的.

2020-05-31 20:29:37 1731

原创 【redis知识点整理】 --- RedisTemplate使用pipeline进行批量set需要注意的坑

本文代码对应的github地址:https://github.com/nieandsun/redis-study文章目录1 简单介绍一下什么是pipeline --- 以jedis为例2 RedisTemplate使用pipeline批量set需要注意的坑1 简单介绍一下什么是pipeline — 以jedis为例以批量根据key删除数据为例,如若单纯的使用del命令进行删除,那java代码可能会这样写:public static void delNoStus(String... keys.

2020-05-31 12:04:57 7941 8

原创 【redis知识点整理】 --- RESP协议 + 手写一个简单的redis客户端

RESP协议官网:https://redis.io/topics/protocolRESP协议中文官网:http://www.redis.cn/topics/protocol.html文章目录1 RESP协议简介2 自己手写一个简单的redis客户端1 RESP协议简介RESP( REdis Serialization Protocol) 是Redis客户端与Redis服务器间进行通讯的协议。其主要特点如下:容易实现解析快人类可读RESP 底层采用的是 TCP 的连接方式, 通过 .

2020-05-31 00:00:50 616

原创 【redis知识点整理】 --- redis实现分布式锁需要解决的问题

本文代码对应的github地址:https://github.com/nieandsun/redis-study文章目录1 超卖现象简单介绍1 超卖现象简单介绍有如下代码:@RestControllerpublic class RedisLockController { @Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/deduct_stock") public.

2020-05-30 22:24:37 1196 1

原创 【redis知识点整理】 --- redis事务简介

文章目录

2020-05-29 00:09:43 432

原创 【redis知识点整理】 --- 从guava源码的角度简单聊聊布隆过滤器

本文代码对应的github地址:https://github.com/nieandsun/redis-study前段时间项目里加上了布隆过滤器,本文简单从guava源码的角度做一些分析 —》 其实主要是为自己答疑解惑!!!文章目录1 布隆过滤器在互联网环境的使用场景简介2 布隆过滤器的原理3 我对 布隆过滤器 困惑 + 思考4 布隆过滤器在guava中具体是个啥4.1 通过与HashMap对比,简单理解一下guava中的布隆过滤器到底是什么4.2 guava中布隆过滤器API简介4.2.1 初始.

2020-05-27 02:09:11 1398 6

原创 【redis知识点整理】 --- springboot2.X使用lettuce连接池集成redis

不出意外的话,很多公司操作redis应该还是使用的jedis。当然应该也有公司比较能耐,直接把操作redis的所有方法进一步封装成API或Utils类,然后打成jar包,做成服务供多个部门使用 —》 然后开发者就不必关心真正与redis交互的细节了。— 其实我们公司就是这种姿势!!!不知道其他公司到底是怎么个套路,我觉得这种方式对公司挺好,但是对于我们开发者自身来说,可能就缺少了直面问题 + 解决问题的机会。其实说实话,我们组也在做一些基础性的服务,从这个角度来讲,貌似每个部门(或许更应该说是每.

2020-05-26 21:43:27 1450

原创 【redis知识点整理】 --- Redis的持久化

redis 支持 RDB 和 AOF 两种持久化机制, 持久化可以避免因进程退出而造成数据丢失。文章目录1 RDB持久化 --- redis默认开启的持久化方式1.1 RDB持久化机制 --- 手动触发1.2 RDB持久化机制 --- 自动触发1.3 bgsave运行流程 --- RDB主流触发方式1.4 RDB恢复方式 + 持久化机制优缺点2 AOF持久化 --- redis默认没开启的持久化方式(but 重要)2.1 AOF 持久化流程2.2 redis 的 AOF 配置详解(★★★)2..

2020-05-25 00:27:58 1105

原创 【redis知识点整理】---centos7下redis的安装 、启动、连接和关闭

最近遇到一个线上bug,关系到了fastjson、dubbo、 redis 和 泛型,之所以这样说,是因为排查问题 到 解决问题的思路大致如此 —> 我觉得我之后应该会抽出时间写一篇博客,聊聊这个事 —> 但是最近实在太忙了,很多想整理的东西,现在都没时间进行整理了。。。最近打算整理一下缓存相关的东西 —》 本篇从最简单的redis单机版安装开始!!!文章目录1 redis单机版编译 + 安装2 redis的启动2.1 方式1--- 前台启动(不推荐使用)2.2 方式2--- 后.

2020-05-22 01:36:05 563

原创 【消息中间件】--- RocketMQ消费者简介(集群、广播消费,推模式,拉模式)

本文对应源码地址:https://github.com/nieandsun/rocketmq-studyrocketmq官网:https://rocketmq.apache.org/docs/quick-start/rocketmq github托管地址(这里直接给出的是中文docs地址):https://github.com/apache/rocketmq/tree/master/docs/cn文章目录11...

2020-05-18 02:07:42 3344

原创 【消息中间件】--- RocketMQ核心概念介绍 + 生产者简介 + 消息存储简介

本文对应源码地址:https://github.com/nieandsun/rocketmq-studyrocketmq官网:https://rocketmq.apache.org/docs/quick-start/rocketmq github托管地址(这里直接给出的是中文docs地址):https://github.com/apache/rocketmq/tree/master/docs/cn文章目录1 RocketMQ核心概念介绍1.1 RocketMQ架构相关的概念1.1.1 Produc.

2020-05-17 19:41:02 1261

原创 【并发编程】--- 线程池七大参数+四种拒绝策略 + 如何合理配置线程数等简介

源码地址:https://github.com/nieandsun/concurrent-study.git文章目录1 线程池七大参数2 RejectedExecutionHandler--- 四种拒绝策略(官方提供)3 threadFactory --- 线程工厂相关的注意事项4 如何自己new一个线程池 --- 简单结合了一下我们的项目5 实际工作中不允许使用Executors创建线程池的原因6 如何合理配置最大线程数1 线程池七大参数其实线程池的七大参数,我算一直都是比较熟悉的,因为我.

2020-05-13 22:14:54 1894

原创 【并发编程】--- 阻塞队列(BlockingQueue)简介

源码地址:https://github.com/nieandsun/concurrent-study.git文章目录1 阻塞队列的含义2 为什么用? 有什么好处?3 常用的BlockingQueue3.1 ArrayBlockingQueue简介3.2 LinkedBlockingQueue简介3.3 PriorityBlockingQueue简介3.4 DelayQueue简介3.5 SynchronousQueue简介3.6 LinkedTransferQueue简介3.7 LinkedBloc.

2020-05-12 01:00:19 705

原创 【并发编程】 --- 从五个维度对比synchronized关键字和Lock

文章目录维度1 --- 从原始构成上来说维度2 --- 从使用方法上来说维度3 --- 从等待是否可中断上来说维度4 --- 从加锁是否公平角度来说维度5 --- 从线程间的通信来说维度1 — 从原始构成上来说synchronized是关键字,属于JVM层面Lock是具体类(java.util.concurrent.Locks.Lock)是api层面的锁维度2 — 从使用方法上来说synchronized不需要用户手动去释放锁,当synchronized代码执行完后系统会自动让线程释放对

2020-05-10 20:11:40 430 2

原创 【并发编程】 --- Lock/Condition完成生产者消费者模式+ABCABC顺序打印问题

源码地址:https://github.com/nieandsun/concurrent-study.git文章目录1 生产者消费者问题2 ABCABC。。。三个线程顺序打印问题2.1 基本不费脑子的实现方式 --- 且比较容易感受到定点通知的含义2.2 比较灵活的方式1 生产者消费者问题使用一个Condition极其类似于wait、notifyAll的使用方法题目 + 题目分析可参考我之前写的一篇文章《【并发编程】 — 线程间的通信wait、notify、notifyAll》。这里直接.

2020-05-10 19:32:04 651

原创 【并发编程&JVM】--- 强软弱虚四种引用 + ThreadLocal内存泄漏原因分析

文章目录【1】强软弱虚四种引用【1.1】强引用【1.2】软引用【1.3】弱引用【1.4】虚引用【2】ThreadLocal内存泄漏问题分析本篇文章整理自马士兵老师的公开课(哔哩哔哩)【1】强软弱虚四种引用【1.1】强引用平时new出来的对象,只要有引用在即使发生GC也回收不了【1.2】软引用【1.3】弱引用【1.4】虚引用【2】ThreadLocal内存泄漏问题分析...

2020-05-08 01:04:51 891

原创 【并发编程】 --- Reentrantlock源码解析5:再探不可中断性 + 线程unpark后诡异的Thread.interrupted()判断

文章目录1 想要读懂这篇文章必须要拥有的前置知识2 想些这篇文章的原因3 困扰我很久的Reentrantlock源代码1 --- 貌似无用的变量failed4 困扰我很久的Reentrantlock源代码2 --- unpark后为啥要来个Thread.interrupted();5 小记源码地址:https://github.com/nieandsun/concurrent-study.g...

2020-04-12 19:47:53 676 4

原创 【并发编程】 --- Reentrantlock源码解析4:公平锁加锁过程中 [判断当前线程是否要排队的具体细节] 超详细解析

文章目录1 简单回顾2 高并发环境下当前线程使用公平锁判断自己是否要排队的具体细节2.0 源码 + 宏观分析2.1 h != t2.1.1 h != t 不成立时(即h等于t时) ---> 不用排队的原因2.1.1.1 情况1 ---> h和t都等于null ---> 不用排队2.1.1.2 情况2 ---> h和t不等于null,但h=t的情况 ---> 不用排...

2020-04-11 22:44:52 751 2

原创 【并发编程】 --- Reentrantlock源码解析3:公平锁释放锁过程超详细解析

文章目录1 公平锁释放锁的过程1.1 从源码中看公平锁释放锁的过程1.2 以源码为基础总结出的公平锁释放锁的流程2 需要思考的问题2.1 问题1 --- 释放锁的过程中有可能导致尾节点的ws为-1么 ---> 不可能2.2 问题2 --- 公平锁加锁和解锁的过程还有值得探究的地方么? ---> 当然有!!!源码地址:https://github.com/nieandsun/conc...

2020-04-11 10:30:34 873 1

原创 【并发编程】 --- Reentrantlock源码解析2:公平锁加锁过程超详细解析

文章目录1 前情回顾 --- 同步方法交替执行时Reentrantlock公平锁的逻辑2源码地址:https://github.com/nieandsun/concurrent-study.git1 前情回顾 — 同步方法交替执行时Reentrantlock公平锁的逻辑前面一篇文章《【并发编程】 — Reentrantlock源码解析1:同步方法交替执行的处理逻辑》讲过无论是synch...

2020-04-10 00:48:41 670 5

原创 【实用小代码】 --- 循环中删除数组中指定元素的正确姿势

文章目录1 抽象出来的题目2 错误的示范2 正确的答案今天写一个前端逻辑的时候碰到了这种情况,并在前端小姐姐面前装了一把☺☺☺并且这个问题貌似我在实际开发中碰到的次数还是挺多的,所以记录一下,但是用的语言是java —》 重要的是思想!!!1 抽象出来的题目假设有如下数组,数组中的元素我们事先并不知道,现在要求在一个循环内将B和E删掉。2 错误的示范会出问题的code...

2020-04-07 19:48:37 618

原创 【并发编程】 --- synchronized锁的升级过程 + JDK1.6对synchronized关键字的其他优化简介

文章目录源码地址:https://github.com/nieandsun/concurrent-study.git

2020-04-06 14:38:42 914 1

原创 【并发编程】 --- 原来java对象的布局是可以被这样证明的!!!

文章目录源码地址:https://github.com/nieandsun/concurrent-study.git

2020-04-05 15:24:04 815 1

原创 【并发编程】 --- Reentrantlock源码解析1:同步方法交替执行的处理逻辑

文章目录1 Reentrantlock前置知识1.1 理清代码同步的本质1.2 Reentrantlock的核心三板斧1.2.1 Compare And Swap(CAS) --- 保证同一时刻只有一个线程可以抢到锁1.2.2 park & unpark --- 让竞争不到锁的线程立刻挂起和从挂起中唤醒1.2.3 自旋 --- 确保线程尽量不进行park1.3 AQS --- 保证被挂...

2020-04-04 23:40:51 1892 6

免费上网软件(教育机构)

此软件可在教育机构,比如大学,研究生院免费获取IPV6地址,从而实现免费上网

2014-08-05

空空如也

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

TA关注的人

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