- 博客(67)
- 收藏
- 关注
原创 Redis源码解读之用RedisAe实现一个简单的HTTP服务器
使用Redis里的事件循环器实现一个HTTP服务器,带你深入理解Redis源码
2022-09-25 09:45:33 855 1
原创 用java实现一个分布式调用链追踪系统(五)总结
collie使用Java实现一个分布式调用链追踪系统现在项目已经开源,欢迎提pr和star,项目地址:分布式调用链追踪系统Collie项目系列博客地址:柠檬好酸啊:用Java实现一个分布式调用链追踪系统 (一)聊聊自己的想法柠檬好酸啊:用java实现一个分布式调用链追踪系统(二)项目搭建过程中的一些注意事项柠檬好酸啊:用java实现一个分布式调用链追踪系统(三)最核心的实现之Javassist柠檬好酸啊:用java实现一个分布式调用链追踪系统(四)项目具体实现柠檬好酸啊:用java实现
2021-11-20 17:10:23 459
原创 用java实现一个分布式调用链追踪系统(四)项目具体实现
collie使用Java实现一个分布式调用链追踪系统现在项目已经开源,欢迎提pr和star,项目地址:分布式调用链追踪系统Collie项目系列博客地址:柠檬好酸啊:用Java实现一个分布式调用链追踪系统 (一)聊聊自己的想法柠檬好酸啊:用java实现一个分布式调用链追踪系统(二)项目搭建过程中的一些注意事项柠檬好酸啊:用java实现一个分布式调用链追踪系统(三)最核心的实现之Javassist柠檬好酸啊:用java实现一个分布式调用链追踪系统(四)项目具体实现柠檬好酸啊:用java实现
2021-11-20 17:09:40 599
原创 用java实现一个分布式调用链追踪系统(三)最核心的实现之Javassist
collie使用Java实现一个分布式调用链追踪系统现在项目已经开源,欢迎提pr和star,项目地址:分布式调用链追踪系统Collie项目系列博客地址:柠檬好酸啊:用Java实现一个分布式调用链追踪系统 (一)聊聊自己的想法柠檬好酸啊:用java实现一个分布式调用链追踪系统(二)项目搭建过程中的一些注意事项柠檬好酸啊:用java实现一个分布式调用链追踪系统(三)最核心的实现之Javassist柠檬好酸啊:用java实现一个分布式调用链追踪系统(四)项目具体实现柠檬好酸啊:用java实现
2021-11-20 17:09:00 394
原创 用java实现一个分布式调用链追踪系统(二)项目搭建过程中的一些注意事项
collie使用Java实现一个分布式调用链追踪系统现在项目已经开源,欢迎提pr和star,项目地址:分布式调用链追踪系统Collie项目系列博客地址:柠檬好酸啊:用Java实现一个分布式调用链追踪系统 (一)聊聊自己的想法柠檬好酸啊:用java实现一个分布式调用链追踪系统(二)项目搭建过程中的一些注意事项柠檬好酸啊:用java实现一个分布式调用链追踪系统(三)最核心的实现之Javassist柠檬好酸啊:用java实现一个分布式调用链追踪系统(四)项目具体实现柠檬好酸啊:用java实现
2021-11-20 17:08:10 418
原创 如何使用Java实现一个分布式调用链追踪系统?
collie使用Java实现一个分布式调用链追踪系统什么是分布式调用链追踪?在微服务和分布式应用十分常见的系统中,如果系统的规模非常的庞大,那么会带来非常多的麻烦,首先是系统复杂度升高了,各个系统之间互相调用,使得查找问题等变得非常复杂。对于新接手项目的人来说也是非常不友好的。所以急需一个工具来使得复杂的系统变得更清晰。分布式调用链追踪就是这样的一个工具。初次听到这样的系统,感觉非常的牛逼。秉持着想深入了解一个东西的话那就来实现它的理念,我决定自己动手实现一个简单的分布式调用链追踪系统。分布式调用
2021-10-23 21:51:04 1078 1
原创 我是如何用java实现一个LeetCode的
我是如何用java实现一个LeetCode的前言作为一个算法小垃圾,有一次我做完了一个LeetCode题目,我想的不是如何在提升一下自己的算法,而是想到了其他的一些东西。比如,我提交了一段Java代码到后台,后台是运行Java代码并且返回结果和这段代码执行的时间、占用内存等信息。我工作中接触的东西并不能考诉我这个过程中到底发生了什么,但是我还是抱着一探究竟的心,想去深入了解一个这个过程每一步的原理。其实说来疑问就那么几点:LeetCode提交的Java代码到底如何执行?代码的运行时间和占用内存怎
2021-10-07 22:54:42 2157 2
转载 在vim中执行shell命令或者打开bash
vim中执行shell命令小结1. 不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容:!command # 特别的可以运行:!bash来启动一个bash shell并执行命令,不需要退出vim2. 将shell命令command的结果插入到当前行的下一行:r !command:r !date #读取系统时间并插入到当前行的下一行。3. 将起始行号和结束行号指定的范围中的内容输入到shell命令command处理,并将处理结果
2020-11-22 20:26:40 1377
原创 如何让你的网站支持https?
文章目录如何让你的网站支持https?申请证书配置NGINX如何让你的网站支持https?申请证书SSL 证书通常需要购买,也有免费的,通过第三方 SSL 证书机构颁发。你也可以在云服务商上购买,但是一般免费的 ssl 证书只能支持单个域名。我用的是阿里云的SSL证书,可以申请免费的。地址如下:https://common-buy.aliyun.com/?spm=5176.2020520154.0.0.1f8956a7lXJtr0&commodityCode=cas下载证书,我选
2020-11-11 11:17:57 1168
原创 Java实现热部署(四):热部署插件分析
插件介绍介绍一个插件,插件地址:https://github.com/liuzhengyang/lets-hotfix。这个插件可以实现热部署,插件的原理原理和前几篇文章中说的原理是一样的。这个插件的具体的使用方式在GitHub上面有详细的说明。插件可以在网页端使用也可以安装idea插件进行热部署。代码分析GitHub中的代项目目录大致分成了这几个部分,我们来一个一个分析。整体的结构和实现的功能图如下:agent这部分原理很好懂,之前我们也讲到过。这里插件实现的主要功能就是通过后端传递过来的文
2020-11-04 21:33:11 1421 1
原创 java测试相关的一些整理
文章目录Junitspring的测试mock测试其实是衡量一个程序员编程素养的一个比较重要的维度。做测试其实是对自己写过代码的一个再思考的过程,而不仅仅是发现程序中的bug。之前工作中很少写测试,虽然短期看代码产出量变多了但是长久来看的话其实是一个非常不好的习惯,中间还是吃过几次亏的。JunitJunit是idea自带的测试框架,可以用快捷键shift+command+T快速的创建测试类。需要添加一下pom依赖: <groupId>org.junit.jupiter</group
2020-11-02 16:28:47 246 1
原创 java实现热部署(三):agent instrumentation attach等手段实现方法体级别的热替换
文章目录Instrumentagentagent加载agent premain举例attachattach api原理InstrumentInstrumentation是Java提供的一个来自JVM的接口,该接口提供了一系列查看和操作Java类定义的方法,例如修改类的字节码、向classLoader的classpath下加入jar文件等。使得开发者可以通过Java语言来操作和监控JVM内部的一些状态,进而实现Java程序的监控分析,甚至实现一些特殊功能(如AOP、热部署)。基于 Instrumenta
2020-10-30 21:16:14 2201 1
原创 maven(4):dependencyManagement和dependencies
文章目录一、dependencyManagement应用场景二、dependencies应用场景三、dependencyManagement与dependencies区别一、dependencyManagement应用场景为了项目的正确运行,必须让所有的子模块使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。在我们项目顶层的pom文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显
2020-10-28 21:09:51 168
原创 maven(5):maven构建的生命周期和常用命令
maven 命令的格式mvn [plugin-name]:[goal-name],可以接受的参数如下。-D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试;-P 指定 Profile 配置,可以用于区分环境;-e 显示maven运行出错的信息;-o 离线执行命令,即不去远程仓库更新包;-X 显示maven允许的debug信息;-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次。开发中常用命令mvn compile 编译源代码mvn tes
2020-10-28 20:27:27 157 1
原创 maven(1):maven打包工具
文章目录maven相关的一些知识maven打包插件 maven-assembly-plugin,maven-shade-plugin与maven-assembly-plugin一、介绍二、 打包准备三、 maven-jar-plugin插件(maven默认打包插件)四、 maven-shade-plugin五、 maven-assembly-pluginid与formatsfileSets/fileSetfiles/filedependencySets/dependencySetmaven相关的一些知识
2020-10-28 19:48:00 1439 1
原创 maven(3):manifest和maven
文章目录jar文件常见的 jar工具用法META-INFmaven和MANIFEST.MFjar文件提到 JAR,最先可能想到的就是依赖,比如 fastjson.jar ,它可以作为依赖在项目中来引用,但是不能通过 java -jar 来执行,这种就是非可执行的 JAR。另外一种,比如我们项目打包之后生成的 JAR (当然也可能是 war),我们可以通过 java -jar 来运行程序,我们把它称之为可执行的 JAR。JAR 作用大体可以分为以下几种:用于发布和使用类库作为应用程序和扩展的构建单
2020-10-28 19:46:54 1624 1
原创 maven(2):通过maven来启动main方法
文章目录通过maven命令来运行Java程序main方法一、从命令行运行二、 在pom.xml中指定某个阶段执行三、 在pom.xml中指定某个配置来执行通过maven命令来运行Java程序main方法一、从命令行运行运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译。mvn compile编译完成后,执行exec运行main方法。不需要传递参数:mvn exec:java -Dexec.mainClass="com.vineetma
2020-10-28 19:42:27 821 1
原创 Java实现热部署(二):java类加载过程代码分析
从Launcher看起ExtClassLoader 和 AppClassLoader不是继承关系,而是通过指定 parent 属性来形成的组合模型public Launcher() { Launcher.ExtClassLoader var1; try { // 获取扩展类加载器,getExtClassLoader()是用了double check的单例模式,和之前背过的东西相遇了。 var1 = Launcher.ExtClassLoader.getEx
2020-10-23 15:44:15 269
原创 Java实现热部署(一):类加载机制以及简单热部署的实现
文章目录类加载机制以及热部署的实现类加载器类加载时机与过程类加载器种类类加载器特性双亲委派模型自定义类加载器MyClassLoader测试类通过main方法调用类似springboot启动的方式类加载机制以及热部署的实现回顾一下Java类加载相关的知识点,主要是类加载器,加载模型等。并且实现一个小的Java热部署的demo类加载器类加载时机与过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparatio
2020-10-23 15:41:39 2058 4
原创 markdown标题如何自动加入数字的层级表示
titleabcbdab这种方式通过修改css的方式来完成,但是主流的博客网站都不支持,所以这种方式只能在本地来做。<style type="text/css">h1 { counter-reset: h2counter;}h2 { counter-reset: h3counter;}h3 { counter-reset: h4counter;}h4 { counter-reset: h5counter;}
2020-10-21 21:01:02 1744
原创 方法区和常量池的一些思考
文章目录方法区?JDK7 之前JDK7JDK8 及以后为什么移除永久代?常量池、运行时常量池、字符串常量池常量池分类Class文件常量池运行时常量池(Constant Pool)String常量池,方法区?方法区(Method area)是可供各个线程共享的运行时内存区域,它存储了每一个类的结构信息,相当于把程序中共性的部分抽离出来。例如:运行时常量池(Runtime constant pool)。字段和方法数据、构造函数和普通方法的字节码内容,还包括一些在类、实例、接口初始化时用到的特殊方法。方法
2020-10-21 13:05:15 190
原创 jconsole和jvisualvm的使用
文章目录方法区里面都放了哪些信息?jvisualvm堆内存溢出栈内存溢出死锁检测jconsole方法区里面都放了哪些信息?这个问题其实可以另外一个问法,就是为什么会有方法区这个地方。jvisualvm和jconsole都是JVM自带的强大的JVM分析工具。在命令行输入相应的命令就可以打开用户界面。jvisualvm堆内存溢出直接使用jvisualvm来分析一个堆内存溢出异常。设置堆栈信息,设得小一点:-Xms5m -Xmx5m -XX:+HeapDumpOnOutOfMemoryError。这
2020-10-21 12:20:01 1125
原创 如何写一个vscode插件
文章目录如何写一个vscode插件编写package.jsonextenion.js注册命令编写具体的功能实现。上线本地打包发布到应用市场注册账号创建发布账号发布如何写一个vscode插件先说说为什么会萌生了这个开发vscode插件的想法。我在写markdown的时候需要插入图片。本地写的话只能是本地的URI。如果放到别的平台上对于图片的处理是比较麻烦的。目前的解决方案是存到七牛云或者使用pic等等。但是比较不靠谱而且还要配置比较麻烦。所以我的这个插件就是把图片上传到码云的仓库,返回一个URL直接插入到
2020-10-19 16:55:47 2097 3
原创 Java服务异常分析的几个思路
Java服务异常分析的几个思路Java服务异常分析的几个思路首先使用top命令查看CPU使用情况。jps // 拿到Java进程的$pidtop -Hp $pid // 对单独的进程,显示线程资源消耗情况。top(cpu)、free(内存)、df(磁盘)、dstat(网络流量)、pstack、vmstat、strace(底层系统调用)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-69c9MpPT-1603036255554)(https://gitee.co
2020-10-19 10:34:58 215
原创 Linux 命令行编辑快捷键
Linux 命令行编辑快捷键命令行快捷键:常用:Ctrl A : 移动光标到命令行首Ctrl B : 光标后退Ctrl C : 中断正在当前正在执行的程序Ctrl D : 删除当前光标所在字符Ctrl E : 移动光标到命令行尾Ctrl F : 光标前进Ctrl H : 删除光标的前一个字符Ctrl K :删除光标之后所有字符Ctrl L :清屏Ctrl M :等效于回车Ctrl N : 下一条命令Ctrl P : 上一条命令,可以一直按表示一直往前翻Ctrl Q : 解锁(S
2020-10-18 21:39:48 413
原创 Java服务异常分析的几个思路
Java服务异常分析的几个思路首先使用top命令查看CPU使用情况。jps // 拿到Java进程的$pidtop -Hp $pid // 对单独的进程,显示线程资源消耗情况。top(cpu)、free(内存)、df(磁盘)、dstat(网络流量)、pstack、vmstat、strace(底层系统调用)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ye4cpKjL-1598879455535)(https://raw.githubusercontent.co
2020-08-31 21:11:39 265
原创 分布式锁的实现
https://zhuanlan.zhihu.com/p/76294773https://juejin.im/post/6844903863363829767#heading-1
2020-08-24 17:37:45 108
原创 expect和shell脚本自动登录跳板机和使用AppleScript实现自动登录vpn软件
作为一个程序员,一定要学会“偷懒”,能写程序写脚本处理的一定不要自己手动搞。我就是一个懒人,每次登录公司的跳板机我都无比痛苦,因为这个过程分为下面这些步骤。敲跳板机命令输入密码打开公司软件,获取token,拼在密码后面,回车。选择跳板机类型运行脚本,选择你要跳转到哪台机器。进入了你想要的机器还得运行其他的脚本才能到达你想访问的数据库或者日志什么的。做完这一遍流程简直难受。有时候需要开好几台机器,这些步骤都要重复做!!!作为一个懒人我是受不了的,而且有时候业务比较急,这一套流程下来也挺麻烦的
2020-07-24 22:41:16 1828
原创 使用Java创建一个bitmap
public class BitMap { /** * 创建bitmap数组 */ public byte[] create(int n) { byte[] bits = new byte[getIndex(n) + 1]; for (int i = 0; i < n-1; i++) { add(bits, i); } System.out.println(contains(
2020-07-20 16:05:41 1587
原创 利用Redis解决重复数据时候的并发异常和分布式锁解决方案
最近公司里有一个并发业务。多个线程消费一个kafka数据流,这个kafka数据流里数据的某个字段有重复。需要根据这个字段来做下去重。一开始的方案是利用Redis来实现,先查Redis如果没有的话则setex。后来发现这个并不能保证并发安全性,后来的结果还是有重复的数据。经过分析,发现是有的重复数据相隔极短。比如说A1和A2两条数据。如果A1 get不到,则说明没有,这个时候去写redis。但是还没写进去呢。A2也去get,如果A1还没写进去的话,A2就get不到。这个时候就出现了并发不安全了。解决方案
2020-07-13 12:17:49 1152
原创 使用Python脚本通过typora上传图片到github打造免费私人图床
gitee上传文件apigithub上传文件api这个网址讲了怎么申请token和使用这个api。结合typora可以非常方便的利用GitHub搭建一个私人图床。之前有很多教程是讲的怎么上传到七牛云阿里云等,但是还是不如这个方便而且也非常稳定。所有xxx的地方都需要替换成你的import argparseimport base64import randomimport stringimport sysimport requestsimport jsonfrom urllib.p
2020-06-27 14:57:48 913 1
原创 单例模式引出的一些知识点
文章目录懒汉式1. 单线程2. 直接使用synchronized但是效率低3. 双重检验4. 加volatile5. 静态内部类方法饿汉式1. 饿汉式2. 枚举方法单例模式里面其实也是包含很多知识点的,整理一下有助于知识的融会贯通。单例模式的解决的痛点就是节约资源,节省时间从两个方面看:1.由于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级的对象而言,是很重要的.2.因为不需要频繁创建对象,我们的GC压力也减轻了,而在GC中会有STW(stop the world),从这一方面也节约
2020-06-26 22:57:19 323
原创 LeetCode42接雨水问题
LeetCode42首先,单独来看每一个柱子,每一个柱子上边能乘的雨水和三个东西有关系。左边的最大值和右边的最大值和自己的高度。用公式来表示就是:curWater = Min(lMax, rMax) - curHeight思路清晰了之后,这道题有很多解法。比如比较麻烦的方法先遍历一遍找出最大值,之后在最大值左边和右边遍历。最大值左边的rMax就是这个最大值。这种方法需要遍历两遍。不是最优解。还有一种方法是可以遍历一遍就出结果的。那就是单调栈。单调栈就是维护一个“头重脚轻“的栈。如果有大于栈顶的
2020-06-16 20:45:22 143
原创 Java实现缓存和redis缓存穿透和缓存雪崩的一些问题
文章目录Java缓存的一些使用和体会公司用到的本地缓存Redis的缓存redis缓存穿透为什么会出现后果怎么办1. 缓存空值2. BloomFilter缓存击穿解决方案缓存雪崩解决热点数据集中失效问题Java缓存的一些使用和体会公司用到的本地缓存https://github.com/PhantomThief/zknotify-cache一直以为用的公司提供的本地缓存是封装的别的缓存模块。结果找到GitHub上一看,这个本地缓存是公司大佬写得一个。瞬间佩服之至,先把源码下下来,回头把这个源码分析一波。
2020-05-24 15:54:58 427
翻译 写一个迷你版的Tomcat
看了一个博客,非常有意思,自己动手写一个迷你版的Tomcat。整理一下自己遇到的问题。https://www.jianshu.com/p/dce1ee01fb90下面是一个请求信息GET /world HTTP/1.1Host: localhost:8080Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel M
2020-05-14 19:50:44 279
原创 linux通过crontab设置定时任务
最近工作中遇到一个需求,需要每天十点钟执行一个任务,其实用Java也可以解决,但是Linux有一个内置命令可以轻松地设置定时任务。crontable用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一个任务。crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有*取值范围内的所有数字/ 每过多少个数字-从X到Z,散列数字每1分钟执行一次myCommand* * * * * myCommand或者每天十点执行一次自己写的脚本00
2020-05-13 19:31:42 341
原创 Java中利用反射(或spring)和多态来解决大量swich/case或者if/else的方法
文章目录背景背景工作中经常会有一些swich case或者if else的情况。一般这种情况一开始可能只有几个,但是几次迭代之后可能就会有非常多。代码不易维护而且代码乱糟糟的。我在工作中就遇到了这种情况。大致的业务就是我们需要对接很多家公司,要为每家公司回传一些数据。每家公司的接口和回传方式都不一样。之前的代码是为每一家公司定义一个枚举。然后在回传的时候根据枚举用swich/case来判别回...
2020-05-08 15:56:49 1143 3
原创 几种命令行传输文件到远程服务器的方式。
转载于:https://www.cnblogs.com/magicc/p/6490566.html以前一直在windows下用SSH Secure Shell连接远程服务器,它自带了一个可视化的文件传输工具,跟ftp差不多但是它也存在一个缺陷,不支持编码的选择,遇到utf8就自动乱码了,另外mac下也没有这个工具在mac下我用终端登录上去之后,想传个文件上去就犯愁了,难不成要开个ftp...
2020-05-06 17:25:21 11520
原创 读《java并发编程的艺术》心得1
文章目录wait和notifyCountDownLatchCountDownLatch和join的区别队列同步器自己做一个锁Condition最近在看《Java并发编程的艺术》,看到书里的一些程序片段,发现了一些之前没有仔细思考过的东西,现在记录下来。wait和notifywait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,只有其...
2020-04-19 17:16:36 308
原创 GitHub搜索技巧
在b战看到一个视频,感觉之前GitHub搜索白用了。GitHub官方文档这篇博客整理了上述文档例子:qt in:name:表示在项目名称中搜索 qt 关键字qt in:readme:表示在项目readme中搜索 qt 关键字qt in:description:表示在 项目描述中搜索 qt 关键字qt in:USERNAME:表示在USERNAME中搜索 qt 关键字qt in:OR...
2020-04-13 18:31:45 154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人