
一篇入魂
文章平均质量分 90
颯沓如流星
Putty本无树,MinGW亦非台
展开
-
分布式系统设计陷阱,白话CAP理论
这就是 CAP 理论的核心。原创 2025-03-23 17:00:00 · 629 阅读 · 0 评论 -
UDP就一定比TCP快吗?
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP慢。TCP是面向连接的协议,而UDP是无连接的协议。这里的”连接“其实是,操作系统内核在两端代码里维护的一套复杂状态机。大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。原创 2023-05-26 14:01:32 · 957 阅读 · 0 评论 -
深入理解 Linux CPU 上下文切换
我们都知道 Linux 是一个多任务操作系统,它支持的任务同时运行的数量远远大于 CPU 的数量。当然,这些任务实际上并不是同时运行的(Single CPU),而是因为系统在短时间内将 CPU 轮流分配给任务,造成了多个任务同时运行的假象。CPU 上下文(CPU Context)在每个任务运行之前,CPU 需要知道在哪里加载和启动任务。这意味着系统需要提前帮助设置 CPU 寄存器和程序计数器。CPU 寄存器是内置于 CPU 中的小型但速度极快的内存。程序计数器用于存储 CPU 正在执行的或下一条要.翻译 2022-05-25 13:30:35 · 664 阅读 · 0 评论 -
IDEA的5大调试技巧,你学废了吗?
在项目开发的时候我发现很多小伙伴能非常熟练的使用IDEA编写代码,但是对于IDEA调试的技巧掌握的不是很好,只会F7、F8、F9等这些基本调试功能。而像一些复杂的调试场景就无从下手,如:在for循环中调试某个特定值;多线程、Reactor调试;修改变量的运行值等。下面我们就来分场景介绍一下IDEA的调试技巧,看完掌握后调试bug的效率一定大大提升。1. 条件断点循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值。参考上图,在断点的位置,右击断点旁边的小红点,会出来一原创 2021-08-21 19:28:47 · 204 阅读 · 0 评论 -
Linux下的GitLab 的安装及使用
GitLab介绍GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业、学校等内部网络搭建git私服。功能:Gitlab 是一个提供代码托管、提交审核和问题跟踪的代码管理平台。对于软件工程质量管理非常重要。版本:GitLab 分为社区版(CE) 和企业版(EE)。配置:建议CPU2核,内存2G以上。Gitlab的服务构成:Nginx:静态web服务器。gitlab-shell:用于处理Git命令和修改auth原创 2021-02-24 10:17:55 · 769 阅读 · 0 评论 -
基于Joplin和Joplin Server搭建私有云笔记
我们知道,多端同步功能是笔记工具最重要的功能。只有实现了多端同步,我们才能在工作电脑和手机之间无缝切换笔记体验。Joplin 在同步上做得不错,支持 Dropbox、OneDrive 和 AWS s3(当然国内都没法用),支持 WebDAV 协议,也支持自家的 Joplin Server。本文介绍如何在自己的服务器上搭建 Joplin Server,并配置好 Joplin Desktop 的同步功能。前置条件安装docker创建 Joplin Server 配置文件创建配置文件,~/docke原创 2021-02-24 09:35:52 · 17451 阅读 · 3 评论 -
用户进程缓冲区和内核缓冲区
常常听到有程序员会跟你讨论:“我们在读写文件的时候,系统是有缓存的”。但实际上有一部分人把用户进程缓存区和系统空间缓存区的概念混淆了,包括这两种缓冲区的用法和所要解决的问题,还有其它类似的概念。本文就来区分一下不同的缓冲区概念(主要针对类unix平台)。用户进程和操作系统的关系,首先我用一张图来解释“用户进程和操作系统的关系“ 这是一个计算机系统运行时的简化模型,我们把所有运行在操作系统上的进程成为用户进程,它们都运行在用户空间(可以看到用户空间有很多进程)。把操作系统运行的空间成为系统空间为什转载 2020-12-30 10:32:53 · 955 阅读 · 1 评论 -
Intellij IDEA快捷键大全
动作快捷键说明Move Caret to Code Block EndCtrl+] 诸如{}围起来的代码块,使用该快捷键可以快速跳转至代码块的结尾处Move Caret to Code Block StartCtrl+[同上,快速跳至代码块的开始出Complete Current StatementCtrl+Shift+Enter将输入的if、for、函数等等补上{}或者;使代码语句完整Start New LineShift+Enter在当前行的下方开...原创 2020-12-29 14:44:04 · 241 阅读 · 0 评论 -
SpringBoot最新版:优雅停机,抢先解读~~ 拒绝kill -9
优雅停机目前Spring Boot已经发展到了2.3.4.RELEASE,伴随着2.3版本的到来,优雅停机机制也更加完善了。目前版本的Spring Boot 优雅停机支持Jetty, Reactor Netty, Tomcat和 Undertow 以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。优雅停机的目的:如果没有优雅停机,服务器此时直接直接关闭(kill -9),那么就会导致当前正在容器内运行的业务直接失败,在某些特殊的场景下产生脏数据。增加了优雅停机配置后:在服原创 2020-10-26 10:37:46 · 696 阅读 · 0 评论 -
UDP 单播、广播和多播
使用UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的ip地址和端口号,然后将信息封装到一个待发送的报文中并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。通常我们讨论的原创 2020-10-15 20:45:05 · 827 阅读 · 1 评论 -
缓存淘汰算法--LRU算法
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:新数据插入到链表头部;每当缓存命中(即缓存数据被访问),则将数据移到链表头部;当链表满的时候,将链表尾部的数据丢弃。1.3. 分析【命中率】当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命原创 2020-10-14 11:03:20 · 302 阅读 · 1 评论 -
你知道 Volatile 和 CAS 的弊端之总线风暴吗?
一、什么是总线风暴总线风暴,听着真是一个帅气的词语,但如果发生在你的系统上那就不是很美丽了,废话不多说,先看图说结论。什么是总线风暴,先来看结论在java中使用unsafe实现cas,而其底层由cpp调用汇编指令实现的,如果是多核cpu是使用lock cmpxchg指令,单核cpu 使用compxch指令。如果在短时间内产生大量的cas操作在加上 volatile的嗅探机制则会不断地占用总线带宽,导致总线流量激增,就会产生总线风暴。总之,就是因为volatile 和CAS 的操作导致BUS总线缓存一致原创 2020-10-13 10:00:02 · 1475 阅读 · 0 评论 -
lombok的使用详解,解决@Builder.Default默认值问题
Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的Java模型对象(POJO)。在开发环境中使用Lombok插件后,Java开发人员可以节省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生成这些方法,并没有如反射那样降低程序的性能。它所有的增强都是通过注解实现,所以了解其使用主要了解一下注解即可原创 2020-10-12 16:07:19 · 25216 阅读 · 0 评论 -
一口气说出Java 6种延时队列的实现方法(面试官也得服)
这篇文章主要介绍了一口气说出Java 6种延时队列的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧下边会介绍多种实现延时队列的思路。其实哪种方式都没有绝对的好与坏,只是看把它用在什么业务场景中,技术这东西没有最好的只有最合适的。一、延时队列的应用什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。延时队列在项目中的应用还是比较多的,尤.原创 2020-10-12 10:43:40 · 1167 阅读 · 0 评论 -
你真的知道怎么实现一个延迟队列吗?
1.前言延迟队列是我们日常开发过程中,经常接触并需要使用到的一种技术方案。前些时间在开发业务需求时,我也遇到了一个需要使用到延迟消息队列的需求场景,因此我也在网上调研了一系列不同的延迟队列的实现方案,在此进行了一个总结并且给大家进行分享。本文大纲:2.延迟队列定义首先,队列这种数据结构相信大家都不陌生,它是一种先进先出的数据结构。普通队列中的元素是有序的,先进入队列中的元素会被优先取出进行消费。延时队列相比于普通队列最大的区别就体现在其延时的属性上,普通队列的元素是先进先出,按入队顺序进行处理,而原创 2020-10-12 10:25:43 · 904 阅读 · 1 评论 -
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!
CPU磁盘内存GC问题网络线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(.原创 2020-09-27 11:00:06 · 287 阅读 · 0 评论 -
Java 必须掌握的 12 种 Spring 常用注解!
1.声明bean的注解@Component 组件,没有明确的角色@Service 在业务逻辑层使用(service层)@Repository 在数据访问层使用(dao层)@Controller 在展现层使用,控制器的声明(C)2.注入bean的注解@Autowired:由Spring提供@Inject:由JSR-330提供@Resource:由JSR-250提供都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。3.java配置类相原创 2020-09-21 14:56:21 · 109 阅读 · 0 评论 -
Spring 最常用的 7 大类注解,史上最强整理!
随着技术的更新迭代,Java5.0开始支持注解。而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架。而spring的的注解那么多,可能做java很多年,都用不上。这里按照类型总结了这7种最常用的注解。1 核心注解@Required此注解用于bean的setter方法上。表示此属性是必须的,必须在配置阶段注入,否则会抛出BeanInitializationExcepion。@Autowired此注解用于bean的field、原创 2020-09-21 14:49:12 · 283 阅读 · 0 评论 -
TCP-IP详解:滑动窗口(Sliding Window)
TCP的优势从传输数据来讲,TCP/UDP以及其他协议都可以完成数据的传输,从一端传输到另外一端,TCP比较出众的一点就是提供一个可靠的,流控的数据传输,所以实现起来要比其他协议复杂的多,先来看下这两个修饰词的意义:Reliability ,提供TCP的可靠性,TCP的传输要保证数据能够准确到达目的地,如果不能,需要能检测出来并且重新发送数据。Data Flow Control,提供TCP的流控特性,管理发送数据的速率,不要超过设备的承载能力为了能够实现以上2点,TCP实现了很多细节的功转载 2020-09-16 17:32:42 · 499 阅读 · 0 评论 -
如何将文本文件在 Unix 和 DOS(Windows)格式之间转换
DOS 文本文件带有回车(CR 或 \r)和换行(LF 或 \n)一对字符作为它们的换行符,而 Unix 文本只有换行(LF)符。有很多方法可以将 DOS 文本文件转换为 Unix 格式。这里推荐使用一个名为 dos2unix / unix2dos 的特殊工具将文本在 DOS 和 Unix 格式之间转换。dos2unix :将文本文件从 DOS 格式转换为 Unix 格式。unix2dos :将文本文件从 Unix 格式转换为 DOS 格式。tr、awk 和 sed 命令:这些可以用于相同的目的翻译 2020-08-29 19:12:27 · 3282 阅读 · 0 评论 -
vim操作一些常用命令汇总
打开文件,并且定行vim test.rtf +10异常处理更改文件,强行终止vitest.rtf会变成.test.rtf.swpvi test.rtfd会删除交换文件3种工作模式命令模式:翻页、复制、粘贴末行模式:保存退出wq(write quit)–>等价于x编辑模式:移动命令行内移动移动一格单词w :wordb :back0 :行首^ :非空行首$ :行尾部跳转行g :go gg 3G G:3 跳转到第三行翻页ctr+bc.原创 2020-08-29 13:31:08 · 189 阅读 · 0 评论 -
Windows Terminal + NeoVim + Coc.nvim最舒服的终端编辑环境IDE
先看效果图Windows Terminal 安装可以在Windows10商店搜索windows terminal安装。也可以在github上下载 windows terminall配置和使用官方文档 重度依赖命令行用户建议仔细阅读官方文档。建议安装Cascadia Code Font字体,微软开源的编程字体。Ctrl + , 会使用系统默认编辑器打开一个settings.json文件,或者在窗口栏右边倒三角打开并找到设置。我的配置如下{ "$schema": "https://ak原创 2020-08-29 13:16:33 · 48 阅读 · 1 评论 -
老生常谈逻辑运算,与&、或|、异或^、取反~、左移<<、右移>>
按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。运算规则: 0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011& 0000 0101 = 00000001因此,3&5的值得1。另,负数按补码形式参加按位与运算。“与运算”的特殊用途:(1)清零。如果想将一个单元清零,即使其全部二进制原创 2020-08-12 19:11:27 · 2827 阅读 · 0 评论 -
【一篇入魂】带你快速起跑spring,最详细入门教程
一、spring简介Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身。它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)。1、Spring 中常用术语:框架:是能完成一定功能的半成品。框架能够帮助我们完成的是:项目的整体框架、一些基础功能、规定了类和对象如何创建,如何协作等,当我们开发一个项目时,框架帮助我们完成了一部分功能,我们自己再完成一部分,原创 2020-08-10 12:26:17 · 759 阅读 · 1 评论 -
带你上手阿里开源的 Java 诊断利器:Arthas
项目源码地址:https://github.com/alibaba/arthas一、简介为什么要用 Arthas?好多 Java 开发的小伙伴可能有遇到下面这些问题:项目中导入了一个 jar 包的不同版本,那么这个类从哪个 jar 包加载的?线上环境为什么会报各种异常?本地项目运行没问题,线上环境运行的结果为什么和本地不同?数据原因没有执行到?代码没有 commit?环境上使用的分支搞不对?线上环境遇到偶先问题,难道只能通过加日志,调整项目日志级别,重新打包发布验证问题吗?线上环境遇到某个用.原创 2020-07-20 10:30:29 · 1137 阅读 · 0 评论 -
从“一个HTTP请求”来讲起,不再畏惧面试中的网络常识!
从一个经典的面试题说起,输入URL到页面展现的过程:输入URL后,会先进行域名解析。优先查找本地host文件有无对应的IP地址,没有的话去本地DNS服务器查找,还不行的话,本地DNS服务器会去找根DNS服务器要一个域服务器的地址进行查询,域服务器将要查询的域名的解析服务器地址返回给本地DNS,本地DNS去这里查询就OK了。浏览器拿到服务器的IP地址后,会向它发送HTTP请求。HTTP请求经由一层层的处理、封装、发出之后,最终经由网络到达服务器,建立TCP/IP连接,服务器接收到请求并开始处理。服务器原创 2020-07-15 11:01:54 · 276 阅读 · 0 评论 -
Java容器集合经典面试题集
1. Java容器集合的分类,各自的继承结构Java中的容器集合分为两大阵营,一个是Collection,一个是MapCollection下分为Set,List,QueueSet的常用实现类有HashSet,TreeSet等List的常用实现类有ArrayList,LinkedList等Queue的常用实现类有LinkedList,ArrayBlockingQueue等Map下没有进一步分类,它的常用实现类有HashMap,ConcurrentHashMap等2. Java集合中的fai.原创 2020-07-13 15:47:04 · 298 阅读 · 0 评论 -
彻底理解网络中的IO多路复用
1、什么是IO多路复用IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个线程2、为什么有IO多路复用机制?没有IO多路复用机制时,有BIO、NIO两种实现方式,但有一些问题同步阻塞(BIO)服务端采用单线程,当accept一个请求后,在recv或send调用阻塞时,将无法accept其他请求(必须等上一个请求处recv或send完),无法原创 2020-07-13 13:42:50 · 866 阅读 · 0 评论 -
【Elastic Stack下】Kibana+logstash+Nginx+Filebeat+Metricbeat入门学习,让你对ELK日志架构不再困惑
课程介绍Nginx日志分析系统Filebeat入门学习Metricbeat入门学习Kibana入门学习Logstash入门学习综合练习1、Nginx日志分析系统1.1、项目需求Nginx是一款非常优秀的web服务器,往往nginx服务会作为项目的访问入口,那么,nginx的性能保障就变得非常重 要了,如果nginx的运行出现了问题就会对项目有较大的影响,所以,我们需要对nginx的运行有监控措施,实时掌握nginx的运行情况,那就需要收集nginx的运行指标和分析nginx原创 2020-07-11 22:10:24 · 630 阅读 · 0 评论 -
【Elastic Stack上】Elastic Search快速入门,让你对ELK日志架构不再困惑
课程介绍Elastic Stack简介Elasticsearch的介绍与安装Elasticsearch的快速入门Elasticsearch的核心讲解中文分词全文搜索Elasticsearch集群Java客户端讲解1、Elastic Stack简介如果你没有听说过Elastic Stack,那你一定听说过ELK,实际上ELK是三款软件的简称,分别是Elasticsearch、Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所以就形成了Elastic Sta原创 2020-07-11 19:09:56 · 1344 阅读 · 0 评论 -
【一篇入魂】Zookeeper快速入门,部署、集群、数据结构、API、原理、面试真题
第 1 章 Zookeeper 入门1.1 概述Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。Zookeeper工作机制Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化 ,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。1.2 特点Zookeeper:一个领导者(Leader),多个跟随.原创 2020-07-10 13:07:32 · 191 阅读 · 0 评论 -
【一篇入魂】redis快速入门—部署、数据类型、持久化、事务、集群
Redis简介简单介绍Redis:开源、免费、非关系型数据库、K-V数据库、内存数据库,支持持久化、事务和备份,集群(支持16个库)等高可用功能。并且性能极高(可以达到100000+的QPS),易扩展,丰富的数据类型,所有操作都是单线程,原子性的。NOSQL:非关系型数据库,数据与数据之间没有关联关系。就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题类型键值(key-value)存储数据库列存储数据库:键仍然存在,但是指向了多个列,HBase (eg:博客平台(标签和文章原创 2020-07-10 10:29:33 · 425 阅读 · 0 评论 -
日志系统新贵Loki,是该考虑替换掉你的ELK了
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。背景和动机当我们的容器云运行的应用或者某个节点出现问题了,解决思路应该如下:我们的监控使用的是基于prometheus体系进行改造的,prometheus中比较重要的是metric和alert,metric是来说明当前或者历史达到了某个值,alert设置metric达到某个特定的基数触发了告警,但是这些原创 2020-07-10 09:49:08 · 1348 阅读 · 0 评论 -
【一篇入魂】Kafka一篇带你快速入门,了解整体架构、搭建集群、面试
第 1 章 Kafka 概述1.1 定义Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。1.2 消息队列1.2.1 传统消息队列的应用场景使用消息队列的好处1)解耦允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2)可恢复性系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。3)缓冲有原创 2020-06-26 14:44:51 · 1788 阅读 · 0 评论