- 博客(27)
- 收藏
- 关注
原创 为什么我们要写高质量的代码
认识到自己的低质量代码对自己和他人造成的影响,以及他人的代码对我造成的困扰,让我在反思我们为什么要追求写出高质量的代码
2021-12-18 14:33:13
596
原创 系统性能提升--缓存篇,什么是缓存(1)
什么是缓存缓存起源缓存使用场景什么时候可以使用缓存读取效率吞吐效率缓存需要考虑的问题读写比命中率内存使用情况缓存划分本地缓存Ehcache /Caffeine(Guava)/Hollow/布隆过滤器分布式缓存RedisMemcache参考文献缓存起源 Cache 一词来源于1967年的一篇电子工程期刊论文。其作者将法语词“cache”赋予“safekeeping storage”的涵义,用于计算机工程领域。PC-AT/XT和80286时代,没有 Cache,CPU和内存都很慢,CPU直接访问内存。8
2021-11-28 16:20:00
778
原创 消息队列专栏(2):带你认识 KAFKA
1、KAFAK 概述Apache Kafka最早是由LinkedIn开源出来的分布式消息系统,现在是Apache旗下的一个子项目,并且已经成为开源领域应用最广泛的消息系统之一。引用官方网站对kafka 的定义:Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming ana
2021-11-28 14:08:15
307
原创 消息队列专栏:结缘,初识消息中间件(一)
目录一、结缘消息中间件二、消息队列发展史三、当前主流消息队列技术四、为什么我们选型kafka 作为消息中间件五、书籍推荐五、参考文献一、结缘消息中间件从初次接触消息中间件到成为一名大数据消息队列工程师至今已近三年,回顾三年经历,收获颇多,也踩过很多坑,却没有一个系统性的总结。因此,希望在这个专栏里记录我的所学所得,如果顺带能帮助到想学习消息中间件的朋友,那么这是一件很让人开心的事,经验尚浅,内容如有误,欢迎交流纠正。二、消息队列发展史三、当前主流消息队列技术四、为
2021-03-19 09:25:35
464
原创 linux 常用命令使用
目录1、命令集合1.1 strace2、排查问题实际应用3、参考文献1、命令集合1.1 strace (跟踪进程中的系统调用)1.1.1 strace 使用背景strace 常用来跟踪进程执行中的系统调用和所接受的信号在linux 中,进程不能直接访问硬件设备,当进程需要访问硬件设备(磁盘文件,网络数据等),必须由用户态模式切换为内核态模式,通过系统调用来访问硬件设备。strace 可以跟踪到一个进程产生的系统调用,包括参数、返回值、执行消耗的时间等2、排..
2021-03-13 06:40:58
149
原创 从服务器上传下载文件(proxychains4 以及 rz/sz等)
目录1、rz/sz 如果从服务器上传下载文件2、proxyz如何从服务器上传下载文件参考文献:1、rz/sz 如果从服务器上传下载文件2、proxyz如何从服务器上传下载文件3、参考文献:
2020-09-20 17:28:05
367
原创 maven 技巧(一)
1、IDEA中 @override报错的解决方法--如何设计language level(jdk 等级)2、IntelliJ IDEA 之 jdk Language level3、使language level 设置为1.8而不会被idea重置参考文献:1、https://blog.youkuaiyun.com/woyaoxuejavaya/article/details/515653562、https://blog.youkuaiyun.com/tiantiandjava/article/deta..
2020-08-23 17:35:07
166
原创 gRPC 使用
参考文献1、https://juejin.im/post/6844903992825217038(PB 语法解析)2、https://www.jianshu.com/p/6c0fe5aa2f66(grPC Java实例)3、https://doc.oschina.net/grpc?t=60134(grPC 官方教程)
2020-08-23 16:50:26
135
原创 Thrift
1、基本字段2、关键词解析Namespace:定义名称空间/包名/模块等等,可以使用编程语言名称规定某一特定语言的namespace,用*表示所有未匹配到的语言的namespace,语法:在java 中含义就是包使用示例...
2020-08-22 16:36:35
120
原创 buffer/cache --- hcache/lsof(一)
1、什么是buffer/cache ? buffer/cache其实是作为服务器系统的文件数据缓存使用的,尤其是针对进程对文件存在 read/write操作的时候,所以当你的服务进程在对文件进行读写的时候,Linux内核为了提高服务的读写速度,则将会把文件放在此处的 buffer/cache中进行缓存使用,由于Linux服务的特点便是任何事物都会以文件的形式进行存在,所以你会发现不管你是否对文件做了大规模的读写,机器的 buffer/cache是一直都存在的,并且持续的增高不下,这是因为...
2020-08-09 18:55:14
467
原创 kubernetes-kubernetes架构(四)
1、kubernetes 架构参考文献:1、kubernetes 架构参考文献:1、https://www.cnblogs.com/linuxk/p/9272567.html()
2020-08-09 18:39:52
123
原创 kubernetes --linux 容器基础知识(一)
1、什么是容器?google在它的词条中这样定义:容器是一种基础工具;泛指任何可以用于容纳其它物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品;物体可以被放置在容器中,而容器则可以保护内容物;人类使用容器的历史至少有十万年,甚至可能有数百万年的历史;而在计算机领域:容器(container)是指是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具.
2020-08-08 18:24:11
571
原创 线程池3 --java 内置线程池 + 存在的问题
1、java 在框架里面也构建了几个内部的常用线程池,供业务选择使用Java1.5引入的Executor框架把任务的提交和执行进行解耦,只需要定义好任务,然后提交给线程池,而不用关心该任务是如何执行、被哪个线程执行,以及什么时候执行。因此,我们可以通过如下方式创建不同形式的线程池。(1)ExecutorService executor = Executors.newFixedThreadPool(5) 创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线...
2020-07-26 18:56:21
274
原创 线程池4--进阶(自定义线程池 + 线程池监控 + 线程池隔离)
1、自定义线程池核心是创建线程的 api:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler han
2020-07-26 17:48:46
730
原创 线程池(2)---源码解析
1、jdk 线程池类图:位于 java.util.concurrent;2、具体结构分析:三个Executor接口:Executor:一个运行新任务的简单接口; ExecutorService:扩展了Executor接口。添加了一些用来管理执行器生命周期和任务生命周期的方法; ScheduledExecutorService:扩展了ExecutorService。支持Future和定期执行任务。3、ThreadPoolExecutor分析ThreadPoolExecuto.
2020-07-21 22:05:21
106
原创 GC 基础知识与GC 算法与配置
参考文献1、https://blog.youkuaiyun.com/renfufei/article/details/54885190
2020-07-19 18:53:02
159
原创 线程池(1)--基础知识
参考文献1、https://www.cnblogs.com/ants/p/11343657.html2、https://juejin.im/post/5dc41c165188257bad4d9e69
2020-07-19 18:48:45
107
原创 零拷贝技术--mmaps 详解解析
1、参考文献:1、https://cloud.tencent.com/developer/article/10318602、https://juejin.im/post/5dcab64a6fb9a04a871878853、https://blog.youkuaiyun.com/Lirx_Tech/article/details/51396268
2020-07-19 17:18:44
314
原创 零拷贝技术以及在kafka 中的应用
一、基础概念Zero-Copy技术省去了将操作系统的read buffer拷贝到程序的buffer,以及从程序buffer拷贝到socket buffer的步骤,直接将read buffer拷贝到socket buffer. Java NIO中的FileChannal.transferTo()方法就是这样的实现,这个实现是依赖于操作系统底层的sendFile()实现的。举例子:吧磁盘上的数据发送给其他的用户的过程1、一般流程在这个过程中文件A的经历了4次copy的过程: 首先,
2020-07-14 20:49:07
568
原创 java NIO 基础概念
参考链接:1、https://blog.youkuaiyun.com/forezp/article/details/884147412、https://www.cnblogs.com/dolphin0520/p/3919162.html
2020-06-14 17:49:55
154
原创 kakfa RPC 协议(社区 Trunk 版本)--OFFSET_COMMIT&& OFFSET_FETCH
1、RPC 使用场景consumer 消费kafka 数据时需要保存上一次消费完成的数据信息(即offet),以便重启consumer 后能够继续从当前位置开始fetch 数据,保存上一次的offset需要使用OFFSET_COMMIT RPC ,或者上一次消费的offset 位置需要使用OFFSET_FETCH RPC,这里又分为old consumer/new consumer2、OFFSET_COMMIT RPC 源码剖析2.1 RPC 包含的字段 private String gr.
2020-06-14 15:33:32
371
原创 kakfa RPC 协议(社区 Trunk 版本)--ListOffsetRequest
1、RPC 功能用于consumer 或者 follower 获取消费的起始offset,只支持EARLIEST_TIMESTAMP(最早)和 LATEST_TIMESTAMP(最新)消费。2、RPC 字段解析 private final int replicaId; private final IsolationLevel isolationLevel; private final Map<TopicPartition, PartitionData> par
2020-06-07 18:43:25
471
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人