详解Office Add-in 清单文件


作者:陈希章 发表于2017年12月8日

前言

我们都知道,一个Office Add-in,最主要是由两个部分组成的:清单文件(manifest)和真正要用来执行的网站。

详解Office Add-in 清单文件_第1张图片

清单文件其实是一个标准的XML文件,它有固定的Schema。目前来说,最新版本的清单文件必须指定“http://schemas.microsoft.com/office/appforoffice/1.1”作为Schema,否则某些功能可能不能正常工作。当然,指定Schema这件事情你可能不太会需要手工去做,毕竟不管你是用Visual Studio的项目模板,还是用其他开发工具(例如Visual Studio Code),清单文件都是自动生成的,而且默认就已经指定了1.1这个版本。下面两篇文章介绍了如何在不同工具开始office Add-in的开发。

  • 在Visual Studio 中开发Office Add-in
  • 在Visual Studio Code中开发Office Add-in

一个典型的清单文件看起来是下面这样的

详解Office Add-in 清单文件_第2张图片

在Visual Studio中,有时候会用可视化界面,取代纯文本的XML编辑界面,例如下面这样

详解Office Add-in 清单文件_第3张图片

平胸而论,Visual Studio 提供了对于清单文件的最佳编辑体验,因为它会自动根据Schema提供智能感知,甚至如你刚才看到的那样,它甚至提供了可视化界面,我爱死这个功能了。

下面我会从三个方面分别对清单文件进行详细介绍

  1. 基本属性定义
  2. 通过清单文件自定义Ribbon和快捷菜单
  3. 通过清单文件是实现多语言支持

基本属性定义

清单文件中的根元素是OfficeApp,这里会指定几个namespace,但同时会有一个至关重要的属性:xsi:type,目前我们支持三种不同类型的Office Add-in,分别是

  1. ContentApp,这是内容应用,主要是在Excel和PowerPoint中能用。通过这类Add-in,可以为宿主程序添加自定义的内容元素,例如一个自定义地图之类的。
  2. TaskPaneApp,这是应用最广的类型。通过这类Add-in,可以为宿主程序添加自定义的功能,例如通过一个自定义菜单,执行某些操作。
  3. MailApp,这是专用于Outlook的Add-in。

除此之外,OfficeApp这个根元素,还需要包含如下的基本元素

  1. Id,唯一的编号(一个GUID)
  2. Version,这个版本信息在你更新时可能需要修改
  3. ProviderName,作者及公司信息
  4. DefaultLocale,默认的语言,格式是类似于en-US这样的。我在下面还会介绍多语言支持的功能
  5. DisplayName,显示名称
  6. Description,描述
  7. IconUrl,图标文件路径(32*32,PNG格式)
  8. HighResolutionIconUrl,高清图片文件路径
  9. SupportUrl,技术支持网址
  10. AppDomains,如果你的应用中,需要导航到其他网站(不同域),则需要在这里定义。
  11. Hosts,宿主形式。因为一个Add-in其实可以同时用于几个不同的宿主(例如Word,Excel等),所以这里可以定义多个Host。
    Document (Word)
    Database (Access)
    Mailbox (Outlook)
    Notebook (OneNote)
    Presentation (PowerPoint)
    Project (Project)
    Workbook (Excel)
    
  12. DefaultSettings,默认设置,这里最关键的属性有SourceLocation,这个是用来指定Add-in加载时默认显示的页面。另外,不同的Add-in可能还会有一些自己的DefaultSettings,例如ContentApp的话,还可以设置RequestedWidth和RequestedHeight这两个属性,以确定自定义内容默认的尺寸。
  13. Permissions,这是规定Add-in拥有的对于宿主和文档的访问权限,不同的Add-in有不同的Permission设置。
    ContentApp 和 TaskPaneApp
    
     [Restricted | ReadDocument | ReadAllDocument | WriteDocument | ReadWriteDocument]
    
    MailApp
    
    [Restricted | ReadItem | ReadWriteItem | ReadWriteMailbox]
    
    

值得一提的是,如果你用Visual Studio 项目模板生成的清单文件,你会发现IconUrl以及SourceLocation 等属性,会包含一个特定的地址 ~remoteurl,这个其实会在工具进行编译和发布时自动替换为你的网站的根地址。而在Visual Studio code等工具中,你可能需要精确地设置。

通过清单文件自定义Ribbon

作为TaskPaneApp,最常见的做法是在启动后位宿主程序添加一个工具栏按钮,然后用户点击按钮的话,执行某个操作(打开内容面板和执行某个Javascript函数)。我在这一节主要介绍的是自定义Ribbon的方式。

有意思的是,要定义工具栏和清单,在清单文件中,我们称之为VersionOverrides。一个最简单的Ribbon定义如下


    
      
        
          
            
            <LearnMoreUrl resid="Contoso.GetStarted.LearnMoreUrl"/>
          </GetStarted>
            <!--函数文件,是定义可以直接被调用的Javascript函数所在的位置-->
          <FunctionFile resid="Contoso.DesktopFunctionFile.Url" />

          <!-- 扩展定义 -->
          <ExtensionPoint xsi:type="PrimaryCommandSurface">
            <!-- 如果是扩展现有的Tab,使用 OfficeTab .如果是创建新的Tab,则使用 CustomTab -->
            <OfficeTab id="TabHome">
              <!-- 这个id必须唯一,可以结合公司的名称. -->
              <Group id="Contoso.Group1">
                <Label resid="Contoso.Group1Label" />
                <Icon>
                  <bt:Image size="16" resid="Contoso.tpicon_16x16" />
                  <bt:Image size="32" resid="Contoso.tpicon_32x32" />
                  <bt:Image size="80" resid="Contoso.tpicon_80x80" />
                </Icon>

                <Control xsi:type="Button" id="Contoso.TaskpaneButton">
                  <Label resid="Contoso.TaskpaneButton.Label" />
                  <Supertip>
                    <Title resid="Contoso.TaskpaneButton.Label" />
                    <Description resid="Contoso.TaskpaneButton.Tooltip" />
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="Contoso.tpicon_16x16" />
                    <bt:Image size="32" resid="Contoso.tpicon_32x32" />
                    <bt:Image size="80" resid="Contoso.tpicon_80x80" />
                  </Icon>

                  <!-- 下面这个方式是打开一个内容面板 -->
                  <Action xsi:type="ShowTaskpane">
                    <TaskpaneId>ButtonId1</TaskpaneId>
                    <SourceLocation resid="Contoso.Taskpane.Url" />
                  </Action>
                  <!-- 下面这个方式是执行一个Javascript函数-->
                  <Action xsi:type="ExecuteFunction">
                    <FunctionName>SubmitDataToServer</FunctionName>
                  </Action>
                </Control>
              </Group>
            </OfficeTab>
          </ExtensionPoint>
        </DesktopFormFactor>
      </Host>
    </Hosts>
    
    <!--目前规定所有的定义必须用资源的形式来做,避免重复定义 -->
    <Resources>
      <bt:Images>
        <bt:Image id="Contoso.tpicon_16x16" DefaultValue="~remoteAppUrl/Images/Button16x16.png" />
        <bt:Image id="Contoso.tpicon_32x32" DefaultValue="~remoteAppUrl/Images/Button32x32.png" />
        <bt:Image id="Contoso.tpicon_80x80" DefaultValue="~remoteAppUrl/Images/Button80x80.png" />
      </bt:Images>
      <bt:Urls>
        <bt:Url id="Contoso.DesktopFunctionFile.Url" DefaultValue="~remoteAppUrl/Functions/FunctionFile.html" />
        <bt:Url id="Contoso.Taskpane.Url" DefaultValue="~remoteAppUrl/Home.html" />
        <bt:Url id="Contoso.GetStarted.LearnMoreUrl" DefaultValue="https://go.microsoft.com/fwlink/?LinkId=276812" />
      </bt:Urls>
      <!-- ShortStrings 最长可以125. -->
      <bt:ShortStrings>
        <bt:String id="Contoso.TaskpaneButton.Label" DefaultValue="Show Taskpane" />
        <bt:String id="Contoso.Group1Label" DefaultValue="Commands Group" />
        <bt:String id="Contoso.GetStarted.Title" DefaultValue="Get started with your sample add-in!" />
      </bt:ShortStrings>
      <!-- LongStrings 最长可以250. -->
      <bt:LongStrings>
        <bt:String id="Contoso.TaskpaneButton.Tooltip" DefaultValue="Click to Show a Taskpane">
        </bt:String>
        <bt:String id="Contoso.GetStarted.Description" DefaultValue="Your sample add-in loaded succesfully. Go to the HOME tab and click the 'Show Taskpane' button to get started." />
      </bt:LongStrings>
    </Resources>
  </VersionOverrides>
</code></pre> 
 <h1>通过清单文件自定义快捷菜单(Context Menu)</h1> 
 <p>除了Office Ribbon的自定义之外,目前也支持通过清单文件对快捷菜单进行自定义,例如下面这个例子,是给单元格的快捷菜单增加一个按钮。这个按钮,同样可以有两种操作:打开一个内容面板,还是直接执行一个Javascript函数。</p> 
 <pre><code><ExtensionPoint xsi:type="ContextMenu">
    <OfficeMenu id="ContextMenuCell">
        <!-- Define a control that shows a task pane. -->
        <Control xsi:type="Button" id="Button2Id1">
            <Label resid="Contoso.TaskpaneButton.Label" />
            <Supertip>
                <Title resid="Contoso.TaskpaneButton.Label" />
                <Description resid="Contoso.TaskpaneButton.Tooltip" />
            </Supertip>
            <Icon>
                <bt:Image size="16" resid="Contoso.tpicon_16x16" />
                <bt:Image size="32" resid="Contoso.tpicon_32x32" />
                <bt:Image size="80" resid="Contoso.tpicon_80x80" />
            </Icon>
            <Action xsi:type="ShowTaskpane">
                <SourceLocation resid="Contoso.Taskpane.Url" />
            </Action>
        </Control>
    </OfficeMenu>
</ExtensionPoint>

</code></pre> 
 <blockquote> 
  <p>关于在内容面板中开发以及自定义Javascript函数的开发,我会通过另外一个专题文章来讲解。</p> 
 </blockquote> 
 <h1>通过清单文件实现多语言支持</h1> 
 <p>Office Web Add-in的愿景是希望开发人员一次编写,处处运行——不光是在不同设备都能体验一致地工作,而且在全球都能使用。那么问题来了?如何实现这样的美好愿望呢?这个问题同样分为两个方面:通过清单文件来无代码实现UI层面的多语言支持,以及在Javascript代码中根据当前的环境实现自定义多语言支持。</p> 
 <p>后者相对简单,而且更多的是依赖于开发人员的自定义实现,这里列出来两个非常重要的属性:</p> 
 <ul> 
  <li>Office.context.displayLanguage,这个属性能获取到当前Office宿主程序的显示语言。代码范例如下<pre><code>function sayHelloWithDisplayLanguage() {
    var myLanguage = Office.context.displayLanguage;
    switch (myLanguage) {
        case 'en-US':
            write('Hello!');
            break;
        case 'fr-FR':
            write('Bonjour!');
            break;
    }
}

// Function that writes to a div with id='message' on the page.
function write(message) {
    document.getElementById('message').innerText += message; 
}
</code></pre></li> 
  <li>Office.context.contentLanguage,这个属性我觉得很酷,它是能检测当前文档内容的语言,例如是一篇中文的Word文档,还是一个英文的Excel表格。<pre><code>function sayHelloWithContentLanguage() {
    var myLanguage = Office.context.contentLanguage;
    switch (myLanguage) {
        case 'en-US':
            write('Hello!');
            break;
        case 'fr-FR':
            write('Bonjour!');
            break;
    }
}

// Function that writes to a div with id='message' on the page.
function write(message) {
    document.getElementById('message').innerText += message; 
}
</code></pre></li> 
 </ul> 
 <p>接下来要看一下的是在清单文件中如果定义一些UI层面的多语言支持。目前有如下的属性是支持多语言的。</p> 
 <ol> 
  <li>Description,这是Add-in的描述,定义方式如下<pre><code><Description DefaultValue="ExcelWebAddIn2">
    <Override Locale="zh-CN" Value="我的插件描述说明......"/>
</Description>
</code></pre></li> 
  <li>DisplayName,这是Add-in的显示名称,定义方式如下<pre><code><DisplayName DefaultValue="ExcelWebAddIn2">
    <Override Locale="zh-CN" Value="我的第二个插件"/>
</DisplayName>
</code></pre></li> 
  <li>IconUrl,这是Add-in的图标<pre><code><IconUrl DefaultValue="~remoteAppUrl/Images/Button32x32.png">
    <Override Locale="zh-CN" Value="~remoteAppUrl/Images/zh-Button32x32.png"/>
</IconUrl>
</code></pre></li> 
  <li>HighResolutionIconUrl,这是Add-in的高清图标,定义方式如下<pre><code><HighResolutionIconUrl DefaultValue="~remoteAppUrl/Images/Button32x32.png">
    <Override Locale="zh-CN" Value="~remoteAppUrl/Images/zh-Button32x32.png"/>
</IconUrl>
</code></pre></li> 
  <li>Resources,所有针对界面扩展(例如工具栏或者快捷菜单的按钮相关的文字,路径,图片等),定义方式大多如下<pre><code><bt:String id="Contoso.TaskpaneButton.Tooltip" DefaultValue="Click to Show a Taskpane">
    <bt:Override Locale="zh-CN" Value="显示一个内容面板"/>
</bt:String>
</code></pre></li> 
  <li>SourceLocation<pre><code>    <SourceLocation DefaultValue="~remoteAppUrl/Home.html">
    <Override Locale="zh-CN" Value="~remoteAppUrl/zh-Home.html"/>
    </SourceLocation>
</code></pre></li> 
 </ol> 
 <p>关于所有目前支持的语言列表,请参考</p> 
 <p><a href="http://img.e-com-net.com/image/info8/be52ab85401f4f46a904663775f63b4a.png" target="_blank"><img width="568" height="2608" title="image" style="display: inline; background-image: none;;border:1px solid black;" alt="详解Office Add-in 清单文件_第4张图片" src="http://img.e-com-net.com/image/info8/be52ab85401f4f46a904663775f63b4a.png"></a></p> 
 <blockquote> 
  <p>关于Office Add-in的本地化支持,官方文档在 https://docs.microsoft.com/en-us/office/dev/add-ins/develop/localization。</p> 
 </blockquote> 
 <h1>其他注意事项</h1> 
 <ol> 
  <li><p>确保add-in ID是唯一的,这是一个GUID。如果使用Visual Studio开发的话,可以在工具菜单中,找到Create GUID的一个小工具,但也可以通过其他一些方式生成。</p><p><a href="http://img.e-com-net.com/image/info8/3afe32c17a444ff2aade69153c457092.png" target="_blank"><img alt="详解Office Add-in 清单文件_第5张图片" src="http://img.e-com-net.com/image/info8/3afe32c17a444ff2aade69153c457092.png" width="497" height="481" style="border:1px solid black;"></a></p></li> 
  <li><p>所有的Url都必须是https的。</p></li> 
  <li><p>所有的图片(例如用在命令按钮上面的图片),都必须是允许缓存,也就是说服务器不能在Header里面添加on-cache/no-store 这样的值。</p></li> 
  <li><p>如果add-in需要发布到Office Store,则必须提供SupportUrl这个属性。</p></li> 
 </ol> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1179953224300417024"></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">你可能感兴趣的:(详解Office Add-in 清单文件)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1833726269771051008.htm"
                           title="Jmeter测试本地web应用" target="_blank">Jmeter测试本地web应用</a>
                        <span class="text-muted">会飞的猫丶。</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95/1.htm">测试</a>
                        <div>一、Jmeter下载及安装官网:http://jmeter.apache.org/下载:下载源码:解压到相关文件夹:打开bin里面的jmeter.bat就可以使用了二、看不懂英文的可以把语言切换为中文:选择options--->chooselanguage--->chinese三、新建线程组1)线程数:指的是用户的请求数,默认的输入是“1”,如果想模拟100个请求,则此处输入100。2)Ramp-</div>
                    </li>
                    <li><a href="/article/1833726270249201664.htm"
                           title="App Cleaner & Uninstaller Pro中文---彻底卸载Mac应用的利器" target="_blank">App Cleaner & Uninstaller Pro中文---彻底卸载Mac应用的利器</a>
                        <span class="text-muted">lx53mac</span>
<a class="tag" taget="_blank" href="/search/Mac%E8%BD%AF%E4%BB%B6/1.htm">Mac软件</a><a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a>
                        <div>AppCleaner&UninstallerPro是一款专为Mac用户设计的强大应用程序清理和卸载工具。它以其全面、彻底和高效的清理能力,受到了广大用户的青睐。该软件不仅能帮助用户快速卸载不再需要的应用程序,更能彻底删除相关文件、插件和残留数据,确保Mac磁盘空间得到高效释放。AppCleaner&UninstallerPro的特色功能包括其强大的搜索能力,能快速定位并清除与应用程序相关的所有文件</div>
                    </li>
                    <li><a href="/article/1833726142121603072.htm"
                           title="Redis中的AOF重写过程及其实际应用" target="_blank">Redis中的AOF重写过程及其实际应用</a>
                        <span class="text-muted">CopyLower</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/Redis/1.htm">Redis</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>引言在Redis中,持久化是确保数据安全和稳定运行的关键部分。Redis提供了两种持久化方式:RDB快照和AOF(AppendOnlyFile)日志。相比RDB快照,AOF能够更频繁地保存数据变更,并且在服务器崩溃后能够更快地恢复数据。然而,随着时间的推移,AOF文件可能会变得越来越大,从而影响Redis的性能。为了应对这一问题,Redis引入了AOF重写机制,通过优化和压缩AOF文件的大小,确保</div>
                    </li>
                    <li><a href="/article/1833723241047355392.htm"
                           title="nginx1.16安装" target="_blank">nginx1.16安装</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/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/nginx%E5%AE%89%E8%A3%85/1.htm">nginx安装</a>
                        <div>参考:https://nginx.org/en/linux_packages.html#RHEL-CentOS1.必备条件sudoyuminstallyum-utils2.设置云仓库创建文件:vi/etc/yum.repos.d/nginx.repo内容如下:[nginx-stable]name=nginxstablerepobaseurl=http://nginx.org/packages/ce</div>
                    </li>
                    <li><a href="/article/1833721480203038720.htm"
                           title="羊群" target="_blank">羊群</a>
                        <span class="text-muted">坐观</span>

                        <div>我想去听大海的声音当我真正见到海冷寂、漆黑、电闪雷鸣海上竟然没有彩虹海水也竟不是粉色没有穿透海底的阳光也没有伊甸园的羊群生活隐含着清单式的主线还有忽隐忽现的支线当我用彩笔画上钩时主线会变短有些支线又隐藏不见最令人生畏的却是这些羊群它明明就该在那书上都是这么记载!可当我画上钩时冷寂、漆黑、电闪雷鸣!这让我害怕下一波羊群下下一波羊群它该在那,与我同行什么时候终结缥缈的心2019.12.30</div>
                    </li>
                    <li><a href="/article/1833719203232837632.htm"
                           title="如何恢复最近删除的文件[Windows& Mac]" target="_blank">如何恢复最近删除的文件[Windows& Mac]</a>
                        <span class="text-muted">Geeker55</span>
<a class="tag" taget="_blank" href="/search/%E6%81%A2%E5%A4%8D%E8%BD%AF%E4%BB%B6/1.htm">恢复软件</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E6%81%A2%E5%A4%8D/1.htm">文件恢复</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D/1.htm">数据恢复</a><a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/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/iphone/1.htm">iphone</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91/1.htm">笔记本电脑</a>
                        <div>可以通过多种方式删除文件。因此,用户需要恢复他们不小心删除的文件的情况并不少见。好消息是,用户至少通常可以在删除最近删除的文件后几天或几周内恢复它们。回收站是Windows中的文件删除保护措施,可以轻松恢复文件。除非另有配置,否则回收站将存储用户选择删除的文件。因此,您通常可以从回收站恢复已删除的用户文件。您仍然可以恢复已清空的回收站中的文件。完全删除文件时,将擦除对该文件的引用,并且最初占用的硬</div>
                    </li>
                    <li><a href="/article/1833718824885645312.htm"
                           title="Docker部署Doris数据库" target="_blank">Docker部署Doris数据库</a>
                        <span class="text-muted">天蓝蓝23528</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</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%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>Docker部署Doris数据库是一个涉及多个步骤的过程,包括环境准备、Docker镜像拉取、配置文件创建、容器启动与配置、以及后续的数据库操作等。以下是一个详细的Docker部署Doris数据库的教程,旨在帮助用户成功在Docker环境中部署并运行Doris数据库。一、环境准备在部署Doris之前,需要确保你的系统已经安装了Docker。Docker是一个开源的容器化平台,可以帮助你轻松地部署和</div>
                    </li>
                    <li><a href="/article/1833717564837031936.htm"
                           title="7个特色创意营销点子" target="_blank">7个特色创意营销点子</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/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>营销是一场注意力的游戏。就是利用你手中的工具让你的品牌吸引观众的眼球。当然,营销是复杂且多层次的,但有时候一个简单的想法可以开启令人兴奋的新可能性。比如:你的营销工具清单可能比你想象的要长。仅因为你以前从未使用过某个营销渠道,并不意味着你将来不能通过它取得优异的成果。你可以在所有标准类型的内容——博客文章、白皮书、短视频、社交媒体营销帖子、电子邮件营销——中添加新的和新颖的产品。通过尝试不同的内容</div>
                    </li>
                    <li><a href="/article/1833716429409579008.htm"
                           title="如何用Kotlin实现MVP架构的Android快速开发框架?" target="_blank">如何用Kotlin实现MVP架构的Android快速开发框架?</a>
                        <span class="text-muted">2401_84132496</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/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>下拉刷新和上拉加载更多空页面在断网情况下加载缓存网络请求错误并重新加载基于Kotlin的使用说明(Java的使用具体参考java版本的demo)导入依赖在根目录中的build.gradle文件中加入maven{url“https://jitpack.io”}在应用下的build.gradle文件中加入在自定义的Application类中的onCreate方法中初始化CommonLibrary//初</div>
                    </li>
                    <li><a href="/article/1833712523837272064.htm"
                           title="4.3万字详解PHP+RabbitMQ(AMQP协议、通讯架构、6大模式、交换机队列消息持久化、死信队列、延时队列、消息丢失、重复消费、消息应答、消息应答、发布确认、故障转移、不公平分发、优先级、等)" target="_blank">4.3万字详解PHP+RabbitMQ(AMQP协议、通讯架构、6大模式、交换机队列消息持久化、死信队列、延时队列、消息丢失、重复消费、消息应答、消息应答、发布确认、故障转移、不公平分发、优先级、等)</a>
                        <span class="text-muted">小松聊PHP进阶</span>
<a class="tag" taget="_blank" href="/search/laravel/1.htm">laravel</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/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/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/laravel/1.htm">laravel</a><a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a>
                        <div>理论(后半部分有实操详解)哲学思考易经思维:向各国人讲述一种动物叫乌龟,要学很久的各国语言,但是随手画一个乌龟,全世界的人都能看得懂。道家思维:努力没有用(指劳神费心的机械性重复、肢体受累、刻意行为),要用心(深度思考、去感悟、透过现象看本质)才有用。举例:类似中学做不出来的几何题的底层原理:不是不知道xx定理或公式(招式),而是不知道画辅助线的思路(内功)。总结:万事万物、用道家思维思考本质与规</div>
                    </li>
                    <li><a href="/article/1833712271486971904.htm"
                           title="使用C++编写一个语音播报时钟(Qt)" target="_blank">使用C++编写一个语音播报时钟(Qt)</a>
                        <span class="text-muted">睡觉然后上课</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>要求:当系统时间达到输入的时间时,语音播报对话框中的内容。定时可以取消。qt界面如上图所示。组件如下:countdownEdit作为书写目标时间的line_editstart_btn作为开始和停止的按钮stop_btn作为取消的按钮systimelab显示系统时间的labtextEdit显示播报内容代码:头文件:#ifndefWIDGET_H#defineWIDGET_H#include#incl</div>
                    </li>
                    <li><a href="/article/1833710759843033088.htm"
                           title="css-loader/style-loader/less-loader/sass-loader/postcss-loader各有什么作用,一次性说明白" target="_blank">css-loader/style-loader/less-loader/sass-loader/postcss-loader各有什么作用,一次性说明白</a>
                        <span class="text-muted">iWangsd</span>
<a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                        <div>大家都清楚在使用webpack构建前端项目时都会使用到sass-loader、less-loader、postcss-loader、css-loader、style-loader,但这些loader在其中起到什么作用呢?本篇主要阐述这些loader在打包中所扮演的角色。概述1、css-loader:加载.css文件的loader,会对@import和url()进行处理2、style-loader:</div>
                    </li>
                    <li><a href="/article/1833703073768370176.htm"
                           title="下载并解密的ts文件,发现一部分ts文件能播放,一部分不能播放" target="_blank">下载并解密的ts文件,发现一部分ts文件能播放,一部分不能播放</a>
                        <span class="text-muted">weixin_41956627</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>问题说明按参考资料中两个链接,获取网站上的m3u8视频,下载并解密了ts文件,发现一部分ts文件能播放,一部分不能播放(解密失败)。解决经过反复尝试,发现疑似是多线程下载ts文件时,解密函数cryptor=AES.new(key,AES.MODE_CBC,key)的问题。当解密函数在线程函数外面(即所有线程每次运行都是用同一个cryptor)发现均有一定概率导致ts文件无法播放。当解密函数在线程函</div>
                    </li>
                    <li><a href="/article/1833700803014127616.htm"
                           title="linux查看jupyter运行,在Linux服务器上运行Jupyter notebook server教程" target="_blank">linux查看jupyter运行,在Linux服务器上运行Jupyter notebook server教程</a>
                        <span class="text-muted">天启大烁哥</span>

                        <div>在Linux服务器上运行Jupyternotebookserver教程很多deeplearning教程都推荐在jupyternotebook运行python代码,方便及时交互。但只在本地运行没有GPU环境,虽然googlecolab是个好办法,但发现保存模型后在云端找不到模型文件,且需要合理上网才能访问。于是想给实验室的服务器配置jupyternotebook,供本机远程访问。踩了不少坑,码一下教</div>
                    </li>
                    <li><a href="/article/1833700802527588352.htm"
                           title="linux下全盘查找文件,linux下的查找文件命令find" target="_blank">linux下全盘查找文件,linux下的查找文件命令find</a>
                        <span class="text-muted">大表姐绫蛮蛮</span>
<a class="tag" taget="_blank" href="/search/linux%E4%B8%8B%E5%85%A8%E7%9B%98%E6%9F%A5%E6%89%BE%E6%96%87%E4%BB%B6/1.htm">linux下全盘查找文件</a>
                        <div>find1.作用find命令的作用是在目录中搜索文件,它的使用权限是所有用户。2.格式find[path][options][expression]path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。3.主要参数[options]参数:-depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。-max</div>
                    </li>
                    <li><a href="/article/1833700044927234048.htm"
                           title="【Docker】MongoDB 容器化部署" target="_blank">【Docker】MongoDB 容器化部署</a>
                        <span class="text-muted">轻云UC</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E9%83%A8%E7%BD%B2/1.htm">运维部署</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>MongoDBdocker容器化部署MongoDB标准软件基于BitnamiMongoDB构建。当前版本未7.0.5你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作配置文件地址:https://gitee.com/qingplus/qingcloud-platformQinghubStudio在线体验初始化一个新实例使用Docker容器网络,应用程序容器可以轻松访问容器内运行的Mo</div>
                    </li>
                    <li><a href="/article/1833698784022982656.htm"
                           title="C++学习笔记(15)" target="_blank">C++学习笔记(15)</a>
                        <span class="text-muted">月夕花晨374</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</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>二、C++11静态断言assert宏是运行时断言,在程序运行的时候才能起作用。C++11新增了静态断言static_assert,用于在编译时检查源代码。使用静态断言不需要包含头文件。语法:static_assert(常量表达式,提示信息);注意:static_assert的第一个参数是常量表达式。而assert的表达式既可以是常量,也可以是变量。220、C++11新标准一、longlong类型新</div>
                    </li>
                    <li><a href="/article/1833697900199243776.htm"
                           title="Pytorch维度转换操作:view,reshape,permute,flatten函数详解" target="_blank">Pytorch维度转换操作:view,reshape,permute,flatten函数详解</a>
                        <span class="text-muted">ghx3110</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">深度学习笔记</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/%E7%BB%B4%E5%BA%A6%E8%BD%AC%E6%8D%A2%E6%93%8D%E4%BD%9C/1.htm">维度转换操作</a>
                        <div>引言Pytorch中常见的维度转换函数有view,reshape,permute,flatten。本文将详细介绍这几个函数的作用与使用方式,并给出了具体的代码示例,希望能够帮助大家。常见的维度有四维:比如(batch,channel,height,width);三维:比如(b,n,c);二维:比如(h,w)。下面介绍如何使用上述函数进行维度之间的转换。1.view函数作用tensor.view()</div>
                    </li>
                    <li><a href="/article/1833697143169314816.htm"
                           title="信创那些事儿——Spring Boot中集成东方通中间件(TongWeb)" target="_blank">信创那些事儿——Spring Boot中集成东方通中间件(TongWeb)</a>
                        <span class="text-muted">北欧人写代码</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>在SpringBoot中集成东方通中间件(如TongWeb作为Servlet容器)通常涉及几个步骤,但需要注意的是,TongWeb本身是一个独立的JavaEE应用服务器,而不是像Tomcat那样可以直接嵌入到SpringBoot应用中的中间件。因此,集成通常意味着将SpringBoot应用打包为WAR文件并部署到TongWeb服务器上。以下是在SpringBoot中集成东方通中间件(以TongWe</div>
                    </li>
                    <li><a href="/article/1833693488689016832.htm"
                           title="vnpy1.0版本学习-回测模块" target="_blank">vnpy1.0版本学习-回测模块</a>
                        <span class="text-muted">ls13552912394</span>

                        <div>1、学习vnpy,从vnpy1.0开始。主要是学习回测模块的使用。ctaAlgo回测模块的使用。git的链接官方:官方地址。其中最主要碰到的坑,各种关联包的使用和开始启动py文件的方法。官方的说明文档写的不太清楚。详细还是要看官方的,我只写写我的感受和操作。2、首先talib包是比较难装的,需要使用conda命令,版本和依赖的包太乱了。使用anacondaprompt命令提示行执行如下:conda</div>
                    </li>
                    <li><a href="/article/1833692778106810368.htm"
                           title="【读书清单】和繁重的工作一起修行2" target="_blank">【读书清单】和繁重的工作一起修行2</a>
                        <span class="text-muted">馋人小博</span>

                        <div>在工作中修习正念的小方法1.学会观呼吸观呼吸帮助我们体会自己的生存,对于呼吸,不干扰,就是去觉知。设定一个特定的观呼吸场所,可以是办公室的一角,没有人的会议室,一个整洁、令人放松的小空间,有助于修习。2.准备正念之铃下一个APP就好,在工作间歇需要暂停、观呼吸或不安、紧张的时刻,都可以请一声磬声,让自己放松。当然,任何声音都可作为正念之铃。3.享受坐着每过一小时,停止工作,坐上几分钟,不干什么,就</div>
                    </li>
                    <li><a href="/article/1833692731579396096.htm"
                           title="Linux :epoll ET 模式下文件描述符出现饥饿的情况" target="_blank">Linux :epoll ET 模式下文件描述符出现饥饿的情况</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%9F%A5%E8%AF%86/1.htm">知识</a><a class="tag" taget="_blank" href="/search/epoll/1.htm">epoll</a>
                        <div>背景(饥饿问题)使用epollET模式时,epoll_wait返回就绪文件描述符集合,然后我们循环处理,但这时如果有一个文件描述符上有大量输入(不间断的输入流),因为我们ET模式需要一直读到返回EAGIN/EWOULDBLOCK,那我们就会一直在处理这个文件描述符,而导致其他文件描述符得不到处理,这就是采用边缘触发时有可能出现的文件描述符饥饿情况处理方法参考Linux/Unix系统编程手册63.4</div>
                    </li>
                    <li><a href="/article/1833691723914637312.htm"
                           title="Git使用经验总结6-删除远端历史记录" target="_blank">Git使用经验总结6-删除远端历史记录</a>
                        <span class="text-muted">charlee44</span>
<a class="tag" taget="_blank" href="/search/Git/1.htm">Git</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                        <div>删除远端的历史记录但是不影响最新的仓库内容是笔者一直想实现的功能,有两个很不错的用处:有的历史提交不慎包含了比较敏感的信息,提交的时候没注意,过了一段时间才发现。这个时候已经有了很多新的历史提交,无法再回退了。有时候会拿Git仓库存储代码文件以外的内容,比如美术资源、依赖库等等。这时除了少数提交大部分历史提交是没意义的,还很占仓库空间。不过要说明的是Git删除历史记录跟我们想象中的不太一样,需要使</div>
                    </li>
                    <li><a href="/article/1833691345722634240.htm"
                           title="git报错 remote.origin.url has multiple values" target="_blank">git报错 remote.origin.url has multiple values</a>
                        <span class="text-muted">自律的蜗牛</span>
<a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</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%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a>
                        <div>remote.origin.urlhasmultiplevalues报错解释:这个错误通常发生在使用Git时,意味着配置remote.origin.url键的值存在多个不同的URL。这可能是因为你多次添加了远程仓库的URL,或者是因为你的.git/config文件中有多个条目指定了不同的URL。解决方法:打开终端或命令行界面。使用gitconfig--get-allremote.origin.ur</div>
                    </li>
                    <li><a href="/article/1833690588801757184.htm"
                           title="加载pkl文件,Python报错AttributeError: Can‘t get attribute ‘DeepFM‘ on <module ‘__main__‘ from...>" target="_blank">加载pkl文件,Python报错AttributeError: Can‘t get attribute ‘DeepFM‘ on <module ‘__main__‘ from...></a>
                        <span class="text-muted">Zerol_Yan</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>
                        <div>背景模型同学发过来的pkl格式的模型,在系统中加载的时候,报错AttributeError:module'__main__'hasnoattribute'LabelEncoderExt',尝试了很多种方式,最后终于解决了这个问题,记录一下,以后遇到类似的可以做参考。项目代码及结构app.pyfrominitimportappimportjsonfromflaskimportrequest@app.</div>
                    </li>
                    <li><a href="/article/1833689990916304896.htm"
                           title="音频文件格式转换怎么做?" target="_blank">音频文件格式转换怎么做?</a>
                        <span class="text-muted">不见的命运</span>

                        <div>音乐在生活当中是必不可少的,很多人都喜欢听音乐。音频文件的格式有很多种,想要进行转换的话也不复杂,用迅捷视频转换器就可以转换音频文件的多种格式。新纪元和浪漫主义有很多相似之处。音乐史上每一种新的风格,都是在时髦与反时髦的斗争中形成的。就像稳健的古典主义是对轻巧的洛可可风格的反叛;感情至上的浪漫主义又是对崇尚形式的古典主义的反叛一样,新纪元音乐是轻音乐领域里的后现代主义思潮对传统审美观念的反叛。所不</div>
                    </li>
                    <li><a href="/article/1833688442979053568.htm"
                           title="SpringBoot学习(16)上传文件" target="_blank">SpringBoot学习(16)上传文件</a>
                        <span class="text-muted">星河漫漫l</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%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%BC%80%E5%8F%91/1.htm">运维开发</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                        <div>1、pom包配置我们使用SpringBoot版本2.1.0、jdk1.8、tomcat8.0。org.springframework.bootspring-boot-starter-parent2.1.0.RELEASE1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-star</div>
                    </li>
                    <li><a href="/article/1833684538551791616.htm"
                           title="linux查看当前运行进程文件" target="_blank">linux查看当前运行进程文件</a>
                        <span class="text-muted">linlinlove2</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</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>如何查看Linux中当前运行进程的文件要在Linux中查看当前运行进程的文件,可以使用以下步骤:获取进程ID(PID)首先,需要获取目标进程的PID。可以使用以下命令之一:使用lsof命令接下来,使用lsof命令查看指定PID关联的文件:这里,PID是在步骤1中获取的进程ID。输出将显示与该进程相关的所有文件,包括打开的文件、套接字、管道等。文件路径通常显示在“NAME/FLAGS”列中。示例:要</div>
                    </li>
                    <li><a href="/article/1833683782473969664.htm"
                           title="hive表格统计信息不准确" target="_blank">hive表格统计信息不准确</a>
                        <span class="text-muted">weixin_41956627</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><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>问题描述有个hive分区表,orc存储格式,有个分区,查询selectcount(1)fromtablewheredt='yyyyMMdd'结果是0,但查询select*fromtablewheredt='yyyyMMdd'又能查到数据,去hdfs对应目录下查看,也能看到有数据文件解决执行如下sqlANALYZETABLEdb.table1PARTITION(dt='20240908')COMPU</div>
                    </li>
                    <li><a href="/article/1833679784052355072.htm"
                           title="Java经典面试题118问,还不会你就out了!(附赠答案)" target="_blank">Java经典面试题118问,还不会你就out了!(附赠答案)</a>
                        <span class="text-muted">阿博的java技术栈</span>

                        <div>前言1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"?Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其特性。2.JDK和JRE的区别是什么?Jav</div>
                    </li>
                                <li><a href="/article/103.htm"
                                       title="SAX解析xml文件" target="_blank">SAX解析xml文件</a>
                                    <span class="text-muted">小猪猪08</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                                    <div>1.创建SAXParserFactory实例 
2.通过SAXParserFactory对象获取SAXParser实例 
3.创建一个类SAXParserHander继续DefaultHandler,并且实例化这个类 
4.SAXParser实例的parse来获取文件 
    public static void main(String[] args) { 
 //</div>
                                </li>
                                <li><a href="/article/230.htm"
                                       title="为什么mysql里的ibdata1文件不断的增长?" target="_blank">为什么mysql里的ibdata1文件不断的增长?</a>
                                    <span class="text-muted">brotherlamp</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux%E8%BF%90%E7%BB%B4/1.htm">linux运维</a><a class="tag" taget="_blank" href="/search/linux%E8%B5%84%E6%96%99/1.htm">linux资料</a><a class="tag" taget="_blank" href="/search/linux%E8%A7%86%E9%A2%91/1.htm">linux视频</a><a class="tag" taget="_blank" href="/search/linux%E8%BF%90%E7%BB%B4%E8%87%AA%E5%AD%A6/1.htm">linux运维自学</a>
                                    <div>我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题。 
当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 —— 就是说磁盘快要满了。 
一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用。而你已经启用了 innodbfileper_table,所以问题是: 
ibdata1存了什么? 
当你启用了 i</div>
                                </li>
                                <li><a href="/article/357.htm"
                                       title="Quartz-quartz.properties配置" target="_blank">Quartz-quartz.properties配置</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a>
                                    <div>其实Quartz JAR文件的org.quartz包下就包含了一个quartz.properties属性配置文件并提供了默认设置。如果需要调整默认配置,可以在类路径下建立一个新的quartz.properties,它将自动被Quartz加载并覆盖默认的设置。 
  
下面是这些默认值的解释 
#-----集群的配置
org.quartz.scheduler.instanceName =</div>
                                </li>
                                <li><a href="/article/484.htm"
                                       title="informatica session的使用" target="_blank">informatica session的使用</a>
                                    <span class="text-muted">18289753290</span>
<a class="tag" taget="_blank" href="/search/workflow/1.htm">workflow</a><a class="tag" taget="_blank" href="/search/session/1.htm">session</a><a class="tag" taget="_blank" href="/search/log/1.htm">log</a><a class="tag" taget="_blank" href="/search/Informatica/1.htm">Informatica</a>
                                    <div>如果希望workflow存储最近20次的log,在session里的Config  Object设置,log  options做配置,save  session log :sessions  run  ;savesessio log for  these runs:20 
session下面的source 里面有个tracing </div>
                                </li>
                                <li><a href="/article/611.htm"
                                       title="Scrapy抓取网页时出现CRC check failed 0x471e6e9a != 0x7c07b839L的错误" target="_blank">Scrapy抓取网页时出现CRC check failed 0x471e6e9a != 0x7c07b839L的错误</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a>
                                    <div>Scrapy版本0.14.4 
出现问题现象: 
  
ERROR: Error downloading <GET http://xxxxx  CRC check failed 
  
解决方法 
  
1.设置网络请求时的header中的属性'Accept-Encoding': '*;q=0' 
  
明确表示不支持任何形式的压缩格式,避免程序的解压</div>
                                </li>
                                <li><a href="/article/738.htm"
                                       title="java Swing小集锦" target="_blank">java Swing小集锦</a>
                                    <span class="text-muted">永夜-极光</span>
<a class="tag" taget="_blank" href="/search/java+swing/1.htm">java swing</a>
                                    <div>1.关闭窗体弹出确认对话框 
  1.1   this.setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE); 
  1.2   
	this.addWindowListener (
				new WindowAdapter () {
					public void windo</div>
                                </li>
                                <li><a href="/article/865.htm"
                                       title="强制删除.svn文件夹" target="_blank">强制删除.svn文件夹</a>
                                    <span class="text-muted">随便小屋</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>  
        在windows上,从别处复制的项目中可能带有.svn文件夹,手动删除太麻烦,并且每个文件夹下都有。所以写了个程序进行删除。因为.svn文件夹在windows上是只读的,所以用File中的delete()和deleteOnExist()方法都不能将其删除,所以只能采用windows命令方式进行删除</div>
                                </li>
                                <li><a href="/article/992.htm"
                                       title="GET和POST有什么区别?及为什么网上的多数答案都是错的。" target="_blank">GET和POST有什么区别?及为什么网上的多数答案都是错的。</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/get+post/1.htm">get post</a>
                                    <div>  
    如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 
     前几天有人问我这个问题。我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用。 
    这个答案好像并不是他想要的。于是他继续追问有没有别的区别?我说这就是个名字而已,如果服务器支持,他完全可以把G</div>
                                </li>
                                <li><a href="/article/1119.htm"
                                       title="谈谈新浪微博背后的那些算法" target="_blank">谈谈新浪微博背后的那些算法</a>
                                    <span class="text-muted">aoyouzi</span>
<a class="tag" taget="_blank" href="/search/%E8%B0%88%E8%B0%88%E6%96%B0%E6%B5%AA%E5%BE%AE%E5%8D%9A%E8%83%8C%E5%90%8E%E7%9A%84%E9%82%A3%E4%BA%9B%E7%AE%97%E6%B3%95/1.htm">谈谈新浪微博背后的那些算法</a>
                                    <div>本文对微博中常见的问题的对应算法进行了简单的介绍,在实际应用中的算法比介绍的要复杂的多。当然,本文覆盖的主题并不全,比如好友推荐、热点跟踪等就没有涉及到。但古人云“窥一斑而见全豹”,希望本文的介绍能帮助大家更好的理解微博这样的社交网络应用。 
微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针</div>
                                </li>
                                <li><a href="/article/1246.htm"
                                       title="Connection reset 连接被重置的解决方法" target="_blank">Connection reset 连接被重置的解决方法</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/%E5%AD%97%E7%AC%A6%E6%B5%81/1.htm">字符流</a><a class="tag" taget="_blank" href="/search/%E8%BF%9E%E6%8E%A5%E8%A2%AB%E9%87%8D%E7%BD%AE/1.htm">连接被重置</a>
                                    <div>流是java的核心部分,,昨天在做android服务器连接服务器的时候出了问题,就将代码放到java中执行,结果还是一样连接被重置 
  
被重置的代码如下; 
  
客户端代码; 
package 通信软件服务器;

import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.O</div>
                                </li>
                                <li><a href="/article/1373.htm"
                                       title="web.xml配置详解之filter" target="_blank">web.xml配置详解之filter</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/filter/1.htm">filter</a>
                                    <div>一.定义 
<filter>
	<filter-name>encodingfilter</filter-name>
	<filter-class>com.my.app.EncodingFilter</filter-class>
	<init-param>
		<param-name>encoding<</div>
                                </li>
                                <li><a href="/article/1500.htm"
                                       title="Heritrix" target="_blank">Heritrix</a>
                                    <span class="text-muted">Bill_chen</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/1.htm">配置管理</a>
                                    <div>作为纯Java语言开发的、功能强大的网络爬虫Heritrix,其功能极其强大,且扩展性良好,深受热爱搜索技术的盆友们的喜爱,但它配置较为复杂,且源码不好理解,最近又使劲看了下,结合自己的学习和理解,跟大家分享Heritrix的点点滴滴。 
Heritrix的下载(http://sourceforge.net/projects/archive-crawler/)安装、配置,就不罗嗦了,可以自己找找资</div>
                                </li>
                                <li><a href="/article/1627.htm"
                                       title="【Zookeeper】FAQ" target="_blank">【Zookeeper】FAQ</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a>
                                    <div>1.脱离IDE,运行简单的Java客户端程序 
#ZkClient是简单的Zookeeper~$ java -cp "./:zookeeper-3.4.6.jar:./lib/*" ZKClient   
  
1. Zookeeper是的Watcher回调是同步操作,需要添加异步处理的代码 
2. 如果Zookeeper集群跨越多个机房,那么Leader/</div>
                                </li>
                                <li><a href="/article/1754.htm"
                                       title="The user specified as a definer ('aaa'@'localhost') does not exist" target="_blank">The user specified as a definer ('aaa'@'localhost') does not exist</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/localhost/1.htm">localhost</a>
                                    <div>今天遇到一个客户BUG,当前的jdbc连接用户是root,然后部分删除操作都会报下面这个错误:The user specified as a definer ('aaa'@'localhost') does not exist 
最后找原因发现删除操作做了触发器,而触发器里面有这样一句 
  
 /*!50017 DEFINER = ''aaa@'localhost' */ 
 原来最初</div>
                                </li>
                                <li><a href="/article/1881.htm"
                                       title="javascript中showModelDialog刷新父页面" target="_blank">javascript中showModelDialog刷新父页面</a>
                                    <span class="text-muted">bozch</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%88%B7%E6%96%B0%E7%88%B6%E9%A1%B5%E9%9D%A2/1.htm">刷新父页面</a><a class="tag" taget="_blank" href="/search/showModalDialog/1.htm">showModalDialog</a>
                                    <div>在页面中使用showModalDialog打开模式子页面窗口的时候,如果想在子页面中操作父页面中的某个节点,可以通过如下的进行: 
      window.showModalDialog('url',self,‘status...’); // 首先中间参数使用self 
      在子页面使用w</div>
                                </li>
                                <li><a href="/article/2008.htm"
                                       title="编程之美-买书折扣" target="_blank">编程之美-买书折扣</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>


import java.util.Arrays;

public class BookDiscount {

	/**编程之美 买书折扣

书上的贪心算法的分析很有意思,我看了半天看不懂,结果作者说,贪心算法在这个问题上是不适用的。。
下面用动态规划实现。
哈利波特这本书一共有五卷,每卷都是8欧元,如果读者一次购买不同的两卷可扣除5%的折扣,三卷10%,四卷20%,五卷</div>
                                </li>
                                <li><a href="/article/2135.htm"
                                       title="关于struts2.3.4项目跨站执行脚本以及远程执行漏洞修复概要" target="_blank">关于struts2.3.4项目跨站执行脚本以及远程执行漏洞修复概要</a>
                                    <span class="text-muted">chenbowen00</span>
<a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/WEB%E5%AE%89%E5%85%A8/1.htm">WEB安全</a>
                                    <div>因为近期负责的几个银行系统软件,需要交付客户,因此客户专门请了安全公司对系统进行了安全评测,结果发现了诸如跨站执行脚本,远程执行漏洞以及弱口令等问题。 
下面记录下本次解决的过程以便后续 
1、首先从最简单的开始处理,服务器的弱口令问题,首先根据安全工具提供的测试描述中发现应用服务器中存在一个匿名用户,默认是不需要密码的,经过分析发现服务器使用了FTP协议, 
而使用ftp协议默认会产生一个匿名用</div>
                                </li>
                                <li><a href="/article/2262.htm"
                                       title="[电力与暖气]煤炭燃烧与电力加温" target="_blank">[电力与暖气]煤炭燃烧与电力加温</a>
                                    <span class="text-muted">comsci</span>

                                    <div> 
      在宇宙中,用贝塔射线观测地球某个部分,看上去,好像一个个马蜂窝,又像珊瑚礁一样,原来是某个国家的采煤区..... 
 
      不过,这个采煤区的煤炭看来是要用完了.....那么依赖将起燃烧并取暖的城市,在极度严寒的季节中...该怎么办呢? 
 
  &nbs</div>
                                </li>
                                <li><a href="/article/2389.htm"
                                       title="oracle O7_DICTIONARY_ACCESSIBILITY参数" target="_blank">oracle O7_DICTIONARY_ACCESSIBILITY参数</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>O7_DICTIONARY_ACCESSIBILITY参数控制对数据字典的访问.设置为true,如果用户被授予了如select any table等any table权限,用户即使不是dba或sysdba用户也可以访问数据字典.在9i及以上版本默认为false,8i及以前版本默认为true.如果设置为true就可能会带来安全上的一些问题.这也就为什么O7_DICTIONARY_ACCESSIBIL</div>
                                </li>
                                <li><a href="/article/2516.htm"
                                       title="比较全面的MySQL优化参考" target="_blank">比较全面的MySQL优化参考</a>
                                    <span class="text-muted">dengkane</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了,可以参考本站的一些优化案例或者联系我,下方有我的联系方式。这是上篇。 
  
1、硬件层相关优化 
  
1.1、CPU相关 
  
在服务器的BIOS设置中,可</div>
                                </li>
                                <li><a href="/article/2643.htm"
                                       title="C语言homework2,有一个逆序打印数字的小算法" target="_blank">C语言homework2,有一个逆序打印数字的小算法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>#h1# 
  
0、完成课堂例子 
1、将一个四位数逆序打印 
1234 ==> 4321 
实现方法一: 
# include <stdio.h>

int main(void)
{
	int i = 1234;
	int one = i%10;
	int two =  i / 10 % 10;
	int three = i / 100 % 10;
</div>
                                </li>
                                <li><a href="/article/2770.htm"
                                       title="apacheBench对网站进行压力测试" target="_blank">apacheBench对网站进行压力测试</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/apachebench/1.htm">apachebench</a>
                                    <div>   ab 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试,看起来也不错,很简单,也很容易使用,所以今天花一点时间看了一下。 
通过下面的一个简单的例子和注释,相信大家可以更容易理解这个工具的使用。 </div>
                                </li>
                                <li><a href="/article/2897.htm"
                                       title="2种办法让HashMap线程安全" target="_blank">2种办法让HashMap线程安全</a>
                                    <span class="text-muted">flyfoxs</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/jni/1.htm">jni</a>
                                    <div>多线程之--2种办法让HashMap线程安全 
多线程之--synchronized 和reentrantlock的优缺点 
多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync) 
  
  
HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全. 
  
</div>
                                </li>
                                <li><a href="/article/3024.htm"
                                       title="Spring Security(04)——认证简介" target="_blank">Spring Security(04)——认证简介</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/%E8%AE%A4%E8%AF%81/1.htm">认证</a><a class="tag" taget="_blank" href="/search/%E8%BF%87%E7%A8%8B/1.htm">过程</a>
                                    <div>认证简介 
目录 
1.1     认证过程 
1.2     Web应用的认证过程 
1.2.1    ExceptionTranslationFilter 
1.2.2    在request之间共享SecurityContext 
   

1</div>
                                </li>
                                <li><a href="/article/3151.htm"
                                       title="Java 位运算" target="_blank">Java 位运算</a>
                                    <span class="text-muted">Javahuhui</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a>
                                    <div>// 左移( << ) 低位补0 
// 0000 0000 0000 0000 0000 0000 0000 0110 然后左移2位后,低位补0: 
// 0000 0000 0000 0000 0000 0000 0001 1000 
System.out.println(6 << 2);// 运行结果是24 
 
// 右移( >> ) 高位补"</div>
                                </li>
                                <li><a href="/article/3278.htm"
                                       title="mysql免安装版配置" target="_blank">mysql免安装版配置</a>
                                    <span class="text-muted">ldzyz007</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>1、my-small.ini是为了小型数据库而设计的。不应该把这个模型用于含有一些常用项目的数据库。 
2、my-medium.ini是为中等规模的数据库而设计的。如果你正在企业中使用RHEL,可能会比这个操作系统的最小RAM需求(256MB)明显多得多的物理内存。由此可见,如果有那么多RAM内存可以使用,自然可以在同一台机器上运行其它服务。 
3、my-large.ini是为专用于一个SQL数据</div>
                                </li>
                                <li><a href="/article/3405.htm"
                                       title="MFC和ado数据库使用时遇到的问题" target="_blank">MFC和ado数据库使用时遇到的问题</a>
                                    <span class="text-muted">你不认识的休道人</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/mfc/1.htm">mfc</a>
                                    <div>=================================================================== 
第一个 
=================================================================== 
 
try{
		CString sql;
	sql.Format("select * from p</div>
                                </li>
                                <li><a href="/article/3532.htm"
                                       title="表单重复提交Double Submits" target="_blank">表单重复提交Double Submits</a>
                                    <span class="text-muted">rensanning</span>
<a class="tag" taget="_blank" href="/search/double/1.htm">double</a>
                                    <div>可能发生的场景: 
 
 
 *多次点击提交按钮  
 *刷新页面  
 *点击浏览器回退按钮  
 *直接访问收藏夹中的地址  
 *重复发送HTTP请求(Ajax) 
 
(1)点击按钮后disable该按钮一会儿,这样能避免急躁的用户频繁点击按钮。 
这种方法确实有些粗暴,友好一点的可以把按钮的文字变一下做个提示,比如Bootstrap的做法: 
http://getbootstrap.co</div>
                                </li>
                                <li><a href="/article/3659.htm"
                                       title="Java String 十大常见问题" target="_blank">Java String 十大常见问题</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a>
                                    <div> 1.字符串比较,使用“==”还是equals()?     "=="判断两个引用的是不是同一个内存地址(同一个物理对象)。     equals()判断两个字符串的值是否相等。     除非你想判断两个string引用是否同一个对象,否则应该总是使用equals()方法。     如果你了解字符串的驻留(String Interning)则会更好地理解这个问题。     
 </div>
                                </li>
                                <li><a href="/article/3786.htm"
                                       title="SpringMVC 登陆拦截器实现登陆控制" target="_blank">SpringMVC 登陆拦截器实现登陆控制</a>
                                    <span class="text-muted">xp9802</span>
<a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a>
                                    <div>思路,先登陆后,将登陆信息存储在session中,然后通过拦截器,对系统中的页面和资源进行访问拦截,同时对于登陆本身相关的页面和资源不拦截。 
  
实现方法: 
        1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23  </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>