jQuery 源码分析 选择器

声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢!

 打开jQuery源码,一眼看去到处都充斥着正则表达式,jQuery框架的基础就是查询了,查询文档元素对象,所以狭隘的说呢,jQuery就是一个选择器,并这个基础上构建和运行查询过滤器!

工欲善其事,必先利其器,所以先从正则入手

我们来分解一个表达式

// A simple way to check for HTML strings
// Prioritize #id over  to avoid XSS via location.hash (#9521)
// Strict HTML recognition (#11290: must start with <)
     rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

作者的解释呢很简单,一个简单的检测HTML字符串的表达式

分解:

  1. 通过选择|分割二义,匹配^开头或者$结尾
    ^(?:\s*(<[\w\W]+>)[^>]*
    #([\w-]*))$

2. ^(?:\s*(<[\w\W]+>)[^>]*
(?:pattern) : 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用
\s* : 匹配任何空白字符,包括空格、制表符、换页符等等 零次或多次 等价于{0,}
(pattern) : 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,使用 $0…$9 属性
[\w\W]+ : 匹配于'[A-Za-z0-9_]'或[^A-Za-z0-9_]' 一次或多次, 等价{1,}
(<[wW]+>) :这个表示字符串里要包含用<>包含的字符,例如

,

等等都是符合要求的 [^>]* : 负值字符集合,字符串尾部是除了>的任意字符或者没有字符,零次或多次等价于{0,},
  1. ([\w-]*))$

    匹配结尾带上#号的任意字符,包括下划线与-

  2. 还要穿插一下exec方法

    如果执行exec方法的正则表达式没有分组(没有括号括起来的内容),那么如果有匹配,他将返回一个只有一个元素的数组,这个数组唯一的元素就是该正则表达式匹配的第一个串;如果没有匹配则返回null。
    exec如果找到了匹配,而且包含分组的话,返回的数组将包含多个元素,第一个元素是找到的匹配,之后的元素依次为该匹配中的第一、第二…个分组(反向引用)

所以综合起来呢大概的意思就是:匹配HTML标记和ID表达式(<前面可以匹配任何空白字符,包括空格、制表符、换页符等等)

简单测试下:

var str = ' 
'
; var match = rquickExpr.exec(str); console.log(match) //["
"
, "
"
, undefined, index: 0, input: "
"
] var str = '[?\f\n\r\t\v]
'
; var str = '#test'; var match = rquickExpr.exec(str); console.log(match) //["#test", undefined, "test", index: 0, input: "#test"]

jQuery选择器接口

API

image

jQuery是总入口,选择器支持9种方式的处理

1.$(document)   
2.$(‘
’) 3.$(‘div’) 4.$(‘#test’) 5.$(function(){}) 6.$("input:radio", document.forms[0]); 7.$(‘input’, $(‘div’)) 8.$() 9.$("
", { "class": "test", text: "Click me!", click: function(){ $(this).toggleClass("test"); } }).appendTo("body"); 10$($(‘.test’))

jQuery这个选择器重构了几次后,现在逻辑结构相当的清晰了,一看大概就知道

不能不得说jQuery的反模式,非职责单一深受开发者喜欢,一个接口承载的职责越多内部处理就越复杂了

jQuery查询的的对象是dom元素,查询到目标元素后,如何存储?

查询的到结果储存到jQuery对象内部,由于查询的dom可能是单一元素,也可能是合集
jQuery内部应该要定义一个合集数组,用于存在选择后的dom元素,
当然啦,根据API,jQuery构建的不仅仅只是DOM元素,还有HTML字符串,Object,[] 等等…

本质上讲jQuery.fn.init构建的出来的对象,就是jQuery对象

init: function( selector, context, rootjQuery ) {
            var match, elem;

            // HANDLE: $(""), $(null), $(undefined), $(false)
            if ( !selector ) {
                return this;
            }

            // Handle HTML strings
            if ( typeof selector === "string" ) {
                // HANDLE: $(DOMElement)
            } else if ( selector.nodeType ) {
                // HANDLE: $(function)
                // Shortcut for document ready
            } else if ( jQuery.isFunction( selector ) ) {
                return rootjQuery.ready( selector );
            }

            if ( selector.selector !== undefined ) {
                this.selector = selector.selector;
                this.context = selector.context;
            }

            return jQuery.makeArray( selector, this );
        },

源码缩进后的结构:

处理"",null,undefined,false,返回this ,增加程序的健壮性
处理字符串
处理DOMElement,返回修改过后的this,给this添加了
处理$(function(){})

匹配模式一:$(“#id”)

  1. 进入字符串处理
if ( typeof selector === "string" ) {
  1. 发现不是 “<”开始,”>”结尾 $(‘

    My new text

    ‘)这种的情况

    如果selector是html标签组成的话,直接match = [ null, selector, null ];

    而不用正则检查

if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) {
  1. 否则的话需要match = rquickExpr.exec( selector )
match = rquickExpr.exec( selector );
  1. 匹配的html或确保没有上下文指定为# id
if ( match && (match[1] || !context) ) {
  1. match[1]存在,处理(html)−>(array),,也就是处理的是html方式
if ( match[1] ) {
  1. 处理ID
elem = document.getElementById( match[2] );

// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if ( elem && elem.parentNode ) {
    // Inject the element directly into the jQuery object
    this.length = 1;
    this[0] = elem;
}

this.context = document;
this.selector = selector;
return this;

至此本次检索完毕!

可以看到

this就是jQuery工厂化后返回的对象

    this.length    
    this[0] = elem
    this.context = document;
    this.selector = selector;

image

匹配模式二:

重复的地方跳过直接看处理接口

if ( match && (match[1] || !context) ) {
    // HANDLE: $(html) -> $(array)
    if ( match[1] ) {
        context = context instanceof jQuery ? context[0] : context;
        // scripts is true for back-compat
        jQuery.merge( this, jQuery.parseHTML(
            match[1],
            context && context.nodeType ? context.ownerDocument || context : document,
            true
        ) );
        // HANDLE: $(html, props)
        if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
            for ( match in context ) {
                // Properties of context are called as methods if possible
                if ( jQuery.isFunction( this[ match ] ) ) {
                    this[ match ]( context[ match ] );
                    // ...and otherwise set as attributes
                } else {
                    this.attr( match, context[ match ] );
                }
            }
        }
        return this;
        // HANDLE: $(#id)
    } else {

传入上下文:

context && context.nodeType ? context.ownerDocument || context : document

ownerDocument和 documentElement的区别

ownerDocument是Node对象的一个属性,返回的是某个元素的根节点文档对象:即document对象
documentElement是Document对象的属性,返回的是文档根节点
对于HTML文档来说,documentElement是标签对应的Element对象,ownerDocument是document对象

具体请看API手册

jQuery.merge( first, second ) 合并两个数组内容到第一个数组。

jQuery.parseHTML

使用原生的DOM元素的创建函数将字符串转换为一组DOM元素,然后,可以插入到文档中。

str = "hello, my name is jQuery.",
html = $.parseHTML( str ),

image

源码:

parseHTML: function( data, context, keepScripts ) {
    if ( !data || typeof data !== "string" ) {
        return null;
    }
    if ( typeof context === "boolean" ) {
        keepScripts = context;
        context = false;
    }
    context = context || document;
    var parsed = rsingleTag.exec( data ),
        scripts = !keepScripts && [];
    // Single tag
    if ( parsed ) {
        return [ context.createElement( parsed[1] ) ];
    }
    parsed = jQuery.buildFragment( [ data ], context, scripts );
    if ( scripts ) {
        jQuery( scripts ).remove();
    }
    return jQuery.merge( [], parsed.childNodes );
},

匹配一个独立的标签

rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,

^<(\w+)\s*\/?>  : 以<开头,至少跟着一个字符和任意个空白字符,之后出现0或1次/>
(?:<\/\1>|)$        : 可以匹配<、一个/或者空白并以之为结尾

  这样如果没有任何属性和子节点的字符串(比如''或者'
'这样)会通过正则的匹配,当通过正则的匹配后则会通过传入的上下文直接创建一个节点:

只是单一的标签:


if ( parsed ) {
        return [ context.createElement( parsed[1] ) ];


 }

而未通过节点的字符串,则通过创建一个div节点,将字符串置入div的innerHTML:

parsed = jQuery.buildFragment( [ data ], context, scripts );

它会把传入的复杂的html转为文档碎片并且存储在jQuery.fragments这个对象里。这里要提一下,document.createDocumentFragment()是相当好用的,可以减少对dom的操作.

创建一个文档碎片DocumentFragment

如果要插入多个DOM元素,可以先将这些DOM元素插入一个文档碎片,然后将文档碎片插入文档中,这时插入的不是文档碎片,而是它的子孙节点;相比于挨个插入DOM元素,使用文档碎片可以获得2-3倍的性能提升;
如果将重复的HTML代码转换为DOM元素,可以将转换后的DOM元素缓存起来,下次(实际是第3次)转换同样的HTML代码时,可以直接缓存的DOM元素克隆返

当一个HTML比一个没有属性的简单标签复杂的时候,实际上,创建元素的处理是利用了浏览器的innerHTML 机制。

1 tmp = tmp || fragment.appendChild( context.createElement("div") );
2 
3 // Deserialize a standard representation
4 tag = ( rtagName.exec( elem ) || ["", ""] )[ 1 ].toLowerCase();
5 wrap = wrapMap[ tag ] || wrapMap._default;
6 tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[ 2 ];
特别说明,jQuery创建一个新的
元素,并且设置innerHTML属性为传入的HTML代码片段。当参数是一个单标签,就像 $('') or $(''),jQuery将使用javasrcipt原生的 createElement()函数创建这个元素。 当传入一个复杂的html,一些浏览器可能不会产生一个完全复制HTML源代码所提供的DOM。正如前面提到的,jQuery使用的浏览器.innerHTML属性来解析传递的HTML并将其插入到当前文档中。在此过程中,一些浏览器过滤掉某些元素,如, , 或 <head>的元素。其结果是,被插入元素可能不是传入的原始的字符串。 不过,这些被过滤掉的标签有限的。有些浏览器可能不完全复制所提供的HTML源代码生成DOM。例如,Internet Explorer的版本8之前转换所有链接的href属性为绝对URL路径,和Internet Explorer第9版之前,不增加一个单独的兼容层的情况下,将无法正确处理HTML5元素。 为了确保跨平台的兼容性,代码片段必须是良好的。标签可以包含其他元素,但需要搭配的结束标记 </code></pre> <p>如果第一个参数(HTML字符串)为一个空的单标签,且第二个参数context为一个非空纯对象 <br> var jqHTML = $(‘</p> <div></div>‘, { class: ‘css-class’, data-name: ‘data-val’ }); <p></p> <p>console.log(jqHTML.attr[‘class’]); //css-class <br> console.log(jqHTML.attr[‘data-name’]); //data-val</p> <p>匹配模式三:$(.className)</p> <p>如果第一个参数是一个.className,jQuery对象中拥有class名为className的标签元素,并增加一个属性值为参数字符串、document的selector、context属性 <br> return jQuery(document).find(className);</p> <p>匹配模式四:$(.className, context)</p> <p>如果第一个参数是.className,第二个参数是一个上下文对象(可以是.className(等同于处理$(.className .className)),jQuery对象或dom节点), <br> jQuery对象包含第二个参数上下文对象中拥有class名为className的后代节点元素,并增加一个context和selector属性</p> <p>return jQuery(context).find(className); </p> <p>匹配模式五:$(jQuery对象)</p> <p>如果第一个参数是jQuery对象,上面已经分析过如果在查询dom时,参数是一个#加元素id,返回的jQuery对象会增加一个属性值为参数字符串、document的selector、context属性</p> <p>var jq = $(‘#container’); <br> console.log(jq.selector); // #container <br> console.log(jq.context); // document </p> <p>那么当出现((‘#container’))该如何处理呢?同样的,返回的jQuery对象同情况</p> <p>var jq2 = <span class="MathJax_Preview"></span><span id="MathJax-Element-171-Frame" class="MathJax"><span style="display:inline-block;" id="MathJax-Span-1130" class="math"><span style="display:inline-block;font-size:125%;"><span><span id="MathJax-Span-1131" class="mrow"><span style="font-family:'MathJax_Main';" id="MathJax-Span-1132" class="mo">(</span></span><span style="display:inline-block;width:0px;"></span></span></span><span style="border-left:0em solid;display:inline-block;overflow:hidden;width:0px;vertical-align:-.379em;"></span></span></span>(‘#container’)); <br> console.log(jq2.selector); // #container <br> console.log(jq2.context); // document </p> <p>等等………………</p> <hr> <p>jQuery 构造器</p> <pre><code> 由此可见,从本质上来说,构建的jQuery对象,其实不仅仅只是dom,还有很多附加的元素,用数组的方式存储,当然各种组合有不一样,但是存储的方式是一样的 </code></pre> <p>总的来说分2大类:</p> <pre><code>单个DOM元素,如$(ID),直接把DOM元素作数组传递给this对象 多个DOM元素,集合形式,可以通过CSS选择器匹配是有的DOM元素,过滤操作,构建数据结构 </code></pre> <p>CSS选择器是通过jQuery.find(selector)函数完成的,通过它可以分析选择器字符串,并在DOM文档树中查找符合语法的元素集合</p> <p>选择器这章有点乱,东西太多了,不能一一陈列 , 后期在慢慢整理</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1297335006582087680"></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">你可能感兴趣的:(JS,与JQuery)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1896058259027062784.htm" title="初识uniApp" target="_blank">初识uniApp</a> <span class="text-muted">家里有只小肥猫</span> <a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a> <div>详细思考一下uniApp这个跨平台开发框架。首先,我对uniApp还不是很了解,所以需要从基本概念开始,逐步深入。什么是uniApp?我记得uniApp是基于Vue.js的,可能是一个用来开发多个平台的应用的框架。用户可能想了解它是什么,它的特点是什么,适合什么样的项目。uniApp的特点和优势跨平台开发:一次编写,多端运行,可能包括H5、微信小程序、支付宝小程序、App等。基于Vue.js:这意</div> </li> <li><a href="/article/1896056613211533312.htm" title="python实现二分查找(对新手友好,内容通俗易懂)" target="_blank">python实现二分查找(对新手友好,内容通俗易懂)</a> <span class="text-muted">dlage</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%88%97%E8%A1%A8/1.htm">列表</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>python实现二分查找二分查找又名折半查找。优点:查询速度快,性能好。缺点:要求查询的表为有序表原理:将表中间位置(mid)的数字与待查数字(data)做比较,如果相等:返回true,结束。如果不相等:则使用中间位置的记录将表分为前后两个子表。若data>mid则进一步查找后一个表。若datadata:last=mid-1elifalist[mid]data:last=mid-1elifalis</div> </li> <li><a href="/article/1896055856194187264.htm" title="十一、Spring Boot:使用JWT实现用户认证深度解析" target="_blank">十一、Spring Boot:使用JWT实现用户认证深度解析</a> <span class="text-muted">伯牙碎琴</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Spring%E6%A1%86%E6%9E%B6/1.htm">Spring框架</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>SpringBootJWT(JSONWebToken):无状态认证在现代Web开发中,无状态认证是一种重要的安全机制,它允许服务器在不存储会话信息的情况下验证用户身份。JSONWebToken(JWT)是一种常用的无状态认证技术,它通过一个紧凑的URL安全令牌来传递用户身份信息。SpringBoot与JWT的结合可以为应用提供强大的安全保护。本文将详细介绍如何在SpringBoot中集成JWT实现</div> </li> <li><a href="/article/1896054721471377408.htm" title="新手0基础路由器刷机(小米WR30U)" target="_blank">新手0基础路由器刷机(小米WR30U)</a> <span class="text-muted">frank_double</span> <a class="tag" taget="_blank" href="/search/%E8%B7%AF%E7%94%B1%E5%99%A8%E5%88%B7%E6%9C%BA/1.htm">路由器刷机</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E8%B7%AF%E7%94%B1%E5%99%A8/1.htm">智能路由器</a> <div>准备工作:登陆恩山论坛搜237去下载刷路由器别人已经备好的各种包目录一、#######开SSH###########1、进小米路由系统设置“启用与智能网关的无线配置同步”为开启、再DHCP为自动配置DNS,最后设置wan口为第一个端口。2、将笔记本电脑与wan1口用网线连接,笔记本进入控制面板-网络管理-无线网卡-右键无线网卡属性,将网络共享给WR30U。3、CMD运行python.exeserv</div> </li> <li><a href="/article/1896054343182905344.htm" title="密码学与网络安全 - 11 密码学Hash函数" target="_blank">密码学与网络安全 - 11 密码学Hash函数</a> <span class="text-muted">shiyivei</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%AF%86%E7%A0%81%E5%AD%A6%E4%B8%8E%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">密码学与网络安全</a><a class="tag" taget="_blank" href="/search/%E5%93%88%E5%B8%8C%E7%AE%97%E6%B3%95/1.htm">哈希算法</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/Hash%E5%87%BD%E6%95%B0/1.htm">Hash函数</a><a class="tag" taget="_blank" href="/search/%E6%B6%88%E6%81%AF%E8%AE%A4%E8%AF%81/1.htm">消息认证</a> <div>11密码学Hash函数Hash函数输入长度可变,而输出长度固定合格的Hash函数输出应该均匀分布,看起来随机Hash函数两个要求:1.抗碰撞性(找到两个不同的输入对应相同的输出在计算上不可行),2.单向性(通过Hash值找到输入值在计算上不可行)Hash函数的操作过程:把输入数据的长度填充成固定长度分组的整数倍,填充内容包括原始消息的位长度信息,填充长度信息能够增加攻击者更改数据而要保持hash值</div> </li> <li><a href="/article/1896054340041371648.htm" title="bitcoinjs学习笔记4—p2pkh、p2sh、p2wpkh地址生成" target="_blank">bitcoinjs学习笔记4—p2pkh、p2sh、p2wpkh地址生成</a> <span class="text-muted">EM-FF</span> <a class="tag" taget="_blank" href="/search/bitcoinjs/1.htm">bitcoinjs</a><a class="tag" taget="_blank" href="/search/%E6%AF%94%E7%89%B9%E5%B8%81/1.htm">比特币</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a> <div>BitcoinJS学习笔记4—P2PKH、P2SH、P2WPKH地址生成大纲1.概述目标:学习如何使用BitcoinJS生成三种常见的比特币地址类型:P2PKH(Pay-to-Public-Key-Hash)P2SH(Pay-to-Script-Hash)P2WPKH(Pay-to-Witness-Public-Key-Hash)工具:BitcoinJS库、比特币测试网(Testnet)或回归测试</div> </li> <li><a href="/article/1896052198077427712.htm" title="Python实现三维空间中的RRT避障路径规划算法" target="_blank">Python实现三维空间中的RRT避障路径规划算法</a> <span class="text-muted">C_mony</span> <a class="tag" taget="_blank" href="/search/%E6%9C%BA%E6%A2%B0%E8%87%82/1.htm">机械臂</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">机器人</a> <div>文章目录前言一、算法原理二、代码实现1.定义节点2.碰撞检测3.RRT算法4.完整代码运行结果前言基于快速随机搜索树(Rapidly-exploringRandomTree,RRT)的优化算法,通过对状态空间中的采样点进行碰撞检测,避免了对空间的建模,能够有效地解决高维空间和复杂约束的路径规划问题,在机械臂路径规划与避障中扮演着关键角色。RRT算法通过随机生成的树状结构来探索高维空间,尤其适合于解</div> </li> <li><a href="/article/1896047785971609600.htm" title="ubuntu下使用docker部署nginx" target="_blank">ubuntu下使用docker部署nginx</a> <span class="text-muted">神奇的路人A</span> <a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a> <div>前面配置与命令有什么问题的朋友可以参考以下两个链接ubuntu下安装docker,并配置镜像ubuntu下docker常用命令,及容器创建1.进入root模式$sudosu2.下载Nginx镜像$dockerpullnginx3.创建nginx容器$dockerrun-d--namenginx01-p3344:80nginx#--name[你要设置的容器名字]#-p主机端口:容器端口这里需要开启u</div> </li> <li><a href="/article/1896047533642280960.htm" title="从基础到实践(七):二极管选型注意事项" target="_blank">从基础到实践(七):二极管选型注意事项</a> <span class="text-muted">硬件进化论</span> <a class="tag" taget="_blank" href="/search/json/1.htm">json</a> <div>一、应用需求的深度分析电路拓扑与二极管角色整流电路:工频整流(如桥式整流)需关注浪涌电流(如电容输入滤波导致的电流冲击)。续流二极管(在电感负载中):需快速关断(防止反向恢复电流损坏开关器件,如MOSFET)。电平转换:小信号二极管(如1N4148)需低结电容和快速响应。极端工况考虑汽车电子:需满足AEC-Q101认证(耐高温、抗振动、长寿命)。工业环境:抗电磁干扰(EMI)能力,如TVS二极管抑</div> </li> <li><a href="/article/1896047279530373120.htm" title="数据结构--二叉树OJ习题2" target="_blank">数据结构--二叉树OJ习题2</a> <span class="text-muted">晴晴学语言</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84OJ%E4%B9%A0%E9%A2%98/1.htm">数据结构OJ习题</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%8F%89%E6%A0%91/1.htm">二叉树</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>1另一个树的子树1.1题目介绍给定两个非空二叉树s和t,检验s中是否包含和t具有相同结构和节点值的子树。s的一个子树包括s的一个节点和这个节点的所有子孙。s也可以看做它自身的一棵子树。示例:给定的树s:给定的树t:返回true,因为t与s的一个子树拥有相同的结构和节点值。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subtree-of-an</div> </li> <li><a href="/article/1896047026982940672.htm" title="[密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践" target="_blank">[密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践</a> <span class="text-muted">曼岛_</span> <a class="tag" taget="_blank" href="/search/%E5%9B%BD%E5%AF%86%E5%AE%9E%E6%88%98/1.htm">国密实战</a><a class="tag" taget="_blank" href="/search/%E5%AF%86%E7%A0%81%E5%AD%A6/1.htm">密码学</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>一、代码运行结果二、国密算法与密钥协商背景2.1什么是国密算法?国密算法是由中国国家密码管理局制定的商用密码标准,包括:SM2:椭圆曲线公钥密码算法(非对称加密/签名/密钥协商)SM3:密码杂凑算法(哈希)SM4:分组密码算法(对称加密)2.2密钥协商的意义在安全通信中,双方需要在不安全的信道上协商出相同的会话密钥,用于后续对称加密。SM2密钥协商协议解决了以下问题:避免预先共享密钥抵抗中间人攻击</div> </li> <li><a href="/article/1896046899824226304.htm" title="《国密算法开发实战:从合规落地到性能优化》" target="_blank">《国密算法开发实战:从合规落地到性能优化》</a> <span class="text-muted">曼岛_</span> <a class="tag" taget="_blank" href="/search/%E3%80%8A%E5%AF%86%E7%A0%81%E5%AD%A6%E5%AE%9E%E6%88%98%E3%80%8B/1.htm">《密码学实战》</a><a class="tag" taget="_blank" href="/search/%E5%AF%86%E7%A0%81%E5%AD%A6/1.htm">密码学</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>前言随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码算法,旨在满足国内信息安全需求,提升我国信息安全的自主可控能力。国密算法的背景国密算法的研发与推广是我国信息安全战略的重要组成部分。长期以来,国际</div> </li> <li><a href="/article/1896046014884802560.htm" title="一次讲清楚华为认证!!(HCIA/HCIP/HCIE)" target="_blank">一次讲清楚华为认证!!(HCIA/HCIP/HCIE)</a> <span class="text-muted">office大师姐</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E8%AE%A4%E8%AF%81/1.htm">华为认证</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><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/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/5G/1.htm">5G</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a> <div>在信息技术领域,华为认证好比一座金字招牌,吸引着无数技术专业人士的青睐。市场上关于华为认证的声音纷繁复杂,存在不少争议,让人难以辨别真伪。今天就来好好讲讲华为认证,从头到尾都帮你盘盘清楚。PART01华为认证是什么?★认证介绍:华为认证是由华为技术有限公司提供的专业技术认证体系,旨在评估和验证个人在华为产品、解决方案和技术领域的专业知识和技能。华为认证覆盖了广泛的ICT(信息与通信技术)领域,包括</div> </li> <li><a href="/article/1896045384195698688.htm" title="[网络]NAT、代理服务、内网穿透、内网打洞" target="_blank">[网络]NAT、代理服务、内网穿透、内网打洞</a> <span class="text-muted">张呱呱_</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>目录一、NAT1.1NAT技术背景1.2NATIP转换过程1.3NAPT(NetworkAddressPortTranslation)1.地址转换表2.NAPT(网络地址端口转换NetworkAddressPortTranslation)3.NAT技术的缺陷二、代理服务器2.1正向代理2.2反向代理2.3正向代理与反向代理2.4NAT和代理服务器三、内网穿透一、NATNAT(NetworkAddr</div> </li> <li><a href="/article/1896045005596848128.htm" title="大白话解释认证JWT是什么 有什么用 怎么用" target="_blank">大白话解释认证JWT是什么 有什么用 怎么用</a> <span class="text-muted">心心祥蓉</span> <a class="tag" taget="_blank" href="/search/JWT/1.htm">JWT</a> <div>JWT是什么?JWT(JSONWebToken)就像一张“加密的电子通行证”,用来证明你是谁、能干什么。它由三段字符串拼接而成(比如xxx.yyy.zzz),每段对应不同的信息:头(Header):说明加密算法类型,比如“用HS256算法签名”。身体(Payload):存用户身份信息(如用户ID、角色)、有效期等,类似快递单上的收件人和地址。签名(Signature):用密钥对前两段内容加密生成的</div> </li> <li><a href="/article/1896044751854039040.htm" title="支付系统设计模式总结:策略模式与工厂模式的结合" target="_blank">支付系统设计模式总结:策略模式与工厂模式的结合</a> <span class="text-muted">I~Lucky</span> <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/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F/1.htm">策略模式</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>在支付系统中,为了支持多种支付方式(如支付宝、微信支付等),并保证代码的可扩展性和维护性,通常会使用策略模式和工厂模式。这两种设计模式可以很好地结合起来,以实现灵活的支付处理逻辑。设计模式简介策略模式(StrategyPattern):定义一系列算法,并将每个算法封装起来,使它们可以互换。策略模式让算法独立于使用它的客户端而变化。工厂模式(FactoryPattern):提供一个创建对象的接口,由</div> </li> <li><a href="/article/1896044373636870144.htm" title="线性秩检验" target="_blank">线性秩检验</a> <span class="text-muted">木子算法</span> <a class="tag" taget="_blank" href="/search/%E9%9D%9E%E5%8F%82%E6%95%B0%E7%BB%9F%E8%AE%A1/1.htm">非参数统计</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1/1.htm">数学建模</a><a class="tag" taget="_blank" href="/search/%E6%A6%82%E7%8E%87%E8%AE%BA/1.htm">概率论</a> <div>线性秩检验一、引言在统计学的广袤领域中,参数检验通常基于数据服从特定分布(如正态分布)的假设。然而,在实际场景里,数据往往并不满足这些严格假设,此时非参数检验方法便展现出独特优势。线性秩检验作为一种强大的非参数检验手段,能够在不依赖数据分布的前提下,对数据进行深入分析,探寻其中隐藏的规律与差异。本文将全方位深入剖析线性秩检验,涵盖其原理、公式推导以及实际案例应用,助力读者全面掌握这一重要的统计方法</div> </li> <li><a href="/article/1896043742817742848.htm" title="Nginx的安装和部署以及Nginx的反向代理与负载均衡" target="_blank">Nginx的安装和部署以及Nginx的反向代理与负载均衡</a> <span class="text-muted">小彭爱学习</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>Nginx的安装和部署以及Nginx的反向代理与负载均衡1.本文内容Nginx的安装Nginx的静态网站部署Nginx的反向代理与负载均衡,配置反向代理与负载均衡2.Nginx的安装与启动2.1什么是NginxNginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔·西索夫(IgorSysoev)所开发,官方测试nginx能够支撑</div> </li> <li><a href="/article/1896043239056666624.htm" title="爬虫实战分享:高效爬取汽车官方销售排行榜的技术方案" target="_blank">爬虫实战分享:高效爬取汽车官方销售排行榜的技术方案</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%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a> <div>随着大数据技术的飞速发展,爬虫技术在各行各业中得到了广泛应用。汽车行业作为一个信息密集型行业,销售数据、排行榜和车型趋势等内容成为了汽车公司、市场研究者和消费者关注的重点。爬虫技术为这些数据的收集和分析提供了强有力的支持。本文将介绍如何通过爬虫技术高效爬取某汽车官方销售排行榜,并讨论常见的技术难点与解决方案。1.目标与需求分析我们的目标是从某汽车官方网站上高效地爬取官方销售排行榜。爬取内容包括:销</div> </li> <li><a href="/article/1896043112661315584.htm" title="基数排序详解" target="_blank">基数排序详解</a> <span class="text-muted">醉心编码</span> <a class="tag" taget="_blank" href="/search/c%2Fc%2B%2B/1.htm">c/c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><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/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>基数排序详解一、基数排序的基本概念二、基数排序的特点二、基数排序的工作过程三、基数排序的伪代码四、基数排序的C语言代码示例五、基数排序的稳定性六、基数排序的优化与变体七、基数排序的应用场景八、结论在计算机科学中,排序算法是一种非常基础和重要的算法类型,用于对一系列数据进行有序的排列。在众多排序算法中,基数排序以其独特的工作机制和优秀的性能,得到了广泛的关注和应用。本文将详细介绍基数排序的相关知识,</div> </li> <li><a href="/article/1896041849651523584.htm" title="DeepSeek应用场景及其解决的问题" target="_blank">DeepSeek应用场景及其解决的问题</a> <span class="text-muted">杏花春雨江南</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a> <div>DeepSeek是一种基于深度学习的智能技术,能够处理复杂的非结构化数据(如文本、图像、语音等),并在企业级应用开发中发挥重要作用。以下是DeepSeek在企业级应用开发中的典型应用场景及其解决的问题:1.企业知识管理与智能搜索场景:企业拥有大量的文档、报告、邮件、会议记录等非结构化数据,员工需要快速找到相关信息。DeepSeek的作用:通过语义搜索和自然语言处理(NLP),DeepSeek可以理</div> </li> <li><a href="/article/1896041091862425600.htm" title="【AI带来的机遇】" target="_blank">【AI带来的机遇】</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/AIGC/1.htm">AIGC</a> <div>一、AI大模型技术革命的底层逻辑与历史机遇类比AI大模型的普及与DeepSeek等技术的突破,正形成类似互联网初期的技术红利窗口期。其核心特征表现为:技术门槛骤降、生态边界模糊、应用场景裂变。类比房地产黄金期中介赚取信息差、移动互联网初期应用商店分发红利,当前AI领域存在三大核心机遇:基础设施重构机遇(类比域名投资)AI大模型开源浪潮下,高质量训练数据资产、特定领域微调模型、模型中间件将成为新时代</div> </li> <li><a href="/article/1896035419930292224.htm" title="学习笔记分享-进阶数据结构与算法-图-并查集-优化" target="_blank">学习笔记分享-进阶数据结构与算法-图-并查集-优化</a> <span class="text-muted">-暮倦-</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%88%86%E4%BA%AB-%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">学习笔记分享-数据结构与算法</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>前言图片上面的personal表示只有图片上面的一行语句是解释图片内容的、local表示这个图片所在标题下的所有语句都是解释图片内容的、global表示有多个标题下的所有语句都是解释图片内容的我是一名大二的学生,学了差不多一年java技术栈了,想记录一下自己对知识点的心得,目前还是个小白,期望大佬们可以指出我笔记中的不足之处、对知识点的认知错误、笔记结构的混乱等这些图片内容都是在观看黑马课程时的视</div> </li> <li><a href="/article/1896035167881981952.htm" title="编程入门难?Python 十大核心知识点,手把手教你!" target="_blank">编程入门难?Python 十大核心知识点,手把手教你!</a> <span class="text-muted">编程咕咕gu-</span> <a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80/1.htm">Python基础</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><a class="tag" taget="_blank" href="/search/Python%E6%95%99%E7%A8%8B/1.htm">Python教程</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a> <div>如果你对编程感兴趣,但又不知道从哪里开始,那么Python会是你的好选择。它简单易学,是初学者学习编程的好帮手。这篇文章会用轻松的方式,带你了解Python的十个重要概念,一步步帮助你从零开始!1.Python文件与扩展名学习Python的第一步是创建一个Python文件。Python文件的名字后面都会加上.py作为扩展名。例如,你可以创建一个名为main.py的文件,这就是一个Python脚本。</div> </li> <li><a href="/article/1896034160477270016.htm" title="十、Spring Boot:Spring Security(用户认证与授权深度解析)" target="_blank">十、Spring Boot:Spring Security(用户认证与授权深度解析)</a> <span class="text-muted">伯牙碎琴</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Spring%E6%A1%86%E6%9E%B6/1.htm">Spring框架</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</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/java/1.htm">java</a> <div>SpringSecurity:用户认证与授权深度解析在现代Web应用中,安全性是至关重要的。SpringSecurity作为Spring生态系统中的核心安全框架,提供了强大的用户认证和授权功能,能够有效保护应用免受各种安全威胁。本文将深入探讨SpringSecurity的用户认证和授权机制,包括其核心概念、实现方式以及在SpringBoot项目中的集成方法。一、SpringSecurity概述1.</div> </li> <li><a href="/article/1896032774079442944.htm" title="nginx+keepalived实现高可用负载均衡" target="_blank">nginx+keepalived实现高可用负载均衡</a> <span class="text-muted">Spike()</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a> <div>本文介绍了nginx反向代理多虚拟主机节点服务器配合keepalived实现高可用和负载均衡,keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。采用nginx+keepalived,它是一个高性能的服务器高可用或者热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现Web服务器端的高可用。使用keepalived</div> </li> <li><a href="/article/1896032774507261952.htm" title="8. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--负载均衡" target="_blank">8. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--负载均衡</a> <span class="text-muted">喵叔哟</span> <a class="tag" taget="_blank" href="/search/.NET/1.htm">.NET</a><a class="tag" taget="_blank" href="/search/8/1.htm">8</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</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/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a> <div>负载均衡在Ocelot中作为API网关的核心功能,通过智能调度流量保障微服务架构的高效与稳定。Ocelot内置多种算法动态分配请求,例如轮询策略按顺序分发流量,最小连接数策略优先选择负载较低的实例,而基于Cookie的会话粘滞策略则能维持特定用户请求与后端服务的绑定状态,适用于需要会话一致性的场景。同时,Ocelot与服务发现工具深度集成,实时感知服务实例的上下线状态,自动剔除故障节点并调整路由策</div> </li> <li><a href="/article/1896031011192500224.htm" title="Windows和Linux下,通过C++实现获取蓝牙版本号" target="_blank">Windows和Linux下,通过C++实现获取蓝牙版本号</a> <span class="text-muted">xingyun86</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>在C++中获取蓝牙版本号,不同的操作系统有不同的实现方式,下面分别介绍在Windows和Linux系统下的实现方法。Windows系统在Windows系统中,可以使用WindowsAPI来与蓝牙设备交互,获取蓝牙版本号。以下是一个示例代码:收起cpp#include#include#include#include#include#pragmacomment(lib,"Bthprops.lib")/</div> </li> <li><a href="/article/1896030379568066560.htm" title="探索宇宙:揭秘星辰的无限奥秘!" target="_blank">探索宇宙:揭秘星辰的无限奥秘!</a> <span class="text-muted">大脸猫的猫脸大</span> <a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6/1.htm">百度</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E6%B5%AA%E5%BE%AE%E5%8D%9A/1.htm">新浪微博</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1/1.htm">微信</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0/1.htm">微信开放平台</a><a class="tag" taget="_blank" href="/search/facebook/1.htm">facebook</a> <div>宇宙,一个包罗万象、充满未知的广阔空间。它浩瀚无垠,星空璀璨,蕴藏着无数星辰的秘密和无尽的奥秘。每当夜幕降临,我们抬头仰望,那片星光灿烂的天空总能引发我们无限的遐想与探索欲望。乾坤、天地、苍穹、寰宇、大千世界、茫茫宇宙、苍茫宇宙、无尽星空……这些优美的词汇,无不描绘出宇宙的宏伟、深邃、壮丽、广袤、无限、浩渺、神秘、辽阔、蔚蓝等特质。它们激发了人类对宇宙的好奇心和探索精神,促使我们不断追寻那些隐藏在</div> </li> <li><a href="/article/1896030380436287488.htm" title="使用 nodejs 和 ElasticSearch 快速搭建全文检索" target="_blank">使用 nodejs 和 ElasticSearch 快速搭建全文检索</a> <span class="text-muted">dbLenis</span> <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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a><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/linux/1.htm">linux</a> <div>点击蓝色“有关SQL”关注我哟加个“星标”,天天与10000人一起快乐成长上次群友问我,Python怎么学,我说四个小时足够了,你们不信。这次,我用2个小时,仅仅用Google,快速搭建了一个nodejs+Elasticsearch的小Demo.足可见,在有搜索的年代,快速上手一门技术,已经不是什么难事。1安装1.1下载地址https://nodejs.org/en/download提供windo</div> </li> <li><a href="/article/126.htm" title="插入表主键冲突做更新" target="_blank">插入表主键冲突做更新</a> <span class="text-muted">a-john</span> <div>有以下场景: 用户下了一个订单,订单内的内容较多,且来自多表,首次下单的时候,内容可能会不全(部分内容不是必须,出现有些表根本就没有没有该订单的值)。在以后更改订单时,有些内容会更改,有些内容会新增。 问题: 如果在sql语句中执行update操作,在没有数据的表中会出错。如果在逻辑代码中先做查询,查询结果有做更新,没有做插入,这样会将代码复杂化。 解决: mysql中提供了一个sql语</div> </li> <li><a href="/article/253.htm" title="Android xml资源文件中@、@android:type、@*、?、@+含义和区别" target="_blank">Android xml资源文件中@、@android:type、@*、?、@+含义和区别</a> <span class="text-muted">Cb123456</span> <a class="tag" taget="_blank" href="/search/%40%2B/1.htm">@+</a><a class="tag" taget="_blank" href="/search/%40/1.htm">@</a><a class="tag" taget="_blank" href="/search/%3F/1.htm">?</a><a class="tag" taget="_blank" href="/search/%40*/1.htm">@*</a> <div>一.@代表引用资源 1.引用自定义资源。格式:@[package:]type/name android:text="@string/hello"   2.引用系统资源。格式:@android:type/name     android:textColor="@android:color/opaque_red"</div> </li> <li><a href="/article/380.htm" title="数据结构的基本介绍" target="_blank">数据结构的基本介绍</a> <span class="text-muted">天子之骄</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/%E6%95%A3%E5%88%97%E8%A1%A8/1.htm">散列表</a><a class="tag" taget="_blank" href="/search/%E6%A0%91%E3%80%81%E5%9B%BE/1.htm">树、图</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E7%BB%93%E6%9E%84/1.htm">线性结构</a><a class="tag" taget="_blank" href="/search/%E4%BB%B7%E6%A0%BC%E6%A0%87%E7%AD%BE/1.htm">价格标签</a> <div>数据结构的基本介绍 数据结构就是数据的组织形式,用一种提前设计好的框架去存取数据,以便更方便,高效的对数据进行增删查改。正确选择合适的数据结构,对软件程序的高效执行的影响作用不亚于算法的设计。此外,在计算机系统中数据结构的作用也是非同小可。例如常常在编程语言中听到的栈,堆等,就是经典的数据结构。   经典的数据结构大致如下:   一:线性数据结构 (1):列表 a</div> </li> <li><a href="/article/507.htm" title="通过二维码开放平台的API快速生成二维码" target="_blank">通过二维码开放平台的API快速生成二维码</a> <span class="text-muted">一炮送你回车库</span> <a class="tag" taget="_blank" href="/search/api/1.htm">api</a> <div> 现在很多网站都有通过扫二维码用手机连接的功能,联图网(http://www.liantu.com/pingtai/)的二维码开放平台开放了一个生成二维码图片的Api,挺方便使用的。闲着无聊,写了个前台快速生成二维码的方法。        html代码如下:(二维码将生成在这div下) ? 1  &nbs</div> </li> <li><a href="/article/634.htm" title="ImageIO读取一张图片改变大小" target="_blank">ImageIO读取一张图片改变大小</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/IO/1.htm">IO</a><a class="tag" taget="_blank" href="/search/image/1.htm">image</a><a class="tag" taget="_blank" href="/search/BufferedImage/1.htm">BufferedImage</a> <div> package com.demo; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** * @Description 读取一张图片改变大小 * @author FuJianyon</div> </li> <li><a href="/article/761.htm" title="myeclipse集成svn(一针见血)" target="_blank">myeclipse集成svn(一针见血)</a> <span class="text-muted">7454103</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a> <div>                                 &n</div> </li> <li><a href="/article/888.htm" title="装箱与拆箱----autoboxing和unboxing" target="_blank">装箱与拆箱----autoboxing和unboxing</a> <span class="text-muted">darkranger</span> <a class="tag" taget="_blank" href="/search/J2SE/1.htm">J2SE</a> <div>4.2 自动装箱和拆箱 基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用。 4.2.1 autoboxing和unboxing 在Java中,所有要处理的东西几乎都是对象(Object)</div> </li> <li><a href="/article/1015.htm" title="ajax传统的方式制作ajax" target="_blank">ajax传统的方式制作ajax</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a> <div>//这是前台的代码 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+</div> </li> <li><a href="/article/1142.htm" title="只用jre的eclipse是怎么编译java源文件的?" target="_blank">只用jre的eclipse是怎么编译java源文件的?</a> <span class="text-muted">avords</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>eclipse只需要jre就可以运行开发java程序了,也能自动 编译java源代码,但是jre不是java的运行环境么,难道jre中也带有编译工具? 还是eclipse自己实现的?谁能给解释一下呢问题补充:假设系统中没有安装jdk or jre,只在eclipse的目录中有一个jre,那么eclipse会采用该jre,问题是eclipse照样可以编译java源文件,为什么呢? &nb</div> </li> <li><a href="/article/1269.htm" title="前端模块化" target="_blank">前端模块化</a> <span class="text-muted">bee1314</span> <a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%9D%97%E5%8C%96/1.htm">模块化</a> <div>背景: 前端JavaScript模块化,其实已经不是什么新鲜事了。但是很多的项目还没有真正的使用起来,还处于刀耕火种的野蛮生长阶段。   JavaScript一直缺乏有效的包管理机制,造成了大量的全局变量,大量的方法冲突。我们多么渴望有天能像Java(import),Python (import),Ruby(require)那样写代码。在没有包管理机制的年代,我们是怎么避免所</div> </li> <li><a href="/article/1396.htm" title="处理百万级以上的数据处理" target="_blank">处理百万级以上的数据处理</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</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/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E8%AF%A2/1.htm">查询</a> <div>一.处理百万级以上的数据提高查询速度的方法:        1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。         2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 o</div> </li> <li><a href="/article/1523.htm" title="mac 卸载 java 1.7 或更高版本" target="_blank">mac 卸载 java 1.7 或更高版本</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/OS/1.htm">OS</a> <div>卸载 java 1.7 或更高 sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin 成功执行此命令后,还可以执行 java 与 javac 命令 sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane 成功执行此命令后,还可以执行 java </div> </li> <li><a href="/article/1650.htm" title="【Spark六十一】Spark Streaming结合Flume、Kafka进行日志分析" target="_blank">【Spark六十一】Spark Streaming结合Flume、Kafka进行日志分析</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Stream/1.htm">Stream</a> <div>第一步,Flume和Kakfa对接,Flume抓取日志,写到Kafka中 第二部,Spark Streaming读取Kafka中的数据,进行实时分析   本文首先使用Kakfa自带的消息处理(脚本)来获取消息,走通Flume和Kafka的对接 1. Flume配置 1. 下载Flume和Kafka集成的插件,下载地址:https://github.com/beyondj2ee/f</div> </li> <li><a href="/article/1777.htm" title="Erlang vs TNSDL" target="_blank">Erlang vs TNSDL</a> <span class="text-muted">bookjovi</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a> <div>      TNSDL是Nokia内部用于开发电信交换软件的私有语言,是在SDL语言的基础上加以修改而成,TNSDL需翻译成C语言得以编译执行,TNSDL语言中实现了异步并行的特点,当然要完整实现异步并行还需要运行时动态库的支持,异步并行类似于Erlang的process(轻量级进程),TNSDL中则称之为hand,Erlang是基于vm(beam)开发,</div> </li> <li><a href="/article/1904.htm" title="非常希望有一个预防疲劳的java软件, 预防过劳死和眼睛疲劳,大家一起努力搞一个" target="_blank">非常希望有一个预防疲劳的java软件, 预防过劳死和眼睛疲劳,大家一起努力搞一个</a> <span class="text-muted">ljy325</span> <a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E5%BA%94%E7%94%A8/1.htm">企业应用</a> <div> 非常希望有一个预防疲劳的java软件,我看新闻和网站,国防科技大学的科学家累死了,太疲劳,老是加班,不休息,经常吃药,吃药根本就没用,根本原因是疲劳过度。我以前做java,那会公司垃圾,老想赶快学习到东西跳槽离开,搞得超负荷,不明理。深圳做软件开发经常累死人,总有不明理的人,有个软件提醒限制很好,可以挽救很多人的生命。 相关新闻: (1)IT行业成五大疾病重灾区:过劳死平均37.9岁 </div> </li> <li><a href="/article/2031.htm" title="读《研磨设计模式》-代码笔记-原型模式" target="_blank">读《研磨设计模式》-代码笔记-原型模式</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/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ /** * Effective Java 建议使用copy constructor or copy factory来代替clone()方法: * 1.public Product copy(Product p){} * 2.publi</div> </li> <li><a href="/article/2158.htm" title="配置管理---svn工具之权限配置" target="_blank">配置管理---svn工具之权限配置</a> <span class="text-muted">chenyu19891124</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a> <div>今天花了大半天的功夫,终于弄懂svn权限配置。下面是今天收获的战绩。 安装完svn后就是在svn中建立版本库,比如我本地的是版本库路径是C:\Repositories\pepos。pepos是我的版本库。在pepos的目录结构 pepos    component    webapps 在conf里面的auth里赋予的权限配置为 [groups]</div> </li> <li><a href="/article/2285.htm" title="浅谈程序员的数学修养" target="_blank">浅谈程序员的数学修养</a> <span class="text-muted">comsci</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/%E7%BC%96%E7%A8%8B/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/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E6%8B%9B%E8%81%98/1.htm">招聘</a> <div>                                 浅谈程序员的数学修养 </div> </li> <li><a href="/article/2412.htm" title="批量执行 bulk collect与forall用法" target="_blank">批量执行 bulk collect与forall用法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/bulk+collect/1.htm">bulk collect</a><a class="tag" taget="_blank" href="/search/forall/1.htm">forall</a> <div>BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。通常可以在SELECT INTO、 FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT。本文将逐一描述BULK COLLECT在这几种情形下的用法。     有关FORALL语句的用法请参考:批量SQL之 F</div> </li> <li><a href="/article/2539.htm" title="Linux下使用rsync最快速删除海量文件的方法" target="_blank">Linux下使用rsync最快速删除海量文件的方法</a> <span class="text-muted">dongwei_6688</span> <a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a> <div>1、先安装rsync:yum install rsync 2、建立一个空的文件夹:mkdir /tmp/test 3、用rsync删除目标目录:rsync --delete-before -a -H -v --progress --stats /tmp/test/ log/这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也是秒删。 </div> </li> <li><a href="/article/2666.htm" title="Yii CModel中rules验证规格" target="_blank">Yii CModel中rules验证规格</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/rules/1.htm">rules</a><a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a><a class="tag" taget="_blank" href="/search/validate/1.htm">validate</a> <div>Yii cValidator主要用法分析:  yii验证rulesit 分类: Yii yii的rules验证 cValidator主要属性 attributes ,builtInValidators,enableClientValidation,message,on,safe,skipOnError  </div> </li> <li><a href="/article/2793.htm" title="基于vagrant的redis主从实验" target="_blank">基于vagrant的redis主从实验</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/vagrant/1.htm">vagrant</a> <div>平台: Mac 工具: Vagrant 系统: Centos6.5 实验目的: Redis主从   实现思路 制作一个基于sentos6.5, 已经安装好reids的box, 添加一个脚本配置从机, 然后作为后面主机从机的基础box   制作sentos6.5+redis的box   mkdir vagrant_redis cd vagrant_</div> </li> <li><a href="/article/2920.htm" title="Memcached(二)、Centos安装Memcached服务器" target="_blank">Memcached(二)、Centos安装Memcached服务器</a> <span class="text-muted">frank1234</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a> <div>一、安装gcc rpm和yum安装memcached服务器连接没有找到,所以我使用的是make的方式安装,由于make依赖于gcc,所以要先安装gcc 开始安装,命令如下,[color=red][b]顺序一定不能出错[/b][/color]: 建议可以先切换到root用户,不然可能会遇到权限问题:su root 输入密码...... rpm -ivh kernel-head</div> </li> <li><a href="/article/3047.htm" title="Remove Duplicates from Sorted List" target="_blank">Remove Duplicates from Sorted List</a> <span class="text-muted">hcx2013</span> <a class="tag" taget="_blank" href="/search/remove/1.htm">remove</a> <div>Given a sorted linked list, delete all duplicates such that each element appear only once. For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return&</div> </li> <li><a href="/article/3174.htm" title="Spring4新特性——JSR310日期时间API的支持" target="_blank">Spring4新特性——JSR310日期时间API的支持</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a> <div>Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  Spring4新特性——Groovy Bean定义DSL Spring4新特性——更好的Java泛型操作API  Spring4新</div> </li> <li><a href="/article/3301.htm" title="浅谈enum与单例设计模式" target="_blank">浅谈enum与单例设计模式</a> <span class="text-muted">247687009</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a> <div>在JDK1.5之前的单例实现方式有两种(懒汉式和饿汉式并无设计上的区别故看做一种),两者同是私有构 造器,导出静态成员变量,以便调用者访问。 第一种 package singleton; public class Singleton { //导出全局成员 public final static Singleton INSTANCE = new S</div> </li> <li><a href="/article/3428.htm" title="使用switch条件语句需要注意的几点" target="_blank">使用switch条件语句需要注意的几点</a> <span class="text-muted">openwrt</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/break/1.htm">break</a><a class="tag" taget="_blank" href="/search/switch/1.htm">switch</a> <div>1. 当满足条件的case中没有break,程序将依次执行其后的每种条件(包括default)直到遇到break跳出 int main() { int n = 1; switch(n) { case 1: printf("--1--\n"); default: printf("defa</div> </li> <li><a href="/article/3555.htm" title="配置Spring Mybatis JUnit测试环境的应用上下文" target="_blank">配置Spring Mybatis JUnit测试环境的应用上下文</a> <span class="text-muted">schnell18</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a> <div>Spring-test模块中的应用上下文和web及spring boot的有很大差异。主要试下来差异有: 单元测试的app context不支持从外部properties文件注入属性 @Value注解不能解析带通配符的路径字符串 解决第一个问题可以配置一个PropertyPlaceholderConfigurer的bean。 第二个问题的具体实例是:    </div> </li> <li><a href="/article/3682.htm" title="Java 定时任务总结一" target="_blank">Java 定时任务总结一</a> <span class="text-muted">tuoni</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/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a><a class="tag" taget="_blank" href="/search/timertask/1.htm">timertask</a> <div> Java定时任务总结  一.从技术上分类大概分为以下三种方式:  1.Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务;   说明:    java.util.Timer定时器,实际上是个线程,定时执行TimerTask类 &</div> </li> <li><a href="/article/3809.htm" title="一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法" target="_blank">一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法</a> <span class="text-muted">yangshangchuan</span> <a class="tag" taget="_blank" href="/search/rank/1.htm">rank</a><a class="tag" taget="_blank" href="/search/%E7%9B%B8%E4%BC%BC%E5%BA%A6%E8%AE%A1%E7%AE%97/1.htm">相似度计算</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%9C%AC%E7%9B%B8%E4%BC%BC%E5%BA%A6/1.htm">文本相似度</a><a class="tag" taget="_blank" href="/search/%E8%AF%8D%E8%A2%8B%E6%A8%A1%E5%9E%8B/1.htm">词袋模型</a><a class="tag" taget="_blank" href="/search/%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E5%BA%A6/1.htm">余弦相似度</a> <div>本文描述了一种在ITEYE博客频道上面出现的新型的商业广告形式及其应对方法,对于其他的用户生成内容站点类型也具有同样的适用性。   最近在ITEYE博客频道上面出现了一种新型的商业广告形式,方法如下:     1、注册多个账号(一般10个以上)。     2、从多个账号中选择一个账号,发表1-2篇博文</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>