自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1577)
  • 收藏
  • 关注

原创 RESTful API 设计

目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的API是否应该加入版本信息?当你开始写一个app的时候,特别是后端模型部分已经写完的时候,你不得不殚精竭虑的设计和实现自己app的public API部分。因为一旦发布,对外发布的API将会很难改变。...

2017-01-13 11:06:00 678

原创 ConcurrentModificationException and a HashMap

Iterator it = map.entrySet().iterator();while(it.hasNext()){Entry item = it.next(); map.remove(item.getKey());}这种方法会出现错误 正确的删除办法是Iterator it = map.entrySet().iterator();   while (it.has...

2017-01-09 19:59:40 607

原创 Java Class卸载与ClassLoader ,class热替换

JVM中的Class只有满足以下三个条件,才能被GC回收,也就是该Class被卸载(unload):   - 该类所有的实例都已经被GC,也就是JVM中不存在该Class的任何实例。   - 加载该类的ClassLoader已经被GC。   - 该类的java.lang.Class 对象没有在任何地方被引用,如不能在任何地方通过反射访问该类的方法 jsp和java类是完全不一样的概...

2016-12-30 11:10:15 876

原创 (转)关于施用full gc频繁的分析及解决

分析当频繁full gc时,jstack打印出堆栈信息如下:sudo -u admin -H /opt/taobao/java/bin/jstack `pgrep java` > #your file path#可以看到的确是在跑低价信息另外在应用频繁full gc时和应用正常时,也执行了如下2种命令:sudo -u admin -H /opt/taobao/jav...

2016-10-21 13:10:54 338

原创 (转)一次让人难以忘怀的排查频繁Full GC过程

 我们的Java应用因频繁FULL GC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研究终于搞定了,现把经验与大家共享,相关的gc日志如下:4.758: [Full GC [PSYoungGen: 464K->0K(71936K)] [PSOldGen: 37949K->33994K(68672K)] 38413K->33994K(140608K)...

2016-10-21 13:08:37 269

原创 (转)How to Monitor Java Garbage Collection

This is the second article in the series of "Become a Java GC Expert". In the first issue Understanding Java Garbage Collection we have learned about the processes for different GC algorithms, about ...

2016-10-21 13:05:14 205

原创 (转)Understanding Java Garbage Collection

What are the benefits of knowing how garbage collection (GC) works in Java? Satisfying the intellectual curiosity as a software engineer would be a valid cause, but also, understanding how GC works c...

2016-10-21 13:04:11 195

原创 (转)How to Tune Java Garbage Collection

This is the third article in the series of "Become a Java GC Expert". In the first issue Understanding Java Garbage Collection we have learned about the processes for different GC algorithms, about h...

2016-10-21 13:02:54 227

原创 邻接表无向图-- Java

邻接表无向图的介绍邻接表无向图是指通过邻接表表示的无向图。上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边。上图右边的矩阵是G1在内存中的邻接表示意图。每一个顶点都包含一条链表,该链表记录了"该顶点的邻接点的序号"。例如,第2个顶点(顶点C)包含的链表所包含的节点的...

2016-08-26 17:22:39 598

原创 邻接表无向图--- C++

邻接表无向图的介绍邻接表无向图是指通过邻接表表示的无向图。上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边。上图右边的矩阵是G1在内存中的邻接表示意图。每一个顶点都包含一条链表,该链表记录了"该顶点的邻接点的序号"。例如,第2个顶点(顶点C)包含的链表所包含的节点的...

2016-08-26 16:51:37 1730

原创 邻接表无向图---C语言

邻接表无向图的介绍邻接表无向图是指通过邻接表表示的无向图。上面的图G1包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"(A,C),(A,D),(A,F),(B,C),(C,D),(E,G),(F,G)"共7条边。上图右边的矩阵是G1在内存中的邻接表示意图。每一个顶点都包含一条链表,该链表记录了"该顶点的邻接点的序号"。例如,第2个顶点(顶点C)包含的链表所包含的节点的...

2016-08-26 16:06:01 441

原创 高并发---限流

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即...

2016-08-16 11:20:05 214

原创 java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结

 堆大小设置JVM 中最大堆大小有三方面限制: 1.相关操作系统的数据模型(32-bt还是64-bit)限制; 2.系统的可用虚拟内存限制; 3.系统的可用物理内存限制. 在32位系统下,一般限制在1.5G~2G;64为操作系统对内存无特定限制.  在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m.典型设置: java -X...

2016-08-03 11:53:24 9127 1

原创 Akka-- ByteString

Immutable消息Actor之间是通过消息沟通的,但为了避免同步问题,消息必须是Immutable。因此,Akka无法使用byte[]或ByteBuffer,而是设计了ByteString来表示二进制数据。理解这一点很重要,因为ByteString是不可变的,所以ByteString的很多看似修改状态的方法实际上都是返回一个新的ByteString实例。如果对String或BigInte...

2016-07-11 12:11:49 241

原创 Java注解与拦截器

简介Annotation(注解),也叫元数据。一种代码级别的说明,是JDK5.0引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。 Annotion是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。注解基础Annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的信息。An...

2016-06-23 09:56:28 740

原创 ExecutorCompletionService

当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一:通过一个list来保存一组future,然后在循环中轮训这组future,直到每个future都已完成。如果我们不希望出现因为排在前面的任务阻塞导致后面先完成的任务的结果没有及时获取的情况,那么在调用get方式时,需要将超时时间设置为0 Java代码 ...

2016-06-22 12:53:24 164

原创 Spark源码分析--资源调度机制

  [java] view plain copy  /*  *schedule()解决了spark资源调度的问题 */  rivate def schedule() {   //首先判断,master状态不是ALIVE的话,直接返回   //也就是说,stanby master是不会进行application等资源调度的   if (...

2016-06-15 11:55:33 219

原创 java获得CPU使用率,内存使用率

  linux下Cpu获取方式之一:  1、从/proc文件系统获取相关的性能参数    cpu使用率:    /proc/stat    内存使用情况:      /proc/meminfo    网络负载信息:    /proc/net/dev相应的计算方法:(摘自:什么是proc文件系统,见参考资料)    (1)   处理器使用率        (2)   内存使用率   ...

2016-06-14 16:29:36 1041

原创 CountDownLatch

 Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。      你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。...

2016-06-02 13:43:05 150

原创 Cron 表达式

1. cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}2. cron表达式各占位符解释:{秒数} ==> 允许值范围: 0~59 ,不允许为空值,若值不合法,调度器将抛出SchedulerException异常"*" 代表每隔1秒钟触发;"," 代表在指定的秒数触发,比如"0,15,45"代表0秒、15秒和45秒时触...

2016-05-31 17:53:11 132

原创 Dubbo分析一

Dubbo的总体架构如下图所示:    节点角色说明: Provider: 暴露服务的服务提供方。Consumer: 调用远程服务的服务消费方。Registry: 服务注册与发现的注册中心。Monitor: 统计服务的调用次调和调用时间的监控中心。Container: 服务运行容器。  调用关系说明: 0. 服务容器负责...

2016-05-09 18:23:12 103

原创 使用HttpClient4模拟表单进行文件上传

1.使用AddPart File file = new File(textFileName, ContentType.DEFAULT_BINARY);HttpPost post = new HttpPost("http://echo.200please.com");FileBody fileBody = new FileBody(file);StringBody string...

2016-03-29 14:06:12 197

原创 maven 刷新

mvn clean install -e -U-e详细异常,-U强制更新  大家可以加我个人微信号:scccdgf 微信公众号: 

2015-06-11 11:35:17 213

原创 java多线程总结五:线程池的原理及实现

1、线程池简介:    多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。        假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。    如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。                一个线程池包括以下四个基...

2015-05-26 12:49:04 228

原创 Java多线程-新特征-信号量Semaphore

简介信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。概念Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放...

2015-04-24 10:57:50 141

原创 Scala与Golang的并发实现对比

并发语言俨然是应大规模应用架构的需要而提出,有其现实所需。前后了解了Scala和Golang,深深体会到现代并发语言与旧有的Java、C++等语言在风格及理念上的巨大差异。本文主要针对Scala和Golang这两个我喜爱的并发语言在并发特性上的不同实现,做个比较和阐述,以进一步加深理解。 一. Scala与Golang的并发实现思路Scala语言并发设计采用Actor模型,借鉴了Erl...

2015-04-23 11:57:10 2610

原创 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。注:什么叫线程安全?这个首先要明确。线程安全就是说多线程访问同一代码,不会...

2015-04-23 10:27:59 86

原创 Java多线程-工具篇-BlockingQueue

前言:     在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队...

2015-04-23 10:27:22 120

原创 Stanford NLP第三课“最小编辑距离(Minimum Edit Distance)”

一、课程介绍斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程,由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课:链接地址以下是本课程的学习笔记,以课程PPT/PDF为主,其他参考资料为辅,融入个人拓展、注解,抛砖引玉,欢迎大家在“我爱公开课”上一起探讨学习。课件汇总下载地址:斯坦福大学自然语言处理公开课课件汇总二、最小编辑距...

2015-04-01 09:54:15 227

原创 【jquery】jquery.cookie.js 的使用指南

jquery.cookie.js 是一款轻量级的 cookie 插件,可以读取,写入和删除 cookie。本文主要针对 jquery.cookie.js 的用法进行详细的介绍。使用方法:设置 cookie:$.cookie('the_cookie', 'the_value');复制代码注:如果 $.cookie 没有第三个参数,那么当浏览器关闭时,该 cookie 将会自...

2015-03-30 12:00:54 162

原创 【javascript】cookie 基础

一、什么是 cookie?cookie 就是页面用来保存信息,比如自动登录、记住用户名等等。二、cookie 的特点1.同个网站中所有的页面共享一套 cookie2.cookie 有数量、大小限制3.cookie 有过期时间三、如何使用 cookie?通过 document.cookie 来写入 cookie<!DOCTYPE HTML><html lang="e...

2015-03-30 11:58:52 103

原创 为什么不应该使用ZooKeeper做服务发现

【编者的话】本文作者通过ZooKeeper与Eureka作为Service发现服务(注:WebServices体系中的UDDI就是个发现服务)的优劣对比,分享了Knewton在云计算平台部署服务的经验。本文虽然略显偏激,但是看得出Knewton在云平台方面是非常有经验的,这篇文章从实践角度出发分别从云平台特点、CAP原理以及运维三个方面对比了ZooKeeper与Eureka两个系统作为发布服务...

2015-03-30 11:50:32 905

原创 详细探究Spark的shuffle实现

Background在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。Spark作为MapReduce框架的一种实现,自然也实现了shuffle的逻辑,本文就深入研究Spark的shuffle是如何实现的,有什么优缺点,与Hadoop Map...

2015-03-17 19:14:08 134

原创 Apache Spark源码走读之3 -- Task运行期之函数调用关系分析

概要本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚运行着的task其输入的数据从哪获取,处理的结果返回到哪里,如何返回。准备spark已经安装完毕spark运行在local mode或local-cluster modelocal-cluster modelocal-cluster模式也称为伪分布式,可以使用如下指令运行...

2015-03-17 18:20:47 116

原创 Android如何实现TCP和UDP传输

TCP和UDP在网络传输中非常重要,在Android开发中同样重要。首先我们来看一下什么是TCP和UDP。什么是TCP?TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模...

2015-03-17 14:42:01 192

原创 Netty代码分析

Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序[官方定义],整体来看其包含了以下内容:1.提供了丰富的协议编解码支持,2.实现自有的buffer系统,减少复制所带来的消耗,3.整套channel的实现,4.基于事件的过程流转以及完整的网络事件响应与扩展,5.丰富的example。本文并不对Netty实际使用中可能出现的问题做分析,只是...

2015-03-16 17:43:52 109

原创 Netty实现原理浅析

Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章 netty使用初步。本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 究。如果下面的内容有错误或不严谨的地方,也请指正和谅解。对于Netty使用者来说,Netty提供了几个典型的example,并有详尽的API doc和guide doc,本文的一些内容及图示也来自...

2015-03-16 16:34:35 102

原创 Netty使用初步

1、简介Java1.4提供了NIO使开发者可以使用Java编写高性能的服务端程序,但使用原生的NIO API就像Linux C中网络编程一样,还是需要做IO处理、协议处理等低层次工作。所以,就像C服务端程序大量使用libevent作为网络应用框架一样,Java社区也不断涌现出基于NIO的网络应用框架。在这其中,Jboss出品的Netty就是个中翘楚。Netty是个异步的事件驱动网络应用框架,...

2015-03-16 16:00:03 104

原创 Apache Spark源码走读之2 -- Job的提交与运行

概要本文以wordCount为例,详细说明spark创建和运行job的过程,重点是在进程及线程的创建。实验环境搭建在进行后续操作前,确保下列条件已满足。下载spark binary 0.9.1安装scala安装sbt安装java启动spark-shell单机模式运行,即local模式local模式运行非常简单,只要运行以下命令即可,假设当前目录是$SP...

2015-03-16 13:02:25 110

原创 Apache Spark源码走读之1 -- Spark论文阅读笔记

楔子源码阅读是一件非常容易的事,也是一件非常难的事。容易的是代码就在那里,一打开就可以看到。难的是要通过代码明白作者当初为什么要这样设计,设计之初要解决的主要问题是什么。在对Spark的源码进行具体的走读之前,如果想要快速对Spark的有一个整体性的认识,阅读Matei Zaharia做的Spark论文是一个非常不错的选择。在阅读该论文的基础之上,再结合Spark作者在2012 De...

2015-03-16 12:51:34 107

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除