正则表达式括号的作用

本文摘抄自javascript正则表达式迷你书

正则表达式是匹配模式,要么匹配字符,要么匹配位置

1. 分组和分支结构

这二者是括号最直觉的作用,也是最原始的功能,强调括号内的正则是一个整体,即提供子表达式

1.1 分组

我们知道 /a+/ 匹配连续出现的 "a",而要匹配连续出现的 "ab" 时,需要使用 /(ab)+/

其中括号是提供分组功能,使量词 + 作用于 "ab" 这个整体,测试如下:

var regex = /(ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) );
// => ["abab", "ab", "ababab"]

1.2 分支结构

而在多选分支结构(p1|p2) 中,此处括号的作用也是不言而喻的,提供了分支表达式的所有可能

比如,要匹配如下的字符串:

I love JavaScript
I love Regular Expression

可以使用正则:

var regex = /^I love (JavaScript|Regular Expression)$/;
console.log( regex.test("I love JavaScript") );
console.log( regex.test("I love Regular Expression") );
// => true
// => true

如果去掉正则中的括号,即:

/^I love JavaScript|Regular Expression$/

匹配字符串是 "I love JavaScript""Regular Expression",当然这不是我们想要的


2. 分组引用

这是括号一个重要的作用,有了它,我们就可以进行数据提取,以及更强大的替换操作

而要使用它带来的好处,必须配合使用实现环境的 API

以日期为例。假设格式是 yyyy-mm-dd 的,我们可以先写一个简单的正则:

var regex = /\d{4}-\d{2}-\d{2}/;

其可视化形式是:

然后再修改成括号版的:

var regex = /(\d{4})-(\d{2})-(\d{2})/;

其可视化形式是:

对比这两个可视化图片,我们发现,与前者相比,后者多了分组编号,如 Group #1

其实正则引擎也是这么做的,在匹配过程中,给每一个分组都开辟一个空间,用来存储每一个分组匹配到的
数据。

既然分组可以捕获数据,那么我们就可以使用它们

2.1 提取数据

比如提取出年、月、日,可以这么做:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
console.log( string.match(regex) );
// => ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]

match返回的一个数组,第一个元素是整体匹配结果,然后是各个分组(括号里)匹配的
内容,然后是匹配下标,最后是输入的文本。另外,正则表达式是否有修饰符 gmatch
返回的数组格式是不一样的

另外也可以使用正则实例对象的 exec方法:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
console.log( regex.exec(string) );
// => ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]

同时,也可以使用构造函数的全局属性 $1$9 来获取:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";

regex.test(string); // 正则操作即可,例如
// regex.exec(string);
// string.match(regex);

console.log(RegExp.$1); // "2017"
console.log(RegExp.$2); // "06"
console.log(RegExp.$3); // "12"

2.2 替换

比如,想把 yyyy-mm-dd 格式,替换成 mm/dd/yyyy 怎么做?

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, "$2/$3/$1");
console.log(result);
// => "06/12/2017

其中 replace中的,第二个参数里用 $1$2$3 指代相应的分组。等价于如下的形式:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, function () {
  return RegExp.$2 + "/" + RegExp.$3 + "/" + RegExp.$1;
});
console.log(result);
// => "06/12/2017

也等价于:

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2017-06-12";
var result = string.replace(regex, function (match, year, month, day) {
  return month + "/" + day + "/" + year;
});
console.log(result);
// => "06/12/2017"

3. 反向引用

除了使用相应 API来引用分组,也可以在正则本身里引用分组。但只能引用之前出现的分组,即反向引用

还是以日期为例

比如要写一个正则支持匹配如下三种格式:

2016-06-12
2016/06/12
2016.06.12

最先可能想到的正则是:

var regex = /\d{4}(-|\/|\.)\d{2}(-|\/|\.)\d{2}/;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // true

其中 /. 需要转义。虽然匹配了要求的情况,但也匹配 "2016-06/12" 这样的数据

假设我们想要求分割符前后一致怎么办?此时需要使用反向引用:

var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
var string1 = "2017-06-12";
var string2 = "2017/06/12";
var string3 = "2017.06.12";
var string4 = "2016-06/12";
console.log( regex.test(string1) ); // true
console.log( regex.test(string2) ); // true
console.log( regex.test(string3) ); // true
console.log( regex.test(string4) ); // false

其可视化形式是:

注意里面的 \1,表示的引用之前的那个分组 (-|\/|\.)。不管它匹配到什么(比如 -),\1 都匹配那个同样的具体某个字符

我们知道了 \1 的含义后,那么 \2\3 的概念也就理解了,即分别指代第二个和第三个分组

看到这里,此时,恐怕你会有几个问题

3.1 括号嵌套怎么办?

以左括号(开括号)为准。比如:

var regex = /^((\d)(\d(\d)))\1\2\3\4$/;
var string = "1231231233";
console.log( regex.test(string) ); // true
console.log( RegExp.$1 ); // 123
console.log( RegExp.$2 ); // 1
console.log( RegExp.$3 ); // 23
console.log( RegExp.$4 ); // 3

我们可以看看这个正则匹配模式:

  • 第一个字符是数字,比如说 "1"
  • 第二个字符是数字,比如说 "2"
  • 第三个字符是数字,比如说 "3"
  • 接下来的是 \1,是第一个分组内容,那么看第一个开括号对应的分组是什么,是 "123"
  • 接下来的是 \2,找到第2个开括号,对应的分组,匹配的内容是 "1"
  • 接下来的是 \3,找到第3个开括号,对应的分组,匹配的内容是 "23"
  • 最后的是 \4,找到第4个开括号,对应的分组,匹配的内容是 "3

此正则的可视化形式是:

3.2 \10 表示什么呢?

另外一个疑问可能是,即 \10 是表示第 10 个分组,还是 \1 和 0 呢?

答案是前者,虽然一个正则里出现 \10 比较罕见。测试如下:

var regex = /(1)(2)(3)(4)(5)(6)(7)(8)(9)(#) \10+/;
var string = "123456789# ######"
console.log( regex.test(string) );
// => true

如果真要匹配 \1 和 0 的话,请使用 (?:\1)0 或者 \1(?:0)

3.3 引用不存在的分组会怎样?

因为反向引用,是引用前面的分组,但我们在正则里引用了不存在的分组时,此时正则不会报错,只是匹配反向引用的字符本身。例如 \2,就匹配 "\2"。注意 "\2" 表示对 "2" 进行了转义

var regex = /\1\2\3\4\5\6\7\8\9/;
console.log( regex.test("\1\2\3\4\5\6\7\8\9") );
console.log( "\1\2\3\4\5\6\7\8\9".split("") );

Chrome 浏览器打印的结果(不同的浏览器和版本,打印的结果可能不一样):

3.4 分组后面有量词会怎样?

分组后面有量词的话,分组最终捕获到的数据是最后一次的匹配。比如如下的测试案例:

var regex = /(\d)+/;
var string = "12345";
console.log( string.match(regex) );
// => ["12345", "5", index: 0, input: "12345"]

从上面看出,分组(\d) 捕获的数据是 "5"。

同理对于反向引用,也是这样的。测试如下:

var regex = /(\d)+ \1/;
console.log( regex.test("12345 1") );
// => false
console.log( regex.test("12345 5") );
// => true

4. 非捕获括号

之前文中出现的括号,都会捕获它们匹配到的数据,以便后续引用,因此也称它们是捕获型分组和捕获型分
支。

如果只想要括号最原始的功能,但不会引用它,即,既不在 API里引用,也不在正则里反向引用。

此时可以使用非捕获括号 (?:p)(?:p1|p2|p3),例如本章第一个例子可以修改为:

var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) );
// => ["abab", "ab", "ababab"]

同理,第二例子可以修改为:

var regex = /^I love (?:JavaScript|Regular Expression)$/;
console.log( regex.test("I love JavaScript") );
console.log( regex.test("I love Regular Expression") );
// => true
// => true

5. 相关案例

5.1 字符串 trim方法模拟

trim方法是去掉字符串的开头和结尾的空白符。有两种思路去做。

第一种,匹配到开头和结尾的空白符,然后替换成空字符。如:

function trim(str) {
  return str.replace(/^\s+|\s+$/g, '');
}
console.log( trim(" foobar ") );
// => "foobar"

第二种,匹配整个字符串,然后用引用来提取出相应的数据:

function trim (str) {
  return str.replace(/^\s*(.*?)\s*$/g, "$1");
}
console.log( trim(" foobar ") );
// => "foobar"

这里使用了惰性匹配 *?,不然也会匹配最后一个空格之前的所有空格的

当然,前者效率高

5.2 将每个单词的首字母转换为大写

function titleize (str) {
  return str.toLowerCase().replace(/(?:^|\s)\w/g, function (c) {
    return c.toUpperCase();
  });
}
console.log( titleize('my name is epeli') );
// => "My Name Is Epeli"

思路是找到每个单词的首字母,当然这里不使用非捕获匹配也是可以的

5.3 驼峰化

function camelize (str) {
  return str.replace(/[-_\s]+(.)?/g, function (match, c) {
    return c ? c.toUpperCase() : '';
  });
}
console.log( camelize('-moz-transform') );
// => "MozTransform"

其中分组 (.) 表示首字母。单词的界定是,前面的字符可以是多个连字符、下划线以及空白符。正则后面
? 的目的,是为了应对 str尾部的字符可能不是单词字符,比如 str 是 '-moz-transform '

5.4 中划线化

function dasherize(str) {
  return str.replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase();
}
console.log(dasherize('MozTransform'));
// => "-moz-transform"

驼峰化的逆过程

5.5 HTML转义和反转义

// 将HTML特殊字符转换成等值的实体
function escapeHTML(str) {
  var escapeChars = {
    '<': 'lt',
    '>': 'gt',
    '"': 'quot',
    '&': 'amp',
    '\'': '#39'
  };

  return str.replace(new RegExp('[' + Object.keys(escapeChars).join('') + ']', 'g'),
    function (match) {
      return '&' + escapeChars[match] + ';';
    });
}

console.log(escapeHTML('
Blah blah blah
')); // => "<div>Blah blah blah</div>";

其中使用了用构造函数生成的正则,然后替换相应的格式就行了,这个跟本章没多大关系。

倒是它的逆过程,使用了括号,以便提供引用,也很简单,如下

// 实体字符转换为等值的HTML。
function unescapeHTML(str) {
  var htmlEntities = {
    nbsp: ' ',
    lt: '<',
    gt: '>',
    quot: '"',
    amp: '&',
    apos: '\''
  };

  return str.replace(/\&([^;]+);/g, function (match, key) {
    if (key in htmlEntities) {
      return htmlEntities[key];
    }
    return match;
  });
}

console.log(unescapeHTML('<div>Blah blah blah</div>'));
// => "
Blah blah blah

通过 key 获取相应的分组引用,然后作为对象的键。

5.6 匹配成对标签

要求匹配:

regular expression

laoyao bye bye

不匹配:wrong!</p></code></p> <p>匹配一个开标签,可以使用正则 <code><[^>]+></code>,</p> <p>匹配一个闭标签,可以使用 <code><\/[^>]+></code>,</p> <p>但是要求匹配成对标签,那就需要使用反向引用,如:</p> <pre><code class="js">var regex = /<([^>]+)>[\d\D]*<\/\1>/; var string1 = "<title>regular expression"; var string2 = "

laoyao bye bye

"; var string3 = "wrong!</p>"; console.log( regex.test(string1) ); // true console.log( regex.test(string2) ); // true console.log( regex.test(string3) ); // false </code></pre> <p>其中开标签 <code><[\^>]+></code> 改成 <code><([^>]+)></code>,使用括号的目的是为了后面使用反向引用,</p> <p>而提供分组。闭标签使用了反向引用,<code><\/\1></code>。</p> <p>另外,<code>[\d\D]</code>的意思是,这个字符是数字或者不是数字,因此,也就是匹配任意字符的意思。</p> </article> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1708980408927989760"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(正则表达式括号的作用)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1946930916278464512.htm" title="小架构step系列18:工具" target="_blank">小架构step系列18:工具</a> <span class="text-muted">秋千码途</span> <a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>1概述在写代码的时候,有很多通用的、与业务无关逻辑,这些一般写成工具类方法。这些工具类方法慢慢地被积累起来,变成了开源包,可以直接使用开源包,而不是自己再花时间来重复造这些轮子。这些工具类的开源包比较多,公司如果没有控制的话,不同的开发人员就会选自己熟悉的开源包,甚至都拿来练练手。这样的后果就是,在一个工程内使用了五花八门的工具类包,维护代码的时候不好维护,如果要升级一些框架包或者扫描漏洞,发现很</div> </li> <li><a href="/article/1946930591857438720.htm" title="亲子“163”" target="_blank">亲子“163”</a> <span class="text-muted">064022e79fd6</span> <div>厦门路小学二七班刘松林奶奶2020.12.8.星期二,晴宝贝的日记宝贝在锻炼强身健体坚持锻炼身体好!农历十月二十四,星期二,晴人有佛心诸善集;家无俗累一身轻。今天,是轻松的一天,早晨是老头送宝贝上的学,晚上,是老头接的宝贝。本想这几天去厂子上几天班,挣点过年买衣服钱,唉!可祸不单行,我的胳膊烫伤感染了……也不知道那天能好,看来今年的新衣服又泡汤了,无语啊!</div> </li> <li><a href="/article/1946930084535398400.htm" title="“过度教育”的最大伤害,是导致生命退化和人类文明风险增加(邱建生)" target="_blank">“过度教育”的最大伤害,是导致生命退化和人类文明风险增加(邱建生)</a> <span class="text-muted">書成的時光</span> <div>过度教育侵蚀民族未来过度教育,或者更准确一点说,过度的知识教育,抑制了孩子的生命成长,背离了教育的初衷。我们常常形容一个人做事“太过了”“走过头了”“太聪明了”,结果就事与愿违。其实,我们这个时代,也可以说是“走过头了”,一切都处在“过度”状态中而前景堪忧。比如,过度的生产,过度的消费,过度的欲望,过度的经济,过度的发展,过度的教育......其中最让人痛心的是过度教育,因为它直接伤害的是孩子,是</div> </li> <li><a href="/article/1946930085852409856.htm" title="帕金森的预防方法" target="_blank">帕金森的预防方法</a> <span class="text-muted">李白爱吃醋</span> <div>如何预防帕金森??1、防治脑动脉硬化是预防帕金森病的根本措施。重视老年病(高血压、高血脂、高血糖、脑动脉硬化等)的防治,增强体质,延缓衰老,预防动脉粥样硬化,对预防帕金森病起到积极作用。2、远离有毒物质:避免接触有毒化学品,如杀虫剂、除草剂、杀虫剂等。避免或减少接触对人体神经系统有毒的物质,如一氧化碳、二氧化碳、锰、汞等。汽车尾气中含有大量的一氧化碳、二硫化碳、氰化物等有毒气体,可杀死细胞,避免精</div> </li> <li><a href="/article/1946930034874839040.htm" title="经典动态规划" target="_blank">经典动态规划</a> <span class="text-muted"></span> <div>最长上升子序列](https://www.luogu.com.cn/problem/B3637)题目描述这是一个简单的动规板子题。给出一个由n(n≤5000)n(n≤5000)n(n≤5000)个不超过10610^6106的正整数组成的序列。请输出这个序列的最长上升子序列的长度。最长上升子序列是指,从原序列中按顺序取出一些数字排在一起,这些数字是逐渐增大的。输入格式第一行,一个整数n,表示序列长度</div> </li> <li><a href="/article/1946929957477347328.htm" title="掉牙齿" target="_blank">掉牙齿</a> <span class="text-muted">cfa62c677342</span> <div>早上起床时,我发现那颗松动的牙齿更松了。我想把它摇掉,可是左摇右摇,牙齿就是不掉。唉!怎么办呢?这颗揺摇欲坠的牙齿让我感觉很难受。晚饭前,我忍不住又去晃动它,晃了几下,啊,终于掉了!妈妈把我的这颗严齿洗干净,收起来了。</div> </li> <li><a href="/article/1946929782801362944.htm" title="【web-攻击用户】(9.1.6)查找并利用XSS漏洞--基于DOM" target="_blank">【web-攻击用户】(9.1.6)查找并利用XSS漏洞--基于DOM</a> <span class="text-muted">黑色地带(崛起)</span> <a class="tag" taget="_blank" href="/search/0X02%E3%80%90web%E6%B8%97%E9%80%8F%E3%80%91/1.htm">0X02【web渗透】</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a> <div>目录查找并利用基于DOM的XSS漏洞1.1、简介:1.2、过程:查找并利用基于DOM的XSS漏洞1.1、简介:1、提交一个特殊的字符串作为每个参数,然后监控响应中是否出现该字符串,无法确定基于DOM的XSS漏洞2、确定基于DOM的XSS漏洞的基本方法是,用浏览器手动浏览应用程序,并修改每一个URL参数,在其中插入一个标准测试字符串(如alert(1)和;alert(1)//等)3、通过在浏览器中显</div> </li> <li><a href="/article/1946929703185084416.htm" title="录像与录像装置的区别" target="_blank">录像与录像装置的区别</a> <span class="text-muted">3_a228</span> <div>录像是用光学、电磁等方法把图像记录下来,也指记录下来的图像录像设备。录像装置是指供记录电视图像及伴音,能存储电视节目视频信号,并且过后可把它们重新送到电视发射机或直接送到电视机中的磁带记录器。分磁性录像机、电视屏幕录像机和电子束录像机等类型。《大卫》1.录像装置(videoinstallation)是20世纪晚期艺术的一个多元界面。它糅合了艺术与科技、私人空间与公共场所、主观视觉与机器的非透明表面</div> </li> <li><a href="/article/1946929573484621824.htm" title="中科院上海巴斯德研究所研究生奖助学金补助" target="_blank">中科院上海巴斯德研究所研究生奖助学金补助</a> <span class="text-muted">智从教育</span> <div>中国科学院上海巴斯德研究所(以下简称研究所)成立于2004年10月11日,是中国科学院直属事业单位。研究所聚焦病原微生物基本生命活动规律、重大感染性疾病的致病机制等关键科学问题,以病原发现、病原与宿主互作及应对技术为着力点,着力推动病原学、免疫学和疫苗学等学科创新与发展,为传染病防控提供科技支撑和解决方案。研究所设有中科院分子病毒与免疫重点实验室,微生物、发育与健康研究中心等学术单元,现有研究组3</div> </li> <li><a href="/article/1946929574797438976.htm" title="2022-06-10" target="_blank">2022-06-10</a> <span class="text-muted">陆水手</span> <div>又一周过去了。周五只加了俩小时班,因为还有周末时间可以加班。没啥想写的,累。最近每天都是下班的地铁上写日志,状态都是累,所以很容易有种丧的感觉。其实只是晚上累而已。白天还好。今天处理了一大堆事儿。充实。过分的充实。周一晚上加班后又拼积木,周二早上就盼着休息。现在果然休息了。早上没找到衬衫,白天有点冷。我抱怨趣趣不收拾家务。同时还指责她经常怪罪我。有点双标。明后天好好调整一下状态。希望能安心加班5小</div> </li> <li><a href="/article/1946929530568503296.htm" title="SpringBoot整合Swagger2快速指南" target="_blank">SpringBoot整合Swagger2快速指南</a> <span class="text-muted">Cyanto</span> <a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Swagger简介Swagger是一款强大的API文档生成工具,它能够自动为RESTfulAPI生成可视化文档,支持在线测试接口,极大提高了前后端协作效率。本文将详细介绍如何在SpringBoot项目中整合Swagger2。环境准备版本要求重要提示:SpringBoot版本不能过高,推荐使用2.5.6版本:org.springframework.bootspring-boot-starter-pa</div> </li> <li><a href="/article/1946929312150122496.htm" title="也谈巴黎圣母院" target="_blank">也谈巴黎圣母院</a> <span class="text-muted">大尾巴狼牙</span> <div>巴黎圣母院被一场大火烧毁许多珍贵的文物,世人都很惋惜。许多网络言论充斥着,我认真想想这件事,也感慨我们中国的网民太有意思了。世界级的文物被烧毁,我们发声没有错,不知一些人为什么总要做出一些很出格的言论。伟大的民族之所以称之为伟大,并不是因为我们一直活在过去,活在狭隘的历史民粹主义中。我们的苦难并不是要求所有的人都一起承担,一起做出哀悼的样子。我们的国家发展的非常快,国民的素质却没有一起快速发展,最</div> </li> <li><a href="/article/1946929059216814080.htm" title="《狐狸开汽车》读后感" target="_blank">《狐狸开汽车》读后感</a> <span class="text-muted">觅音少女</span> <div>这故事讲了:一个猎人开了一辆小汽车到海边的树林里去打猎桥,一只狐狸正从树丛里露出脑袋,猎人停下车带着枪去打狐狸了。咦,这是什么东西呀?小松鼠看见小汽车觉得真奇怪,瞧他黑黑的硬壳,大大的眼睛,四条腿却是圆圆的。小松鼠跳下树来,慢慢的走到小汽车旁边,敲敲他,他不想推推它,它不动往里面一看这东西肚子里空空的可大着呢。小松鼠一下跳到小汽车里去玩起了方向盘嘟,小松鼠碰到喇叭喇叭就起来了,小松叔吓了一大跳,赶</div> </li> <li><a href="/article/1946928929524740096.htm" title="2022-03-13" target="_blank">2022-03-13</a> <span class="text-muted">是大珊呐</span> <div>本周七年级刚从基地回来,发了一下寒假冬奥会主题的奖状,不管是手抄报行式的还是直接画冬奥会吉祥物的作品都十分的用心,展板呈现的效果也比较好,看来以后的教学还是以提高学生的兴趣为主,让学生画自己想画的才能激发出学生的潜力。九年级按部就班讲了一下这次期末考试的试题分析了一下绘画需要注意的点,可能是元旦疫情来的太突然,学生整个疫情和寒假期间学习太过懒惰美术考试成绩十分不理想,其他科目更不理想,提高学生的主</div> </li> <li><a href="/article/1946928930787225600.htm" title="电影《你好,李焕英》观后感" target="_blank">电影《你好,李焕英》观后感</a> <span class="text-muted">星月阳_edac</span> <div>2021的开场,我和闺蜜看了今年比较火的两部电影,而且是在一天之内。先说说后看的这一场电影吧--《你好,李焕英》。这部电影是由喜剧演员贾玲所导演,根据自己的亲身经历指导了这部电影。这部电影讲述的是女主的妈妈在一次车祸中受伤,因此穿越了母亲年轻的时代—1981年,正好与母亲撞个正着,女主没想到的是此时的年轻母亲却也是从未来而来。之后的剧情更多的是喜剧内容,不同的演员上场,给观众带来了更多的乐趣,但是</div> </li> <li><a href="/article/1946928932112625664.htm" title="《漫长的告白》带你感受不一样的秋季" target="_blank">《漫长的告白》带你感受不一样的秋季</a> <span class="text-muted">安静视觉</span> <div>度过了炎热的夏天,来到了凉爽的秋天。第一杯奶茶已经喝过了吧?现在让你感受下一份迟到20年的告白,让你又有一样的秋季。观看路径:安徽移动互联网电视-推荐页《漫长的告白》是由张律执导,倪妮、张鲁一、辛柏青领衔出演,池松壮亮、中野良子、新音特别出演的极致美学爱情电影。该片讲述了少年时代的立冬曾爱慕过一位叫阿川的女子,在历经近20年的深情等待,俩人再次相遇。这份深藏心中的爱,也在这场远赴“她”乡的逐爱中愈</div> </li> <li><a href="/article/1946928928266448896.htm" title="组件分享之后端组件——基于Java的分布式系统的延迟和容错组件(熔断组件)Hystrix" target="_blank">组件分享之后端组件——基于Java的分布式系统的延迟和容错组件(熔断组件)Hystrix</a> <span class="text-muted">cn華少</span> <div>组件分享之后端组件——基于Java的分布式系统的延迟和容错组件(熔断组件)Hystrix背景近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。组件基本信息组件:Hystrix开源协议:LICENSE内容本节我们分享一个基于Java的分布式系统的延迟和容错组件(熔断组件)Hystr</div> </li> <li><a href="/article/1946928801225175040.htm" title="当代短篇小说选:《清风店》(七)" target="_blank">当代短篇小说选:《清风店》(七)</a> <span class="text-muted">闲读与苦读</span> <div>别说读书苦,那是你看世界的路——每年冬季照例的整风整社开始了。因为清风店不是重点村,上头没有派工作组来。事情偏这么凑巧,借用段顺的话:就好像鬼使神差。恰在整风之前,常四起到县委党校去学习。“天下大事”便有了另外的演变:在给清风店领导提意见的时候,段顺和老曹克星没想到群众对常四起的工作竟也指出不少缺点。自然,有的意见,老曹克星当众解释一下,便不存在了。常言说的好,人被感情统治的时候,理智便退避三舍了</div> </li> <li><a href="/article/1946928674108403712.htm" title="今年过年特别想打麻将" target="_blank">今年过年特别想打麻将</a> <span class="text-muted">我是兰霭</span> <div>学会麻将那年是在我小学毕业那年的暑假。没有暑假作业了,在姥姥家玩了个痛快。有天晚上,姥姥姥爷教会了我打麻将,当天晚上,就因为新手的运气,抓了一条龙和了。那个暑假经常在姥姥家客厅打麻将。住在对面楼里的小伙伴从她家就能看到我们家灯光下的牌桌。第二天见到,她总会说,昨晚上你们家又打麻将了吧?我很喜欢打麻将,觉得比打扑克牌有意思。扑克牌起手就抓完,无论牌好牌差,只能尽力打好自己现有的牌。而麻将,其实更像生</div> </li> <li><a href="/article/1946928649231986688.htm" title="Java并发集合 - CopyOnWriteArrayList详解" target="_blank">Java并发集合 - CopyOnWriteArrayList详解</a> <span class="text-muted">--土拨鼠--</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.什么是CopyOnWriteArrayList?CopyOnWriteArrayList是java.util.concurrent包中提供的一个线程安全的ArrayList。它通过一种称为“写时复制”(Copy-On-Write)的方法来实现线程安全。简而言之,每当我们尝试修改这个列表(如添加、删除元素)时,它实际上并不直接在当前的列表上进行修改,而是先将当前列表复制一份,然后在这个副本上进行</div> </li> <li><a href="/article/1946928040978214912.htm" title="海滨诗歌原创《画梦》系列2" target="_blank">海滨诗歌原创《画梦》系列2</a> <span class="text-muted">海滨公园</span> <div>海滨诗歌原创《画梦》系列2海滨诗歌原创《画梦》系列2作者:安居士/海滨海滨诗歌原创《画梦》系列2第2号拥有一份真爱多么不易如一滴晨露似一颗流星不经意之间蒸发陨落消逝徒留一份凄美哀婉的记忆海滨诗歌原创《画梦》系列2迷途的羔羊唤不回过去渴望死后再生疯狂爱一次找不回幻影在梦里寻觅孤单寂寞徘徊在旷野里海滨诗歌原创《画梦》系列2只要心还在绝不会停止寻找充满柔情蜜意的小径蓦然回首处我狂奔嘶鸣像一匹天马找回昨日</div> </li> <li><a href="/article/1946928042303614976.htm" title="街机三国哪个平台充值有返利? 街机三国哪个平台内部福利多折扣最高?" target="_blank">街机三国哪个平台充值有返利? 街机三国哪个平台内部福利多折扣最高?</a> <span class="text-muted">会飞滴鱼儿</span> <div>标题:街机三国哪个平台充值有返利?街机三国哪个平台内部福利多折扣最高?今天我告诉大家一个可以申请内部号的平台,直接比返利号牛逼10倍不止,最近几年出现了特别多的手游平台。每个平台的福利的各不相同,但是本质是一样的,就给点礼包,首充什么的。感觉毫无卵用。就在上个月,经一个做游戏行业的朋友介绍,了解到了一个平台“游人特权站”,特别NB。这个平台给的是内部号,什么是内部号?说白了就是托号。进服就会给30</div> </li> <li><a href="/article/1946928018609991680.htm" title="【常见分布及其特征(3)】离散型随机变量-二项分布" target="_blank">【常见分布及其特征(3)】离散型随机变量-二项分布</a> <span class="text-muted">TomcatLikeYou</span> <a class="tag" taget="_blank" href="/search/%E5%B8%B8%E8%A7%81%E5%88%86%E5%B8%83%E5%8F%8A%E5%85%B6%E7%89%B9%E5%BE%81/1.htm">常见分布及其特征</a><a class="tag" taget="_blank" href="/search/%E6%A6%82%E7%8E%87%E8%AE%BA/1.htm">概率论</a> <div>二项分布应用场景实例一面不均匀的硬币,抛出为正面的概率是0.8;连续抛出12次,问出现5次正面的概率是多少?一般的,出现0,1,2,⋯ ,120,1,2,\cdots,120,1,2,⋯,12次正面的概率分别是多少?辨析注意,对于本例,每一次抛出,单独拿出来,可以认为服从伯努利分布;此例执行了12次,注意注意,伯努利分布的样本空间为{正,反}\{正,反\}{正,反},而此例的样本空间为出现正面的次</div> </li> <li><a href="/article/1946927892294332416.htm" title="vue2和vue3 实现数据双向绑定的原理详解,vue2和vue3 组件传值详解,vue2和vue3的生命周周期中都进行了什么事情详解?" target="_blank">vue2和vue3 实现数据双向绑定的原理详解,vue2和vue3 组件传值详解,vue2和vue3的生命周周期中都进行了什么事情详解?</a> <span class="text-muted"></span> <div>大白话vue2和vue3实现数据双向绑定的原理详解,vue2和vue3组件传值详解,vue2和vue3的生命周周期中都进行了什么事情详解引言你盯着屏幕上的vue项目,眉头紧锁。测试发来消息:“在vue3项目里用v-model绑定表单,输入框输入内容,页面居然没反应?”你心里咯噔一下,这不是刚从vue2迁移过来吗?怎么连双向绑定都出问题了。再一看,子组件接收父组件的值用的还是props,可数据就是传</div> </li> <li><a href="/article/1946927788103626752.htm" title="传统孝道文化:爱护自己的身心,孝的开始。“身体发肤,受之父母,不敢毁伤,孝之始也。《行孝:孝敬的十二种方式暨新时代孝道》余源鹏 孝敬父母 孝经 什么是孝道故事 中国中华传统孝道文化 二十四孝故事..." target="_blank">传统孝道文化:爱护自己的身心,孝的开始。“身体发肤,受之父母,不敢毁伤,孝之始也。《行孝:孝敬的十二种方式暨新时代孝道》余源鹏 孝敬父母 孝经 什么是孝道故事 中国中华传统孝道文化 二十四孝故事...</a> <span class="text-muted">余源鹏</span> <div>《孝经》“开宗明义”章节里引述孔子的话说道:“身体发肤,受之父母,不敢毁伤,孝之始也。”就是说人身体的每一根毛发和每一块皮肤,都是父母给予的,应当谨慎爱护,不能主观毁伤,这是实行孝道的开始。这里孔子讲人的身体是父母给予的,主要说的是母亲在怀孕和生小孩时的付出。但孔子只说了一小部分。人的身体的生长,更大部分是小孩出生后,养育小孩时照看小孩的安全以及喂养小孩使其成长的。家长付出了大量的精神、体力,并消</div> </li> <li><a href="/article/1946927409353781248.htm" title="2023-03-28" target="_blank">2023-03-28</a> <span class="text-muted">仁德上人</span> <div>所有的事情都要有一个主事做决定拿主意的人文/仁德上人在一切的事情之中,一定会有一个说了算,为了事情拿主意、做决定的人。其他的人都是在事情决定之后落实做事,把已经决定拍板后要做的事情落实做好。无论大事小事都是这样一个过程,不可能没有一个拿主意,没有一个决定,大家一起乱来的事情。一个团队、一个集体必须要有当家做主拿主意的领导者,这个领导者就决定了这个团队的命运,这个集体、这个团队的成败,就决定在这一个</div> </li> <li><a href="/article/1946927408032575488.htm" title="2021-8-7晨间日记" target="_blank">2021-8-7晨间日记</a> <span class="text-muted">宋会兵</span> <div>今天是什么日子起床:7:15就寝:天气:晴好心情:纪念日:任务清单昨日完成的任务,最重要的三件事:改进:习惯养成:昨天会长和老陆下棋下了几盘,又和小鲁下了两盘,小鲁中午过来已经和老陆下了半天,老陆晚饭后小鲁还要下,这小鲁是越下越精神,越下越能磨。周目标·完成进度学习·信息·阅读健康·饮食·锻炼人际·家人·朋友工作·思考最美好的三件事1.2.3.思考·创意·未来</div> </li> <li><a href="/article/1946927277052850176.htm" title="已走啦" target="_blank">已走啦</a> <span class="text-muted">絕望的內心聲音</span> <div>是已把當初的承諾都忘記把我獨自丟在風雨裡,是已層給我多少幸福和甜蜜如今只剩下了回憶,是已讓我堅持用心依賴已,說今生我們不會分離,是已層信誓旦旦說永遠在一起如今已转身就離去。已走啦我不會忘了已,已走啦不用說對不起,已走啦雖然捨不得已已走吧留下沒有意义,已走啦時間會帶我把已忘記不在乎已將要去哪裡,我願意~獨自承受~這孤寂图片发自App</div> </li> <li><a href="/article/1946927279577821184.htm" title="和呈睿新闻 | 电视剧《三十而已》、《二十不惑》热播,主角商标却无一注册?" target="_blank">和呈睿新闻 | 电视剧《三十而已》、《二十不惑》热播,主角商标却无一注册?</a> <span class="text-muted">初晴_5e72</span> <div>最近,电视剧《二十不惑》、《三十而已》同时上映,当90后的大龄女青年遇上00后的青春女孩,两部剧的主角们同框飚戏,让人着实惊喜了一把。《二十不惑》讲述的是一群即将毕业的大学生在进入社会之前所经历的一些事情,有人说,这其中的一些经历简直就是自己的过往经历的真实写照,展现了青春的迷茫和对未来的期许。《三十而已》则主要讲述的是一群刚步入婚姻和家庭的年轻女性的所感、所悟,他们不但要面对事业,还要同时面对家</div> </li> <li><a href="/article/1946927261999493120.htm" title="Java并发编程----ThreadLocal详解" target="_blank">Java并发编程----ThreadLocal详解</a> <span class="text-muted"></span> <div>ThreadLocal是什么首先,它是一个数据结构,有点像HashMap,可以保存"key:value"键值对,但是一个ThreadLocal只能保存一个,并且各个线程的数据互不干扰。ThreadLocal用于保存某个线程共享变量:对于同一个staticThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量,在高并发场景下,可以实现无状态的调用,特</div> </li> <li><a href="/article/41.htm" title="html页面js获取参数值" target="_blank">html页面js获取参数值</a> <span class="text-muted">0624chenhong</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a> <div>1.js获取参数值js function GetQueryString(name) {      var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");      var r = windo</div> </li> <li><a href="/article/168.htm" title="MongoDB 在多线程高并发下的问题" target="_blank">MongoDB 在多线程高并发下的问题</a> <span class="text-muted">BigCat2013</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/DB/1.htm">DB</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%B9%B6%E5%8F%91/1.htm">高并发</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E5%A4%8D%E6%95%B0%E6%8D%AE/1.htm">重复数据</a> <div>最近项目用到 MongoDB , 主要是一些读取数据及改状态位的操作. 因为是结合了最近流行的 Storm进行大数据的分析处理,并将分析结果插入Vertica数据库,所以在多线程高并发的情境下, 会发现 Vertica 数据库中有部分重复的数据. 这到底是什么原因导致的呢?笔者开始也是一筹莫 展,重复去看 MongoDB 的 API , 终于有了新发现 : com.mongodb.DB 这个类有</div> </li> <li><a href="/article/295.htm" title="c++ 用类模版实现链表(c++语言程序设计第四版示例代码)" target="_blank">c++ 用类模版实现链表(c++语言程序设计第四版示例代码)</a> <span class="text-muted">CrazyMizzz</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a> <div>#include<iostream> #include<cassert> using namespace std; template<class T> class Node { private: Node<T> * next; public: T data; </div> </li> <li><a href="/article/422.htm" title="最近情况" target="_blank">最近情况</a> <span class="text-muted">麦田的设计者</span> <a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%85%A8/1.htm">感慨</a><a class="tag" taget="_blank" href="/search/%E8%80%83%E8%AF%95/1.htm">考试</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a> <div>   在五月黄梅天的岁月里,一年两次的软考又要开始了。到目前为止,我已经考了多达三次的软考,最后的结果就是通过了初级考试(程序员)。人啊,就是不满足,考了初级就希望考中级,于是,这学期我就报考了中级,明天就要考试。感觉机会不大,期待奇迹发生吧。这个学期忙于练车,写项目,反正最后是一团糟。后天还要考试科目二。这个星期真的是很艰难的一周,希望能快点度过。   </div> </li> <li><a href="/article/549.htm" title="linux系统中用pkill踢出在线登录用户" target="_blank">linux系统中用pkill踢出在线登录用户</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍所以需要有时踢出指定的用户 1/#who   查出当前有那些终端登录(用 w 命令更详细) # who root     pts/0        2010-10-28 09:36 (192</div> </li> <li><a href="/article/676.htm" title="仿QQ聊天第二版" target="_blank">仿QQ聊天第二版</a> <span class="text-muted">肆无忌惮_</span> <a class="tag" taget="_blank" href="/search/qq/1.htm">qq</a> <div>在第一版之上的改进内容:  第一版链接: http://479001499.iteye.com/admin/blogs/2100893   用map存起来号码对应的聊天窗口对象,解决私聊的时候所有消息发到一个窗口的问题. 增加ViewInfo类,这个是信息预览的窗口,如果是自己的信息,则可以进行编辑.   信息修改后上传至服务器再告诉所有用户,自己的窗口</div> </li> <li><a href="/article/803.htm" title="java读取配置文件" target="_blank">java读取配置文件</a> <span class="text-muted">知了ing</span> <div>1,java读取.properties配置文件 InputStream in; try { in = test.class.getClassLoader().getResourceAsStream("config/ipnetOracle.properties");//配置文件的路径 Properties p = new Properties()</div> </li> <li><a href="/article/930.htm" title="__attribute__ 你知多少?" target="_blank">__attribute__ 你知多少?</a> <span class="text-muted">矮蛋蛋</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/gcc/1.htm">gcc</a> <div>原文地址: http://www.cnblogs.com/astwish/p/3460618.html GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。 __attribute__ 书写特征是:</div> </li> <li><a href="/article/1057.htm" title="jsoup使用笔记" target="_blank">jsoup使用笔记</a> <span class="text-muted">alleni123</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/JSoup/1.htm">JSoup</a> <div><dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.7.3</version> </dependency> 2014/08/28 今天遇到这种形式, </div> </li> <li><a href="/article/1184.htm" title="JAVA中的集合 Collectio 和Map的简单使用及方法" target="_blank">JAVA中的集合 Collectio 和Map的简单使用及方法</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/map/1.htm">map</a><a class="tag" taget="_blank" href="/search/set/1.htm">set</a> <div>         List ,set ,map的使用方法和区别 java容器类类库的用途是保存对象,并将其分为两个概念:     Collection集合:一个独立的序列,这些序列都服从一条或多条规则;List必须按顺序保存元素  ,set不能重复元素;Queue按照排队规则来确定对象产生的顺序(通常与他们被插入的</div> </li> <li><a href="/article/1311.htm" title="杀LINUX的JOB进程" target="_blank">杀LINUX的JOB进程</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a> <div>今天发现数据库一个JOB一直在执行,都执行了好几个小时还在执行,所以想办法给删除掉   系统环境:    ORACLE 10G    Linux操作系统   操作步骤如下: 第一步.查询出来那个job在运行,找个对应的SID字段 select * from dba_jobs_running--找到job对应的sid &n</div> </li> <li><a href="/article/1438.htm" title="Spring AOP详解" target="_blank">Spring AOP详解</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a> <div>        最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决。一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习Spring AOP相关的内容。例如,以下需求不用AOP肯定也能解决,至于是否牵强附会,仁者见仁智者见智。 1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用</div> </li> <li><a href="/article/1565.htm" title="[Gson六]Gson类型适配器(TypeAdapter)" target="_blank">[Gson六]Gson类型适配器(TypeAdapter)</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Adapter/1.htm">Adapter</a> <div>TypeAdapter的使用动机  Gson在序列化和反序列化时,默认情况下,是按照POJO类的字段属性名和JSON串键进行一一映射匹配,然后把JSON串的键对应的值转换成POJO相同字段对应的值,反之亦然,在这个过程中有一个JSON串Key对应的Value和对象之间如何转换(序列化/反序列化)的问题。   以Date为例,在序列化和反序列化时,Gson默认使用java.</div> </li> <li><a href="/article/1692.htm" title="【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行" target="_blank">【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/driver/1.htm">driver</a> <div>Driver Program是用户编写的提交给Spark集群执行的application,它包含两部分 作为驱动: Driver与Master、Worker协作完成application进程的启动、DAG划分、计算任务封装、计算任务分发到各个计算节点(Worker)、计算资源的分配等。 计算逻辑本身,当计算任务在Worker执行时,执行计算逻辑完成application的计算任务 </div> </li> <li><a href="/article/1819.htm" title="nginx 经验总结" target="_blank">nginx 经验总结</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+%E6%80%BB%E7%BB%93/1.htm">nginx 总结</a> <div>   深感nginx的强大,只学了皮毛,把学下的记录。    获取Header 信息,一般是以$http_XX(XX是小写)            获取body,通过接口,再展开,根据K取V    获取uri,以$arg_XX      &n</div> </li> <li><a href="/article/1946.htm" title="轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点" target="_blank">轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a> <div> import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ExoWeb { public static void main(String[] args) { ExoWeb ew=new ExoWeb(); System.out.pri</div> </li> <li><a href="/article/2073.htm" title="Netty源码学习-Java-NIO-Reactor" target="_blank">Netty源码学习-Java-NIO-Reactor</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a> <div>Netty里面采用了NIO-based Reactor Pattern 了解这个模式对学习Netty非常有帮助 参考以下两篇文章: http://jeewanthad.blogspot.com/2013/02/reactor-pattern-explained-part-1.html http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf </div> </li> <li><a href="/article/2200.htm" title="AOP通俗理解" target="_blank">AOP通俗理解</a> <span class="text-muted">cngolon</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a> <div>1.我所知道的aop     初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等。一下子让你不知所措,心想着:怪不得很多人都和 我说aop多难多难。当我看进去以后,我才发现:它就是一些java基础上的朴实无华的应用,包括ioc,包括许许多多这样的名词,都是万变不离其宗而 已。 2.为什么用aop&nb</div> </li> <li><a href="/article/2327.htm" title="cursor variable 实例" target="_blank">cursor variable 实例</a> <span class="text-muted">ctrain</span> <a class="tag" taget="_blank" href="/search/variable/1.htm">variable</a> <div> create or replace procedure proc_test01 as type emp_row is record( empno emp.empno%type, ename emp.ename%type, job emp.job%type, mgr emp.mgr%type, hiberdate emp.hiredate%type, sal emp.sal%t</div> </li> <li><a href="/article/2454.htm" title="shell报bash: service: command not found解决方法" target="_blank">shell报bash: service: command not found解决方法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/jps/1.htm">jps</a> <div>今天在执行一个脚本时,本来是想在脚本中启动hdfs和hive等程序,可以在执行到service hive-server start等启动服务的命令时会报错,最终解决方法记录一下:   脚本报错如下: ./olap_quick_intall.sh: line 57: service: command not found ./olap_quick_intall.sh: line 59</div> </li> <li><a href="/article/2581.htm" title="40个迹象表明你还是PHP菜鸟" target="_blank">40个迹象表明你还是PHP菜鸟</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/oop/1.htm">oop</a> <div>你是PHP菜鸟,如果你:1. 不会利用如phpDoc 这样的工具来恰当地注释你的代码2. 对优秀的集成开发环境如Zend Studio 或Eclipse PDT 视而不见3. 从未用过任何形式的版本控制系统,如Subclipse4. 不采用某种编码与命名标准 ,以及通用约定,不能在项目开发周期里贯彻落实5. 不使用统一开发方式6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函</div> </li> <li><a href="/article/2708.htm" title="Android逐帧动画的实现" target="_blank">Android逐帧动画的实现</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>一、代码实现: private ImageView iv; private AnimationDrawable ad; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout</div> </li> <li><a href="/article/2835.htm" title="java远程调用linux的命令或者脚本" target="_blank">java远程调用linux的命令或者脚本</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ganymed-ssh2/1.htm">ganymed-ssh2</a> <div>转载请出自出处: http://eksliang.iteye.com/blog/2105862        Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)   使用步骤如下: 1.导包 官网下载: http://www.ganymed.ethz.ch/ssh2/ ma</div> </li> <li><a href="/article/2962.htm" title="adb端口被占用问题" target="_blank">adb端口被占用问题</a> <span class="text-muted">gqdy365</span> <a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a> <div>最近重新安装的电脑,配置了新环境,老是出现: adb server is out of date. killing... ADB server didn't ACK * failed to start daemon * 百度了一下,说是端口被占用,我开个eclipse,然后打开cmd,就提示这个,很烦人。 一个比较彻底的解决办法就是修改</div> </li> <li><a href="/article/3089.htm" title="ASP.NET使用FileUpload上传文件" target="_blank">ASP.NET使用FileUpload上传文件</a> <span class="text-muted">hvt</span> <a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/webform/1.htm">webform</a> <div>前台代码: <asp:FileUpload ID="fuKeleyi" runat="server" /> <asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" /></div> </li> <li><a href="/article/3216.htm" title="代码之谜(四)- 浮点数(从惊讶到思考)" target="_blank">代码之谜(四)- 浮点数(从惊讶到思考)</a> <span class="text-muted">justjavac</span> <a class="tag" taget="_blank" href="/search/%E6%B5%AE%E7%82%B9%E6%95%B0/1.htm">浮点数</a><a class="tag" taget="_blank" href="/search/%E7%B2%BE%E5%BA%A6/1.htm">精度</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E4%B9%8B%E8%B0%9C/1.htm">代码之谜</a><a class="tag" taget="_blank" href="/search/IEEE/1.htm">IEEE</a> <div>在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。 单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试 记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为了一名很出色的</div> </li> <li><a href="/article/3343.htm" title="数据结构随记_1" target="_blank">数据结构随记_1</a> <span class="text-muted">lx.asymmetric</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>第一章   1.数据结构包括数据的 逻辑结构、数据的物理/存储结构和数据的逻辑关系这三个方面的内容。 2.数据的存储结构可用四种基本的存储方法表示,它们分别是 顺序存储、链式存储 、索引存储 和 散列存储。 3.数据运算最常用的有五种,分别是  查找/检索、排序、插入、删除、修改。 4.算法主要有以下五个特性:  输入、输出、可行性、确定性和有穷性。 5.算法分析的</div> </li> <li><a href="/article/3470.htm" title="linux的会话和进程组" target="_blank">linux的会话和进程组</a> <span class="text-muted">网络接口</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>会话: 一个或多个进程组。起于用户登录,终止于用户退出。此期间所有进程都属于这个会话期。会话首进程:调用setsid创建会话的进程1.规定组长进程不能调用setsid,因为调用setsid后,调用进程会成为新的进程组的组长进程.如何保证? 先调用fork,然后终止父进程,此时由于子进程的进程组ID为父进程的进程组ID,而子进程的ID是重新分配的,所以保证子进程不会是进程组长,从而子进程可以调用se</div> </li> <li><a href="/article/3597.htm" title="二维数组 元素的连续求解" target="_blank">二维数组 元素的连续求解</a> <span class="text-muted">1140566087</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/ACM/1.htm">ACM</a> <div>import java.util.HashMap; public class Title { public static void main(String[] args){ f(); } // 二位数组的应用 //12、二维数组中,哪一行或哪一列的连续存放的0的个数最多,是几个0。注意,是“连续”。 public static void f(){ </div> </li> <li><a href="/article/3724.htm" title="也谈什么时候Java比C++快" target="_blank">也谈什么时候Java比C++快</a> <span class="text-muted">windshome</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a> <div>  刚打开iteye就看到这个标题“Java什么时候比C++快”,觉得很好笑。   你要比,就比同等水平的基础上的相比,笨蛋写得C代码和C++代码,去和高手写的Java代码比效率,有什么意义呢?   我是写密码算法的,深刻知道算法C和C++实现和Java实现之间的效率差,甚至也比对过C代码和汇编代码的效率差,计算机是个死的东西,再怎么优化,Java也就是和C</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>