Java
文章平均质量分 73
czj1992czj
这个作者很懒,什么都没留下…
展开
-
选择排序
算法描述选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 算法分析表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就...原创 2018-04-18 15:18:45 · 168 阅读 · 0 评论 -
Java 迭代器模式
本文主要用作学习记录,参考headfirst设计模式设计原则:找出应用中可能需要变化之外,把它们独立出来,不要和那些不需要变化的代码混在一起设计原则:针对接口编程,而不是针对实现编程设计原则:多用组合,少用继承设计原则:类应该对扩展开放,对修改关闭设计原则:一个类应该只有一个引起变化的原因迭代器模式:提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露内部的表示//定义遍历接口public in...原创 2018-03-09 10:57:14 · 258 阅读 · 0 评论 -
Java 模板模式
本文主要用作学习记录,参考headfirst设计模式设计原则:找出应用中可能需要变化之外,把它们独立出来,不要和那些不需要变化的代码混在一起设计原则:针对接口编程,而不是针对实现编程设计原则:多用组合,少用继承设计原则:类应该对扩展开放,对修改关闭模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。JDK中...原创 2018-03-08 19:35:17 · 202 阅读 · 0 评论 -
Java 外观模式
本文主要用作学习记录,参考headfirst设计模式设计原则:找出应用中可能需要变化之外,把它们独立出来,不要和那些不需要变化的代码混在一起设计原则:针对接口编程,而不是针对实现编程设计原则:多用组合,少用继承设计原则:类应该对扩展开放,对修改关闭外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。JDK中体现:java.util.logging...原创 2018-03-08 19:34:40 · 203 阅读 · 0 评论 -
Java 命令模式
本文主要用作学习记录,参考headfirst设计模式设计原则:找出应用中可能需要变化之外,把它们独立出来,不要和那些不需要变化的代码混在一起设计原则:针对接口编程,而不是针对实现编程设计原则:多用组合,少用继承设计原则:类应该对扩展开放,对修改关闭命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。JDK中体现:Runnable;Calla...原创 2018-03-08 13:30:50 · 963 阅读 · 0 评论 -
CMS GC
-server -Xms8192M -Xmx8192M -Xmn3072M -XX:ParallelGCThreads=20 -XX:SurvivorRatio=6 -XX:TargetSurvivorRatio=80 -XX:InitialTenuringThreshold=15 -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:原创 2018-01-02 11:22:15 · 311 阅读 · 0 评论 -
LRU
LRU目前使用的是google的cache Cache,byte[]> cacheBuilder = CacheBuilder.newBuilder().weakKeys().weakValues().maximumSize(10000000) .expireAfterAccess(7, TimeUnit.DAYS) .removal原创 2017-12-13 16:07:37 · 273 阅读 · 0 评论 -
查看Java线程占用CPU过高命令
ps -mp 5621 -o THREAD,tid,time 查看占用cpu过高线程,找到tid$ ps -mp 5621 -o THREAD,tid,timeUSER %CPU PRI SCNT WCHAN USER SYSTEM TID TIMEbigdata 0.0 - - - - - - 01:22:37big...原创 2018-05-14 15:35:32 · 3175 阅读 · 2 评论 -
Java 缓存
强引用,软引用,弱引用,虚引用这里就不多说了,百度下就好了。缓存使用的是softreference。注意需要jvm参数中需要加上启动时需要加上-Xms5M -Xmx5M -XX:-UseGCOverheadLimit -XX:+PrintGCDetails -XX:+PrintReferenceGC -XX:SoftRefLRUPolicyMSPerMB=0import org.slf4j.L...原创 2018-05-25 13:05:47 · 331 阅读 · 0 评论 -
锁的分类
本文仅作学习使用,参考:http://www.cnblogs.com/lxmyhappy/p/7380073.html独享锁/共享锁独享锁是指该锁一次只能被一个线程所持有共享锁是指该锁可被多个线程所持有对于Java ReentrantLock而言,其是独享锁。但是对于Lock的另一个实现类ReadWriteLock,其读锁是共享锁,其写锁是独享锁读锁的共享钢梁可转载 2017-11-04 13:49:46 · 278 阅读 · 0 评论 -
查看JDK native 源码
下载 openjdk 源码:点击打开链接选择版本,下载RI Source Code代码路径在:/openjdk/jdk/src/windows/native 对应着java中的类名如:jdk 中SocketOutputStream中的write0的native方法 /openjdk/jdk/src/windows/native/java/net/SocketOutputStream.c...原创 2018-05-22 14:28:39 · 3727 阅读 · 0 评论 -
Java 组合模式
本文主要用作学习记录,参考headfirst设计模式设计原则:找出应用中可能需要变化之外,把它们独立出来,不要和那些不需要变化的代码混在一起设计原则:针对接口编程,而不是针对实现编程设计原则:多用组合,少用继承设计原则:类应该对扩展开放,对修改关闭设计原则:一个类应该只有一个引起变化的原因组合模式允许你将对象组合成树结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合...原创 2018-03-09 10:58:37 · 354 阅读 · 0 评论 -
JDK1.8参数接口
Predicate接口定义了一个名叫test的抽象方法,它接受泛型T对象,并返回一个boolean。 public class PredicateTest { @FunctionalInterface public interface Predicate<T>{ boolean test(T t); } public static <T...原创 2018-02-28 16:07:11 · 546 阅读 · 0 评论 -
ReentrantLock
public ReentrantLock(){ sync = new NonfairSync(); } public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); } abstract static class Sync extends Abst...原创 2017-11-10 15:05:32 · 163 阅读 · 0 评论 -
插入排序
算法描述插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。算法分析插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。动图演示C语言#include<st...原创 2018-04-18 15:35:19 · 166 阅读 · 0 评论 -
归并排序
算法描述归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。算法分析归并排序是一种稳定的排序方法。和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(nl...原创 2018-04-18 17:55:12 · 185 阅读 · 0 评论 -
快速排序
算法描述快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。动图演示C语言第一版#include<stdio.h>void quicksort1(int *,int,int);int partition(int *,int,int);void swap(int *,in...原创 2018-04-19 13:42:04 · 281 阅读 · 0 评论 -
两个线程一个打A一个打B
import java.util.concurrent.atomic.AtomicBoolean;/** * Created by jenkin */public class ThreadPrintAB { //简单暴力 public void printAB() { AtomicBoolean atomicBoolean = new AtomicBool...原创 2018-05-02 16:43:48 · 474 阅读 · 0 评论 -
三个线程分别打印A,打印B,打印C
/** * Created by jenkin */public class ThreadPrintABC { int atomicInteger = 0; public void printfABC() { Object lock = new Object(); Thread thread = new Thread(() -> { ...原创 2018-05-02 16:44:57 · 1134 阅读 · 0 评论 -
JVM学习
本文参考深入理解Java虚拟机一书和http://www.importnew.com/17770.html,供作个人学习记录程序计数器:可以看作是当前线程所执行的字节码的行号指示器,字节码解释器的工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。一个处理器都会执行一条线程中的指令。因此为了线程切换后能恢复到正...原创 2017-09-29 23:45:04 · 173 阅读 · 0 评论 -
300行的动态配置中心客户端
300行的动态配置中心客户端配置中心在目前service化中占着越来越重要的步骤,特别是在docker容器中。在去年我们公司也需要一个这样的配置中心,借鉴了国内外如阿里百度配置中心。准备自己也写一个。一开始设计的复杂的一米,可能需要一个月四五个人的开发才能完成。但是突然的灵感,一下午就写完了,而且在线上运行了6个月80多台机器共同使用。没有一点问题。不会挂的原因很简单,所有的配置都在zookeep...原创 2017-08-28 23:19:44 · 746 阅读 · 0 评论 -
IdentityHashMap
import com.sun.jersey.core.util.StringIgnoreCaseKeyComparator;import java.util.HashMap;import java.util.IdentityHashMap;/** * Created by jc6a on 2017/12/8. */public class IdentityHashMapTest {...原创 2017-12-08 09:41:59 · 210 阅读 · 0 评论 -
JDK1.8 HashMap
//构造方法public HashMap(int initialCapacity,float loadFactor){ if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + ...原创 2017-10-28 15:01:12 · 198 阅读 · 0 评论 -
jdk8 metasapce load class过多,问题查找相关命令
一次上线因为使用protostuff的序列化与反序列化导致Metaspace区域的class一直增长,从而导致metaspace区域full gc,以致服务很卡顿。提供以下方法查看metaspace相关情况jstat -gcmetacapacity 9536 MCMN MCMX MC CCSMN CCSMX CCSC YGC ...原创 2018-03-07 16:46:47 · 433 阅读 · 0 评论 -
CAS 原理剖析
此文主要借鉴 点击打开链接源码在atomic_linux_x86.inline.hpp中openjdk-8u40-src-b25-10_feb_2015\openjdk\hotspot\src\os_cpu\linux_x86\vm\atomic_linux_x86.inline.hppinline jint Atomic::cmpxchg (jint exchange_va...原创 2018-06-09 10:58:42 · 403 阅读 · 0 评论