Java
文章平均质量分 93
java
「已注销」
这个作者很懒,什么都没留下…
展开
-
分布式链路追踪:集群管理设计
这里简单的解释下,Mixed 是混合模式,既包含 Aggregator 和 Receiver。Aggregator,是聚合器模式,也就是说数据收集到 OAP 平台之后,数据需要做过滤、清晰和聚合然后再存储。Receiver 是收集器模式,也就是原始数据会直接存储,不做任何处理,当然这个肯定会有最核心的链路数据,就不会产生很多通过聚合之后产生的指标数据了。那么 Skywalking 中的集群管理主要是针对 Aggregator 模式,当然肯定也会包含 Mixed 模式。原创 2023-05-19 23:21:36 · 330 阅读 · 0 评论 -
动态代理种类及原理,你知道多少?
前面介绍 CGLib 时提到过,它底层是采用 ASM 作为字节码处理,生成的代理类就是使用 ASM 实现的。因此 ASM 库是一个基于 Java 字节码层面的代码分析和修改工具,可以直接生产二进制的 class 文件,也可以在类被加载入 JVM 之前动态修改类行为。因此要想实际操作 ASM,对 class 文件格式的十分熟悉。ASM 中的每个 API 都和 class 文件格式中的特定部分相吻合,同时是采用访问者模式设计的。原创 2023-05-19 23:21:03 · 1369 阅读 · 0 评论 -
从SpringCloud开始,聊微服务架构
Martin Flower的定义:简单的说,微服务是软件系统架构上的一个设计风格,它倡导将一个原本独立的系统分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful 轻量级API进行通信协作。被拆分的每个微服务围绕系统中的某项或一些耦合度较高的业务进行构建,并且每个服务都维护着自身的数据存储、业务开发、自动化测试案例以及独立部署机制。由于有了轻量级通信机制,这些微服务间可以使用不通的语言来编写。原创 2023-05-19 23:20:32 · 323 阅读 · 0 评论 -
不可不说的Java“锁”事
本文Java中常用的锁以及常见的锁的概念进行了基本介绍,并从源码以及实际应用的角度进行了对比分析。限于篇幅以及个人水平,没有在本篇文章中对所有内容进行深层次的讲解。其实Java本身已经对锁本身进行了良好的封装,降低了研发同学在平时工作中的使用难度。但是研发同学也需要熟悉锁的底层原理,不同场景下选择最适合的锁。而且源码中的思路都是非常好的思路,也是值得大家去学习和借鉴的。原创 2023-05-19 23:21:03 · 227 阅读 · 0 评论 -
Redis开发规范
非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中(latency可查)),查找方法和删除方法。redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id。原创 2023-05-19 23:19:27 · 77 阅读 · 0 评论 -
MySQL设计规约
索引的特性:持久性、有序性。不可以创建的索引:覆盖索引。超过三张表禁止join。原创 2023-05-19 23:18:56 · 74 阅读 · 0 评论 -
代码开发规范
【强制】不允许任何魔法值(即未经定义的常量)直接出现在代码中。反例【强制】long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解。说明:写的是数字的 21,还是 Long 型的 2?【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如: 缓存相关的常量放在类: CacheConsts 下;系统配置相关的常量放在类: ConfigConsts 下。说明。原创 2023-05-19 23:19:28 · 252 阅读 · 0 评论 -
JVM 垃圾收集器
CMS 使用的是标记-清除的算法实现的,所以在 gc 的时候回产生大量的内存碎片,当剩余内存不能满足程序运行要求时,系统将会出现 Concurrent Mode Failure,临时 CMS 会采用 Serial Old 回收器进行垃圾清除,此时的性能将会被降低。清除阶段:回收被标记的对象所占用的空间。在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。原创 2023-05-19 23:17:45 · 154 阅读 · 0 评论 -
JVM CPU Profiler技术原理及源码深度解析
社区实现的JVM Profiler很多,比如已经商用且功能强大的JProfiler,也有免费开源的产品,如,功能各有所长。我们日常使用的Intellij IDEA最新版内部也集成了一个简单好用的Profiler,详细的介绍参见官方Blog。原创 2023-05-19 23:17:14 · 18190 阅读 · 1 评论 -
Java SE -- 异常
使用runtime异常类时,在函数内throw则函数上不用throws,编译可以正常通过。原创 2023-05-14 20:24:45 · 62 阅读 · 0 评论 -
Java SE -- 注解
描述注解是否被抽取到api文档中如下代码,Myanno3加入注解@Documented后,worker类使用该Myanno3注解,当使用worker生成文档后该注解会被显示在使用注解的类、函数、字段上/**元注解:用于描述注解的注解* @Target:描述注解能够作用的位置* @Retention:描述注解被保留的阶段* @Documented:描述注解是否被抽取到api文档中* @Inherited:描述注解是否被子类继承*/@InheritedWorker上使用MyAnno注解。原创 2023-05-14 20:23:30 · 74 阅读 · 0 评论 -
Java 面向对象思想
对象引用用于指向0个或者多个对象实例,对象实例可以被多个对象引用指向。以生活为例子,某公司老板招开发人员,招得开发人员后,开发人员工作过程不用看到,老板只关注开发结果,而老板只看到开发结果这一现象即封装。对象一建立就会调用与之对应的构造函数。构造函数的作用:可以用于给对象进行初始化。代表它所在函数所属对象的引用。简单来说,调用对象方法的对象就是this关键字多代表的对象。原创 2023-05-14 20:22:03 · 410 阅读 · 0 评论 -
Java SE -- 面向对象
/成员变量 //成员方法 }定义类:就是定义类的成员,包括成员变量和成员方法。成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。成员方法:和以前定义方法几乎是一样的。只不过把static去掉。格式一:无参数、无返回值public static void 方法名() {语句;} public static 写死的。void 方法没有返回值。格式二:有参数、无返回值。原创 2023-05-14 20:22:02 · 144 阅读 · 0 评论 -
Java -- 类加载器|反射
反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。原创 2023-05-14 20:21:16 · 119 阅读 · 0 评论 -
Java SE -- 抽象类
有抽象方法的类 就是抽象类一个类中如果包含抽象方法,那么这个类就必须要定义为抽象类 abstract。原创 2023-05-14 20:19:44 · 46 阅读 · 0 评论 -
Java SE -- 泛型
Java本质就一门伪泛型语言,泛型的作用仅仅在编译期间进行类型检查的,一旦生成字节码之后,关于泛型的一切都会消失。如下所示,Integer类型数组我们完全可以通过反射将字符串存到列表中。报错Class原创 2023-05-14 20:19:05 · 87 阅读 · 0 评论 -
Java SE -- 反射
每一个类都只会有一个Class对象,如下代码所示,他们都得得到一个true,这是为什么呢?实际上jvm在加载每个类时都会为每个类通过类加载器中的defineClass 去创建一个Class对象,而且只创建一次,所以后续我们无论通过何种方式获取到的某个类的Class对象都是一样的。/*** 获取Class对象的三种方式* 2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性* 3 通过Class类的静态方法:forName(String className)(常用)*/转载 2023-05-14 20:18:08 · 46 阅读 · 0 评论