| 1月 22 2019 Spring学习笔记之IOC容器 基本概念IOC概念 原先在代码中通过硬编码的方式来进行类的实例化,以及定义各个对象之间的依赖关系。现在将类的实例化操作以及对象之间的依赖关系交给Spring容器来管理。实际上控制器交给容器管理了,所以 ...
| 6月 30 2018 记一次netty OOM问题 最近基于netty在做一个项目,在做压测时出现了io.netty.util.internal.OutOfDirectMemoryError,出现大量异常信息: 2018-06-22 14:24:37. ...
| 5月 18 2018 ClassLoader原理以及SPI使用 ClassLoader基本概念ClassLoader,翻译过来就是类加载器。顾名思义,其主要的作用就是将Class文件加载到JVM中生成Class对象。 类加载的过程主要分为3步: 通过一个类的全限 ...
| 5月 10 2018 记一次curl的坑 SpringMVC对象解析的“浅坑” SpringMVC这个坑主要原因不在curl,不过算是背景吧,也顺带记一下。如果想直接看curl的坑请跨过该“浅坑”,直接到后面的“深坑”。 最近在写一个接口, ...
| 4月 27 2018 java注解概念及运用 注解是一种描述数据的数据。Annotations仅仅是元数据,和业务逻辑无关。 元注解@Documented注解是否将包含在JavaDoc中 @Retention 什么时候使用注解,注解的生命周期 ...
java | 4月 21 2018 动态获取泛型的类型 java泛型的概念实际上java中泛型的实现只是一个语法糖,在编译的时候会起作用,帮我们做一些校验,比如String类型的List是否添加了Integer类型的对象。而该校验在编译后会被“擦除”,所以你可以在运行期间跳过泛型检测(例如反射),我们可以实验证实一下。 先写个简单使用泛型的例子: import java.util.List; import java.util.ArrayList; public class TestGeneric { public ...
数据结构 | 3月 15 2017 数据结构--堆 堆的概念 堆首先是一个完全二叉树,我们先看一下完全二叉树的定义 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 再看看堆的定义(二叉堆) 1.父节点的值总是大于(小于)或等于每一个子节点的值2.每个结点的左子树和右子树也是一个堆 根据堆是一个二叉树,我们可以得出一些特性,假设当前结点在数组中的下标为i 一个结点的左儿子数据所在的下标为(i+1)*2-1 一个结点的右 ...
java | 3月 20 2016 JVM再探-垃圾收集器和内存分配策略 java程序内存的分配和释放都是由JVM进行管理的,新建一个对象等分配了一定的内存后,当对象不再被引用时,就需要释放对应的内存,这些都统一归JVM管理,对于JVM的内存释放我们称之为垃圾回收. 垃圾收集器算法JVM垃圾收集算法简单分为3类,标记-清除算法,复制算法以及标记-整理算法. 标记-清除算法标记内存中不再被引用的对象,然后在标记完成后进行统一回收.不足:一是效率问题,标记和清除的过程都需要花费一定时间;二是标记清除后产生大量不连续的内存碎片,当大的对象生成时需要 ...
java | 2月 28 2016 JVM初探-内存区域划分 最近写的爬虫抓取某写网站数据时,发现程序有出现OutOfMemory异常..记得以前面试的时候面试官问有没有遇到过OOM,我都不懂对方问的是啥..好了,扯点废话,接下来开始学习一下JVM相关的知识,以便于今后遇到OOM问题知道如何解决. 内存区域划分程序计数器可以看做是一小块内存区域用于存放当前线程所执行的字节码到什么位置了,我们都知道不同线程执行有个CPU轮询分配时间片的过程,假设是单核CPU,线程A执行到三分之一的位置,CPU由于执行线程B,线程A需要暂停执行.这时就 ...
java | 4月 6 2015 GeoHash的简单使用例子 以前开发一个项目有这样一个需求,货主找附件的车,原来是通过使经纬度进行匹配的,因为经纬度是2个字段,所以匹配起来性能比较低,有一个geohash算法可以将二维的经纬度匹配转为一维的匹配,降低查询效率.详细了解请参见相关博文 背景网上百度的geohash java版的代码发现计算并不准确于是去maven库查询了一下发现有对应的jar包,而且写的比较详细。对应pom文件 <dependency> <groupId>ch.hsr</groupId& ...