Fork me on GitHub
摘要: JVM(Java 虚拟机)算是面试必问的问题的了,而但凡问 JVM ?#27426;?#20250;问的第一个问题就是?#33322;?#19968;讲 JVM 的组成?那本文就注重讲一下 JVM 的组成。 首先来说 JVM 的组成分为,整体组成部分和运行时数据区组成部分,一般开发者关注的和面试官问的都是后者,但本文会详细讲解以上两个组成部分。 一、阅读全文
posted @ 2019-04-10 09:01 王磊的博客 阅读(801) 评论(0) 编辑
摘要: 本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器。 分代收集器会把内存空间分为:老生代和新生代两个区域,而新生代又会分为:Eden 区和两个 Survivor区(From Survivor、To Survivor),阅读全文
posted @ 2019-02-22 09:25 王磊的博客 阅读(343) 评论(0) 编辑
摘要: 全文共 2195 个字,读完大约需要 8 分钟。 如果垃圾回收的算法属于内存回收的方法论的话,那本文讨论的垃圾回收器就属于内存回收的具体实现。 因为不同的厂商(IBM、Oracle),实现的垃圾回收器各不相同,而本文要讨论的是 Oracle 的 HotSpot 虚拟机所使用的垃圾回收器。 常用垃圾回阅读全文
posted @ 2019-02-13 09:53 王磊的博客 阅读(526) 评论(1) 编辑
摘要: 全文共 1890 个字,读完大约需要 6 分钟。 上一篇我们讲了垃圾标记的一些实现细节和经典算法,而本文将系统的讲解一下垃圾回收的经典算法,和Hotspot虚拟机执行垃圾回收的一些实现细节,比如安全点和安全区域等。 因为各个平台的虚拟机操作内存的方法各不相同,且牵扯大量的程序实现细节,所以本文不会过阅读全文
posted @ 2019-01-25 08:09 王磊的博客 阅读(302) 评论(0) 编辑
摘要: 好的文章是能把各个知识点,通过逻辑关系串连起来,让人豁然开朗的同时又记忆深刻。 导读:对象除了生死之外,还有其他状态吗?对象真正的死亡,难道只经历一次简单的判定?如何在垂死的边缘“拯救”一个将死对象?判断对象的生?#26469;?#27963;都有那些算法?本文带你一起?#19994;?#36825;些答案。 在正式开始之前,我们先来了解一下垃圾回收阅读全文
posted @ 2019-01-21 09:29 王磊的博客 阅读(267) 评论(0) 编辑
摘要: 实?#20013;?#26524;图: 上图合成了2个人视频,?#22411;?#26377;1个人先离开之后又重?#24405;?#20837;了房间。 一、业务场景 业务场景是这样的:多个用户(2 4人)直播的视频,合成为一个视频,这期间要满足2个条件:首先,录制途中可能有一个或多个用户不定?#38382;?#30340;离线、重进(网络差和人为操作)的情况;第二,要保证合成的视频和录制的效果是一阅读全文
posted @ 2019-01-16 19:13 王磊的博客 阅读(380) 评论(4) 编辑
摘要: 导读:详细而深入的总结,是对知识“豁然开朗”之后的“刻骨铭心?#20445;?#24819;忘记都难。 Java虚拟机(Java Virtual Machine)下文简称jvm,上一篇我们对jvm有了大体的认识,进入本文之后我们将具体而详细的介绍jvm的方方面面,而本文主要讲的是jvm的组成,了解了它,就揭开了jvm的神秘面阅读全文
posted @ 2019-01-13 19:21 王磊的博客 阅读(375) 评论(0) 编辑
摘要: 提到Java虚拟机(JVM),可能大部分人的第一印象是“难?#20445;?#20294;当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复?#21360;?#21807;一真正令我们恐惧的,其实是恐惧本身。而作为整个JVM系列的首篇,本文将带你解除刚开始学习JVM时的种种疑惑。比如:什么是JVM?为什么学习JVM?怎?#20174;行?a href="http://www.69561603.com/vipstone/p/10229815.html" class="c_b_p_desc_readmore">阅读全文
posted @ 2019-01-06 18:40 王磊的博客 阅读(550) 评论(0) 编辑
摘要: 2018年已步入尾声,还有2天将迎来崭新的2019,按照国?#20351;?#20363;,又到了一年?#27426;?#24635;结过去,计划将来的日?#21360;?#32780;今年和以往唯一不同的是,以前只是“怅然若失”的假装自己到了“而立之年?#20445;?#32780;2019年,真的要步入“而立之年”了,若说自?#22909;?#26377;那么一丝的感伤和恐惧,那是自欺欺人,但既然“木已成舟?#20445;?#20063;只能欣然接阅读全文
posted @ 2018-12-29 16:25 王磊的博客 阅读(1115) 评论(12) 编辑
摘要: 反射和动态代理放有?#27426;?#30340;相关性,但单纯的说动态代理是由反射机?#21078;?#29616;的,其实是不够全面不?#26082;?#30340;,动态代理是一种功能行为,而它的实现方法有很多。要怎么理解以上这句话,请看下文。 一、反射 反射机?#21078;?Java 语言提供的一?#21482;?#30784;功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射阅读全文
posted @ 2018-12-11 18:33 王磊的博客 阅读(421) 评论(0) 编辑
摘要: 导读:本文你将获取到?#21644;?异步 + 阻/非阻塞的?#38405;?#21306;别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路?#20174;茫?#21516;时掌握 IO 最底层最核心的操作?#35760;傘?BIO、NIO、AIO 的区别是什么? 同/异步、阻/非阻塞的区别是什么? 文件读写最优雅的实现方式是什么? NI阅读全文
posted @ 2018-12-04 17:40 王磊的博客 阅读(522) 评论(1) 编辑
摘要: 导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! <! more Java中的集合通常指的是Collection下的三个集合框架List、Set、Queue和Map集?#24076;琈ap并不属于Collection的子集,而是和它平阅读全文
posted @ 2018-11-28 08:27 王磊的博客 阅读(306) 评论(0) 编辑
摘要: 一、Spring Boot 系列诞生原因 上学那会主要学的是 Java 和 .Net 两?#38047;?#35328;,当时对于语言分类这事儿没什么概念,恰好在2009年毕?#30340;?#20250;阴差阳错的?#26085;业?#20102; .Net 的工作,此后就开始了漫长的 .Net 编程之旅,说实话最初的“编程思想”的形成和确立都是在头几年做 .Net 的时候阅读全文
posted @ 2018-11-24 22:31 王磊的博客 阅读(933) 评论(0) 编辑
摘要: 乐观锁、悲观锁、公平锁、自旋锁、偏向锁、轻量级锁、重量级锁、锁膨胀...难理解?不存的!来,话不多说,带你飙车。 上一篇介绍了线程池的使用,在享受线程池带给我们的?#38405;?#20248;势之外,似乎也带来了另一个问题?#21512;?#31243;安全的问题。 那什么是线程的安全问题呢? 一、线程安全问题的产生 线程安全问题:指的是在多线程编阅读全文
posted @ 2018-11-22 09:34 王磊的博客 阅读(381) 评论(0) 编辑
摘要: 本文你将获得以下信息: 线程池源码解读 线程池执行流程分析 带返回值的线程池实现 延迟线程池实现 为了方便读者理解,本文会由浅入深,先从线程池的使用开始再?#30001;?#21040;源码解读和源码分析等高级内容,读者可根据自己的情况自主选择阅?#20102;?#24207;和需要了解的章节。 一、线程池优点 线程池能够更加充分的利用CPU、内存、阅读全文
posted @ 2018-11-19 17:25 王磊的博客 阅读(655) 评论(0) 编辑
摘要: 一、前言 延迟队列的使用场景:1.未按时支付的订单,30分钟过期之后取消订单;2.给活跃度比?#31995;?#30340;用户间隔N天之后推送消息,提高活跃度;3.过1分钟给新注册会员的用户,发送注册?#22987;?#31561;。 实现延迟队列的方式有两种: 1. 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能; 2.阅读全文
posted @ 2018-11-16 10:01 王磊的博客 阅读(1120) 评论(1) 编辑
摘要: 一、前言 RabbitMQ是一个开源的消息代理软件(面向消息的中间件),它的核心作用就是创建消息队列,异步接收和发送消息,MQ的全程是:Message Queue中文的意思是消息队列。 1.1 使用场景 1. 削峰填谷:用于应对间歇性流量提升对于系统的“破坏?#20445;?#27604;如秒杀活动,可?#22253;?#35831;求先发送到消息队阅读全文
posted @ 2018-11-13 09:11 王磊的博客 阅读(745) 评论(2) 编辑
摘要: 一、介绍 JUnit是一款优秀的开源Java单元测试框架,也是目前使用?#39318;?#39640;最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试。 白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人 ?#31508;?#20844;开的; 回归测试:软件阅读全文
posted @ 2018-11-05 12:52 王磊的博客 阅读(2619) 评论(3) 编辑
摘要: 一、简介 Redis是一个开源的使用ANSI C语言编?#30784;?#25903;持网络、可基于内存亦可持?#27809;?#30340;日志型、Key Value数据库,并提供多?#38047;?#35328;的API,Redis也是?#38469;?#39046;域使用最为广泛的存储中间件,它是「Remote Dictionary Service」首字母缩写,也就是「远程字典服务」。 <! m阅读全文
posted @ 2018-11-03 11:52 王磊的博客 阅读(454) 评论(0) 编辑
摘要: 一、简介 Java知名的日志有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看。 <! more 1.1 JUL Java有自己的日志框架JUL(Java Util Logging)在jav阅读全文
posted @ 2018-10-30 19:08 王磊的博客 阅读(1426) 评论(0) 编辑
摘要: 一、简介 在当下这个前后端分离的?#38469;?#36235;势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: <! more 问题一、后端接口查看难:要怎么调用??#38382;?#24590;么传递?有几个?#38382;坎问?#37117;代表什么含义? 问题二、返回数据操作难:数据返回不对或者不够怎么办?怎么才能灵活的操作数据? 这是很多公司阅读全文
posted @ 2018-10-24 09:31 王磊的博客 阅读(2756) 评论(2) 编辑
摘要: 一、概述 在开始学习Thread之前,我们先来了解一下 线程和进程之间的关系: 线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。 线程不能?#27426;?#31435;执行,必须?#26469;?#22312;应用程序中,由应用程序提供多个线程执行控制。 线程和进程的关系是?#21512;?#31243;是属于进程的,线程运行在进程空间内,同一进程所产生阅读全文
posted @ 2018-10-09 19:40 王磊的博客 阅读(593) 评论(0) 编辑
摘要: 一、MongoDB简介 1.1 MongoDB介绍 MongoDB是一个强大、灵活,且易于扩展的通用型数据库。MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加了事务支持。 随着存储数据量不断的增加,开发者面临一个困难:如何扩展数据库?而扩展数据库分为横向扩展阅读全文
posted @ 2018-10-08 09:33 王磊的博客 阅读(900) 评论(1) 编辑
摘要: 一、简介 1.1 MyBatis Generator介绍 MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper、dao、entity 的框架,让我们省去规律性最强的一部分最基础的代码编?#30784;?1.2 MyBatis Generator使用 M阅读全文
posted @ 2018-09-30 10:13 王磊的博客 阅读(1831) 评论(0) 编辑
摘要: 一、简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以?#26696;嘸队成洹yBatis 避免了几乎所有的 JDBC代码和手动设置?#38382;?#20197;及获取结果集。 1.2 MyBatis发展史 MyBatis 原本是apache的一个开源项目iBatis, 201阅读全文
posted @ 2018-09-12 19:13 王磊的博客 阅读(2178) 评论(0) 编辑
耐克篮球多少钱