<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fanst_的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fanst_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fanst_]]></copyright><item><title><![CDATA[MySQL：insert or update的实现]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/90179325</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/90179325</guid><author>fanst_</author><pubDate>Mon, 13 May 2019 19:26:59 +0800</pubDate><description><![CDATA[MySQL：insert or update的实现（批量的写法）
一条条查询判断是否存在，再使用insert或update的方式就不提了，性能浪费比较严重，建议能用批量的操作都批量，能少访问一次数据库就少访问一次。
偷懒直接写mybatis的xml内容了，用的时候直接拷贝，下文中的id都是自增主键。
①replace原理是当发现唯一索引或主键列数据已存在时，先删除旧数据再新增新数据，会导致即使看起...]]></description><category></category></item><item><title><![CDATA[JDK1.8源码阅读与翻译：CyclicBarrier]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/88843347</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/88843347</guid><author>fanst_</author><pubDate>Wed, 27 Mar 2019 21:34:39 +0800</pubDate><description><![CDATA[/**

 * CyclicBarrier是一个同步辅助类，允许一组线程全部等待彼此到达一个公共
 * 屏障点。CyclicBarriers在涉及固定数量的一批线程必须偶尔等待彼此的程序
 * 中很有用。被称之为cyclic（循环）barrier（屏障）是因为它可以在释放等待
 * 线程后继续重复使用。
 *

 * CyclicBarrier支持一个可选的命令（Runnable），该命令在每...]]></description><category></category></item><item><title><![CDATA[JDK1.8源码阅读与翻译：CountDownLatch]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/88692336</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/88692336</guid><author>fanst_</author><pubDate>Thu, 21 Mar 2019 19:13:17 +0800</pubDate><description><![CDATA[A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes. CountDownLatch是一个同步辅助类，允许一个或多个线程等待，直到其他线程 进行的一系列操作完成。]]></description><category></category></item><item><title><![CDATA[TCP零窗口攻击？]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/88185471</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/88185471</guid><author>fanst_</author><pubDate>Wed, 06 Mar 2019 10:29:00 +0800</pubDate><description><![CDATA[零窗口（ZeroWindow）和坚持定时器（TCP Persist Timer）初识零窗口TCP滑动窗口零窗口（ZeroWindow）坚持定时器（TCP Persist Timer）是不是DDos攻击问题重现解决办法当时的办法新的问题
初识零窗口
  13年时曾经遇到过一个问题（原谅我现在才写这篇文章…）：提供下载服务的生产环境上（SUSE Linux，使用Tomcat BIO的Connector...]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/78998229</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/78998229</guid><author>fanst_</author><pubDate>Sun, 07 Jan 2018 22:15:27 +0800</pubDate><description><![CDATA[快速排序是在冒泡的基础上，分两段持续递归的排序方式，代码如下：

package org.fst.algorithm;

public class Quicksort {
    public static void main(String[] args) {

        int[] array = new int[]{11, 4, 3, 2, 7, 10, 4, 5, 1, 0, 6, 8]]></description><category></category></item><item><title><![CDATA[HttpClient实现HTTPS客户端编程---可信证书与自签名证书]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/78916825</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/78916825</guid><author>fanst_</author><pubDate>Wed, 27 Dec 2017 21:48:09 +0800</pubDate><description><![CDATA[HttpClient实现HTTPS客户端编程

本文基于HttpClient4.5.4，对其可信和自签名证书的使用进行介绍：


如何访问可信网站
是否用到了证书，证书在哪里
如何访问自签名证书网站
*使用keytool生成自签名证书
alternativename invalid
离线写博客
导入导出Markdown文件
丰富的快捷键






前情简介



前世今生

网上能搜到httpc]]></description><category></category></item><item><title><![CDATA[Unitils(DBUnit)预置数据无法插入CLOB类型的问题]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/78785876</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/78785876</guid><author>fanst_</author><pubDate>Tue, 12 Dec 2017 20:46:15 +0800</pubDate><description><![CDATA[unitils版本：2.4 
jdbc版本：ojdbc6.11.2.0.3.0

问题现象

通过@DataSet注解预置数据库数据时，其中一列为CLOB类型，执行用例报如下错误： 


问题解决流水账

这个Unitils我是头一次用，补充项目UT刚好碰上了这个问题，懒得细细看代码，以下为（撞大运）解决过程。

步骤一

并没有什么头绪，debug进来看代码确实要报此异常，因为在CLOB.jav]]></description><category></category></item><item><title><![CDATA[Oracle中文乱码之编码字符集]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/78020371</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/78020371</guid><author>fanst_</author><pubDate>Mon, 18 Sep 2017 16:10:21 +0800</pubDate><description><![CDATA[Oracle中文乱码之编码字符集

执行sql脚本，通过PL/SQL Developer工具等方式执行、修改带中文的数据经常遇到乱码，简单描述通过统一以下几个地方的字符集设置解决实际乱码/看起来乱码的问题：


Oracle服务端字符集 
Oracle服务端软件的字符集编码设置，设置方式网上一大堆，就不细说了，检查方式是:




SQL> select userenv('language') f]]></description><category></category></item><item><title><![CDATA[Android：自定义ImageView展示大图中的指定区域并切圆角（雪碧图）]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/70184952</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/70184952</guid><author>fanst_</author><pubDate>Sat, 15 Apr 2017 15:53:32 +0800</pubDate><description><![CDATA[@Override
protected void onDraw(Canvas canvas)
{
    Drawable drawable = getDrawable();
    if (drawable instanceof BitmapDrawable)
    {
        Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap()]]></description><category></category></item><item><title><![CDATA[gradle：编译过程中修改第三方jar包]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/68922433</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/68922433</guid><author>fanst_</author><pubDate>Sat, 01 Apr 2017 09:55:36 +0800</pubDate><description><![CDATA[编译过程中修改第三方jar包



背景

Android项目过程中要引入第三方开源的jar，根据需求又要对其进行破坏性的定制，不修改源码不行。然而种种规范和要求又不能让我们将第三方源码全部拿过来再修改。 
奇葩的需求和奇葩的硬性规范，导致如下难题：

-**工程依赖要用原始未修改的jar 
-**jar里面某几个class要修改 
-**开发不能将所有源码引入

解决思路

工程依赖使用原始ja]]></description><category></category></item><item><title><![CDATA[安卓xmpp简单介绍（登录）以及自签名证书的使用]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/53467897</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/53467897</guid><author>fanst_</author><pubDate>Mon, 05 Dec 2016 18:03:36 +0800</pubDate><description><![CDATA[安卓xmpp简单介绍（登录）以及自签名证书的使用概念OSI七层模型开放系统互连参考模型 (Open System Interconnect 简称OSI）是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型，为开放式互连信息系统提供了一种功能结构的框架。 
它从低到高分别是：物理层、数据链路层、网络层、传输层、会话层、表示层和应用层，具体参考[百度百科](“h]]></description><category></category></item><item><title><![CDATA[GCM Google官方示例的简单介绍和使用]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/50732026</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/50732026</guid><author>fanst_</author><pubDate>Wed, 24 Feb 2016 17:16:05 +0800</pubDate><description><![CDATA[GCM Google官方示例的简单介绍和使用准备工作翻墙　　先翻墙，翻不了墙一切都白搭……Google账号
申请Google账号
进入Google开发管理台
创建工程（Google管理台上的Project）
开启Google Cloud Messaging API。
Demo工程　　参考google官方指导文档，在google中搜索GCM，或者直接点击此处打开。本文均以Android为例，打开页面后]]></description><category></category></item><item><title><![CDATA[Java中的时间、时区和夏令时]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/50627744</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/50627744</guid><author>fanst_</author><pubDate>Wed, 03 Feb 2016 09:08:20 +0800</pubDate><description><![CDATA[Java中的时间、时区和夏令时
相关概念
时区
时区是地球上的区域使用同一个时间定义。以前，人们通过观察太阳的位置（时角）决定时间，这就使得不同经度的地方的时间有所不同（地方时）。1863年，首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。世界各个国家位于地球不同位置上，因此不同国家的日出、日落时间必定有所偏差。这些偏差就是所谓的时差。



 
理论时区]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap简析]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/45032691</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/45032691</guid><author>fanst_</author><pubDate>Mon, 13 Apr 2015 21:46:27 +0800</pubDate><description><![CDATA[接前面一篇HashMap的文章（http://blog.youkuaiyun.com/fanst_/article/details/44986517），简单介绍下ConcurrentHashMap。
存储结构
HashMap的存储结构如下图：


ConcurrentHashMap可以看作是上图结构的集合：
final Segment[] segments;每一个Segment中，包含HashEn]]></description><category></category></item><item><title><![CDATA[HashMap简析]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/44986517</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/44986517</guid><author>fanst_</author><pubDate>Fri, 10 Apr 2015 23:28:30 +0800</pubDate><description><![CDATA[一次电话面试中，面试官问我HashMap并发使用的时为什么会造成死循环，可惜由于我本来知道它是线程不安全的，从未写过并发读取的代码，因此没有遇到过这个问题，遂不情愿地回答没遇到过。身为java码农，没有研究过HashMap源码也确实说不过去，遂在面试结束后仔细阅读了JDK7的HashMap.java源码，简单分析如下文。
存储结构
所有数据存储在Entry的数组中，但是注意，并不是一个元素对应]]></description><category></category></item><item><title><![CDATA[Socket编程：下载文件]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/44947913</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/44947913</guid><author>fanst_</author><pubDate>Wed, 08 Apr 2015 22:23:34 +0800</pubDate><description><![CDATA[使用java的Socket作为客户端，下载网络上的文件。]]></description><category></category></item><item><title><![CDATA[八皇后]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/44877301</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/44877301</guid><author>fanst_</author><pubDate>Sat, 04 Apr 2015 22:17:23 +0800</pubDate><description><![CDATA[八皇后是回溯算法的经典题目，主要应用递归进行深度优先查找到一个解，然后回溯循环查找所有解，关键在于模型的建立，直观想法是利用二维数组模拟一个8*8的棋盘，但代码会比较复杂。使用一个8元素数组存储一个解，每一行放一个皇后，数组下标为行号，对应元素为列号，代码会更简单。
public class Eight_Queens {

	/**
	 * 存储一个解，其中queen[i]=j，代表第i行第j列]]></description><category></category></item><item><title><![CDATA[智能卡的使用]]></title><link>https://blog.youkuaiyun.com/fanst_/article/details/9261829</link><guid>https://blog.youkuaiyun.com/fanst_/article/details/9261829</guid><author>fanst_</author><pubDate>Sun, 07 Jul 2013 09:52:08 +0800</pubDate><description><![CDATA[最近做一个小功能，智能卡实现SSL双向认证登录，替代原有帐号密码的登录方式。SSL的双向认证，网上一搜一大把资料，tomcat、jboss、apache、nginx都可以直接配置实现。做的过程中由于自己从未使用过智能卡，对智能卡中的证书使用存在疑惑，网上也很少有直接描述智能卡实际使用的例子，大多讲其实现原理，CSP，PKI等等。本篇文章算是一个小小的解密吧，所有对智能卡使用存在疑惑的同学，可以松一]]></description><category></category></item></channel></rss>