JAVA进阶
文章平均质量分 76
ninetyhe
技术从来都是从实践中总结而来的
展开
-
关于JVM个人浅谈(二)
在上一章,我们了解Java虚拟机的分布以及各个部分的主要存储内容,下面将介绍GC的长用回收算法。1.引用计数法:引用计数法是比较古老的一种垃圾回收算法。主要实现就是当任何一个对象引用A对象的时候,则在A对象的计数器上加1,如果引用失效的时候,则将A的计数器减1,如果对象A的引用计数器为0,则回收该对象的内存空间。这种方式虽然简单,但是存在不足,就是当A对象引用B对象,B对象又引用A对象,这原创 2015-08-05 10:45:54 · 677 阅读 · 0 评论 -
静态代理与动态代理
首先了解一下代理作用:代理解藕,是的接口实现类与业务代码解藕,无需通过调用接口实现类却不仅仅实现了接口的方法而且对该方法增加,同时也使得代码的逻辑层次清晰。首先我们看看静态代理:/** * 接口 * Created by ykanghe on 12/28/16. */public interface SimpleInterface { public void sayH原创 2016-12-28 22:50:06 · 534 阅读 · 0 评论 -
关于Integer的一个大坑
最近在业务代码中,一时偷懒,用了包装类,于是踩了一个大坑;而话不说,先上代码:Integer a=1;Integer b=2;Integer c =129;Integer d = 129;a=b true; c=b fales;为什么呢?看看源码:/** * Cache to support the object identity semantics原创 2016-12-16 11:31:16 · 879 阅读 · 1 评论 -
浅谈IO的那点事
1.首先介绍一下阻塞,非阻塞,同步和异步的关系;所谓阻塞即在调用结果没有返回之前,线程一直挂起;非阻塞则是无论结果是否返回,则都不会阻塞当前线程;同步:即调用方法或者函数的时候必须有结果才返回,而非同步则调用完方法则直接返回了;2.io模型:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞;例子具体可见:http://blog.csdn.net/barnetthe/article/det原创 2016-11-27 16:22:21 · 739 阅读 · 0 评论 -
Java中Volatile个人理解
1.what is volatile? 在java中为了解决线程的并发问题,引入了volatile关键字修饰符号;其作用是:在多线程情况下,保证数据同步,换句话说就是在多线程情况下,对一个volatile字段进行修改后,任何访问这个字段的线程都是读到最新的值。2.volatile is thread safe? 虽然volatile可以保证在多线程的情况下,数据同步,但是volat原创 2016-12-06 17:08:14 · 521 阅读 · 0 评论 -
Java实现二叉搜索树
package Tree;/** * Created by ykanghe on 2016/9/8. */public class BinSearchTree { //根节点 Node root; //叶子节点 private static class Node { public int iData; public int原创 2016-09-08 16:09:19 · 409 阅读 · 0 评论 -
JAVA实现将数组存入二叉树中
在工作中,当我们面临在使用内存存储数据的时候,只使用hashmap存储,可能会面临内存不足,只能不断扩容的情况下。于是我们可以自己写一些数据结构来存储,譬如二叉树这样的数据结构来存储,这样如果重复的字段只存在一个节点,不同的字段只需要延时叶子节点即可。下面一起来看看,如何用java实现二叉树的存储结构,下面只是一个简单的例子,如果读者需要使用复杂的结构的话,可以按自己的需要自行实现;原创 2016-09-07 14:21:09 · 6051 阅读 · 0 评论 -
消息中间件RabbitMQ
一.RabbitMq 概念:RabbitMq是开源的AMQP(Advance Message Queuing Protocol,高级消息队列协议;),服务端是通过Erlang语言编写的,该协议是应用层的面向消息的中间设计,该特点是面向消息,路由,队列并提供可靠型,安全型的队列协议,支持跨平台,然而其中最大的特点就是异步。RabbitMqAPI中基本对象就是ConnectionFactory原创 2016-03-08 16:32:01 · 823 阅读 · 0 评论 -
Java如果提高反射效率
1.什么是反射?通俗的来说就是,通过java的类名创建Class对象,然后我们可以通过class对象的newInstance的方法获得我们所需要的对象,而且这个过程是在程序运行中创建的,我们可以称之为动态编译,这样很大的提高了代码的灵活性,并降低了代码之前的耦合度。这样我们常见的例子就是Class.forName("JDBC");我想我们在加载jdbc的时候都用过这个方法,这样就是反射,具体的原创 2016-01-20 15:29:19 · 2793 阅读 · 0 评论 -
Netty浅谈(一)
1.what is netty ?netty是jboss下的提供一个异步,事件驱动的网络应用框架,该框架极大简化了网络编程,并具备高性能,高可靠的优点。这里需要和NIO区分一下的是,NIO是基于异步的网络通信框架,而netty由于是基于NIO实现的,所以即能基于网络通信,而且可以用于网络应用的分层结构,也许这么说很抽象,但后续会基于NIO的零拷贝解释清楚。目前只需要知道netty是网络应用框架原创 2015-12-11 16:15:18 · 645 阅读 · 0 评论 -
愿你从根本上了解HashMap
想必对于一个Java开发程序员来说,HashMap用的不少了,当被人问起你了解HashMap的时候,也许你会说:HashMap是线程不安全的,HashMap采取K,V的形式存储,HashMap是高效,强一点的会说,HashMap通过一个Entry的内部类实现的,是的,可你真的了解Map吗?你会说Map是通过数组实现的,你或者也会说是通过链表实现的?可它实际上是通过数组和链表实现的,就算你知道这一点原创 2015-09-07 20:55:32 · 1089 阅读 · 0 评论 -
Java问题排查(运维篇)
每一位开发想必都会遇到线上服务告警,而导致这样原因的肯能有流量增加或是代码中bug异常没有抓住导致,而此刻我们就需要去排查问题。1:业务增加,导致FGC频繁发送,如果不知道如何查看FGC的话,可以参考之前写的:Jstat查看MinorGC和FGC使用详解,点击即可。这里不做重新复述。当发现FGC的次数频繁很高,这里说明了需要优化JVM来减少FGC的次数;而这种问题不是个人原因导致的线上问题,所原创 2015-08-20 10:15:55 · 2561 阅读 · 0 评论 -
关于JVM个人浅谈(一)
Java虚拟机是Java程序运行的基础,也是深入理解java的必备知识。 首先JVM的内存分布主要有:程序计数器,虚拟机栈,本地方法栈,Java堆,方法区。其中标红的表示相对更重要。 1)程序计数器程序计数器是一块很小的内存,是每一块线程的私有空间,主要负责为每一个线程记录下一条需要运行的指令。如果当前线程正在执行一个Java方法,则程序计数器记录正在执行的Java字节码地址,如果原创 2015-08-05 10:15:33 · 799 阅读 · 0 评论 -
深度理解反射机制
1.反射的概念:Java的反射机制就是指程序在运行的状态下,允许改变程序的结构或者变量类型。换句话说就是Java可以加载一个运行时才得知名称的class类,获得其构造函数,成员变量以及方法;2.Java通过反射机制实例化的方法:1)获得该对象的类: import java.lang.reflect.Field;import java.util.List;/** * Cre原创 2016-12-31 15:10:22 · 717 阅读 · 0 评论