Java
文章平均质量分 76
无心六神通
金融科技系统架构师
展开
-
【笔记】单机100万QPS的ID生成器
【笔记】单机100万(百万)QPS的ID生成器原创 2024-08-11 19:14:35 · 689 阅读 · 0 评论 -
【笔记】微信抢红包-3千万的技术架构
【笔记】微信抢红包-3千万的技术架构原创 2024-08-10 18:56:43 · 527 阅读 · 0 评论 -
log4j2配置基础介绍
将日志请求插入应用程序代码需要大量的规划和努力。观察表明,大约4%的代码用于日志记录。因此,即使是中等规模的应用程序,其代码中也会嵌入数千条日志语句。鉴于其数量众多,必须能够在无需手动修改的情况下管理这些日志语句。使用XML、JSON、YAML或属性文件格式的配置文件。通过编程方式创建和实现。通过调用接口中暴露的API将组件添加到默认配置中。通过调用内部Logger类的方法。所有可用格式在功能上是等效的。例如,可以使用属性格式重写XML格式的配置文件,反之亦然,而不会损失任何功能。原创 2024-08-10 11:09:18 · 848 阅读 · 0 评论 -
log4j2的RollingFileAppender
RollingFileAppender 是一种可以根据特定条件滚动生成新日志文件的输出源,它能够有效地管理日志文件,避免单个文件过大,并提供了灵活的文件命名和存储策略。TimeBasedTriggeringPolicy(基于时间的触发策略)SizeBasedTriggeringPolicy(基于大小的触发策略)来格式化日志事件,并且配置了基于时间的触发策略。)创建一个新的日志文件,文件命名模式为。的文件,并在每天(根据日期格式。被配置为将日志写入名为。灵活的文件命名和存储。原创 2024-08-10 10:11:55 · 854 阅读 · 0 评论 -
log4j2的Appender基础介绍
功能:接受对其他 Appender 的引用,并在单独的线程上异步地将日志事件写入这些 Appender。注意,在写入这些 Appender 时发生的异常将对应用程序隐藏。配置参数:要异步调用的 Appender 的名称,可以配置多个。blocking:如果为true,当队列已满时,Appender 将等待直到有空闲位置。如果为false,当队列已满时,事件将被写入错误 Appender(如果配置了)。默认是true。原创 2024-08-10 09:53:51 · 909 阅读 · 0 评论 -
Log4j2中RollingFile的文件滚动更新机制
RollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的Appender。rollover的意思是当满足一定条件(如文件达到了指定的大小,达到了指定的时间)后,就重命名原日志文件进行归档,并生成新的日志文件用于log写入。如果还设置了一定时间内允许归档的日志文件的最大数量,将对过旧的日志文件进行删除操作。RollingFile实现日志文件滚动更新,依赖于TriggeringPolicy和RolloverStrategy。原创 2024-08-10 08:48:10 · 874 阅读 · 0 评论 -
TransitiveThreadLocal线程间可传递的ThreadLocal实现
TransitiveThreadLocal可传递的ThreadLocal实现1. 通过一个全局ThreadLocal视图来缓存jvm所有线程的ThreadLocal2. 通过组合模式复用jdk底层能力,内部成员包含java.lang.InheritableThreadLocal可继承ThreadLocal对象,实现父子线程数据传递原创 2024-07-20 22:58:03 · 313 阅读 · 0 评论 -
Java – Set Classpath from Command Line
Java classpath的基本概念和使用方式原创 2024-07-14 13:50:15 · 982 阅读 · 0 评论 -
Dubbo3源码研读-消费者关键执行链路-IO接收-HTTP/2流的二进制帧
二进制帧累积缓冲区HEADERS 帧DATA 帧END 帧原创 2024-07-11 21:31:39 · 374 阅读 · 0 评论 -
Dubbo3源码研读-消费者关键执行链路-异步发送-写入缓冲队列
Dubbo3源码研读-消费者关键执行链路-异步写入队列原创 2024-07-07 14:13:48 · 258 阅读 · 0 评论 -
一个单例模式中volatile关键字引发的思考
对于JMM的happens-before规则,即对一个volatile修饰的变量的写操作,happens-before随后对这个变量的读操作。而如果我们使用一个基于句柄方式访问对象的编译器(如Symantec JIT),不加volatile关键字可能会导致重排序,返回一个未初始化完成的实例。,其中说到:如果使用Symantec JIT(一个基于句柄方式访问对象的编译器),它编译出来的代码就会发生上述的重排序。// 给客户端调用的,如果初始化未完成,应该返回false,如果完成,返回true。原创 2024-06-30 22:52:45 · 815 阅读 · 0 评论 -
什么是缓存一致性问题,CPU Cache 的读取和写入过程是如何执行的,MESI 缓存一致性协议又是什么?
CPU 缓存一致性(Cache Coherence)问题指 CPU Cache 与内存的不一致性问题。事实上, 在分析缓存一致性问题时,考虑 L1 / L2 / L3 的多级缓存没有意义,所以我们提出缓存一致性抽象模型,只考虑核心独占的缓存。CPU 三级缓存与抽象模型在单核 CPU 中,只需要考虑 Cache 与内存的一致性。但是在多核 CPU 中,由于每个核心都有一份独占的 Cache,就会存在一个核心修改数据后,两个核心 Cache 数据不一致的问题。在修改 Cache 数据后,如何同步回内存?原创 2024-05-21 13:48:29 · 628 阅读 · 0 评论 -
redission实践-踩坑-高并发(百万并发)-内存泄露-OOM
redission实践-踩坑-高并发-内存泄露-OOM-自旋等待原创 2024-06-22 14:33:56 · 475 阅读 · 0 评论 -
effective java —— 终结方法守卫者
effective java —— 终结方法守卫者原创 2024-06-20 23:23:26 · 640 阅读 · 0 评论 -
Java-类加载-ClassLoder-源码-总结
/ 如果上述步骤找到了类,并且 resolve 标记为 true,则在目标 Class 对象上调用 resolveClass(Class) 方法,进入“连接(Linking)”阶段(详见官方文档)入口类在使用过程中如果使用到其它类,会根据类路径查找类文件并逐一加载。因此, jar 包中的类、及类路径中指定的类并不是一次性全部加载到 JVM 内存,而是使用到时才。// 如果父加载器都加载不到,则调用自身的 findClass 方法查找类。// 如果父加载器不为 null,则委托父加载器去加载类。原创 2024-02-18 17:33:06 · 874 阅读 · 0 评论 -
Java-volatile-synchronized-原子性-代码验证
代码多跑几次,输出结果19330。原创 2024-02-18 05:23:46 · 389 阅读 · 0 评论 -
Java-缓存-内存缓存Caffeine基本使用
Caffeine作为当下本地缓存的王者被大量的应用再实际的项目中,可以有效的提高服务吞吐率、qps,降低rt本文将简单介绍下Caffeine的使用姿势。原创 2024-02-17 12:29:46 · 1054 阅读 · 0 评论 -
Java - Object.wait - 虚假唤醒 - volatile - 可见性验证 - 代码示例
在计算机领域,当一个线程在等待条件变量时唤醒,但条件并没有满足时,就会发生虚假唤醒。它被称为虚假是因为线程似乎没有任何原因就被唤醒了。然而,虚假唤醒通常是因为在条件变量被发出信号和等待线程最终运行之间的时间内,另一个线程运行并改变了条件,导致了竞争条件。如果线程第二次被唤醒,它将输掉竞争,从而导致虚假唤醒。原创 2024-02-17 11:54:00 · 382 阅读 · 0 评论 -
Java-Object-wait-notify-notifyAll
使当前线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()方法。换句话说,该方法的行为就像简单地调用wait(0)。当前线程必须拥有该对象的监视器。线程释放该监视器的所有权,并等待,直到另一个线程通过调用notify方法或notifyAll方法来通知等待该对象监视器的线程唤醒。。和都是可能发生,因此应当在循环中使用该方法:while (<条件不成立>)obj.wait();... //根据条件执行适当的操作此方法只能由拥有该对象监视器的线程调用。原创 2024-02-15 10:32:31 · 990 阅读 · 0 评论 -
类加载的三种异常-ClassNotFoundException - ExceptionInInitializerError - NoClassDefFoundError - 代码示例
【代码】类加载的三种异常-ClassNotFoundException - ExceptionInInitializerError - NoClassDefFoundError - 代码示例。原创 2024-02-15 10:00:06 · 330 阅读 · 0 评论 -
Java-代理模式-详解
在 Java 动态代理机制中接口和Proxy类是核心。Proxy,这个方法主要用来生成一个代理对象。Class<?......loader:类加载器,用于加载代理对象。interfaces: 被代理类实现的一些接口;h: 实现了接口的对象;要实现动态代理的话,还必须需要实现来自定义处理逻辑。当我们的动态代理对象调用一个方法时,这个方法的调用就会被转发到实现接口类的invoke方法来调用。/*** 当你使用代理对象调用方法的时候实际会调用到这个方法*/invoke()proxy。原创 2024-02-07 16:15:26 · 710 阅读 · 0 评论 -
Java-语法糖-详解
语法糖(Syntactic Sugar)也称糖衣语法,是英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。有意思的是,在编程领域,除了语法糖,还有语法盐和语法糖精的说法,篇幅有限这里不做扩展了。我们所熟知的编程语言中几乎都有语法糖。作者认为,语法糖的多少是评判一个语言够不够牛逼的标准之一。原创 2024-02-07 16:13:32 · 855 阅读 · 0 评论 -
Java-基础-常见面试题-总结
上篇基础概念与常识# Java 语言有哪些特点?简单易学; 面向对象(封装,继承,多态); 平台无关性( Java 虚拟机实现平台无关性); 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持); 可靠性; 安全性; 支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便); 编译与解释并存;🐛 修正(参见: issue#54原创 2024-02-07 16:09:49 · 903 阅读 · 0 评论 -
Java8-新特性-实战
我们梳理总结的 java 8 新特性有LambdaStreamOptional。原创 2024-02-07 16:02:52 · 906 阅读 · 0 评论 -
Java8-指南-中文翻译
Clock 类提供了访问当前日期和时间的方法,Clock 是时区敏感的,可以用来取代。原创 2024-02-07 15:59:53 · 841 阅读 · 0 评论 -
Java-Wrapper-包装器-JDBC-代理
所有方法接口方法抽象方法boolean> iface)如果对象实现了接口inface,或者直接或间接地为一个iface对象的包装器,则返回true。<T> T返回一个实现接口iface的对象,以允许访问非标准方法,或代理对象没有暴露的标准方法。原创 2024-02-07 15:58:29 · 940 阅读 · 0 评论