飞污熊

August trip


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索

JVM性能分析工具jstack介绍

发表于 2018-06-25 | 分类于 java

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外, 还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一种工具都有其自身的特点, 用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测, 先通过一个表格形式简要介绍下这几个命令的作用和使用方法。本文重点介绍jstack的使用方法。

阅读全文 »

聊聊Reactor I/O模型

发表于 2018-04-05 | 分类于 java

上一篇介绍了Unix系统支持的I/O模型,以及相应的在Java中的实现方式。本篇重点讲解一下Reactor模型原理和实现机制。

I/O多路复用又被称为“事件驱动”,就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪), 能够通知程序进行相应的读写操作,技术上是通过调用操作系统的select、pselect、poll、epoll来实现。

与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。

Reactor是一种应用在服务器端的开发模式,目的是提高服务端程序的并发能力,其实就是实现了I/O多路复用这种I/O模型。

阅读全文 »

聊聊Java中的几种I/O模型

发表于 2018-04-02 | 分类于 java

同步、异步、阻塞、非阻塞都是和I/O(输入输出)有关的概念,最简单的文件读取就是I/O操作。而在文件读取这件事儿上,可以有多种方式。

本篇会先介绍一下I/O的基本概念,通过一个生活例子来分别解释下这几种I/O模型,以及Java支持的I/O模型。

阅读全文 »

nginx反向代理WebSocket

发表于 2018-03-12 | 分类于 fullstack

WebSocket协议相比较于HTTP协议成功握手后可以多次进行通讯,直到连接被关闭。但是WebSocket中的握手和HTTP中的握手兼容, 它使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的基础设施。

WebSocket工作在HTTP的80和443端口并使用前缀ws://或者wss://进行协议标注,在建立连接时使用HTTP/1.1的101状态码进行协议切换, 当前标准不支持两个客户端之间不借助HTTP直接建立Websocket连接。

更多Websocket的介绍可参考我写的 聊一聊WebSocket 一文。

开发小程序的时候需要用到WebSocket长连接和推送技术,但是必须使用wss,并且必须通过域名访问。这时候就需要用到nginx反向代理了。

阅读全文 »

发布Maven构件到中央仓库

发表于 2018-01-27 | 分类于 开发工具

之前写过一篇如何使用Nexus私服,发布自己写的maven构件,供大家使用。但是只能在公司内部用, 而你想全世界的人都能用到你写的东西,就需要发布到Maven中央仓库了。

本篇文章详细讲解如何发布Maven构件到中央仓库。

阅读全文 »

Java几种常用JSON库性能比较

发表于 2018-01-09 | 分类于 java

上一篇介绍了Java性能测试框架JMH的使用方法,本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。

JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。

目前对于Java开源的JSON类库有很多种,下面我们取4个常用的JSON库进行性能测试对比, 同时根据测试结果分析如果根据实际应用场景选择最合适的JSON库。

这4个JSON类库分别为:Gson,FastJson,Jackson,Json-lib。

阅读全文 »

Java微基准测试框架JMH

发表于 2018-01-07 | 分类于 java

JMH,即Java Microbenchmark Harness,这是专门用于进行代码的微基准测试的一套工具API。

JMH 由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发 。何谓 Micro Benchmark 呢? 简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。

Java的基准测试需要注意的几个点:

  • 测试前需要预热。
  • 防止无用代码进入测试方法中。
  • 并发测试。
  • 测试结果呈现。

比较典型的使用场景:

  1. 当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行定量的分析。
  2. 想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性
  3. 一个函数有两种不同实现(例如JSON序列化/反序列化有Jackson和Gson实现),不知道哪种实现性能更好

尽管 JMH 是一个相当不错的 Micro Benchmark Framework,但很无奈的是网上能够找到的文档比较少,而官方也没有提供比较详细的文档,对使用造成了一定的障碍。 但是有个好消息是官方的 Code Sample 写得非常浅显易懂, 推荐在需要详细了解 JMH 的用法时可以通读一遍——本文则会介绍 JMH 最典型的用法和部分常用选项。

阅读全文 »

CentOS7搭建ngrok服务器

发表于 2017-12-29 | 分类于 web

ngrok是一个反向代理,它能够让你本地的web服务或tcp服务通过公共的端口和外部建立一个安全的通道, 使得外网可以访问本地的计算机服务。也就是说,我们提供的服务(比如web站点)无需搭建在外部服务器, 只要通过ngrok把站点映射出去,别人即可直接访问到我们的服务。

有做过微信公众号开发的人,对它应该不陌生。因为用户跟微信公众号产生的交互行为,微信会把用户的相关信息推送到我们自己的服务器, 如果服务在本地,那微信当然无法推送给我们,这使得开发功能的时候调试相当麻烦。我们可以使用ngrok把本地站点映射出去,解决这个问题。

另外如果我们想把本地开发时候的系统临时给外网用户看,无需部署到服务器上面去就可以,非常方便。

ngrok是开源的,官网地址:https://github.com/inconshreveable/ngrok

下面,我们开始搭建ngrok服务。操作系统为CentOS 7.2

阅读全文 »

小程序开发 - websocket

发表于 2017-12-15 | 分类于 微信开发

小程序已经添加了对WebSocket的支持,如果需要长连接和推送的场景来讲可以使用。 关于websocket的使用,小程序WebSocket API 里边已经给了。 相比较传统的HTTP接口形式,websocket长连接可实现双向通信,但是用好它可并不简单。

刚开始的时候做这个推送,我选用了Socket.IO协议来实现,服务器端用netty-socketio实现, 而小程序用了一个第三方库wxapp-socket-io,但是遇到各种问题,连接自动断掉,一直连不上服务器。

阅读全文 »

小程序开发 - 跳转支付

发表于 2017-12-13 | 分类于 微信开发

根据微信支付的官方文档,小程序支付需要绑定商户号,并且小程序和商户号的认证主体必须一致。 目前我们的商业逻辑是小程序平台主体和支付的商户主体不一致, 那么就需要从我们的小程序跳转到支付主体小程序完成支付后,再返回我们的小程序。

曾经尝试过在小程序中通过webview的方式嵌套H5网页,使用公众号支付方式,后来发现小程序并未开放这个JSAPI。

接下来详细介绍一下如何实现小程序之间的跳转支付。

阅读全文 »

12…20
熊能

熊能

这里要写啥我不是很清楚 →_→

193 日志
18 分类
87 标签
RSS
GitHub 微博
Links
  • 酷壳
  • InfoQ
  • 伯乐在线
  • 博客园
© 2015 - 2019 熊能
由 Hexo 强力驱动
|
粤ICP备17025554号-1