java
Jenkins构建优化 20min到2min
系统的jenkins构建流程很简单, 但一直很慢. 一次构建平均十几二十分钟git pull (17分钟)mvn clean package (6分钟)scp (4分钟)Git Pull发现之前的配置被勾选了自动清理workspace, 取消后拉代码就正常了, 基本是秒拉Maven Packagem
排查记录: Java所有接口卡死
线上接口, 每天凌晨三四点后开始卡死, 重启后恢复调用后等待两分钟, 然后504两分钟正好是nginx反代的超时时间排查过程日志把nginx和应用日志都找出来看了下, 没发现什么问题应用机器状态看了下cpu占用率/内存, 没问题磁盘占用也没问题应用状态通过jps查找到java进程然后jstack 进
基于Redis ZSet的滑动窗口限流
private boolean limit() {
String ip = ServletUtil.getClientIP(request);
String banKey = "limit_ban_" + ip;
Boolean b = redisTemplate.hasK
ThreadPool和内部类的内存泄露
private void getItemInfo(String site) {
// ...
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.submit(task);
}
getItemInf
XXL-JOB 客户端执行流程
客户端内嵌服务器com.xxl.job.core.server.EmbedServer, 内建线程池, 基于netty的事件循环模型, 异步处理调度端的请求ThreadPoolExecutor bizThreadPool = new ThreadPoolExecutor(
0,
200,
60L,
Kubernetes Cloud Native 实践 ( 五 ) 应用上云
全文目录Kubernetes Cloud Native 实践 ( 一 ) 安装Kubernetes Cloud Native 实践 ( 二 ) 简单使用Kubernetes Cloud Native 实践 ( 三 ) NFS/PV/PVCKubernetes Cloud Native 实践 ( 四
使用字节数组创建String后通过getBytes()得到的数组与创建时不同
问题:使用默认编码创建字符串后,通过生成的字符串的getBytes()方法获得的数组与创建时的数组不同。demo代码如下byte[] bytes=new byte[]{-42, -48, -50, -60, -78, -30, -54, -44};
System.out.println(Arrays
自定义HttpServletRequestWrapper报错
Bug代码public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final byte[] body;
public BodyReaderHttpServletR
sun.misc.CharacterEncoder#encode(byte[])自动添加\r\n
当编码的字节较长时,encode出来的字符串会自动加入\r\n进行自动换行。这是因为是rfc规范规定76个字符要换一次行导致编码后无法正常显示图片解决方法: 换个工具类
Java重载匹配算法
算法如下找出全部可以调用的方法。(可以调用的方法意味着形參个数等于实參个数,实參的类型可以转换为方法形參的类型。)假设实參与形參的类型可以直接相应。则运行该方法。假设可以调用的方法仅仅有一个。则运行该方法。可以调用的方法不止一个时, 逐一作出推断: 假设一个方法的类型签名都可以赋值给还有一个方法。则
浅谈ThreadLocal
ThreadLocal是为了避免共享, 避免锁竞争, 使用了空间换时间的思路若使用Map, Thread做Key, 则回到了问题本身, 仍会发生锁竞争, 降低效率所以数据实际上是存储在java.lang.Thread#threadLocals的 ThreadLocal相当于一个钥匙/桥梁去访问Thr
站点版本更新后周期性卡顿分析
本站在今天发版后, 对线上应用自测时发现, 接口出现了周期性的卡顿, 在此记录一下排查过程怀疑是FULLGC影响的, 因为启动时内存确实分配的较少, 且有周期性, 遂调整设置. 重启后问题仍然稳定重现使用jmap -dump将堆内存信息以二进制的方式转储到文件, 使用jdk的jvisualvm工具查
Java类加载器机制及应用
0x00 何时触发类加载动作显式加载通过ClassLoader的loadClass方法通过ClassLoader的findClass方法通过Class.forName隐式加载遇到new、getstatic、putstatic、invokestatic这4条字节码指令时对类进行反射调用时当初始化一个类
MyBatis-Plus动态返回实体类
1. 自定义SqlSession@Slf4j
public class GenericSqlSession extends DefaultSqlSession {
private static final ThreadLocal<Class<?>> CTX = new ThreadLoca
java.lang.ClassCastException: xxx cannot be cast to [C
上代码
public class Test {
public static Map<String, Object> MAP = new HashMap<>(2);
static {
MAP.put("int", 1);
MAP.put("string
SpringBoot自定义枚举序列化方式
在平常web开发中, 或多或少的会使用到枚举类型但是springboot对枚举的序列化并不太符合实际开发需求比如public enum MerchantStatusEnum {
NORMAL(100, "正常"),
BAN(200, "封禁");
private fina
Java9-17新特性总结
年底即将发布的SpringBoot3.0最低支持Java17版本这里记录下新语法和值得注意的库语法特性moduleJDK9模块系统 Java 9 模块的重要特征是在其工件的根目录中包含了一个描述模块的 module-info.java 文 件通过exports向外开放接口/类, 限定模块使用范围同时
Slf4j+Logback MDC使用
MDC 可用于绑定日志上下文信息Slf4j: org.slf4j.MDCslf4j作为日志门面, 定义了相当多的规范例: 生成一个唯一id, 来区分输出的日志归属于哪次http请求效果20:43:30.204 [xid=1529443036298219520] [XNIO-1 task-1 ] I
SpringBoot LocalDateTime序列化配置
项目中用LocalDateTime替换Date后, 许多地方需要增加配置配置Json响应格式化方式注册JavaTimeModule/**
* 序列化LocalDateTime
*/
@Bean
public JavaTimeModule javaTimeModule() {
JavaTi