Mac OSX之Catalina 10.15中编译OpenJDK8

如果想深入学习JDK 内部的实现机制,最便捷的路径是自己手动编译一套JDK,通过阅读和跟踪debug JDK源码去深入了解Java技术体系的原理,结合各类书籍、文章和博客,对比理解,更容易让你了解JDK是怎么运作的,底层都做了什么。

本文基于目前最新的Mac操作系统Catalina 10.15.1 编译OpenJDK8,编译过程中遇到很多新问题,做个总结,为后来者提供方便。

继续阅读

浅谈分布式锁

随着架构系统的演进,由纯真的单机架构到容器化编排的分布式架构,可以说是一个大型互联网企业发展的必然走向。在网站初创时,应用数量和用户较少,可以把Tomcat和Mysql部署在同一台机器上。随着用户数量增多,访问量增大,并发升高,Tomcat和MySQL竞争资源,此时,单机已经扛不住了,需要把Tomcat和MySQL分离在不同的机器上,用于提升单台机器的处理能力。业务从来没有减少,产品越做越大。应用也越来越复杂,原来的大应用,拆分成多个小应用,加入各级缓存,做了反向代理负责均衡,最后坠入分库分表的深渊。

继续阅读

Springboot启动时开启一个或多个线程

最近项目基于springboot做微信机器人,从网上看了一下,一般都是单个用户登录,然后一个线程死循环,类似监听器,如果有信息就处理信息。但是,我们的要求是需要可以多个用户登录,所以,每次登录一个用户,开启一个线程,用户意外退出或者接口响应错误的情况下,该线程回收。

继续阅读

[转]怎么回答面试官:你对Spring的理解?

Java面试中不可避免的都会问到Spring相关的问题,经常会遇到的就是IOC、AOP、Bean的实例化等,虽然有时候我们能回答上这些问题,但是如果没有从源码中领悟Spring的架构原理,也就不知道spring背后做了哪些事,我们项目中会遇到哪些问题。本文作者bravo1988从BeanDefinition和BeanPostProcessor层面阐述了spring中的设计思想以及spring核心原理。

继续阅读

那些年我们写过的Java代码

1.优化System.currentTimeMillis()高并发性能问题
2.使用推特的雪花算法Twitter_Snowflake生产唯一序列码
3.如何将数据库和中间件的密码加密,在使用时自动解密
4.通过ApplicationListener实现初始化完成后的事件操作
5.如何优雅停机
6.Redis加锁和解锁的正确姿势
7.多数据源的自动切换
8.记录dubbo调用日志
9.Dubbo接口的验证器实现及全局异常拦截
10.异常CODE的封装
11.核心数据的压缩和解压缩

继续阅读

Fastdfs上传文件报错 recv package size -1!=10

使用 Fastdfs 作为文件存储系统,Java 客户端单个上传文件没什么问题,在并发300的时候就会出现异常,部分上传失败。

客户端是自己封装的 spring-boot-starter-fastdfs,引用的核心库是 happyfish100大神的 java 版客户端,该库的 github 地址是 https://github.com/happyfish100/fastdfs-client-java。SpringBoot 的版本是 2.0.3.RELEASE。

项目中引入编译好的 fastdfs-client-java jar lib。

继续阅读