- 博客(57)
- 资源 (2)
- 收藏
- 关注
原创 <RPC实战与核心原理>学习笔记 --- 高级篇
异步RPC:压榨单机吞吐量影响CPU 的利用率和服务的吞吐量处理 RPC 请求比较耗时, RPC 本身处理请求的效率是毫秒级的, 大部分都是业务耗时服务的业务逻辑,在执行较为耗时的业务逻辑的基础上,又同步调用了好几个其它的服务eg 业务逻辑中有访问数据库执行慢 SQL 的操作, CPU 大部分时间都在等待资源调用端如何异步?提升吞吐量 -> 异步异步策略:返回 Future 对象的 Future 方式 (最简单)发起一次异步请求并且从请求上下文中拿到一个 Future,之后就可以调
2021-11-11 19:18:16
2419
1
原创 <RPC实战与核心原理>学习笔记 --- 进阶篇
架构设计:设计一个灵活的RPC框架RPC 就是把拦截到的方法参数,转成可以在网络中传输的二进制,并保证在服务提供方能正确地还原出语义,最终实现像调用本地一样地调用远程的目的RPC 架构设计网络传输, 保证可靠性 --> TCP①传输模块, 收发二进制数据, 屏蔽网络传输的复杂性②协议模块序列化过程: 用户请求基于方法调用,方法出入参数都是对象数据,对象在网络中传输需要转成二进制协议封装: 在方法调用参数的二进制数据后面增加“断句”符号来分隔出不同的请求,在两个“断句”符号中间放的内容就是
2021-10-27 20:56:48
1732
原创 <RPC实战与核心原理>学习笔记 --- 基础篇
核心原理: RPC的通信流程Remote Procedure Call,远程过程调用屏蔽远程调用跟本地调用的区别,感觉就是调用项目内的方法;隐藏底层网络通信的复杂性,更专注于业务逻辑。RPC 常用于业务系统之间的数据交互,需要保证其可靠性一般默认采用tcp协议, grpc采用的http2RPC流程AOP 技术,采用动态代理,通过字节码增强对方法进行拦截增强, 以便于增加需要的额外处理逻辑用在rpc场景:由服务提供者给出业务接口声明,在调用方的程序里面,RPC 框架根据调用的服务接口提
2021-10-22 21:17:42
1827
原创 <Kafka核心技术与实战>学习笔记 -- 管理与监控
主题管理知多少?主题日常管理创建主题创建 Kafka 主题命令Kafka 提供了自带的 kafka-topics 脚本,用于帮助用户创建主题位于 Kafka 安装目录的 bin 子目录下。 Windows 位于 bin 路径的 windows 子目录下bin/kafka-topics.sh --bootstrap-server broker_host:port --create 创建主题 --topic my_topic_name --partitions 1 主题的分区数 --
2021-10-18 20:22:53
667
原创 <Kafka核心技术与实战>学习笔记 -- 深入Kafka内核
<Kafka核心技术与实战>学习笔记 -- 深入Kafka内核Kafka副本机制详解副本定义副本角色Kafka副本机制详解副本机制(Replication),备份机制,通常是指分布式系统在多台网络互联的机器上保存有相同的数据拷贝副本机制的好处:提供数据冗余。即使系统部分组件失效,系统依然能够继续运转,因而增加了整体可用性以及数据持久性提供高伸缩性。支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量改善数据局部性。允许将数据放入与用户地理位置相近的地方,从而降低系统延时目
2021-08-31 21:27:35
691
原创 <Netty源码剖析与实战> --- 一些PPT没有的东西
Netty 学习笔记nettynetty本质: 网络应用程序框架实现: 异步, 事件驱动特性: 高性能, 可维护, 快速开发用途: 开发服务器和客户端
2021-08-28 22:08:54
2336
原创 aop 踩坑记录
使用环绕通知, 代码上线发现之前409的接口报200了经排查发现是因为 try { response = joinPoint.proceed(); } catch (Throwable e){ response = handleException(joinPoint, e); }异常被catch住了, 但是没有用之前的handler处理, 故返回了200总结:尽量使用@Before
2021-08-19 09:48:06
197
原创 redisson 超时异常
redisson exception获取分布式锁的时候报超时异常e = [org.redisson.command.CommandAsyncService$8.run(CommandAsyncService.java:544), io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:663), io.netty.util.HashedWheelTimer$HashedWheelBucket.expir
2021-08-19 09:40:35
1471
原创 <Kafka核心技术与实战>学习笔记 -- 客户端实践 & 原理剖析
<Kafka核心技术与实战>学习笔记 -- 客户端实践 & 原理剖析生产者消息分区机制为什么分区?Kafka 生产者的分区策略自定义分区策略分区策略 -- 轮询分区策略 -- 随机按消息键保序策略其他分区策略小结生产者压缩算法怎么压缩何时压缩何时解压缩各种压缩算法对比实践小结无消息丢失配置消息丢失 -- 生产者程序丢失数据消息丢失 -- 消费者程序丢失数据客户端都有哪些不常见但是很高级的功能?Java生产者是如何管理TCP连接的?幂等生产者和事务生产者是一回事吗?消费者组到底是什么?生产者消息分区
2021-08-14 10:56:00
535
原创 <Kafka核心技术与实战>学习笔记 -- 集群部署方案&参数配置
Kafka线上集群部署方案考虑 操作系统、磁盘、磁盘容量和带宽操作系统Kafka 由 Scala 语言和 Java 语言编写而成,编译之后的源代码就是普通的“.class”文件部署在linux上的三个优势I/O 模型的使用I/O 模型与 Kafka 的关系Kafka 客户端底层使用了 Java 的 selector,selector 在 Linux 上的实现机制是 epoll,而在 Windows 平台上的实现机制是 select因此将 Kafka 部署在 Linux 上是有优势的,因为能
2021-08-12 11:44:12
301
原创 mybatis plus中update_time字段未自动更新
参考:MyBatis-Plus官方文档mybatis plus对于create_time、update_time这样的数据库字段提供了自动插入功能,不用每次都手动进行更新使用指南加@TableField注解自定义实现类TimeMetaObjectHandler@Componentpublic class TimeMetaObjectHandler implements MetaObjectHandler { @Override public void insertFil
2021-08-02 21:29:29
4382
原创 redis实现分布式锁防坑指南
分布式锁一般有三种实现方式:数据库乐观锁基于Redis的分布式锁基于ZooKeeper的分布式锁保证分布式锁可靠性的四个条件互斥性。在任意时刻,只有一个客户端能持有锁不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了加锁的正确姿势public class RedisLock { priv
2021-08-02 21:16:29
128
原创 <并发编程>学习笔记------(三)并发设计模式
Immutability模式:如何利用不变性解决并发问题?多个线程同时读写同一共享变量存在并发问题如果只有读,而没有写,是没有并发问题的解决并发问题,其实最简单的办法就是让共享变量只有读操作,而没有写操作不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化变量一旦被赋值,就不允许修改了(没有写操作);没有修改操作,也就是保持了不变性快速实现具备不可变性的类将一个类所有的属性都设置成 final 的,并且只允许存在只读方法,那么这个类基本上就
2021-08-02 16:10:58
157
原创 <并发编程>学习笔记------(二) 并发工具类
Lock和Condition(上):隐藏在并发包中的管程Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程,其中 Lock 用于解决互斥问题,Condition 用于解决同步问题Java 语言本身提供的 synchronized 也是管程的一种实现再造管程的理由JDK 1.5 -> JDK 1.6 的性能问题 ×死锁问题, 破坏不可抢占条件方案, 占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源但是synchronized
2021-06-25 20:48:14
313
1
原创 <并发编程>学习笔记------(一) 并发相关理论
前面并发编程可以总结为三个核心问题:分工指的是如何高效地拆解任务并分配给线程同步指的是线程之间如何协作互斥则是保证同一时刻只允许一个线程访问共享资源并发相关理论可见性、原子性和有序性核心矛盾CPU、内存、I/O 设备的速度差异cpu >>> 内存 >>> I/O 设备CPU 增加了缓存,以均衡与内存的速度差异操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异编译程序优化指令执行次序,使得缓存能够得到更加合
2021-06-15 10:31:42
1855
5
原创 <Java 定时任务解决方案Quartz>学习笔记
理论基础小顶堆参考文章:数据结构&算法-----(2)高级数据结构中堆的部分定时任务中每一个任务Job都对应堆中的一个节点, 对应定时任务的到期时间Delay 延迟时间 到期时间每次取堆顶元素执行注意:在添加/删除元素时候需要保证根节点 最大/最小① 向堆中添加元素② 取出堆中的最大 / 最小 (堆顶) 元素时间轮算法普通时间轮使用链表or数组实现思考: 删除堆顶元素中的下沉操作, 在树的节点很多的时候会比较耗性能. 而且在定时任务中取任务是一个很频繁的操作下
2021-04-21 18:45:02
341
1
原创 发送多条POST请求
业务场景需要从数据库搂出未调用接口的实例, 然后发送POST请求调用接口. 共有3000多条数据步骤1. ssh 到机器mysql数据库, 导出到txt文本mysql配置在apollo上看执行mysqlmysql -h host名 -u user名 -p user密码 数据库名 -e "select 查询字段 from 表名;" > 导出文件.txt参考文章:cmd连接mysql连接:mysql-h主机地址-u用户名-p用户密码(注:u与root可以不用加)步骤2: 遍历导
2021-04-12 10:25:09
991
原创 <微服务网关Zuul架构和实践>学习笔记
<微服务网关Zuul架构和实践>学习笔记Zuul网关和基本应用场景API网关是如何演化出来的API 网关基本功能Netflix Zuul 网关Zuul网关和基本应用场景API网关是如何演化出来的API 网关基本功能单点入口: 外部客户端只需要看到一个入口, 隐藏内部复杂的逻辑细节路由转发: 内部微服务有很多, 外部请求来了以后转发到内部具体的微服务限流熔断: 后台微服务可能会出错/延迟, 如果没有限流熔断机制, 容易造成客户端阻塞. 保护后台服务.日志监控: 监控系统健康和性能
2021-04-07 18:44:28
287
原创 <Kafka核心技术与实战>学习笔记
为什么学习kafka对于数据密集型应用来说:数据量激增: Kafka 能够有效隔离上下游业务,将上游突增的流量缓存起来,以平滑的方式传导到下游子系统中,避免了流量的不规则冲击数据复杂度增加数据变化速率变快可以实现:消息引擎应用应用程序集成分布式存储构建流处理应用的开发与部署...
2021-04-02 10:13:39
325
原创 <微服务配置中心Apollo架构与实践>学习笔记
微服务配置中心Apollo架构与实践业务需求研发小故事为什么要配置中心?配置中心解决办法现代需求配置的定义和场景基本概念分类应用 & 场景开关驱动开发原理基于主干的开发模式 TBD优劣Apollo功能亮点公司的业务开发也使用了apollo, 这里顺带着学一下原作者宋顺业务需求研发小故事为什么要配置中心?配置中心解决办法现代需求容器是不可变的配置的定义和场景基本概念灰度发布: eg 20个实例, 逐个 让配置生效分类应用配置: 在运行的时候根据生产运维的实
2021-03-31 20:59:57
419
原创 <微服务安全架构与实践>学习笔记
微服务安全架构与实践微服务安全要解决什么问题1.开放系统间授权2.现代微服务安全3.总结OAuth2的定义和原理OAuth2的正式定义令牌 类比 仆从钥匙(Valet Key)OAuth 2.0 优势不足主要角色OAuth2 术语令牌类型误解总结OAuth2 的流程和选型典型的OAuth Flow1. 授权码模式2. 简化模式3. 密码模式4. 客户端模式刷新令牌流程OAuth Flow 选型授权流程渠道客户应用类型四种OAuth2授权类型(Flows)授权类型选型参考OAuth2 授权服务器和资源服务器案
2021-03-30 20:44:19
871
原创 数据结构&算法-----(11)海量数据处理的一些思路
数据结构&算法-----(10)海量数据处理的一些思路常见的海量处理问题何谓海量数据处理?处理海量数据问题之六把密匙密匙一、分而治之/Hash映射 + Hash_map统计 + 堆/快速/归并排序1、海量日志数据,提取出某日访问百度次数最多的那个IP2、寻找热门查询,300万个查询字符串中统计最热门的10个查询3、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。4、海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10
2020-07-10 16:01:24
427
原创 数据结构&算法-----(10)手撕LRU算法
数据结构&算法-----(10)手撕LRU算法LRU算法原理解析几种思路① LinkedHashMap实现② 双向链表+哈希表实现题目描述:LeetCode146,LRU缓存机制算法设计代码实现拓展1.LRU-K2.two queue3.Multi Queue(MQ)LRU算法对比LRU算法原理解析LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理。他将主存
2020-07-10 10:10:18
565
原创 日志的使用&日志框架
日志的使用&日志框架什么是日志框架什么是日志框架日志框架:一套能实现日志输出的工具包日志:能够描述系统运行状态的所有时间都可以算作日志。比如:用户下线,接口超时,数据库崩溃,Hello World日志框架的能力:定制输出目标(将日志输出到文件,定制日志文件的滚动策略)定制输出格式(通过配置文件修改日志文件的具体内容,不修改代码的情况下自由定制输出格式)携带上下文信息(时间戳、类路径、线程、调用对象)运行时选择性输出(系统运行慢,关心数据库访问层的问题)灵活的配置优秀的性能(日志
2020-05-13 12:40:04
139
原创 数据结构&算法-----(9)背包问题(dp&贪心)
数据结构&算法-----(9)背包问题0-1 背包多重背包完全背包去年夏天一直在便利蜂买椰奶喝,,做便利蜂的笔试题时,01背包问题死活只通过14%,这里再加深一下对背包问题的理解笔试题代码已发在牛客网上:便利蜂20200507笔试题(Java)问题描述:一个背包的总容量为V,现在有N类物品,第i类物品的重量为weight[i],价值为value[i]那么往该背包里装东西,怎样装...
2020-05-08 00:35:04
526
原创 数据结构&算法-----(8)单调栈和单调队列
LeetCode温习-----(8)单调栈和单调队列单调栈单调队列例题:滑动窗口的最值双端队列实现数组实现单调栈单调队列定义:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。为什么要学习单调队列:对于维护好的单调队列,队内元素是有序的,那么取出最大值(最小值)的复杂度是O(1)可以用来优化DP如何维护单调队列:队尾入队的时候维护其...
2020-04-25 20:05:12
706
4
原创 Java笔记-----(15)设计模式
Java笔记-----(15)设计模式(1)设计模式的六大原则(1.1)单一职责原则(Single responsibility principle,SRP)(1.2)里氏替换原则(Liskov Substitution Principle,LSP)(1.3)依赖倒置原则(Liskov Substitution Principle,LSP)(1.4)接口隔离原则(Interface Segrega...
2020-03-31 00:33:39
534
1
原创 Java笔记-----(14)版本控制工具Git
Java笔记-----(14)版本控制工具GitGit的工作原理Git仓库Demo演示Git常用命令git reset --hard 和 --soft 的区别是啥?(重点掌握)git reset 和 git revert 的区别是啥?(掌握)Git是一个优秀的版本控制管理工具,可以进行代码版本的管理,目前是市场上主流的版本管理工具。Git的工作原理工作区:也就是在我们本地的一个git仓库...
2020-03-27 19:54:33
283
原创 面经04
大学有没有做过成长比较好的项目?你在项目里承担什么角色?项目的难点是什么?有没有一些解决难点的地方,你是怎么学习的?提到了WebServiceWebService不好的地方在哪里?比起RPC呢?WebService的价值在哪?介绍一下RPC提到了生成PDF工具生成PDF工具,有没有做一些更通用的组件?做这个工具有没有需要注意的地方?需求是否合理?如果做一个更通用的组件的话,...
2020-03-26 20:53:17
179
1
原创 Java笔记-----(13)项目构建&依赖管理工具Maven
Java笔记-----(13)MavenMaven是什么?(掌握)Maven的仓库settings.xml文件Maven是什么?(掌握)Maven 是一个跨平台的强大构建工具,可以实现自动化构建过程,从“清理、编译、测试、生成报告、打包和部署”都可以使用成熟的插件,通过简单的命令实现,避免了重复的构建过程。Maven 不仅是一个优秀的项目构建工具,还是一个依赖管理工具,它提供了强大的中央仓库...
2020-03-26 19:19:16
562
原创 Java笔记-----(12)Linux常用命令
Java笔记-----(12)Linux常用命令系统路径常用命令grep 命令awk 命令top和ps命令:探测进程sed 命令sort 命令tail和head命令系统路径/ :表示根目录~ :表示/rootetc :存放系统配置目录home :除了root以外,所有用户默认在home下新建一个用户,用户 xxx 对/home/xxx 具有完全操作权限root :用户 root 单独文...
2020-03-26 18:26:33
458
原创 面经02
自我介绍一下实习是做Java的吧,介绍一下实习1.对多线程编程的了解2.什么情况下需要考虑线程安全,哪些集合框架安全,哪些不安全,什么使用3.ConcurrentHashMap和Hashtable的区别,怎么实现的4.synchronized关键字和CAS的适用场景5.套路:并发程度低用synchronized是不是更好?也不会造成CPU用户态到内核态的切换6.简单讲一下数据结构7...
2020-03-24 16:41:27
124
原创 面经03
又来一份面经。。。(选择题部分)1.哪些是应用层协议2.给一段先序遍历 后序遍历,问中序遍历是什么3.树的度是。。。有几个节点的计算(算法题部分)1.一段很长的链表,删除重复的元素。保证有序问synchronized关键字作用于静态方法和非静态方法有什么区别while循环里面还能不能优化2.动态规划 Fibonacci数列数组下标从0开始的话 程序写的有点问题问Array...
2020-03-24 16:12:55
125
原创 面经01
随便问问:由于是北航学长,唠嗑比较多,这里就不废话了进入正题:(LeetCode部分)已经开始刷题了是吧?刷题有什么自己的想法?有什么自己的感想。有没有哪些题印象深刻?在印象深刻的题会考虑时间空间复杂度吗?是多少?怎么去降低这个时间复杂度?提到字典树了,为什么查找效率是O(1),如果中文怎么办?(计算机网络)网络协议学到了哪些东西?自己对网络协议有什么想法?协议为什么这...
2020-03-17 14:58:36
175
原创 数据结构&算法-----(7)二分搜索与贪心算法
LeetCode温习-----(7)二分搜索二分搜索(Binary Search)递归解法时间复杂度非递归解法例题分析一:找确定的边界例题分析二:找模糊的边界例题分析三:旋转过的排序数组例题分析四:不定长的边界二分搜索(Binary Search)二分搜索(折半搜索)的Wikipedia定义:是一种在有序数组中查找某一特定元素的搜索算法。从定义可知,运用二分搜索的前提是数组必须是排好序的。另外...
2020-03-13 20:45:01
936
原创 数据结构&算法-----(6)动态规划
LeetCode温习-----(6)动态规划判断动态规划1. 是数学优化的方法——最优子结构2. 是编程的方法——重叠子问题举例 1:斐波那契数列问题。举例 2:给定如下的一个有向图,求出从顶点 A 到 C 的最长的路径。要求路径中的点只能出现一次。举例 3:归并排序和快速排序是否属于动态规划?例题分析LeetCode 第 300 题:给定一个无序的整数数组,找到其中最长子序列长度。总结解决动态规...
2020-03-13 12:04:22
999
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人