<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[逆光下的轮廓]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u010512607</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u010512607]]></copyright><item><title><![CDATA[Java调用linux命令及Shell脚本]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/80659422</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/80659422</guid><author>u010512607</author><pubDate>Tue, 12 Jun 2018 00:11:11 +0800</pubDate><description><![CDATA[Java可以通过Runtime.getRuntime().exec()方法调用linux平台下的命令及Shell脚本。获取命令执行结果通常有两种，一种是waitfor方法，另一种是exitValue。但waitfor方法可能造成阻塞，原因如下：当调用exec方法后，JVM启动一个子进程，该进程会与JVM进程建立3个管道连接，即标准输入流、标准输出流、错误错误流。假设该程序不间断向标准输出流和标准错...]]></description><category></category></item><item><title><![CDATA[关于Normalizer.normalize()方法的用途]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/79921353</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/79921353</guid><author>u010512607</author><pubDate>Fri, 13 Apr 2018 00:20:43 +0800</pubDate><description><![CDATA[在工作中，经常在看到Normalizer.normalize()方法的身影，遂了解了下这个方法的作用。现假设系统对外部输入作校验，如果发现输入中包含&quot;&amp;lt;&quot;或者&quot;&amp;gt;&quot;字符，就判定此输入不合法，无法通过校验。但如果输入的是全角形式的字符，判断就会稍微变得麻烦，而且并不方便，一旦有所遗漏，出错之后排查可能会花费较多的时间。// 包含全角尖括号
String sbcCase = &quot;\uFe64...]]></description><category></category></item><item><title><![CDATA[Linux下公私钥登录]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/79889007</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/79889007</guid><author>u010512607</author><pubDate>Tue, 10 Apr 2018 23:39:34 +0800</pubDate><description><![CDATA[开发中ssh远程登录linux主机是很常见的操作，但是常见的登录方式是用户名/密码，缺点就是每次都需要输入密码，如果不小心输错了就很抓狂了，稍显麻烦。

另外一种比较常用且安全的免密码登录方式就是私钥登录，目标主机上保存一份公钥，需要登录到该主机上时使用私钥即可登录，可以免去输入密码的麻烦。

如果对于公私钥的概念不太清楚，可以看下这篇文章，个人觉得讲得很好 ------【转载】公钥、私钥、数字签...]]></description><category></category></item><item><title><![CDATA[JAXB解析与生成XML]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/79858759</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/79858759</guid><author>u010512607</author><pubDate>Sun, 08 Apr 2018 23:42:44 +0800</pubDate><description><![CDATA[使用JAXB可以快速完成Java类到XML的映射，方便XML文件的解析与生成。常用注解@XmlRootElement(name = &quot;Country&quot;)将Java类或枚举类型映射成XML中根元素，设置name属性的值可指定义根元素名称，不设置则默认为类型首字母小写的名称。@XmlType(propOrder = {&quot;name&quot;, &quot;capital&quot;, &quot;population&quot;, &quot;foundati...]]></description><category></category></item><item><title><![CDATA[泛型擦除的简单验证]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/79846173</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/79846173</guid><author>u010512607</author><pubDate>Sat, 07 Apr 2018 23:15:39 +0800</pubDate><description><![CDATA[通过对Java泛型的了解，知道Java泛型在运行时是会被擦除掉的，也就是说泛型的限制只在编译期起作用。下面就用一个简单的例子验证一下，使用反射绕过编译，在运行时往集合中加入不同类型的元素。正常情况下，若限制list中的元素类型为String，再往里面插入整型的元素是会有编译错误的。接下来使用反射，在运行时动态加入其他数据类型。        List&amp;lt;String&amp;gt; list = ne...]]></description><category></category></item><item><title><![CDATA[VirtualBox安装CentOS联网配置]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/79302411</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/79302411</guid><author>u010512607</author><pubDate>Fri, 09 Feb 2018 22:59:39 +0800</pubDate><description><![CDATA[安装好CentOS虚拟机后，默认是不能连接到互联网的。这里就简单讲下怎么配置联网，其他linux发行版也可以参考此配置。首先，在VirtualBox中设置桥接网卡然后，修改/etc/sysconfig/network-scripts/ifcfg-enp0s3配置文件，将ONBOOT修改为yes，保存修改后使用service network restart命令重启网络生效。、注意： 修改配置文件的时...]]></description><category></category></item><item><title><![CDATA[基础Socket通信]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/53413763</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/53413763</guid><author>u010512607</author><pubDate>Wed, 30 Nov 2016 21:11:40 +0800</pubDate><description><![CDATA[    本文使用三个类完成客户端与服务端的 Socket 通信。    Client：客户端，可完成信息收发    Server：服务端，监听客户端请求，为了方便，也可以收发信息    MessageHandleRunnable：实际收发信息的 Runnable 类    import java.io.IOException;
import java.net.ServerSocket;
impor...]]></description><category></category></item><item><title><![CDATA[JVM、JRE与JDK的关系]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/50365731</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/50365731</guid><author>u010512607</author><pubDate>Tue, 22 Dec 2015 21:46:29 +0800</pubDate><description><![CDATA[最开始学 Java 的时候不是很在意这些比较基础的东西，只是知道怎么使用。现在学得有些日子了，虽然也不是很清楚底层的具体实现，但是对于整个体系的搭建大致有了一些了解。最近由于找到工作了比较松懈，而且也在考驾照，所以有些日子没好好写代码了。今天一时想起，把之前的笔记整理了一下，顺便加深下自己的印象。


JDK、JRE、JVM这三者的英文解释如下：
JDK---Java Developmen]]></description><category></category></item><item><title><![CDATA[Java 实现单向链表]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/48767151</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/48767151</guid><author>u010512607</author><pubDate>Sun, 27 Sep 2015 17:04:12 +0800</pubDate><description><![CDATA[Java 类库中其实是提供了链表的实现类的，但是如果自己来实现会不会很有成就感呢？
我们知道，Java 官方是没有指针的概念的，当然我们可以把对象的引用理解为指针，虽然与 C 或 C++ 中的指针概念不尽相同。既然如此，最重要的一步就是怎么来表示一个链表中的结点。在 Java中，我们可以定义一个专门表示结点的类，最好是内部类，确保类的封装性与完整性。此结点类可定义如下：
class Node]]></description><category></category></item><item><title><![CDATA[字符串的“压缩”]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/48573035</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/48573035</guid><author>u010512607</author><pubDate>Sat, 19 Sep 2015 10:48:40 +0800</pubDate><description><![CDATA[这题本是前几天笔试时的一道题，当时思路不是很清晰，写得不是很对。后来仔细想想理清思路之后重新写了一下，经过多组输入的测试，还未发现明显的bug。
这题的要求大致是这样的：任意输入一个字符串，比如 wwwabc，要求将连续出现的字符进行压缩，压缩后所得字符串应该为 3wabc；又例如abcdddefg，压缩后的字符串应该为 abc3defg。
代码如下所示：
import java.util.]]></description><category></category></item><item><title><![CDATA[使用BigDecimal进行精确数字运算]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/48444679</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/48444679</guid><author>u010512607</author><pubDate>Mon, 14 Sep 2015 21:19:08 +0800</pubDate><description><![CDATA[我们都知道在 Java 中常用的浮点数类型有 float 和 double 这两种，但是其实这两种类型的数据并无法精确表示运算结果。先看一个例子：public class PrecisionTest {
	public static void main(String[] args) {
		System.out.println(0.03 * 0.045);
		System.out.println...]]></description><category></category></item><item><title><![CDATA[有一个数组，每隔两个数删掉一个数，到末尾又循环到开头继续进行，求最后一个被删除的数的原始下标位置]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/48370669</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/48370669</guid><author>u010512607</author><pubDate>Fri, 11 Sep 2015 11:57:20 +0800</pubDate><description><![CDATA[源代码中有较详细的注释，这里就不多写了。/**
 * 有一个数组a[N]，要求每隔两个数删掉一个数，到末尾则又循环到开头继续进行
 * 求最后一个被删掉的数的原始下标位置
 * 
 *  例如，一个数组：{0, 1, 2, 3, 4, 5, 6, 7} 
 *  0-&amp;gt;1-&amp;gt;2(第一遍，删除)-&amp;gt;3-&amp;gt;4-&amp;gt;5(第一遍，删除)-&amp;gt;6-&amp;gt;7-&amp;gt;
 * ...]]></description><category></category></item><item><title><![CDATA[文件复制实现]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/47010985</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/47010985</guid><author>u010512607</author><pubDate>Wed, 22 Jul 2015 22:24:38 +0800</pubDate><description><![CDATA[package study;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncoding]]></description><category></category></item><item><title><![CDATA[使用 Jpcap 进行 ARP 抓包]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/46494485</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/46494485</guid><author>u010512607</author><pubDate>Sun, 14 Jun 2015 21:10:27 +0800</pubDate><description><![CDATA[由于选修课网络协议分析的期末作业是关于网络协议方面的，而之前并没有使用 Java 进行过网络协议底层的编程经历，所以显得有些麻烦。
Java 不能直接操作底层的网络协议，所以必须依靠 JNI 使用本地操作系统的 Socket 部分接口，而刚好可以通过 Jpcap 这个中间件中封装好的方法来调用 Winpcap 进行抓包并解析，所以在 Jpcap + Winpcap 环境下进行抓包分析。
环境搭]]></description><category></category></item><item><title><![CDATA[解决Eclipse中“诡异”的错误：找不到或无法加载主类……]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/46350813</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/46350813</guid><author>u010512607</author><pubDate>Wed, 03 Jun 2015 20:19:29 +0800</pubDate><description><![CDATA[近两天在用Eclipse写代码的时候突发奇想，把所有生成的 .class 文件统统删掉，以为只要重新运行就可以重新生成新的 class 文件，哪知道出问题了，控制台提示->错误：找不到或无法加载主类……。自己忙活了好久，也没有有效的解决方法。后来在网上找了找，终于发现了真正的原因。
原来，Eclipse 中的 Java 编译器是基于 .java 文件的新旧来判断是否进行编译。也就是说，一个 .j]]></description><category></category></item><item><title><![CDATA[Java参数传递]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/46047613</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/46047613</guid><author>u010512607</author><pubDate>Wed, 27 May 2015 15:37:21 +0800</pubDate><description><![CDATA[既然说到参数传递，那么就得说说 Java 中方法参数的类型。Java 中方法参数的类型有两种：

基本数据类型（数字，布尔值）对象引用
那么，参数传递的方法呢，也可以分为两种，一种是值传递，表示方法接收的是调用者提供的值；另一种就是引用传递，表示方法接收的是调用者提供的变量地址。
Java 中的参数传递采用的是值传递的方式，也就是说方法得到的是所有参数值的一个拷贝。
对于基本数据类型而言]]></description><category></category></item><item><title><![CDATA[归并排序]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/45936535</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/45936535</guid><author>u010512607</author><pubDate>Sat, 23 May 2015 19:18:55 +0800</pubDate><description><![CDATA[归并排序（Merging Sort）
归并排序是分治思想最典型的例子。归并排序中最基本的操作是“归并”，即将两个或两个以上的有序数组组合成一个更大的有序数组。按照归并顺序的不同，归并排序可以分为自顶向下和自底向上两类。
基本思想：
要将一个数组排序，可以先（递归地）将它拆分成两半分别排序，然后将结果归并起来。或者先归并微型数组，然后再成对归并得到的子数组，直到最后整个数组归并在一起。
我们]]></description><category></category></item><item><title><![CDATA[希尔排序]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/45913775</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/45913775</guid><author>u010512607</author><pubDate>Fri, 22 May 2015 10:10:05 +0800</pubDate><description><![CDATA[希尔排序（Shell‘s Sort）又称“缩小增量排序”（Diminishing Increment Sort），是一种基于插入排序的快速的排序算法。对于大规模的乱序数组插入排序很慢，因为它只会交换相邻的元素。如果最小的元素正好在数组的尽头，要将它插入到正确的位置就得进行 N - 1次移动。希尔排序为了加快速度简单地改进了插入排序，交换不相邻的元素以对数组的局部排序，并最终使用插入排序将局部有序的]]></description><category></category></item><item><title><![CDATA[选择排序之简单选择排序]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/45875229</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/45875229</guid><author>u010512607</author><pubDate>Wed, 20 May 2015 20:47:56 +0800</pubDate><description><![CDATA[选择排序的基本思想：首先，找到数组中最小的哪个元素，将它和数组的第一个元素交换位置（如果第一个元素就是最小元素，那么它就和自己交换）。其次，在剩下的元素中找到最小的元素，将它与数组的第二个元素交换位置。重复前面的步骤，直到整个数组有序。
说到这儿，还得提到冒泡排序。选择排序其实算得上是冒泡排序的一个升级版。它们之间最主要的区别是：冒泡排序每一次比较都可能交换，而选择排序则是在每次比较时，记录最小]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/u010512607/article/details/45847091</link><guid>https://blog.youkuaiyun.com/u010512607/article/details/45847091</guid><author>u010512607</author><pubDate>Tue, 19 May 2015 17:12:18 +0800</pubDate><description><![CDATA[快速排序的基本思想：任意选择一数作为个基准数，通过一趟排序将要排序的数据分割成两个独立的部分。其中一部分所有数都小于基准数，位于其左侧，另一部分所有数都大于基准数，位于其右侧。然后按照同样的方法对分别对两部分数据进行排序，直到最后所有数据都变得有序。
基准数可以任意选取。
假设现在有这样一个初始序列：


首先，我们选取第一个数 5 作为基准数，并在开头和结尾分安插上一个哨兵 l 和]]></description><category></category></item></channel></rss>