<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Al_assad的博客]]></title><description><![CDATA[念念不忘，必有回响]]></description><link>https://blog.csdn.net/Al_assad</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Al_assad]]></copyright><item><title><![CDATA[Java 线程同步器：从 synchronized、Lock 到 StampedLock]]></title><link>https://blog.csdn.net/Al_assad/article/details/82470238</link><guid>https://blog.csdn.net/Al_assad/article/details/82470238</guid><author>Al_assad</author><pubDate>Fri, 07 Sep 2018 00:19:42 +0800</pubDate><description><![CDATA[Java 线程同步器：从 synchronized、Lock 到 StampedLock

 

 

synchronized 和 lock 的对比

synchronized 关键字和 juc 中的 Lock 可以说是 Java 最为常用的线程同步器了，以下我们从多个角度来比较这两者的区别；

首先我们先看一个实际例子中的两者代码的区别：

一个线程共享对象 TimerBean


publi...]]></description><category></category></item><item><title><![CDATA[[转载]Java 线程 5 种状态下的线程中断]]></title><link>https://blog.csdn.net/Al_assad/article/details/82388946</link><guid>https://blog.csdn.net/Al_assad/article/details/82388946</guid><author>Al_assad</author><pubDate>Tue, 04 Sep 2018 19:28:25 +0800</pubDate><description><![CDATA[[转载]Java并发之线程中断

原文章地址：https://blog.csdn.net/qq_35326718/article/details/78137108

 

     前面的几篇文章主要介绍了线程的一些最基本的概念，包括线程的间的冲突及其解决办法，以及线程间的协作机制。本篇主要来学习下Java中对线程中断机制的实现。在我们的程序中经常会有一些不达到目的不会退出的线程，例如：我们有一个...]]></description><category></category></item><item><title><![CDATA[JDK8 Stream 详细使用]]></title><link>https://blog.csdn.net/Al_assad/article/details/82356845</link><guid>https://blog.csdn.net/Al_assad/article/details/82356845</guid><author>Al_assad</author><pubDate>Mon, 03 Sep 2018 23:58:53 +0800</pubDate><description><![CDATA[JDK8 管道 Stream 详细使用介绍

 

Stream 的获取

① 通过集合Collection获取


List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;Integer&amp;gt;(Arrays.asList(1,2,3,4,5));
Stream&amp;lt;Integer&amp;gt; stream = list.stream();

② 通过数组获取


...]]></description><category></category></item><item><title><![CDATA[JDK8 Stream 数据流效率分析]]></title><link>https://blog.csdn.net/Al_assad/article/details/82356606</link><guid>https://blog.csdn.net/Al_assad/article/details/82356606</guid><author>Al_assad</author><pubDate>Mon, 03 Sep 2018 23:26:57 +0800</pubDate><description><![CDATA[JDK8 Stream 数据流效率分析

 

Stream 是Java SE 8类库中新增的关键抽象，它被定义于 java.util.stream （这个包里有若干流类型： Stream&amp;lt;T&amp;gt; 代表对象引用流，此外还有一系列特化流，如 IntStream，LongStream，DoubleStream等 ），Java 8 引入的的Stream主要用于取代部分Collection的操作...]]></description><category></category></item><item><title><![CDATA[Java字节码反编译工具 jclasslib]]></title><link>https://blog.csdn.net/Al_assad/article/details/82289536</link><guid>https://blog.csdn.net/Al_assad/article/details/82289536</guid><author>Al_assad</author><pubDate>Sat, 01 Sep 2018 18:21:38 +0800</pubDate><description><![CDATA[Java 字节码反编译工具

 

在对 Java 代码执行过程效率分析过程中会很经常查看代码编译后的字节码，或者将字节码反编译后，查看Java底层对于原来代码的优化结果，当然 JDK 本身已经提供了 javap 反编译工具可以完成这一过程， 也有很多第三方工具可以提供更加方便的可视化功能，如 JD-GUI，jclasslib 等，以下介绍 IDEA（Intellij 大法好） 的 jclassl...]]></description><category></category></item><item><title><![CDATA[postman 详细使用 (6)：自动化测试 API newman 的基本使用]]></title><link>https://blog.csdn.net/Al_assad/article/details/81370215</link><guid>https://blog.csdn.net/Al_assad/article/details/81370215</guid><author>Al_assad</author><pubDate>Fri, 03 Aug 2018 01:59:32 +0800</pubDate><description><![CDATA[postman 自动化测试 API newman 的基本使用

 

postman 开放了应用程序中常用的 API -- newman 供外部程序调用，newman 基于 node.js ，除了可以直接在命令行中直接运行，还支持作为 module 在 node 代码中调用，newman 项目地址：https://www.npmjs.com/package/newman

 

newman 可以...]]></description><category></category></item><item><title><![CDATA[postman 详细使用(5)：使用 xmysql 连接 MySQL 数据库]]></title><link>https://blog.csdn.net/Al_assad/article/details/81370196</link><guid>https://blog.csdn.net/Al_assad/article/details/81370196</guid><author>Al_assad</author><pubDate>Fri, 03 Aug 2018 01:49:05 +0800</pubDate><description><![CDATA[postman 使用 xmysql 连接 MySQL 数据库

 

postman 本身并没有提供数据库连接功能，如果需要 postman 连接数据库，有一种实现思路，就是为提供 Restful 风格的 HTTP 接口，再由 postman 去访问这一系列的 Rest API 来实现对数据库的访问；

 

如果需要实现连接 MySQL 数据库的 REST API ，实现的方式有很多，比如 Ja...]]></description><category></category></item><item><title><![CDATA[postman 详细使用 (4)：导入 csv、json 外部数据]]></title><link>https://blog.csdn.net/Al_assad/article/details/81370183</link><guid>https://blog.csdn.net/Al_assad/article/details/81370183</guid><author>Al_assad</author><pubDate>Fri, 03 Aug 2018 01:42:51 +0800</pubDate><description><![CDATA[postman 导入 csv、json 外部数据

 

postman 支持导入外部数据（csv 格式或 json 格式），使用外部数据循环执行某一组 collection ，这对于自动化测试是十分方便的，以下以一个例子来说明步骤：

 

假设要对 getHolidayByTimes 接口进行测试，该接口返回请求参数 startTime，stopTime 之间的假期时间，响应的 json 类似...]]></description><category></category></item><item><title><![CDATA[postman 详细使用 (3)：拦截重发 HTTP 请求]]></title><link>https://blog.csdn.net/Al_assad/article/details/81370171</link><guid>https://blog.csdn.net/Al_assad/article/details/81370171</guid><author>Al_assad</author><pubDate>Fri, 03 Aug 2018 01:34:50 +0800</pubDate><description><![CDATA[postman 拦截重发 HTTP 请求

 

类似于 Fiddler， postman 也可以实现对于 HTTP 请求的拦截，native app 和 chrome app 实现的方式不太一样，native app 是通过内建代理服务器实现的，chrome app 是通过 Postman Interceptor 插件实现的，以下分别介绍。

 

需要注意的是，根据官方文档的描述( https...]]></description><category></category></item><item><title><![CDATA[postman 详细使用 (2)：预处理脚本、断言]]></title><link>https://blog.csdn.net/Al_assad/article/details/81370153</link><guid>https://blog.csdn.net/Al_assad/article/details/81370153</guid><author>Al_assad</author><pubDate>Fri, 03 Aug 2018 01:23:39 +0800</pubDate><description><![CDATA[postman 预处理脚本、断言

 

postman 为每一个 HTTP 请求提供了 pre-request script 用于存放在该请求进行之前执行的脚本，tests 用于存放在该请求获取响应之后执行的脚本，一般用于根据响应信息进行断言测试；

这里需要注意的是，postman 分为 native app、 chrome app 两个版本，native app 中的部分对象 chrome ...]]></description><category></category></item><item><title><![CDATA[postman 详细使用 (1)：发送 HTTP 请求 & Colletion 集合测试]]></title><link>https://blog.csdn.net/Al_assad/article/details/81370137</link><guid>https://blog.csdn.net/Al_assad/article/details/81370137</guid><author>Al_assad</author><pubDate>Fri, 03 Aug 2018 01:15:19 +0800</pubDate><description><![CDATA[postman 基本介绍

 

postman 是一款集 http 请求、http拦截、http 接口覆盖测试的软件，类似于 fiddler，postman 支持使用基于 node.js 沙箱运行的 javascript 脚本支持，同时其 newman 进一步开放了主要的 api ，供应 node 环境的 javascript 程序调用，可以十分方便地完成接口的自动化测试；

 

postma...]]></description><category></category></item><item><title><![CDATA[Git 合并多次 commit 、 删除某次 commit]]></title><link>https://blog.csdn.net/Al_assad/article/details/81145856</link><guid>https://blog.csdn.net/Al_assad/article/details/81145856</guid><author>Al_assad</author><pubDate>Sat, 21 Jul 2018 16:12:17 +0800</pubDate><description><![CDATA[Git 合并多次 commit

 

有时候在一个分支的多次意义相近的 commit，会把整个提交历史搞得很混乱，此时可以将一部分的 commit 合并为一个 commit，以美化整个 commit 历史，可以使用 rebase 的方法来合并多次 commit，主要步骤如下：

 

1. git log 查看当前的提交历史

比如需要将以下 3 个 ”请假应用客户端代码优化“ 的 commit...]]></description><category></category></item><item><title><![CDATA[Fiddler 反向代理调试：修改http请求、修改http响应]]></title><link>https://blog.csdn.net/Al_assad/article/details/81096767</link><guid>https://blog.csdn.net/Al_assad/article/details/81096767</guid><author>Al_assad</author><pubDate>Wed, 18 Jul 2018 13:50:31 +0800</pubDate><description><![CDATA[Fiddler 抓包调试

 

Fiddler 是一款功能强大的 http 抓包工具，对于 http 请求响应抓包调试十分实用，可以很方便查看 http 请求，http 响应的内容，修改 http 请求后重新发送，拦截 http 响应修改后重新响应；

 

Fiddler 基本界面介绍

以下是 fiddler 主界面的工具栏



 

其中“切换代理模式”，fiddler 有以下 2 种代...]]></description><category></category></item><item><title><![CDATA[Ubuntu 更换 apt 镜像源]]></title><link>https://blog.csdn.net/Al_assad/article/details/80233711</link><guid>https://blog.csdn.net/Al_assad/article/details/80233711</guid><author>Al_assad</author><pubDate>Tue, 08 May 2018 00:25:04 +0800</pubDate><description><![CDATA[Ubuntu 更换 apt 镜像源apt 是 Ubuntu 系的包管理工具，一般默认使用 ubuntu 的官方源 http://archive.ubuntu.com/ 在国内下载的速度慢到让人想砸电脑，可以更换为国内的镜像源以提高 apt 的下载速度；国内镜像源推荐阿里 OPSX 源：https://opsx.alibaba.com/mirror网易 163 源：http://mirrors.16...]]></description><category></category></item><item><title><![CDATA[Netty 支持 HTTP 协议]]></title><link>https://blog.csdn.net/Al_assad/article/details/79472423</link><guid>https://blog.csdn.net/Al_assad/article/details/79472423</guid><author>Al_assad</author><pubDate>Wed, 07 Mar 2018 15:52:16 +0800</pubDate><description><![CDATA[ Netty 支持 HTTP 协议对于 HTTP/HTTPS 协议的支持，Netty 提供以下的 codec 编解码器支持：HttpRequestEncoder对 HTTP 请求进行解码，用于服务端入站HttpResponseEncoder对 HTTP 响应进行解码，用于客户端入站HttpRequestDecoder对 HTTP 请求进行编码，用于客户端出站HttpResponseDecoder对...]]></description><category></category></item><item><title><![CDATA[Netty 实现心跳发送机制]]></title><link>https://blog.csdn.net/Al_assad/article/details/79472387</link><guid>https://blog.csdn.net/Al_assad/article/details/79472387</guid><author>Al_assad</author><pubDate>Wed, 07 Mar 2018 15:50:43 +0800</pubDate><description><![CDATA[Netty 实现心跳发送机制处理空闲连接是一项常见的任务，为了能够及时的将资源释放出来，需要在服务端检测空闲连接和超时，常见的方法是通过发送信息来测试一个不活跃的链接，通常被称为“心跳”，然后在远端确认它是否还活着，Netty 提供了 IdleStateHandler 处理这个过程；以下是一个示例的实现控制器，在服务端每间隔 5s（设置为 5s 仅仅只是为了测试方便，实际开发中可以设置一个更长的事...]]></description><category></category></item><item><title><![CDATA[Netty 使用 EmbeddedChannel 进行单元测试]]></title><link>https://blog.csdn.net/Al_assad/article/details/79472347</link><guid>https://blog.csdn.net/Al_assad/article/details/79472347</guid><author>Al_assad</author><pubDate>Wed, 07 Mar 2018 15:48:23 +0800</pubDate><description><![CDATA[Netty 使用 EmbeddedChannel 进行单元测试对于 Netty 的 ChannelHandler 进行单元测试，Netty 提供了 EmbeddedChannel 嵌入式通道来完成这一过程，主要使用该通道来测试数据的入站出站过程是否合法；该通道提供以下常用的 API：writeInbound	写一个入站消息到 EmbeddedChannel。 如果数据能从 EmbeddedChan...]]></description><category></category></item><item><title><![CDATA[Netty(5)：核心部件：Codec 编解码器]]></title><link>https://blog.csdn.net/Al_assad/article/details/79451979</link><guid>https://blog.csdn.net/Al_assad/article/details/79451979</guid><author>Al_assad</author><pubDate>Mon, 05 Mar 2018 22:20:13 +0800</pubDate><description><![CDATA[Netty Codec 编解码器Netty 对于解决数据从一种特定协议格式到另一种格式的转换（如二进制字节和POJO之间地转换），提供了 codecs (编解码器) 组件来处理的。使用 Netty 的 codecs ，可以很方便地为各种不同地协议编写编解码器；解码器：负责处理入站数据，将消息从字节或其他序列形式转成指定的消息对象；编码器：负责处理出站数据，将消息对象转化为字节或其他序列形式；消息被...]]></description><category></category></item><item><title><![CDATA[Netty(4)：核心部件： ChannelPipeline & ChannelHandler 处理链]]></title><link>https://blog.csdn.net/Al_assad/article/details/79451931</link><guid>https://blog.csdn.net/Al_assad/article/details/79451931</guid><author>Al_assad</author><pubDate>Mon, 05 Mar 2018 22:18:17 +0800</pubDate><description><![CDATA[ChannelHandlerChannel 生命周期Netty 的 Channel 含有以下 4 个生命周期：channelUnregistered   - channel已创建但未注册到一个 EventLoop.channelRegistered      - channel 注册到一个 EventLoop.channelActive             - channel 变为活跃状态(连...]]></description><category></category></item><item><title><![CDATA[Netty(3)：核心部件：Transport 传输]]></title><link>https://blog.csdn.net/Al_assad/article/details/79451899</link><guid>https://blog.csdn.net/Al_assad/article/details/79451899</guid><author>Al_assad</author><pubDate>Mon, 05 Mar 2018 22:14:17 +0800</pubDate><description><![CDATA[Netty 核心部件：Transport 传输功能JDK 中对于 NIO（java.nio）、OIO（java.net） 的网络编程 API 的差异很大，在进行程序移植时的难度比较大，而 Netty 对于 NIO、OIO 等提供了统一的 API 接口；如对于 01. Netty 主要部件介绍 &amp;amp; Hello World 实例 中的 Hello World 实例，使用 NIO Channel...]]></description><category></category></item></channel></rss>