自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(76)
  • 资源 (1)
  • 收藏
  • 关注

原创 马上金九银十了,给大家一点面试方面的建议

最后,Hydra在这里先卖个关子,目前正在整理最近遇见的一些高频面试题,已经整理了80多道问题写了2w多字了,近期完善一下后会在公众号第一时间发布,希望能够帮助大家在金九银十都能找到自己心仪的岗位。那么,这次的分享就到这里,我是Hydra,我们下期再见。作者简介,码农参上,一个热爱分享的公众号,有趣、深入、直接,与你聊聊技术。欢迎添加好友,进一步交流。

2023-08-30 15:48:43 174

原创 简化本地Feign调用,老手教你这么玩

分享一下对FeignClient的改造思路,在开发过程中想要让Feign调用稳定访问特定环境,又不想来回修改@FeignClient中的url,通过添加一个配置轻松搞定。

2023-06-12 10:57:11 2438

原创 从实现到原理,聊聊Java中的SPI动态扩展

八股文背多了,相信大家都听说过一个词,SPI扩展。那么SPI扩展究竟是个啥,是怎么实现的,咱们来详细盘一盘它!

2023-02-16 13:47:41 541 1

原创 发布了一个jar包到中央仓库,我的心好累…

这里的坑,都被我踩平了!

2023-01-09 09:41:06 596 1

原创 Paxos分布式系统共识算法?我愿称其为点歌算法…

24张图配合生动示例,用讲故事的方式讲明白Paxos算法的核心步骤。

2022-10-24 15:26:53 147

原创 魔改xxl-job,彻底告别手动配置任务

xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单,但是苦于手动注册任务久矣,今天就来魔改一下,实现任务的自动注册!

2022-10-11 10:03:48 768

原创 凭借SpringBoot整合Neo4j,我理清了《雷神》中错综复杂的人物关系

看《雷神4》前,你需要了解的阿斯加德的人的爱恨情仇…我用springboot加图数据库的方式帮你梳理清楚!

2022-09-19 10:44:29 310

原创 今天不写代码,聊聊热门的知识图谱

知识图谱的概念诞生于2012年,由谷歌公司首先提出。大家都知道,谷歌是做搜索引擎的,所以他们最早提出了后,首先利用知识图谱技术改善了搜索引擎核心。注意上面的说法,虽然知识图谱诞生于2012年,但其实在更早的时间它还有另外一个名字,那就是语义。那么语义又是什么呢?引用《统计自然语言处理基础》中的两句话来解答这个问题:语义可以分成两部分,研究单个词的语义(即词义)以及单个词的含义是怎么联合起来组成句子(或者更大的单位)的含义。语义研究的是词语的含义、结构和说话的方式。那么,知识图谱究竟是个什么东西呢?

2022-09-14 10:29:23 455

原创 MyBatis-Plus联表查询的短板,终于有一款工具补齐了

mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到左右连接,你还是得老老实实的打开xml文件,手写上一大段的sql语句,今天就来看看这款工具如何应对吧。......

2022-07-25 10:52:09 792

原创 164页,2022新版《Java面试手册》来了

超详细的面试资料~

2022-07-13 09:49:02 296

原创 没想到吧,Spring中还有一招集合注入的写法

Spring作为项目中不可缺少的底层框架,提供的最基础的功能就是的管理了。的注入相信大家都比较熟悉了,但是有几种不太常用到的集合注入方式,可能有的同学会不太了解,今天我们就通过实例看看它的使用...

2022-07-06 11:21:27 184

原创 如何写出同事看不懂的Java代码?

前几天,正巧赶上组里代码review,一下午下来,感觉整个人都血压拉满了。

2022-06-21 08:37:10 874

原创 实战派 | Java项目中玩转Redis6.0客户端缓存

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是Hydra。在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存client-side caching,通过telnet连接模拟客户端,测试了三种客户端缓存的工作模式,这篇文章我们就来点硬核实战,看看客户端缓存在java项目中应该如何落地。铺垫首先介绍一下今天要使用到的工具Lettuce,它是一个可伸缩线程安全的redis客户端。多个线程可以共享同一个RedisConnection,利用nio框架Netty来高效地.

2022-05-17 08:54:02 794 1

原创 高端程序员上班摸鱼指南

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是Hydra。虽然说五一假期结束了,不过我相信许多小伙伴们都和我一样,虽然人来上班了,但是心还留在了家里,需要一段时间从假期余额用尽的悲伤中释怀一下…所以,我昨天摸了一天鱼…就像老话说的那样,上班认真工作只能算用劳动从老板那里换取报酬,只有摸鱼才能叫赚老板的钱…我都已经给公司创造了那么多价值了,所以赚老板一点钱,应该没有特别过分吧?当然,上班用手机刷剧、打游戏这种摸鱼方式还是太低端了,不仅低着头对颈椎不好还容易被老板抓到,.

2022-05-07 09:58:31 2863 1

原创 引入『客户端缓存』,Redis6算是把缓存玩明白了…

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是没更新就是在家忙着带娃的Hydra。在前面介绍两级缓存的文章中,我们总共给出了4种实现方案,在项目中整合了本地缓存Caffeine和远程缓存Redis,将应用的性能从仅适用单独远程缓存的基础上,再次提高了一个层次。而今天Hydra要和大家分享的技术,在思想上和上面两级缓存有些类似,不过不需要借助其他本地缓存中间件,只使用Redis自身服务端和客户端就可以实现。这就是Redis6中的客户端缓存Client-side cachin.

2022-04-29 11:28:23 415

原创 Redis6通信协议升级至RESP3,一口气看完13种新数据类型

在前面的文章 Redis:我是如何与客户端进行通信的 中,我们介绍过RESP V2版本协议的规范,RESP的全程是Redis Serialization Protocol,基于这个实现简单且解析性能优秀的通信协议,Redis的服务端与客户端可以通过底层命令的方式进行数据的通信。随着Redis版本的不断更新以及功能迭代,RESP V2协议开始渐渐无法满足新的需求,为了适配在Redis6.0中出现的一些新功能,在它的基础上发展出了全新的下一代RESP.

2022-04-24 09:34:50 1170

原创 编译实战 | 手摸手教你在Windows环境下运行Redis6.x

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra。不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看只支持linux系统,无奈要么启动虚拟机、要么装在云服务器上。这不前几天又是这样,刚想用一下Redis 6.x版本来尝试一下新特性,打开官网一看,好家伙我直呼内行,果然不支持windows系统:不过虽然redis的官网上不提供windows版本下载,但是这也难不倒我这个面向百度编程的小能手,一番查找后.

2022-04-11 09:43:20 1480

原创 基于Spring接口,集成Caffeine+Redis两级缓存

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。在上一篇文章Redis+Caffeine两级缓存,让访问速度纵享丝滑中,我们介绍了3种整合Caffeine和Redis作为两级缓存使用的方法,虽然说能够实现功能,但实现手法还是太粗糙了,并且遗留了一些问题没有处理。本文将在上一篇的基础上,围绕两个方面进行进一步的改造:JSR107定义了缓存使用规范,spring中提供了基于这个规范的接口,所以我们可以直接使用spring中的接口进行Caffeine和Redis两级缓存的整合改造在分布式环境下,.

2022-04-06 09:50:09 572 1

原创 Redis+Caffeine两级缓存,让访问速度纵享丝滑

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如Guava cache或Caffeine,从而再次提升程序的响应速度与服务性能。于是,就产生.

2022-03-28 08:37:36 487

原创 Guava中这些Map的骚操作,让我的代码量减少了50%

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。今天Hydra要给大家分享的就是Guava中封装的一些关于Map的骚操作,在使用了这些功能后,不得不说一句真香。先引入依赖坐标,然后开始我们的正式体验吧~<dependency> &lt.

2022-03-15 09:27:11 315

原创 泛型的类型擦除后,fastjson反序列化时如何还原?

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。哈喽大家好啊,我是Hydra~ 在前面的文章中,我们讲过Java中泛型的类型擦除,不过有小伙伴在后台留言提出了一个问题,带有泛型的实体的反序列化过程是如何实现的,今天我们就来看看这个问题。铺垫我们选择fastjson来进行反序列化的测试,在测试前先定义一个实体类:@Datapublic class Foo<T> { private String val; private T obj;}如果大家对泛型的类型擦.

2022-03-09 13:24:30 527 1

原创 JDK动态代理为什么必须要基于接口?

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。前几天的时候,交流群里的小伙伴抛出了一个问题,为什么JDK的动态代理一定要基于接口实现呢?好的安排,其实要想弄懂这个问题还是需要一些关于代理和反射的底层知识的,我们今天就盘一盘这个问题,走你~一个简单的例子在分析原因之前,我们先完整的看一下实现jdk动态代理需要几个步骤,首先需要定义一个接口:public interface Worker { void work();}再写一个基于这个接口的实现类:public class .

2022-02-24 10:42:08 3623 3

原创 Java不支持协程?那是你不知道Quasar~

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。在编程语言的这个圈子里,各种语言之间的对比似乎就一直就没有停过,像什么古早时期的"PHP是世界上最好的语言"就不提了,最近我在摸鱼的时候,看到不少文章都在说"Golang性能吊打Java"。作为一个写了好几年java的javaer,这我怎么能忍?于是在网上看了一些对比golang和java的文章,其中戳中java痛点、也是golang被吹上天的一条,就是对多线程并发的支持了。先看一段描述:Go从语言层面原生支持并发,并且使用简单,Go语言中的并.

2022-02-23 09:54:11 955

原创 5道面试题,拿捏String底层原理~

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。String字符串是我们日常工作中常用的一个类,在面试中也是高频考点,这里Hydra精心总结了一波常见但也有点烧脑的String面试题,一共5道题,难度从简到难,来一起来看看你能做对几道吧。本文基于jdk8版本中的String进行讨论,文章例子中的代码运行结果基于Java 1.8.0_261-b12第1题,奇怪的 nullnull下面这段代码最终会打印什么?public class Test1 { private static .

2022-02-18 09:38:13 539

原创 超硬核,8个类手写一个配置中心

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。配置中心是我们平常使用微服务架构时重要的一个模块,常用的配置中心组件也比较多,从早期的Spring Cloud Config,到Disconf、Apollo、Nacos等,它们支持的功能、产品的性能以及给用户的体验也各有不同。虽然说功能上有不少差异,但是它们解决的最核心问题,无疑是配置文件修改后的实时生效,有时候在搬砖之余Hydra就在好奇实时生效是如何实现的、如果让我来设计又会怎么去实现,于是这几天抽出了点空闲时间,摸鱼摸出了个简易版的单机配置.

2022-02-15 13:51:07 250

原创 5种高大上的yml文件读取方式,你知道吗?

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。在上一篇文章中,我们从源码角度分析了SpringBoot解析yml配置文件的全流程,那么我们今天就来点实战,总结一下除了烂大街的@Value和@ConfigurationProperties外,还能够通过哪些方式,来读取yml配置文件的内容。1、Environment在Spring中有一个类Environment,它可以被认为是当前应用程序正在运行的环境,它继承了PropertyResolver接口,因此可以作为一个属性解析器使用。先创建一个y.

2022-01-21 09:40:41 1510

原创 18张图,详解SpringBoot解析yml全流程

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。前几天的时候,项目里有一个需求,需要一个开关控制代码中是否执行一段逻辑,于是理所当然的在yml文件中配置了一个属性作为开关,再配合nacos就可以随时改变这个值达到我们的目的,yml文件中是这样写的:switch: turnOn: on程序中的代码也很简单,大致的逻辑就是下面这样,如果取到的开关字段是on的话,那么就执行if判断中的代码,否则就不执行:@Value("${switch.turnOn}")private String o.

2022-01-14 11:18:44 962

翻译 听老外吐槽框架设计,Why I Hate Frameworks?

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。Hello,小伙伴们,今天不聊技术,分享点有意思的东西。前段时间,表弟给我发过来一篇老外写的文章,以略带讽刺的对话方式调侃了自己对框架的看法,我在读了一下以后也感觉比较有趣,这里分享给大家。作者Benji Smith,可惜目前在这位老哥的个人网站上已经找不到这篇文章的原文了,只剩下了一段自我介绍。这里最后在国内的技术论坛里找到了英文原文和其他的大佬的翻译,这里我参考了一些版本的译文,配合自己的理解重新进行了一波翻译,并添加了一些插图,方便大家更容.

2021-12-06 08:47:48 305 8

原创 面试官又整新活,居然问我for循环用i++和++i哪个效率高?

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。前几天,一个小伙伴告诉我,他在面试的时候被面试官问了这么一个问题:在for循环中,到底应该用 i++ 还是 ++i ?听到这,我感觉这面试官确实有点不按套路出牌了,放着好好的八股文不问,净整些幺蛾子的东西。在临走的时候,小伙伴问面试官这道题的答案是什么,面试官没有明确告诉答案,只是说让从程序执行的效率角度自己思考一下。好吧,既然这个问题被抛了出来,那我们就见招拆招,也给以后面试的小伙伴们排一下坑。思路前面提到,这个搞事情的面试官说要从.

2021-11-24 11:26:10 1010 3

原创 偷天换日,用JavaAgent欺骗你的JVM

原创:微信公众号 码农参上(ID:CODER_SANJYOU),欢迎分享,转载请保留出处。熟悉Spring的小伙伴们应该都对aop比较了解,面向切面编程允许我们在目标方法的前后织入想要执行的逻辑,而今天要给大家介绍的Java Agent技术,在思想上与aop比较类似,翻译过来可以被称为Java代理、Java探针技术。Java Agent出现在JDK1.5版本以后,它允许程序员利用agent技术构建一个独立于应用程序的代理程序,用途也非常广泛,可以协助监测、运行、甚至替换其他JVM上的程序,先从下面这.

2021-11-17 09:02:53 1047

原创 动图图解GC算法 - 让垃圾回收动起来

原创:码农参上(微信公众号ID:CODER_SANJYOU),欢迎分享,转载请保留出处。提到Java中的垃圾回收,我相信很多小伙伴和我一样,第一反应就是面试必问了,你要是没背过点GC算法、收集器什么的知识,出门都不敢说自己背过八股文。说起来还真是有点尴尬,工作中实际用到这方面知识的场景真是不多,并且这东西学起来也很枯燥,但是奈何面试官就是爱问,我们能有什么办法呢?既然已经卷成了这样,不学也没有办法,Hydra牺牲了周末时间,给大家画了几张动图,希望通过这几张图,能够帮助大家对垃圾收集算法有个更好的理.

2021-09-27 10:19:41 1348

原创 同事删库跑路后,我连表名都不能修改了?

原创:码农参上(微信公众号ID:CODER_SANJYOU),欢迎分享,转载请保留出处。事情是这样的,前几天隔壁部门的哥们在生产环境的数据库上,执行了一下drop命令,好嘛,活生生的删库跑路的例子居然真的在我身边发生了,好在运维同学给力,后来恢复了数据。事后听说这哥们虽然没被开除,但也吃了个公司的警告。再然后,运维那边回收了所有环境下数据库的drop命令的权限,甚至包括了开发环境,本来觉得对我们也没啥影响,一般我们也没有啥需要删表的需求。但是隔了没几天,我在重命名一个表的时候,突然弹出了这样一个报错.

2021-09-18 09:30:39 385

原创 面试官:Redis的事务满足原子性吗?

原创:码农参上(微信公众号ID:CODER_SANJYOU),欢迎分享,转载请保留出处。谈起数据库的事务来,估计很多同学的第一反应都是ACID,而排在ACID中首位的A原子性,要求一个事务中的所有操作,要么全部完成,要么全部不完成。熟悉redis的同学肯定知道,在redis中也存在事务,那么它的事务也满足原子性吗?下面我们就来一探究竟。什么是Redis事务?和数据库事务类似,redis事务也是用来一次性地执行多条命令。使用起来也很简单,可以用MULTI开启一个事务,然后将多个命令入队到事务的队列中.

2021-09-09 10:16:49 807

原创 眼见为实,看看MySQL中的隐藏列

在介绍mysql的多版本并发控制mvcc的过程中,我们提到过mysql中存在一些隐藏列,例如行标识、事务ID、回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢?本文我们就来重点讨论一下诸多隐藏列中的行标识DB_ROW_ID,实际上,将行标识称为隐藏列并不准确,因为它并不是一个真实存在的列,DB_ROW_ID实际上是一个非空唯一列的别名。在拨开它的神秘面纱之前,我们看一下官方文档的说明:If a table has a PRIMARY KEY or UNIQUE NOT N

2021-09-01 13:06:47 1481 1

原创 面试官:说说什么是泛型的类型擦除?

先看一道常见的面试题,下面的代码的执行结果是什么?public static void main(String[] args) { List<String> list1=new ArrayList<String>(); List<Integer> list2=new ArrayList<Integer>(); System.out.println(list1.getClass()==list2.getClass());}首先,我

2021-08-24 09:31:34 676

原创 String s=“a“+“b“+“c“,到底创建了几个对象?

首先看一下这道常见的面试题,下面代码中,会创建几个字符串对象?String s="a"+"b"+"c";如果你比较一下Java源代码和反编译后的字节码文件,就可以直观的看到答案,只创建了一个String对象。估计大家会有疑问了,为什么源代码中字符串拼接的操作,在编译完成后会消失,直接呈现为一个拼接后的完整字符串呢?这是因为在编译期间,应用了编译器优化中一种被称为常量折叠(Constant Folding)的技术,会将编译期常量的加减乘除的运算过程在编译过程中折叠。编译器通过语法分析,会将常量表达

2021-08-16 09:58:16 2377

原创 简单的Postman,还能玩出花?

Postman是一款我们在工作中使用频率非常高的API调试工具,估计很多童鞋在使用它时也比较粗暴,填好接口地址、参数,直接send就完事了,估计大家要说了,这么简单的东西还能玩出什么花来。今天就和大家安利几个非常实用、但是可能一直被忽视的功能,用完之后,简直不要太香!环境变量我们通过一个例子来看一下环境变量的用法,在一个项目的生命周期中,可能会有开发环境、测试环境、预上线环境、线上环境等众多的不同环境,这时候就可以通过环境变量来管理接口的地址以及端口。点击左侧的Environments,系统中默认已经

2021-08-06 11:00:19 321

原创 Java代码中,如何监控Mysql的binlog?

最近在工作中,遇到了这样一个业务场景,我们需要关注一个业务系统数据库中某几张表的数据,当数据发生新增或修改时,将它同步到另一个业务系统数据库中的表中。一提到数据库的同步,估计大家第一时间想到的就是基于binlog的主从复制了,但是放在我们的场景中,还有几个问题:第一,并不是需要复制所有表的数据,复制对象只有少量的几张表第二,也是比较麻烦的,两个业务系统数据库表结构可能不一致。例如,要同步数据库1的A表中的某些字段到数据库2的B表中,在这一过程中,A表和B表的字段并不是完全相同这样的话,我们只能通

2021-08-04 13:18:27 419

原创 面试侃集合 | DelayQueue篇

面试官:好久不见啊,上次我们聊完了PriorityBlockingQueue,今天我们再来聊聊和它相关的DelayQueue吧。Hydra:就知道你前面肯定给我挖了坑,DelayQueue也是一个无界阻塞队列,但是和之前我们聊的其他队列不同,不是所有类型的元素都能够放进去,只有实现了Delayed接口的对象才能放进队列。Delayed对象具有一个过期时间,只有在到达这个到期时间后才能从队列中取出。面试官:有点意思,那么它有什么使用场景呢?Hydra:不得不说,由于DelayQueue的精妙设计,

2021-06-29 14:47:00 167

原创 Redis:我是如何与客户端进行通信的

江湖上说,天下武功,无坚不摧,唯快不破,这句话简直是为我量身定制。我是一个Redis服务,最引以为傲的就是我的速度,我的 QPS 能达到10万级别。在我的手下有数不清的小弟,他们会时不时到我这来存放或者取走一些数据,我管他们叫做客户端,还给他们起了英文名叫 Redis-client。有时候一个小弟会来的非常频繁,有时候一堆小弟会同时过来,但是,即使再多的小弟我也能管理的井井有条。有一天,小弟们问我。想当年,为了不让小弟们拖垮我傲人的速度,在设计和他们的通信协议时,我绞尽脑汁,制定了下

2021-06-22 09:59:14 217

CoolEdit2009

关于做手机游戏的作图软件,简单易学,可导出java资源文件

2010-07-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除