Java
文章平均质量分 61
Java实践与理论知识分享
即将奔跑的蜗牛
我就爱这个调调
展开
-
Log4J2源码系列(十一) - 从2.6版本影响到现在的bug, 使用JMX监控的可以看看
Log4J2从2.6版本至今未解决的bug,配置热更新通知事件属性不正确的bug原创 2020-04-23 22:11:01 · 1003 阅读 · 0 评论 -
Log4J2源码系列(十) - 内部日志StatusLogger的实现原理
从源码角度分析Log4J2的内部日志Status的作用以及实现原理原创 2020-03-29 11:12:12 · 1718 阅读 · 0 评论 -
Log4J2源码系列(九) - 没有配置文件也能打印日志? 默认配置怎么创建的?
自定义配置文件解析失败,为什么应用程序还是能打印日志呢?从源码的角度来分析默认配置创建的时机,作用 以及默认配置的关键配置项原创 2020-03-28 07:17:35 · 978 阅读 · 0 评论 -
Log4J2源码系列(八) -NullConfuguration是什么?用来做什么的呢?
分析Log4J2中的NullConfiguration的创建时机、作用,以及内部的构造原创 2020-03-27 18:41:25 · 222 阅读 · 0 评论 -
Log4J2(七) - 观察者模式-配置/脚本热更新是怎么实现的?-源码分析
源码解析,详细介绍Log4J2中对配置以及脚本的热更新原创 2020-03-23 10:29:20 · 615 阅读 · 0 评论 -
SLF4J(七) - 总结
经过这段时间的学习,简单总结一下。最核心的接口:SLF4JServiceProvider,日志实现类通过实现这个接口来绑定核心功能的实现。SLF4J中有三个核心接口:ILoggerFactory: 获取loggerIMarkFactory:获取marker,提供对marker的管理功能MDCAdapter:提供日志系统的context功能其他重要的类:Logging...原创 2020-03-16 12:19:07 · 473 阅读 · 0 评论 -
SLF4J(六) - MDC/MDCAdapter是什么?
是什么?MDC(Mapped Diagnostic Context,映射调试上下文)是日志系统提供的一种方便在多线程条件下记录日志的功能有什么用?一个常用的场景就是Web服务器中给每个请求都给一个独特的请求id,在合理配置日志的layout之后,所有的日志都会打印这个请求id,这样一个请求下的所有日志信息都可以很方便的找到。一个简单的理解可以认为是全局的marker信息,调用的时候不用类似...原创 2020-03-13 19:03:20 · 3212 阅读 · 0 评论 -
SLF4J(五) - Marker使用的误区- 源码分析
在之前的文章中我也分享过,如果去使用Marker标记不同的日志来源, 用来简单的做日志分类, 但最近发现使用的过程中有误区,可能会导致以后的替换日志实现框架的时候出现不兼容的问题。以Log4j的实现为例误区使用日志实现类的Marker来创建Marker,如以下的代码:import org.apache.logging.log4j.MarkerManager;import org.apac...原创 2020-03-13 14:27:09 · 5887 阅读 · 0 评论 -
SLF4J(四)-工厂模式/抽象工厂模式在SLF4J中的实践
早前看设计模式的时候,发现这套东西根本不太适合小项目或者项目开发初期,但最近发现SLF4J这个项目其实也挺小的,但是设计模式玩的挺溜的,然后就想着总结一下,这个项目中用到的设计模式。工厂模式定义:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...原创 2020-03-12 14:23:21 · 883 阅读 · 0 评论 -
SLF4J(三) NOP Logger是怎么实现的呢?源码分析
文章目录情景代码解析NOPServiceProviderNOPLoggerFactoryNOPMDCAdapterBasicMarkerFactory总结情景我在之前的文章有提到过这个NOP service provider, 这种provider什么都不做,把日志打到/dev/null, 那它是怎么实现的呢?代码解析NOPServiceProvider我们可以看到这个类除去VERSIO...原创 2020-03-09 18:56:42 · 1518 阅读 · 0 评论 -
SLF4J(二) - SLF4J绑定了多个实现类的错误是怎么一回事儿?源码解析
情景在项目配置的初期,我们经常可以看到这样的错误:SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/Users/liyi/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.j...原创 2020-03-03 17:18:40 · 2018 阅读 · 0 评论 -
SFL4J(一) - Java中那些剪不断理还乱的日志组件之SFL4J
对Java中常用日志组件的关系梳理,以及SLF4J框架的简单介绍原创 2020-03-03 14:58:47 · 435 阅读 · 0 评论 -
log4j2(四) - 日志位置是怎么获取到的?有什么影响?
日志的位置信息包含哪些?%C or $class:类名%F or %file:文件名%L or %line:打印日志的方法所在文件的行数%M or %method:打印日志的方法名%l or %location:包含以上的位置信息打印日志位置有什么影响?官方文档上强调了三遍,位置使用要慎用慎用。相比于不使用位置信息:对于同步日志来说,速度要慢3~5倍对于异步日志来说,速度要...原创 2020-03-16 15:56:03 · 1163 阅读 · 0 评论 -
log4j2(三) 如何通过类名获取到logger呢?logger与loggerConfig是什么关系?-源码解析
文章目录情景解析从例子说起从LoggerFactory获取logger从LoggerContext中获取logger创建Logger真正的主角LoggerConfig获取LoggerConfig流程图验证小结情景之所以想写这篇文章是因为经常看到一些相关联的问题:怎么有这么多非本项目的log出现? 譬如引入了其他的sdk,他们又很无节操的打了很多日志。怎么去除不必要的包的日志?为什么lo...原创 2020-03-04 17:45:12 · 3584 阅读 · 2 评论 -
log4j2(二) 自定义filter-ThreadFilter根据线程名过滤日志
背景项目最新接入了一个sdk,但是这个SDK打印了很多无关紧要的DEBUG日志,造成了严重的信息干扰,现在想去掉这个SDK中指定线程的DEBUG日志解决方案使用Log4j2的插件扩展功能自定义一个插件-ThreadFilter, 参考链接中的Filter部分代码示例Java代码package com.test.filter;import org.apache.commons.lan...原创 2020-02-28 10:29:54 · 3117 阅读 · 0 评论 -
log4j2(一) MarkerFilter的应用场景及使用示例
背景有一个系统是负责从消息队列收集日志的,现在系统收集到的日志能和这个系统本身的日志分开使用log4j2 <!--log4j2依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifac...原创 2020-02-27 23:07:58 · 5597 阅读 · 0 评论 -
Log4J2(六) - 配置工厂ConfigurationFactory的初始化过程-源码解析
分析Log4J2的配置工厂实例化以及初始化过程原创 2020-03-19 14:42:49 · 2183 阅读 · 0 评论 -
Log4J2(五) - 配置文件是怎么获取的?
简单解析log4j2的配置文件获取的过程,有图有真相。原创 2020-03-18 14:10:22 · 1519 阅读 · 2 评论 -
Java并发之线程(二)-线程状态流转
线程状态流转通用的线程状态流转(参考极客时间-王宝令《Java并发编程实战》-09 | Java线程(上):Java线程的生命周期)Java线程状态流转(参考《Java并发编程的艺术》), Java的线程状态做了细化,将五态模型中的休眠状态细化变成了WAIT(等待)TIMED_WAITING(超时等待)BLOCKED(阻塞)线程状态的定义参考Java源代码Threa...原创 2020-02-03 17:12:51 · 358 阅读 · 0 评论 -
Java并发之ThreadLocal
概念ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。作用ThreadLocal允许我们将每个线程 ID 与相应对象的值相关联。 它允许我们为不同的线程存储不同的对象,并维护哪个对象对应于哪个线程。它有 set ...原创 2020-02-03 16:34:28 · 260 阅读 · 0 评论 -
Java并发之线程(一)
Java中的线程从哪儿来? 协程与线程相比有什么优势?为什么Java里边不用协程呢?原创 2020-01-31 16:10:44 · 112 阅读 · 0 评论 -
SSH配置中问题 Unable to instantiate Action
问题描述:Struts Problem ReportStruts has detected an unhandled exception: Messages:testLoginAction Unable to instantiate Action, testLoginAction, defined for 'login' in namespace '原创 2015-05-27 18:01:36 · 695 阅读 · 0 评论 -
Java动态代理(invocation handler、cglib)简析
简明扼要的介绍Java中的动态代理技术原创 2020-01-21 16:50:22 · 580 阅读 · 0 评论 -
JUC核心-AQS(AbstractQueuedSynchronizer)简析
AQS是什么?AQS 全称是 AbstractQueuedSynchronizer, 它提供一种依赖于FIFO等待队列的构建锁和同步器的框架。CAS是什么?CAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理...原创 2020-01-20 18:40:10 · 250 阅读 · 0 评论 -
IntelliJ IDEA使用技巧以及常见问题解决方案(mac)
本文详细介绍了idea的常用使用技巧,作者总结的超好用的快捷键,以及常见问题、隐蔽问题的解决方案~原创 2020-01-20 17:12:03 · 890 阅读 · 0 评论 -
Java synchronized 底层实现,原理,面试题总结
全面介绍Java关键词synchronized:1. 深入理解synchronized关键词,介绍其发展历程,底层实现。2. 介绍synchronized锁的范围,升级、降级过程。3. 介绍synchronized关联关键词wait,notify, notifyAll。4. synchronized相关联的常见面试题。原创 2020-01-14 16:15:06 · 1624 阅读 · 0 评论 -
Java Map、HashMap, ConcurrentHashMap全面总结
这篇文章主要是作者个人整理的Java中Map相关的知识点以及常见面试题,主要是HashMap和ConcurrentHashMap这两个继承类。知识点覆盖全面,值得一看原创 2020-01-14 13:51:45 · 497 阅读 · 0 评论 -
JSP 2.0 技术书籍 学习笔记
JSP 2.0 技术手册看完的一些笔记原创 2015-07-23 18:03:15 · 420 阅读 · 0 评论 -
Java FileInputStream与FileReader的区别
在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和Reader。实际上, InputStream和Reader都是抽象类,并不直接地从文件或者套接字(socket)中读取数据。然而,它们之间的主要差别在于:InputStream用于读取二进制数转载 2015-01-14 22:47:08 · 734 阅读 · 0 评论 -
一个很容易被坑的点(找出最大最小值并交换)
其实程序要写出来,并不难。只是想走捷径,就容易误入歧途。题目如下:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 最开始的代码如下:public class Classic35_1 { public static void main(String[] args){ int[] a = {10,17,23,876,3,67,93,3,3原创 2015-02-02 00:06:29 · 3550 阅读 · 0 评论 -
关于Java PriorityQueue
1. 优先队列当中,迭代器的访问顺序是按照添加的顺序,而不是按照优先级来排列的。2. 关于offer方法和add方法的区别, 由借口QUEUE中的offer方法指定,即: 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有原创 2015-01-11 23:07:43 · 609 阅读 · 0 评论 -
从字符串中截取最长的没有重复字符的子字符串(一次循环)
1. 最长子字符串将有起始位置(startMaxIndex)和最大长度(maxLength)构成。2. 每次发现重复字符的时候,与目前最长子字符串的长度比较。public class GetRepeatString { public static void main(String args[]){ String s = "abcdefg";// St原创 2015-01-10 09:50:55 · 712 阅读 · 0 评论 -
Java Linklist 类测试
链表类适合多次删除,插入的场景。测试例子:/**test linked list * after .next() invoked, the iterator will be after the next element * after .pervious() invoked, the iterator will be previous the previous element */im原创 2015-01-09 23:36:36 · 494 阅读 · 0 评论 -
经典题目 之 围圈报数
import java.util.ArrayList;import java.util.Scanner;import java.util.InputMismatchException;/** * 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), * 凡报到3的人退出圈子,问最后留下的是原来第几号的那位? * Created by Keven on 2015/2/3原创 2015-02-04 00:19:10 · 1060 阅读 · 0 评论 -
Java处理txt文件遇到的问题 (unicode编码)
1. 今天处理从excel导出的unicode编码格式文件, 结果发现有很多乱码,unicode格式文件内容和程序处理结果如下: import java.io.*;public class Filetest { public static void main(String[] args) throws IOException{原创 2015-01-14 22:27:29 · 2350 阅读 · 0 评论 -
Java经典50题之18
import java.util.ArrayList;/** * 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。 * 有人向队员打听比赛的名单。 * a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单 */public class Classic18 { public static void main(Str原创 2015-01-18 21:37:23 · 497 阅读 · 0 评论 -
JDK 1.7 之后switch case 支持String,但Intellij IDEA编译失败(已解决)
1. 今天想测试一下switch case 使用String 参数的情况,遇到下列错误:后来设置了默认编译器版本为1.8也都还是有错误,想想就应该是还没有设置默认 之前建立的projects应该用的默认的1.6,经过查看,发现misc.xml中的JDK是1.6,代码如下: JDK_1_6" assert-keyword="true" jdk-15="true原创 2015-01-21 22:07:00 · 6717 阅读 · 0 评论 -
使用javax.swing.Timer遇到的问题(已解决)。
最新准备重新学习一下java,翻出了尘封已久的java核心技术。在看到第218的页的时候,有一个使用java.swing.Timer的例子,仿写了一个程序,代码如下:import java.awt.*;import java.awt.event.*;import javax.swing.Timer;import java.util.*;public class TimerTest {原创 2015-01-04 22:13:10 · 2422 阅读 · 2 评论 -
[Tomcat] classpath resource [hbm.xml] cannot be opened because it does not exist
SSH配置问题,错误很明显,就是hibernate的配置文件有问题,位置不对。查看applicationContext.xml文件,其初始配置如下(example): ./user.hbm.xml ./User.hbm.xml于是我去查找这个文件的位置,发现在做完hibernate reverse engineering之后,在/project/src/下自动生成了一个hbm.xml的原创 2015-05-28 09:42:21 · 4794 阅读 · 2 评论 -
No UserDatabase component found under key UserDatabase(tomcat启动报错)
之前因为电脑蓝屏,导致重启tomcat时候,有这个错误。 原因:工作空间下的.metadata.me_tcat\conf\tomcat-users.xml文件被损坏,无法启动 解决办法:copy一个tomcat-users.xml文件即可原创 2015-08-04 09:52:29 · 950 阅读 · 0 评论