<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dedong5893的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dedong5893</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dedong5893]]></copyright><item><title><![CDATA[6、netty第五个例子，使用websocket来通讯]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231478</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231478</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 17:15:00 +0800</pubDate><description><![CDATA[websocket中，可以支持双向的数据通信。其中所有的数据格式，都是以帧的形式来传递。
initializer

 1 import io.netty.channel.ChannelInitializer;
 2 import io.netty.channel.ChannelPipeline;
 3 import io.netty.channel.socket.SocketC...]]></description><category></category></item><item><title><![CDATA[5、netty第四个例子，空闲检测handle]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231471</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231471</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 17:00:00 +0800</pubDate><description><![CDATA[netty可支持空闲检测的处理器，用于心态检测，当服务器端超出等待时间，没发生事件时，会触发handler中的方法userEventTriggered。
initializer

 1 import io.netty.channel.ChannelInitializer;
 2 import io.netty.channel.ChannelPipeline;
 3 impor...]]></description><category></category></item><item><title><![CDATA[4、netty第三个例子，建立一个tcp的聊天的程序]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231472</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231472</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 16:40:00 +0800</pubDate><description><![CDATA[代码基于第二个例子，支持多客户端的连接，在线聊天。
主要思路：
　　连接建立时，在服务器端，保存channel 对象，当有新的客户端加入时，遍历保存的channel集合，向其他客户端发送加入消息。
　　当一个客户端发送消息时，在服务器端，遍历channel集合，判断是否为发送者，来修改发送内容，如:  XX说： 我说：
同样的：
server中的主程序和第二个例子类似
...]]></description><category></category></item><item><title><![CDATA[3、netty第二个例子，使用netty建立客户端，与服务端通讯]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231469</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231469</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 16:26:00 +0800</pubDate><description><![CDATA[第一个例子中，建立了http的服务器端，可以直接使用curl命令，或者浏览器直接访问。
在第二个例子中，建立一个netty的客户端来主动发送请求，模拟浏览器发送请求。
这里先启动服务端，再启动客户端，启动客户端后，在channelActive 方法中，主动向服务器端发送消息，服务器端channelRead0 方法中，接收到客户端的消息后，会再向客户端返回消息。客户端channelR...]]></description><category></category></item><item><title><![CDATA[2、netty第一个例子，简单的http服务器]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231470</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231470</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 16:15:00 +0800</pubDate><description><![CDATA[用netty来启动一个简单的可处理http请求的服务器。
依照前面写的使用netty的过程。贴上代码
server

 1 import io.netty.bootstrap.ServerBootstrap;
 2 import io.netty.channel.ChannelFuture;
 3 import io.netty.channel.EventLoopGroup;...]]></description><category></category></item><item><title><![CDATA[1、netty入门说明]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231467</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231467</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 10:41:00 +0800</pubDate><description><![CDATA[netty中的例子，基本模式都是：server -&gt;Initializer -&gt;Handler 。
在server中去启动线程，打开端口，设置initializer，和一些启动的参数配置。
在Initializer，主要是负责添加handler处理链。可以获得channel对象。
在handle中负责主要的处理逻辑。handle中的方法：


channelR...]]></description><category></category></item><item><title><![CDATA[3、nio中的selector使用]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231468</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231468</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 10:23:00 +0800</pubDate><description><![CDATA[通过编写一个客户端和服务器端的例子来熟悉selector的使用
服务端逻辑：
1. 绑定一个端口号2. channel注册到selector中3. 用死循环来监听如果有时间发生，遍历selectionKey set4. 判断发生的事件类型，前面会注册accept事件，如果发生accept事件，那么注册读事件，同时清除selectionKey set 中的当前元素。、5. 接收事件时，...]]></description><category></category></item><item><title><![CDATA[2、nio的例子实践]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231465</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231465</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 10:18:00 +0800</pubDate><description><![CDATA[下面的例子，说明了，nio中的三大核心类的基本使用。buffer，channel，selector

  1 package com.shengsiyuan.nio;
  2 
  3 import org.junit.Test;
  4 
  5 import java.io.*;
  6 import java.net.*;
  7 import java.nio.B...]]></description><category></category></item><item><title><![CDATA[1、nio说明 和 对比bio]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231466</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231466</guid><author>dedong5893</author><pubDate>Sun, 01 Sep 2019 10:11:00 +0800</pubDate><description><![CDATA[nio和bio的区别
bio:

面向流的。
单向的。
阻塞的，这也是b这个的由来。

nio:

面向块的。（buffer）
双向的。
非阻塞的。同步的编程方式。是一种select模型


nio编程的常规步骤
从channel中获取的任何数据，都必须经过buffer来存放。

获取到channel。这里如果是从流中获取的channel,那么chan...]]></description><category></category></item><item><title><![CDATA[【三】Gradle中的Task]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231463</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231463</guid><author>dedong5893</author><pubDate>Mon, 12 Aug 2019 20:49:00 +0800</pubDate><description><![CDATA[gradle中，最经常被使用的，一个task，一个是dependencies
1.Task声明
task默认是DefaultTask类， Task中有两个属性 group description，最佳实践是把两个属性都设置上
如下面：

//声明task的时候，就指定group和description，在声明task的时候，就声明doLast方法，task makeReleas...]]></description><category></category></item><item><title><![CDATA[【二】Gradle中的gradlew]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231464</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231464</guid><author>dedong5893</author><pubDate>Mon, 12 Aug 2019 20:35:00 +0800</pubDate><description><![CDATA[gradle 相当于 gradle wapper,是gradle的包装命令
使用gradlew来构建项目被认为是最佳实践。
使用gradlew有以下好处：

当客户机上没有安装gradle时，可以直接用gradlew命令来构建项目。
当客户机上gradle版本与所需版本不一致时，可以用项目中自带的gradlew来构建

生成gradlew

task wrapper(...]]></description><category></category></item><item><title><![CDATA[【一】Gradle 初识]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231460</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231460</guid><author>dedong5893</author><pubDate>Mon, 12 Aug 2019 20:15:00 +0800</pubDate><description><![CDATA[1.Gradle和Maven的对比

gradle 使用groovy语言，可以进行逻辑判断，maven基于xml,无法进行逻辑判断。
gradle 可以在一个项目中，根据需求，生成2个不同的jar, maven则不能从一个项目中，生成两个不同的jar或者war。需要修改多份xml。
gralde 缓存会校验本地和远程是否发生变化，没变化就不会下载。maven不会。这里看gradl...]]></description><category></category></item><item><title><![CDATA[【转】java中使用WebSocket]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231461</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231461</guid><author>dedong5893</author><pubDate>Mon, 06 May 2019 20:04:00 +0800</pubDate><description><![CDATA[传统的请求，都是从客服端到服务端，表现在web应用上就是，消息都只能由浏览器发起请求，调用客户端的方法。
webSocket可以从服务器端推送消息给浏览器。
使用场景：
　　当客户端发起缴费请求时，由服务端发起请求给第三方，跳转到第三方完成支付后，第三方支付回调服务器的接口。在服务端的接口中，推送缴费状态消息给客户端。
页面前台：

var websocket = null;...]]></description><category></category></item><item><title><![CDATA[【转】java的string中，关于split空串总会返回单个元素的数组]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231458</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231458</guid><author>dedong5893</author><pubDate>Mon, 06 May 2019 19:48:00 +0800</pubDate><description><![CDATA[原地址：http://blog.sina.com.cn/s/blog_6f3da9650102x03c.html


public class Split {  
  
    public static void main(String[] args) {  
        String str1 = "a-b";          
        String s...]]></description><category></category></item><item><title><![CDATA[【转】Java实现将文件或者文件夹压缩成zip]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231459</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231459</guid><author>dedong5893</author><pubDate>Wed, 01 May 2019 09:43:00 +0800</pubDate><description><![CDATA[转自：https://www.cnblogs.com/zeng1994/p/7862288.html

  1 package com.guo.utils;
  2 
  3 import java.io.*;
  4 import java.util.ArrayList;
  5 import java.util.List;
  6 import java.util.zi...]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231456</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231456</guid><author>dedong5893</author><pubDate>Tue, 23 Apr 2019 23:55:00 +0800</pubDate><description><![CDATA[1、常规的懒汉式，单例
在多线程中的单例模式，
好处：好理解吧。
坏处：会被反射破坏单例。

public class Singleton {
    //这里的volatile，可以确保初始化完singleton后，第一时间同步到主存，如果去掉volatile，则可能线程1，在synchronized中初始完成,但是synchronized块还未结束，那么就不会刷新到主存中...]]></description><category></category></item><item><title><![CDATA[数据库隔离级别]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231457</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231457</guid><author>dedong5893</author><pubDate>Thu, 15 Dec 2016 21:46:00 +0800</pubDate><description><![CDATA[未提交读（Read uncommitted）：在未提交读级别，事务中的修改，即使没有提交，对其他事务也都是可见的。事务可以读取未提交的数据，这也被称为脏读（Dirty Read）。这个级别会导致很多问题，从性能上来说，未提交读不会比其他的级别好太多，但是缺乏其他级别的很多好处，在实际应用中一般很少使用。
提交读（Read committed）：大多数数据库系统的默认隔离级别都是提交...]]></description><category></category></item><item><title><![CDATA[ckeditor+ckfinder]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231455</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231455</guid><author>dedong5893</author><pubDate>Thu, 31 Mar 2016 22:40:00 +0800</pubDate><description><![CDATA[官方地址：http://ckeditor.com/

复制ckeditor和ckfinder的文件夹到项目根路径下
拷贝ckfinder的config.xml到WEB-INF下




&lt;config&gt;
 &lt;!--
 CKFinder : Configuration File - Basic Instructions

 In ...]]></description><category></category></item><item><title><![CDATA[extremecomponents]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231454</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231454</guid><author>dedong5893</author><pubDate>Thu, 31 Mar 2016 22:39:00 +0800</pubDate><description><![CDATA[具体教程：
http://www.cnblogs.com/QQParadise/articles/1488920.html
教程中涉及到springmvc的相关知识

下载地址：http://sourceforge.net/projects/extremecomp/

下载下来的jar包不知为何目录结构不对，换成项目中的jar包（extremecomponents-...]]></description><category></category></item><item><title><![CDATA[常用输入的js验证]]></title><link>https://blog.youkuaiyun.com/dedong5893/article/details/102231453</link><guid>https://blog.youkuaiyun.com/dedong5893/article/details/102231453</guid><author>dedong5893</author><pubDate>Sun, 27 Mar 2016 22:34:00 +0800</pubDate><description><![CDATA[身份证




var idnub = document.getElementById('idnub').value;
  
   if(idnub.length &gt; 1){
    var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    ...]]></description><category></category></item></channel></rss>