MIME详解

MIME, 英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网 电子邮件普遍遵循的邮件技术规范。在MIME出现之前,互联网电子邮件主要遵循由RFC 822所制定的标准,电子邮件一般只用来传递基本的ASCII码文本信息,MIME在 RFC 822的基础上对电子邮件规范做了大量的扩展,引入了新的格式规范和编码方式,在MIME的支持下,图像、声音、动画等二进制文件都可方便的通过电子邮件来进行传递,极大地丰富了电子邮件的功能。目前互联网上使用的基本都是遵循MIME规范的电子邮件。
    电子邮件的分析和读取一般都通过专用的邮件软件来实现,比如Outlook、Foxmail,但这种第三方软件无法和开发者自己的系统整合,通过对MIME邮件格式的分析,我们可以在自己的应用程序中实现对MIME邮件所含信息的读取。

1  MIME邮件格式分析

    MIME技术规范的完整内容由RFC 2045-2049定义,包括了信息格式、媒体类型、编码方式等各方面的内容,这里我们只介绍其中的一些关键的格式和规范,通过了解这些格式规范,我们就可以实现以编程的方式从MIME邮件中提取基本的邮件信息。

1.1 域

    MIME邮件的基本信息、格式信息、编码方式等重要内容都记录在邮件内的各种域中,域的基本格式:{域名}:{内容},域由域名后面跟“:”再加上域的信息内容构成,一条域在邮件中占一行或者多行,域的首行左侧不能有空白字符,比如空格或者制表符,占用多行的域其后续行则必须以空白字符开头。域的信息内容中还可以包含属性,属性之间以“;”分隔,属性的格式如下:{属性名称}=”{属性值}”。
    表1是一封示例邮件的内容,其中行1-5、行8都是单行的域,行6-7则是一个多行的域,并带有一个名为charset的属性,属性值为us-ascii。
 
表1 示例电子邮件
行1 From: ”suntao”
行2 To:
行3 Subject: hello world
行4 Date: Mon, 9 Oct 2006 16:51:34 +0800
行5 MIME-Version: 1.0
行6 Content-Type: text/plain;
行7            charset="us-ascii"
行8 Date: Mon, 9 Oct 2006 16:48:25 +0800
行9
行10 Hello world
行11
    邮件规范中定义了大量域,分别用来存储同邮件相关的各种信息,比如发件人的名字和邮件地址信息存储在From域中,收件人的邮件地址信息存储在To域中,开发人员可通过查询RFC文档得到完整的邮件域定义列表。

1.2  Content-Type域

    Content-Type域定义了邮件中所含各种内容的类型以及相关属性。邮件所含的文本、超文本、附件等信息都按照对应Content-Type域所指定的媒体类型、存储位置、编码方式等信息存储在邮件中。Content-Type域基本格式:Content-Type:{主类型}/{子类型}。
示例邮件中的行6-7就是一个Content-Type域,主类型为text,子类型为plain,字符集属性为us-ascii。
表2:MIME邮件中常见的主类型
主类型
常见属性
参数含义
text
charset
文本信息所使用的字符集
image
name
图像的名称
application
name
应用程序的名称
multipart
boundary
邮件分段边界标识

1.3  multipart类型

    MIME邮件中各种不同类型的内容是分段存储的,各个段的排列方式、位置信息都通过Content-Type域的multipart类型来定义。multipart类型主要有三种子类型:mixed、alternative、related。
1.3.1  multipart类型基本格式
    ●  multipart/mixed类型
    如果一封邮件中含有附件,那邮件的Content-Type域中必须定义multipart/mixed类型,邮件通过multipart/mixed类型中定义的boundary标识将附件内容同邮件其它内容分成不同的段。基本格式如下:
Content-Type: multipart/mixed;
                   boundary="{分段标识}"
    ●  multipart/alternative类型
    MIME邮件可以传送超文本内容,但出于兼容性的考虑,一般在发送超文本格式内容的同时会同时发送一个纯文本内容的副本,如果邮件中同时存在纯文本和超文本内容,则邮件需要在Content-Type域中定义multipart/alternative类型,邮件通过其boundary中的分段标识将纯文本、超文本和邮件的其它内容分成不同的段。基本格式如下:
Content-Type: multipart/alternative;
                   boundary="{分段标识}"
    ●  multipart/related类型
    MIME邮件中除了可以携带各种附件外,还可以将其它内容以内嵌资源的方式存储在邮件中。比如我们在发送html格式的邮件内容时,可能使用图像作为html的背景,html文本会被存储在alternative段中,而作为背景的图像则会存储在multipart/related类型定义的段中。基本格式如下:
Content-Type: multipart/related;
                   type="multipart/alternative";
                   boundary="{分段标识}"
1.3.2  multipart类型的boundary属性
    multipart的子类型中都定义了各自的boundary属性,邮件使用这些boundary中定义的字符串作为标识,将邮件内容分成不同的段,段体内的每个子段以“--”+boundary行开始,父段则以“--”+boundary+“--”行结束,不同段之间用空行分隔。
1.3.3  multipart类型的层次关系
表3:multipart子类型之间的层次关系
Multipart/mixed
Multipart/related
Multipart/alternative
纯文本正文
超文本正文
内嵌资源
附件
    MIME邮件通过多个Content-Type域的multipart类型将内容分成不同的段,这些段在邮件中不是线形顺序排列的,而是存在一个互相包含的层次关系,multipart子类型之间的层次关系结构如表3。

1.4  Content-Transfer-Encoding域

    MIME邮件可以传送图像、声音、视频以及附件,这些非ASCII码的数据都是通过一定的编码规则进行转换后附着在邮件中进行传递的。编码方式存储在邮件的Content-Transfer-Encoding域中,一封邮件中可能有多个Content-Transfer-Encoding域,分别对应邮件不同部分内容的编码方式。目前MIME邮件中的数据编码普遍采用Base64编码或Quoted-printable编码来实现。
1.4.1  Base64编码
    Base64编码的目的是将输入的数据全部转换成由64个指定ASCII字符组成的字符序列, 这64个字符由{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}构成。编码时将需要转换的数据每次取出6bit,然后将其转换成十进制数字,这个数字的范围最小为0,最大为63,然后查询{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}构成的字典表,输出对应位置的ASCII码字符,这样每3个字节的数据内容会被转换成4个字典中的ASCII码字符,当转换到数据末尾不足3个字节时,则用“=”来填充。
1.4.2  Quoted-printable编码
    Quoted-printable编码的目的也是将输入的信息转换成可打印的ASCII码字符,但它是根据信息的内容来决定是否进行编码,如果读入的字节处于33-60、62-126范围内的,这些都是可直接打印的ASCII字符,则直接输出,如果不是,则将该字节分为两个4bit,每个用一个16进制数字来表示,然后在前面加“=”,这样每个需要编码的字节会被转换成三个字符来表示。

2  MIME邮件信息提取

    从上面的分析可以看出,MIME邮件传递的实际是一个经过特殊编码并以约定格式排列的字符序列,我们只需要提取存储在邮件各种域中的格式、位置和编码信息,按照根据这些信息从字符序列中提取出对应的字符内容并对其进行反向解码,就可以得到我们需要的有关内容。
下面给出.Net环境下,利用C#结合正则表达式从邮件中提取相关信息的基本思路和部分代码。

2.1 收件人/发件人/邮件主题的提取

    收件人、发件人、邮件主题是一封邮件的基本组成信息,分别存邮件的From域、To域、Subject域中。开发中只需要通过正则表达式来匹配这些指定的域,然后从匹配结果中取出相关信息即可。
    示例代码:提取邮件主题
string emailContent = “……”;//emailContent中存储的是邮件内容
pat = @"^Subject:\s*(?.*)\s*\r\n"; </div> <div style="font-size:12px;font-family:'宋体';"> myMatches = Regex.Matches(emailContent,pat,RegexOptions.Multiline); </div> <div style="font-size:12px;font-family:'宋体';"> foreach(Match nextMatch in myMatches) </div> <div style="font-size:12px;font-family:'宋体';"> { </div> <div style="font-size:12px;font-family:'宋体';">          GroupCollection myGroup = nextMatch.Groups; </div> <div style="font-size:12px;font-family:'宋体';">          string title = myGroup["title"].ToString();//title变量存储From域的内容 </div> <div style="font-size:12px;font-family:'宋体';">          …… </div> <div style="font-size:12px;font-family:'宋体';"> } </div> <div style="font-size:12px;font-family:'宋体';"> <strong>    </strong>需要注意的是上面的代码提取的是跟随在Subject:后面的字符串,如果邮件的主题内容是中文或者其它需要编码的地区文字,则还需要对其进行解码。比如,如果邮件的Subject域中的信息是“你好”,那么提取出来的字符串会是这种形式:=?gb2312?B?xOO6ww==?=,第一个?同第二个?之间的gb2312代表标题内容所使用的字符集,第二个?和第三个?之间的B代表这部分内容采用的是base64编码方式,如果采用Quoted-printabel编码方式则显示Q,第三个?和第四个?之间则是“你好”经过base64编码后的字符串。 </div> <h2><span style="font-size:13px;">2.2  multipart分段信息的提取</span></h2> <div style="font-size:12px;font-family:'宋体';"> <strong>    </strong>邮件通过multipart类型将内容分隔成不同的段,各段之间的边界标识由对应multipart类型的boundary属性定义。要从邮件中提取出需要的内容,首先需要提取出邮件中的分段信息。下面的代码从一封邮件中提取出所有的multipart类型的名称和boundary属性。 </div> <div style="font-size:12px;font-family:'宋体';"> 示例代码:提取multipart信息 </div> <div style="font-size:12px;font-family:'宋体';"> string emailContent = “……”;//emailContent中存储的是邮件内容 </div> <div style="font-size:12px;font-family:'宋体';"> string pat = @"\bContent-Type:\s*(?<type>\w+/\w+);\s+(type=\S(?<subtype>\S+)\S)?\s+boundary=""(?<flag>\S+)"""; </div> <div style="font-size:12px;font-family:'宋体';"> MatchCollection myMatches = Regex.Matches(emailContent,pat); </div> <div style="font-size:12px;font-family:'宋体';"> foreach(Match nextMatch in myMatches) </div> <div style="font-size:12px;font-family:'宋体';"> { </div> <div style="font-size:12px;font-family:'宋体';">          GroupCollection myGroup = nextMatch.Groups; </div> <div style="font-size:12px;font-family:'宋体';">          string type = myGroup["type"].ToString();//type变量存储multipart类型的名称 </div> <div style="font-size:12px;font-family:'宋体';">          string flag = myGroup["flag"].ToString();//flag变量存储multipart类型的boundary属性 </div> <div style="font-size:12px;font-family:'宋体';">          …… </div> <div style="font-size:12px;font-family:'宋体';"> } </div> <h2><span style="font-size:13px;">2.3  邮件附件的提取</span></h2> <div style="font-size:12px;font-family:'宋体';"> <strong>    </strong>邮件中的附件信息由对应的Content-Type域、Content-Transfer-Encoding域、Content-Disposition域和multipart/mixed类型定义,前三个域定义附件的类型、名称和编码方式,multipart/mixed则定义附件同邮件其它内容的分段标识。基本格式如下: </div> <div style="font-size:12px;font-family:'宋体';"> <table border="1"> <tbody> <tr> <td valign="top" width="211" style="font-size:12px;line-height:19px;font-family:'宋体';"> <div style="font-size:12px;font-family:'宋体';"> --boundary分段标识 </div> <div style="font-size:12px;font-family:'宋体';"> Content-Type: application/msword; </div> <div style="font-size:12px;font-family:'宋体';">          name="readme.doc" </div> <div style="font-size:12px;font-family:'宋体';"> Content-Transfer-Encoding: base64 </div> <div style="font-size:12px;font-family:'宋体';"> Content-Disposition: attachment; </div> <div style="font-size:12px;font-family:'宋体';">          filename=" readme.doc " </div> <div style="font-size:12px;font-family:'宋体';"> …… </div> <div style="font-size:12px;font-family:'宋体';"> 文件内容的Base64编码 </div> <div style="font-size:12px;font-family:'宋体';"> …… </div> <div style="font-size:12px;font-family:'宋体';"> --boundary分段标识 </div> </td> </tr> </tbody> </table> </div> <div style="font-size:12px;font-family:'宋体';"> <strong>    </strong>示例代码:提取邮件附件 </div> <div style="font-size:12px;font-family:'宋体';"> //boundaryMixed代表已经提取出的multipart/mixed类型的boundary标识 </div> <div style="font-size:12px;font-family:'宋体';"> //DecodeBase64为自定义的base64解码函数 </div> <div style="font-size:12px;font-family:'宋体';"> //DecodeQuotedPrintable为自定义的quoted-printable解码函数 </div> <div style="font-size:12px;font-family:'宋体';"> string emailContent = “……”;//emailContent中存储的是邮件内容 </div> <div style="font-size:12px;font-family:'宋体';"> string pat = @"\r\nContent-Type:\s*(?<filetype>\S*);\s*name=""(?<name>\S*)""\s*Content-Transfer-Encoding:\s*(?<encoding>\S*)\s*Content-Disposition:\s*attachment;\s*filename=""(?<filename>\S+)""\s+(?<content>[\S|\r\n]+)" + "--" + boundaryMixed; </div> <div style="font-size:12px;font-family:'宋体';"> MatchCollection myMatches = Regex.Matches(emailContent,pat,RegexOptions.Singleline);    </div> <div style="font-size:12px;font-family:'宋体';"> foreach(Match nextMatch in myMatches) </div> <div style="font-size:12px;font-family:'宋体';"> { </div> <div style="font-size:12px;font-family:'宋体';">          //提取附件的类型、编码方式、文件名、内容信息 </div> <div style="font-size:12px;font-family:'宋体';">          GroupCollection myGroup = nextMatch.Groups; </div> <div style="font-size:12px;font-family:'宋体';">          string fileType = myGroup["filetype"].ToString(); </div> <div style="font-size:12px;font-family:'宋体';">          string encoding = myGroup["encoding"].ToString(); </div> <div style="font-size:12px;font-family:'宋体';">          string fileName = myGroup["filename"].ToString(); </div> <div style="font-size:12px;font-family:'宋体';">          string content = myGroup["content"].ToString().Trim(); </div> <div style="font-size:12px;font-family:'宋体';">          byte[] attachFile; </div> <div style="font-size:12px;font-family:'宋体';">          //根据附件的编码方式对提取出的附件内容进行解码 </div> <div style="font-size:12px;font-family:'宋体';">          if(encoding == “base64”) </div> <div style="font-size:12px;font-family:'宋体';">          { </div> <div style="font-size:12px;font-family:'宋体';">                    attachFile = DecodeBase64 (content); </div> <div style="font-size:12px;font-family:'宋体';"> } </div> <div style="font-size:12px;font-family:'宋体';"> if(encoding == “quoted-printable”) </div> <div style="font-size:12px;font-family:'宋体';"> { </div> <div style="font-size:12px;font-family:'宋体';">                    attachFile = DecodeQuotedPrintable (content); </div> <div style="font-size:12px;font-family:'宋体';"> } </div> <div style="font-size:12px;font-family:'宋体';"> //将解码后的内容写入磁盘 </div>          FileStream fs = new FileStream("c:\\" + fileName, <div style="font-size:12px;font-family:'宋体';"> FileMode.CreateNew); </div> <div style="font-size:12px;font-family:'宋体';">          BinaryWriter bw = new BinaryWriter(fs); </div> <div style="font-size:12px;font-family:'宋体';">          bw.Write(attachFile); </div> <div style="font-size:12px;font-family:'宋体';">          bw.Close(); </div> <div style="font-size:12px;font-family:'宋体';">          fs.Close(); </div> <div style="font-size:12px;font-family:'宋体';"> } </div> <div style="font-size:12px;font-family:'宋体';"> <strong>    </strong>上面的程序从邮件原文中提取出附件信息,并根据附件采用的编码类型进行解码,然后将解码后的内容按照原文件名存储到C盘根目录。同样,如果附件的文件名是中文或者其它需要编码的文字,则首先需要对文件名进行解码。 </div> <h1><span style="font-size:16px;">3  总结</span></h1> <div style="font-size:12px;font-family:'宋体';"> <strong>    </strong>本文对MIME邮件的基本格式做了分析和阐述,介绍了MIME中几个重要的规范和定义,并给出了利用正则表达式从邮件内容中提取相关信息的基本思路和方法。在开发中需要注意的是,邮件中所含的内容决定了邮件的具体格式,multipart类型以及对应的分段标识只有在有相关内容的时候才会在邮件中出现,在开发时需要具体分析。MIME的详细技术规范可以查询RFC的相关文档 </div> <br> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1176946154525503488"></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">你可能感兴趣的:(MIME详解)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1881782447314628608.htm" title="卷积调制空间自注意力SPATIALatt模型详解及代码复现" target="_blank">卷积调制空间自注意力SPATIALatt模型详解及代码复现</a> <span class="text-muted">清风AI</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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/conda/1.htm">conda</a> <div>背景与意义SPATIALaTT模型的提出源于对自注意力机制和卷积神经网络(CNN)的深入研究。在计算机视觉领域,CNN长期占据主导地位,而自注意力机制的引入为视觉任务带来了新的思路。SPATIALaTT模型的意义在于融合了这两种强大的特征提取方法,充分发挥了它们的优势。这种融合不仅提高了模型的性能,还为设计更高效的视觉模型提供了新的思路,推动了计算机视觉技术的发展。通过结合自注意力机制和卷积神经网</div> </li> <li><a href="/article/1881779297606234112.htm" title="Python学习:Pandas库使用(二)之读写Excel文件——read_excel()和to_excel()函数及其参数详解" target="_blank">Python学习:Pandas库使用(二)之读写Excel文件——read_excel()和to_excel()函数及其参数详解</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/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/pandas/1.htm">pandas</a> <div>在Python的Pandas库中,读取和写入Excel文件主要使用read_excel和to_excel函数。以下是详细用法和示例:1.读取Excel文件:pd.read_excel()importpandasaspd#读取Excel文件df=pd.read_excel('文件路径.xlsx',sheet_name='Sheet1',header=0,usecols='A:C',skiprows=</div> </li> <li><a href="/article/1881773368219332608.htm" title="Ruby语言详解" target="_blank">Ruby语言详解</a> <span class="text-muted">编程小郭</span> <a class="tag" taget="_blank" href="/search/ruby/1.htm">ruby</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/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>Ruby语言详解Ruby,作为一种简单快捷的面向对象脚本语言,自20世纪90年代由日本人松本行弘(YukihiroMatsumoto)开发以来,便以其独特的魅力和强大的功能赢得了全球开发者的青睐。Ruby不仅继承了Perl、Smalltalk、Eiffel、Ada以及Lisp等多种语言的优点,还发展出了自己的特色和风格。一、Ruby语言的特点面向对象:Ruby从一开始就被设计成纯粹的面向对象语言,</div> </li> <li><a href="/article/1881773241186447360.htm" title="Swift语言的函数实现" target="_blank">Swift语言的函数实现</a> <span class="text-muted">2501_90183952</span> <a class="tag" taget="_blank" href="/search/%E5%8C%85%E7%BD%97%E4%B8%87%E8%B1%A1/1.htm">包罗万象</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</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/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>Swift语言函数实现详解引言Swift是一种强类型、泛型编程的现代编程语言,广泛应用于iOS和macOS开发。函数是Swift编程中的基本构建块之一,通过函数可以将代码进行模块化,实现重用性和可读性。本篇文章将系统地介绍Swift中的函数,包括其定义、参数、返回值、闭包和高阶函数等,实现一些实用的示例,帮助读者更好地理解和掌握Swift的函数特性。一、函数的基本概念函数是执行特定任务的一段代码,</div> </li> <li><a href="/article/1881771727260807168.htm" title="ReactNative进阶(三十五):应用脚手架 Yo 构建 RN 页面_reactnative 脚手架" target="_blank">ReactNative进阶(三十五):应用脚手架 Yo 构建 RN 页面_reactnative 脚手架</a> <span class="text-muted">2401_84438654</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a> <div>算法冒泡排序选择排序快速排序二叉树查找:最大值、最小值、固定值二叉树遍历二叉树的最大深度给予链表中的任一节点,把它删除掉链表倒叙如何判断一个单链表有环由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】sudo</div> </li> <li><a href="/article/1881762774325981184.htm" title="Redis实战之Jedis使用技巧详解" target="_blank">Redis实战之Jedis使用技巧详解</a> <span class="text-muted">小马不敲代码</span> <a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%88%98/1.htm">实战</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>一、前言基于redis开放的通信协议,大神们纷纷开发了各种语言的redis客户端,有c、c++、java、python、php、nodeJs等等开发语言的客户端,准确来说其实这些客户端都是基于redis命令做了一层封装,然后打包成工具以便大家更佳方便的操作redis,以Java项目为例,使用最广的就是以下三种客户端:JedisLettuceRedisson二、JedisJedis是老牌的Redis</div> </li> <li><a href="/article/1881757980454612992.htm" title="【Spring】Spring DI(依赖注入)详解——注入参数的细节处理-内部Bean的注入" target="_blank">【Spring】Spring DI(依赖注入)详解——注入参数的细节处理-内部Bean的注入</a> <span class="text-muted">AI人H哥会Java</span> <a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>引言在现代Java开发中,Spring框架已经成为了构建企业级应用的标准工具之一。Spring的核心特性之一就是依赖注入(DependencyInjection,DI),它通过将对象的依赖关系从代码中解耦出来,提升了代码的可维护性和可测试性。特别是在大型项目中,良好的依赖管理能够显著降低代码的复杂度,提高开发效率。依赖注入的基本概念依赖注入是一种设计模式,用于实现控制反转(InversionofC</div> </li> <li><a href="/article/1881748024112246784.htm" title="UniCloud 完整入门指南" target="_blank">UniCloud 完整入门指南</a> <span class="text-muted">九情丶</span> <a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>UniCloud完整入门指南目录什么是UniCloud为什么选择UniCloud快速开始基础概念核心功能最佳实践常见问题高级功能详解开发工具部署和运维最新特性和更新什么是UniCloudUniCloud是DCloud推出的基于serverless模式和js编程的云开发平台。它让不会后端的前端工程师可以快速完成整栈开发,让开发者专注于业务实现,而无需关心服务器运维等繁琐事务。主要特点基于server</div> </li> <li><a href="/article/1881743482888974336.htm" title="服务端渲染(SSR)与客户端渲染(CSR)详解" target="_blank">服务端渲染(SSR)与客户端渲染(CSR)详解</a> <span class="text-muted">创意锦囊</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>1.背景与概念在早期Web时代,网页主要是静态HTML页面,用户点击链接后会刷新整个页面。随着网络与前端技术的发展,人们开始追求更好的页面性能与用户体验,尤其是在移动端和实时交互场景下,对于页面加载速度的要求不断提升。渲染是指如何将数据转换成可视化的页面输出给用户。渲染策略的不同主要体现在在哪个环节完成页面DOM结构的组装:服务端渲染(SSR,Server-SideRendering):在服务器将</div> </li> <li><a href="/article/1881737298370949120.htm" title="Transformer架构原理详解:编码器(Encoder)和解码器(Decoder)" target="_blank">Transformer架构原理详解:编码器(Encoder)和解码器(Decoder)</a> <span class="text-muted">AI大模型应用之禅</span> <a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%B8%8E%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">AI大模型与大数据</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/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>Transformer,编码器,解码器,自注意力机制,多头注意力,位置编码,序列到序列,自然语言处理1.背景介绍近年来,深度学习在自然语言处理(NLP)领域取得了显著进展,其中Transformer架构扮演着至关重要的角色。自2017年谷歌发布了基于Transformer的机器翻译模型BERT以来,Transformer及其变体在各种NLP任务上取得了突破性的成果,例如文本分类、问答系统、文本摘要</div> </li> <li><a href="/article/1881727216333680640.htm" title="python etree模块所有函数详解_09.XML处理之etree模块" target="_blank">python etree模块所有函数详解_09.XML处理之etree模块</a> <span class="text-muted">weixin_39878401</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/etree%E6%A8%A1%E5%9D%97%E6%89%80%E6%9C%89%E5%87%BD%E6%95%B0%E8%AF%A6%E8%A7%A3/1.htm">etree模块所有函数详解</a> <div>本主题主要说明python的xml处理标准模块xml.etree的使用。xml.etree模块包含4个子模块,其中cElementTree是ElementTree的别名,已经不推荐使用。本主题主要包含内容:1.ElementInclude模块使用2.ElementPath模块使用3.ElementTree模块使用一、etree模块帮助importxml.etreehelp(xml.etree)He</div> </li> <li><a href="/article/1881715732153167872.htm" title="Python正则表达式详解" target="_blank">Python正则表达式详解</a> <span class="text-muted">程序员老华</span> <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/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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/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> <div>正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的。下面,我来介绍一下python中的正则表达式是怎么使用的。首先,python中的正则表达</div> </li> <li><a href="/article/1881715101778636800.htm" title="Python爬虫工具BeautifulSoup使用详解" target="_blank">Python爬虫工具BeautifulSoup使用详解</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/beautifulsoup/1.htm">beautifulsoup</a> <div>目录一、模块简介二、方法利用1、安装beautifulsoup2、引入模块3、选择解析器解析指定内容三、具体利用1、获取拥有指定属性的标签2、获取标签的属性值3、获取标签中的内容4、stripped_strings四、输出1、格式化输出prettify()2、get_text()一、模块简介BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换</div> </li> <li><a href="/article/1881706148848005120.htm" title="Linux(Centos 7.6)命令详解:dos2unix" target="_blank">Linux(Centos 7.6)命令详解:dos2unix</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/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>1.命令作用将Windows格式文件件转换为Unix、Linux格式的文件(也可以转换成其他格式的)2.命令语法Usage:dos2unix[options][file...][-ninfileoutfile...]3.参数详解options:-c,--convmode,转换方式,支持ascii,7bit,iso,mac,默认为ascii-f,--force,强制转换二进制文件-k,--keepd</div> </li> <li><a href="/article/1881705901132410880.htm" title="deepin-grep详解:文本搜索的强大工具" target="_blank">deepin-grep详解:文本搜索的强大工具</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/deepin/1.htm">deepin</a> <div>在Linux系统中,grep命令是一个极其强大的文本搜索工具,广泛应用于文本处理、日志分析和数据筛选等场景。它的全称是“GlobalsearchREgularexpressionandPrintouttheline”,即全局搜索正则表达式并打印匹配的行。本文将详细介绍grep命令的基本用法、常用选项以及正则表达式的使用技巧。1.grep命令的基本功能grep命令的主要作用是从文本文件或管道数据流中</div> </li> <li><a href="/article/1881701609331814400.htm" title="Debian常用命令详解" target="_blank">Debian常用命令详解</a> <span class="text-muted">-龙川-</span> <a class="tag" taget="_blank" href="/search/%E4%BB%8B%E7%BB%8D/1.htm">介绍</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a><a class="tag" taget="_blank" href="/search/debian/1.htm">debian</a> <div>Debian是一个广泛使用的Linux发行版,以其稳定性和包管理系统的丰富性著称。对于新手和经验丰富的系统管理员来说,掌握常用的Debian命令至关重要。这篇文章将详细介绍Debian系统中常用的命令,包括文件和目录操作、软件包管理、用户和权限管理、系统监控和网络管理等多个方面。一、文件和目录操作1.ls-列出目录内容ls命令用于列出目录中的文件和子目录。ls常用选项:-l:以长格式显示详细信息。</div> </li> <li><a href="/article/1881699718413742080.htm" title="python中lxml 库之 etree 使用详解" target="_blank">python中lxml 库之 etree 使用详解</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录一、etree介绍二、xpath解析html/xml1、第一步就是使用etree连接html/xml代码/文件。2、xpath表达式定位①xpath结合属性定位②xpath文本定位及获取③xpath层级定位④xpath索引定位⑤xpath模糊匹配一、etree介绍lxml库是Python中一个强大的XML处理库,简单来说,etree模块提供了一个简单而灵活的API来解析和操作XML/HTML文</div> </li> <li><a href="/article/1881698076209508352.htm" title="【大模型】Spring AI对接ChatGpt使用详解" target="_blank">【大模型】Spring AI对接ChatGpt使用详解</a> <span class="text-muted">小码农叔叔</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%B2%BB%E7%90%86%E4%B8%8E%E5%AE%9E%E6%88%98/1.htm">微服务治理与实战</a><a class="tag" taget="_blank" href="/search/springboot/1.htm">springboot</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/1.htm">入门到精通</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/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/Aspring/1.htm">Aspring</a><a class="tag" taget="_blank" href="/search/Ai/1.htm">Ai</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/ai%E5%AF%B9%E6%8E%A5gpt/1.htm">ai对接gpt</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/ai%E6%95%B4%E5%90%88gpt/1.htm">ai整合gpt</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/ai%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3/1.htm">ai使用详解</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/ai%E4%BD%BF%E7%94%A8/1.htm">ai使用</a> <div>目录一、前言二、springai介绍2.1什么是SpringAI2.2SpringAI特点2.3SpringAI为开发带来的便利2.4SpringAI应用领域2.4.1聊天模型2.4.2文本到图像模型2.4.3音频转文本2.4.4嵌入大模型使用2.4.5矢量数据库支持2.4.6用于数据工程ETL框架三、SpringAI对接ChatGPT3.1前置准备3.2添加依赖3.3接入流程3.3.1配置文件3</div> </li> <li><a href="/article/1881685214644727808.htm" title="深入解析框架适配开发:基于CANN平台的自定义算子开发与第三方框架适配全流程详解" target="_blank">深入解析框架适配开发:基于CANN平台的自定义算子开发与第三方框架适配全流程详解</a> <span class="text-muted">快撑死的鱼</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E6%98%87%E8%85%BE/1.htm">华为昇腾</a><a class="tag" taget="_blank" href="/search/Ascend/1.htm">Ascend</a><a class="tag" taget="_blank" href="/search/C%E7%9A%84%E7%AE%97%E5%AD%90%E5%BC%80%E5%8F%91%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0/1.htm">C的算子开发系统学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>深入解析框架适配开发:基于CANN平台的自定义算子开发与第三方框架适配全流程详解随着深度学习的发展,不同的深度学习框架如TensorFlow、PyTorch、ONNX等在AI开发者社区中占据了重要地位。然而,针对某些硬件平台(如华为昇腾AI处理器),算子库中的算子并非都已经适配了所有主流框架。为了解决这一问题,框架适配开发应运而生,它允许开发者将已存在于算子库中的算子适配到其他未支持的第三方框架上</div> </li> <li><a href="/article/1881677644878114816.htm" title="【微服务】Spring AI 使用详解" target="_blank">【微服务】Spring AI 使用详解</a> <span class="text-muted">逆风飞翔的小叔</span> <a class="tag" taget="_blank" href="/search/%E7%B2%BE%E9%80%9Aspringboot%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">精通springboot微服务</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/AI%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3/1.htm">AI使用详解</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/AI%E4%BD%BF%E7%94%A8/1.htm">AI使用</a> <div>目录一、前言二、SpringAI概述2.1什么是SpringAI2.2SpringAI特点2.3SpringAI带来的便利2.4SpringAI应用领域2.4.1聊天模型2.4.2文本到图像模型2.4.3音频转文本2.4.4嵌入大模型使用2.4.5矢量数据库支持2.4.6数据工程ETL框架三、SpringAI对接ChatGPT3.1前置准备3.2添加必要的依赖3.3接入操作流程3.3.1配置文件3</div> </li> <li><a href="/article/1881674233445150720.htm" title="机器算法之逻辑回归(Logistic Regression)详解" target="_blank">机器算法之逻辑回归(Logistic Regression)详解</a> <span class="text-muted">HappyAcmen</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95%E5%90%88%E9%9B%86/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%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92/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>一、什么是逻辑回归?逻辑回归并不是传统意义上的回归分析,而是一种用于处理二分类问题的线性模型。它通过计算样本属于某一类别的概率来进行分类,尽管名字中有“回归”二字,但它实际上是一种分类算法。简单来说,逻辑回归回答的是“这件事发生的可能性有多大”。二、逻辑回归的基本原理在讲原理之前,我们先来了解一下逻辑回归的数学基础。逻辑回归的核心是一个Logistic函数(或称为Sigmoid函数),它的公式如下</div> </li> <li><a href="/article/1881672332104232960.htm" title="Python 爱心代码实现动态爱心图案展示" target="_blank">Python 爱心代码实现动态爱心图案展示</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/python/1.htm">python</a> <div>引言在Python中,我们可以利用tkinter库来创建有趣的图形界面,本文将为大家分享一段使用tkinter库绘制动态爱心图案的代码,并详细介绍其实现逻辑与运行方法。一、代码功能概述这段Python代码借助tkinter库创建了一个窗口,在该窗口中能够绘制出一个动态的爱心图案,效果十分美观,接下来我们一起看看代码的具体内容。二、代码详解(一)导入必要的库和模块importrandomfromma</div> </li> <li><a href="/article/1881669935306960896.htm" title="【C++项目实战】类和对象入门实践:日期类实现万字详解" target="_blank">【C++项目实战】类和对象入门实践:日期类实现万字详解</a> <span class="text-muted">倔强的石头_</span> <a class="tag" taget="_blank" href="/search/C%2B%2B%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">C++项目实战</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>博客主页:倔强的石头的CSDN主页Gitee主页:倔强的石头的gitee主页⏩文章专栏:《C++项目实战》期待您的关注目录引言介绍一、类的设计二、成员函数的实现构造函数、析构函数、拷贝构造函数和赋值运算符重载友元函数:重载>>和#includeusingnamespacestd;classDate{public://友元函数声明friendostream&operator>(istream&in,</div> </li> <li><a href="/article/1881666783044235264.htm" title="Hive PERCENTILE_APPROX 函数详解" target="_blank">Hive PERCENTILE_APPROX 函数详解</a> <span class="text-muted">_Magic</span> <a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a> <div>HivePERCENTILE_APPROX函数详解PERCENTILE_APPROX是Hive中一个重要的函数,用于近似计算数据的百分位数。本文介绍PERCENTILE_APPROX的原理、参数以及核心概念B值等信息。函数语法PERCENTILE_APPROX(expression,percentage[,B])expression:输入的数值列,通常是需要计算百分位数的字段。percentage</div> </li> <li><a href="/article/1881656945165791232.htm" title="详解类与对象——继承" target="_blank">详解类与对象——继承</a> <span class="text-muted">tanactor</span> <a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>(^_^)一.基本语法继承的好处:可以减少重复的代码classA:publicB;A类称为子类或派生类B类称为父类或基类派生类中的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员。从基类继承过过来的表现其共性,而新增的成员体现了其个性。//公共页面classBasePage{public:voidheader(){cout<<"首页、公开课、登录、注册...(公共头部)"<<end</div> </li> <li><a href="/article/1881654927068033024.htm" title="万字详解 | SQL 多表联合查询方法,收藏直接起飞!" target="_blank">万字详解 | SQL 多表联合查询方法,收藏直接起飞!</a> <span class="text-muted">花辞树sy</span> <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/mysql/1.htm">mysql</a> <div>为什么需要多张数据库表进行查询呢?因为如果设计成一张表会造成数据冗余,造成数据库空间浪费,然而有时我们需要将多张表的数据整合并且查询出来,这时就需要通过表之间的主外键关联在一起进行查询。查看获取表结构信息,根据表结构信进行连表查询mysql> use school;mysql> show tables;+------------------+| Tables_in_school |+-------</div> </li> <li><a href="/article/1881654421771841536.htm" title="Hive SQL 分组与连接操作详解" target="_blank">Hive SQL 分组与连接操作详解</a> <span class="text-muted">大数据深度洞察</span> <a class="tag" taget="_blank" href="/search/Hive/1.htm">Hive</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/hive/1.htm">hive</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%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>目录分组GroupBy语句1.案例实操Having语句1.having与where不同点2.案例实操Join语句等值Join1.案例实操表的别名1.好处2.案例实操内连接左外连接右外连接满外连接多表连接1.创建位置表2.导入数据3.多表连接查询笛卡尔集1.笛卡尔集会在下面条件下产生2.案例实操联合(union&unionall)1.union&unionall上下拼接2.案例实操分组GroupBy</div> </li> <li><a href="/article/1881650006562238464.htm" title="MySQL多表连接查询详解与实例" target="_blank">MySQL多表连接查询详解与实例</a> <span class="text-muted">Imaginaerum02</span> <a class="tag" taget="_blank" href="/search/mysql/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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>目录内连接查询等值连接查询对连接后的查询结果,筛选、分组、排序、过滤非等值连接查询左连接右连接全外连接嵌套查询where之后嵌套查询having之后嵌套查询from之后嵌套查询(其使用效果不如内连接)select之后嵌套查询连接查询连接类型:内连接:innerjoin外联接:左外连接:leftjoin右外连接:rightjoin全外连接:union[all]连接方式:交叉连接:等值连接:不等值连接</div> </li> <li><a href="/article/1881648619799506944.htm" title="JAVA:MyBatis 缓存机制详解的技术指南" target="_blank">JAVA:MyBatis 缓存机制详解的技术指南</a> <span class="text-muted">拾荒的小海螺</span> <a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>1、简述MyBatis是Java开发中常用的持久层框架之一,通过面向对象的方式操作数据库。为了提高系统性能,MyBatis提供了两级缓存机制:一级缓存(本地缓存)和二级缓存(全局缓存)。本文将详细讲解MyBatis缓存机制的使用原理、配置方法,并通过示例展示如何合理地使用缓存优化数据访问效率。2、基础原理2.1一级缓存作用范围:一级缓存是基于SqlSession级别的缓存,即在同一个SqlSess</div> </li> <li><a href="/article/1881642559059587072.htm" title="JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)" target="_blank">JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)</a> <span class="text-muted">watermelo37</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%23/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/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/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/%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> <div>目录JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)一、什么时候该使用Array.map(),与forEach()的区别是什么?1、什么时候该用Array.map()2、Array.map()与Array.forEach()的区别二、Array.map()的使用与</div> </li> <li><a href="/article/13.htm" title="github中多个平台共存" target="_blank">github中多个平台共存</a> <span class="text-muted">jackyrong</span> <a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>在个人电脑上,如何分别链接比如oschina,github等库呢,一般教程之列的,默认 ssh链接一个托管的而已,下面讲解如何放两个文件 1) 设置用户名和邮件地址 $ git config --global user.name "xx" $ git config --global user.email "test@gmail.com"</div> </li> <li><a href="/article/140.htm" title="ip地址与整数的相互转换(javascript)" target="_blank">ip地址与整数的相互转换(javascript)</a> <span class="text-muted">alxw4616</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>//IP转成整型 function ip2int(ip){ var num = 0; ip = ip.split("."); num = Number(ip[0]) * 256 * 256 * 256 + Number(ip[1]) * 256 * 256 + Number(ip[2]) * 256 + Number(ip[3]); n</div> </li> <li><a href="/article/267.htm" title="读书笔记-jquey+数据库+css" target="_blank">读书笔记-jquey+数据库+css</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>1、grouping ,group by rollup, GROUP BY GROUPING SETS区别 2、$("#totalTable tbody>tr td:nth-child(" + i + ")").css({"width":tdWidth, "margin":"0px", &q</div> </li> <li><a href="/article/394.htm" title="javaSE javaEE javaME == API下载" target="_blank">javaSE javaEE javaME == API下载</a> <span class="text-muted">Array_06</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>oracle下载各种API文档: http://www.oracle.com/technetwork/java/embedded/javame/embed-me/documentation/javame-embedded-apis-2181154.html JavaSE文档: http://docs.oracle.com/javase/8/docs/api/ JavaEE文档: ht</div> </li> <li><a href="/article/521.htm" title="shiro入门学习" target="_blank">shiro入门学习</a> <span class="text-muted">cugfy</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a> <div>声明本文只适合初学者,本人也是刚接触而已,经过一段时间的研究小有收获,特来分享下希望和大家互相交流学习。 首先配置我们的web.xml代码如下,固定格式,记死就成 <filter>         <filter-name>shiroFilter</filter-name> &nbs</div> </li> <li><a href="/article/648.htm" title="Array添加删除方法" target="_blank">Array添加删除方法</a> <span class="text-muted">357029540</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a> <div>     刚才做项目前台删除数组的固定下标值时,删除得不是很完整,所以在网上查了下,发现一个不错的方法,也提供给需要的同学。 //给数组添加删除             Array.prototype.del = function(n){ </div> </li> <li><a href="/article/775.htm" title="navigation bar 更改颜色" target="_blank">navigation bar 更改颜色</a> <span class="text-muted">张亚雄</span> <a class="tag" taget="_blank" href="/search/IO/1.htm">IO</a> <div>今天郁闷了一下午,就因为objective-c默认语言是英文,我写的中文全是一些乱七八糟的样子,到不是乱码,但是,前两个自字是粗体,后两个字正常体,这可郁闷死我了,问了问大牛,人家告诉我说更改一下字体就好啦,比如改成黑体,哇塞,茅塞顿开。       翻书看,发现,书上有介绍怎么更改表格中文字字体的,代码如下    </div> </li> <li><a href="/article/902.htm" title="unicode转换成中文" target="_blank">unicode转换成中文</a> <span class="text-muted">adminjun</span> <a class="tag" taget="_blank" href="/search/unicode/1.htm">unicode</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81%E8%BD%AC%E6%8D%A2/1.htm">编码转换</a> <div>  在Java程序中总会出现\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5这个的字符,这是unicode编码,使用时有时候不会自动转换成中文就需要自己转换了使用下面的方法转换一下即可。 /** * unicode 转换成 中文 </div> </li> <li><a href="/article/1029.htm" title="一站式 Java Web 框架 firefly" target="_blank">一站式 Java Web 框架 firefly</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a> <div>Firefly是一个高性能一站式Web框架。 涵盖了web开发的主要技术栈。 包含Template engine、IOC、MVC framework、HTTP Server、Common tools、Log、Json parser等模块。 firefly-2.0_07修复了模版压缩对javascript单行注释的影响,并新增了自定义错误页面功能。 更新日志: 增加自定义系统错误页面功能</div> </li> <li><a href="/article/1156.htm" title="设计模式——单例模式" target="_blank">设计模式——单例模式</a> <span class="text-muted">ayaoxinchao</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>定义          Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。”   分析          从定义中可以看出单例的要点有三个:一是某个类只能有一个实例;二是必须自行创建这个实例;三是必须自行向系统提供这个实例。   &nb</div> </li> <li><a href="/article/1283.htm" title="Javascript 多浏览器兼容性问题及解决方案" target="_blank">Javascript 多浏览器兼容性问题及解决方案</a> <span class="text-muted">BigBird2012</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>不论是网站应用还是学习js,大家很注重ie与firefox等浏览器的兼容性问题,毕竟这两中浏览器是占了绝大多数。 一、document.formName.item(”itemName”) 问题 问题说明:IE下,可以使用 document.formName.item(”itemName”) 或 document.formName.elements ["elementName&quo</div> </li> <li><a href="/article/1410.htm" title="JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误" target="_blank">JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/junit4.11/1.htm">junit4.11</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a> <div>        下载了最新的JUnit版本,是4.11,结果尝试使用发现总是报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing这样的错误,上网查了一下,一般的解决方案是,换一个低一点的版本就好了。还有人说,是缺少hamcrest的包。去官网看了一下,如下发现:    </div> </li> <li><a href="/article/1537.htm" title="[Zookeeper学习笔记之二]Zookeeper部署脚本" target="_blank">[Zookeeper学习笔记之二]Zookeeper部署脚本</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a> <div>Zookeeper伪分布式安装脚本(此脚本在一台机器上创建Zookeeper三个进程,即创建具有三个节点的Zookeeper集群。这个脚本和zookeeper的tar包放在同一个目录下,脚本中指定的名字是zookeeper的3.4.6版本,需要根据实际情况修改):   #!/bin/bash #!!!Change the name!!! #The zookeepe</div> </li> <li><a href="/article/1664.htm" title="【Spark八十】Spark RDD API二" target="_blank">【Spark八十】Spark RDD API二</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a> <div>coGroup package spark.examples.rddapi import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.SparkContext._ object CoGroupTest_05 { def main(args: Array[String]) { v</div> </li> <li><a href="/article/1791.htm" title="Linux中编译apache服务器modules文件夹缺少模块(.so)的问题" target="_blank">Linux中编译apache服务器modules文件夹缺少模块(.so)的问题</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/modules/1.htm">modules</a> <div>在modules目录中只有httpd.exp,那些so文件呢? 我尝试在fedora core 3中安装apache 2. 当我解压了apache 2.0.54后使用configure工具并且加入了 --enable-so 或者 --enable-modules=so (两个我都试过了) 去make并且make install了。我希望在/apache2/modules/目录里有各种模块,</div> </li> <li><a href="/article/1918.htm" title="Java基础-克隆" target="_blank">Java基础-克隆</a> <span class="text-muted">BrokenDreams</span> <a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a> <div>        Java中怎么拷贝一个对象呢?可以通过调用这个对象类型的构造器构造一个新对象,然后将要拷贝对象的属性设置到新对象里面。Java中也有另一种不通过构造器来拷贝对象的方式,这种方式称为 克隆。         Java提供了java.lang.</div> </li> <li><a href="/article/2045.htm" title="读《研磨设计模式》-代码笔记-适配器模式-Adapter" target="_blank">读《研磨设计模式》-代码笔记-适配器模式-Adapter</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/ package design.pattern; /* * 适配器模式解决的主要问题是,现有的方法接口与客户要求的方法接口不一致 * 可以这样想,我们要写这样一个类(Adapter): * 1.这个类要符合客户的要求 ---> 那显然要</div> </li> <li><a href="/article/2172.htm" title="HDR图像PS教程集锦&心得" target="_blank">HDR图像PS教程集锦&心得</a> <span class="text-muted">cherishLC</span> <a class="tag" taget="_blank" href="/search/PS/1.htm">PS</a> <div>HDR是指高动态范围的图像,主要原理为提高图像的局部对比度。 软件有photomatix和nik hdr efex。 一、教程 叶明在知乎上的回答: http://www.zhihu.com/question/27418267/answer/37317792 大意是修完后直方图最好是等值直方图,方法是HDR软件调一遍,再结合不透明度和蒙版细调。 二、心得 1、去除阴影部分的</div> </li> <li><a href="/article/2299.htm" title="maven-3.3.3 mvn archetype 列表" target="_blank">maven-3.3.3 mvn archetype 列表</a> <span class="text-muted">crabdave</span> <a class="tag" taget="_blank" href="/search/ArcheType/1.htm">ArcheType</a> <div>maven-3.3.3 mvn archetype 列表 可以参考最新的:http://repo1.maven.org/maven2/archetype-catalog.xml   [INFO] Scanning for projects... [INFO]                 </div> </li> <li><a href="/article/2426.htm" title="linux shell 中文件编码查看及转换方法" target="_blank">linux shell 中文件编码查看及转换方法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">中文乱码</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E7%BC%96%E7%A0%81/1.htm">文件编码</a> <div>一、查看文件编码。     在打开文件的时候输入:set fileencoding     即可显示文件编码格式。 二、文件编码转换     1、在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式       &</div> </li> <li><a href="/article/2553.htm" title="MySQL--binlog日志恢复数据" target="_blank">MySQL--binlog日志恢复数据</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/binlog/1.htm">binlog</a> <div> 恢复数据的重要命令如下 mysql> flush logs; 默认的日志是mysql-bin.000001,现在刷新了重新开启一个就多了一个mysql-bin.000002                  </div> </li> <li><a href="/article/2680.htm" title="数据库中数据表数据迁移方法" target="_blank">数据库中数据表数据迁移方法</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>刚开始想想好像挺麻烦的,后来找到一种方法了,就SQL中的 INSERT 语句,不过内容是现从另外的表中查出来的,其实就是 MySQL中INSERT INTO SELECT的使用   下面看看如何使用   语法:MySQL中INSERT INTO SELECT的使用 1. 语法介绍       有三张表a、b、c,现在需要从表b</div> </li> <li><a href="/article/2807.htm" title="Java反转字符串" target="_blank">Java反转字符串</a> <span class="text-muted">dyy_gusi</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">反转字符串</a> <div>       前几天看见一篇文章,说使用Java能用几种方式反转一个字符串。首先要明白什么叫反转字符串,就是将一个字符串到过来啦,比如"倒过来念的是小狗"反转过来就是”狗小是的念来过倒“。接下来就把自己能想到的所有方式记录下来了。 1、第一个念头就是直接使用String类的反转方法,对不起,这样是不行的,因为Stri</div> </li> <li><a href="/article/2934.htm" title="UI设计中我们为什么需要设计动效" target="_blank">UI设计中我们为什么需要设计动效</a> <span class="text-muted">gcq511120594</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>随着国际大品牌苹果和谷歌的引领,最近越来越多的国内公司开始关注动效设计了,越来越多的团队已经意识到动效在产品用户体验中的重要性了,更多的UI设计师们也开始投身动效设计领域。 但是说到底,我们到底为什么需要动效设计?或者说我们到底需要什么样的动效?做动效设计也有段时间了,于是尝试用一些案例,从产品本身出发来说说我所思考的动效设计。 一、加强体验舒适度 嗯,就是让用户更加爽更加爽的用</div> </li> <li><a href="/article/3061.htm" title="JBOSS服务部署端口冲突问题" target="_blank">JBOSS服务部署端口冲突问题</a> <span class="text-muted">HogwartsRow</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/jboss/1.htm">jboss</a><a class="tag" taget="_blank" href="/search/server/1.htm">server</a><a class="tag" taget="_blank" href="/search/EJB3/1.htm">EJB3</a> <div>服务端口冲突问题的解决方法,一般修改如下三个文件中的部分端口就可以了。   1、jboss5/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml   2、./server/default/deploy/jbossweb.sar/server.xml   3、.</div> </li> <li><a href="/article/3188.htm" title="第三章 Redis/SSDB+Twemproxy安装与使用" target="_blank">第三章 Redis/SSDB+Twemproxy安装与使用</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/ssdb/1.htm">ssdb</a><a class="tag" taget="_blank" href="/search/reids/1.htm">reids</a><a class="tag" taget="_blank" href="/search/twemproxy/1.htm">twemproxy</a> <div>目前对于互联网公司不使用Redis的很少,Redis不仅仅可以作为key-value缓存,而且提供了丰富的数据结果如set、list、map等,可以实现很多复杂的功能;但是Redis本身主要用作内存缓存,不适合做持久化存储,因此目前有如SSDB、ARDB等,还有如京东的JIMDB,它们都支持Redis协议,可以支持Redis客户端直接访问;而这些持久化存储大多数使用了如LevelDB、RocksD</div> </li> <li><a href="/article/3315.htm" title="ZooKeeper原理及使用 " target="_blank">ZooKeeper原理及使用 </a> <span class="text-muted">liyonghui160com</span> <div>           ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby。今天这篇文章分为三个部分来介绍ZooKeeper,第一部分介绍ZooKeeper的基本原理,第二部分介绍ZooKeeper</div> </li> <li><a href="/article/3442.htm" title="程序员解决问题的60个策略" target="_blank">程序员解决问题的60个策略</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a> <div>根本的指导方针 1. 首先写代码的时候最好不要有缺陷。最好的修复方法就是让 bug 胎死腹中。 良好的单元测试 强制数据库约束 使用输入验证框架 避免未实现的“else”条件 在应用到主程序之前知道如何在孤立的情况下使用   日志 2. print 语句。往往额外输出个一两行将有助于隔离问题。 3. 切换至详细的日志记录。详细的日</div> </li> <li><a href="/article/3569.htm" title="Create the Google Play Account" target="_blank">Create the Google Play Account</a> <span class="text-muted">sillycat</span> <a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a> <div>Create the Google Play Account Having a Google account, pay 25$, then you get your google developer account. References: http://developer.android.com/distribute/googleplay/start.html https://p</div> </li> <li><a href="/article/3696.htm" title="JSP三大指令" target="_blank">JSP三大指令</a> <span class="text-muted">vikingwei</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div>JSP三大指令   一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info="xxx"...%>   * pageEncoding和contentType:     > pageEncoding:它</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>