如何在 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/1899331468941914112.htm"
                           title="【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析" target="_blank">【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析</a>
                        <span class="text-muted">wangnaisheng</span>
<a class="tag" taget="_blank" href="/search/WPF/1.htm">WPF</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a>
                        <div>一、Slider基础用法在XAML中添加一个Slider控件,并设置其基本属性:Maximum="100"Value="50"Width="200"Height="30"HorizontalAlignment="Left"VerticalAlignment="Top"TickFrequency="10"TickPlacement="BottomRight"IsSnapToTickEnabled="</div>
                    </li>
                    <li><a href="/article/1899330712704708608.htm"
                           title="2.10 Spring Boot定时任务:@Scheduled与Quartz对比分析" target="_blank">2.10 Spring Boot定时任务:@Scheduled与Quartz对比分析</a>
                        <span class="text-muted">Sendingab</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>SpringBoot定时任务:@Scheduled与Quartz对比分析一、核心特性对比特性**@Scheduled**Quartz依赖复杂度内置于Spring(零配置)需额外依赖与配置任务持久化不支持(内存存储)支持(数据库持久化)动态任务管理仅静态配置支持运行时增删改查分布式支持需自行实现原生集群支持调度策略固定速率/延迟Cron表达式/日历触发错误处理简单异常捕获完善的重试与错误日志机制性能</div>
                    </li>
                    <li><a href="/article/1899329578812370944.htm"
                           title="由 Mybatis 源码畅谈软件设计(五):ResultMap 的循环引用" target="_blank">由 Mybatis 源码畅谈软件设计(五):ResultMap 的循环引用</a>
                        <span class="text-muted">方圆想当图灵</span>
<a class="tag" taget="_blank" href="/search/%E7%94%B1/1.htm">由</a><a class="tag" taget="_blank" href="/search/Mybatis/1.htm">Mybatis</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E7%95%85%E8%B0%88%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1/1.htm">源码畅谈软件设计</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83/1.htm">代码规范</a>
                        <div>本节我们来了解Mybatis是如何处理ResultMap的循环引用,它的解决方案非常值得在软件设计中参考。另外作为引申,大家可以了解一下Spring是如何解决Bean的循环注入的。以单测org.apache.ibatis.submitted.permissions.PermissionsTest#checkNestedResultMapLoop为例,它对应表结构和表中的数据为:createtabl</div>
                    </li>
                    <li><a href="/article/1899329200700059648.htm"
                           title="springMVC RestFul接口设计模式详解,包括前后端设计详解。@GetMapping、@PostMapping、@PutMapping@DeleteMapping@PathVariable" target="_blank">springMVC RestFul接口设计模式详解,包括前后端设计详解。@GetMapping、@PostMapping、@PutMapping@DeleteMapping@PathVariable</a>
                        <span class="text-muted">漫慢丶</span>
<a class="tag" taget="_blank" href="/search/springmvc/1.htm">springmvc</a><a class="tag" taget="_blank" href="/search/restful/1.htm">restful</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>目录1、什么是RestFul接口设计模式2、使用该接口设计模式后端还需要配置什么3、使用该接口设计模式前端需要注意什么4、Controller具体实现方式1、什么是RestFul接口设计模式RestFul这是一种springmvc接口的设计模式,用来区别不同类型的请求,来匹配控制器处理映射。例如请求URL为/test/那么中根据Get、put、post等请求方式,就可以具体映射到对应的控制器方法。</div>
                    </li>
                    <li><a href="/article/1899328948634972160.htm"
                           title="CSS入门指南:从零开始学习网页开发——(一)简介" target="_blank">CSS入门指南:从零开始学习网页开发——(一)简介</a>
                        <span class="text-muted">GIS小白吃</span>
<a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>一、什么是CSS?CSS(CascadingStyleSheets,层叠样式表)是一种用于描述网页的外观和布局的样式表语言。它通过定义网页元素的样式(如颜色、字体、边距等)来与HTML内容分离,提升了网页的可维护性和设计的灵活性。CSS的核心目的是增强网页的表现力。早期的网页仅使用HTML来进行内容的展示,但由于HTML只能描述内容的结构,页面设计和内容变得难以管理。于是,CSS作为一种辅助技术应</div>
                    </li>
                    <li><a href="/article/1899328570132590592.htm"
                           title="git submodule管理的仓库怎么删除子仓库" target="_blank">git submodule管理的仓库怎么删除子仓库</a>
                        <span class="text-muted">绛洞花主敏明</span>
<a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                        <div>删除Git子模块需要执行一系列步骤,以确保从项目中彻底移除子模块及其相关配置。以下是详细的步骤:1.取消初始化子模块运行以下命令以取消子模块的初始化,这会从.git/config文件中移除子模块的配置:gitsubmoduledeinit-f-f参数用于强制执行,避免因子模块目录中有未提交的更改而导致命令失败。2.删除子模块目录从工作目录中删除子模块的文件夹:rm-rf3.从.gitmodules</div>
                    </li>
                    <li><a href="/article/1899328443783376896.htm"
                           title="学习笔记09——并发编程之线程基础" target="_blank">学习笔记09——并发编程之线程基础</a>
                        <span class="text-muted">码代码的小仙女</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7%E5%BC%80%E5%8F%91%E5%BF%85%E5%A4%87%E6%8A%80%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/python/1.htm">python</a>
                        <div>线程基础1.1进程与线程的区别,Java中线程的实现(用户线程与内核线程)进程是操作系统分配资源的基本单位,而线程是CPU调度的基本单位。每个进程有独立的内存空间,而同一进程内的线程共享内存.可以从资源分配、切换开销、通信方式和独立性四个方面来比较两者的区别资源分配进程:操作系统分配资源(如内存、文件句柄等)的基本单位,拥有独立的地址空间。线程:隶属于进程,共享进程的资源(如内存、文件等),是CP</div>
                    </li>
                    <li><a href="/article/1899328316687577088.htm"
                           title="学习笔记10——并发编程2线程安全问题与同步机制" target="_blank">学习笔记10——并发编程2线程安全问题与同步机制</a>
                        <span class="text-muted">码代码的小仙女</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7%E5%BC%80%E5%8F%91%E5%BF%85%E5%A4%87%E6%8A%80%E8%83%BD/1.htm">高级开发必备技能</a><a class="tag" taget="_blank" href="/search/java%E7%9F%A5%E8%AF%86/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/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>线程安全问题与同步机制线程安全的本质问题线程安全问题源于多线程环境下对共享资源(数据或状态)的非原子性、非可见性、非有序性访问,导致程序行为不符合预期。主要表现如下:竞态条件(RaceCondition):多个线程对同一资源进行非原子操作,导致结果依赖线程执行顺序。示例:两个线程同时执行count++(非原子操作,实际包含读-改-写三步)。内存可见性问题:线程修改共享变量后,其他线程无法立即看到最</div>
                    </li>
                    <li><a href="/article/1899327938642374656.htm"
                           title="【高级RAG技巧】使用二阶段检索器平衡检索的效率和精度" target="_blank">【高级RAG技巧】使用二阶段检索器平衡检索的效率和精度</a>
                        <span class="text-muted">深度学习机器</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大语言模型</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%85%A5%E9%97%A8/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/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a>
                        <div>一传统方法之前的文章已经介绍过向量数据库在RAG(RetrievalAugmentedGenerative)中的应用,本文将会讨论另一个重要的工具-Embedding模型。一般来说,构建生产环境下的RAG系统是直接使用Embedding模型对用户输入的Query进行向量化表示,并且从已经构建好的向量数据库中检索出相关的段落用户大模型生成。但是这种方法很明显会受到Embedding模型性能的影响,比</div>
                    </li>
                    <li><a href="/article/1899327560634920960.htm"
                           title="关于ubuntu中用npm安装gulp-imagemin时报错'Error: Command failed: /bin/sh -c autoreconf -iv'" target="_blank">关于ubuntu中用npm安装gulp-imagemin时报错'Error: Command failed: /bin/sh -c autoreconf -iv'</a>
                        <span class="text-muted">一个IT小白</span>

                        <div>在ubuntu中安装gulp-imagemin时报错:提示找不到autoreconf这时需要安装autoreconf,指令如下:sudoapt-getinstallautoconf然后再执行指令安装gulp-imageminnpminstallgulp-imagemin--save-dev安装成功~</div>
                    </li>
                    <li><a href="/article/1899327433245519872.htm"
                           title="Dify 工作流组件完全开发指南" target="_blank">Dify 工作流组件完全开发指南</a>
                        <span class="text-muted">程序员查理</span>
<a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF/1.htm">web前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a>
                        <div>1.如何添加新的工作流节点组件1.1添加新节点的步骤要在Dify工作流中添加一个新的节点类型,需要完成以下步骤:1.1.1更新节点类型枚举首先,在app/components/workflow/types.ts文件中的BlockEnum中添加新节点类型:exportenumBlockEnum{//现有节点类型//...//添加新节点类型NewNodeType='new-node-type',}1.</div>
                    </li>
                    <li><a href="/article/1899327434306678784.htm"
                           title="AI大模型零基础金融人如何一周自学大模型,从零基础到入门,看这篇就够了!" target="_blank">AI大模型零基础金融人如何一周自学大模型,从零基础到入门,看这篇就够了!</a>
                        <span class="text-muted">冻感糕人~</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E9%87%91%E8%9E%8D/1.htm">金融</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">AI大模型</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%8A%80%E6%9C%AF/1.htm">大模型技术</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">大模型学习路线</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%9F%BA%E7%A1%80/1.htm">大模型基础</a>
                        <div>前几天参加了字节跳动在上海举办的火山引擎Force原动力大会,OpenAI也连续开了12天发布会,最近堪称科技界的春晚了。如果说2022年ChatGPT横空出世把人工智能的发展带上了一个新的台阶,那么2024年末,大模型对工作、生活的全面“侵入”让我们越来越接近库兹韦尔所描述的那个奇点时刻。作为金融民工,我们想通过这篇文章讲讲从用户的角度如何一周快速掌握大模型,以及为什么我建议每一个金融从业人员(</div>
                    </li>
                    <li><a href="/article/1899326300246568960.htm"
                           title="运行autoreconf -fvi报错configure.ac:29: error: possibly undefined macro: AM_PROG_LIBTOOL" target="_blank">运行autoreconf -fvi报错configure.ac:29: error: possibly undefined macro: AM_PROG_LIBTOOL</a>
                        <span class="text-muted">爱因斯坦小姐</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>报错内容说明configure.ac文件中使用了AM_PROG_LIBTOOL,但autoreconf无法找到它。这是因为libtool没有正确的安装或者配置。首先安装libtool:sudoapt-getupdatesudoapt-getinstalllibtool在项目的根目录下初始化libtool:libtoolize接下来重新运行autoreconf-fvi,或许就没问题啦!</div>
                    </li>
                    <li><a href="/article/1899325164030586880.htm"
                           title="C语言开发以及维护用到的工具简介" target="_blank">C语言开发以及维护用到的工具简介</a>
                        <span class="text-muted">812503533</span>
<a class="tag" taget="_blank" href="/search/%E8%93%A6%E7%84%B6%E5%9B%9E%E9%A6%96---%E5%86%8D%E7%9C%8BC%E8%AF%AD%E8%A8%80/1.htm">蓦然回首---再看C语言</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/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>C语言作为一门经典的编程语言,广泛应用于系统编程、嵌入式开发、操作系统内核等领域。经过第一部分的介绍,已经可以实现一些最简单的功能了,比如文字版本的计算器,猜数字小游戏,通过调整输出格式从而输出优美的图形等等,那么在未来的实际使用中,使用一些什么工具去进行c语言的编辑,查看,编译,运行等等,本文将做简单的介绍,后续再慢慢完善相关的内容。1、编辑器所有语言在编写的时候使用的工具就叫做编辑器,C语言程</div>
                    </li>
                    <li><a href="/article/1899325165813166080.htm"
                           title="C语言回调函数" target="_blank">C语言回调函数</a>
                        <span class="text-muted">812503533</span>
<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/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>前文函数指针中说到了,函数指针的一个重要作用就是实现回调函数,那么什么是回调函数,回调函数有什么作用,在那些场景下使用,具体应该怎么使用,本文就分享下这块的知识。1、回调函数简介回调函数(CallbackFunction)是指将一个函数作为参数传递给另一个函数,然后在适当的时候由被调用的函数执行该回调函数。回调函数是实现事件驱动编程、异步编程和灵活接口设计的核心工具。回调函数通常用于实现高阶函数,</div>
                    </li>
                    <li><a href="/article/1899325166618472448.htm"
                           title="Linux tcpdump -any抓的包转换成标准的pcap" target="_blank">Linux tcpdump -any抓的包转换成标准的pcap</a>
                        <span class="text-muted">812503533</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/tcpdump/1.htm">tcpdump</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a>
                        <div>在Linux中使用tcpdump-any抓包并转换为标准pcap文件时出现额外字段,通常与链路层协议头部的差异以及pcap文件格式的兼容性有关。以下是详细原因和解决方案:一、问题原因分析-any选项的局限性tcpdump-any会自动猜测链路层协议类型(如Ethernet、IEEE802.11、PPP等),但可能因环境复杂导致误判。例如:在混合网络(如同时包含有线和无线流量)中,自动检测可能失败。</div>
                    </li>
                    <li><a href="/article/1899325037823979520.htm"
                           title="暮然回首--再看C语言--常量与宏定义" target="_blank">暮然回首--再看C语言--常量与宏定义</a>
                        <span class="text-muted">812503533</span>
<a class="tag" taget="_blank" href="/search/%E8%93%A6%E7%84%B6%E5%9B%9E%E9%A6%96---%E5%86%8D%E7%9C%8BC%E8%AF%AD%E8%A8%80/1.htm">蓦然回首---再看C语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>常量与宏定义在C语言中,常量和宏定义是非常重要的概念。它们有助于提高程序的可读性、可维护性,并且能够避免重复代码。常量是指在程序运行期间其值不发生变化的变量,而宏定义是一种预处理指令,用于定义常量或代码片段,在编译阶段进行替换。一、常量常量是指在程序执行过程中其值不可改变的量。在C语言中,我们可以使用const关键字来声明常量。常量分为以下几种类型:常量整数:例如constinta=5;常量浮点数</div>
                    </li>
                    <li><a href="/article/1899324534067097600.htm"
                           title="关于Jquery基本内容一" target="_blank">关于Jquery基本内容一</a>
                        <span class="text-muted">gloria123_</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>jQuery(jQ)html+css+js1jQ是一个js库,封装了大量的特定的集合(函数和方法)如animate()、css()、show()等2使用jQ大大提高开发效率,简化dom操作常见的js库jQueryYUIDojoExtJszeptojQuery选择器$(selector)筛选方法parent()$(“li”).parent()children(selector)$(“ul”).chi</div>
                    </li>
                    <li><a href="/article/1899324154612609024.htm"
                           title="推荐开源项目:EXP Godot 对话系统 v1.2.0" target="_blank">推荐开源项目:EXP Godot 对话系统 v1.2.0</a>
                        <span class="text-muted">田桥桑Industrious</span>

                        <div>推荐开源项目:EXPGodot对话系统v1.2.0Godot-Dialog-SystemADialogSystemAddonfortheGodotEngine.项目地址:https://gitcode.com/gh_mirrors/go/Godot-Dialog-System上帝之城的创作者们,欢迎探索EXPGodotDialogSystem——一个专为Godot3.2稳定版打造的对话管理系统,由</div>
                    </li>
                    <li><a href="/article/1899323397242941440.htm"
                           title="12.1go语言sync.Map和atomic包" target="_blank">12.1go语言sync.Map和atomic包</a>
                        <span class="text-muted">chxii</span>
<a class="tag" taget="_blank" href="/search/go%E8%AF%AD%E8%A8%80/1.htm">go语言</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/go/1.htm">go</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/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/golang/1.htm">golang</a>
                        <div>sync.Map在Go语言中,sync.Map是sync包提供的一个并发安全的映射(map)类型。与内置的map类型不同,sync.Map无需在外部加锁即可安全地在多个goroutine中进行读写操作。这使得sync.Map在某些特定场景下,如高并发读写、键值对频繁变动等,具有更好的性能表现。1.特点并发安全:sync.Map内部实现了同步机制,多个goroutine可以同时对其进行读写操作,而无</div>
                    </li>
                    <li><a href="/article/1899323398127939584.htm"
                           title="【Swift】面向协议编程之HelloWorld" target="_blank">【Swift】面向协议编程之HelloWorld</a>
                        <span class="text-muted">coooliang</span>
<a class="tag" taget="_blank" href="/search/Swift/1.htm">Swift</a><a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a>
                        <div>定义一个协议(protocol),swift中可以对protocol进行扩展(extension)通过协议的扩展可以对函数有默认的实现protocolSleepable{funcsleep()}protocolEatable{funceat()}extensionEatable{funceat(){print("eatfood")}}在类(class)或结构体(struct)中实现protocol</div>
                    </li>
                    <li><a href="/article/1899323270893727744.htm"
                           title="异地收款被拦截?一文读懂聚合二维码风控解决方案" target="_blank">异地收款被拦截?一文读懂聚合二维码风控解决方案</a>
                        <span class="text-muted">畅联支付</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E4%BB%98/1.htm">支付</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>随着移动支付的普及,许多商家使用聚合二维码实现多平台收款。但近期不少用户反馈"人在外地扫自家二维码付款却被风控拦截",这不仅影响经营效率,还可能引发资金冻结风险。今天我们就来解析这个问题的成因和应对策略。一、为什么会触发风控?1.地理位置异常:支付系统发现收款设备与常用地址存在跨省变动(如北京商家突然在上海收款)2.交易行为突变:短期内出现远超日常交易量的资金流动3.信息不匹配:营业执照注册地与收</div>
                    </li>
                    <li><a href="/article/1899323266678452224.htm"
                           title="SeisMoLLM: Advancing Seismic Monitoring via Cross-modal Transfer with Pre-trained Large Language" target="_blank">SeisMoLLM: Advancing Seismic Monitoring via Cross-modal Transfer with Pre-trained Large Language</a>
                        <span class="text-muted">UnknownBody</span>
<a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Daily/1.htm">Daily</a><a class="tag" taget="_blank" href="/search/Multimodal/1.htm">Multimodal</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a>
                        <div>摘要深度学习的最新进展给地震监测带来了革命性变化,但开发一个能在多个复杂任务中表现出色的基础模型仍然充满挑战,尤其是在处理信号退化或数据稀缺的情况时。本文提出SeisMoLLM,这是首个利用跨模态迁移进行地震监测的基础模型,它无需在地震数据集上进行直接预训练,就能充分发挥大规模预训练大语言模型的强大能力。通过精心设计的波形标记化处理和对预训练GPT-2模型的微调,SeisMoLLM在DiTing和</div>
                    </li>
                    <li><a href="/article/1899323013787086848.htm"
                           title="50 种不同编程语言的“Hello World”,你知多少?" target="_blank">50 种不同编程语言的“Hello World”,你知多少?</a>
                        <span class="text-muted">逗逗逗逗666</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/hello/1.htm">hello</a><a class="tag" taget="_blank" href="/search/world/1.htm">world</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a>
                        <div>当我们学习一门编程语言时,都是从“Hello,World!”开始。所有程序员在其职业生涯中,都至少接触过一个经典的“Hello,World!”程序。通常程序员会使用多种编程语言,多的甚至实现了十几种。还有一种称为TTHW(Timeto“Hello,World!”)的方法,来衡量程序员创建一个新的“Hello,World!”程序的时间。你可以用多少种不同的语言编写一个“Hello,World!”程序</div>
                    </li>
                    <li><a href="/article/1899323014340734976.htm"
                           title="【批量图片区域识别改名】有没有可以自动批量识别jpg图片上的区域文字,并直接提取文字命名的软件么? 没有我们教你基于WPF和腾讯api的方案做一个" target="_blank">【批量图片区域识别改名】有没有可以自动批量识别jpg图片上的区域文字,并直接提取文字命名的软件么? 没有我们教你基于WPF和腾讯api的方案做一个</a>
                        <span class="text-muted">如沐春风菜鸡收割机</span>
<a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87OCR%E8%AF%86%E5%88%AB/1.htm">图片OCR识别</a><a class="tag" taget="_blank" href="/search/%E6%89%AB%E6%8F%8FPDF%E6%8F%90%E5%8F%96%E5%86%85%E5%AE%B9/1.htm">扫描PDF提取内容</a><a class="tag" taget="_blank" href="/search/PDF%E6%98%8E%E7%BB%86%E6%8F%90%E5%8F%96%E8%A1%A8%E6%A0%BC/1.htm">PDF明细提取表格</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7%E5%AE%9E%E7%8E%B0PDF%E6%98%8E%E7%BB%86%E8%BD%ACExcel/1.htm">工具实现PDF明细转Excel</a><a class="tag" taget="_blank" href="/search/PDF%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%87%BAExcel/1.htm">PDF数据导出Excel</a><a class="tag" taget="_blank" href="/search/%E6%89%B9%E9%87%8FPDF%E5%86%85%E5%AE%B9%E6%8F%90%E5%8F%96%E5%B7%A5%E5%85%B7/1.htm">批量PDF内容提取工具</a><a class="tag" taget="_blank" href="/search/%E6%89%B9%E9%87%8F%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB%E5%8C%BA%E5%9F%9F%E5%86%85%E5%AE%B9%E6%94%B9%E5%90%8D/1.htm">批量图片识别区域内容改名</a><a class="tag" taget="_blank" href="/search/%E6%89%B9%E9%87%8F%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB%E5%A4%9A%E4%B8%AA%E5%8C%BA%E5%9F%9F%E5%86%85%E5%AE%B9%E5%AF%BC%E8%A1%A8%E6%A0%BC/1.htm">批量图片识别多个区域内容导表格</a>
                        <div>应用场景描述在很多实际工作场景中,我们可能会遇到大量的图片文件,这些图片中包含特定区域的文字信息,比如发票图片上的发票号码、合同图片上的合同编号等。手动识别并为图片命名效率极低且容易出错。使用自动批量识别JPG图片上的区域文字,并直接提取文字为图片命名的软件,可以大大提高工作效率,减少人工操作带来的错误。实现方案:基于WPF和腾讯云OCRAPI步骤1:准备工作注册腾讯云账号:访问腾讯云官网(腾讯云</div>
                    </li>
                    <li><a href="/article/1899321628987289600.htm"
                           title="【春招笔试真题】饿了么2025.03.07-开发岗真题" target="_blank">【春招笔试真题】饿了么2025.03.07-开发岗真题</a>
                        <span class="text-muted">春秋招笔试突围</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%80%E6%96%B0%E4%BA%92%E8%81%94%E7%BD%91%E6%98%A5%E7%A7%8B%E6%8B%9B%E8%AF%95%E9%A2%98%E5%90%88%E9%9B%86/1.htm">最新互联网春秋招试题合集</a><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/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>饿了么2025.03.07-开发岗题目1️⃣:统计01串中0和1的个数,通过计算可能的交换方式确定不同字符串数量2️⃣:使用模板匹配技术识别验证码图片中的"#"符号分布模式3️⃣:构建字典树(Trie)优化异或查询,实现高效的数字黑板游戏整体难度这套题目整体难度适中,由简到难逐步递进:第一题是基础的计数问题,需要理解交换操作的特性第二题是模式识别问题,需要实现模板匹配第三题是高级数据结构应用,需要</div>
                    </li>
                    <li><a href="/article/1899320872993353728.htm"
                           title="【每日一题 | 2025】3.3 ~ 3.9" target="_blank">【每日一题 | 2025】3.3 ~ 3.9</a>
                        <span class="text-muted">Guiat</span>
<a class="tag" taget="_blank" href="/search/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/1.htm">每日一题</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/1.htm">每日一题</a>
                        <div>个人主页:Guiat归属专栏:每日一题文章目录1.【3.3】10387[蓝桥杯2024省A]训练士兵2.【3.4】P8601[蓝桥杯2013省A]剪格子3.【3.5】P9241[蓝桥杯2023省B]飞机降落4.【3.6】P10578[蓝桥杯2024国A]旋转九宫格5.【3.7】P8642[蓝桥杯2016国AC]路径之谜6.【3.8】P8694[蓝桥杯2019国AC]估计人数7.【3.9】数字接龙正</div>
                    </li>
                    <li><a href="/article/1899320745411014656.htm"
                           title="Spring Boot 与 Spring MVC 有何不同" target="_blank">Spring Boot 与 Spring MVC 有何不同</a>
                        <span class="text-muted">大G哥</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>SpringBoot和SpringMVC都是Spring框架的一部分,但它们有不同的目标和功能。以下是它们之间的主要区别:1.核心目标SpringBoot:SpringBoot的目标是简化Spring应用的配置和部署。它通过提供默认配置和嵌入式服务器(如Tomcat、Jetty或Undertow),使开发者能够快速构建和启动Spring应用,而无需配置繁琐的XML或类配置。SpringMVC:Sp</div>
                    </li>
                    <li><a href="/article/1899320746539282432.htm"
                           title="Python控制批量插入Catia文件并修改文件定义及PN" target="_blank">Python控制批量插入Catia文件并修改文件定义及PN</a>
                        <span class="text-muted">一盘红烧肉</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>改了两天,总算初步摸清楚了Catia中的文件结构,实现了使用Python控制批量修改文件名及定义使用Pycatia在Product中插入Part并改名及定义</div>
                    </li>
                    <li><a href="/article/1899320241675104256.htm"
                           title="C++随机数" target="_blank">C++随机数</a>
                        <span class="text-muted">宁玉AC</span>
<a class="tag" taget="_blank" href="/search/c%E5%AD%A6%E4%B9%A0/1.htm">c学习</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录一、名著参考二、详解1.rand()函数2.time(0)3.srand(time(0))4.获取指定范围内的随机数(含指定位数)一、名著参考可以使用cstdlib头文件中的rand()函数来获得随机整数;这个函数返回0~RAND_MAX之间的随机整数;rand()函数生成的是伪随机数。即每次在同一个系统上执行这个函数的时候,rand()函数生成同一序列的数。rand()函数的算法使用一个叫种</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>