- 浏览: 45705 次
- 性别:
- 来自: 杭州
最新评论
-
a1334480360:
感谢整理,学习了
RabbitMQ面试要点 -
我去啊注册都这么麻烦:
[img][/img]
RabbitMQ面试要点 -
我去啊注册都这么麻烦:
引用
RabbitMQ面试要点
文章列表
Java中bridge方法探秘
- 博客分类:
- Java
今天在学习郑雨迪老师的《深入拆解 Java 虚拟机》课程,了解Java编译器在一些特殊情况下,会自动创建桥接方法,特在此实践记录一下。
bridge方法是由Java编译器自动生成的,所以在源代码中无法找到bridge关键字。那么在什么情况下,Java编译器会生成bridge方法呢?
1、防止编译出错:以具体类型继承自一个泛型类,同时被继承的泛型类包含了泛型方法
abstract class A<T> {
public abstract T method1(T arg);
public abstract T method2();
...
CentOS7 防火墙相关命令
- 博客分类:
- Linux
操作系统:CentOS 7
防火墙(firewalld)相关
启动防火墙: systemctl start firewalld
关闭防火墙:systemctl stop firewalld
查看状态:systemctl status firewalld
开机启用:systemctl enable firewalld
禁止开机启用:systemctl disable firewalld
开放端口:firewall-cmd --zone=public --add-port=80/tcp --permanent (permanent 表示永久生效)
重新载入:firewal ...
在程序运行时出现这个错误,为了避免以后再次遇到,在此记录一下。
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration prop ...
【Java性能优化】栈上分配
- 博客分类:
- Java
环境:Windows10
Java版本:1.8
栈上分配是Java虚拟机提供的一种优化技术,基本思想是对于那些线程私有的对象(指的是不可能被其他线程访问的对象),可以将它们直接分配在栈上,而不是分配在堆上。分配在栈上的好处:可以在函数调用结束后自行销毁,而不需要垃圾回收器的介入,减轻GC压力,从而提升系统的性能。
使用场景:对于大量的零散小对象,栈上分配提供了一种很好的对象分配策略,栈上分配的速度快,并且可以有效地避免垃圾回收带来的负面的影响,但由于和堆空间相比,栈空间比较小,因此对于大对象无法也不适合在栈上进行分配。
/**
* @author: Chaser ...
1. 概述
GC最基础的算法有三种:标记-清除、复制算法、标记-压缩。由于堆分为新生代和老年代,所以我们常用的垃圾回收器一般都采用分代收集算法。
标记-清除:如它的名字一样,算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。
复制算法:将可用内存按容量划分为大小相等的两块,每次只使用其中一块内存。当这一块内存用完时,就将还存活的对象复制到另外一块内存中,然后再把已使用过的内存空间一次清理掉。
标记-压缩:标记过程与“标记-清除”一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉 ...
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途、创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁。
Java虚拟机运行时包含以下几个运行时数据区:
程序计数器
程序计数器是线程私有的,在线程创建时创建。可以看作是当前线程所执行的字节码的行号指示器(指向下一条需要执行的字节码指令)。
Java虚拟机栈
Java虚拟机栈是线程私有的,随线程的开始和结束而创建和销毁。Java虚拟机栈描述的是 Java方法执行的内存模型:每个方法在执行的同时 ...
详细信息参考:Oracle官方文档
环境信息:Windows10
JDK:1.8
Trace跟踪参数
public class Test {
public static void main(String[] args) {
byte[] bytes = null;
for (int i = 0; i < 10; i++) {
bytes = new byte[1 * 1024 * 1024];
}
}
}
以上述代码为例,展示各个参数结果。
...
RabbitMQ实现延时队列
- 博客分类:
- 消息队列
1. 背景介绍
实际开发中,存在着下面这些场景:
滴滴打车订单完成后,如果用户一直不评价,48小时后自动五星好评
在电商系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,则这个订 ...
需要依赖的jar包
/* RabbitMQ of Gradle */
compile("com.rabbitmq:amqp-client:5.1.2")
compile("org.springframework.amqp:spring-rabbit:2.0.1.RELEASE")
/* RabbitMQ of Maven*/
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</art ...
Alibaba Java Coding Guidelines
阿里编码规约插件,下载地址:http://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines
CodeGlance
它的作用是把代码小地图嵌入到编辑窗口,下载地址:http://plugins.jetbrains.com/plugin/7275-codeglance
FindBugs-IDEA
静态代码检查工具,下载地址:http://plugins.jetbrains.com/plugin/3847-findbugs-idea
...
ThreadLocal内存泄漏问题及最佳实践
- 博客分类:
- Java
ThreadLocal实现原理
ThreadLocal的实现是这样的:每个Thread 维护一个 ThreadLocalMap 映射表,这个映射表的 key 是 ThreadLocal 实例本身,value 是真正需要存储的 Object。也就是说 ThreadLocal 本身并不存储值,它只是作为一个 key 来让线程从 ThreadLocalMap 获取 value。值得注意的是图中的虚线,表示 ThreadLocalMap 是使用 ThreadLocal 的弱引用作为 Key 的,弱引用的对象在 GC 时会被回收。
ThreadLocal为什么会内存泄漏
ThreadLoc ...
ThreadLocal工作原理
- 博客分类:
- Java
概述
翻译过来的大概意思是:ThreadLocal类用来提供线程内部的局部变量。这些变量在多线程环境下访问
(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。
总结:ThreadLocal不是为了解决 ...
乐观锁 vs 悲观锁
乐观锁
总是认为不会产生并发问题,因此并不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。
悲观锁
总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁等),当其他线程想要访问数据时,都需要阻塞挂起。
Java线程阻塞的代价
Java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统的接入,需要在用户态与内核态之间切换。这种切换会消耗大量的系统资源,因为用户态与内核态都有各自专用的内存空间、寄存器等,用户态切换至内核态需要传递需要变量、参数给内核 ...
类加载过程
类加载过程包含了加载、验证、准备、解析、初始化五个阶段。其中加载、验证、准备、初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。需要注意的是,这几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。
1. 加载
加载是类加载过程的第一个阶段,JVM需要完成以下几件事情:
通过一个类的全限定名来获取二进制字节流
将二进制字节流所代表的的静态存储结构转化为方法区 ...
转自:不停机分库分表迁移,作者:阿飞Javaer
需求说明
类似订单表这种规模上亿,未来甚至上十亿百亿的海量数据表,在项目初期为了快速上线,一般只是单表设计,不需要考虑分库分表。随着业务的发展,单表容量超过千万甚至达到亿级别以上,这时候就需要考虑分库分表这个问题了,而不停机分库分表迁移,这应该是分库分表最基本的需求,毕竟互联网项目不可能挂个广告牌"今晚10:00~次日10:00系统停机维护",这得多low呀,以后跳槽面试,你跟面试官说这个迁移方案,面试官怎么想呀?
借鉴codis
笔者正好曾经碰到过这个问题,并借鉴了codis一些思想实现了不 ...