正则表达式括号的作用

本文摘抄自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/1902505047216943104.htm" title="Hessian 矩阵是什么" target="_blank">Hessian 矩阵是什么</a> <span class="text-muted">ZhangJiQun&MXP</span> <a class="tag" taget="_blank" href="/search/%E6%95%99%E5%AD%A6/1.htm">教学</a><a class="tag" taget="_blank" href="/search/2021/1.htm">2021</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/2024%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BB%A5%E5%8F%8A%E7%AE%97%E5%8A%9B/1.htm">2024大模型以及算力</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>Hessian矩阵是什么目录Hessian矩阵是什么Hessian矩阵的性质及举例说明**1.对称性****2.正定性决定极值类型****特征值为2(正),因此原点(0,0)(0,0)(0,0)是极小值点。****3.牛顿法中的应用****4.特征值与曲率方向****5.机器学习中的实际意义**一、定义与公式二、实例分析Hessian矩阵是多元函数二阶偏导数构成的方阵,用于分析函数局部曲率、判断极</div> </li> <li><a href="/article/1902504920934838272.htm" title="LoRA中黑塞矩阵、Fisher信息矩阵是什么" target="_blank">LoRA中黑塞矩阵、Fisher信息矩阵是什么</a> <span class="text-muted">ZhangJiQun&MXP</span> <a class="tag" taget="_blank" href="/search/%E6%95%99%E5%AD%A6/1.htm">教学</a><a class="tag" taget="_blank" href="/search/2021/1.htm">2021</a><a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87/1.htm">论文</a><a class="tag" taget="_blank" href="/search/2024%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BB%A5%E5%8F%8A%E7%AE%97%E5%8A%9B/1.htm">2024大模型以及算力</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/transformer/1.htm">transformer</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a> <div>LoRA中黑塞矩阵、Fisher信息矩阵是什么1.三者的核心概念黑塞矩阵(Hessian)二阶导数矩阵,用于优化问题中判断函数的凸性(如牛顿法),或计算参数更新方向(如拟牛顿法)。Fisher信息矩阵(FisherInformationMatrix,FIM)统计学中衡量参数估计的不确定性,反映数据中包含的关于参数的信息量。在机器学习中常用于自然梯度下降(NaturalGradientDescent</div> </li> <li><a href="/article/1902504794585624576.htm" title="神经网络基础之正则化" target="_blank">神经网络基础之正则化</a> <span class="text-muted">硬水果糖</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>引言:正则化(Regularization)是机器学习中一种用于防止模型过拟合技术。核心思想是通过在模型损失函数中添加一个惩罚项(PenaltyTerm),对模型的复杂度进行约束,从而提升模型在新数据上的泛化能力。一、正则化目的防止过拟合:当模型过于复杂(例如神经网络层数过多、参数过多)时,容易在训练数据上“记忆”噪声或细节,导致在测试数据上表现差。简化模型:正则化通过限制模型参数的大小或数量,迫</div> </li> <li><a href="/article/1902504415974191104.htm" title="DApp开发需要多少钱?全面解析DApp开发成本" target="_blank">DApp开发需要多少钱?全面解析DApp开发成本</a> <span class="text-muted">Lovely_xwys</span> <a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE%E5%BC%80%E5%8F%91/1.htm">区块链开发</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/web3/1.htm">web3</a> <div>随着区块链技术的不断发展和普及,去中心化应用(DApp)逐渐成为金融科技领域的新宠。DApp以其去中心化、透明性和安全性等特点,吸引了众多开发者和投资者的关注。然而,对于想要涉足DApp开发的人来说,最关心的问题之一就是:DApp开发需要多少钱?本文将从多个角度全面解析DApp的开发成本。一、DApp开发成本概述DApp的开发成本并非一成不变,它受到多种因素的影响,包括项目的复杂度、功能需求、技术</div> </li> <li><a href="/article/1902504163389009920.htm" title="pipost 如何提升团队协作效率 [特殊字符]" target="_blank">pipost 如何提升团队协作效率 [特殊字符]</a> <span class="text-muted">Kairo_01</span> <a class="tag" taget="_blank" href="/search/postman/1.htm">postman</a> <div>开发团队中的沟通障碍在许多开发团队中,前端工程师、后端工程师和QA测试人员之间的同步往往会浪费大量时间。不断的会议和对齐会话减慢了整个过程,严重影响了生产力。以下是一些常见的痛点:前端和后端团队需要不断对API接口进行同步。测试人员必须反复确认API行为。产品经理必须确保每个人都对项目需求达成一致。这些沟通障碍导致开发周期延长、团队士气下降和项目发布推迟。通过Apipost提高协作效率1.精简的A</div> </li> <li><a href="/article/1902503407877419008.htm" title="【阿里百炼大模型-使用】" target="_blank">【阿里百炼大模型-使用】</a> <span class="text-muted">y_dd</span> <a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>参照阿里云百炼网址服务配置开通服务如果没有注册阿里云账号,先注册一个https://www.aliyun.com/?spm=5176.account-console-pc.console-base_top-nav.dlogo.10d24bab70FmIm,注册完毕用它登录阿里云百炼,然后开通服务(即使是免费的开元模型也需要开通)获取API-key在账户这里选择API-KEY,进入这个页面,创建一个</div> </li> <li><a href="/article/1902503029752524800.htm" title="21.11 《ChatGLM3-6B+Gradio工业级落地:多模态交互+60%性能优化,手把手实现生产部署》" target="_blank">21.11 《ChatGLM3-6B+Gradio工业级落地:多模态交互+60%性能优化,手把手实现生产部署》</a> <span class="text-muted">少林码僧</span> <a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%AE%9E%E6%88%98%E4%B8%93%E6%A0%8F/1.htm">AI大模型应用实战专栏</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/gpt/1.htm">gpt</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/%E4%BA%A4%E4%BA%92/1.htm">交互</a> <div>《ChatGLM3-6B+Gradio工业级落地:多模态交互+60%性能优化,手把手实现生产部署》关键词:ChatGLM3-6B应用开发,Gradio界面集成,模型交互优化,Web服务容器化,多模态输入支持使用Gradio赋能ChatGLM3-6B图形化界面通过Gradio实现大模型服务的可视化交互,是生产级AI应用落地的关键环节。本节将深入解析如何构建适配ChatGLM3-6B的工业级交互界面。</div> </li> <li><a href="/article/1902502651820568576.htm" title="Cookies 详解:工作原理、使用方法及安全性" target="_blank">Cookies 详解:工作原理、使用方法及安全性</a> <span class="text-muted">才华是浅浅的耐心</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>1.什么是Cookie?Cookie是存储在用户浏览器中的小型文本数据,通常用于保存用户会话信息、个性化设置以及跨页面的数据共享。它是Web服务器与客户端浏览器之间的一种状态管理机制,常用于爬虫的会话凭证。查看方式:打开网站-登录-打开开发正工具-点击网络-刷新-点击一个包-查看表头(有的需要禁用缓存才能看见)2.Cookie的作用会话管理:如用户登录状态的保持。个性化设置:存储用户偏好,如主题、</div> </li> <li><a href="/article/1902502525429411840.htm" title="小红书app复制链接转换为直接可访问链接,网页版链接,小红书短链转长链(最新版)" target="_blank">小红书app复制链接转换为直接可访问链接,网页版链接,小红书短链转长链(最新版)</a> <span class="text-muted">才华是浅浅的耐心</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>简介:小红书手机app分享的链接需要点击才能获取完成链接,本文教大家如何通过代码的方式将xhs的短连接转化为长链接。1.正常我们分享的链接是这样的:44小猪吃宵夜发布了一篇小红书笔记,快来看吧!KeA1GIGiSMXGWy7http://xhslink.com/a/sT7omKb6ijX6,复制本条信息,打开【小红书】App查看精彩内容!转换后是这样的:https://www.xiaohongsh</div> </li> <li><a href="/article/1902502273368518656.htm" title="推特关键词爬虫Python实现最新版(2025.2.20)" target="_blank">推特关键词爬虫Python实现最新版(2025.2.20)</a> <span class="text-muted">才华是浅浅的耐心</span> <a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>引言随着各类自媒体平台的兴起,数据挖掘和分析变得尤为重要。推特作为全球最大的自媒体平台,越来越来越多的人需要通过爬取其内容进行分析。然后自从马斯克接手推特之后,推特api不可再用,推特的反爬力度也在逐渐增强。今天小编就分享一个推特爬虫的教程。描述这篇文章主要通过关键词爬取帖子内容信息以及帖子作者主页相关信息,用户也可根据自己需要的时间段进行筛选。推特可支持筛选多种语言,我这里先展示中文和英文的。字</div> </li> <li><a href="/article/1902502020196134912.htm" title="事务隔离性如何保证?" target="_blank">事务隔离性如何保证?</a> <span class="text-muted">努力向前ing</span> <a class="tag" taget="_blank" href="/search/MySQL%E5%85%AB%E8%82%A1%E8%AF%A6%E7%A9%B6/1.htm">MySQL八股详究</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a> <div>事务隔离性如何保证?1.通过锁2.通过MVCC(事务隔离级别无锁的实现方式,用于提高事务的性能)不加锁性能肯定比加锁要高。如何通过MVCC实现事务隔离性?什么是MVCC?MVCC多版本并发控制。通过维护多版本的数据,以不加锁的方式实现事务的隔离性,本质上是CAS操作,是一种乐观锁的思想。MVCC实现事务隔离级别的流程:关键概念:1.隐藏字段:DB_TRX_ID:事务id,roll_pointer:</div> </li> <li><a href="/article/1902502021093715968.htm" title="undo log ,redo log 和binlog的区别?" target="_blank">undo log ,redo log 和binlog的区别?</a> <span class="text-muted">努力向前ing</span> <a class="tag" taget="_blank" href="/search/MySQL%E5%85%AB%E8%82%A1%E8%AF%A6%E7%A9%B6/1.htm">MySQL八股详究</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/log/1.htm">log</a> <div>一.MySQL如何保证事务的一致性?两阶段锁:prepare阶段:1.写入redolog(prepare)2.通知server准备写入binlogcommit阶段:1.写入binlog2.提交redolog二.有了binlog为什么还要记录redolog?binlog和redolog虽然都是为了数据安全与恢复准备的,但是他们的侧重点和功能有所不同,binlog记录的是SQL语句,属于逻辑日志,可以</div> </li> <li><a href="/article/1902501390433972224.htm" title="一文带你看懂URL地址加”/“和不加的区别" target="_blank">一文带你看懂URL地址加”/“和不加的区别</a> <span class="text-muted">高山仰止、景行行止</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>基础概念小科普URL,全称统一资源定位符,它就像互联网上资源的“身份证”,不管是网页、图片,还是各种API接口,都能靠它精准定位。打个比方,URL就是你在互联网这个超级大商场里找店铺的门牌号。这里还有个小知识:以“/”结尾的URL,就像一个敞开大门的大仓库,通常表示目录,比如https://example.com/folder/;不带“/”的URL呢,更像是仓库里的一件具体商品,通常指向具体的资源</div> </li> <li><a href="/article/1902501264109924352.htm" title="TDE透明加密技术:免改造实现华为云ECS中数据库和文件加密存储" target="_blank">TDE透明加密技术:免改造实现华为云ECS中数据库和文件加密存储</a> <span class="text-muted">安 当 加 密</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>在数字经济与云计算深度融合的今天,华为云ECS(弹性云服务器)已成为企业数字化转型的核心载体,承载着数据库、文件存储、AI训练等关键业务。然而,云上数据安全形势日益严峻:2024年全球云环境勒索攻击同比激增210%,密钥泄露、权限失控、合规失效成为企业上云的三大痛点。作为国内数据安全领域的领军者,上海安当推出的TDE透明加密技术,以“存储层无感加密、密钥全生命周期管理、动态防勒索”为核心,为华为云</div> </li> <li><a href="/article/1902500633559232512.htm" title="纳米尺度仿真软件:Quantum Espresso_(21).并行计算与性能优化" target="_blank">纳米尺度仿真软件:Quantum Espresso_(21).并行计算与性能优化</a> <span class="text-muted">kkchenjj</span> <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%AD%90%E5%8A%A8%E5%8A%9B%E5%AD%A62/1.htm">分子动力学2</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F%E4%BB%BF%E7%9C%9F/1.htm">模拟仿真</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%AD%90%E5%8A%A8%E5%8A%9B%E5%AD%A6/1.htm">分子动力学</a><a class="tag" taget="_blank" href="/search/%E4%BB%BF%E7%9C%9F%E6%A8%A1%E6%8B%9F/1.htm">仿真模拟</a> <div>并行计算与性能优化在纳米尺度仿真中,计算资源的需求往往非常庞大。为了提高计算效率和缩短计算时间,并行计算和性能优化成为不可或缺的技术手段。QuantumEspresso作为一个开源的量子力学仿真软件,提供了多种并行计算的机制和性能优化的方法。本节将详细介绍如何在QuantumEspresso中实现并行计算和性能优化,以提升仿真任务的效率。并行计算的基本概念并行计算是指同时使用多个计算资源(如多核处</div> </li> <li><a href="/article/1902500507159687168.htm" title="纳米尺度仿真软件:Quantum Espresso_(19).输运性质计算" target="_blank">纳米尺度仿真软件:Quantum Espresso_(19).输运性质计算</a> <span class="text-muted">kkchenjj</span> <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%AD%90%E5%8A%A8%E5%8A%9B%E5%AD%A62/1.htm">分子动力学2</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F%E4%BB%BF%E7%9C%9F/1.htm">模拟仿真</a><a class="tag" taget="_blank" href="/search/%E4%BB%BF%E7%9C%9F%E6%A8%A1%E6%8B%9F/1.htm">仿真模拟</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%AD%90%E5%8A%A8%E5%8A%9B%E5%AD%A6/1.htm">分子动力学</a> <div>输运性质计算在纳米尺度仿真软件中,输运性质计算是研究材料和器件中电荷和热能输运的重要工具。QuantumEspresso提供了多种方法来计算输运性质,包括使用非平衡格林函数(NEGF)和传输矩阵方法(TMM)。本节将详细介绍如何使用QuantumEspresso及其相关模块进行输运性质的计算,包括设置计算参数、运行模拟以及分析结果。1.非平衡格林函数(NEGF)方法1.1.原理非平衡格林函数(NE</div> </li> <li><a href="/article/1902499499805306880.htm" title="现代前端开发框架对比:React、Vue 和 Svelte 的选择指南" target="_blank">现代前端开发框架对比:React、Vue 和 Svelte 的选择指南</a> <span class="text-muted">zhyoobo</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>引言在当今快速发展的Web开发领域,前端框架的选择往往直接影响项目的开发效率、维护成本和用户体验。React、Vue和Svelte作为当前最受关注的三大框架,各自拥有独特的设计哲学与技术实现。本文将通过5000字的深度解析,从架构设计、开发体验、性能特征到生态系统四个维度进行全方位对比,并针对不同场景提供选型决策框架。无论您是初创团队的技术负责人,还是正在构建企业级应用的架构师,都能在此找到面向2</div> </li> <li><a href="/article/1902499246268018688.htm" title="使用CRACO自定义 Webpack 配置" target="_blank">使用CRACO自定义 Webpack 配置</a> <span class="text-muted">黄毛火烧雪下</span> <a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>1、为什么要用CRACO?默认情况下,CRA的Webpack配置是隐藏的,如果你需要修改Webpack,比如:✅CDN配置✅配置alias(路径别名)✅修改Less/Sass变量✅添加Babel插件✅优化Webpack构建(如SplitChunks、CDN加载)✅支持TailwindCSS✅移动端适配启用PostCSS+px转rem如果不用CRACO,你必须运行yarneject/npmrunej</div> </li> <li><a href="/article/1902498994211319808.htm" title="DeepSeek智能政务大脑:城市服务知识库构建全指南——从RAG架构到民生场景落地实践" target="_blank">DeepSeek智能政务大脑:城市服务知识库构建全指南——从RAG架构到民生场景落地实践</a> <span class="text-muted">Coderabo</span> <a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8/1.htm">R1模型企业级应用</a><a class="tag" taget="_blank" href="/search/%E6%94%BF%E5%8A%A1/1.htm">政务</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>DeepSeek赋能城市智慧升级:基于RAG架构的市民服务智能知识库构建全解一、需求分析与技术选型1.1市民服务场景需求市民服务智能知识库需要解决政务咨询效率低下、专业术语难理解、多轮对话能力弱等核心问题。系统需具备:自然语言理解能力(NLU)异构知识整合能力政策法规精准解读能力多轮对话上下文管理应急服务联动机制1.2DeepSeek技术栈选择基于DeepSeek-Large语言模型构建核心系统,</div> </li> <li><a href="/article/1902498992852365312.htm" title="JVM八股文系列一:JVM基础知识" target="_blank">JVM八股文系列一:JVM基础知识</a> <span class="text-muted">suikasa</span> <a class="tag" taget="_blank" href="/search/JVM%E5%85%AB%E8%82%A1%E6%96%87/1.htm">JVM八股文</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a> <div>一.JVM基础知识1.JVM从编译到执行1.1Java程序的执行过程一个Java程序,首先经过javac编译成.class文件,然后JVM将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM作为.class文件的翻译存在,输入字节码,调用操作系统函数。过程如下:Java文件->编译器>字节码->JVM->机器码。JVM也就是Java虚拟机。它能识别.class后</div> </li> <li><a href="/article/1902498993687031808.htm" title="uniapp的 安卓app 定位权限被拒绝后,询问是否开启授权并跳转到手机设置页面" target="_blank">uniapp的 安卓app 定位权限被拒绝后,询问是否开启授权并跳转到手机设置页面</a> <span class="text-muted">绣****</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%9F%BA%E7%A1%80/1.htm">前端基础</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a> <div>uniapp的安卓app定位权限被拒绝后,询问是否开启授权并跳转到手机设置页面询问是否授权定位->拒绝定位授权->再次访问提示是否打开授权->跳转至手机设置页面uni.getLocation({type:'gcj02',success:res=>{this.latitude=res.latitudethis.longitude=res.longitude},fail:error=>{console</div> </li> <li><a href="/article/1902498612739371008.htm" title="Fastdfs-V5.11使用docker部署集群(X86)" target="_blank">Fastdfs-V5.11使用docker部署集群(X86)</a> <span class="text-muted">礁之</span> <a class="tag" taget="_blank" href="/search/Linux%E7%B3%BB%E5%88%97/1.htm">Linux系列</a><a class="tag" taget="_blank" href="/search/dfs/1.htm">dfs</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a> <div>文章目录一、Fastdfs介绍二、部署信息三、步骤tracker/storage机器的compose内容storage机器的composetracker与storage启动目录层级与配置文件client.confstorage.conf查看集群信息测试测试集群扩容与缩减nginx配置一、Fastdfs介绍FastDFS是一款高性能的分布式文件系统,特别适合用于存储和管理大量的文件二、部署信息使用d</div> </li> <li><a href="/article/1902498614823940096.htm" title="基于Python拉取tiktok直播视频流,并将视频流切割成一定时长的视频片段" target="_blank">基于Python拉取tiktok直播视频流,并将视频流切割成一定时长的视频片段</a> <span class="text-muted">sh_moranliunian</span> <a class="tag" taget="_blank" href="/search/%E8%9C%98%E8%9B%9B%E4%BE%A0/1.htm">蜘蛛侠</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a> <div>通过访问tiktok的直播间网页,从网页的script标签内部提取出关于该直播间的相关信息的JSON串,最终从JSON里提取出直播视频流的hls地址和直播间的其他信息。importsysimportrequestsimportjsonimporttimeimportsubprocessfromurllib.parseimporturlunparsefrombs4importBeautifulSou</div> </li> <li><a href="/article/1902497602121822208.htm" title="高级java每日一道面试题-2025年3月03日-微服务篇[Eureka篇]-Eureka自我保护机制是什么?" target="_blank">高级java每日一道面试题-2025年3月03日-微服务篇[Eureka篇]-Eureka自我保护机制是什么?</a> <span class="text-muted">java我跟你拼了</span> <a class="tag" taget="_blank" href="/search/java%E6%AF%8F%E6%97%A5%E4%B8%80%E9%81%93%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">java每日一道面试题</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/eureka/1.htm">eureka</a><a class="tag" taget="_blank" href="/search/SpringCloud/1.htm">SpringCloud</a><a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E6%88%91%E4%BF%9D%E6%8A%A4%E6%9C%BA%E5%88%B6/1.htm">自我保护机制</a><a class="tag" taget="_blank" href="/search/%E5%87%BA%E5%8F%91%E6%9D%A1%E4%BB%B6/1.htm">出发条件</a> <div>如果有遗漏,评论区告诉我进行补充面试官:Eureka自我保护机制是什么?我回答:在Java高级面试中,Eureka的自我保护机制(Self-PreservationMode)是一个非常重要且常被提及的话题。理解这一机制的工作原理及其应用场景对于构建高可用性的微服务架构至关重要。以下是结合提供的内容对Eureka自我保护机制的详细解析和综合概述:自我保护机制的概念Eureka的自我保护机制是一种容错</div> </li> <li><a href="/article/1902497605456293888.htm" title="uniapp中使用webview并与原页面通信" target="_blank">uniapp中使用webview并与原页面通信</a> <span class="text-muted">数学分析分析什么?</span> <a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a> <div>uniapp中使用webview并与原页面通信1.接收数据主要使用@message与@onPostMessage接收原页面数据,且两个方法只能在APP中使用,其他平台均不支持。/***接收页面返回参数*@param{Object}item*/htmlMessage(item){console.log('收到的消息',item)letdata=item.detail...},2.发送数据(调用原页面</div> </li> <li><a href="/article/1902497224248586240.htm" title="JVM技术八股文" target="_blank">JVM技术八股文</a> <span class="text-muted">小麟School</span> <a class="tag" taget="_blank" href="/search/JVM/1.htm">JVM</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</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>JVM面试八股文,整理了出来。排版不太好!目录JVM入门部分为什么要学习JVM?你了解哪些JVM产品?JVM的构成有哪几部分?JVM类加载部分你知道哪些类加载器?为什么需要多个类加载器?什么是双亲委派类加载模型?双亲委派方式加载类有什么优势、劣势?描述一下类加载时候的基本步骤是怎样的?什么情况下会触发类的加载?类加载时静态代码块一定会执行吗?如何理解类的主动加载和被动加载?为什么要自己定义类加载器</div> </li> <li><a href="/article/1902496972112195584.htm" title="`fetch` 和 `axios`的前端使用区别" target="_blank">`fetch` 和 `axios`的前端使用区别</a> <span class="text-muted">Studying_swz</span> <a class="tag" taget="_blank" href="/search/blog/1.htm">blog</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>欢迎访问的个人博客:https://swzbk.site/,加好友,拉你入福利群fetch和axios`是前端常用的两种HTTP客户端,以下是它们的核心区别及适用场景:一、本质区别特性fetchaxios类型浏览器原生API(部分环境需polyfill)第三方库(需通过npm/yarn安装)底层实现基于Promise基于Promise,封装了XMLHttpRequest二、核心功能对比1.请求与响</div> </li> <li><a href="/article/1902496843942653952.htm" title="如何轻松爬取 TikTok 评论?手把手教你高效采集数据!" target="_blank">如何轻松爬取 TikTok 评论?手把手教你高效采集数据!</a> <span class="text-muted">pzhyy</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AE%B9%E8%BF%90%E8%90%A5/1.htm">内容运营</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E5%AA%92%E4%BD%93%E8%BF%90%E8%90%A5/1.htm">新媒体运营</a> <div>引言随着TikTok的全球火爆,越来越多的数据分析师、营销人员和研究人员希望获取TikTok视频评论,以分析用户反馈、市场趋势或热门内容。然而,手动整理TikTok评论既耗时又低效,因此,使用一款高效的TikTok采集器成为刚需。Tapicker是一款功能强大的TikTok采集软件,可以帮助用户自动爬取TikTok评论,省去繁琐的手工整理工作。本文将详细介绍如何使用Tapicker爬取TikTok</div> </li> <li><a href="/article/1902496845624569856.htm" title="thinkphp5模型查询数据库,查出来的字段直接修改成另外的名字" target="_blank">thinkphp5模型查询数据库,查出来的字段直接修改成另外的名字</a> <span class="text-muted">知码客</span> <a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E9%9A%8F%E7%AC%94/1.htm">个人随笔</a><a class="tag" taget="_blank" href="/search/thinkphp5/1.htm">thinkphp5</a><a class="tag" taget="_blank" href="/search/php%E5%BC%80%E5%8F%91/1.htm">php开发</a> <div>在ThinkPHP5中,如果你希望在查询数据库时将返回的字段名直接修改为其他名称,可以通过以下几种方式实现:方法1:使用field方法指定字段别名在查询时通过field方法直接为字段指定别名(使用AS关键字)。示例代码://使用Db类查询$result=Db::name('user')->field('idASuser_id,nameASfull_name')->select();//使用模型查询</div> </li> <li><a href="/article/1902496717601828864.htm" title="史上最全JVM面试八股文合集" target="_blank">史上最全JVM面试八股文合集</a> <span class="text-muted">Java小海.</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>简述JVM内存模型线程私有的运行时数据区:程序计数器、Java虚拟机栈、本地方法栈。线程共享的运行时数据区:Java堆、方法区。简述程序计数器程序计数器表示当前线程所执行的字节码的行号指示器。程序计数器不会产生StackOverflowError和OutOfMemoryError。简述虚拟机栈Java虚拟机栈用来描述Java方法执行的内存模型。线程创建时就会分配一个栈空间,线程结束后栈空间被回收。</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>