<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xingfeichen的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xingfeichen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xingfeichen]]></copyright><item><title><![CDATA[【经验杂谈】为什么静态方法不能调用非静态方法？]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/120072938</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/120072938</guid><author>xingfeichen</author><pubDate>Fri, 03 Sep 2021 00:54:11 +0800</pubDate><description><![CDATA[前言
今天分析一下为什么静态方法不能调用非静态方法，但是反过来却可以调用。本文将从字节码的角度分析底层原因。
原理分析

这里先说结论：静态方法属于类，方法的参数列表没有默认隐含的this引用，这也说明了调用静态方法不需要当前对象的引用this，但是调用非静态方法需要当前对象的引用才能调用，所以这就是不能调用非静态方法的主要原因,非静态方法属于实例对象，方法的参数列表有默认隐含的this引用，同时调用静态方法不需要this，因此可以调用。

示例代码
package com.github.xfc.stati]]></description><category></category></item><item><title><![CDATA[linux 的cat grep用法]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/84748943</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/84748943</guid><author>xingfeichen</author><pubDate>Wed, 25 Aug 2021 10:41:29 +0800</pubDate><description><![CDATA[catxx.log|grep-C5'关键字'显示file文件里匹配“关键字”字串那行以及上下5行

catxx.log|grep-B5'关键字'显示“关键字”及前5行

catxx.log|grep-A5'关键字'显示“关键字”及后5行...]]></description><category></category></item><item><title><![CDATA[【经验杂谈】一个使用transient不慎带来的坑]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/119268346</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/119268346</guid><author>xingfeichen</author><pubDate>Sat, 31 Jul 2021 08:19:13 +0800</pubDate><description><![CDATA[前言
说明：如果您对transient关键字非常了解或熟悉，请忽略，不喜勿喷。

本文主要介绍本人最近在重构线上代码时，发现组内小伙伴用了transient关键字带来的一个问题，因此在这里记录一下，同时巩固一下transient关键字的作用和原理，如果您对transient关键字非常了解或熟悉，本文可以跳过不看。

问题复现

说明：本文的序列化主要用了fastjson作为序列化测试工具

pom依赖
&lt;dependency&gt;
  &lt;groupId&gt;org.projectlombok]]></description><category></category></item><item><title><![CDATA[【经验杂谈】JDK源码总是将实例变量赋值到本地变量再操作？]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/118965838</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/118965838</guid><author>xingfeichen</author><pubDate>Wed, 21 Jul 2021 14:36:42 +0800</pubDate><description><![CDATA[前言

我们在源码中总是看到源码作者将实例变量赋值到本地变量后再操作，我们平时写业务代码会很少这么干，为什么人家这么写？有什么好处？本文深入了解一下

final Object[] items = this.items;
final ReentrantLock lock = this.lock;

猜测 ？

源码中很多的类似final Object[] items = this.items;操作，这里分析一下为什么要这么做。
猜想：局部变量都是存在于栈中，但是实例引用都存在于堆中，因此猜测这个处理是为了性]]></description><category></category></item><item><title><![CDATA[HashMap使用遇到的坑]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/118859873</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/118859873</guid><author>xingfeichen</author><pubDate>Sat, 17 Jul 2021 17:34:35 +0800</pubDate><description><![CDATA[大家好，我是程序员行一
本文介绍一下我在使用java.util.HashMap中遇到的一个NPE问题，实际上是因为个人对API了解不深入导致使用时出现意想不到的问题
先来介绍bug现象
// 这段代码编译时没有任何问题的
@Test
public void testPutIfAbsentBug() {
  final HashMap&lt;String, Boolean&gt; hashMap = new HashMap&lt;&gt;(2);
  String key = "行一";
  // 这里想表达]]></description><category></category></item><item><title><![CDATA[享元模式]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/103667720</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/103667720</guid><author>xingfeichen</author><pubDate>Mon, 23 Dec 2019 16:14:19 +0800</pubDate><description><![CDATA[享元模式
享元模式概念

享元模式(Flyweight Pattern)：运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象，而这些对象都很相似，状态变化很小，可以实现对象的多次复用。由于 享元模式要求能够共享的对象必须是细粒度对象，因此它又称为轻量级模式，它是一种 对象结构型模式。

享元模式类图

这里盗了个别人的图


享元模式代码示例


享元接口
package com.x...]]></description><category></category></item><item><title><![CDATA[springboot中的事件]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/103427328</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/103427328</guid><author>xingfeichen</author><pubDate>Fri, 06 Dec 2019 18:14:59 +0800</pubDate><description><![CDATA[官网对springboot事件的描述
springboot中事件的发布顺序（发送优先级从高到底）

ApplicationStartingEvent在运行开始时发送 ，但在进行任何处理之前（侦听器和初始化程序的注册除外）发送
ApplicationEnvironmentPreparedEvent当被发送Environment到中已知的上下文中使用，但是在创建上下文之前
ApplicationCon...]]></description><category></category></item><item><title><![CDATA[一道不寻常的面试题]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/94839816</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/94839816</guid><author>xingfeichen</author><pubDate>Sat, 06 Jul 2019 11:29:25 +0800</pubDate><description><![CDATA[本题主要考察类加载机制，考察jvm在加载类时的加载顺序。可能没描述]]></description><category></category></item><item><title><![CDATA[使用tableExport.js直接导出web页面上的table]]></title><link>https://blog.youkuaiyun.com/xingfeichen/article/details/53840673</link><guid>https://blog.youkuaiyun.com/xingfeichen/article/details/53840673</guid><author>xingfeichen</author><pubDate>Fri, 23 Dec 2016 15:42:06 +0800</pubDate><description><![CDATA[1，需要导入两个js文件，一个tableExport.js，另一个是jquery.base64.js，前一个文件是导出数据和核心类库，后一个是为了避免导出中文时乱码的js文件，如果你导出的数据没有中文，可以不适用它。
说明：只能对table标签进行操作
2，导入以上两个js后，为下载按钮绑定事件，如下代码是最简单的导出配置
//文件导出--------------------------]]></description><category></category></item></channel></rss>