- 博客(69)
- 资源 (9)
- 问答 (1)
- 收藏
- 关注
原创 从 AbstractPointcutAdvisor 开始: Spring AOP 之 Advisor、PointcutAdvisor 介绍
从 AbstractPointcutAdvisor 开始: Spring AOP 之 Advisor、PointcutAdvisor 介绍从AOP开始说起为了能够更好地将系统级别的代码抽离出来,去掉与对象的耦合,就产生了面向AOP(面向切面)。AOP全称 Aspect-Oriented Programming , 即面向切面编程。OOP属于一种横向扩展,AOP是一种纵向扩展。AOP依托于O...
2021-03-31 22:22:54 13374 1
原创 分布式服务 API 的幂等设计方案 & Spring Boot + Redis 拦截器实现实例
什么是幂等?简单讲,幂等性是指相同的参数调用同一个 API,执行一次或多次效果一样。在函数式编程里面,这叫“无副作用”,Pure Function。用业务的语言将,就是:对于同一笔业务操作...
2021-03-31 19:59:07 8530 1
原创 分布式服务 API 的幂等设计方案 & Spring Boot + Redis 拦截器实现实例
分布式服务 API 的幂等设计方案 & Spring Boot + Redis 拦截器实现实例什么是幂等?简单讲,幂等性是指相同的参数调用同一个 API,执行一次或多次效果一样。在函数式编程里面,这叫“无副作用”,Pure Function。用业务的语言将,就是:对于同一笔业务操作,不管调用多少次,得到的结果都是一样的。问题场景假如你有个服务提供一个接口,结果这个服务部署...
2021-03-31 19:46:17 8536
原创 Spring Boot 自定义注解支持EL表达式(基于 MethodBasedEvaluationContext 实现)
自定义注解自定义 DistributeExceptionHandler 注解,该注解接收一个参数 attachmentId 。该注解用在方法上,使用该注解作为切点,实现标注该注解的方法抛异常后的统一处理。@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface DistributeExc...
2021-03-31 17:42:40 12083
原创 【不读唐诗,不足以知盛世】盛唐诗坛的璀璨明星们
盛唐诗坛的璀璨明星们“歌者的歌、舞者的舞、剑客的剑、诗人的诗、英雄的壮志,都是这样子。只要是不死,就不能放弃。”但,谁又都知道——浮华万千,终不过大梦一场。这篇文章,将带领读者进入曾经的盛世大唐的璀璨文曲星们的烟火人间。宝剑赠英雄,红粉送佳人。那么,诗人心中最好的礼物是什么呢?当然是“赋诗一首”!诗人间的相遇照亮了彼此,而他们当时写下的诗篇,不仅记录了难忘的友情岁月...
2021-03-31 01:19:41 10798
原创 【不读唐诗,不足以知盛世】杜甫《饮中八仙歌》
《饮中八仙歌》唐代:杜甫知章骑马似乘船,眼花落井水底眠。汝阳三斗始朝天,道逢麴车口流涎,恨不移封向酒泉。左相日兴费万钱,饮如长鲸吸百川,衔杯乐圣称避贤。宗之潇洒美少年,举觞白眼望青天,皎如玉树临风前。苏晋长斋绣佛前,醉中往往爱逃禅。李白斗酒诗百篇,长安市上酒家眠,天子呼来不上船,自称臣是酒中仙。张旭三杯草圣传,脱帽露顶王公前,挥毫落纸如云烟。焦遂五斗方卓然,高谈雄辩惊四筵。译文...
2021-03-31 01:03:34 8528 1
原创 为什么成年人总是有抹不去的故乡情结?
心累的人,总是很佛系。贺知章平静地看待周围的一切,内心不再起半点波澜,却又对新生命给于热烈的赞美,就像缅怀年轻时的自己。对柳树如此,对李白也是如此。在外人看来,他是岁月好,可内心的酸甜苦辣,只有他自己清楚。公元744年,八十六岁的贺知章大病一场。他每天上班时恍恍惚惚,好像随时都会倒下,这位风烛残年的老人有一种预感,人生可能要到此为止了。罢了,罢了,归去吧。“游子归故乡”,贺知章想回家了。多少次午夜...
2021-03-30 00:46:16 8545
原创 解决方案架构师技巧-5种架构图
Solutions Architect Tips — The 5 Types of Architecture DiagramsThe flow, service, persona, inf...
2021-03-26 12:05:47 9718
原创 【图文详解】 epoll 原理:Redis,Netty,Nginx实现高性能IO的核心原理
输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。I/O 多路复用(m...
2021-03-26 12:05:47 9033
原创 Sublime Text 3 的 Markdown 实时预览全面总结
Sublime Text 3 简介http://www.sublimetext.com/Sublime Text 3 : A sophisticated text editor forcode, markup and proseDownload:http://www.sublimetext.com/3Sublime 是一款非常好用且流行的轻量级编辑器,除了代码高亮、语法提示等标配外,...
2021-03-26 01:51:42 10252
原创 浅析 Linux 文件 IO 读写
浅析 Linux 文件 IO 读写Linux的文件IO子系统是Linux中最复杂的一个子系统(没有之一)。读者可以参考以下这个图:https://www.thomas-krenn.com/de/wikiDE/images/2/2d/Linux-storage-stack-diagram_v4.0.pdfBlock Layer的运行调度模型数据从 Page Cache 同步到磁盘上...
2021-03-26 00:34:45 8815
原创 一切皆是映射:浅谈操作系统内核的缺页异常(Page Fault)
浅谈操作系统内核的缺页异常(Page Fault)缺页中断就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。在这个时候,被内存映射的文件实际上成了一个分页交换文件。页缺失(英语:Page fault,又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障等),指的是当软件试图访问已映射在虚拟地址空间中,但是并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的...
2021-03-25 23:53:21 10897 1
原创 Kafka配置文件详解
Kafka配置文件详解(1) producer.properties:生产端的配置文件#指定kafka节点列表,用于获取metadata,不必全部指定#需要kafka的服务器地址,来获取每一个topic的分片数等元数据信息。metadata.broker.list=kafka01:9092,kafka02:9092,kafka03:9092 #生产者生产的消息被发送到哪个block,需...
2021-03-25 23:43:13 10451
原创 Page Cache 与 Kafka 那些事儿
Kafka 整体架构Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。Kafka为什么速度快、吞吐量大?Kafka是将消息记录持久化到本地磁盘中的,一般人会认为磁盘读写性能差,可能会对Kafka性能如何保证提...
2021-03-25 23:42:50 9248 1
原创 编程为什么有趣?浅谈编程的快乐。
首先,这种快乐是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到快乐一样,成年人喜欢创建事物,特别是自己进行设计。我想这种快乐是上帝创造世界的折射,一种呈现在每片独特的、崭新的树叶和雪花上的喜悦。其次,这种快乐来自于开发对他人有用的东西。内心深处,我们期望我们的劳动成果能够被他人使用,并能对他们有所帮助。从这一角度而言,这同小孩用粘土为“爸爸的办公室”捏制铅笔盒没有任何本质的区别。第三,快乐来自于整...
2021-03-24 01:39:06 95598 137
原创 间隙锁 gap lock
锁们什么是间隙锁?间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。当我们用范围条件而不是相等条件索引数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项枷锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”。InnoDB也会对这个“间隙”枷锁,这种锁机制就是所谓的间隙锁...
2021-03-24 01:12:52 8794 1
原创 20句“八字真经”
1.未知全貌,不予置评。——《魔道祖师》2..布衣饭菜,可乐终身。——沈复《浮生六记》3.花看半开、酒饮微醺。——《菜根谭》4.等风来,不如追风去。——一禅小和尚5.来如风雨,去似微尘。——《增广贤文》6.凡是过往,皆为序章。——莎士比亚7.得之我幸,不得我命。——徐志摩8.道阻且长,行则将至。——《诗经》9..夕阳已去,皓月方来。——朱自清《桨声灯影里的秦淮河》10..雾失楼台,月迷津渡。——秦...
2021-03-24 00:43:39 9149 1
原创 【详解文件IO系列】讲讲 MQ 消息中间件 (Kafka,RocketMQ等)与 MMAP、PageCache 的故事...
一般的IO调用首先来看一下一般的IO调用。在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS的内核代码负责将相应的文件数据读取到内核的IO缓冲区,然后再把数据从内核IO缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次IO操作。如下图所示。...
2021-03-23 01:29:14 8551
原创 浅析“分布式锁”的实现方式
前言我们在开发应用时,如果需要对一个共享变量进行多线程同步访问的时候,我们可以使用Java多线程的各个技能点来处理,保证完美运行无BUG。但是这里的都只是单机应用,即在同一个JVM中;然后随着业务发展、微服务化,一个应用需要部署到多台服务器上然后做负载均衡,大概的架构图如下:在上图可以看到,变量A在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成...
2021-03-23 00:52:48 8650
原创 图文详解 epoll 原理【Redis,Netty,Nginx实现高性能IO的核心原理】epoll 详解
【Redis,Netty,Nginx 等实现高性能IO的核心原理】I/O输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。I/O 多路复用(multiplexing)I/O 多路复用的本质,是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个...
2021-03-23 00:19:40 9750 1
原创 我这才发现,原来我根本看不懂Java的正则表达式!
正则表达式 (\w)((?=\1\1\1)(\1))+(\w)((?=\1\1\1)(\1))+表达式说明:(\w) 表示匹配并捕获一个单词字符,将匹配内容作为第一个捕获组(?=\1\1\1) 这是一个零宽断言+反向引用,表示之后应该紧接着连续出现三次第一个捕获组匹配到的字符串,但这三次匹配不占位置,不会吃掉匹配到的字符,所以叫零宽;(\1) 反向引用,表示接下来应该匹配到第一个捕获...
2021-03-22 23:43:37 8594
原创 LRU 缓存机制实现:哈希表 + 双向链表
算法详解LRU 缓存机制可以通过哈希表辅以双向链表实现,我们用一个哈希表和一个双向链表维护所有在缓存中的键值对。双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。哈希表即为普通的哈希映射(HashMap),通过缓存数据的键映射到其在双向链表中的位置。这样以来,我们首先使用哈希表进行定位,找出缓存项在双向链表中的位置,随后将其移动到双向链表的头...
2021-03-21 18:15:55 8781 1
原创 什么是循环队列?
对于队列最好的方法是使用链表实现,因为对于数组来说,队列可能会出现下面这种情况:如图所示,不可以继续添加元素,否则会造成数组越界而遭致程序出错。然而此时又不应该扩充数组,因为还有大量实际空间未被占用。 此时我们应该如何解决这个问题呢?我们将其实现为循环队列。理解循环队列何谓循环队列?首先我们要说明的是循环队列仍然是基于数组实现的。但是为了形象化的说明问题,我们如下图所示 1.图...
2021-03-21 14:04:09 10632 1
原创 Scott Page 斯科特佩奇《模型思维》读书笔记
《穷查理宝典》中提到了查理芒格所推崇的多元思维模型,查理·芒格是这么说的, 要想成为一个有智慧的人,你必须拥有多个模型。而且,你必须将你的经验,无论是间接的,还是直接的,都放到构成这些模型的网格上。他还有一段话是这么说的,你必须知道重要学科的重要理论,并经常使用它们——要全部都用上,而不是只用几种。大多数人都只使用学过的一个学科的思维模型,比如说经济学,试图用一种方法来解决所有问题。你知...
2021-03-21 04:32:20 9051
原创 kafka怎么保证数据消费一次且仅消费一次?使用消息队列如何保证幂等性?
精确一次处理语义(exactly onece semantic–EOS),Kafka的EOS主要体现在3个方面:1)幂等producer 保证单个分区的只会发送一次,不会出现重复消息2)事务(transation):保证原子性的写入多个分区,即写入到多个分区的消息要么全部成功,要么全部回滚3)流式EOS:流处理本质上可看成是“读取-处理-写入管道”。整个过程的操作是原子性。幂等produc...
2021-03-21 02:38:24 12459
原创 Optimistic Lock: 乐观锁以及乐观锁的实现
什么是乐观锁乐观锁( Optimistic Lock ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。应用场景:为什么需要乐观锁?并发冲突在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。典型的冲突有:1...
2021-03-20 15:12:31 9340
原创 AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?
AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?AVL树AVL树: 最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。LL 旋转:红黑树红黑树: 平衡二叉树,广泛用在C++的STL中。如map和set都是用红黑树实现的。B/B+树B/B+树: 用在磁盘文件组织 数据索引和数据库索引。...
2021-03-20 15:00:28 8822
原创 Redis之父Antirez谈副业与主业
http://redis.io/Redis 之父 Salvatore Sanfilippo,一名意大利程序员,大家更习惯称呼他 Antirez。以下内容为 Antirez 在 Redis 诞生六周年之际,特意撰写的一篇博文 - 分享了他如何看待个人副业项目(side project)与主业项目(main project)之间的关系,以及他在 Redis 项目上的成功实践...
2021-03-20 14:44:42 13289 3
原创 为啥 redis 使用 跳表 (skiplist) 而不是使用 red-black?
基本结论1、实现简单。2、区间查找快。跳表可以做到O(logn) 的时间复杂度定位区间的起点,然后在原始链表中顺序往后遍历就可以了。3、并发环境优势。红黑树在插入和删除的时候可能需要做一些rebalance的操作,这样的操作可能会涉及到整个树的其他部分,而skiplist的操作显然更加局部性一些,需要锁住的节点更少,因此在这样的情况下性能好一些。I was looking at Redi...
2021-03-20 14:37:57 8906
原创 Redis为什么是单线程?高并发响应快?
一、Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快(纯内存); 数据存在内存中,数据结构用HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。2.redis是单线程的,省去了很多上下文切换线程的时间(避免线程切换和竞态消耗)。3.redis使用IO多路复用技术(IO multiplexing, 解决对多个I/O监听时,一个I/O阻塞影响其...
2021-03-19 18:03:33 8915 1
原创 浅析 HTTPS 和 SSL/TLS 协议
名词说明1.ssl协议:通过认证、数字签名确保完整性;使用加密确保私密性;确保客户端和服务器之间的通讯安全2.tls协议:在SSL的基础上新增了诸多的功能,它们之间协议工作方式一样3.https协议:https over tls,tls协议是https协议的核心4.CA:Certificate Authority,也称为电子商务认证中心,是负责发放和管理数字证书的权威机构对称加...
2021-03-19 14:44:52 8866
原创 图文详解 Java线程池
1、线程池的优势(1)降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场...
2021-03-18 23:56:38 8604
原创 JVM 核心知识点
想要提高程序员自身的内功心法无非就是: 数据结构跟算法 + 操作系统 + 网络 ,而所有的Java代码都是在JVM上运行的,了解了JVM好处就是:写出更好更健壮的代码。提高Java的性能,排除问题。面试必问 ,要对知识有一定的深度 。1、简述JVM 内存模型从宏观上来说JVM 内存区域 分为三部分 线程共享区域 、 线程私有区域 、 直接内存区域 。1.1、线程共享区域1....
2021-03-18 20:44:04 8669
原创 创建链表:头插法与尾插法
两种方法的区别无非是插入的位置:头插法:新插入结点始终未当前的第一个结点尾插法:新插入结点始终为当前的最后一个结点头插法建表实现代码://头插法建链表 void HeadCreateList(LinkList L,int n){ int i; srand(time(0)); //初始化随机数种子 L = (LinkList)malloc(...
2021-03-18 18:48:40 12125
原创 Kotlin 高级编程语言特性代码实例
定义接口package com.lightsword.biz/** * @author: Jack * 2021/3/18 上午1:01 */interface IUserAbility { fun getUser(biz:String): String}使用注解package com.lightsword.bizimport com.lightsword.da.m...
2021-03-18 16:17:06 8437
原创 黄峥2021年致股东信原文:
今年的股东信提前了一点,是为了及时和大家同步一个消息。刚刚开完的董事会上,董事们批准了我辞去拼多多董事长职位的请求,陈磊将从即日起接任董事长,并继续担任CEO一职。在不再担任董事长和拼多多管理职位后,我的1:10的超级投票权也将失效。我名下股份的投票权将委托拼多多董事会以投票的方式来进行决策,同时我个人承诺个人名下的股票在未来3年内继续锁定,不出售。去年7月1日我卸任了CEO,原本计划在一年整的时...
2021-03-17 20:32:26 8647
原创 浅析 Kotlin 中的 synchronized
首先,在 Java 中 synchronized 是一个关键字,在Kotlin 中是一个函数。这个函数如下:/* * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0...
2021-03-17 20:03:25 15944
原创 中国最伟大的现实主义诗人:杜甫的一生
杜甫(712年2月12日~770年),字子美,自号少陵野老,唐代诗人,与李白合称“李杜”。生于河南巩县,原籍湖北襄阳。家世背景杜甫出身于京兆杜氏,乃北方的大士族。其远祖为汉武帝有名的酷吏杜周(?—前95年,字长孺,西汉南阳郡杜衍县(今河南南阳市卧龙区)人。西汉大臣,杜延年的父亲。),祖父杜审言(约645年—约708年,字必简,襄州襄阳(今湖北襄阳)人,晋征南将军杜预的远裔,“诗圣”杜甫的...
2021-03-17 02:26:45 13056 3
原创 Java 8 中的 java.util.Map#computeIfAbsent
Java8之前,从map中根据key获取value操作可能会有下面的操作Object key = map.get("key");if (key == null) { key = new Object(); map.put("key", key);}Java8之后,上面的操作可以简化为一行,若key对应的value为空,会将第二个参数的返回值存入并返回。computeIfAbsent()...
2021-03-16 23:22:04 8415
原创 交易系统TMF2.0技术揭秘:跳开 DDD 和中台概念看阿里巴巴交易平台的问题及解决思路...
总体介绍2017年双11,交易峰值达到了32.5万笔/秒,这给整个交易系统带来了非常大的挑战。一方面,系统需要支撑全集团几十个事业部的所有交易类需求:要考虑如何能更快响应需求、加快发布周期;如何能为新小业务提供快速支撑、降低准入门槛;是否足够开放使得业务方能做到自助式扩展;新需求是否已经在其他事业部有可复用资产等问题。互联网的特点决定了业务系统是按领域服务建设的分布式架构。而电商业务的特点...
2021-03-16 17:52:35 14463 2
ClickHouse 高性能、可扩展和低成本的OLAP数据库 陈光剑 20230912
2023-09-14
Will AI Fix Work? 工作节奏超过了我们的跟上能力 人工智能有望创造一种全新的工作方式
2023-05-17
THE AI INDEX REPORT 人工智能指数报告 Measuring trends in Artificial Inte
2023-04-06
Kotlin Coroutines by Tutorials (1st Edition)
2021-04-28
Principles of programming languages by Gilles Dowek (auth.) (z-lib.org).pdf
2021-04-28
A Brief History of Artificial Intelligence
2021-04-28
An introduction to functional programming through lambda calculus.PDF.zip
2019-09-22
《Kotlin项目实战开发》第3章+类型系统与可空类型
2017-09-30
2024 年可以实现 AGI 吗?
2024-01-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人