如何在 ASP.NET MVC 中集成 AngularJS(2)

如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩、应用程序版本自动刷新和工程构建等内容。

下面介绍如何在 ASP.NET MVC 中集成 AngularJS 的第二部分。

ASP.NET 捆绑和压缩

CSS 和 JavaScript 的捆绑与压缩功能是 ASP.NET MVC 最流行和有效的特性之一。捆绑和压缩降低了 HTTP 请求和有效载荷的大小,结果是可以更快和更好的执行 ASP.NET MVC 的网站。有许多可以减少 CSS 和 JavaScript 合并的大小的方法。

捆绑可以很容易地将多个文件合并或捆绑到一个文件中。您可以创建 CSS,JavaScript 和其他包。压缩可以优化脚本和 CSS 代码,如去除不必要的空格和注释,缩短变量名到一个字符。由于捆绑和压缩降低你的 JavaScript 和 CSS 文件的大小,发送的 HTTP 的字节也会显著降低。

当配置包文件时,你需要考虑一个捆绑策略以及如何组织你的包文件。下面的 BundleConfig 类是内置的 ASP.NET 捆绑功能的配置文件。在 BundleConfig 类,我决定通过功能模块来组织我的文件。我为工程中的每一个文件设置了一个独立的捆绑,包括对脚本的单独捆绑,Angular 的核心文件,共享的 JavaScript 文件和主目录单,客户目录和产品目录。

我创建了客户和产品目录的独立包,带着这种想法,当用户请求应用程序的这些源文件时,应以将会动态的加载这些捆绑。由于 AngularJS 是一个纯客户端框架,可以动态加载 ASP.NET 包和服务器端技术,所以这两项技术相结合,成为了这个要求具有发布调试模块的实例应用的最大开发挑战。

// BundleConfig.cs
using System.Web;
using System.Web.Optimization;

public class BundleConfig
{
    // For more information on bundling, visit http://go.microsft.com/fwlink/?LinkId=301862
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
            "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
            "~/Scripts/bootstrap.js",
            "~/Scripts/respond.js"
        ));

        bundles.Add(new StyleBundle("~/Content/css").Include(
           "~/Content/bootstrap.css",
           "~/Content/site.css",
           "~/Content/SortableGrid.css",
           "~/Content/angular-block-ui.min.css",
           "~/Content/font-awesome.min.css"
        ));

        bundles.Add(new ScriptBundle("~/bundles/angular").Include(
           "~/Scripts/angular.min.js",
           "~/Scripts/angular-route.min.js",
           "~/Scripts/angular-sanitize.min.js",
           "~/Scripts/angular-ui.min.js",
           "~/Scripts/angular-ui/ui-bootstrap.min.js",
           "~/Scripts/angular-ui/ui-bootstrap-tpls.min.js",
           "~/Scripts/angular-ui.min.js",
           "~/Scripts/angular-block-ui.js"
        ));

        bundles.Add(new ScriptBundle("~/bundles/shared").Include(
           "~/Views/Shared/CodeProjectBootstrap.js",
           "~/Views/Shared/AjaxService.js",
           "~/Views/Shared/AlertService.js",
           "~/Views/Shared/DataGridService.js",
           "~/Views/Shared/MasterController.js"
        ));

        bundles.Add(new ScriptBundle("~/bundles/routing-debug").Include(
           "~/Views/Shared/CodeProjectRouting-debug.js"
        ));

        bundles.Add(new ScriptBundle("~/bundles/routing-production").Include(
           "~/Views/Shared/CodeProjectRouting-production.js"
        ));

        bundles.Add(new ScriptBundle("~/bundles/home").Include(
           "~/Views/Home/IndexController.js",
           "~/Views/Home/AboutController.js",
           "~/Views/Home/ContactController.js",
           "~/Views/Home/InitializeDataController.js"
        ));

 
        bundles.Add(new ScriptBundle("~/bundles/customers").Include(
           "~/Views/Customers/CustomerMaintenanceController.js",
           "~/Views/Customers/CustomerInquiryController.js"
        ));

 
        bundles.Add(new ScriptBundle("~/bundles/products").Include(
           "~/Views/Products/ProductMaintenanceController.js",
           "~/Views/Products/ProductInquiryController.js"
        ));
    }
}

缓存与 ASP.NET 捆绑

使用 ASP.NET 捆绑的优势是它的“cache busting”的辅助方法,一旦你改变了 CSS 和 JavaScript 的缓存方式,这种方法将会使用自动引导的方式使捆绑的文件能够更容易的进行缓存。下面的代码示例是在一个 MVC 的 Razor 视图中执行的(通常情况下,是在 _Layout.cshtml 母版页)。所述的 Scripts.Render 方法将会在客户端渲染,并且当在非调试模式下执行时,它将会产生包的虚拟路径和结束包的序列号。当你更改包的内容并重新发布你的应用程序时,包将会生成一个新的版本号,这有助于客户端上的浏览器缓存,并生成一个新的下载包。

// _Layout.cshtml
@Scripts.Render("~/bundles/customers")
@Scripts.Render("~/bundles/products")

该 Scripts.Render 功能是一个很好的功能,但在此示例应用程序,我想使用在客户端一侧动态加载的客户和产品,所以我不能用渲染功能来渲染我的一些包,这是挑战的开始。这个问题是以如何使用 AngularJS 从客户端 JavaScript 渲染服务器端的 ASP.NET 包开始的?

_Layout.cshtml - 服务器端启动代码

一个使用 ASP.NET MVC 来引导 AngularJS 应用程序的好处是,你可以通过 _Layout.cshtml 主页中服务器端的代码,来加载和执行 AngularJS 的代码。这是第一步,帮助解决我通过客户端代码渲染服务器端捆绑的窘境。当然,你可以简单地嵌入脚本来标记客户端的代码,但我需要一种方法来渲染一个包和引用,并维护被追加到清除了缓存的包的目的自动版本号。

开始的时候,我在 _Layout.cshtml 母版页的顶部编写了一些服务器端代码。我所做的头两件事情就是让从程序集信息类中获取应用的序列号,从应用程序设置中获取检索的基本 URL。这两个都将被之后 HTML 中的 Razor 视图引擎所解析。

下面的代码段,产生了我想根据需求动态加载的一些包,我不想当应用启动时加载所有的前期的包。我需要的信息中的最重要一块是虚拟路径和每一次捆绑的长版本号。幸运的是,访问捆绑信息的方法,本身就是一种捆绑的功能。

下面的代码行的关键行引用了 BundleTable。这行代码执行了 ResolveBundleUrl 返回了该方法的虚拟路径以及每个引用的捆绑和版本号。这些代码基本上生成一个包的列表并且将该列表转换成一个 JSON 集合。后来这个 JSON 集被添加到 AngularJS。有一个 JSON 集合中的包的信息是,允许从客户端 AngularJS 应用程序加载服务器端捆绑的最初的方法。

// _Layout.cshtml
@using CodeProject.Portal.Models
@{
    string version = typeof(CodeProject.Portal.MvcApplication).Assembly.GetName().Version.ToString();
    string baseUrl = System.Configuration.ConfigurationManager.AppSettings["BaseUrl"].ToString();

    List bundles = new List();
    CodeProject.Portal.Models.CustomBundle customBundle;

    List<string> codeProjectBundles = new List<string>();
    codeProjectBundles.Add("home");
    codeProjectBundles.Add("customers");
    codeProjectBundles.Add("products");

    foreach (string controller in codeProjectBundles)
    {
        customBundle = new CodeProject.Portal.Models.CustomBundle();
        customBundle.BundleName = controller;
        customBundle.Path = BundleTable.Bundles.ResolveBundleUrl("~/bundles/" + controller);
        customBundle.IsLoaded = false;
        bundles.Add(customBundle);
    }

    BundleInformation bundleInformation = new BundleInformation();
    bundleInformation.Bundles = bundles;
    string bundleInformationJSON = Newtonsoft.Json.JsonConvert.SerializeObject(
    bundleInformation, Newtonsoft.Json.Formatting.None);

}

ASP.NET 的捆绑类有很多的功能。例如,如果你想通过捆绑所有文件进行迭代,你可以执行 EnumerateFiles 方法,返回一个特定的包内的每个文件的虚拟路径。

foreach (var file in bundle.EnumerateFiles(new BundleContext(
         new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, "~/bundles/shared")))
{
    string filePath = file.IncludedVirtualPath.ToString();
}

_Layout.cshtml - 标题

在 HTML 文档的标题部分,有一个 RequireJS 的参考。该应用程序通过客户端 AngularJS 代码使用了 RequireJS 动态的加载包。RequireJS 是一个加载了 JavaScript API 模块的异步模块定义(AMD)。RequireJS 有许多功能,但是对于实例应用的目的,仅需要来自于 RequireJS 的请求功能以便在后面应用程序的使用。

此外,Scripts.Render 和 Styles.Render 方法将在开始部分被执行。当应用程序以调试模式执行或者 EnableOptimizations 被指为 false 时,渲染的方法将会在每一次捆绑中生成多个脚本。当在发布模式和启用优化时,渲染方法将生成一个脚本标记来代表整个捆绑的版本戳。

这就导致了另外一个挑战,那就是应用需要支持发布模式下生成捆绑脚本标签的能力,和调试模式下生成独特文件的脚本标签的能力。如果你想要在调试模式下为 JavaScript 代码设置断点,这点是很重要的。因为如果在发布模式下,使用 JavaScript 代码的优化捆绑版本是不可能的。

最后,在标题部分,使用 Razor 语法的基本 URL 被早早地设定为服务器侧的基本 URL 变量。



!DOCTYPE html>


"utf-8" />
"viewport" content="width=device-width, initial-scale=1.0">
"Cache-Control" content="no-cache, no-store, must-revalidate" />
"Pragma" content="no-cache" />
"Expires" content="0" />

AngularJS MVC Code Project</titlev>

<script src=<span style="color:#800000;">"</span><span style="color:#800000;">~/Scripts/require.js</span><span style="color:#800000;">"</span>></script><span style="color:#000000;">

@Scripts.Render(</span><span style="color:#800000;">"</span><span style="color:#800000;">~/bundles/jquery</span><span style="color:#800000;">"</span><span style="color:#000000;">)
@Scripts.Render(</span><span style="color:#800000;">"</span><span style="color:#800000;">~/bundles/bootstrap</span><span style="color:#800000;">"</span><span style="color:#000000;">)
@Scripts.Render(</span><span style="color:#800000;">"</span><span style="color:#800000;">~/bundles/modernizr</span><span style="color:#800000;">"</span><span style="color:#000000;">)
@Scripts.Render(</span><span style="color:#800000;">"</span><span style="color:#800000;">~/bundles/angular</span><span style="color:#800000;">"</span><span style="color:#000000;">)

@Styles.Render(</span><span style="color:#800000;">"</span><span style="color:#800000;">~/Content/css</span><span style="color:#800000;">"</span><span style="color:#000000;">)

</span><<span style="color:#0000ff;">base</span> href=<span style="color:#800000;">"</span><span style="color:#800000;">#baseUrl</span><span style="color:#800000;">"</span> />

</head></pre> 
   </div> 
   <h3><span style="font-family:'Microsoft YaHei';">调试模式VS发布模式</span></h3> 
   <p><span style="font-family:'Microsoft YaHei';">当 EnableOptimizations 被设置为 false,或者在调试模式运行时,该 @Scripts.Render 方法会在每一次捆绑中产生多种脚本标签。如果你想设置断点并调试 JavaScript 文件,这是必要的。你有另一种选择,就是在调试模式下,使用 RenderFormat 方法来选人客户脚本标签。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">下面的代码片段包含在 _layout.cshtml 母版页中,当应用程序在调试模式下,RenderFormat 会被使用。在这种模式下,应用的版本序列号会被追加到捆绑中的所有JavaScript 文件的脚本标签中。对于标准的渲染脚本标签格式不包含追加版本号来说,这也算是个小弥补。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">从 Visual Studio 中启动应用程序时,您可能会遇到浏览器缓存的问题。同时也可能会花时间来猜测,你运行的是否是最新版本的 JavaScript 文件。在浏览器中按 F5 可以解决这个问题。为了避免这个问题一起发生,应用程序版本号会被附加到脚本标签中。使用自动版本插件,版本号会在每次构建中自动递增。使用这项技术,我能够知道每一次的编译和运行使用的是 JavaScript 文件的最新版本,这为我省了很多时间。</span></p> 
   <div class="cnblogs_code"> 
    <pre><span style="color:#008000;">//</span><span style="color:#008000;"> _Layout.cshtml</span><span style="color:#000000;">
@if (HttpContext.Current.IsDebuggingEnabled)
{
    @Scripts.RenderFormat(</span><span style="color:#800000;">"</span><span style="color:#800000;"><script type=\"text/javascript\" src=\"{0}?ver =</span><span style="color:#800000;">"</span> + @version + <span style="color:#800000;">"</span><span style="color:#800000;"> \"></span>
                           </script><span style="color:#800000;">"</span><span style="color:#800000;">, </span><span style="color:#800000;">"</span>~/bundles/shared<span style="color:#800000;">"</span><span style="color:#800000;">)</span><span style="color:#000000;">
    @Scripts.RenderFormat(</span><span style="color:#800000;">"</span><span style="color:#800000;"><script type=\"text/javascript\" src=\"{0}?ver =</span><span style="color:#800000;">"</span> + @version + <span style="color:#800000;">"</span><span style="color:#800000;"> \"></span>
                           </script><span style="color:#800000;">"</span><span style="color:#800000;">,</span><span style="color:#800000;">"</span>~/bundles/routing-debug<span style="color:#800000;">"</span><span style="color:#800000;">)</span><span style="color:#000000;">
}
</span><span style="color:#0000ff;">else</span><span style="color:#000000;">
{
    @Scripts.Render(</span><span style="color:#800000;">"</span><span style="color:#800000;">~/bundles/shared</span><span style="color:#800000;">"</span><span style="color:#000000;">)
    @Scripts.Render(</span><span style="color:#800000;">"</span><span style="color:#800000;">~/bundles/routing-production</span><span style="color:#800000;">"</span><span style="color:#000000;">)
}</span></pre> 
   </div> 
   <h3><span style="font-family:'Microsoft YaHei';font-size:1.17em;line-height:1.5;">服务器端 Razor 数据和 AngularJS 之间的桥梁</span></h3> 
   <p><span style="font-family:'Microsoft YaHei';">现在,我已经创建了服务器端的捆绑数据的收集,接下来的挑战就是注入并创建服务器端和客户端 AngularJS 代码的桥梁。在 _Layout.cshtml 母版页,我创建了能够创造一个 AngularJS 供应商的匿名的 JavaScript 功能。最初我计划创建一个常规的 AngularJS 服务或者一个包含在 _Layout.cshtml 文件中能够使用 Razor 语法注入服务器端的方法集。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">不幸的是,直到 AngularJS 配置阶段完成之后,才能提供 AngularJS 服务和方法集,因此我无法在主页中创建一个没有 AngularJS 错误的服务。为了克服这个限制,则需要创建一个 AngularJS 的提供者。提供者的功能是,能够创建提供方法集和服务的实例。提供者允许你在 Angular 配置过程中创建和配置一个服务。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">服务提供者名称是以他们所提供工作的提供商为开始的。下面的代码片段中,代码创建一个“applicationConfiguration”提供商,这个提供商正在被 applicationConfigurationProvider 引用。这个提供商将会在构造函数中被配置,来设定用于动态请求的应用所需的程序集版本号和捆绑列表。MVC Razor 代码在构造函数中会注入服务器端的数据。</span></p> 
   <div class="cnblogs_code"> 
    <pre><span style="color:#008000;">//</span><span style="color:#008000;"> _Layout.cshtml</span><span style="color:#000000;">
(function () {
        </span><span style="color:#0000ff;">var</span> codeProjectApplication = angular.module(<span style="color:#800000;">'</span><span style="color:#800000;">codeProject</span><span style="color:#800000;">'</span><span style="color:#000000;">);
        codeProjectApplication.provider(</span><span style="color:#800000;">'</span><span style="color:#800000;">applicationConfiguration</span><span style="color:#800000;">'</span><span style="color:#000000;">, function () {
            </span><span style="color:#0000ff;">var</span><span style="color:#000000;"> _version;
            </span><span style="color:#0000ff;">var</span><span style="color:#000000;"> _bundles;
            </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> {
                setVersion: function (version) {
                _version </span>=<span style="color:#000000;"> version;
            },

            setBundles: function (bundles) {
                _bundles </span>=<span style="color:#000000;"> bundles;
            },

            getVersion: function () {
                </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> _version;
            },

            getBundles: function () {
                </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> _bundles;
            },

            $</span><span style="color:#0000ff;">get</span><span style="color:#000000;">: function () {
                </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> {
                    version: _version,
                    bundles: _bundles
                }
            }
       }
    });

    codeProjectApplication.config(function (applicationConfigurationProvider) {
        applicationConfigurationProvider.setVersion(</span><span style="color:#800000;">'</span><span style="color:#800000;">@version</span><span style="color:#800000;">'</span><span style="color:#000000;">);
        applicationConfigurationProvider.setBundles(</span><span style="color:#800000;">'</span><span style="color:#800000;">@Html.Raw(bundleInformationJSON)</span><span style="color:#800000;">'</span><span style="color:#000000;">);
    });
})();</span></pre> 
   </div> 
   <h3><span style="font-family:'Microsoft YaHei';line-height:1.5;">路由产生和动态加载 MVC 捆绑</span></h3> 
   <p><span style="font-family:'Microsoft YaHei';">现在你可能已经看到了很多例子实现了每个内容页硬编码路径的 AngularJS 示例。示例应用程序的路由使用基于约定的方法,这种方法允许路由表使用硬编码的路由方法来实现使用基于约定的方法。所有的内容页和相关联的 JavaScript 文件将会遵循命名约定规则,这个规则允许该应用程序来解析路由并动态地确定每个内容页需要哪些 JavaScript 文件。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">下面的示例应用程序的路由表只需要分析出三条路线:</span></p> 
   <ul> 
    <li><span style="font-family:'Microsoft YaHei';">一个用于根路径'/'</span></li> 
    <li><span style="font-family:'Microsoft YaHei';">一个标准路由路径,如<strong>'/:section/:tree'</strong></span></li> 
    <li><span style="font-family:'Microsoft YaHei';">包含路由参数的路由,如<strong>'/:section/:tree/:id'</strong> </span></li> 
   </ul> 
   <p><span style="font-family:'Microsoft YaHei';">我决定从 ASP.NET 捆绑中加载 JavaScript 文件,下面的路由配置代码需要包含一些 applicationConfigurationProvider 引用的代码,来用于创建保存之前的捆绑信息。捆绑信息将会被解析为 JSON 集。捆绑信息集将会用于返回虚拟的捆绑路径。此外,JSON 集将被用于跟踪被加载的捆绑。一旦捆绑被加载,就不需要第二次捆绑了。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">有几件事情需要写入路由代码中。首先,每当用户选择一个页面来加载一定功能模块时,对于模块绑定的所有 JavaScript 文件需要被下载。例如,当用户选择客户模式中的一个内容页面时,以下的代码会查看模块的捆绑是否已经通过 JSON _bundles collection 的 isLoaded 属性被检查了,并且如果 isLoaded 为 false,则捆绑将会被记载, isLoaded 属性会被设置为 true。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">当确定需要下载哪些模式的捆绑时,有两件事情需要去加载捆绑:deferred promise 和 RequireJS。deferred promise 可以帮助你异步运行函数,当它完成执行,就会返回。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">现在,最后一块本文之谜是确定从客户端代码包中加载的方式。我在以前的文章 CodeProject.com 使用 RequireJS(前面提到的)来动态加载 JavaScript 文件,我使用捆绑来加载 RequireJS。使用 RequireJS“需求”的功能, 我通过捆绑的虚拟路径进入需求功能。事实证明,需求功能将会加载任何能够更好执行捆绑加载的路径。</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">当我第一次使用 RequireJS 的路径来下载捆绑时,我已经完成了 RequireJS 和它的所有配置。事实证明,我能够去掉这一切,只是简单地加载 RequireJS 库并使用它的需求功能。我甚至没有使用 RequireJS 定义表述来预安装我的动态加载控制器。很多试验和错误之后,我已经达到了本文的目的。我现在可以通过客户端代码加载服务器端的捆绑。</span></p> 
   <div class="cnblogs_code"> 
    <pre><span style="color:#008000;">//</span><span style="color:#008000;"> CodeProjectRouting-production.js</span><span style="color:#000000;">
​angular.module(</span><span style="color:#800000;">"</span><span style="color:#800000;">codeProject</span><span style="color:#800000;">"</span><span style="color:#000000;">).config(
[</span><span style="color:#800000;">'</span><span style="color:#800000;">$routeProvider</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">$locationProvider</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">applicationConfigurationProvider</span><span style="color:#800000;">'</span><span style="color:#000000;">
    function ($routeProvider, $locationProvider, applicationConfigurationProvider) {
        </span><span style="color:#0000ff;">var</span> baseSiteUrlPath = $(<span style="color:#800000;">"</span><span style="color:#800000;">base</span><span style="color:#800000;">"</span>).first().attr(<span style="color:#800000;">"</span><span style="color:#800000;">href</span><span style="color:#800000;">"</span><span style="color:#000000;">);
        </span><span style="color:#0000ff;">var</span> _bundles =<span style="color:#000000;"> JSON.parse(applicationConfigurationProvider.getBundles());
        </span><span style="color:#0000ff;">this</span>.getApplicationVersion =<span style="color:#000000;"> function () {
            </span><span style="color:#0000ff;">var</span> applicationVersion =<span style="color:#000000;"> applicationConfigurationProvider.getVersion();
            </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> applicationVersion;
        }
        </span><span style="color:#0000ff;">this</span>.getBundle =<span style="color:#000000;"> function (bundleName) {

            </span><span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">var</span> i = <span style="color:#800080;">0</span>; i < _bundles.Bundles.length; i++<span style="color:#000000;">) {
                </span><span style="color:#0000ff;">if</span> (bundleName.toLowerCase() ==<span style="color:#000000;"> _bundles.Bundles[i].BundleName) {
                    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> _bundles.Bundles[i].Path;
                }
            }
        }
        </span><span style="color:#0000ff;">this</span>.isLoaded =<span style="color:#000000;"> function (bundleName) {
            </span><span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">var</span> i = <span style="color:#800080;">0</span>; i < _bundles.Bundles.length; i++<span style="color:#000000;">) {
                </span><span style="color:#0000ff;">if</span> (bundleName.toLowerCase() ==<span style="color:#000000;"> _bundles.Bundles[i].BundleName) {
                    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> _bundles.Bundles[i].IsLoaded;
                }
            }
        }
        </span><span style="color:#0000ff;">this</span>.setIsLoaded =<span style="color:#000000;"> function (bundleName) {
            </span><span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">var</span> i = <span style="color:#800080;">0</span>; i < _bundles.length; i++<span style="color:#000000;">) {
                </span><span style="color:#0000ff;">if</span> (bundleName.toLowerCase() ==<span style="color:#000000;"> _bundles.Bundles[i].BundleName) {
                    _bundles.Bundles[i].IsLoaded </span>= <span style="color:#0000ff;">true</span><span style="color:#000000;">;
                    </span><span style="color:#0000ff;">break</span><span style="color:#000000;">;
                }
            }
        }
        $routeProvider.when(</span><span style="color:#800000;">'</span><span style="color:#800000;">/:section/:tree</span><span style="color:#800000;">'</span><span style="color:#000000;">,
        {
            templateUrl: function (rp) { </span><span style="color:#0000ff;">return</span> baseSiteUrlPath + <span style="color:#800000;">'</span><span style="color:#800000;">views/</span><span style="color:#800000;">'</span> +<span style="color:#000000;"> 
                         rp.section </span>+ <span style="color:#800000;">'</span><span style="color:#800000;">/</span><span style="color:#800000;">'</span> + rp.tree + <span style="color:#800000;">'</span><span style="color:#800000;">.html?v=</span><span style="color:#800000;">'</span> + <span style="color:#0000ff;">this</span><span style="color:#000000;">.getApplicationVersion(); },
            resolve: {
                load: [</span><span style="color:#800000;">'</span><span style="color:#800000;">$q</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">$rootScope</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">$location</span><span style="color:#800000;">'</span><span style="color:#000000;">, function ($q, $rootScope, $location) {
                    </span><span style="color:#0000ff;">var</span> path = $location.path().split(<span style="color:#800000;">"</span><span style="color:#800000;">/</span><span style="color:#800000;">"</span><span style="color:#000000;">);
                    </span><span style="color:#0000ff;">var</span> parentPath = path[<span style="color:#800080;">1</span><span style="color:#000000;">];
                    </span><span style="color:#0000ff;">var</span> bundle = <span style="color:#0000ff;">this</span><span style="color:#000000;">.getBundle(parentPath);
                    </span><span style="color:#0000ff;">var</span> isBundleLoaded = <span style="color:#0000ff;">this</span><span style="color:#000000;">.isLoaded(parentPath);
                    </span><span style="color:#0000ff;">if</span> (isBundleLoaded == <span style="color:#0000ff;">false</span><span style="color:#000000;">) {
                        </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.setIsLoaded(parentPath);
                        </span><span style="color:#0000ff;">var</span> deferred =<span style="color:#000000;"> $q.defer();
                        require([bundle], function () {
                            $rootScope.$apply(function () {
                                deferred.resolve();
                            });
                        });
                        </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> deferred.promise;
                    }
                }]
            }
        });
        $routeProvider.when(</span><span style="color:#800000;">'</span><span style="color:#800000;">/:section/:tree/:id</span><span style="color:#800000;">'</span><span style="color:#000000;">,
        {
            templateUrl: function (rp) { </span><span style="color:#0000ff;">return</span> baseSiteUrlPath + <span style="color:#800000;">'</span><span style="color:#800000;">views/</span><span style="color:#800000;">'</span> +<span style="color:#000000;"> 
                         rp.section </span>+ <span style="color:#800000;">'</span><span style="color:#800000;">/</span><span style="color:#800000;">'</span> + rp.tree + <span style="color:#800000;">'</span><span style="color:#800000;">.html?v=</span><span style="color:#800000;">'</span> + <span style="color:#0000ff;">this</span><span style="color:#000000;">.getApplicationVersion(); },
            resolve: {
                load: [</span><span style="color:#800000;">'</span><span style="color:#800000;">$q</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">$rootScope</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">$location</span><span style="color:#800000;">'</span><span style="color:#000000;">, function ($q, $rootScope, $location) {
                    </span><span style="color:#0000ff;">var</span> path = $location.path().split(<span style="color:#800000;">"</span><span style="color:#800000;">/</span><span style="color:#800000;">"</span><span style="color:#000000;">);
                    </span><span style="color:#0000ff;">var</span> parentPath = path[<span style="color:#800080;">1</span><span style="color:#000000;">];
                    </span><span style="color:#0000ff;">var</span> bundle = <span style="color:#0000ff;">this</span><span style="color:#000000;">.getBundle(parentPath);
                    </span><span style="color:#0000ff;">var</span> isBundleLoaded = <span style="color:#0000ff;">this</span><span style="color:#000000;">.isLoaded(parentPath);
                    </span><span style="color:#0000ff;">if</span> (isBundleLoaded == <span style="color:#0000ff;">false</span><span style="color:#000000;">) {
                        </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.setIsLoaded(parentPath);
                        </span><span style="color:#0000ff;">var</span> deferred =<span style="color:#000000;"> $q.defer();
                        require([bundle], function () {
                            $rootScope.$apply(function () {
                                deferred.resolve();
                            });
                        });
                        </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> deferred.promise;
                    }
                }]
            }
        });
        $routeProvider.when(</span><span style="color:#800000;">'</span><span style="color:#800000;">/</span><span style="color:#800000;">'</span><span style="color:#000000;">,
        {
            templateUrl: function (rp) { <br></span><span style="color:#0000ff;">                return</span> baseSiteUrlPath + <span style="color:#800000;">'</span><span style="color:#800000;">views/Home/Index.html?v=</span><span style="color:#800000;">'</span> + <span style="color:#0000ff;">this</span><span style="color:#000000;">.getApplicationVersion(); },
                resolve: {
                load: [</span><span style="color:#800000;">'</span><span style="color:#800000;">$q</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">$rootScope</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">$location</span><span style="color:#800000;">'</span><span style="color:#000000;">, function ($q, $rootScope, $location) {
                    </span><span style="color:#0000ff;">var</span> bundle = <span style="color:#0000ff;">this</span>.getBundle(<span style="color:#800000;">"</span><span style="color:#800000;">home</span><span style="color:#800000;">"</span><span style="color:#000000;">);
                    </span><span style="color:#0000ff;">var</span> isBundleLoaded = <span style="color:#0000ff;">this</span>.isLoaded(<span style="color:#800000;">"</span><span style="color:#800000;">home</span><span style="color:#800000;">"</span><span style="color:#000000;">);
                    </span><span style="color:#0000ff;">if</span> (isBundleLoaded == <span style="color:#0000ff;">false</span><span style="color:#000000;">) {
                        </span><span style="color:#0000ff;">this</span>.setIsLoaded(<span style="color:#800000;">"</span><span style="color:#800000;">home</span><span style="color:#800000;">"</span><span style="color:#000000;">);
                        </span><span style="color:#0000ff;">var</span> deferred =<span style="color:#000000;"> $q.defer();
                        require([bundle], function () {
                            $rootScope.$apply(function () {
                                deferred.resolve();
                            });
                        });
                        </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> deferred.promise;
                    }
                }]
            }
        });
        $locationProvider.html5Mode(</span><span style="color:#0000ff;">true</span><span style="color:#000000;">);
     }
]);</span></pre> 
   </div> 
   <p><span style="font-family:'Microsoft YaHei';">以上是如何在 ASP.NET MVC 中集成 AngularJS 的第二部分内容,最后一篇内容会在近期呈现,敬请期待!</span></p> 
   <p><span style="font-family:'Microsoft YaHei';">在这第二部分讲解中,作者解决了如何在 ASP.NET MVC 中集成 AngularJS 遇到的大部分问题。当我们自己在进行 ASP.NET MVC 和 AngularJS 开始时,还可以借助开发工具来助力开发过程。ASP.NET MVC开发时,可以借助 <span style="color:#ff0000;"><strong><span style="color:#ff0000;">ComponentOne Studio ASP.NET MVC</span></strong> </span>这一款轻量级控件,它与 Visual Studio 无缝集成,完全与 MVC6 和 ASP.NET 5.0 兼容,将大幅提高工作效率;AngularJS 开发时,可以借助 <strong><span style="color:#ff0000;"><span style="color:#ff0000;">Wijmo</span></span></strong> 这款为企业应用程序开发而推出的一系列包含 HTML5 和 JavaScript 的开发控件集,无论应用程序是移动端、PC端、还是必须要支持IE6,Wijmo 均能满足需求。</span></p> 
   <p> </p> 
   <p><span style="font-family:'Microsoft YaHei';">文章来源:By <span class="author">Mark J. Caplin </span></span></p> 
   <p><span style="font-family:'Microsoft YaHei';">原文链接:http://www.codeproject.com/Articles/1033076/Integrating-AngularJS-with-ASP-NET-MVC</span></p> 
   <p> </p> 
   <p><span style="font-size:15px;"><strong>相关阅读:</strong></span></p> 
   <p><span style="font-size:16px;">是什么让C#成为最值得学习的编程语言</span></p> 
   <p><span style="font-size:16px;">从Visual Studio看微软20年技术变迁</span></p> 
   <p><span style="font-size:16px;">C#开发人员应该知道的13件事情</span></p> 
   <p><span style="font-size:16px;">Visual Studio 2017正式版发布全纪录</span></p> 
   <p> </p> 
  </div> 
  <p>转载于:https://www.cnblogs.com/powertoolsteam/p/Integrating-AngularJS-with-ASP-NET-MVC2.html</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1288688123852693504"></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">你可能感兴趣的:(如何在 ASP.NET MVC 中集成 AngularJS(2))</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1892526340897304576.htm"
                           title="《JavaScript高级程序设计》——第四章:变量、作用域与内存管理" target="_blank">《JavaScript高级程序设计》——第四章:变量、作用域与内存管理</a>
                        <span class="text-muted">dorabighead</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</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/ecmascript/1.htm">ecmascript</a>
                        <div>《JavaScript高级程序设计》——第四章:变量、作用域与内存管理大家好!我是小哆啦,欢迎回到《JavaScript高级程序设计》的读书笔记大本营!在这章中,我们要聊的是两个让人头疼又迷人的话题——变量、作用域与内存管理。有些人一提到这些,就会感到一阵头晕目眩,恍若置身一场JavaScript版的迷宫大冒险!但今天,小哆啦会带你们轻松过关,深入了解这些概念,并且保持足够的幽默感,让你既能笑着学</div>
                    </li>
                    <li><a href="/article/1892526214493564928.htm"
                           title="国内那么多的低代码平台,究竟哪家比较强?" target="_blank">国内那么多的低代码平台,究竟哪家比较强?</a>
                        <span class="text-muted">有颜有货</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0/1.htm">低代码平台</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0/1.htm">低代码平台</a>
                        <div>国内低代码平台哪家强?本人摸索低代码5年多,体验过几十家低代码平台,下面通过2张功能对比图,3K字内容详细告诉你:国内低代码到底哪家强。如果你觉得我的分析对你有一定帮助,还请点赞收藏支持一下,争取能让更多人看到并帮助需要的人。话不多说,先上图。国内主流低代码产品功能对比。(图二在回答末尾)一、织信Informat(企业级低代码平台)功能清单驱动方式:模型驱动字段支持:35种字段,同时支持通过js脚</div>
                    </li>
                    <li><a href="/article/1892524954830827520.htm"
                           title="手机对小孩的影响及应对措施探究" target="_blank">手机对小孩的影响及应对措施探究</a>
                        <span class="text-muted">China_Mr_Huang</span>
<a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a>
                        <div>在信息技术日新月异的当下,手机早已超脱了单纯通讯工具的范畴,深度融入现代生活的每一处细节,成为人们日常生活中不可或缺的存在。对于正处于身心快速发展关键阶段的小孩而言,手机犹如一把双刃剑,一方面为他们打开了知识的宝库,提供了便捷获取信息、拓展视野的渠道,另一方面,也在不知不觉中埋下了诸多潜在风险的隐患。因此,深入且全面地剖析手机对小孩成长所产生的影响,并探寻切实可行、行之有效的应对举措,无疑具有极其</div>
                    </li>
                    <li><a href="/article/1892524576919842816.htm"
                           title="【架构】分层架构 (Layered Architecture)" target="_blank">【架构】分层架构 (Layered Architecture)</a>
                        <span class="text-muted">_君莫笑</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84/1.htm">软件架构</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>一、分层模型基础理论![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0365cf0bfa754229bdedca6b472bffc7.png1.核心定义分层架构(LayeredArchitecture)模型是一种常见的软件设计架构,它将软件系统按照功能划分为不同的层次,每个层次都有特定的职责和功能,层与层之间存在清晰的依赖关系。这种架构有助于提高软件的可</div>
                    </li>
                    <li><a href="/article/1892524071963389952.htm"
                           title="Java——列表(List)" target="_blank">Java——列表(List)</a>
                        <span class="text-muted">不会Hello World的小苗</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/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>概述在Java中,列表(List)是一种有序的集合,它允许元素重复,并且每个元素都有一个对应的索引值。Java提供了List接口及其实现类,用于表示和操作列表数据。常用的实现类包括ArrayList、LinkedList和Vector。1、List接口概述List是Java集合框架中的一种接口,继承自Collection接口。它定义了许多常见的操作,如:添加元素:add(Ee)、add(intin</div>
                    </li>
                    <li><a href="/article/1892523567237623808.htm"
                           title="Java 中的包(Package)与导入(Import)详解" target="_blank">Java 中的包(Package)与导入(Import)详解</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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录一、引言二、包的概念(一)包的定义与作用(二)JDK中主要的包三、导入的概念(一)导入的目的与用法(二)特殊情况的导入四、补充知识点(一)静态导入(二)包的访问权限(三)包的命名规范五、总结一、引言在Java编程中,包(Package)和导入(Import)是非常重要的概念。它们帮助我们更好地组织代码、管理项目结构、解决命名冲突以及控制访问权限。本文将详细介绍Java中的包和导入的相关知识,通</div>
                    </li>
                    <li><a href="/article/1892523315201896448.htm"
                           title="手把手教你怎么用QT进行TCP数据通信" target="_blank">手把手教你怎么用QT进行TCP数据通信</a>
                        <span class="text-muted">JackRedWind</span>
<a class="tag" taget="_blank" href="/search/QT%E5%9F%BA%E7%A1%80%E6%95%99%E5%AD%A6/1.htm">QT基础教学</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>在前面两篇我们已经构建了最基础的网络连接手把手教你们怎么在QT中使用TCP-CSDN博客手把手教你怎么用QT写Tcp客户端-CSDN博客接下来我要让服务器和客户端之间进行网络通信,所谓通信其实很简单,就是发送和接受。由于qt有信号槽机制,我们可以用信号来通知程序处理收到的数据。1.这里我们先给服务器加入接受数据的槽函数,如下图2.这里我们只要触发readyRead的信号,就会通过qDebug()打</div>
                    </li>
                    <li><a href="/article/1892521677305212928.htm"
                           title="“网约车霸主“地位面临挑战专题报告" target="_blank">“网约车霸主“地位面临挑战专题报告</a>
                        <span class="text-muted">拓端研究室</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%A5%E5%91%8A/1.htm">报告</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E8%83%BD%E6%BA%90%E6%B1%BD%E8%BD%A6/1.htm">新能源汽车</a>
                        <div>原文链接:tecdat.cn/?p=36528原文出处:拓端数据部落公众号广汽埃安新能源汽车,在中国车市竞争加剧的浪潮中,坚定立场,誓不言退。近期,集团虽遭遇“反内卷”讨论及裁员传言的风暴,但埃安迅速且明确地澄清,所谓的“20%人员效率提升”并非裁员举措,而是优化调整,并承诺对受影响的应届毕业生履行合同赔偿,彰显企业责任感。同时,埃安宣布泰国与长沙新厂的投产及扩招蓝图,力证其持续稳健发展的决心与实</div>
                    </li>
                    <li><a href="/article/1892521550163275776.htm"
                           title="快速提升网站收录率的10个步骤" target="_blank">快速提升网站收录率的10个步骤</a>
                        <span class="text-muted">百度网站快速收录</span>
<a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6%E7%BD%91%E7%AB%99%E5%BF%AB%E9%80%9F%E6%94%B6%E5%BD%95/1.htm">百度网站快速收录</a><a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6%E5%BF%AB%E9%80%9F%E6%94%B6%E5%BD%95/1.htm">百度快速收录</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99%E5%BF%AB%E9%80%9F%E6%94%B6%E5%BD%95/1.htm">网站快速收录</a><a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6%E6%94%B6%E5%BD%95/1.htm">百度收录</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99%E6%94%B6%E5%BD%95/1.htm">网站收录</a>
                        <div>快速提升网站收录率需要综合考虑多个方面,以下是10个具体步骤,旨在帮助网站更快地获得搜索引擎的收录:1.提交网站地图制作并提交XML站点地图:站点地图是一个包含网站所有页面链接的文件,有助于搜索引擎快速发现和抓取网站内容。通过提交站点地图给搜索引擎,可以显著提高网站的收录速度。2.保持内容更新定期发布高质量内容:搜索引擎喜欢更新频繁的网站,因此保持网站内容的定期更新是提高收录率的关键。确保内容原创</div>
                    </li>
                    <li><a href="/article/1892521550784032768.htm"
                           title="Docker 部署AnythingLLM" target="_blank">Docker 部署AnythingLLM</a>
                        <span class="text-muted">炫爱小七</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>两个指令搞定1.下载镜像dockerpullmintplexlabs/anythingllm2.运行容器exportSTORAGE_LOCATION=$HOME/anythingllmmkdir-p$STORAGE_LOCATIONchmod-R777$STORAGE_LOCATIONtouch"$STORAGE_LOCATION/.env"dockerrun-d-p3001:3001\--cap</div>
                    </li>
                    <li><a href="/article/1892521549492187136.htm"
                           title="科普:Docker run的相关事项" target="_blank">科普:Docker run的相关事项</a>
                        <span class="text-muted">人工干智能</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/eureka/1.htm">eureka</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>一、镜像名(含标签)太长如,通过如下命令行:dockerpulldesignthru2019/dify:56c6d1af0944dbdb5e0115cb623ff0e118a4ac62拉取的镜像名(及标签)太长,可以通过改名的方法变短。在Docker中,拉取到本地的镜像可以改名。本质上,这并不是直接修改镜像本身,而是为镜像添加一个新的标签(tag),因为Docker中的镜像名称和标签其实就是对镜像</div>
                    </li>
                    <li><a href="/article/1892521423067475968.htm"
                           title="“傻瓜”学计量——主成分分析法PCA(原理+实操)" target="_blank">“傻瓜”学计量——主成分分析法PCA(原理+实操)</a>
                        <span class="text-muted">nn坚持学stata+matlab</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A1%E9%87%8F/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%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/1.htm">学习方法</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>提纲:1.PCA原理2.视频推荐:PCA原理spass操作stata操作+matlab实操1.背景在一些领域中,需要对大量数据进行观测。但是可能会带来变量之间具有相关性、分别对每个指标分析带来的偏误等问题。因此,要寻找一个合理的方法,在减少需要分析的直白的同时,尽量减少原指标包含的信息缺失。通常做法是对有关联性的变量进行合并,这样就可以用较少的综合指标分别代表存在于各个变量中的各类信息。常用的方法</div>
                    </li>
                    <li><a href="/article/1892521045080993792.htm"
                           title="python 自动化数据提取之正则表达式_python 正则提取(2)" target="_blank">python 自动化数据提取之正则表达式_python 正则提取(2)</a>
                        <span class="text-muted">m0_60607245</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/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/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>一、Python所有方向的学习路线Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。二、Python必备开发工具工具都帮大家整理好了,安装就可直接上手!三、最新Python学习笔记当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理</div>
                    </li>
                    <li><a href="/article/1892520163375378432.htm"
                           title="如何将Docker运行的镜像写入数据后导出为新的镜像" target="_blank">如何将Docker运行的镜像写入数据后导出为新的镜像</a>
                        <span class="text-muted">醉心编码</span>
<a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC%E5%9F%BA%E7%A1%80/1.htm">脚本基础</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%9F%BA%E7%A1%80/1.htm">人工智能基础</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E7%B1%BB/1.htm">技术类</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a>
                        <div>如何将Docker运行的镜像写入数据后导出为新的镜像一、背景知识二、步骤详解1.查找并确认要导出的容器2.使用dockercommit命令保存容器为新的镜像3.验证新镜像4.(可选)导出新镜像为tar文件三、注意事项四、总结在Docker环境中,我们经常需要将运行中的容器保存为镜像,特别是当我们在容器中进行了数据写入或配置更改后。本文将详细介绍如何将Docker运行的镜像写入数据后导出为新的镜像。</div>
                    </li>
                    <li><a href="/article/1892520036933890048.htm"
                           title="如何解决分布式应用数量庞大而导致数据库连接数满的问题?" target="_blank">如何解决分布式应用数量庞大而导致数据库连接数满的问题?</a>
                        <span class="text-muted">纵然间</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>修改数据库服务器的配置文件或参数来增加最大连接数限制。例如,在MySQL中,可以通过修改my.cnf(Linux)或my.ini(Windows)文件中的max_connections参数来增加最大连接数。具体的操作方法可以参考数据库服务器的官方文档或相关技术支持。检查应用程序代码,确保在使用完数据库连接后及时释放连接资源,避免长时间占用连接而导致连接数不足。可以使用连接池技术来管理数据库连接,提</div>
                    </li>
                    <li><a href="/article/1892519910530150400.htm"
                           title="基于立创·天空星开发板-GD32F407VET6-青春版,开发一款手持热成像仪。该设备将采集热红外传感器的数据,经过处理后在LCD屏幕上显示热图像,并提供用户交互界面。" target="_blank">基于立创·天空星开发板-GD32F407VET6-青春版,开发一款手持热成像仪。该设备将采集热红外传感器的数据,经过处理后在LCD屏幕上显示热图像,并提供用户交互界面。</a>
                        <span class="text-muted">嵌入式程序员小刘</span>
<a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a>
                        <div>本项目基于立创·天空星开发板-GD32F407VET6-青春版,开发一款手持热成像仪。该设备将采集热红外传感器的数据,经过处理后在LCD屏幕上显示热图像,并提供用户交互界面。关注微信公众号,提前获取相关推文一、需求分析核心功能:热图像采集:读取热红外传感器数据。图像处理:将原始传感器数据转换为可显示的彩色或灰度热图像。图像显示:在LCD屏幕上实时显示热图像。温度测量:计算并显示图像中特定点的温度值</div>
                    </li>
                    <li><a href="/article/1892519657118691328.htm"
                           title="DeepSeek爆火背后:AI如何助力GIS发展" target="_blank">DeepSeek爆火背后:AI如何助力GIS发展</a>
                        <span class="text-muted">GIS前端嘉欣</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/GIS/1.htm">GIS</a><a class="tag" taget="_blank" href="/search/webgis/1.htm">webgis</a>
                        <div>2025年的春节,一款名为DeepSeek的AI工具以“推理能力超群”“性价比碾压巨头”的标签火遍全网:日活用户突破3000万,微信搜索接入其长思考模式,三大电信运营商全面部署其开源框架。这场由低成本+高性能+开源驱动的技术革命,不仅让AI开发门槛大幅降低,更预示着一个全新的产业趋势——AI与GIS的深度融合,正在重塑城市、环境和商业的底层逻辑。012025年,AI+GIS深度融合的四大趋势1.城</div>
                    </li>
                    <li><a href="/article/1892519279048323072.htm"
                           title="GUI编程(window系统→Linux系统)" target="_blank">GUI编程(window系统→Linux系统)</a>
                        <span class="text-muted">诚信爱国敬业友善</span>
<a class="tag" taget="_blank" href="/search/%E5%BF%83%E5%BE%97/1.htm">心得</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/gui/1.htm">gui</a>
                        <div>最近有个项目需要将windows系统的程序往Linux系统上面移植,由于之前程序没有考虑过多平台兼容的问题,导致部分功能不可用以下是对近期遇到的问题的总结,以及相应的解决方案和经验分享。1.Python模块安装与管理在Linux系统中,安装和管理Python模块时可能会遇到权限问题或依赖冲突。安装模块:使用pip安装模块时,建议使用--user选项,避免需要管理员权限:bash复制pipinsta</div>
                    </li>
                    <li><a href="/article/1892518775052365824.htm"
                           title="网络安全常见十大漏洞总结(原理、危害、防御)" target="_blank">网络安全常见十大漏洞总结(原理、危害、防御)</a>
                        <span class="text-muted">程序媛西米</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">计算机</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>一、弱口令【文末福利】产生原因与个人习惯和安全意识相关,为了避免忘记密码,使用一个非常容易记住的密码,或者是直接采用系统的默认密码等。危害通过弱口令,攻击者可以进入后台修改资料,进入金融系统盗取钱财,进入OA系统可以获取企业内部资料,进入监控系统可以进行实时监控等等。防御设置密码通常遵循以下原则:(1)不使用空口令或系统缺省的口令,为典型的弱口令;(2)口令长度不小于8个字符;(3)口令不应该为连</div>
                    </li>
                    <li><a href="/article/1892518648736706560.htm"
                           title="华为昇腾服务器部署DeepSeek模型实战" target="_blank">华为昇腾服务器部署DeepSeek模型实战</a>
                        <span class="text-muted">gzroy</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/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a>
                        <div>在华为的昇腾服务器上部署了DeepSeekR1的模型进行验证测试,记录一下相关的过程。服务器是配置了8块910B3的显卡,每块显卡有64GB显存,根据DeepSeekR1各个模型的参数计算,如果部署R1的Qwen14B版本,需要1张显卡,如果是32B版本,需要2张,Llama70B的模型需要4张显卡。如果是R1全参数版本,则需要32张显卡,也就是4台满配的昇腾服务器。这里先选择32B的模型进行部署</div>
                    </li>
                    <li><a href="/article/1892518522270052352.htm"
                           title="Mysql学习笔记-Mysql基础进阶" target="_blank">Mysql学习笔记-Mysql基础进阶</a>
                        <span class="text-muted">少年无为</span>
<a class="tag" taget="_blank" href="/search/Mysql/1.htm">Mysql</a><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%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2/1.htm">数据库多表查询</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%87%E4%BB%BD/1.htm">数据库备份</a><a class="tag" taget="_blank" href="/search/Mysql%E6%9F%A5%E8%AF%A2/1.htm">Mysql查询</a>
                        <div>#知识点1.DQL:查询语句1.排序查询2.聚合函数3.分组查询4.分页查询2.约束3.多表之间的关系4.范式5.数据库的备份和还原#DQL:查询语句1.排序查询*语法:orderby子句*orderby排序字段1排序方式1,排序字段2排序方式2...*排序方式:*ASC:升序,默认的。*DESC:降序。*注意:*如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。2.聚合函数:将一列数</div>
                    </li>
                    <li><a href="/article/1892518395849535488.htm"
                           title="【系统架构设计师】论文:论信息系统的安全体系" target="_blank">【系统架构设计师】论文:论信息系统的安全体系</a>
                        <span class="text-muted">数据知道</span>
<a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%B8%88/1.htm">系统架构设计师</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E8%80%83%E9%AB%98%E7%BA%A7/1.htm">软考高级</a><a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87/1.htm">论文</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>论文:论信息系统的安全体系文章目录摘要正文总结摘要2023年2月,我参加了某水库管理信息系统项目的实施。通过系统的实施和运行,实现防汛、供水、发电、闸门监控、水文等各种数据的采集、分析、存储,并通过网络及时地向有关部门汇报,以便相关领导进行调度指挥,为领导决策提供大力支持,为业务人员办公提供服务。系统的应用将有效提高某市政府水库管理所的工作效率。我作为该项目的项目负责人,主要负责项目管理,同时负责</div>
                    </li>
                    <li><a href="/article/1892517514039062528.htm"
                           title="银行排队问题之单队列多窗口服务[天梯赛 -- 栈和队列]" target="_blank">银行排队问题之单队列多窗口服务[天梯赛 -- 栈和队列]</a>
                        <span class="text-muted">苏慕TRYACE</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>文章目录题目描述思路AC代码题目描述输入样例9020115161210105103301831253123输出样例参考文章思路队列模拟存储结构:使用结构体,存储每一个客户的到达时间和处理时间==(最大为60,大于60的,按60处理)==;用两个数组分别存储每一个窗口的办理人数和该窗口结束上一次处理的时间点具体流程:由于题目给定的顾客顺序是按照时间先后,因此我们顺序处理即可1.依次遍历每一个窗口,用</div>
                    </li>
                    <li><a href="/article/1892517009762086912.htm"
                           title="ADC(模数转换器)与DAC(数模转换器)详解:从基础到应用示例" target="_blank">ADC(模数转换器)与DAC(数模转换器)详解:从基础到应用示例</a>
                        <span class="text-muted">楼台的春风</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/1.htm">嵌入式开发</a><a class="tag" taget="_blank" href="/search/STM32/1.htm">STM32</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/mcu/1.htm">mcu</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6/1.htm">自动驾驶</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a>
                        <div>ADC(模数转换器)与DAC(数模转换器)详解:从基础到应用示例目录ADC(模数转换器)与DAC(数模转换器)详解:从基础到应用示例引言一、ADC(模数转换器)1.ADC的基本概念2.ADC的工作原理3.ADC的主要类型4.ADC的技术指标5.ADC的应用场景6.ADC在嵌入式系统中的使用案例二、DAC(数模转换器)1.DAC的基本概念2.DAC的工作原理3.DAC的主要类型4.DAC的技术指标5</div>
                    </li>
                    <li><a href="/article/1892516883471593472.htm"
                           title="嵌入式学习DAY28 --- 线程、同步和互斥问题、如何实现同步和互斥?" target="_blank">嵌入式学习DAY28 --- 线程、同步和互斥问题、如何实现同步和互斥?</a>
                        <span class="text-muted">楼台的春风</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%AD%A6%E4%B9%A0/1.htm">嵌入式学习</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                        <div>嵌入式入门学习笔记,遇到的问题以及心得体会!DAY28概述:一、线程二、同步和互斥问题三、如何实现同步四、如何实现互斥笔记:一、线程1、什么是线程:(1)线程是轻量级的进程(2)线程存在于进程内,不能独立存在(3)线程参与CPU调度,进程是系统资源分配最小单位,线程是系统调度的最小单位(4)在单核CPU中,多线程并发属于伪并发,但是不牵扯虚拟地址空间的切换,所以开销比进程间切换要小很多(5)在多核</div>
                    </li>
                    <li><a href="/article/1892516757122379776.htm"
                           title="spring boot基于知识图谱的阿克苏市旅游管理系统python-计算机毕业设计" target="_blank">spring boot基于知识图谱的阿克苏市旅游管理系统python-计算机毕业设计</a>
                        <span class="text-muted">QQ1963288475</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/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/1.htm">知识图谱</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a>
                        <div>目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具IntelliJIDEAx64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcatserver服务器。由于考虑到</div>
                    </li>
                    <li><a href="/article/1892515120324603904.htm"
                           title="内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%" target="_blank">内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%</a>
                        <span class="text-muted">CSTechAI</span>
<a class="tag" taget="_blank" href="/search/%E9%92%89%E9%92%89/1.htm">钉钉</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%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%AE%89%E5%85%A8%E6%9E%B6%E6%9E%84/1.htm">安全架构</a>
                        <div>内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%##一、背景与痛点在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战:1.**安全性风险**:内外网直连可能导致病毒传播、数据泄露。2.**操作繁琐**:传统方式需频繁切换网络环境,降低工作效率。3.**审计缺失**:缺乏文件传输的完整日志记录,难以追溯责任。**系统**通过智能中转架构,在保障网</div>
                    </li>
                    <li><a href="/article/1892515119749984256.htm"
                           title="标准制修订信息管理系统:推动企业标准化管理的数字化转型" target="_blank">标准制修订信息管理系统:推动企业标准化管理的数字化转型</a>
                        <span class="text-muted">CSSoftTechAI</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E9%9B%B6%E5%94%AE/1.htm">零售</a>
                        <div>在数字化转型的浪潮中,标准化管理作为企业高质量发展的基石,正面临着前所未有的机遇与挑战。我们基于多年行业实践经验,推出标准制修订信息管理系统,助力企业实现标准化工作的全生命周期管理与全价值链共享,推动标准化管理从“传统分散”向“智能协同”转型。##行业痛点:标准化管理的挑战1.标准体系不完善:缺乏动态化管理能力,难以适应快速变化的业务需求。2.管理分散,信息孤岛:标准化工作分散在不同部门,无法实现</div>
                    </li>
                    <li><a href="/article/1892514867542290432.htm"
                           title="腾讯云放大招:3 行代码让 DeepSeek “入住” 微信小程序" target="_blank">腾讯云放大招:3 行代码让 DeepSeek “入住” 微信小程序</a>
                        <span class="text-muted">BuluAI</span>
<a class="tag" taget="_blank" href="/search/%E8%85%BE%E8%AE%AF%E4%BA%91/1.htm">腾讯云</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>小程序开发的革命性突破近日,技术圈迎来一则重磅消息——腾讯云推出全新功能,仅需3行代码,就能让DeepSeek大模型“入住”微信小程序,这无疑为开发者们带来了一场革命性的变革。在过去,将大模型能力集成到微信小程序中,过程复杂繁琐,代码量庞大,高门槛让众多开发者望而却步。但如今,腾讯云的这一创新举措,直接将难题“秒解”。开发者们只需轻松敲下3行代码,即可实现DeepSeek大模型在微信小程序中的接入</div>
                    </li>
                    <li><a href="/article/1892514111388971008.htm"
                           title="淘宝/天猫店铺订单数据导出、销售报表设计与数据分析指南" target="_blank">淘宝/天猫店铺订单数据导出、销售报表设计与数据分析指南</a>
                        <span class="text-muted">不会玩技术的技术girl</span>
<a class="tag" taget="_blank" href="/search/API/1.htm">API</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>在电商运营中,订单数据是店铺运营的核心资产之一。通过对订单数据的导出、整理和分析,商家可以更好地了解销售情况、优化运营策略、提升客户满意度,并制定科学的业务决策。本文将详细介绍淘宝/天猫店铺订单数据的导出方法、销售报表的设计思路以及数据分析的实用技巧,帮助电商从业者高效管理店铺数据。一、订单数据导出(一)手动导出订单数据淘宝和天猫平台提供了手动导出订单的功能,适用于数据量较小或临时性需求的场景。商</div>
                    </li>
                                <li><a href="/article/87.htm"
                                       title="面向对象面向过程" target="_blank">面向对象面向过程</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>面向对象:把要完成的一件事,通过对象间的协作实现。 
面向过程:把要完成的一件事,通过循序依次调用各个模块实现。 
我把大象装进冰箱这件事为例,用面向对象和面向过程实现,都是用java代码完成。 
 
1、面向对象 
 

package bigDemo.ObjectOriented;

/**
 * 大象类
 * 
 * @Description
 * @author FuJian</div>
                                </li>
                                <li><a href="/article/214.htm"
                                       title="Java Hotspot: Remove the Permanent Generation" target="_blank">Java Hotspot: Remove the Permanent Generation</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a>
                                    <div>  
openjdk上关于hotspot将移除永久带的描述非常详细,http://openjdk.java.net/jeps/122 
  
JEP 122: Remove the Permanent Generation

Author	Jon Masamitsu
Organization	Oracle
Created	2010/8/15
Updated	2011/</div>
                                </li>
                                <li><a href="/article/341.htm"
                                       title="正则表达式向前查找向后查找,环绕或零宽断言" target="_blank">正则表达式向前查找向后查找,环绕或零宽断言</a>
                                    <span class="text-muted">dcj3sjt126com</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>
                                    <div>向前查找和向后查找 
1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找断言。 
    对于向前查找,出现在指定项之后的字符序列不会被正则表达式引擎返回。 
2. 向后查找:一个要匹配的字符序列前面有或者没有指定的</div>
                                </li>
                                <li><a href="/article/468.htm"
                                       title="BaseDao" target="_blank">BaseDao</a>
                                    <span class="text-muted">171815164</span>
<a class="tag" taget="_blank" href="/search/seda/1.htm">seda</a>
                                    <div>

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class BaseDao {

	public Conn</div>
                                </li>
                                <li><a href="/article/595.htm"
                                       title="Ant标签详解--Java命令" target="_blank">Ant标签详解--Java命令</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/Java%E5%91%BD%E4%BB%A4/1.htm">Java命令</a>
                                    <div>        这一篇主要介绍与java相关标签的使用          终于开始重头戏了,Java部分是我们关注的重点也是项目中用处最多的部分。               
1</div>
                                </li>
                                <li><a href="/article/722.htm"
                                       title="[简单]代码片段_电梯数字排列" target="_blank">[简单]代码片段_电梯数字排列</a>
                                    <span class="text-muted">53873039oycg</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a>
                                    <div>       今天看电梯数字排列是9 18 26这样呈倒N排列的,写了个类似的打印例子,如下:       
import java.util.Arrays;

public class 电梯数字排列_S3_Test {
	public static void main(S</div>
                                </li>
                                <li><a href="/article/849.htm"
                                       title="Hessian原理" target="_blank">Hessian原理</a>
                                    <span class="text-muted">云端月影</span>
<a class="tag" taget="_blank" href="/search/hessian%E5%8E%9F%E7%90%86/1.htm">hessian原理</a>
                                    <div>Hessian 原理分析 
 
 
 
 
 
一.      远程通讯协议的基本原理 
 
网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协</div>
                                </li>
                                <li><a href="/article/976.htm"
                                       title="区分Activity的四种加载模式----以及Intent的setFlags" target="_blank">区分Activity的四种加载模式----以及Intent的setFlags</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>  
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 
这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置 
Activity有四种加载模式: 
 
 standard 
 singleTop</div>
                                </li>
                                <li><a href="/article/1103.htm"
                                       title="hibernate几个核心API及其查询分析" target="_blank">hibernate几个核心API及其查询分析</a>
                                    <span class="text-muted">antonyup_2006</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/1.htm">配置管理</a>
                                    <div>(一)  org.hibernate.cfg.Configuration类 
        读取配置文件并创建唯一的SessionFactory对象.(一般,程序初始化hibernate时创建.) 
        Configuration co</div>
                                </li>
                                <li><a href="/article/1230.htm"
                                       title="PL/SQL的流程控制" target="_blank">PL/SQL的流程控制</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%BC%96%E7%A8%8B/1.htm">PL/SQL编程</a><a class="tag" taget="_blank" href="/search/%E5%BE%AA%E7%8E%AF%E6%8E%A7%E5%88%B6/1.htm">循环控制</a>
                                    <div>PL/SQL也是一门高级语言,所以流程控制是必须要有的,oracle数据库的pl/sql比sqlserver数据库要难,很多pl/sql中有的sqlserver里面没有 
  
流程控制; 
   分支语句 if 条件 then 结果 else 结果  end if ;

  条件语句 case    when   条件  then  结果;

   循环语句  loop    </div>
                                </li>
                                <li><a href="/article/1357.htm"
                                       title="强大的Mockito测试框架" target="_blank">强大的Mockito测试框架</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a>
                                    <div>一.自动生成Mock类        在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。二.自动注入Mock类到被测试类  &nbs</div>
                                </li>
                                <li><a href="/article/1484.htm"
                                       title="精通Oracle10编程SQL(11)开发子程序" target="_blank">精通Oracle10编程SQL(11)开发子程序</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *开发子程序
 */
--子程序目是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用程序中多次调用
--PL/SQL有两种类型的子程序:过程和函数
--开发过程
--建立过程:不带任何参数
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
 DBMS_OUTPUT.put_line(systimestamp);
E</div>
                                </li>
                                <li><a href="/article/1611.htm"
                                       title="【EhCache一】EhCache版Hello World" target="_blank">【EhCache一】EhCache版Hello World</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Hello+world/1.htm">Hello world</a>
                                    <div>本篇是EhCache系列的第一篇,总体介绍使用EhCache缓存进行CRUD的API的基本使用,更细节的内容包括EhCache源代码和设计、实现原理在接下来的文章中进行介绍 
  环境准备 
1.新建Maven项目 
  
2.添加EhCache的Maven依赖 
        <dependency>
            <groupId>ne</div>
                                </li>
                                <li><a href="/article/1738.htm"
                                       title="学习EJB3基础知识笔记" target="_blank">学习EJB3基础知识笔记</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/jboss/1.htm">jboss</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a><a class="tag" taget="_blank" href="/search/ejb/1.htm">ejb</a>
                                    <div>最近项目进入系统测试阶段,全赖袁大虾领导有力,保持一周零bug记录,这也让自己腾出不少时间补充知识。花了两天时间把“传智播客EJB3.0”看完了,EJB基本的知识也有些了解,在这记录下EJB的部分知识,以供自己以后复习使用。 
  
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基</div>
                                </li>
                                <li><a href="/article/1865.htm"
                                       title="angular.bootstrap" target="_blank">angular.bootstrap</a>
                                    <span class="text-muted">boyitech</span>
<a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/AngularJS+API/1.htm">AngularJS API</a><a class="tag" taget="_blank" href="/search/angular%E4%B8%AD%E6%96%87api/1.htm">angular中文api</a>
                                    <div>angular.bootstrap 
描述:  
    手动初始化angular。 
    这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。 
    使用方法:       angular .</div>
                                </li>
                                <li><a href="/article/1992.htm"
                                       title="java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数" target="_blank">java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class SearchInShiftedArray {

	/**
	 * 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。
	 * 请在这个特殊数组中找出给定的整数。
	 * 解答:
	 * 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/bl</div>
                                </li>
                                <li><a href="/article/2119.htm"
                                       title="天使还是魔鬼?都是我们制造" target="_blank">天使还是魔鬼?都是我们制造</a>
                                    <span class="text-muted">ducklsl</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E6%95%99%E8%82%B2/1.htm">教育</a><a class="tag" taget="_blank" href="/search/%E6%83%85%E6%84%9F/1.htm">情感</a>
                                    <div>----------------------------剧透请原谅,有兴趣的朋友可以自己看看电影,互相讨论哦!!! 
    从厦门回来的动车上,无意中瞟到了书中推荐的几部关于儿童的电影。当然,这几部电影可能会另大家失望,并不是类似小鬼当家的电影,而是关于“坏小孩”的电影! 
    自己挑了两部先看了看,但是发现看完之后,心里久久不能平</div>
                                </li>
                                <li><a href="/article/2246.htm"
                                       title="[机器智能与生物]研究生物智能的问题" target="_blank">[机器智能与生物]研究生物智能的问题</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9/1.htm">生物</a>
                                    <div> 
 
      我想,人的神经网络和苍蝇的神经网络,并没有本质的区别...就是大规模拓扑系统和中小规模拓扑分析的区别.... 
 
 
      但是,如果去研究活体人类的神经网络和脑系统,可能会受到一些法律和道德方面的限制,而且研究结果也不一定可靠,那么希望从事生物神经网络研究的朋友,不如把</div>
                                </li>
                                <li><a href="/article/2373.htm"
                                       title="获取Android Device的信息" target="_blank">获取Android Device的信息</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>
String phoneInfo = "PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", TAGS: " + android.os.Build.TAGS;
ph</div>
                                </li>
                                <li><a href="/article/2500.htm"
                                       title="最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现" target="_blank">最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</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%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D/1.htm">字符串匹配</a>
                                    <div>原文:http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html------------------------------------------------------------------------------------------------------------</div>
                                </li>
                                <li><a href="/article/2627.htm"
                                       title="小学5年级英语单词背诵第一课" target="_blank">小学5年级英语单词背诵第一课</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>long 长的 
show 给...看,出示 
mouth 口,嘴 
write 写 
  
use 用,使用 
take 拿,带来 
hand 手 
clever 聪明的 
  
often 经常 
wash 洗 
slow 慢的 
house 房子 
  
water 水 
clean 清洁的 
supper 晚餐 
out 在外 
  
face 脸,</div>
                                </li>
                                <li><a href="/article/2754.htm"
                                       title="macvim的使用实战" target="_blank">macvim的使用实战</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                                    <div>macvim用的是mac里面的vim, 只不过是一个GUI的APP, 相当于一个壳 
  
1. 下载macvim 
https://code.google.com/p/macvim/ 
  
2. 了解macvim 
:h               vim的使用帮助信息 
:h macvim  </div>
                                </li>
                                <li><a href="/article/2881.htm"
                                       title="java二分法查找" target="_blank">java二分法查找</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%B3%95%E6%9F%A5%E6%89%BE/1.htm">java二分法查找</a><a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%88%86%E6%B3%95/1.htm">二分法</a><a class="tag" taget="_blank" href="/search/java%E4%BA%8C%E5%88%86%E6%B3%95/1.htm">java二分法</a>
                                    <div>java二分法查找 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 2015年6月23日 11:40:03 星期二 
http:/</div>
                                </li>
                                <li><a href="/article/3008.htm"
                                       title="Spring Cache注解+Memcached" target="_blank">Spring Cache注解+Memcached</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a>
                                    <div>Spring3.1 Cache注解  
依赖jar包: 
<!-- simple-spring-memcached -->
		<dependency>
			<groupId>com.google.code.simple-spring-memcached</groupId>
			<artifactId>simple-s</div>
                                </li>
                                <li><a href="/article/3135.htm"
                                       title="apache commons io包快速入门" target="_blank">apache commons io包快速入门</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/apache+commons/1.htm">apache commons</a>
                                    <div>原文参考 
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html 
 
  Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍: 
  1)  工具类 
  2</div>
                                </li>
                                <li><a href="/article/3262.htm"
                                       title="如何学习编程" target="_blank">如何学习编程</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>首先,我想说一下学习思想.学编程其实跟网络游戏有着类似的效果.开始的时候,你会对那些代码,函数等产生很大的兴趣,尤其是刚接触编程的人,刚学习第一种语言的人.可是,当你一步步深入的时候,你会发现你没有了以前那种斗志.就好象你在玩韩国泡菜网游似的,玩到一定程度,每天就是练级练级,完全是一个想冲到高级别的意志力在支持着你.而学编程就更难了,学了两个月后,总是觉得你好象全都学会了,却又什么都做不了,又没有</div>
                                </li>
                                <li><a href="/article/3389.htm"
                                       title="架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy" target="_blank">架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy</a>
                                    <span class="text-muted">nannan408</span>
<a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a>
                                    <div>1.前言。 
   如题。 
2.描述。 
   


@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。

@DependsOn({"steelAxe","abc"})
@Comp</div>
                                </li>
                                <li><a href="/article/3516.htm"
                                       title="Spring4+quartz2的配置和代码方式调度" target="_blank">Spring4+quartz2的配置和代码方式调度</a>
                                    <span class="text-muted">Everyday都不同</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81/1.htm">代码</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE/1.htm">配置</a><a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a><a class="tag" taget="_blank" href="/search/quartz2.x/1.htm">quartz2.x</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1/1.htm">定时任务</a>
                                    <div>前言:这些天简直被quartz虐哭。。因为quartz 2.x版本相比quartz1.x版本的API改动太多,所以,只好自己去查阅底层API…… 
  
quartz定时任务必须搞清楚几个概念: 
JobDetail——处理类 
Trigger——触发器,指定触发时间,必须要有JobDetail属性,即触发对象 
Scheduler——调度器,组织处理类和触发器,配置方式一般只需指定触发</div>
                                </li>
                                <li><a href="/article/3643.htm"
                                       title="Hibernate入门" target="_blank">Hibernate入门</a>
                                    <span class="text-muted">tntxia</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>  
前言 
  
使用面向对象的语言和关系型的数据库,开发起来很繁琐,费时。由于现在流行的数据库都不面向对象。Hibernate 是一个Java的ORM(Object/Relational Mapping)解决方案。 
  
Hibernte不仅关心把Java对象对应到数据库的表中,而且提供了请求和检索的方法。简化了手工进行JDBC操作的流程。 
  
如</div>
                                </li>
                                <li><a href="/article/3770.htm"
                                       title="Math类" target="_blank">Math类</a>
                                    <span class="text-muted">xiaoxing598</span>
<a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a>
                                    <div>一、Java中的数字(Math)类是final类,不可继承。 
1、常数    PI:double圆周率 E:double自然对数    
2、截取(注意方法的返回类型)    double ceil(double d) 返回不小于d的最小整数 double floor(double d) 返回不大于d的整最大数   int round(float f) 返回四舍五入后的整数 long round</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>