
java
文章平均质量分 58
明月(Alioo)
一个在互联网行业浪迹多年的IT民工,集闷骚与博爱于一身,擅长JAVA,喜欢折腾Linux,热衷于研究各类B/S系统。对各类新奇技术保持极大的热情,行迹诡异,早年经常流窜于移动互联网领域,现藏身于朝林阑珊处。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。
展开
-
回归初心,做一个业务容器业务插件有什么用
到目前为止,已经可以自动动手实现一个基于插件的业务容器了,那么我们先来回答2个问题。原创 2024-12-14 11:33:21 · 214 阅读 · 0 评论 -
持续迭代,做一个可以投入项目真正使用的业务容器及插件
上一篇文章中已经可以允许插件中有自己的依赖jar包了(原理就是插件中依赖jar包交给插件专属的插件类加载器PluginClassLoader进行加载,业务系统中依赖的jar包交由业务类加载器AliooClassLoader进行加载)大家知道java中是尽可能面向对象编程的,如果请求插件中的功能类方法返回值类型是一些常见的3方jar,比如com.alibaba.fastjson.JSONObject,按照之前的设计会存在2种情况:业务系统中没有依赖fastjson业务系统中也依赖fastjson。原创 2024-12-07 16:11:45 · 813 阅读 · 0 评论 -
自己动手实现javap
纸上得来终觉浅,绝知此事要躬行,今天就动手实现一个jdk自带的工具javap- 阅读本文可以带你完整的自己实现javap的全部功能- 本文只提到了核心代码,完整代码git地址请访问:https://github.com/lzc-alioo/itstack-demo-jvm- 项目访问入口类是com.lzc.wuxin.Jad1,com.lzc.wuxin.Jad2,将分别代表javap,javap -v的实现逻辑,如果你在运行过程中有任何问题欢迎留言,看到后一定为你解答,同时如果你发现代码的缺陷,原创 2022-04-17 21:44:28 · 573 阅读 · 0 评论 -
JavaAgent的那点秘密
JavaAgent的那点秘密前言大家都知道Java文件编译成Class文件之后才能在Jvm中运行的,而Class文件自有一套规范:不必一定是Java文件经由javac编译产生;其它编程语言也可以直接生成Class文件交由Jvm运行;既然其它语言都可以生成Class文件,理论上Java语言自己是不是也可以修改/篡改Class文件呢?答案是肯定的。那么是否有这方面的需求呢(用Java语法去直接修改Class文件)我举个例子:需要去增强别人的二方包,需要针对其中大量的方法进行增强程序运行期间原创 2021-10-31 20:43:22 · 409 阅读 · 0 评论 -
jdk8中list,map的stream常见操作
本文的知识点:map 与flatmap的区别从list中取出第一个元素,需要需要list为null,empty的情况package com.alioo.stream;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.Optional;import static java.util.stream.Col原创 2020-08-26 17:45:23 · 2267 阅读 · 0 评论 -
Java 能否自定义一个类叫 java.lang.ArrayList
关于这个问题,网上众说纷纭,类似的问题还有:java.lang.System,java.lang.String,java.lang.Math是否自己写一个jdk同名的类。大概的答案主要分成以下2派:可以,自定义classloader破坏双亲委派机制(由于系统自带的3个类加载器都加载特定目录下的类,如果我们自己的类加载器放在1个特殊的目录,那末系统的加载器就没法加载,也就是终究还是由我们自己的加载器加载。)点评:这个明显是没有实践过的一派人的发言,实践一下就会发现自定义classloader是行不通原创 2020-07-31 16:14:12 · 444 阅读 · 1 评论 -
ThreadPoolExecutor是如何处理任务的异常情况
本文因生产环境线程池某些场景下的任务异常后,日志文件中没有被记录进来产生的困惑引发的思考。当然如果所有异步的业务方法run里面都加上一层try…catch…就可以主动捕获所有的异常,也能够记录到日志文件中,然而总有一些人不漏掉了,今天分享下run方法如果不加try…catch…的后果测试调用execute//测试代码public static void testExecute() { ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 1原创 2020-06-04 01:47:12 · 6053 阅读 · 1 评论 -
SPI技术-JDK实现
SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉...原创 2020-03-03 23:33:04 · 458 阅读 · 0 评论 -
GC专题-查看日志
GC日志参数列表-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC 在进行GC的前后打...原创 2020-02-26 18:58:11 · 425 阅读 · 0 评论 -
java String字符串在内存中的地址和指向问题
String str1 = “abc”;System.out.println(str1 == “abc”);步骤:栈中开辟一块空间存放引用str1,String池中开辟一块空间,存放String常量"abc",引用str1指向池中String常量"abc",str1所指代的地址即常量"abc"所在地址,输出为trueString str2 = new String(“ab...转载 2020-02-25 15:02:24 · 2901 阅读 · 4 评论 -
Java String6,7,8,9区别 以及 有哪些方式可以提高性能
String 对象在jdk不同版本中的实现String对象是 Java 中使用最频繁的对象之一,所以 Java 公司也在不断的对String对象的实现进行优化,以便提升String对象的性能,看下面这张图,一起了解一下String对象的优化过程。在 Java6 以及之前的版本中String对象是对 char 数组进行了封装实现的对象,主要有四个成员变量:char 数组、偏移量 offse...转载 2020-02-17 09:31:45 · 670 阅读 · 0 评论 -
java程序开启远程调试、断点功能
代码就是最好的文档 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 几点说明:-agentlib:jdwp 这个是jdk自带的调试工具是jti,位于$JAVA_HOME/jre/lib/amd64/libjdwp.so,后面的均是它的参数suspend=n 表示程序启动时不挂起,直接运行,...原创 2020-01-03 11:12:11 · 1883 阅读 · 0 评论 -
GC专题-查看JVM使用的GC
一、设置垃圾收集器参数我们设置JVM垃圾收集器参数时,一个参数就同时指定新生代老年代各自的垃圾收集器了。-XX:+UseSerialGC,虚拟机运行在Client模式下的默认值,Serial+Serial Old。-XX:+UseParNewGC,ParNew+Serial Old,在JDK1.8被废弃,在JDK1.7还可以使用。-XX:+UseConcMarkSweepGC,...原创 2019-12-27 12:13:03 · 1115 阅读 · 0 评论 -
如何保证消息队列的顺序性?
面试题如何保证消息的顺序性?面试官心理分析其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。面试题剖析我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -...转载 2019-12-17 11:53:49 · 359 阅读 · 0 评论 -
Jdk8 foreach语法需要break怎么办?
forEach里的return只相当于continue,没有break语法,在这里我总结了3种解决方案供你选择exception ,filteranyMatch //forEach里的return只相当于continue,没有break语法 //使用exception , filter , 或者 anyMatch 可以解决 List<...原创 2019-12-16 13:25:19 · 1189 阅读 · 0 评论 -
HTTPS的加密过程
HTTPSHTTPS即加密的HTTP,HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。我们首先了解几个基本概念。共享密钥加密(对称密钥加密):加密和解密同用一个密钥。加密时就必须将密钥传送给对方,那么如何安...转载 2019-11-14 14:52:48 · 418 阅读 · 0 评论 -
jdk8之前版本中HashMap存在的问题剖析
一、put时存在丢失元素的问题put方法逻辑说明将新插入的元素放置到链表头部,原来的链表头部作为新元素的next节点put关键代码块void createEntry(int hash, K key, V value, int bucketIndex) { Entry<K,V> e = table[bucketIndex]; // 步骤1 table[buc...原创 2019-11-08 11:07:54 · 464 阅读 · 0 评论 -
java调用c++文件
网上有很多例子,参照着执行有时候相对路径问题经常卡住了,实战了一把通过后,特重新整理一份,供小白参考首先需要有一个含有native方法的java类vi /Users/mac/work/git/javademo/src/main/java/com/alioo/jni/JniDemo.javapackage com.alioo.jni;public class JniDemo { ...原创 2019-11-04 18:45:14 · 721 阅读 · 0 评论 -
java高并发锁的3种实现
提到锁,大家可能都会想到synchronized关键字,使用它的确可以解决一切并发问题,但是对于系统吞吐要求更高的,在这里提供了几个小技巧,帮助大家减小锁粒度,提高系统并发能力。初级技巧 - 乐观锁乐观锁适合这样的场景:读不会冲突,写会冲突。同时读的频率远大于写。以下面的代码为例,悲观锁的实现:Java代码publicObjectget(Object...原创 2017-04-12 22:36:01 · 30029 阅读 · 1 评论 -
Singleton单例模式的几种创建方法
创建单例类有以下几种方式:饿汉式懒汉式(加同步锁的懒汉式、加双重校验锁的懒汉式、防止指令重排优化的懒汉式)登记式单例模式静态内部类单例模式枚举类型的单例模式备注:其中“枚举类型的单例模式。”最牛逼,可以防止反射调用构造器饿汉式;public class MyManger { private static MyManger instance...原创 2017-04-12 22:53:47 · 2206 阅读 · 0 评论 -
关于java泛型的坑,你遇到过吗?
最近工作中发现了一个关于java泛型的比较隐蔽的坑,特地写下来,供追忆一下。直接贴代码 HashMap map1 = new HashMap(); map1.put("Aa", "bb"); map1.put("Aa", "dd"); map1.put("BB", "cc"); System.out.println(map1);原创 2017-04-13 14:09:21 · 2199 阅读 · 0 评论 -
关于java泛型的坑,你遇到过吗?
关于java泛型的坑,你遇到过吗? 最近工作中发现了一个关于java泛型的比较隐蔽的坑,特地写下来,供追忆一下。直接贴代码HashMap map1 = new HashMap();map1.put("Aa", "bb");map1.put("Aa", "dd");map1.put("BB", "cc");System.out.println("map1="+map1);上述代码没有任何毛病原创 2017-04-14 11:15:29 · 568 阅读 · 0 评论 -
java开发,大小写的坑,你可曾遇到?
没想到工作这么多年,今天竟然遇到了一个大小写引发的问题,真是汗颜啦。@RequestMapping(value = "/toList")public ModelAndView toList(ImportQueryModel importQueryModel, HttpServletRequest request, HttpServletResponse response) { String原创 2017-04-18 18:31:34 · 5326 阅读 · 0 评论 -
Redis Cluster 源码分析
作者介绍姓名:李航工作经历: 5年多互联网工作经验,先后在58同城,汽车之家,优酷土豆集团工作。目前主要在优酷土豆集团任职高级开发工程师,目前主要负责大数据基础平台Redis集群开发及运维等工作。主要关注领域Nginx,Redis,分布式系统,分布式存储。本文来源自“Redis技术交流群”线上分享。李航ID:Lucien_168。群主ID:gnuhpc。后期的分享我们会同期进行。转载 2017-05-02 17:48:00 · 2594 阅读 · 3 评论 -
CAP 可能是CAP理论的最好解释
一篇非常精彩的解释CAP理论的文章,翻译水平有限,不准确之处请参考原文,还请见谅。 Chapter 1: “Remembrance Inc” Your new venture :Last night when your spouse appreciated you on remembering her birthday and bringing her a gift转载 2017-05-15 20:32:57 · 793 阅读 · 0 评论 -
零售心理战-我喜欢的其中几句话
不要为顾客着想,而是要站在顾客的立场上思考虽然这个概念看似大同小异,但“为顾客着想”终究是站在卖方的立场,脱离了普通消费者的生活;而“站在顾客立场”思考则跳出了“业内人士”的思维定势和经验框架,更易找到消费者的真实需求。购买需要理由顾客并非不愿意购买,他们只是为自己的购买行为寻找一个合适的理由。当顾客从一个产品中看到了能满足自己需求的购买理由时,他就必然会购买。持续转载 2017-05-09 21:00:52 · 661 阅读 · 0 评论 -
Singleton单例模式-如何防止JAVA反射对单例类的攻击?
在我的上篇随笔中,我们知道了创建单例类有以下几种方式:(1).饿汉式(2).懒汉式(、加同步锁的懒汉式、加双重校验锁的懒汉式、防止指令重排优化的懒汉式)(3).登记式单例模式(4).静态内部类单例模式(5).枚举类型的单例模式在上面的5种实现方式中,除了枚举类型外,其他的实现方式是可以被JAVA的反射机制给攻击的,即使他的构造方法是私有化的,我们也可以做一下处理,...转载 2017-05-09 21:06:29 · 762 阅读 · 0 评论 -
如何找到java对应的c/c++源码
参见文章http://blog.youkuaiyun.com/wangyangzhizhou/article/details/42613273转载 2017-06-06 21:54:10 · 368 阅读 · 0 评论 -
Maven插件声明顺序的微妙差别
见原博客 http://blog.youkuaiyun.com/bluishglc/article/details/50380880转载 2017-06-13 18:21:36 · 863 阅读 · 0 评论 -
HashMap为什么是线程不安全的?
参见这篇文章,描述的非常详细http://blog.youkuaiyun.com/mydreamongo/article/details/8960667转载 2017-07-06 09:43:31 · 295 阅读 · 0 评论 -
Spring的IOC原理[通俗解释一下]
转载http://www.cnblogs.com/superjt/p/4311577.html1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。图1:软件系统中耦合的对象如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒转载 2017-06-28 09:30:35 · 352 阅读 · 0 评论 -
JVM内存模型
总结来说JVM内存模型主要分为以下几种:名称特征作用配置参数异常程序计数器占用内存小,线程私有,生命周期与线程相同大致为字节码行号指示器无无虚拟机栈线程私有,生命周期与线程转载 2017-07-10 13:31:15 · 331 阅读 · 0 评论 -
java类加载器与双亲委派模型
一、类加载器种类从开发者的角度,类加载器可以细分为:启动(Bootstrap)类加载器:负责将 Java_Home/lib下面的类库加载到内存中(比如rt.jar)。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。标准扩展(Extension)类加载器:是由 Sun 的 ExtClassLoader(sun.mi原创 2017-07-10 13:51:42 · 480 阅读 · 0 评论 -
分库分表需要考虑的问题及方案
转自:http://www.jianshu.com/p/32b3e91aa22c?from=timeline分库分表需要考虑的问题及方案 作者 jackcooper 2017.02.08 16:08* 字数 5042 阅读 5240评论 3喜欢 48分库分表的基本思想Sharding的基本思想就要把一个数据库切分成多个部分放到不同转载 2017-08-08 09:53:38 · 358 阅读 · 0 评论 -
秒杀系统设计,高并发下的下单功能设计
功能需求:设计一个秒杀系统初始方案商品表设计:热销商品提供给用户秒杀,有初始库存。转载 2017-08-08 12:56:25 · 1011 阅读 · 0 评论 -
特定数量的商品如何在高并发下进行库存锁定 ?
特定数量的商品如何在高并发下进行库存锁定 ?PMCAFF产品经理 12-22对于特定数量的商品,如何在高并发下进行库存锁定呢 ?促销的商品数量有限,用户加入购物车后,实际库存就会减少。那么,对于特定数量的商品,如何在高并发下进行库存锁定呢 ?多宝家小主 笨土豆 产经 4 天前 18:36首先先看你的锁库存,是加入购物车锁库存,生成订单锁库存,还是付款锁库存。转载 2017-08-08 17:18:28 · 14370 阅读 · 2 评论 -
老司机手把手教你自己编译jdk
相信很多人都看过《深入理解Java虚拟机》这本书(周志明著 ),很多人也都想参照着书中所述“自己编译jdk”的步骤来体验一下过程,但是实际操作过程中可能会遇到这样或者那样的问题,造成最终放弃掉。比如原因可能有:原创 2017-08-04 18:07:28 · 10673 阅读 · 28 评论 -
Java中为什么匿名对象中方法,调用局部变量必须加final呢?
先上代码public class Mytest1 { static List a1 = new ArrayList(); public static void main(String[] args) { final List a2 = new ArrayList(); Thread b = new Thread() {原创 2017-08-12 11:02:45 · 632 阅读 · 0 评论 -
java的世界里,younggc与fullgc分别是在什么时候发生
年青代的eden区满了会触发younggc 老年代old满了会触发oldgcFull GC清理整个heap区,包括Yong区和old区。详情参见这篇文章:https://blog.youkuaiyun.com/yinbucheng/article/details/72810166...原创 2017-08-14 13:00:05 · 10064 阅读 · 1 评论 -
java的世界里young区,old区分别有哪些收集器
Serial收集器:新生代收集器,使用复制算法,使用一个线程进行GC,串行,其它工作线程暂停。ParNew收集器:新生代收集器,使用复制算法,Serial收集器的多线程版,用多个线程进行GC,并行,其它工作线程 暂停。使用-XX:+UseParNewGC开关来控制使用ParNew+Serial Old收集器组合收集内存;使用- XX:ParallelGCThreads来设置执行内存原创 2017-08-14 13:03:24 · 1662 阅读 · 0 评论