﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-业精于勤荒于嬉，行成于思毁于随</title><link>http://www.blogjava.net/produ/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 12:00:22 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 12:00:22 GMT</pubDate><ttl>60</ttl><item><title>spring boot：闪电上手</title><link>http://www.blogjava.net/produ/archive/2016/06/01/430728.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Wed, 01 Jun 2016 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2016/06/01/430728.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430728.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2016/06/01/430728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430728.html</trackback:ping><description><![CDATA[<strong>spring-boot是什么？<br /></strong>spring-boot是spring的一个子项目，spring-boot旨在能够快速构建基于spring的独立的，产品级别的应用，拥有&#8220;一键启动&#8221;，&#8220;配置简约&#8221;，&#8220;内置服务器&#8221;，&#8220;应用健康检查&#8221;等一系列高逼格的功能。<br /><br /><strong>spring-boot hello world<br /></strong><span style="color: red;"><strong>注：这里的hello world并没有一板一眼的将官网的案例照搬，而是希望以一种最快速的方式构建一个由spring boot构建的应用，让包括我在内的对spring boot陌生的同学对它有一个最直观的感受。<br /></strong></span><br />java<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/21s6basfha.png" border="0" alt="" /><br /><br />IDE<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/6h1sd6h.png" border="0" alt="" /><br /><br />Maven（Eclipse内置）<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/afoppoakw.png" border="0" alt="" /><br />你也可以自行配置一个外部Maven，随意<br /><br />接下来我们新建一个Maven项目，我们选取webapp模板<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/uawrn.png" border="0" alt="" /><br /><img src="http://www.blogjava.net/images/blogjava_net/produ/daf24s.png" border="0" alt="" /><br /><br />搭建完毕之后，我们需要修改pom.xml文件，将spring boot相关的依赖添加进去<br />首先，添加parent节点到pom.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">parent</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.springframework.boot<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000ff;">&gt;</span>spring-boot-starter-parent<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>1.3.5.RELEASE<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">parent</span><span style="color: #0000FF; ">&gt;</span></div>spring boot提供了一系列的&#8220;<span style="background-color: #ffff00;">starter POMs</span>&#8221;,可以轻松的添加相关的jar到项目的类路径下，而<span style="background-color: #ffff00;">spring-boot-starter-parent</span>节点则是一个特殊的&#8220;starter&#8221;，它提供了很多maven默认的依赖，并且提供了依赖管理，使得我们可以忽略依赖的版本号，也就是说我们无需再声明<span style="background-color: #ffff00;">version</span>标识。<br /><strong style="color: red;"><br />*starter POMs：可以理解一系列的依赖，每一个依赖都提供了该功能所需的jar包</strong><br /><br />我们添加<span style="background-color: #ffff00;">spring-boot-starter-web</span>到pom.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">parent</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.springframework.boot<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>spring-boot-starter-parent<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>1.3.5.RELEASE<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">parent</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.springframework.boot<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>spring-boot-starter-web<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span></div>之后我们看到构建web应用所需的jar包已经添加到Maven依赖中了<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/sbs28.png" border="0" alt="" /><br /><br />更多关于&#8220;starter&#8221;的信息可以查看<br /><a href="http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-starter" target="_blank">http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#using-boot-starter</a><br /><br />接下来可以写代码了，添加一个&#8220;控制器&#8221;到src/main/java/demo下<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;demo;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.boot.*;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.boot.autoconfigure.*;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.web.bind.annotation.*;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;@RestController<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;@EnableAutoConfiguration<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Example&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping("/")<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;home()&nbsp;{<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"Hello&nbsp;World!";<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">15</span>&nbsp;<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpringApplication.run(Example.<span style="color: #0000FF; ">class</span>,&nbsp;args);<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">19</span>&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;}</div>之后我们&#8220;run as Java application&#8221;或者通过Maven goals&#8220;spring-boot:run&#8221;，就可以发现，我们的服务已经在本地的8080端口启动了。<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/znz02sz.png" border="0" alt="" /><br />是不是太快了...我也这么觉得，真的是&#8220;傻瓜式&#8221;的部署<br /><br /><span style="background-color: #ffff00;">@RestController</span><br />这个注解是&#8220;stereotype annotation&#8221;（不知道怎么翻译合适，或许可以理解为&#8220;套版注解&#8221;），在阅读代码的时候给读者提供必要的提示，对于spring来说，他扮演了一个特别的角色，在案例中他是一个web的控制器，所以spring会用他来处理对应的请求。<br /><br /><div><span style="background-color: #ffff00;">@RequestMapping<br /></span></div>用过spring-MVC的同学都知道，这个注解用来对应路由<br /><br /><div><span style="background-color: #ffff00;">@EnableAutoConfiguration</span></div>这个注解就比较牛皮了，也是目前为止个人感觉spring boot强大的地方之一。这个注解告知spring，去通过你添加的依赖，&#8220;猜测&#8221;你想要怎么去配置spring，比如我们添加了start POM <span style="background-color: #ffff00;">spring-boot-starter-web</span>，那么spring会认为我们需要部署一个web应用，所以spring boot帮助我们启动tomcat服务，配置springMVC等操作。官方文档同时提到，@EnableAutoConfiguration注解在设计时就与start POMs协作良好，但是二者并不绝对相关，就算没有start POM，spring boot依然会尽最大努力去自动配置（笑）<br /><br />截止目前，排除细节的情况下，已经通过最简单粗暴的方式构造了一个spring boot的应用，希望在认知上能给大家一点帮助，但是还远远不够，后续还要添加更多与web应用相关的内容。<img src ="http://www.blogjava.net/produ/aggbug/430728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2016-06-01 12:00 <a href="http://www.blogjava.net/produ/archive/2016/06/01/430728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>试水公众号文章：你搞IT的？帮我修个电脑吧！</title><link>http://www.blogjava.net/produ/archive/2016/05/30/430708.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Mon, 30 May 2016 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2016/05/30/430708.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430708.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2016/05/30/430708.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430708.html</trackback:ping><description><![CDATA[<p align="center" style="text-align:center"><span style="font-family:宋体;">你搞IT的？帮我修个电脑吧！</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">某日</span></p>  <p><span style="font-family:宋体;">七大姑：&#8220;你是学什么的啊？&#8221;</span></p>  <p><span style="font-family:宋体;">我：&#8220;噢，我是学IT的。&#8221;</span></p>  <p><span style="font-family:宋体;">八大姨：&#8220;啥？挨踢还用学？你是学武术的？&#8221;</span></p>  <p><span style="font-family:宋体;">我：&#8220;呃&#8230;&#8230;我是学电脑的。&#8221;</span></p>  <p><span style="font-family:宋体;">熊孩子：&#8220;叔叔我电脑坏了，帮我修修&#8221;</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">我：&#8220;叫哥哥才给你弄&#8221;</span></p>  <p><span style="font-family:宋体;">熊孩子：&#8220;叔叔你真矫情！&#8221;</span></p>  <p><span style="font-family:宋体;">我：&#8220;&#8230;&#8230;&#8221;<br /><br /></span><a name="_GoBack"><span style=" font-family:宋体;"><strong>上面这个段子是广大IT人士真实的生活写照，在大多数人眼里，&#8220;计算机专业&#8221;约等于&#8220;会修电脑&#8221;，不能否认的是，这两者之间确实有一定的联系。那么&#8220;计算机专业&#8221;和&#8220;会修电脑&#8221;到底有什么关系呢？</strong><br /><br /></span></a><span style="font-family: 宋体;">那么首先，从概念上来讲，什么是计算机？</span></p><p><span style="font-family:宋体;"><img src="http://www.blogjava.net/images/blogjava_net/produ/2.png" border="0" alt="" width="600" height="326" /></span></p>  <p><span style="font-family:宋体;">&#8220;接受使用者输入指令与数据，经由中央处理器的数学与逻辑单元运算处理后，以产生或储存成有用的信息&#8221;，这句文绉绉的概念就是对计算机的定义，在生活中，我们经常用的笔记本电脑就是计算机的一种。根据这个定义，计算器、手机、平板、GPS、ATM等等，这些都是计算机！</span></p>  <p><img src="http://www.blogjava.net/images/blogjava_net/produ/235009-140203101K030n.png" border="0" alt="" width="320" height="265" /><br /></p>  <p><span style="font-family:宋体;">现在我们知道，电脑只是计算机的一种，虽然电脑是计算机的俗称，但是修电脑可不能当修计算机理解。那么，我们所说的修，具体是指什么呢？</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">看一下我们身边的笔记本电脑，根据概念，从外观上我们可以把计算机的组成大致分为三部分：<br /></span><img src="http://www.blogjava.net/images/blogjava_net/produ/3.png" border="0" alt="" width="640" height="347" />&nbsp;</p>  <p><span style="font-family:宋体;">然而对于第2点，如果你曾经拆开过机箱，你会发现机箱内部最重要的部分是主板，上面插满了各种各样的组件，整部主机的核心在于中央处理器 (Central Processing Unit, CPU)。CPU的主要工作在于管理和运算，因此在 CPU 内又可细分两个主要的单元，分别是： 算数逻辑单元与控制单元。其中算数逻辑单元主要负责程序运算与逻辑判断，控制单元则主要在协调各周边组件与之间的工作。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">输入设备获取的数据传输到内存，CPU再经由主内存获取这些数据进行运算和判断，将处理完毕的数据写回到内存中，最后，数据再由内存传输到输出设备。</span></p>  <p><img src="http://www.blogjava.net/images/blogjava_net/produ/cadgh21r.png" border="0" alt="" /><br /></p>  <p><span style="font-family:宋体;">综合上面所说的，我们会知道其实计算机是由几个设备所组成的，包括输入设备、 输出设备、CPU内部的控制单元、算数逻辑单元与内存五大部分。而计算机产生的故障，就有可能来自以上这些硬件设备，那么修的工作可能会来自这些硬件设备。</span></p>  <p>&nbsp;</p>  <p><strong><span style="font-family:宋体;">*</span></strong><strong><span style="font-family:宋体;">拓展阅读：第一台计算机</span></strong></p>  <img src="http://www.blogjava.net/images/blogjava_net/produ/9c16fdfaaf51f3de333786ed94eef01f3b2979b5.jpg" border="0" alt="" /><br />  <div>世界上第一台计算机&#8220;ENIAC&#8221;于1946年在美国宾夕法尼亚大学诞生。发明人是美国人约翰&#183;阿塔那索夫（Atanasoff）教授。美国国防部用它来进行弹道计算。它是一个庞然大物，用了18000个电子管，占地170平方米，重达30吨，耗电功率约150千瓦，每秒钟可进行5000次运算，这在现在看来微不足道，但在当时却是破天荒的。 ENIAC以电子管作为元器件，所以又被称为电子管计算机，是计算机的第一代。电子管计算机由于使用的电子管体积很大，耗电量大，易发热，因而工作的时间不能太长。<br /><br /><span style="font-family: 宋体;">然而大多数情况下，我们需要修复的是软件的故障</span></div><p><br />一般来说，软件被划分为系统软件和应用软件。计算机是硬件所组成，为了有效率的控制这些硬件资源，就需要操作系统的支持。 操作系统除了有效率的控制这些硬件资源的分配，还要提供计算机运作所需要的功能(如网络功能)，软件和硬件的简易关系图如下所示</p>  <p>&nbsp;&nbsp;<img src="http://www.blogjava.net/images/blogjava_net/produ/软件硬件关系.png" border="0" alt="" /></p>  <p><span style="font-family:宋体;">操作系统：操作系统虽然只能提供对硬件最基本的支持，但是二者的联系非常紧密，一旦操作系统出现异常，那么就意味着上层软件都有可能无法正常工作，所以异常关机，断电，删除系统文件等操作都有可能会破坏操作系统，进而危害个人的应用程序和重要资料。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">应用程序：如果你有额外的硬件设备，比如玩游戏，你需要一块性能优越的显示卡，那么你需要单独在操作系统上安装这块显示卡的驱动程序，才能保证这块显示卡的正常使用。驱动程序并不属于操作系统，它由硬件厂商开发并提供，针对特定操作系统，特定版本，特定硬件，所以一定要安装匹配的驱动程序，否则很容易导致常见的&#8220;蓝屏&#8221;效果。说到&#8220;蓝屏&#8221;，值得一提的是，尽量不要安装功能相近的软件，比如杀毒软件，他们之间总是相爱相杀的，说不准就会打乱&#8220;战场&#8221;；驱动程序的版本也没有必要追求最新，因为新颖并不意味着稳定；使用的时候主机应该保持稳定，不要随意晃动，看了刚才的数据流向，如果主板和内存的插口松动，也很容易出现系统异常。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">说了这么多，让我们回到最初的问题，计算机专业和修电脑到底什么关系？</span></p>  <p><span style="font-family:宋体;">电脑是计算机的俗称，但是修电脑并不意味着会修所有的计算机，所以二者的关系是：计算机专业并不等同会修电脑，因为修电脑这个问题太大了。IT人也有很多类型，硬件，软件，网络等等，所以你的一句&#8220;我的电脑连不上网了&#8221;，可能就会涉及到多方面的问题定位，所以如果你的问题如果更清晰一些，比如：&#8220;我按下电源没有反应&#8221;，你或许应该去咨询硬件工程师；&#8220;我的系统突然崩溃，跳出一堆我看不懂的东西&#8221;，你或许该去咨询系统工程师；&#8220;我连不上网络了&#8221;，你或许该去咨询网络管理员。</span></p>  <p>&nbsp;</p>  <p><span style="font-family: 宋体;">严格来说，修电脑并不是一件简单的事情，但是我们有一种&#8220;小病大治&#8221;的软件问题解决方案&#8212;&#8212;重新安装，希望各位读者合理使用电脑，多一些流畅的使用体验，少一些令人烦恼的异常。<br /><br /><a target="null"></a><a href="http://mp.weixin.qq.com/s?__biz=MzA5NzMyODc5Ng==&amp;mid=510224912&amp;idx=4&amp;sn=9b7fcd6e374f957b74ef89baf52781f9#rd" target="_blank">http://mp.weixin.qq.com/s?__biz=MzA5NzMyODc5Ng==&amp;mid=510224912&amp;idx=4&amp;sn=9b7fcd6e374f957b74ef89baf52781f9#rd</a><br /></span></p><img src ="http://www.blogjava.net/produ/aggbug/430708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2016-05-30 18:10 <a href="http://www.blogjava.net/produ/archive/2016/05/30/430708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java反编译工具</title><link>http://www.blogjava.net/produ/archive/2016/05/28/430691.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Sat, 28 May 2016 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2016/05/28/430691.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430691.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2016/05/28/430691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430691.html</trackback:ping><description><![CDATA[最近生产环境上的项目总是报一些不该出现的问题，调查跟踪很久也没发现问题，没办法，开始怀疑生产环境和测试环境的代码不一致，虽然这不该出现，但确实是一种可能。<br />方法比较简单，获取生产环境jar包，反编译之后和本地代码进行对比。从接触反编译工具以来，到写下这篇笔记，我一直是使用的jd-gui<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/jdgui.png" border="0" alt="" /><br /><br />直到今天，偏偏是我所需要的一个.class文件不能反编译，出现了如下的情况<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/internalerror.png" border="0" alt="" /><br /><br />很慌啊，竟然不能反编译，其他的.class文件却可以，真是伤心，无奈求助搜索引擎，发现了一款jd-gui的同类工具，但是却可以解决出现// INTERNAL ERROR//的问题，真是太棒了，赶紧贴出来<a href="https://github.com/deathmarine/Luyten">https://github.com/deathmarine/Luyten</a>&nbsp;<br /><br />有过比对才发现luyten的速度比jd-gui快很多，真是长江后浪推前浪，一代更比一代浪<br /><img src ="http://www.blogjava.net/produ/aggbug/430691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2016-05-28 12:36 <a href="http://www.blogjava.net/produ/archive/2016/05/28/430691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#对称加密算法Java实现</title><link>http://www.blogjava.net/produ/archive/2016/03/28/430629.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Mon, 28 Mar 2016 14:12:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2016/03/28/430629.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430629.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2016/03/28/430629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430629.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430629.html</trackback:ping><description><![CDATA[<div>最近因为业务需求，需要把一段C#编写的加密代码采用Java进行实现，在此记下我的实施过程和过程中碰到的一些问题以备后用。为了便于观察，只贴上C#源码中关键的部分：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;加密方法<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;param&nbsp;name=\"Source\"&gt;</span><span style="color: #008000; ">待加密的串</span><span style="color: #808080; ">&lt;/param&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">经过加密的串</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;Encrypto(<span style="color: #0000FF; ">string</span>&nbsp;Source)<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytIn&nbsp;=&nbsp;UTF8Encoding.UTF8.GetBytes(Source);<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;ms&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MemoryStream();<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.Key&nbsp;=&nbsp;GetLegalKey();<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.IV&nbsp;=&nbsp;GetLegalIV();<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建对称加密器对象<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">下面的控制台打印是我自己添加方便观察的</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("KeySize:"&nbsp;+&nbsp;mobjCryptoService.KeySize);<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("LegalKeySizes:"&nbsp;+&nbsp;mobjCryptoService.LegalKeySizes.Length);<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Mode:"+&nbsp;mobjCryptoService.Mode);<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Padding:"+mobjCryptoService.Padding);<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICryptoTransform&nbsp;encrypto&nbsp;=&nbsp;mobjCryptoService.CreateEncryptor();<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">定义将数据流链接到加密转换的流</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;CryptoStream&nbsp;cs&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CryptoStream(ms,&nbsp;encrypto,&nbsp;CryptoStreamMode.Write);<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.Write(bytIn,&nbsp;0,&nbsp;bytIn.Length);<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cs.FlushFinalBlock();<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ms.Close();<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytOut&nbsp;=&nbsp;ms.ToArray();<br /><span style="color: #008080; ">26</span>&nbsp;<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Convert.ToBase64String(bytOut);<br /><span style="color: #008080; ">28</span>&nbsp;}<br /><span style="color: #008080; ">29</span>&nbsp;<br /><span style="color: #008080; ">30</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;解密方法<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;param&nbsp;name=\"Source\"&gt;</span><span style="color: #008000; ">待解密的串</span><span style="color: #808080; ">&lt;/param&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">经过解密的串</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;Decrypto(<span style="color: #0000FF; ">string</span>&nbsp;Source)<br /><span style="color: #008080; ">37</span>&nbsp;{<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span><br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytIn&nbsp;=&nbsp;Convert.FromBase64String(Source);<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;ms&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;MemoryStream(bytIn,&nbsp;0,&nbsp;bytIn.Length);<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.Key&nbsp;=&nbsp;GetLegalKey();<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.IV&nbsp;=&nbsp;GetLegalIV();<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">创建对称解密器对象</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICryptoTransform&nbsp;encrypto&nbsp;=&nbsp;mobjCryptoService.CreateDecryptor();<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">定义将数据流链接到加密转换的流</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CryptoStream&nbsp;cs&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CryptoStream(ms,&nbsp;encrypto,&nbsp;CryptoStreamMode.Read);<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamReader&nbsp;sr&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;StreamReader(cs);<br /><span style="color: #008080; ">49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sr.ReadToEnd();<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception)<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">string</span>.Empty;<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">55</span>&nbsp;}</div><div><br />其中有一个问题：</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">生成加密器的对象由RijndaelManaged得来，那么这个RijndaelManaged对象是干嘛的？第三方的？原生的？</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;SymmetricAlgorithm&nbsp;mobjCryptoService&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;RijndaelManaged();</div><br /><div>调查之后，好吧，它是一种对称加密算法（可以理解为在双方之间可以实现加解密），以下来自百科：</div><div>高级加密标准（英语：Advanced Encryption Standard，缩写：AES），在密码学中又称Rijndael加密法，是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES，已经被多方分析且广为全世界所使用。经过五年的甄选流程，高级加密标准由美国国家标准与技术研究院（NIST）于2001年11月26日发布于FIPS PUB 197，并在2002年5月26日成为有效的标准。2006年，高级加密标准已然成为对称密钥加密中最流行的算法之一。</div><div>&#8230;</div><div>之前对加密标准认识的并不多，但是通过代码来看，似乎实现对称加密还需要别的材料，看到下面这两个方法</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获得密钥<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">密钥</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;GetLegalKey()<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;_TempKey&nbsp;=&nbsp;Key;<span style="color: #008000; ">//</span><span style="color: #008000; ">Key已经预先写死在代码里了</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.GenerateKey();<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytTemp&nbsp;=&nbsp;mobjCryptoService.Key;<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;KeyLength&nbsp;=&nbsp;bytTemp.Length;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempKey.Length&nbsp;&gt;&nbsp;KeyLength)<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempKey&nbsp;=&nbsp;_TempKey.Substring(0,&nbsp;KeyLength);<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempKey.Length&nbsp;&lt;&nbsp;KeyLength)<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempKey&nbsp;=&nbsp;_TempKey.PadRight(KeyLength,&nbsp;'&nbsp;');<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ASCIIEncoding.ASCII.GetBytes(_TempKey);<br /><span style="color: #008080; ">16</span>&nbsp;}<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">GetLegalKey方法每次都会返回一个长度为32的byte数组<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">mobjCryptoService.Key&nbsp;=&nbsp;GetLegalKey();</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span><br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;获得初始向量IV<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;/summary&gt;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #008000; "></span><span style="color: #808080; ">///</span><span style="color: #008000; ">&nbsp;</span><span style="color: #808080; ">&lt;returns&gt;</span><span style="color: #008000; ">初试向量IV</span><span style="color: #808080; ">&lt;/returns&gt;</span><span style="color: #808080; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #808080; "></span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;GetLegalIV()<br /><span style="color: #008080; ">25</span>&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">string</span>&nbsp;_TempIV&nbsp;=&nbsp;"$%^&amp;*()_osudghwe7%%2kdijskldglk2397^&amp;*wigwuqwelkn";<span style="color: #008000; ">//</span><span style="color: #008000; ">这是虚构的</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;mobjCryptoService.GenerateIV();<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;bytTemp&nbsp;=&nbsp;mobjCryptoService.IV;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;IVLength&nbsp;=&nbsp;bytTemp.Length;<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempIV.Length&nbsp;&gt;&nbsp;IVLength)<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempIV&nbsp;=&nbsp;_TempIV.Substring(0,&nbsp;IVLength);<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(_TempIV.Length&nbsp;&lt;&nbsp;IVLength)<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_TempIV&nbsp;=&nbsp;_TempIV.PadRight(IVLength,&nbsp;'&nbsp;');<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ASCIIEncoding.ASCII.GetBytes(_TempIV);<br /><span style="color: #008080; ">35</span>&nbsp;}<br /><span style="color: #008080; ">36</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">GetLegalIV方法每次都会返回一个长度为16的byte数组<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">mobjCryptoService.IV&nbsp;=&nbsp;GetLegalIV();</span></div><br /><div>虽然是通过两个方法来取得的KEY和IV（二者都是byte数组），但是KEY和IV都是预先写死在代码里的，只不过是返回了特定长度的byte数组。</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">RijndaelManaged，这是对称算法合法的key和IV的长度（分别以位来计算）<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;min&nbsp;key&nbsp;size&nbsp;=&nbsp;128<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;max&nbsp;key&nbsp;size&nbsp;=&nbsp;256<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;min&nbsp;block&nbsp;size&nbsp;=&nbsp;128<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Legal&nbsp;max&nbsp;block&nbsp;size&nbsp;=&nbsp;256</span></div><br /><div>经过调查，还需要配置算法的mode和padding，此处并没有进行设置，所以默认分别为CipherMode.CBC和PaddingMode.PKCS7。详见<a href="https://msdn.microsoft.com/zh-cn/library/system.security.cryptography.symmetricalgorithm.mode(v=vs.110).aspx" title="mode">mode</a>和<a href="https://msdn.microsoft.com/zh-cn/library/system.security.cryptography.symmetricalgorithm.padding(v=vs.110).aspx" title="padding">padding</a></div><div><br />目前来看，需要调查的可以告一段落了，那么接下来，就需要调查如何Java实现了。在Java中，实现加密需要用到JCE提供的Cipher对象，类比C#的实现，借鉴广大程序员的智慧，我首先尝试写了一下（只贴出关键部分）</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init(<span style="color: #0000FF; ">byte</span>[]&nbsp;keyBytes)&nbsp;{<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果密钥不足16位，那么就补足.&nbsp;这个if&nbsp;中的内容很重要</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;base&nbsp;=&nbsp;16;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(keyBytes.length&nbsp;%&nbsp;base&nbsp;!=&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;groups&nbsp;=&nbsp;keyBytes.length&nbsp;/&nbsp;base<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;(keyBytes.length&nbsp;%&nbsp;base&nbsp;!=&nbsp;0&nbsp;?&nbsp;1&nbsp;:&nbsp;0);<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;temp&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">byte</span>[groups&nbsp;*&nbsp;base];<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.fill(temp,&nbsp;(<span style="color: #0000FF; ">byte</span>)&nbsp;0);<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.arraycopy(keyBytes,&nbsp;0,&nbsp;temp,&nbsp;0,&nbsp;keyBytes.length);<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyBytes&nbsp;=&nbsp;temp;<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;转化成JAVA的密钥格式</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SecretKeySpec(keyBytes,&nbsp;"AES");<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化cipher</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher&nbsp;=&nbsp;Cipher.getInstance("AES/CBC/PKCS5Padding");<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(NoSuchAlgorithmException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(NoSuchPaddingException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">23</span>&nbsp;}<br /><span style="color: #008080; ">24</span>&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;加密方法<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;content&nbsp;待加密內容字符串<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;keySrc&nbsp;加解密密秘钥字符串<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;iv&nbsp;算法所需向量<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;UnsupportedEncodingException<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; ">&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">33</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;encrypt(String&nbsp;content,&nbsp;String&nbsp;keySrc,String&nbsp;iv)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;UnsupportedEncodingException&nbsp;{<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;encryptedText&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init(keySrc.getBytes("utf-8"));<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.ENCRYPT_MODE,&nbsp;key,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IvParameterSpec(iv.getBytes()));<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encryptedText&nbsp;=&nbsp;cipher.doFinal(content.getBytes("utf-8"));<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Base64.encodeBase64String(encryptedText);<br /><span style="color: #008080; ">43</span>&nbsp;}<br /><span style="color: #008080; ">44</span>&nbsp;<br /><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;解密方法<br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;encryptedData&nbsp;待解密数据<br /></span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;keySrc&nbsp;加解密密秘钥字符串<br /></span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;iv&nbsp;算法所需向量<br /></span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@return</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;UnsupportedEncodingException&nbsp;<br /></span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #008000; ">&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">53</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;decrypt(String&nbsp;encryptedData,&nbsp;String&nbsp;keySrc,String&nbsp;iv)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;UnsupportedEncodingException&nbsp;{<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;decryptedText&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init(keySrc.getBytes("utf-8"));<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cipher.init(Cipher.DECRYPT_MODE,&nbsp;key,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IvParameterSpec(iv.getBytes()));<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;decryptedText&nbsp;=&nbsp;cipher.doFinal(Base64.decodeBase64(encryptedData));<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String(decryptedText);<br /><span style="color: #008080; ">63</span>&nbsp;}<br /><span style="color: #008080; ">64</span>&nbsp;<br /><span style="color: #008080; ">65</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;UnsupportedEncodingException&nbsp;{<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EncryptingUtil&nbsp;eu&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;EncryptingUtil();<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;content&nbsp;=&nbsp;"abc";<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;加密字符串</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">70</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("加密前的："&nbsp;+&nbsp;content);<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;加密方法</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">72</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;enc&nbsp;=&nbsp;eu.encrypt(content,"秘钥值","向量值");<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(enc);<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;解密方法</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">75</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dec&nbsp;=&nbsp;eu.decrypt(enc,"秘钥值",&nbsp;"向量值");<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("解密后的内容："&nbsp;+&nbsp;dec);<br /><span style="color: #008080; ">77</span>&nbsp;}</div><br /><div>Java版本的实现，目前有几个问题，一个就是补齐方式的问题，在C#中默认的补齐方式PKCS7，但是Java默认并不支持该补齐方式，只有PKCS5；其次就是秘钥的长度问题，C#代码中的秘钥长度是256位的，但是Java默认最大支持128位的，执行时会报出&#8221;Illegal key size&#8221;的问题。这位大牛的东东帮到我了，感谢。<a href="http://www.cnblogs.com/haogj/p/4226178.html" title="查看">查看</a></div><img src="http://www.blogjava.net/images/blogjava_net/produ/YC92LJLOHFY56CNX2954Q0.png" border="0" alt="" width="640" height="227" /><br /><div>当需要使用256位长度的秘钥时，需要下载对应Java版本的JCE拓展包，图中的问题就是因为JCE拓展包和Java版本不匹配引起的</div></div><img src ="http://www.blogjava.net/produ/aggbug/430629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2016-03-28 22:12 <a href="http://www.blogjava.net/produ/archive/2016/03/28/430629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>现在就开始做吧，要不你连成功的可能都没有</title><link>http://www.blogjava.net/produ/archive/2016/01/02/430627.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Sat, 02 Jan 2016 14:00:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2016/01/02/430627.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430627.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2016/01/02/430627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430627.html</trackback:ping><description><![CDATA[<fieldset><legend>导语</legend><div>&#8220;没有任何借口&#8221;体现的是一种负责、敬业的精神，一种服从，诚实的态度，一种完美的执行能力，我们需要的正是这种精神的人，他们想尽办法去完成任务，而不是去寻找借口，哪怕看似合理的借口。&#8220;现在就开始做吧，要不你连成功的可能都没有&#8221;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#8212;&#8212;读《没有任何借口》有感</div></fieldset><div>&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; 一次偶然的机会，部门开展了一次关于&#8220;执行力&#8221;的培训，说是偶然，是因为培训前我的工作状态&#8220;不在状态&#8221;，我自我感觉在工作上效率偏低，并没有发挥我应有的做事效率和状态，所以，就有了这篇《没有任何借口》的读后感。<br />做事情找借口，而到最后没有完成，这或许是生活中最常见的场景了，但是你或许会说，生活中也确实有一些客观存在的其他因素，导致了计划的延误，或者项目的失败，这是不可避免的。<br /><ul><li>上班的时候浏览网页，开小差，看手机耽误了工作的时间（工作效率低下，拖延工作时间，实际存在的&#8220;大忙人&#8221;）</li><li>开会的时候没有叫上我，而只是事后给我安排任务，心存不满而不愿承担（比起责任，却选择了借口）</li><li>之前从来没有这么做过，担心出错，不愿意尝试（不敢试错，不敢创新，时代和科技都日新月异，你敢原地踏步吗？）</li><li>没有参加过相关培训，提出的发言没有建设性，不适合做这个工作（不自信，不称职，缺乏责任感，相比于盲目的发言，倒不如说&#8220;不知道&#8221;来得痛快直观）</li><li>同行做的那么好了，我们差那么多，做了又有什么用？（态度消极悲观，你以为你的胖是一天吃出来的？）</li></ul><div>&nbsp; &nbsp; &nbsp; 以上种种都只是冠冕堂皇的借口，不但没有细化问题，去逐步解决，只是放大了一个模糊的问题，抛给了其他人，这并不是给自己或者上级一个交代，这只是敷衍逃避而已。久而久之，我们一旦养成了习惯，那么对自身，对团队，对企业将是莫大的伤害，你将离成功越来越远，你将永远不会成为你想象中的样子，成为你想成为的人！<br />&nbsp; &nbsp; &nbsp;&nbsp;倘若某件事情完不成，你就要被枪毙，你还敢瞎比比吗？<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我虽然不是职场小鲜肉，但也还没到职场&#8220;老油条&#8221;的程度，渐渐的，心态上也会也有一些转变。<br /><div><ul><li>我们不单纯是为了公司的利益而工作，更为了自己而工作啊。作为公司的成员，我们是同手同脚休戚与共的，我们解决的问题不仅会出现在工作中，也会出现在工作之外的时间或地点，只要我们能把工作上升到为了提升自己而工作，为了变得更加称职而工作，我们也不会因为加班和工作带来的其他问题而烦恼。</li><li>始终怀有饱满的热情，对公司的产品充满信心。没有人愿意和厌世的人做朋友，也不会有人喜欢消极的人，你对自己充满信心，对公司的产品和服务充满信心，周围的人自然会被你感染，你自然也会被重用。</li><li>敢于吃螃蟹，敢于扛大旗。这里说的不是出风头和占便宜，而是说，对于工作中棘手的问题敢于站出来，虽然我知道你心里可能没底，但是这难道不是一个加速自我提升的机会吗？</li><li>消停点，别老是抱怨&#8220;公司里没有人带我，这个做不了&#8221;。得了吧，有人带你又能怎么样？通过一年获得别人三年的工作经验？你加班都加不出来啊！参考上一条建议吧。</li></ul></div><div>&nbsp; &nbsp; &nbsp; <strong>一旦你开始找理由，那么这件事就做不好了，你离失败就更近了一步。<br /></strong></div><hr /><div>&nbsp; &nbsp; &nbsp; 对于日常的工作，我们不仅要充分发挥主观能动性，不给借口生存的空间，对于上级的安排，我们更要摆正心态，切实落地执行。</div></div><div><ul><li>对于上级的命令和安排，要切实的去执行，这是达成共同目标的基本保证（当然，商场并非战场，不能完全照搬，虽然上级也会犯错，但是当下却是以执行为重）</li><li>团队内，乃至于整个公司，遵守纪律是我们共同踏步向前的守则，就好比每天中午的健身操一样，这虽然和工作没有直接的关系，但是这对于保持我们的工作状态却有着积极的帮助。在工作上的分歧，很容易导致我们和同事，领导甚至公司之间产生对立情绪，这是万万使不得的，我们是一个团体，维护共同的服务和产品，公司的形象就是我们自身的形象，我们自身的形象也是公司的形象。</li><li>事无巨细的对待工作，才能事无巨细的对待人生。大多数人的工作都是自己选择的，我们选择每天花费8个小时或者更多的生命投入在其中，我们希望成就一些结果，那么就要求我们锱铢必较的去看待它，工作之中无小事，厚积才能薄发，工作能做好的人，生活也不会太差。</li><li>工作不论是不是自己选择的，不论工作带来的好与不好，它都是我们的工作，我们要接受它，除非你走人，否则，接受它，并且现在就开始做，现在！</li></ul><div>&nbsp; &nbsp; &nbsp;&nbsp;<strong>作为组织的一员，服从安排，遵守纪律自然不必说，无规矩不方圆的道理都懂得，但是我也不是从一开始就很从容的接收这些条条框框，那些看似抠门不仁道的规定实际上是为了塑造更优秀的自己，打造更优秀的团队，没听说过谁谁不关心你还愿意花心思去管束你的，想想自己的亲妈吧。<br /></strong></div><hr /><div>&nbsp; &nbsp; &nbsp; 工作即是责任，选择了这份责任，就要不遗余力的承担下去，承担的过程可能看起来是&#8220;愚蠢&#8221;的，但是却反映了你的负责程度。</div><div><ul><li>在工作中尽职尽责，那么将会受到同事的尊重，领导的赏识，在社会中你也会获得更好的生存条件；推卸责任，玩忽职守，那无非是在自己的人生道路上设置障碍。</li><li>能力越大，责任越大，我们要有效运用手里的能力，为自己和社会创造价值，这也正是我们存在的意义。负责人的人也是能有效运用能力的人，不成熟的人并不具备履行责任的能力，就好比超级英雄电影里的英雄，保护世界的愿望很美好，但是需要与之相匹配的能力。</li><li>负责一定是对结果负责。如果超级英雄保护地球失败，那还好意思说&#8220;我们会保护好地球&#8221;的吗？如果你让一个负责人的人去负责某件事的过程，那么他肯定不会满意的，因为只有结果才能满足负责人，才会让他有成就感。对行为负责某种程度上也是逃避责任的一种表现。</li><li>对于承担责任，忠诚是一个必须的品质！没有忠诚，就没有责任这一说，要承担责任首先要对自己忠诚，在这个前提之下，你才有可能去达成想要的结果，你才能对得起信任你的人，你才能对得起自己。</li></ul></div><div>&nbsp; &nbsp; &nbsp;&nbsp;<strong>责任是无形的，是没有条件的，你在追求卓越的同时，责任是相伴相生的，责任来自朋友，家人和社会，成熟的人承担着更多的责任，有着更强大的能力，幼稚的人拒绝责任，惶惶不可终日<br /></strong><hr /><div>&nbsp; &nbsp; &nbsp; 我们都听过，同岗不同酬，或者入职时间相同，但是成长和晋升不同的事情，真是老生常谈了啊。我们都有一颗不甘于平凡的心，都不愿意打工一辈子，都想当老板，但是很多人到最后都归于平庸，但是老板也不是从一开始就是老板的，那么我们如何在自己的岗位上做到平凡而不平庸呢？</div></div><div><ul><li>&#8220;你追求卓越，成功追求你&#8221;，这是一句来自《三傻大闹宝莱坞》的台词，无论你身处什么岗位，你是客服，服务好你的每一个客户，你是程序员，服务好你的每一行代码，你是管理者，服务好你的每一项计划，小事做多做好，那么事情再多也能有条不紊</li><li>超过客户的预想，不论客户是谁，事情得出的结果，那么你总能得到好评，多做一点点，你能收获的可不止一点点，倘若你都考虑管理者或者老板该考虑的事情了，那么你距离他们还会远吗？</li><li>路是人走出来的，做事的办法也是脑子想出来的，我们生来就是要解决问题的，衣食住行的问题我们能搞的定，工作的问题同样搞的定，让困难放马过来，让它知道它不是最后一个死在自己手下的困难。</li><li>全局意识。有人说，同样的人摆在不同的位置，就是不同的人，这是相对的，归根究底还是要看人本身的；倘若一个人的心态不同，那么所激发的能量就是绝对的。我们应该都听过泥瓦匠砌墙的故事，一个把工作只是当做砌墙的人，和一个把工作看成是一个伟大工程的人，心态所带来的能量是绝对不一样的，前者，无论让他去盖一间小屋，或者是去盖一座大厦，在他眼里都是砌墙，但是在后者眼里，小屋和大厦同样是宏伟的工程，他将会以为拥有更高远的眼光而受到重用。</li></ul><div>&nbsp; &nbsp; &nbsp; <strong>不甘于平凡，首先要正视平凡，平凡不是平庸，我们追求卓越，成功自然追求我们，如果不是这样，那么成功追求谁呢？如果一个企业里员工的榜样不是老板，那么这个企业一定岌岌可危</strong></div></div><hr /><div>&nbsp; &nbsp; &nbsp; &#8220;志同而事，道同而谋&#8221;，这是来自我们BOSS的一个观点<br /><div><ul><li>我们是一个团队，我们在一条船上，同呼吸，共命运，共进退，我们对于目标的实现，应该不受身份或者岗位的限制，都应该投入100%的热情和精力。</li><li>我们应该感谢企业给了我们一个施展才华的舞台，让我们在团队中去体现自己的价值；同样的，企业也会感激你的付出，最终受益的，还是我们自己。</li><li>不断充电，不断提升，不给自己设限，互联网时代，原地踏步就是退步。</li></ul></div><div>&nbsp; &nbsp; &nbsp; <strong>以上种种不是鸡汤，不是教条，大道理人人都懂，但是小情绪却难以自控，我们都希望能出人头地，但请诸君时刻戒骄戒躁，稳扎稳打，闷声儿装大逼~谢谢</strong></div></div></div></div><img src ="http://www.blogjava.net/produ/aggbug/430627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2016-01-02 22:00 <a href="http://www.blogjava.net/produ/archive/2016/01/02/430627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>nginx：菜鸟手册</title><link>http://www.blogjava.net/produ/archive/2015/12/01/430580.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 01 Dec 2015 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/12/01/430580.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430580.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/12/01/430580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430580.html</trackback:ping><description><![CDATA[<div>以下讲记述的，是为nginx入门级新人和打算学习nginx的人而准备的。</div><div></div><div><br />首先，nginx（读作：engine x）是一个反向代理服务器。这里顺便阐述一下相关的概念，来帮助概念不清楚的朋友来获得最佳的学习体验。</div><div></div><div>服务器可以按照不同标准划分为很多种，那么这里讨论的就是其中的一种，代理服务器。代理服务器可以再次细分，分为正向代理服务器和反向代理服务器，这两者是相对于目标服务器而言的。当我们（O）希望访问某一台服务器（T，是具体的服务器），但是由于种种原因，我们不能去直接的访问T，但是我们可以直接访问另一台服务器（P），而P却可以访问T，那么正好，我们拜托P去访问T，将获得的信息返回给我们，这个过程中，我们始终知道要访问的那一台服务器，所以，这个代理过程称为正向代理；那么与之相对，如果我们知道要访问的站点，但是该站点可能同时部署在多个服务器上，不过最终我们获得了目标站点的内容，这个过程中，我们不知道具体访问过哪一台服务器，所以，这个代理过程称为反向代理。</div><div></div><div><br />那么nginx就是近些年来使用率不断攀升的代理服务器，你可以查看一下中间件的使用情况，这里给出一个调查，<a href="http://w3techs.com/technologies/cross/web_server/ranking" title="点我查看">点我查看</a><br /><br /><div>好了，我们开始吧。我不管你什么系统，但是我假定你已经安装好了nginx，排除那些系统上操作的差异，我们来感受一下最基本的操作。</div><div></div><div>nginx的<strong>启动</strong>，<strong>停止</strong>，<strong>重新加载配置文件</strong></div><div>在控制台中定位到nginx所在的目录，使用nginx -s signal操作nginx，signal可以是以下参数<br /><div><ul><li>stop &#8212; 立刻停止（不会等待当前工作结束）</li><li>quit &#8212; 延迟停止（会等待当前工作结束）</li><li>reload &#8212; 重新加载配置文件（会优先检查新配置文件的格式，通过校验则启用新配置，不通过则沿用旧配置）</li><li>reopen &#8212; 重新打开日志文件</li></ul></div><div>好了，知道了基本操作之后，我们就看一下配置文件，看懂了配置文件，我们就能让nginx按照我们的需要来运作。打开nginx.cnf文件</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#user&nbsp;&nbsp;nobody;<br />#我左边有个&#8220;#&#8221;号，这说明这一行都是注释<br />#下面的这个，看起来像一对键值对，这么理解也可以，官方给出的解释是&#8220;简单指令&#8221;<br />worker_processes&nbsp;&nbsp;1;<br /><br />#error_log&nbsp;&nbsp;logs/error.log;<br />#error_log&nbsp;&nbsp;logs/error.log&nbsp;&nbsp;notice;<br />#error_log&nbsp;&nbsp;logs/error.log&nbsp;&nbsp;info;<br /><br />#pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs/nginx.pid;<br /><br />#与简单指令相对，下面的event以及一对花括号，称作&#8220;块指令&#8221;；含有其他指令的&#8220;块指令&#8221;，我们称作&#8220;上下文&#8221;<br />#同时，我们把不被包含在任何其他上下文中的上下文称作主上下文<br />#所以，&#8220;events&#8221;和&#8220;http&#8221;就是主上下文，&#8220;server&#8221;和&#8220;location&#8221;就不是主上下文<br />events&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;worker_connections&nbsp;&nbsp;1024;<br />}<br /><br />http&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mime.types;<br />&nbsp;&nbsp;&nbsp;&nbsp;default_type&nbsp;&nbsp;application/octet-stream;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#log_format&nbsp;&nbsp;main&nbsp;&nbsp;'$remote_addr&nbsp;-&nbsp;$remote_user&nbsp;[$time_local]&nbsp;"$request"&nbsp;'<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$status&nbsp;$body_bytes_sent&nbsp;"$http_referer"&nbsp;'<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'"$http_user_agent"&nbsp;"$http_x_forwarded_for"';<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#access_log&nbsp;&nbsp;logs/access.log&nbsp;&nbsp;main;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;sendfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;<br />&nbsp;&nbsp;&nbsp;&nbsp;#tcp_nopush&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#keepalive_timeout&nbsp;&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;keepalive_timeout&nbsp;&nbsp;65;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#gzip&nbsp;&nbsp;on;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;#好了，我们需要配置一个服务器最基本的功能，给出请求相应结果<br />&nbsp;&nbsp;&nbsp;&nbsp;#看到下面这个server上下文，它看上去但是也的确是用来配制服务器的<br />&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这个server上下文监听的端口以及域名<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;localhost;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#charset&nbsp;koi8-r;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#access_log&nbsp;&nbsp;logs/host.access.log&nbsp;&nbsp;main;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这里就是路由规则了，location加空格再加匹配项，这里的匹配项是&#8220;/&#8221;，也就是说所有以&#8220;/&#8221;开头的请求都符合这个路由规则<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#但是需要注意一点，nginx在匹配路由的时候有一个最长前缀匹配规则，看到下一个路由规则<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这里的root指的是响应资源所在的目录，这是指明，资源在nginx目录下的index目录里<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#index指令会响应指定的页面，按次序进行查找，找到了就返回<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;&nbsp;index.html&nbsp;index.htm;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这location的匹配项是&#8220;/demo&#8221;，那么当一个请求是&#8220;/demo/get&#8221;的时候，这个请求会匹配之前的&#8220;/&#8221;和这里的&#8220;/demo&#8221;，但是<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#nginx会选择前缀较长的匹配项来匹配，所以nginx会使用/demo路由的相应内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/demo&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#这里又重新设定了root的值，表示用nginx目录demo目录下的资源响应<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果root在主上下文之外设定，那么相当于一个全局的设定，在其他上下文中没有被覆盖的话，则使用全局设定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;demo;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#截止到为目前的配置，nginx都是用来响应静态的资源，比如我们访问localhost/demo/show.html，那么nginx会返回nginx目录下<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#demo目录下show.html的内容，所以，我们经常会把nginx当做一个静态内容缓存来使用，来缓解后续服务器的响应压力<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#对于location来说，常用的还有正则匹配<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#静态资源配置，当然也可以来响应动态请求，不过这里有一点需要注意，当使用正则匹配时，如果请求匹配了当前的路由规则，那么<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#会以正则的匹配内容为主并返回，不会使用非正则的匹配项内容返回，以&#8220;~&#8221;开头，就表示匹配项是一个正则表达式，当然，还有其<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#他不同规则的前缀都表示正则，后续再展开<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;~&nbsp;.*\.(css|js)(.*)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_set_header&nbsp;Host&nbsp;$host;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_cache_valid&nbsp;200&nbsp;302&nbsp;1h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_cache_valid&nbsp;301&nbsp;1d;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_cache_valid&nbsp;any&nbsp;1m;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expires&nbsp;7d;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#对于代理服务器来说，最基本的功能代理是必不可少的，而且配置也非常简单<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#端口转发配置，做出如下配置之后，符合匹配项的请求会原封不动的转发到otherhost域名下<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/proxy{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxy_pass&nbsp;http://otherhost;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#下面的配置显而易见，是错误页面的配置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#error_page&nbsp;&nbsp;404&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/404.html;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;redirect&nbsp;server&nbsp;error&nbsp;pages&nbsp;to&nbsp;the&nbsp;static&nbsp;page&nbsp;/50x.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error_page&nbsp;&nbsp;&nbsp;500&nbsp;502&nbsp;503&nbsp;504&nbsp;&nbsp;/50x.html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;=&nbsp;/50x.html&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><div>有了这套最基本的配置，就可以试着开启nginx，感受一下它的功能</div></div></div><img src ="http://www.blogjava.net/produ/aggbug/430580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-12-01 17:32 <a href="http://www.blogjava.net/produ/archive/2015/12/01/430580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaScript_跨域资源共享CORS</title><link>http://www.blogjava.net/produ/archive/2015/11/26/430531.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Thu, 26 Nov 2015 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/11/26/430531.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430531.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/11/26/430531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430531.html</trackback:ping><description><![CDATA[<div>要记录好这个问题，首先需要描述清楚这个问题。</div>
<div></div>
<div>有如下的一个场景：我们在实现一个系统中某个功能的时候，可能系统的某些模块不在一个域名下。用户中心模块部署在user.xxx.com下，产品相关的功能部署在product.xxx.com下，在用户中心的某些页面，我们或许要请求产品功能模块的功能，此时就会有问题出现。以Google Chrome（版本 45.0.2454.101 m）浏览器为例，当当前的页面在A域名下，我们在页面中构造了一个异步请求，我们需要调用位于B域名下的某个API，代码片段如下：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&lt;script&nbsp;type="text/javascript"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$(<span style="color: #0000FF; ">function</span>()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">当前页面所在域名：http://localhost:9000/</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">jQuery版本：jquery-1.11.3.min.js</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;:&nbsp;"http://localhost:9001/order/pindexpost",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;:&nbsp;"POST",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType&nbsp;:&nbsp;'json',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;:&nbsp;<span style="color: #0000FF; ">function</span>(data)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&lt;/script&gt;</div>
<div>但是请求之后，浏览器控制台给出了如下的错误信息</div>
<img src="http://www.blogjava.net/images/blogjava_net/produ/2015-11-26_10-43-39.png" border="0" alt="" width="640" height="18" /><br />
<div>那么这就是标题中所提到的<strong>跨域资源共享CORS</strong>问题了。我们把这个概念细化一下，首先，为什么会有CORS？简单点理解就是出于安全考虑，浏览器都遵循一个叫同源策略的东西，他约束浏览器说&#8220;不是你的东西，你问人家要，人家默认不给你，除非人家同意给你&#8221;，基于这个策略，就有了跨域资源共享的问题，那么，怎么就叫跨域了呢？上面代码中的域名不是一样的吗，都是指向本地的localhost啊。举个栗子说明下</div>
<br />
<div>http://www.blogjava.net:80,左边是一个完整的请求，包含了协议，子域名等等若干部分，我们把它理解为域，但凡是在这个域下发生的请求，都无法直接访问到其他域的资源</div>
<div>
<ul>
     <li>http://www.blogjava.net:80能访问http://www.blogjava.net:81下的资源吗？不行！</li>
     <li>http://www.blogjava.net:80能访问http://abc.blogjava.net:80下的资源吗？不行！</li>
     <li>http://www.blogjava.net:80能访问https://www.blogjava.net:80下的资源吗？不行！</li>
     <li>http://www.blogjava.net:80能访问http://域名对应的真实IP:80下的资源吗？不行！</li>
     <li>http://www.blogjava.net:80能访问http://www.xyz.net:80下的资源吗？不行！</li>
</ul>
</div>
<div>
<div>域哪怕有<strong>一点点不一样</strong>，<strong>一点点不一样</strong>，<strong>一点点不一样</strong>，都是不可以访问的，那么问题来了，如何实现跨域呢？ 目前有三种方案可以打破同源策略所带来的限制，实现跨域请求。</div>
</div>
<ol>
     <li>
     <div><strong>使用JSONP</strong>。这种方案是使用HTML的script标签来实现的，script标签的src属性不受同源策略约束，可以访问任意站点的资源，但是，该方案有着自己的约束。首先，他只能发出GET请求，因为script标签的初衷就是为了获取js脚本，所以如果返回的数据内容不是js脚本的话，也不会成功。基于这个约束，我们需要改造一下我们的请求：<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #008080; ">&nbsp;1</span>&nbsp;&lt;script&nbsp;type="text/javascript"&gt;<br />
     <span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(<span style="color: #0000FF; ">function</span>&nbsp;()&nbsp;{<br />
     <span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">当前页面所在域名：http://localhost:9000/</span><span style="color: #008000; "><br />
     </span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;jQuery版本：jquery-1.11.3.min.js</span><span style="color: #008000; "><br />
     </span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.ajax({<br />
     <span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;"http://localhost:9001/order/pindexpost",<br />
     <span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;"POST",&nbsp;dataType:&nbsp;'jsonp',<br />
     <span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jsonpCallback:&nbsp;"callback"<br />
     <span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
     <span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br />
     <span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
     <span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">function</span>&nbsp;callback(result)&nbsp;{<br />
     <span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("suc:"&nbsp;+&nbsp;result);<br />
     <span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
     <span style="color: #008080; ">15</span>&nbsp;&lt;/script&gt;&nbsp;</div><div>刚才提到，JSONP方式是基于script标签的，所以我们要对返回的数据做一些处理，使返回的数据是一段js脚本才可以。我们在客户端预定义好callback函数，使得服务端返回数据的时候可以直接调用这个callback函数，服务端代码片段如下：</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;response().setContentType("application/javascript");<br /><span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;ok("callback("&nbsp;+&nbsp;data&nbsp;+&nbsp;")");</div><div>要注明返回的格式，并且data的格式也要符合js的语法。其实说白了，JSONP就是请求目标数据，然后将目标数据和回调函数进行拼接，以javascript的形式返回给浏览器，之后浏览器执行的这个回调函数。<br /></div></div>
     </li>
<li><div><strong>使用代理服务器</strong>。这个比较好理解，不过运维的成分多一些，设置一个代理服务器，根据请求API所在命名空间的不同，转发到相应的域去，这样一来就骗过了浏览器，让浏览器以为所有的数据都来自一个域。<br /></div></li><li><strong>设置请求的相应头</strong>。在目标API的响应头中添加&#8220;Access-Control-Allow-Origin&#8221;，设置值为&#8220;*&#8221;，这就是让服务器通知浏览器，说&#8220;我这个API的响应，是面向所有人的，*就代表这个意思啊&#8221;，但是，这也会带来一个安全性的问题，所以你可以设置部分站点可以跨域访问，比如Access-Control-Allow-Origin: http://www.blogjava.net/，但是这个响应头存在一定的兼容问题，具体支持情况可以查看<a href="http://caniuse.com/#search=CORS" title="caniuse.com">caniuse.com</a></li></ol>
</div><img src ="http://www.blogjava.net/produ/aggbug/430531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-11-26 16:46 <a href="http://www.blogjava.net/produ/archive/2015/11/26/430531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Css3实现一个坐标闪烁效果</title><link>http://www.blogjava.net/produ/archive/2015/11/20/430573.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Fri, 20 Nov 2015 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/11/20/430573.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430573.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/11/20/430573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430573.html</trackback:ping><description><![CDATA[最终效果如下：<br /><img src="http://www.blogjava.net/images/blogjava_net/produ/radiation.gif" border="0" alt="" /><br /><br />页面内容如下：<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">3</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="target&nbsp;animatecommon"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">4</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="radiation&nbsp;animatecommon"</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">5</span>&nbsp;<br /><span style="color: #008080; ">6</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">7</span>&nbsp;</div><br />css如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #800000; "><br />&lt;style&nbsp;type="text/css"&gt;<br /><br />.animatecommon</span>{<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;animation-timing-function</span>:<span style="color: #0000FF; ">liner</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;animation-iteration-count</span>:<span style="color: #0000FF; ">infinite</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;animation-play-state</span>:<span style="color: #0000FF; ">running</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;animation-direction</span>:<span style="color: #0000FF; ">normal</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Firefox:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-moz-animation-duration</span>:<span style="color: #0000FF; ">1s</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-moz-animation-timing-function</span>:<span style="color: #0000FF; ">liner</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-moz-animation-iteration-count</span>:<span style="color: #0000FF; ">infinite</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-moz-animation-play-state</span>:<span style="color: #0000FF; ">running</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-moz-animation-direction</span>:<span style="color: #0000FF; ">normal</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Safari&nbsp;and&nbsp;Chrome:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-duration</span>:<span style="color: #0000FF; ">1s</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-timing-function</span>:<span style="color: #0000FF; ">liner</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-iteration-count</span>:<span style="color: #0000FF; ">infinite</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-play-state</span>:<span style="color: #0000FF; ">running</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-direction</span>:<span style="color: #0000FF; ">normal</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Opera:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-o-animation-duration</span>:<span style="color: #0000FF; ">1s</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-o-animation-timing-function</span>:<span style="color: #0000FF; ">liner</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-o-animation-iteration-count</span>:<span style="color: #0000FF; ">infinite</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-o-animation-play-state</span>:<span style="color: #0000FF; ">running</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-o-animation-direction</span>:<span style="color: #0000FF; ">normal</span>;<span style="color: #FF0000; "><br /></span>}<span style="color: #800000; "><br /><br />.radiation</span>{<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;width</span>:<span style="color: #0000FF; ">50px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;height</span>:<span style="color: #0000FF; ">50px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;border-radius</span>:<span style="color: #0000FF; ">50%</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;background</span>:<span style="color: #0000FF; ">red</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;position</span>:<span style="color: #0000FF; ">fixed</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;top</span>:<span style="color: #0000FF; ">50%</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;left</span>:<span style="color: #0000FF; ">50%</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;margin-left</span>:<span style="color: #0000FF; ">-25px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;margin-top</span>:<span style="color: #0000FF; ">-25px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;z-index</span>:<span style="color: #0000FF; ">&nbsp;99</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;animation-name</span>:<span style="color: #0000FF; ">radiation</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Firefox:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-moz-animation-name</span>:<span style="color: #0000FF; ">radiation</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Safari&nbsp;and&nbsp;Chrome:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-name</span>:<span style="color: #0000FF; ">radiation</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Opera:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-o-animation-name</span>:<span style="color: #0000FF; ">radiation</span>;<span style="color: #FF0000; "><br /></span>}<span style="color: #800000; "><br /><br /><br />.target<br /></span>{<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;width</span>:<span style="color: #0000FF; ">100px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;height</span>:<span style="color: #0000FF; ">100px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;margin-left</span>:<span style="color: #0000FF; ">-50px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;margin-top</span>:<span style="color: #0000FF; ">-50px</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;border-radius</span>:<span style="color: #0000FF; ">50%</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;background</span>:<span style="color: #0000FF; ">red</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;position</span>:<span style="color: #0000FF; ">fixed</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;top</span>:<span style="color: #0000FF; ">50%</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;left</span>:<span style="color: #0000FF; ">50%</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;z-index</span>:<span style="color: #0000FF; ">&nbsp;98</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;animation-name</span>:<span style="color: #0000FF; ">location</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Firefox:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-moz-animation-name</span>:<span style="color: #0000FF; ">location</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Safari&nbsp;and&nbsp;Chrome:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-name</span>:<span style="color: #0000FF; ">location</span>;<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Opera:&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;-o-animation-name</span>:<span style="color: #0000FF; ">location</span>;<span style="color: #FF0000; "><br /><br /></span>}<span style="color: #800000; "><br /><br />@keyframes&nbsp;location&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;</span>}<span style="color: #800000; "><br />}<br />@-moz-keyframes&nbsp;location&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;</span>}<span style="color: #800000; "><br />}<br />@-webkit-keyframes&nbsp;location&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;</span>}<span style="color: #800000; "><br />}<br />@-o-keyframes&nbsp;location&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;</span>}<span style="color: #800000; "><br />}<br /><br /><br />@keyframes&nbsp;radiation&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;white</span>}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=100)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;red</span>}<span style="color: #800000; "><br />}<br />@-moz-keyframes&nbsp;radiation&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;white</span>}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=100)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;red</span>}<span style="color: #800000; "><br />}<br />@-webkit-keyframes&nbsp;radiation&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;white</span>}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=100)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;red</span>}<span style="color: #800000; "><br />}<br />@-o-keyframes&nbsp;radiation&nbsp;<br /></span>{<span style="color: #FF0000; "><br />0%&nbsp;&nbsp;&nbsp;{transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(3)scaleY(3)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=0)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;0</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;white</span>}<span style="color: #800000; "><br />100%&nbsp;</span>{<span style="color: #FF0000; ">transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-webkit-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-moz-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">-o-transform</span>:<span style="color: #0000FF; ">scaleX(1)scaleY(1)</span>;<span style="color: #FF0000; ">filter</span>:<span style="color: #0000FF; ">alpha(opacity=100)</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-moz-opacity</span>:<span style="color: #0000FF; ">1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;-khtml-opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">&nbsp;&nbsp;opacity</span>:<span style="color: #0000FF; ">&nbsp;1</span>;<span style="color: #FF0000; ">background</span>:<span style="color: #0000FF; ">&nbsp;red</span>}<span style="color: #800000; "><br />}<br /><br />&lt;/style&gt;<br /></span></div><br /><img src ="http://www.blogjava.net/produ/aggbug/430573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-11-20 15:54 <a href="http://www.blogjava.net/produ/archive/2015/11/20/430573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本操作：回文校验</title><link>http://www.blogjava.net/produ/archive/2015/11/18/430574.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Wed, 18 Nov 2015 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/11/18/430574.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430574.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/11/18/430574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430574.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430574.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;demo_2015_11_18;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.util.Arrays;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.util.Scanner;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;DEMO&nbsp;{<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;判断输入的内容是否是回文<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner&nbsp;s&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">读入数据源</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Scanner(System.in);<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;srcStr&nbsp;=&nbsp;s.nextLine();<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>[]&nbsp;srcChars&nbsp;=&nbsp;srcStr.toCharArray();<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">判断数组长度奇偶</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>[]&nbsp;t1&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>[]&nbsp;t2&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">分割数组</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t1&nbsp;=&nbsp;Arrays.copyOfRange(srcChars,&nbsp;0,&nbsp;srcChars.length/2);<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(srcChars.length%2&nbsp;==&nbsp;0){<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">偶数</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;=&nbsp;Arrays.copyOfRange(srcChars,&nbsp;srcChars.length/2,&nbsp;srcChars.length);<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #0000FF; ">else</span>{<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">奇数</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t2&nbsp;=&nbsp;Arrays.copyOfRange(srcChars,&nbsp;srcChars.length/2&nbsp;+&nbsp;1,&nbsp;srcChars.length);<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">反转后半截数组</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>[]&nbsp;temp&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">char</span>[t2.length];<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;t2.length&nbsp;-&nbsp;1;&nbsp;i&nbsp;&gt;=&nbsp;0;&nbsp;i--)&nbsp;{<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp[t2.length&nbsp;-&nbsp;1&nbsp;-&nbsp;i]&nbsp;=&nbsp;t2[i];<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(Arrays.equals(t1,temp));<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.close();<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">48</span>&nbsp;}<br /><span style="color: #008080; ">49</span>&nbsp;</div><br />结果展示：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->asddsa<br /><span style="color: #0000FF; ">true</span><br /><br />asdsasd<br /><span style="color: #0000FF; ">false</span><br /><br />asdasd<br /><span style="color: #0000FF; ">false</span><br /><br />asdxdsa<br /><span style="color: #0000FF; ">true</span></div><img src ="http://www.blogjava.net/produ/aggbug/430574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-11-18 16:04 <a href="http://www.blogjava.net/produ/archive/2015/11/18/430574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本操作：元音字符统计</title><link>http://www.blogjava.net/produ/archive/2015/11/17/430575.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 17 Nov 2015 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/produ/archive/2015/11/17/430575.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/430575.html</wfw:comment><comments>http://www.blogjava.net/produ/archive/2015/11/17/430575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/430575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/430575.html</trackback:ping><description><![CDATA[<div>泛泛的说，今天的需求就是需要统计特定字符出现的个数，想必各位都会，如果仅仅是实现，传统的实现应该像下面这样<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;Map&lt;String,&nbsp;Integer&gt;&nbsp;counts&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;HashMap&lt;String,&nbsp;Integer&gt;();<br /><span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(String&nbsp;word&nbsp;:&nbsp;words)&nbsp;{<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;count&nbsp;=&nbsp;counts.get(word);<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(count&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counts.put(word,&nbsp;1);<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counts.put(word,&nbsp;count&nbsp;+&nbsp;1);<br /><span style="color: #008080; ">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">9</span>&nbsp;}</div><br /><div>这么做没问题，简单粗暴快，只不过这次我希望更优雅的实现它。今天特地要用一下Google的Guava工程提供的API，Multiset。看上去他是一个集合，他也的确是，我们可以简单的理解为他是一个元素顺序无关，元素可重的集合，这里不细讲，以使用为主。后续有机会展开一下Guava的内容。</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;demo_2015_11_17;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.util.Scanner;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;com.google.common.collect.HashMultiset;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;com.google.common.collect.Multiset;<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;DEMO&nbsp;<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;{<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(&nbsp;String[]&nbsp;args&nbsp;)<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scanner&nbsp;s&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">设定数据源</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Scanner(System.in);<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;srcStr&nbsp;=&nbsp;s.nextLine();<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;vowels&nbsp;=&nbsp;"aeiou";<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Multiset&lt;String&gt;&nbsp;ms&nbsp;=&nbsp;HashMultiset.create();<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>[]&nbsp;srcChars&nbsp;=&nbsp;srcStr.toCharArray();<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;curChar&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">遍历数据源</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;srcChars.length&nbsp;-&nbsp;1;&nbsp;i&nbsp;&gt;=&nbsp;0;&nbsp;i--)&nbsp;{<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curChar&nbsp;=&nbsp;String.valueOf(srcChars[i]);<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(vowels.indexOf(curChar)&nbsp;!=&nbsp;-1){<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ms.add(curChar);<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(String&nbsp;stemp&nbsp;:&nbsp;ms.elementSet())&nbsp;{<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("元音字母["&nbsp;+&nbsp;stemp&nbsp;+&nbsp;"]的出现次数为："&nbsp;+&nbsp;ms.count(stemp));<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">finally</span>&nbsp;{<br /><span style="color: #008080; ">38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.close();<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">41</span>&nbsp;}</div><br />结果演示如下：<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->one&nbsp;twe&nbsp;three&nbsp;four&nbsp;five<br />元音字母[e]的出现次数为：5<br />元音字母[u]的出现次数为：1<br />元音字母[i]的出现次数为：1<br />元音字母[o]的出现次数为：2</div><div><br />因为使用了Guava工程，使用maven管理依赖，所以把Guava的版本贴一下</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>com.google.guava<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>guava<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>19.0-rc2<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span></div><br /></div><img src ="http://www.blogjava.net/produ/aggbug/430575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-11-17 16:11 <a href="http://www.blogjava.net/produ/archive/2015/11/17/430575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>