随笔分类 -  java

something about javaSE and javaEE
摘要:一、背景 最近前端反应开发环境有时候调接口会很慢,原因是有开发图方便将本地服务注册到开发环境,请求路由到开发本地导致, 为了解决该问题想到可以通过标签路由的方式避免该问题,实现前端联调和开发自测互不干扰。 该方案除了用于本地调试,还可以用于用户灰度发布。 二、实现方案 关于负载均衡,低版本的Spri 阅读全文
posted @ 2025-02-14 20:44 烟味i 阅读(184) 评论(0) 推荐(0) 编辑
摘要:一、背景 前几天下午飞书告警群里报起了java.lang.OutOfMemoryError: unable to create new native thread告警,看见后艾特了对应的项目负责人但是负责人说没时间,无奈自己亲自上阵。 二、事情经过 2.1 问题排查 从报错信息就可以看出是服务申请不 阅读全文
posted @ 2024-03-01 10:01 烟味i 阅读(1717) 评论(2) 推荐(12) 编辑
摘要:一、背景 业务在群里反馈编辑结算单时有些账单明细查不出来,但是新建结算单可以,我第一反应是去测试环境试试有没有该问题,结果发现没任何问题!!! 然后我登录生产环境编辑业务反馈有问题的结算单,发现查询接口直接504网关超时了,此时心里已经猜到是代码性能问题导致的,接来下就把重点放到排查接口超时的问题上 阅读全文
posted @ 2024-01-10 13:45 烟味i 阅读(1586) 评论(8) 推荐(5) 编辑
摘要:一、前言 在之前的文章《自定义ConditionalOnXX注解》中,介绍了Conditional注解的实现原理和实现自定义Conditional注解的基础方法,但是有些场景我们需要用一个ConditionalOnXX注解来实现==多条件的与(AND)或(OR)非(NOT)逻辑==,本文就是介绍这种 阅读全文
posted @ 2023-01-31 21:06 烟味i 阅读(147) 评论(0) 推荐(0) 编辑
摘要:一、背景 之前写了一篇《手写事件发布订阅框架》,虽然可以用但代码写的比较粗糙,且存在优化的空间,于是对其进行了重构主要包括以下几点: 面向接口编程,包结构更加清晰。 框架改成spring-boot-starter的形式实现即插即用。 对核心类EventManager的代码进行了部分剥离,使其更符合职 阅读全文
posted @ 2022-05-09 23:04 烟味i 阅读(267) 评论(0) 推荐(0) 编辑
摘要:一、前言 ​ 发布订阅模式也叫观察者模式,利用该模式可以进行代码解耦,很多框架都用到该设计模式,比如Spring的事件机制,guava的EventBus(事件总线)等,不清楚观察者模式的话可以查看本人之前写的博客《设计模式之观察者模式》。 ​ 为了更好的了解现有的事件框架实现原理,便手写了一个简单的 阅读全文
posted @ 2022-04-23 16:46 烟味i 阅读(615) 评论(0) 推荐(1) 编辑
摘要:Hibernate-Validator框架提供了一系列的注解去校验字段是否符合预期,如@NotNull注解可以校验字段是否为null,如果为null则抛出对应的异常提示信息,通过注解大大减少了我们日常的开发工作量。包括流行的spring-boot-starter-validation,底层也是靠Hibernate-Validator实现的。 ​ 但是在实际的开发中,现有的注解可能不能满足我们的校验需求,Hibernate-Validator框架就贴心的提供了扩展,通过自定义校验注解来封装我们自己的校验逻辑。 阅读全文
posted @ 2021-11-12 23:12 烟味i 阅读(1011) 评论(0) 推荐(0) 编辑
摘要:一、前言 ​ 最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。折腾了大概三周时间,网关ship-gate核心功能基本都已完成,写这篇文章是记录我是如何从零开始手写一个网关的。 二、设计 2.1技术选型 网关是所有请求的入口,所以要求有很高的吞吐量,为了实 阅读全文
posted @ 2021-01-02 20:52 烟味i 阅读(3976) 评论(9) 推荐(4) 编辑
摘要:一、简介 在微服务架构中,我们会有这样的需求,A服务调用B服务,B服务调用C服务,ABC服务都需要用到当前用户上下文信息(userId、orgId等),那么如何实现呢? 方案一: 拦截器加上ThreadLocal实现,但是如果在这次请求中创建了一个新的线程就拿不到了,也就是无法跨线程传递数据。 方案 阅读全文
posted @ 2019-08-31 22:03 烟味i 阅读(3250) 评论(4) 推荐(1) 编辑
摘要:一、背景 传统的单体应用基于cookie-session的身份验证流程一般是这样的: 用户向服务器发送账户和密码。 服务器验证账号密码成功后,相关数据(用户角色、登录时间等)都保存到当前会话中。 服务器会生成一个sessionid返回浏览器,浏览器把这个sessionid存储到cookie当中。 以 阅读全文
posted @ 2019-08-26 16:48 烟味i 阅读(335) 评论(1) 推荐(0) 编辑
摘要:一、前言 心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。 我们用到的很多框架都用到了心跳检测,比如服务注册到 Eureka Server 之后会维护一个心跳连接,告诉 Eureka Server 自己还活着。本文就是利用 Netty 来实现心跳检测, 阅读全文
posted @ 2019-05-24 13:37 烟味i 阅读(2584) 评论(0) 推荐(0) 编辑
摘要:一、使用场景 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多 阅读全文
posted @ 2019-02-16 19:56 烟味i 阅读(889) 评论(0) 推荐(0) 编辑
摘要:一、读取配置文件的四种方式 这四种配置文件放置方式的读取优先级依次递减,具体可以查看官方文档。 1.1jar包同级目录下的config文件夹里的配置文件 其实我以前就见过这种方式了,只是不知道怎么做的,这样便于修改服务器上的配置文件。 可以使用maven-source-plugin插件,然后运行命令 阅读全文
posted @ 2018-10-27 11:31 烟味i 阅读(7140) 评论(0) 推荐(0) 编辑
摘要:一、gRPC简介 在介绍gRPC之前先说一下RPC(Remote Procedure Call),也叫远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。相比HTTP协议来说,它主要是基于TCP/IP协议的的,传输效率更高,能够跨语言,典型的RPC框架有RM 阅读全文
posted @ 2018-09-15 14:31 烟味i 阅读(1540) 评论(0) 推荐(0) 编辑
摘要:事故背景 今天客户说风控项目有个别用户查询不到数据不是报错就是一直卡在那里,我就去那个接口看了下。 一看项目日志今天的都几个g了,平常也就几百兆吧,很明显出了问题。 请求接口后使用命令tail -f 实时查看日志,发现有个东西一个在刷屏,几分钟了还在刷。 把日志切割后查看还发现了堆内存溢出错误,使用 阅读全文
posted @ 2018-07-12 17:27 烟味i 阅读(11968) 评论(2) 推荐(0) 编辑
摘要:复习时看见了就记录一下吧。 折半查找,也称二分查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 阅读全文
posted @ 2018-05-10 11:43 烟味i 阅读(354) 评论(0) 推荐(0) 编辑
摘要:1.什么是注解 注解是那些插入到源代码中使用其他工具可以对其进行处理的标签。下面就是一个注解的使用示例,注解事件处理器。 运行后点击三个按钮可以分别改变其背景色, 2.注解语法 其中每个元素声明都可以是以下其中一种形式: 或 所有注解都隐式地扩展自java.lang.annotation.Annot 阅读全文
posted @ 2018-04-27 22:13 烟味i 阅读(215) 评论(0) 推荐(0) 编辑
摘要:1.Apache Kafka - 简介 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失。 Kafka构建在Zoo 阅读全文
posted @ 2018-04-04 21:27 烟味i 阅读(7217) 评论(0) 推荐(0) 编辑
摘要:闭锁是一种同步工具类,可以延迟线程的进度直到其达到终止状态。 作用:相当于一扇门,在到达结束状态之前,这扇门一直是关闭的,并且没有任务线程能够通过,当到达结束状态时,这扇门会打开并允许所有的线程通过,并且将不会再改变状态,因此这扇门将永远保持打开状态。闭锁可以用来确保某些活动直到其他活动都完成后才继 阅读全文
posted @ 2018-03-02 15:08 烟味i 阅读(164) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
🚀
回顶
收起