webapi+Task并行请求不同接口实例

  标题的名称定义不知道是否准确,不过我想表达的意思就是使用Task特性来同时请求多个不同的接口,然后合并数据;我想这种场景的开发对于对接过其他公司接口的人不会陌生,本人也是列属于之内,更多的是使用最原始的异步委托的方法去处理,今天抽空写了一个使用4.5新特性Task来处理这种场景;各位看客有什么疑问或者好的建议及分享请博客通知,谢谢。

  A.项目结构图

  webapi+Task并行请求不同接口实例_第1张图片

  B.namespace Pm.V.PM_BLL下面的BaseClass定义如下:

 1  public abstract class BaseClass
 2     {
 3 
 4         #region 初始化xml配置信息 BaseClass
 5 
 6         /// 
 7         /// 初始化xml配置信息
 8         /// 
 9         /// 
10         public BaseClass(string xmlConfigPath)
11         {
12 
13             try
14             {
15 
16                 if (string.IsNullOrEmpty(xmlConfigPath))
17                 {
18 
19                     //默认各个Xml配置
20                     var defaultConfigFolder = "PluginXml";
21                     var baseAddr = AppDomain.CurrentDomain.BaseDirectory;
22                     xmlConfigPath = Path.Combine(baseAddr, defaultConfigFolder, this.GetType().Name + ".xml");
23                 }
24 
25                 XmlDocument doc = new XmlDocument();
26                 doc.Load(xmlConfigPath);
27 
28                 Config = new BaseConfig();
29                 Config.Url = doc.SelectSingleNode("//Pm/Url") == null ? "" : doc.SelectSingleNode("//Pm/Url").InnerXml;
30                 Config.UserName = doc.SelectSingleNode("//Pm/UserName") == null ? "" : doc.SelectSingleNode("//Pm/UserName").InnerXml;
31                 Config.UserKey = doc.SelectSingleNode("//Pm/UserKey") == null ? "" : doc.SelectSingleNode("//Pm/UserKey").InnerXml;
32 
33                 Config.Doc = doc;
34             }
35             catch (Exception ex)
36             {
37 
38                 throw new Exception(ex.Message);
39             }
40 
41         }
42 
43         /// 
44         /// xml配置信息
45         /// 
46         public BaseConfig Config;
47         #endregion
48 
49         #region  获取文章信息 _GetArticles  +BaseResponse
50 
51         /// 
52         /// 获取文章信息
53         /// 
54         /// 
55         /// 
56         public virtual MoArticlesResponse _GetArticles(object request)
57         {
58             return null;
59         }
60         #endregion
61 
62     }
63 
64     /// 
65     /// xml配置文件信息
66     /// 
67     public class BaseConfig
68     {
69 
70         /// 
71         /// 接口地址
72         /// 
73         public string Url { get; set; }
74 
75         /// 
76         /// 账号
77         /// 
78         public string UserName { get; set; }
79 
80         /// 
81         /// 密码|秘钥
82         /// 
83         public string UserKey { get; set; }
84 
85         /// 
86         /// xml文件全部信息
87         /// 
88         public XmlDocument Doc { get; set; }
89 
90     }
View Code

  主要是在实例的时候读取各个业务模块的配置文件,初始化一些常用并且是公共的属性信息;其次创建了一个虚方法_GetArticles,注意里面的参数是object这个将再后面的时候重提;

  C.下面就是请求第三方业务实现类的代码,这里测试的时候分别使用

    1.CnblogsClass类抓取博客园首页的博客列表信息

  1    /// 
  2     /// 博客园信息(如果涉及到信息来源问题,请及时联系开源作者,谢谢)
  3     /// 
  4     public class CnblogsClass : BaseClass
  5     {
  6         /// 
  7         /// 初始化xml配置
  8         /// 
  9         public CnblogsClass() : base("") { }
 10 
 11         #region  获取文章信息 _GetArticles  +BaseResponse
 12 
 13         /// 
 14         /// 获取文章信息
 15         /// 
 16         /// 
 17         /// 
 18         public override MoArticlesResponse _GetArticles(object obj)
 19         {
 20             #region 初始化信息
 21 
 22             var request = new MoArticlesRequest();
 23             var response = new MoArticlesResponse();
 24             var sbLog = new StringBuilder(string.Empty);
 25             var url = this.Config.Url;   //这里获取配置文件的url
 26             #endregion
 27 
 28             try
 29             {
 30 
 31                 #region 接口验证数据
 32 
 33                 request = obj as MoArticlesRequest;
 34                 if (request == null)
 35                 {
 36 
 37                     response.ErrorCode = (int)EHelper.PmException.获取数据为空;
 38                     response.ErrorMsg = EHelper.PmException.获取数据为空.ToString();
 39                     return response;
 40                 }
 41 
 42                 #endregion
 43 
 44                 #region 请求数据
 45 
 46 
 47                 sbLog.AppendFormat("请求地址:{0}\n", url);
 48                 var result = PublicClass._HttpGet(url);   //这里一般都是post数据到第三方接口,测试没有第三方可以使用,所以使用抓取博客园首页数据
 49                 sbLog.AppendFormat("返回信息:{0}\n", result);
 50                 #endregion
 51 
 52                 #region 解析
 53 
 54                 //使用正则解析数据
 55                 var rgs = Regex.Matches(result, "class=\"titlelnk\"\\s+href=\"(?http://www(\\w|\\.|\\/)+\\.html)\"[^>]+>(?[^<]+)<\\/a>[^D]+a>(?<des>[^<]+)[^D]+lightblue\">(?<author>\\w+)<\\/a>[^D]+发布于(?<publishtime>\\s+(\\d|-|\\s|:)+)[^<]+</span><span style="color:#800000;">"</span><span style="color:#000000;">);
</span><span style="color:#008080;"> 56</span> 
<span style="color:#008080;"> 57</span>                 <span style="color:#0000ff;">if</span> (rgs.Count <= <span style="color:#800080;">0</span><span style="color:#000000;">)
</span><span style="color:#008080;"> 58</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 59</span> 
<span style="color:#008080;"> 60</span>                     response.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.获取数据为空;
</span><span style="color:#008080;"> 61</span>                     response.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.获取数据为空.ToString();
</span><span style="color:#008080;"> 62</span>                     <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;"> 63</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 64</span> 
<span style="color:#008080;"> 65</span>                 <span style="color:#0000ff;">foreach</span> (Match item <span style="color:#0000ff;">in</span><span style="color:#000000;"> rgs)
</span><span style="color:#008080;"> 66</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 67</span> 
<span style="color:#008080;"> 68</span>                     <span style="color:#0000ff;">var</span> article = <span style="color:#0000ff;">new</span><span style="color:#000000;"> MoArticle();
</span><span style="color:#008080;"> 69</span> 
<span style="color:#008080;"> 70</span>                     article.Author = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">author</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 71</span>                     article.LinkUrl = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">link</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 72</span>                     article.Title = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">title</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 73</span>                     article.PublishTime = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">publishtime</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 74</span>                   <span style="color:#008000;">//</span><span style="color:#008000;">  article.Des = item.Groups["des"].Value;</span>
<span style="color:#008080;"> 75</span>                     article.DataType = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.DataType.博客园;
</span><span style="color:#008080;"> 76</span> 
<span style="color:#008080;"> 77</span>                     <span style="color:#0000ff;">if</span> (response.MoArticles.Count > <span style="color:#800080;">5</span>) { <span style="color:#0000ff;">continue</span><span style="color:#000000;">; }
</span><span style="color:#008080;"> 78</span> <span style="color:#000000;">                    response.MoArticles.Add(article);
</span><span style="color:#008080;"> 79</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 80</span> 
<span style="color:#008080;"> 81</span>                 response.IsSuccess = <span style="color:#0000ff;">true</span><span style="color:#000000;">;
</span><span style="color:#008080;"> 82</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 83</span> <span style="color:#000000;">            }
</span><span style="color:#008080;"> 84</span>             <span style="color:#0000ff;">catch</span><span style="color:#000000;"> (Exception ex)
</span><span style="color:#008080;"> 85</span> <span style="color:#000000;">            {
</span><span style="color:#008080;"> 86</span> 
<span style="color:#008080;"> 87</span>                 sbLog.AppendFormat(<span style="color:#800000;">"</span><span style="color:#800000;">异常信息:{0}\n</span><span style="color:#800000;">"</span><span style="color:#000000;">, ex.Message);
</span><span style="color:#008080;"> 88</span>                 response.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.获取数据异常;
</span><span style="color:#008080;"> 89</span>                 response.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.获取数据异常.ToString();
</span><span style="color:#008080;"> 90</span> <span style="color:#000000;">            }
</span><span style="color:#008080;"> 91</span>             <span style="color:#0000ff;">finally</span>
<span style="color:#008080;"> 92</span> <span style="color:#000000;">            {
</span><span style="color:#008080;"> 93</span> 
<span style="color:#008080;"> 94</span>                 <span style="color:#0000ff;">#region</span> 第三方原始信息-日志
<span style="color:#008080;"> 95</span> 
<span style="color:#008080;"> 96</span>                 <span style="color:#008000;">//</span><span style="color:#008000;">PublicClass._WriteLog(sbLog.ToString(), "Cnblogs");</span>
<span style="color:#008080;"> 97</span> 
<span style="color:#008080;"> 98</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 99</span> <span style="color:#000000;">            }
</span><span style="color:#008080;">100</span>             <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;">101</span> <span style="color:#000000;">        }
</span><span style="color:#008080;">102</span>         <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;">103</span>     }</pre> 
    </div> 
    <span class="cnblogs_code_collapse">View Code</span> 
   </div> 
   <p>    .注意这里使用 : base("")直接继承了上面说的父类的方法,来初始化配置信息(当然这个可能不算知识点)</p> 
   <p>    .接下来就是实现的_GetArticles方法里面PublicClass._HttpGet方法封装的HttpClient获取博客园的数据</p> 
   <p>    .解析了返回的数据信息(这里使用的正则,可能有些同学觉得正则可能还不太熟悉,可以自行百度参考分析下)</p> 
   <p>    .记录日志,我这里是记录的文本日志暂时注释了,因为怕抓取的信息多,忘记删除占用空间</p> 
   <p>    以上几点就是实际情况中经常遇到的步奏,这个处理步奏在从来没有对接过第三方接口的人还是值得学习的</p> 
   <p>    2.HuJiangClass类是抓取了博客园中.Net第一页的数据,步奏和方法和上面相同,请关注代码部分</p> 
   <div class="cnblogs_code"> 
    <img id="code_img_closed_6630b4dc-1feb-4ba0-97a6-c86edcf0fad4" class="code_img_closed" src="http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif" alt="" width="0" height="0"> 
    <img id="code_img_opened_6630b4dc-1feb-4ba0-97a6-c86edcf0fad4" class="code_img_opened" src="http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif" alt="" width="0" height="0"> 
    <div id="cnblogs_code_open_6630b4dc-1feb-4ba0-97a6-c86edcf0fad4" class="cnblogs_code_hide"> 
     <pre><span style="color:#008080;">  1</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span><span style="color:#000000;"> HuJiangClass : BaseClass
</span><span style="color:#008080;">  2</span> <span style="color:#000000;">    {
</span><span style="color:#008080;">  3</span>         <span style="color:#808080;">///</span> <span style="color:#808080;"><summary></span>
<span style="color:#008080;">  4</span>         <span style="color:#808080;">///</span><span style="color:#008000;"> 初始化xml配置
</span><span style="color:#008080;">  5</span>         <span style="color:#808080;">///</span> <span style="color:#808080;"></summary></span>
<span style="color:#008080;">  6</span>         <span style="color:#0000ff;">public</span> HuJiangClass() : <span style="color:#0000ff;">base</span>(<span style="color:#800000;">""</span><span style="color:#000000;">) { }
</span><span style="color:#008080;">  7</span> 
<span style="color:#008080;">  8</span> 
<span style="color:#008080;">  9</span>         <span style="color:#0000ff;">#region</span>  获取文章信息 _GetArticles  +BaseResponse
<span style="color:#008080;"> 10</span> 
<span style="color:#008080;"> 11</span>         <span style="color:#808080;">///</span> <span style="color:#808080;"><summary></span>
<span style="color:#008080;"> 12</span>         <span style="color:#808080;">///</span><span style="color:#008000;"> 获取文章信息
</span><span style="color:#008080;"> 13</span>         <span style="color:#808080;">///</span> <span style="color:#808080;"></summary></span>
<span style="color:#008080;"> 14</span>         <span style="color:#808080;">///</span> <span style="color:#808080;"><param name="request"></param></span>
<span style="color:#008080;"> 15</span>         <span style="color:#808080;">///</span> <span style="color:#808080;"><returns></returns></span>
<span style="color:#008080;"> 16</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">override</span> MoArticlesResponse _GetArticles(<span style="color:#0000ff;">object</span><span style="color:#000000;"> obj)
</span><span style="color:#008080;"> 17</span> <span style="color:#000000;">        {
</span><span style="color:#008080;"> 18</span>             <span style="color:#0000ff;">#region</span> 初始化信息
<span style="color:#008080;"> 19</span> 
<span style="color:#008080;"> 20</span>             <span style="color:#0000ff;">var</span> request = <span style="color:#0000ff;">new</span><span style="color:#000000;"> MoArticlesRequest();
</span><span style="color:#008080;"> 21</span>             <span style="color:#0000ff;">var</span> response = <span style="color:#0000ff;">new</span><span style="color:#000000;"> MoArticlesResponse();
</span><span style="color:#008080;"> 22</span>             <span style="color:#0000ff;">var</span> sbLog = <span style="color:#0000ff;">new</span> StringBuilder(<span style="color:#0000ff;">string</span><span style="color:#000000;">.Empty);
</span><span style="color:#008080;"> 23</span>             <span style="color:#0000ff;">var</span> url = <span style="color:#0000ff;">this</span>.Config.Url;   <span style="color:#008000;">//</span><span style="color:#008000;">这里获取配置文件的url</span>
<span style="color:#008080;"> 24</span>             <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 25</span> 
<span style="color:#008080;"> 26</span>             <span style="color:#0000ff;">try</span>
<span style="color:#008080;"> 27</span> <span style="color:#000000;">            {
</span><span style="color:#008080;"> 28</span> 
<span style="color:#008080;"> 29</span>                 <span style="color:#0000ff;">#region</span> 接口验证数据
<span style="color:#008080;"> 30</span> 
<span style="color:#008080;"> 31</span>                 request = obj <span style="color:#0000ff;">as</span><span style="color:#000000;"> MoArticlesRequest;
</span><span style="color:#008080;"> 32</span>                 <span style="color:#0000ff;">if</span> (request == <span style="color:#0000ff;">null</span><span style="color:#000000;">)
</span><span style="color:#008080;"> 33</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 34</span> 
<span style="color:#008080;"> 35</span>                     response.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.获取数据为空;
</span><span style="color:#008080;"> 36</span>                     response.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.获取数据为空.ToString();
</span><span style="color:#008080;"> 37</span>                     <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;"> 38</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 39</span> 
<span style="color:#008080;"> 40</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 41</span> 
<span style="color:#008080;"> 42</span>                 <span style="color:#0000ff;">#region</span> 请求数据
<span style="color:#008080;"> 43</span> 
<span style="color:#008080;"> 44</span>                 sbLog.AppendFormat(<span style="color:#800000;">"</span><span style="color:#800000;">请求地址:{0}\n</span><span style="color:#800000;">"</span><span style="color:#000000;">, url);
</span><span style="color:#008080;"> 45</span>                 <span style="color:#0000ff;">var</span> result = PublicClass._HttpGet(url);   <span style="color:#008000;">//</span><span style="color:#008000;">这里一般都是post数据到第三方接口,测试没有第三方可以使用,所以使用抓取博客园首页数据</span>
<span style="color:#008080;"> 46</span>                 sbLog.AppendFormat(<span style="color:#800000;">"</span><span style="color:#800000;">返回信息:{0}\n</span><span style="color:#800000;">"</span><span style="color:#000000;">, result);
</span><span style="color:#008080;"> 47</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 48</span> 
<span style="color:#008080;"> 49</span>                 <span style="color:#0000ff;">#region</span> 解析
<span style="color:#008080;"> 50</span> 
<span style="color:#008080;"> 51</span>                 <span style="color:#008000;">//</span><span style="color:#008000;">使用正则解析数据</span>
<span style="color:#008080;"> 52</span>                 <span style="color:#0000ff;">var</span> rgs = Regex.Matches(result, <span style="color:#800000;">"</span><span style="color:#800000;">class=\"titlelnk\"\\s+href=\"(?<link>http://www(\\w|\\.|\\/)+\\.html)\"[^>]+>(?<title>[^<]+)<\\/a>[^D]+post_item_summary\">(?<des>[^<]+)[^D]+lightblue\">(?<author>\\w+)<\\/a>[^D]+发布于(?<publishtime>\\s+(\\d|-|\\s|:)+)[^<]+</span><span style="color:#800000;">"</span><span style="color:#000000;">);
</span><span style="color:#008080;"> 53</span> 
<span style="color:#008080;"> 54</span>                 <span style="color:#0000ff;">if</span> (rgs.Count <= <span style="color:#800080;">0</span><span style="color:#000000;">)
</span><span style="color:#008080;"> 55</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 56</span> 
<span style="color:#008080;"> 57</span>                     response.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.获取数据为空;
</span><span style="color:#008080;"> 58</span>                     response.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.获取数据为空.ToString();
</span><span style="color:#008080;"> 59</span>                     <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;"> 60</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 61</span> 
<span style="color:#008080;"> 62</span>                 <span style="color:#0000ff;">foreach</span> (Match item <span style="color:#0000ff;">in</span><span style="color:#000000;"> rgs)
</span><span style="color:#008080;"> 63</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 64</span> 
<span style="color:#008080;"> 65</span>                     <span style="color:#0000ff;">var</span> article = <span style="color:#0000ff;">new</span><span style="color:#000000;"> MoArticle();
</span><span style="color:#008080;"> 66</span> 
<span style="color:#008080;"> 67</span>                     article.Author = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">author</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 68</span>                     article.LinkUrl = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">link</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 69</span>                     article.Title = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">title</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 70</span>                     article.PublishTime = item.Groups[<span style="color:#800000;">"</span><span style="color:#800000;">publishtime</span><span style="color:#800000;">"</span><span style="color:#000000;">].Value;
</span><span style="color:#008080;"> 71</span>                    <span style="color:#008000;">//</span><span style="color:#008000;"> article.Des = item.Groups["des"].Value;</span>
<span style="color:#008080;"> 72</span>                     article.DataType = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.DataType.博客园NET技术;
</span><span style="color:#008080;"> 73</span>                     <span style="color:#0000ff;">if</span> (response.MoArticles.Count > <span style="color:#800080;">5</span>) { <span style="color:#0000ff;">continue</span><span style="color:#000000;">; }
</span><span style="color:#008080;"> 74</span> <span style="color:#000000;">                    response.MoArticles.Add(article);
</span><span style="color:#008080;"> 75</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 76</span> 
<span style="color:#008080;"> 77</span>                 response.IsSuccess = <span style="color:#0000ff;">true</span><span style="color:#000000;">;
</span><span style="color:#008080;"> 78</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 79</span> <span style="color:#000000;">            }
</span><span style="color:#008080;"> 80</span>             <span style="color:#0000ff;">catch</span><span style="color:#000000;"> (Exception ex)
</span><span style="color:#008080;"> 81</span> <span style="color:#000000;">            {
</span><span style="color:#008080;"> 82</span> 
<span style="color:#008080;"> 83</span>                 sbLog.AppendFormat(<span style="color:#800000;">"</span><span style="color:#800000;">异常信息:{0}\n</span><span style="color:#800000;">"</span><span style="color:#000000;">, ex.Message);
</span><span style="color:#008080;"> 84</span>                 response.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.获取数据异常;
</span><span style="color:#008080;"> 85</span>                 response.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.获取数据异常.ToString();
</span><span style="color:#008080;"> 86</span> <span style="color:#000000;">            }
</span><span style="color:#008080;"> 87</span>             <span style="color:#0000ff;">finally</span>
<span style="color:#008080;"> 88</span> <span style="color:#000000;">            {
</span><span style="color:#008080;"> 89</span> 
<span style="color:#008080;"> 90</span>                 <span style="color:#0000ff;">#region</span> 第三方原始信息-日志
<span style="color:#008080;"> 91</span> 
<span style="color:#008080;"> 92</span>                 <span style="color:#008000;">//</span><span style="color:#008000;">PublicClass._WriteLog(sbLog.ToString(), "Cnblogs");</span>
<span style="color:#008080;"> 93</span> 
<span style="color:#008080;"> 94</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 95</span> <span style="color:#000000;">            }
</span><span style="color:#008080;"> 96</span>             <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;"> 97</span> <span style="color:#000000;">        }
</span><span style="color:#008080;"> 98</span>         <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 99</span> 
<span style="color:#008080;">100</span>     }</pre> 
    </div> 
    <span class="cnblogs_code_collapse">View Code</span> 
   </div> 
   <p>  D.今天要讲的主要内容来了,以上算是过度,让人了解对接第三方接口的一些处理步奏和简单的封装吧;这里将看到的是Pm.Api.Controllers空间下BlogsController里面的Post方法,代码如:</p> 
   <div class="cnblogs_code"> 
    <img id="code_img_closed_5df28404-02e8-4c0b-b3b5-1243f18ff378" class="code_img_closed" src="http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif" alt="" width="0" height="0"> 
    <img id="code_img_opened_5df28404-02e8-4c0b-b3b5-1243f18ff378" class="code_img_opened" src="http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif" alt="" width="0" height="0"> 
    <div id="cnblogs_code_open_5df28404-02e8-4c0b-b3b5-1243f18ff378" class="cnblogs_code_hide"> 
     <pre><span style="color:#008080;">  1</span>  <span style="color:#008000;">//</span><span style="color:#008000;"> GET api/<controller></span>
<span style="color:#008080;">  2</span>         <span style="color:#0000ff;">public</span> IEnumerable<<span style="color:#0000ff;">string</span>><span style="color:#000000;"> Get()
</span><span style="color:#008080;">  3</span> <span style="color:#000000;">        {
</span><span style="color:#008080;">  4</span>             <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">new</span> <span style="color:#0000ff;">string</span>[] { <span style="color:#800000;">"</span><span style="color:#800000;">欢迎使用-神牛步行3开源框架</span><span style="color:#800000;">"</span><span style="color:#000000;"> };
</span><span style="color:#008080;">  5</span> <span style="color:#000000;">        }
</span><span style="color:#008080;">  6</span> 
<span style="color:#008080;">  7</span>         <span style="color:#008000;">//</span><span style="color:#008000;"> POST api/<controller></span>
<span style="color:#008080;">  8</span>         <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">async</span> Task<HttpResponseMessage><span style="color:#000000;"> Post()
</span><span style="color:#008080;">  9</span> <span style="color:#000000;">        {
</span><span style="color:#008080;"> 10</span>             HttpResponseMessage response = <span style="color:#0000ff;">new</span><span style="color:#000000;"> HttpResponseMessage();
</span><span style="color:#008080;"> 11</span>             <span style="color:#0000ff;">var</span> baseResponse = <span style="color:#0000ff;">new</span><span style="color:#000000;"> BaseResponse();
</span><span style="color:#008080;"> 12</span>             <span style="color:#0000ff;">try</span>
<span style="color:#008080;"> 13</span> <span style="color:#000000;">            {
</span><span style="color:#008080;"> 14</span>                 <span style="color:#0000ff;">#region</span> 验证
<span style="color:#008080;"> 15</span> 
<span style="color:#008080;"> 16</span>                 <span style="color:#008000;">//</span><span style="color:#008000;">获取post数据</span>
<span style="color:#008080;"> 17</span>                 HttpContent content =<span style="color:#000000;"> Request.Content;
</span><span style="color:#008080;"> 18</span>                 <span style="color:#0000ff;">var</span> param = <span style="color:#0000ff;">await</span><span style="color:#000000;"> content.ReadAsStringAsync();
</span><span style="color:#008080;"> 19</span>                 <span style="color:#0000ff;">var</span> baseRequest = Newtonsoft.Json.JsonConvert.DeserializeObject<BaseRequest><span style="color:#000000;">(param);
</span><span style="color:#008080;"> 20</span>                 <span style="color:#0000ff;">if</span> (<span style="color:#0000ff;">string</span><span style="color:#000000;">.IsNullOrEmpty(baseRequest.FunName))
</span><span style="color:#008080;"> 21</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 22</span>                     baseResponse.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.请求参数为空.ToString();
</span><span style="color:#008080;"> 23</span>                     baseResponse.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.请求参数为空;
</span><span style="color:#008080;"> 24</span>                     response.Content = <span style="color:#0000ff;">new</span> StringContent(<span style="color:#0000ff;">await</span><span style="color:#000000;"> JsonConvert.SerializeObjectAsync(baseResponse));
</span><span style="color:#008080;"> 25</span>                     <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;"> 26</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 27</span>                 <span style="color:#0000ff;">else</span> <span style="color:#0000ff;">if</span> (<span style="color:#0000ff;">string</span><span style="color:#000000;">.IsNullOrEmpty(baseRequest.UserName))
</span><span style="color:#008080;"> 28</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 29</span> 
<span style="color:#008080;"> 30</span>                     baseResponse.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.账号不正确.ToString();
</span><span style="color:#008080;"> 31</span>                     baseResponse.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.账号不正确;
</span><span style="color:#008080;"> 32</span>                     response.Content = <span style="color:#0000ff;">new</span> StringContent(<span style="color:#0000ff;">await</span><span style="color:#000000;"> JsonConvert.SerializeObjectAsync(baseResponse));
</span><span style="color:#008080;"> 33</span>                     <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;"> 34</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 35</span>                 <span style="color:#0000ff;">else</span> <span style="color:#0000ff;">if</span> (!Enum.IsDefined(<span style="color:#0000ff;">typeof</span><span style="color:#000000;">(EHelper.DataType), baseRequest.DataType))
</span><span style="color:#008080;"> 36</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 37</span>                     baseResponse.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.参数不合法.ToString();
</span><span style="color:#008080;"> 38</span>                     baseResponse.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.参数不合法;
</span><span style="color:#008080;"> 39</span>                     response.Content = <span style="color:#0000ff;">new</span> StringContent(<span style="color:#0000ff;">await</span><span style="color:#000000;"> JsonConvert.SerializeObjectAsync(baseResponse));
</span><span style="color:#008080;"> 40</span>                     <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;"> 41</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 42</span>                 <span style="color:#008000;">//</span><span style="color:#008000;">验证账号及token</span>
<span style="color:#008080;"> 43</span> 
<span style="color:#008080;"> 44</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 45</span> 
<span style="color:#008080;"> 46</span>                 <span style="color:#0000ff;">#region</span> 业务
<span style="color:#008080;"> 47</span> 
<span style="color:#008080;"> 48</span>                 <span style="color:#0000ff;">var</span> dataTypes = Enum.GetValues(<span style="color:#0000ff;">typeof</span><span style="color:#000000;">(EHelper.DataType));
</span><span style="color:#008080;"> 49</span>                 <span style="color:#0000ff;">switch</span><span style="color:#000000;"> (baseRequest.FunName)
</span><span style="color:#008080;"> 50</span> <span style="color:#000000;">                {
</span><span style="color:#008080;"> 51</span>                     <span style="color:#008000;">//</span><span style="color:#008000;">获取文章集合信息</span>
<span style="color:#008080;"> 52</span>                     <span style="color:#0000ff;">case</span> <span style="color:#800000;">"</span><span style="color:#800000;">_GetArticles</span><span style="color:#800000;">"</span><span style="color:#000000;">:
</span><span style="color:#008080;"> 53</span> 
<span style="color:#008080;"> 54</span>                         <span style="color:#008000;">//</span><span style="color:#008000;">json反序列获取数据</span>
<span style="color:#008080;"> 55</span>                         <span style="color:#0000ff;">var</span> r_GetArticles = Newtonsoft.Json.JsonConvert.DeserializeObject<MoArticlesRequest><span style="color:#000000;">(param);
</span><span style="color:#008080;"> 56</span> 
<span style="color:#008080;"> 57</span>                         <span style="color:#008000;">//</span><span style="color:#008000;">初始化任务量</span>
<span style="color:#008080;"> 58</span>                         <span style="color:#0000ff;">var</span> tasks = <span style="color:#0000ff;">new</span> Task<MoArticlesResponse>[baseRequest.DataType == <span style="color:#800080;">0</span> ? dataTypes.Length : <span style="color:#800080;">1</span><span style="color:#000000;">];
</span><span style="color:#008080;"> 59</span>                         <span style="color:#0000ff;">var</span> proxy = <span style="color:#0000ff;">new</span><span style="color:#000000;"> Pm_Proxy();
</span><span style="color:#008080;"> 60</span>                         <span style="color:#0000ff;">var</span> j = <span style="color:#800080;">0</span>;  <span style="color:#008000;">//</span><span style="color:#008000;">真实任务坐标</span>
<span style="color:#008080;"> 61</span>                         <span style="color:#0000ff;">for</span> (<span style="color:#0000ff;">int</span> i = <span style="color:#800080;">0</span>; i < dataTypes.Length; i++<span style="color:#000000;">)
</span><span style="color:#008080;"> 62</span> <span style="color:#000000;">                        {
</span><span style="color:#008080;"> 63</span>                             <span style="color:#0000ff;">var</span> item =<span style="color:#000000;"> dataTypes.GetValue(i);
</span><span style="color:#008080;"> 64</span>                             <span style="color:#0000ff;">var</span> nType =<span style="color:#000000;"> Convert.ToInt32(item);
</span><span style="color:#008080;"> 65</span>                             <span style="color:#0000ff;">if</span> (nType != baseRequest.DataType && <span style="color:#800080;">0</span> != baseRequest.DataType) { <span style="color:#0000ff;">continue</span><span style="color:#000000;">; }
</span><span style="color:#008080;"> 66</span> 
<span style="color:#008080;"> 67</span>                             <span style="color:#008000;">//</span><span style="color:#008000;">使用任务做并行</span>
<span style="color:#008080;"> 68</span>                             <span style="color:#0000ff;">var</span> dataType =<span style="color:#000000;"> proxy._DataType(nType);
</span><span style="color:#008080;"> 69</span>                             <span style="color:#0000ff;">var</span> task = Task.Factory.StartNew<MoArticlesResponse><span style="color:#000000;">(dataType._GetArticles, r_GetArticles);
</span><span style="color:#008080;"> 70</span>                             tasks[j] =<span style="color:#000000;"> task;
</span><span style="color:#008080;"> 71</span>                             j++<span style="color:#000000;">;
</span><span style="color:#008080;"> 72</span> <span style="color:#000000;">                        }
</span><span style="color:#008080;"> 73</span>                         <span style="color:#008000;">//</span><span style="color:#008000;">30s等待</span>
<span style="color:#008080;"> 74</span>                         Task.WaitAll(tasks, <span style="color:#800080;">1000</span> * <span style="color:#800080;">1</span> * <span style="color:#800080;">30</span><span style="color:#000000;">);
</span><span style="color:#008080;"> 75</span> 
<span style="color:#008080;"> 76</span>                         <span style="color:#008000;">//</span><span style="color:#008000;">获取任务执行的结果(整合数据)</span>
<span style="color:#008080;"> 77</span>                         <span style="color:#0000ff;">var</span> articles = <span style="color:#0000ff;">new</span><span style="color:#000000;"> MoArticlesResponse();
</span><span style="color:#008080;"> 78</span>                         <span style="color:#0000ff;">foreach</span> (<span style="color:#0000ff;">var</span> task <span style="color:#0000ff;">in</span><span style="color:#000000;"> tasks)
</span><span style="color:#008080;"> 79</span> <span style="color:#000000;">                        {
</span><span style="color:#008080;"> 80</span>                             <span style="color:#0000ff;">if</span> (!task.IsCompleted) { <span style="color:#0000ff;">continue</span><span style="color:#000000;">; }
</span><span style="color:#008080;"> 81</span> <span style="color:#000000;">                            articles.MoArticles.AddRange(task.Result.MoArticles);
</span><span style="color:#008080;"> 82</span> <span style="color:#000000;">                        }
</span><span style="color:#008080;"> 83</span> 
<span style="color:#008080;"> 84</span>                         articles.IsSuccess = articles.MoArticles.Count > <span style="color:#800080;">0</span><span style="color:#000000;">;
</span><span style="color:#008080;"> 85</span>                         baseResponse =<span style="color:#000000;"> articles;
</span><span style="color:#008080;"> 86</span>                         <span style="color:#0000ff;">break</span><span style="color:#000000;">;
</span><span style="color:#008080;"> 87</span> 
<span style="color:#008080;"> 88</span>                     <span style="color:#0000ff;">default</span><span style="color:#000000;">:
</span><span style="color:#008080;"> 89</span>                         <span style="color:#0000ff;">break</span><span style="color:#000000;">;
</span><span style="color:#008080;"> 90</span> <span style="color:#000000;">                }
</span><span style="color:#008080;"> 91</span>                 response.Content = <span style="color:#0000ff;">new</span> StringContent(<span style="color:#0000ff;">await</span><span style="color:#000000;"> JsonConvert.SerializeObjectAsync(baseResponse));
</span><span style="color:#008080;"> 92</span>                 <span style="color:#0000ff;">#endregion</span>
<span style="color:#008080;"> 93</span> <span style="color:#000000;">            }
</span><span style="color:#008080;"> 94</span>             <span style="color:#0000ff;">catch</span><span style="color:#000000;"> (Exception ex)
</span><span style="color:#008080;"> 95</span> <span style="color:#000000;">            {
</span><span style="color:#008080;"> 96</span>                 baseResponse.ErrorMsg =<span style="color:#000000;"> EHelper.PmException.获取数据异常.ToString();
</span><span style="color:#008080;"> 97</span>                 baseResponse.ErrorCode = (<span style="color:#0000ff;">int</span><span style="color:#000000;">)EHelper.PmException.获取数据异常;
</span><span style="color:#008080;"> 98</span> <span style="color:#000000;">            }
</span><span style="color:#008080;"> 99</span>             <span style="color:#0000ff;">return</span><span style="color:#000000;"> response;
</span><span style="color:#008080;">100</span>         }</pre> 
    </div> 
    <span class="cnblogs_code_collapse">View Code</span> 
   </div> 
   <p>    1.首先使用了var baseRequest = Newtonsoft.Json.JsonConvert.DeserializeObject<BaseRequest>(param); 来第一次返序列化,得到验证的基本信息如账号,token等</p> 
   <p>    2.常用的接口形式使用参数节点名称来确定将要执行的方法,或者直接在节点值中标注方法的名称,因此有了这么一句switch (baseRequest.FunName)来判断程序的走向</p> 
   <p>    3.在此反序列得到真实调用者post给接口的数据(上面第一次反序列使用的是基类,基类里面就包含了验证需要的属性,为什么这里不直接使用第一次反序列的对象呢,因为这里将要传递给后面方法参数的值是子类里面封装的)</p> 
   <p>    4.开始定义Task任务的数量,一般根据有几个第三方接口第一几个吧,Task<MoArticlesResponse>[]保证后面产生的任务量</p> 
   <p>    5.Task.Factory.StartNew<MoArticlesResponse>(dataType._GetArticles, r_GetArticles) 方法来创建任务,这里要说的是dataType._GetArticles是之前上面说的请求第三方接口定义的方法,r_GetArticles这个是需要传递的值是object的,这也是StartNew固定的参数类型;再通过Task<MoArticlesResponse>[]存储创建的任务;</p> 
   <p>    6.Task.WaitAll(tasks, 1000 * 1 * 30);这个WaitAll是自带的,意思是等待任务执行多少毫秒,也算是知识点吧,第一个参数是任务数组,是数组的形式,第二个是毫秒单位的等待时间</p> 
   <p>    7.最后通过foreach (var task in tasks) 来循环整合task.Result返回的结果</p> 
   <p> 之后是效果截图DataType表示不同的数据来源:</p> 
   <p> <a href="http://img.e-com-net.com/image/info8/8e5f664ac2d041c59a1219848e6f36cb.png" target="_blank"><img src="http://img.e-com-net.com/image/info8/8e5f664ac2d041c59a1219848e6f36cb.png" alt="webapi+Task并行请求不同接口实例_第2张图片" width="561" height="777" style="border:1px solid black;"></a></p> 
   <p> </p> 
   <p>  大致就是这些吧,不知道说的东西是否说明白了,这就是处理对接第三方不同接口的业务逻辑,也是使用task来并行处理的方法;如果有朋友觉得可能说的不太好或者有什么错误地方,还请直接发博客信息,谢谢;</p> 
   <p>  源码地址:https://github.com/shenniubuxing3/Niu.Pm</p> 
   <p> </p> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1296324693510397952"></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">你可能感兴趣的:(webapi+Task并行请求不同接口实例)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1902911521961340928.htm"
                           title="ACI EP Learning Whitepaper 1. ACI EP组件" target="_blank">ACI EP Learning Whitepaper 1. ACI EP组件</a>
                        <span class="text-muted">m0_54931486</span>
<a class="tag" taget="_blank" href="/search/%E6%80%9D%E7%A7%91/1.htm">思科</a><a class="tag" taget="_blank" href="/search/ACI/1.htm">ACI</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%80%9D%E7%A7%91/1.htm">思科</a><a class="tag" taget="_blank" href="/search/ACI/1.htm">ACI</a><a class="tag" taget="_blank" href="/search/Endpoint/1.htm">Endpoint</a><a class="tag" taget="_blank" href="/search/ACI/1.htm">ACI</a><a class="tag" taget="_blank" href="/search/fabric/1.htm">fabric</a><a class="tag" taget="_blank" href="/search/Nexus/1.htm">Nexus</a><a class="tag" taget="_blank" href="/search/EP/1.htm">EP</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>1.ACIEndpointACI网络架构的Endpoint表整合了传统MAC地址表和ARP表的功能。其核心机制是通过硬件层直接学习数据包的源MAC地址与IP地址映射关系,摒弃了传统ARP协议依赖广播请求获取下一跳MAC地址的模式。这种设计优化体现在两方面:1)减少控制面ARP流量处理带来的资源消耗;2)基于终端实际流量即可实时感知主机IP/MAC地址的拓扑迁移,无需依赖GARP通告即可实现终端移动</div>
                    </li>
                    <li><a href="/article/1902910387318222848.htm"
                           title="星型组网和路由器组网的区别" target="_blank">星型组网和路由器组网的区别</a>
                        <span class="text-muted">森焱森</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E8%B7%AF%E7%94%B1%E5%99%A8/1.htm">智能路由器</a>
                        <div>星型组网和路由器组网是两种不同的网络架构,它们都可以用于构建局域网(LAN)。以下是它们的详细比较:星型组网(StarTopology):1.拓扑结构:星型组网是一种物理拓扑结构,其中所有的终端设备(如计算机、打印机、手机等)都通过无线或有线连接到一个中心设备(通常是接入点AP,如果是有线网络则是集线器或交换机)。2.特点:3.所有设备都依赖于中心设备(AP或交换机)进行通信。4.任何设备之间的通</div>
                    </li>
                    <li><a href="/article/1902907234426351616.htm"
                           title="无人机喊话系统:空中扩音器的科技密码!" target="_blank">无人机喊话系统:空中扩音器的科技密码!</a>
                        <span class="text-muted">云卓SKYDROID</span>
<a class="tag" taget="_blank" href="/search/%E6%97%A0%E4%BA%BA%E6%9C%BA/1.htm">无人机</a><a class="tag" taget="_blank" href="/search/%E7%A7%91%E6%8A%80/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/%E4%BA%91%E5%8D%93%E7%A7%91%E6%8A%80/1.htm">云卓科技</a><a class="tag" taget="_blank" href="/search/%E7%A7%91%E6%99%AE/1.htm">科普</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%A7%91%E6%8A%80/1.htm">高科技</a>
                        <div>一、技术核心:空中声波系统的三重架构1.声源处理中枢支持双模输入:麦克风实时采集与数字音频导入搭载DSP数字信号处理器,实现动态降噪(信噪比>70dB)自适应EQ调节,针对不同场景优化频响曲线(如灾害现场增强低频穿透力)2.定向声场发生器采用相控阵扬声器技术,波束角可调范围15°-60°声压级最高达125dB(相当于喷气式飞机起飞噪音)有效投射距离300米(静风环境下)3.飞控集成平台专用减震支架</div>
                    </li>
                    <li><a href="/article/1902904329765974016.htm"
                           title="图像识别技术与应用课后总结(20)" target="_blank">图像识别技术与应用课后总结(20)</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>
                        <div>图像分割概念图像分割是把图像中不同像素划分到不同类别,预测目标轮廓,属于细粒度分类。比如将图像里不同物体、背景等区分开来,就像把一幅画里的各个元素精准归类。应用场景人像抠图:能精准分离人物和背景,用于图片编辑、影视制作等,比如去除照片背景换背景。医学组织提取:在医学影像(如CT、MRI图像)中分离出不同组织,辅助疾病诊断、手术规划等。遥感图像分析:分析卫星或航空遥感图像时,区分土地、植被、建筑等不</div>
                    </li>
                    <li><a href="/article/1902901431539658752.htm"
                           title="【C++】动态规划从入门到精通" target="_blank">【C++】动态规划从入门到精通</a>
                        <span class="text-muted">諰.</span>
<a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/1.htm">动态规划</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>一、动态规划基础概念详解什么是动态规划动态规划(DynamicProgramming,DP)是一种通过将复杂问题分解为重叠子问题,并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题:最优子结构:问题的最优解包含子问题的最优解重叠子问题:不同决策序列会重复求解相同的子问题下面用一些例子(由浅入深)了解动态规划1.1斐波那契数列递归实现解析intfib(intn){if(n>d</div>
                    </li>
                    <li><a href="/article/1902900921399046144.htm"
                           title="Docker Compose 和 Kubernetes(K8s)对比" target="_blank">Docker Compose 和 Kubernetes(K8s)对比</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/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/k8s/1.htm">k8s</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a>
                        <div>DockerCompose和Kubernetes(K8s)在某些方面有相似的功能,但它们的核心用途和适用场景不同。以下是它们的主要区别和联系:1.DockerCompose和Kubernetes的区别对比项DockerComposeKubernetes(K8s)核心作用管理多个Docker容器管理容器编排(大规模应用)适用环境本地开发、测试环境生产环境、大规模集群容器编排能力基础编排(启动多个容器</div>
                    </li>
                    <li><a href="/article/1902898905415217152.htm"
                           title="滑块式分拣优势" target="_blank">滑块式分拣优势</a>
                        <span class="text-muted">骞途</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/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/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>高速滑块式分拣机是一种智能物流输送设备,可引导和分拣中型货物、包袋、纸箱。与普通分拣机不同的是,双向滑块使货物能够在分拣机两侧卸下,提高了空间利用率,同时增大了设计灵活性。超高速、高性能,高可靠性,灵活配置。双向、轻柔分拣。采用搭锁/脱开滑块,滚柱轴承精确。更换损坏的滑块不需要拆下板,分拣机控制人员可以使用标准软件包快速、方便地安装。1.性能参数滑块式分拣适用于纸箱、周转箱及其他不规则形状的物品,</div>
                    </li>
                    <li><a href="/article/1902897138153615360.htm"
                           title="移除元素(C语言)" target="_blank">移除元素(C语言)</a>
                        <span class="text-muted">Charon424</span>
<a class="tag" taget="_blank" href="/search/leetcode%E7%AE%80%E5%8D%95%E9%A2%98/1.htm">leetcode简单题</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%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>
                        <div>题目:给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:更改nums数组,使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。返回k。用户评测:评测机将使用以下代码测试您的解决方案:int[]n</div>
                    </li>
                    <li><a href="/article/1902890209004023808.htm"
                           title="#Hadoop全分布式安装 #mysql安装 #hive安装" target="_blank">#Hadoop全分布式安装 #mysql安装 #hive安装</a>
                        <span class="text-muted">砸吧砸吧</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/yarn/1.htm">yarn</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                        <div>分布式(多台机器部署不同组件)与集群(多台机器部署相同组件)概念。Linux基础命令linux具有文件数:目录、文件,从根目录开始,路径具有唯一性。pwd:显示当前路径特殊符号:/:根目录.:隐藏文件,如果路径以.开始,表示当前目录下..:当前目录下的上一级~:当前目录的home目录--help:帮助命令使用linux常用操作命令tab键:自动补全ls:显示指定目录内容默认:当前路径-a:显示所有</div>
                    </li>
                    <li><a href="/article/1902889069457764352.htm"
                           title="并发爬虫实战:多线程高效抓取王者荣耀全英雄皮肤" target="_blank">并发爬虫实战:多线程高效抓取王者荣耀全英雄皮肤</a>
                        <span class="text-muted">YiFoEr_Liu</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E6%A1%88%E4%BE%8B%E5%AE%9E%E6%93%8D/1.htm">爬虫案例实操</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E9%83%A8%E7%BD%B2/1.htm">爬虫部署</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>一、场景与挑战在网络爬虫开发中,我们常常面临以下挑战:需要处理成百上千个页面的数据抓取目标服务器存在反爬机制和请求频率限制单线程模式下载效率低下,难以充分利用带宽本文以王者荣耀英雄皮肤下载为例(日访问量超过1亿的热门游戏),演示如何通过Python并发编程实现高效数据抓取。二、技术选型分析2.1为什么选择并发线程?I/O密集型场景:网络请求占比90%以上GIL限制:Python线程适合I/O密集型</div>
                    </li>
                    <li><a href="/article/1902887557906100224.htm"
                           title="Pollinations AI文生图html源码" target="_blank">Pollinations AI文生图html源码</a>
                        <span class="text-muted">酷爱码</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/HTML/1.htm">HTML</a>
                        <div>源码介绍用deepseek辅助制作了一个电脑端文生图小程序,html语言的,接口使用的是Pollinations,上传服务器访问首页即可一次生成4张,提示词最好用英文,点击小图可以预览大图,也可以点击下载按钮直接下载截图预览源码免费获取PollinationsAI文生图html源码</div>
                    </li>
                    <li><a href="/article/1902885917094375424.htm"
                           title="SVN学习" target="_blank">SVN学习</a>
                        <span class="text-muted">无妄无望</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/1.htm">工具使用</a><a class="tag" taget="_blank" href="/search/svn/1.htm">svn</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>1、SVN是什么SVN(Subversion)是一个开源的版本控制系统,用于跟踪文件和目录的更改。它允许团队协作开发项目,管理代码的版本历史,并支持多人同时对代码进行修改和提交。SVN是集中式版本控制系统(CVCS)的代表之一,与Git(分布式版本控制系统)不同,SVN的代码库通常存储在一个中央服务器上。SVN的主要特点版本控制:记录文件和目录的每一次更改,支持版本回溯和历史查看。多人协作:允许多</div>
                    </li>
                    <li><a href="/article/1902877725819990016.htm"
                           title="springmvc中如何自定义入参注解并自动注入值" target="_blank">springmvc中如何自定义入参注解并自动注入值</a>
                        <span class="text-muted">红豆和绿豆</span>
<a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a>
                        <div>在Spring中,`HandlerMethodArgumentResolver`是一个非常强大的接口,用于自定义控制器方法参数的解析逻辑。以下是一个完整的示例,展示如何使用`HandlerMethodArgumentResolver`并结合自定义注解来实现特定的参数解析逻辑。###**1.定义自定义注解**首先,定义一个自定义注解,用于标记需要特殊处理的参数。例如,定义一个`@CurrentUse</div>
                    </li>
                    <li><a href="/article/1902877726344278016.htm"
                           title="Pytest的夹具" target="_blank">Pytest的夹具</a>
                        <span class="text-muted">活跃家族</span>
<a class="tag" taget="_blank" href="/search/pytest/1.htm">pytest</a>
                        <div>1、pytest的前置后置夹具fixture有些内容是在每个用例执行之前都要运行操作:--用例前置接口:购物车模块先登录--登录结果【token鉴权】UI:每次用例打开浏览器--driver有些内容在每个用例之后都要运行操作:–用例后置接口:数据清除UI:关闭浏览器叫做用例的前置和后置。pytest测试框架中统一叫做夹具。fixture。前置:setup后置:teardown2、夹具2.1、定义夹</div>
                    </li>
                    <li><a href="/article/1902874322855325696.htm"
                           title="服务器相关的硬件知识" target="_blank">服务器相关的硬件知识</a>
                        <span class="text-muted">猿小喵</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>网卡:网卡是计算机网络中用于实现计算机之间通信的硬件设备。它工作在OSI模型的第二层(链路层),通过电缆或无线信号与网络设备(如交换机、路由器)连接,带有芯片,可插拔。网卡的接口分为电口(如RJ45接口,用于连接网线)和光口(用于连接光模块和光纤)。根据传输协议,网卡可分为以太网卡、FC(FibreChannel)网卡和iSCSI网卡。以太网卡是最常见的类型,用于普通网络通信;FC网卡主要用于存储</div>
                    </li>
                    <li><a href="/article/1902871420724113408.htm"
                           title="路由器与防火墙配置命令" target="_blank">路由器与防火墙配置命令</a>
                        <span class="text-muted">cllsse</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>路由器与防火墙配置命令小明啊,你不是学计算机的嘛,叔叔家的路由器坏了,可以过来帮叔叔看看吗命令可以用缩写,造就一堆容易造成歧义的缩写,比如add是address的缩写,sh是shutdown的缩写。默认为Cisco路由器和Cisco防火墙视图模式介绍普通视图router>特权视图router##在普通模式下输入enable全局视图router(config)##在特权模式下输入configt接口视</div>
                    </li>
                    <li><a href="/article/1902871038501384192.htm"
                           title="精挑20题:MySQL 8.0高频面试题深度解析——掌握核心知识点、新特性和优化技巧" target="_blank">精挑20题:MySQL 8.0高频面试题深度解析——掌握核心知识点、新特性和优化技巧</a>
                        <span class="text-muted">dblens 数据库管理和开发工具</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/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>1.MySQL8.0中,为什么查询缓存被移除?答案:原因:查询缓存对频繁更新的表效果差,任何对该表的写操作都会清空所有相关缓存,导致缓存命中率低,反而增加开销。替代方案:使用应用层缓存(如Redis)。优化查询和索引,减少对缓存的依赖。MySQL8.0改进:通过索引优化、并行查询等提升性能,弥补查询缓存缺失的影响。2.InnoDB的行锁和表锁分别在什么场景下使用?答案:行锁:高并发场景下更新或查询</div>
                    </li>
                    <li><a href="/article/1902869259084689408.htm"
                           title="141.HarmonyOS NEXT系列教程之3D立方体旋转轮播案例讲解之IDataSource接口实现" target="_blank">141.HarmonyOS NEXT系列教程之3D立方体旋转轮播案例讲解之IDataSource接口实现</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/harmonyos-next/1.htm">harmonyos-next</a>
                        <div>温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyOSNEXT系列教程之3D立方体旋转轮播案例讲解之IDataSource接口实现效果演示1.IDataSource接口概述1.1接口作用IDataSource接口定义了数据源的标准接口,提供了:数据访问方法数据操作方法监听器管理方法1.2接口实现e</div>
                    </li>
                    <li><a href="/article/1902869023092174848.htm"
                           title="Redis 三主三从集群部署的完整方案" target="_blank">Redis 三主三从集群部署的完整方案</a>
                        <span class="text-muted">Honmaple</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</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/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
                        <div>一、架构设计原理‌分布式数据分片哈希槽机制‌:RedisCluster将数据划分为16384个槽位,每个主节点负责部分槽位(如主节点1管理槽0-5460,主节点2管理5461-10922等)。自动负载均衡‌:数据按哈希值分配到不同节点,避免单点性能瓶颈。高可用基础‌:每个主节点配置至少一个从节点,主节点故障时自动切换从节点接替。故障转移流程哨兵协同‌:3个哨兵节点通过投票机制(quorum=2)决</div>
                    </li>
                    <li><a href="/article/1902866504328736768.htm"
                           title="SpringAOP 切面类添加@RefreshScope导致逻辑执行两遍原因" target="_blank">SpringAOP 切面类添加@RefreshScope导致逻辑执行两遍原因</a>
                        <span class="text-muted">-哈喽沃德-</span>
<a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E7%82%B9/1.htm">知识点</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>@RefreshScope注解的核心功能是实现配置的自动刷新生效。当配置中心(例如Consul)内的配置信息出现变动时,凡是被标记了@RefreshScope注解的Bean都会经历重新初始化的过程,从而能够顺利获取到最新的配置内容。不过在最近的开发中,发现问题:若在切面(Aspect)类上使用@RefreshScope注解,会观察到接口请求被切面进行了两次处理,不符合正常预期。正常情况下,切面逻辑</div>
                    </li>
                    <li><a href="/article/1902865873673187328.htm"
                           title="Pytest的夹具共享(2)" target="_blank">Pytest的夹具共享(2)</a>
                        <span class="text-muted">活跃家族</span>
<a class="tag" taget="_blank" href="/search/pytest/1.htm">pytest</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>1、问题:夹具跟用例都是写在一个py文件中,在自动化框架中,测试用例、夹具在不同的文件中,跨文件夹具使用呢?“”"在XXX测试用例模块中,使用夹具?如何跨文件调用?-1)导包:fromd5_pytest的夹具的作用域importsetup_teardown–不推荐,每个模块都要导包-2)夹具共享:如果要直接实现多个模块(py文件)共享夹具,可以用conftest。不需要导包。1、创建一个conft</div>
                    </li>
                    <li><a href="/article/1902863980490190848.htm"
                           title="浏览器 DOM 深度解析:从节点类型到遍历操作的全攻略" target="_blank">浏览器 DOM 深度解析:从节点类型到遍历操作的全攻略</a>
                        <span class="text-muted">码农的时光故事</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>一、DOM核心概念与节点类型DOM(文档对象模型)是浏览器提供的核心API之一,用于将HTML文档转换为可操作的对象树结构。其核心设计遵循树形结构,每个节点都继承自Node接口,主要分为以下类型:1.基础节点类型Element:对应HTML标签,包含属性和子节点()Text:文本内容节点Comment:注释节点Document:文档根节点,通过document全局对象访问()2.特殊节点类型Doc</div>
                    </li>
                    <li><a href="/article/1902863853843181568.htm"
                           title="浏览器工作原理深度解析(阶段一):从 URL 到页面渲染的完整流程" target="_blank">浏览器工作原理深度解析(阶段一):从 URL 到页面渲染的完整流程</a>
                        <span class="text-muted">码农的时光故事</span>
<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>
                        <div>一、浏览器工作流程概述作为前端开发者,我们每天都在与浏览器打交道,但多数人对其内部工作机制却知之甚少。实际上,浏览器的核心功能就是将用户输入的URL转换为可视化的网页。这一过程大致分为六个关键步骤:网络请求:通过HTTP/HTTPS协议获取页面资源构建DOM树:解析HTML代码生成文档对象模型样式计算:解析CSS规则并应用到对应元素布局渲染:计算元素位置和尺寸生成渲染树合成优化:将渲染层合并为位图</div>
                    </li>
                    <li><a href="/article/1902863713954754560.htm"
                           title="Vue遇到微信授权登录的一些场景坑和思考" target="_blank">Vue遇到微信授权登录的一些场景坑和思考</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AFvue.js%E6%89%AB%E7%A0%81%E7%99%BB%E5%BD%95/1.htm">前端vue.js扫码登录</a>
                        <div>最近,接手一个小的PC商城项目,使用微信扫码授权登录,商城部分有些内容针对游客、用户和会员以及店铺,分别作出不同的展示,当退出登录时,清除所有信息,包括本地存储、pinia,问题就发生在退出账号重新登录,有一部分依赖于pinia的数据没有生效,经过检查发现是重定向后,本该初始化的store没有执行,下面详细说明这个故障是如何发生的,以及解决方案。微信授权登录过程介绍这一部分针对于没有做过第三方授权</div>
                    </li>
                    <li><a href="/article/1902859439346610176.htm"
                           title="Transformer与图神经网络的融合与应用" target="_blank">Transformer与图神经网络的融合与应用</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1/1.htm">R1</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AEAI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大数据AI人工智能大模型</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">AI大模型企业级应用开发实战</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E7%A7%91%E5%AD%A6/1.htm">计算科学</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E8%AE%A1%E7%AE%97/1.htm">神经计算</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%9E%8B%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大型语言模型</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RPA/1.htm">RPA</a>
                        <div>Transformer与图神经网络的融合与应用关键词:Transformer,图神经网络,注意力机制,图结构数据,图表示学习,图分类,图生成1.背景介绍近年来,深度学习技术在各个领域取得了显著的进展。其中,Transformer模型和图神经网络(GraphNeuralNetworks,GNNs)是两个备受关注的研究方向。Transformer最初应用于自然语言处理领域,通过自注意力机制实现了并行计</div>
                    </li>
                    <li><a href="/article/1902857541126254592.htm"
                           title="matlab中s-function模块局部变量的应用" target="_blank">matlab中s-function模块局部变量的应用</a>
                        <span class="text-muted">0如约而至0</span>
<a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a>
                        <div>最近在项目中,涉及到了matlab中s-function函数的应用。需要在输出信号上加一个受地面站控制的3211激励信号。实现的过程中,遇到了s-function函数内部局部变量每次进入都会初始化置0的问题,网上查阅资料并结合模型实例,最后通过isempty函数来实现。具体的matlab实现代码如下://functiony=fcn(act_sign,act)persistentt2ifisempt</div>
                    </li>
                    <li><a href="/article/1902855525289226240.htm"
                           title="JS中事件处理机制(秒懂事件委托、事件捕获和事件冒泡)" target="_blank">JS中事件处理机制(秒懂事件委托、事件捕获和事件冒泡)</a>
                        <span class="text-muted">码农白衣</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%9F%A5%E8%AF%86/1.htm">前端知识</a><a class="tag" taget="_blank" href="/search/JS/1.htm">JS</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录一、概念事件委托(EventDelegation):事件捕获(EventCapturing):事件冒泡(EventBubbling):二、好处事件委托的好处:事件捕获的好处:事件冒泡的好处:三、工作原理事件委托(EventDelegation):事件捕获(EventCapturing):事件冒泡(EventBubbling):四、代码实例1.简单代码实例(事件监听)2.复杂代码实例(简单的待办</div>
                    </li>
                    <li><a href="/article/1902854009111244800.htm"
                           title="深入解析 DeepSeek-R1 模型的显存与内存需求" target="_blank">深入解析 DeepSeek-R1 模型的显存与内存需求</a>
                        <span class="text-muted">gs80140</span>
<a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%A7%91%E8%B0%B1/1.htm">基础知识科谱</a><a class="tag" taget="_blank" href="/search/deepseek/1.htm">deepseek</a>
                        <div>DeepSeek-R1系列模型涵盖从轻量级到超大规模的多个版本,适用于不同的应用场景。了解各版本在不同量化精度下的显存和内存需求,有助于选择适合自身硬件配置的模型。模型参数与量化精度的关系模型的参数量决定了其基础大小,而量化精度(如FP16、INT8、INT4)则影响每个参数所占用的存储空间。通过降低量化精度,可以显著减少模型的显存和内存占用,但可能会对模型性能产生一定影响。以下是不同量化精度下,</div>
                    </li>
                    <li><a href="/article/1902853630675972096.htm"
                           title="使用 OpenAI Chat 模型进行对话开发的入门指南" target="_blank">使用 OpenAI Chat 模型进行对话开发的入门指南</a>
                        <span class="text-muted">eahba</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>技术背景介绍OpenAI的对话模型(ChatOpenAI)为开发者提供了强大的自然语言处理功能,可以实现高度交互的AI应用。这篇文章将帮助您快速入门,了解如何在您的应用中集成和使用这些模型,并探讨不同的功能特性。核心原理解析ChatOpenAI模型是基于OpenAI的GPT家族,能够理解上下文并产生对话式回应。最新版的模型不仅支持标准文本输入输出,还支持工具调用、结构化输出等高级特性,满足多种复杂</div>
                    </li>
                    <li><a href="/article/1902852749293318144.htm"
                           title="使用Python下载抖音短视频:完整教程与代码解析" target="_blank">使用Python下载抖音短视频:完整教程与代码解析</a>
                        <span class="text-muted">cnh6070</span>
<a class="tag" taget="_blank" href="/search/%E7%9F%AD%E8%A7%86%E9%A2%91/1.htm">短视频</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>抖音作为全球领先的短视频平台,拥有海量的优质内容。然而,抖音官方并未提供直接下载视频的功能,这给一些用户带来了不便。幸运的是,通过Python编程,我们可以实现抖音视频的下载。本文将详细介绍如何使用Python下载抖音短视频,并解析一个完整的代码示例。一、准备工作在开始之前,你需要确保已经安装了Python环境,并且安装了以下必要的Python库:requests:用于发送网络请求,获取网页内容或</div>
                    </li>
                                <li><a href="/article/127.htm"
                                       title="用MiddleGenIDE工具生成hibernate的POJO(根据数据表生成POJO类)" target="_blank">用MiddleGenIDE工具生成hibernate的POJO(根据数据表生成POJO类)</a>
                                    <span class="text-muted">AdyZhang</span>
<a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/MiddleGenIDE/1.htm">MiddleGenIDE</a>
                                    <div>推荐:MiddlegenIDE插件,   是一个Eclipse   插件.     用它可以直接连接到数据库,   根据表按照一定的HIBERNATE规则作出BEAN和对应的XML ,用完后你可以手动删除它加载的JAR包和XML文件!     今天开始试着使用</div>
                                </li>
                                <li><a href="/article/254.htm"
                                       title=".9.png" target="_blank">.9.png</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>  “点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 
  智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向,在界面改变方向后,界面上的图形会因为长宽的变化而产生拉伸,造成图形的失真变形。 
  我们都知道android平台有多种不同的分辨率,很多控件的切图文件在被放大拉伸后,边</div>
                                </li>
                                <li><a href="/article/381.htm"
                                       title="算法的效率" target="_blank">算法的效率</a>
                                    <span class="text-muted">天子之骄</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95%E6%95%88%E7%8E%87/1.htm">算法效率</a><a class="tag" taget="_blank" href="/search/%E5%A4%8D%E6%9D%82%E5%BA%A6/1.htm">复杂度</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%9D%8F%E6%83%85%E5%86%B5%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4/1.htm">最坏情况运行时间</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7O%E9%98%B6/1.htm">大O阶</a><a class="tag" taget="_blank" href="/search/%E5%B9%B3%E5%9D%87%E6%83%85%E5%86%B5%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4/1.htm">平均情况运行时间</a>
                                    <div>算法的效率 
效率是速度和空间消耗的度量。集中考虑程序的速度,也称运行时间或执行时间,用复杂度的阶(O)这一标准来衡量。空间的消耗或需求也可以用大O表示,而且它总是小于或等于时间需求。 
  
以下是我的学习笔记: 
  
1.求值与霍纳法则,即为秦九韶公式。 
  
2.测定运行时间的最可靠方法是计数对运行时间有贡献的基本操作的执行次数。运行时间与这个计数成正比。 </div>
                                </li>
                                <li><a href="/article/508.htm"
                                       title="java数据结构" target="_blank">java数据结构</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/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                                    <div>Java 数据结构 
 
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 
 
枚举(Enumeration) 
位集合(BitSet) 
向量(Vector) 
栈(Stack) 
字典(Dictionary) 
哈希表(Hashtable) 
属性(Properties) 
以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collect</div>
                                </li>
                                <li><a href="/article/635.htm"
                                       title="MybatisHelloWorld" target="_blank">MybatisHelloWorld</a>
                                    <span class="text-muted">3213213333332132</span>

                                    <div>
//测试入口TestMyBatis   
package com.base.helloworld.test;

import java.io.IOException;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibat</div>
                                </li>
                                <li><a href="/article/762.htm"
                                       title="Java|urlrewrite|URL重写|多个参数" target="_blank">Java|urlrewrite|URL重写|多个参数</a>
                                    <span class="text-muted">7454103</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div> 个人工作经验! 如有不当之处,敬请指点    
1.0  web -info 目录下建立     urlrewrite.xml  文件 类似如下: 
<?xml version="1.0" encoding="UTF-8" ?>  
  <!DOCTYPE u</div>
                                </li>
                                <li><a href="/article/889.htm"
                                       title="达梦数据库+ibatis" target="_blank">达梦数据库+ibatis</a>
                                    <span class="text-muted">darkranger</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a><a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a>
                                    <div>--插入数据方面 
 
如果您需要数据库自增... 
那么在插入的时候不需要指定自增列. 
 
如果想自己指定ID列的值, 那么要设置 
set identity_insert  数据库名.模式名.表名; 
----然后插入数据; 
example: 
create table zhabei.test( 
id bigint identity(1,1) primary key, 
nam</div>
                                </li>
                                <li><a href="/article/1016.htm"
                                       title="XML 解析 四种方式" target="_blank">XML 解析 四种方式</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法。   
 
  
 
    
 
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object </div>
                                </li>
                                <li><a href="/article/1143.htm"
                                       title="spring中配置文件占位符的使用" target="_blank">spring中配置文件占位符的使用</a>
                                    <span class="text-muted">avords</span>

                                    <div>1.类 
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.o</div>
                                </li>
                                <li><a href="/article/1270.htm"
                                       title="前端工程化-公共模块的依赖和常用的工作流" target="_blank">前端工程化-公共模块的依赖和常用的工作流</a>
                                    <span class="text-muted">bee1314</span>
<a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a>
                                    <div>题记: 一个人的项目,还有工程化的问题嘛?       我们在推进模块化和组件化的过程中,肯定会不断的沉淀出我们项目的模块和组件。对于这些沉淀出的模块和组件怎么管理?另外怎么依赖也是个问题?   你真的想这样嘛?       var BreadCrumb = require(‘../../../../uikit/breadcrumb’); //真心ugly。     </div>
                                </li>
                                <li><a href="/article/1397.htm"
                                       title="上司说「看你每天准时下班就知道你工作量不饱和」,该如何回应?" target="_blank">上司说「看你每天准时下班就知道你工作量不饱和」,该如何回应?</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a><a class="tag" taget="_blank" href="/search/%E6%B2%9F%E9%80%9A/1.htm">沟通</a><a class="tag" taget="_blank" href="/search/IT%E8%81%8C%E4%B8%9A%E8%A7%84%E5%88%92/1.htm">IT职业规划</a>
                                    <div>问题:上司说「看你每天准时下班就知道你工作量不饱和」,如何回应 
        正常下班时间6点,只要是6点半前下班的,上司都认为没有加班。 
  
Eno-Bea回答,注重感受,不一定是别人的 
        虽然我不知道你具体从事什么工作与职业,但是我大概猜测,你是从事一项不太容易出现阶段性成果的工作</div>
                                </li>
                                <li><a href="/article/1524.htm"
                                       title="TortoiseSVN,过滤文件" target="_blank">TortoiseSVN,过滤文件</a>
                                    <span class="text-muted">征客丶</span>
<a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a>
                                    <div>环境: 
TortoiseSVN 1.8 
 
配置: 
在文件夹空白处右键 
选择  TortoiseSVN -> Settings 
在 Global ignote pattern 中添加要过滤的文件: 
多类型用英文空格分开 
*name : 过滤所有名称为 name 的文件或文件夹 
*.name : 过滤所有后缀为 name 的文件或文件夹 
 
 
 
--------</div>
                                </li>
                                <li><a href="/article/1651.htm"
                                       title="【Flume二】HDFS sink细说" target="_blank">【Flume二】HDFS sink细说</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Flume/1.htm">Flume</a>
                                    <div>1. Flume配置 
  
a1.sources=r1  
a1.channels=c1  
a1.sinks=k1  

###Flume负责启动44444端口
  
a1.sources.r1.type=avro  
a1.sources.r1.bind=0.0.0.0  
a1.sources.r1.port=44444  
a1.sources.r1.chan</div>
                                </li>
                                <li><a href="/article/1778.htm"
                                       title="The Eight Myths of Erlang Performance" target="_blank">The Eight Myths of Erlang Performance</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a>
                                    <div>erlang有一篇guide很有意思: http://www.erlang.org/doc/efficiency_guide 
里面有个The Eight Myths of Erlang Performance: http://www.erlang.org/doc/efficiency_guide/myths.html 
  
  
Myth: Funs are sl</div>
                                </li>
                                <li><a href="/article/1905.htm"
                                       title="java多线程网络传输文件(非同步)-2008-08-17" target="_blank">java多线程网络传输文件(非同步)-2008-08-17</a>
                                    <span class="text-muted">ljy325</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</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/socket/1.htm">socket</a>
                                    <div>利用 Socket 套接字进行面向连接通信的编程。客户端读取本地文件并发送;服务器接收文件并保存到本地文件系统中。 
使用说明:请将TransferClient, TransferServer, TempFile三个类编译,他们的类包是FileServer. 
客户端: 
修改TransferClient: serPort, serIP, filePath, blockNum,的值来符合您机器的系</div>
                                </li>
                                <li><a href="/article/2032.htm"
                                       title="读《研磨设计模式》-代码笔记-模板方法模式" target="_blank">读《研磨设计模式》-代码笔记-模板方法模式</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 



import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;</div>
                                </li>
                                <li><a href="/article/2159.htm"
                                       title="配置心得" target="_blank">配置心得</a>
                                    <span class="text-muted">chenyu19891124</span>
<a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE/1.htm">配置</a>
                                    <div>时间就这样不知不觉的走过了一个春夏秋冬,转眼间来公司已经一年了,感觉时间过的很快,时间老人总是这样不停走,从来没停歇过。 
作为一名新手的配置管理员,刚开始真的是对配置管理是一点不懂,就只听说咱们公司配置主要是负责升级,而具体该怎么做却一点都不了解。经过老员工的一点点讲解,慢慢的对配置有了初步了解,对自己所在的岗位也慢慢的了解。 
做了一年的配置管理给自总结下: 
1.改变 
从一个以前对配置毫无</div>
                                </li>
                                <li><a href="/article/2286.htm"
                                       title="对“带条件选择的并行汇聚路由问题”的再思考" target="_blank">对“带条件选择的并行汇聚路由问题”的再思考</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</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/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B/1.htm">领域模型</a>
                                    <div>2008年上半年,我在设计并开发基于”JWFD流程系统“的商业化改进型引擎的时候,由于采用了新的嵌入式公式模块而导致出现“带条件选择的并行汇聚路由问题”(请参考2009-02-27博文),当时对这个问题的解决办法是采用基于拓扑结构的处理思想,对汇聚点的实际前驱分支节点通过算法预测出来,然后进行处理,简单的说就是找到造成这个汇聚模型的分支起点,对这个起始分支节点实际走的路径数进行计算,然后把这个实际</div>
                                </li>
                                <li><a href="/article/2413.htm"
                                       title="Oracle 10g 的clusterware 32位 下载地址" target="_blank">Oracle 10g 的clusterware 32位 下载地址</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>Oracle 10g 的clusterware 32位 下载地址 
 
http://pan.baidu.com/share/link?shareid=531580&uk=421021908 
 
 
http://pan.baidu.com/share/link?shareid=137223&uk=321552738 
 
http://pan.baidu.com/share/l</div>
                                </li>
                                <li><a href="/article/2540.htm"
                                       title="非常好的介绍:Linux定时执行工具cron" target="_blank">非常好的介绍:Linux定时执行工具cron</a>
                                    <span class="text-muted">dongwei_6688</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>Linux经过十多年的发展,很多用户都很了解Linux了,这里介绍一下Linux下cron的理解,和大家讨论讨论。cron是一个Linux 定时执行工具,可以在无需人工干预的情况下运行作业,本文档不讲cron实现原理,主要讲一下Linux定时执行工具cron的具体使用及简单介绍。 
新增调度任务推荐使用crontab -e命令添加自定义的任务(编辑的是/var/spool/cron下对应用户的cr</div>
                                </li>
                                <li><a href="/article/2667.htm"
                                       title="Yii assets目录生成及修改" target="_blank">Yii assets目录生成及修改</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a>
                                    <div>assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件,但是我们又希望将module单独出来,所以需要使用发布,即将一个目录下的文件复制一份到assets下面方便通过url访问。 
assets设置对应的方法位置 \framework\web\CAssetManager.php 
  
assets配置方法 在m</div>
                                </li>
                                <li><a href="/article/2794.htm"
                                       title="mac工作软件推荐" target="_blank">mac工作软件推荐</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a>
                                    <div>mac上的Terminal + bash + screen组合现在已经非常好用了,但是还是经不起iterm+zsh+tmux的冲击。在同事的强烈推荐下,趁着升级mac系统的机会,顺便也切换到iterm+zsh+tmux的环境下了。 
我为什么要要iterm2 
切换过来也是脑袋一热的冲动,我也调查过一些资料,看了下iterm的一些优点: 
 
 * 兼容性好,远程服务器 vi 什么的低版本能很好兼</div>
                                </li>
                                <li><a href="/article/2921.htm"
                                       title="Memcached(三)、封装Memcached和Ehcache" target="_blank">Memcached(三)、封装Memcached和Ehcache</a>
                                    <span class="text-muted">frank1234</span>
<a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a><a class="tag" taget="_blank" href="/search/ehcache/1.htm">ehcache</a><a class="tag" taget="_blank" href="/search/spring+ioc/1.htm">spring ioc</a>
                                    <div>本文对Ehcache和Memcached进行了简单的封装,这样对于客户端程序无需了解ehcache和memcached的差异,仅需要配置缓存的Provider类就可以在二者之间进行切换,Provider实现类通过Spring IoC注入。 
cache.xml 
 
<?xml version="1.0" encoding="UTF-8"?>
</div>
                                </li>
                                <li><a href="/article/3048.htm"
                                       title="Remove Duplicates from Sorted List II" target="_blank">Remove Duplicates from Sorted List II</a>
                                    <span class="text-muted">hcx2013</span>
<a class="tag" taget="_blank" href="/search/remove/1.htm">remove</a>
                                    <div>Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. 
For example,Given 1->2->3->3->4->4->5,</div>
                                </li>
                                <li><a href="/article/3175.htm"
                                       title="Spring4新特性——注解、脚本、任务、MVC等其他特性改进" target="_blank">Spring4新特性——注解、脚本、任务、MVC等其他特性改进</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a>
                                    <div>Spring4新特性——泛型限定式依赖注入 
Spring4新特性——核心容器的其他改进 
Spring4新特性——Web开发的增强 
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  
Spring4新特性——Groovy Bean定义DSL 
Spring4新特性——更好的Java泛型操作API  
Spring4新</div>
                                </li>
                                <li><a href="/article/3302.htm"
                                       title="MySQL安装文档" target="_blank">MySQL安装文档</a>
                                    <span class="text-muted">liyong0802</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>  工作中用到的MySQL可能安装在两种操作系统中,即Windows系统和Linux系统。以Linux系统中情况居多。 
  安装在Windows系统时与其它Windows应用程序相同按照安装向导一直下一步就即,这里就不具体介绍,本文档只介绍Linux系统下MySQL的安装步骤。 
  Linux系统下安装MySQL分为三种:RPM包安装、二进制包安装和源码包安装。二</div>
                                </li>
                                <li><a href="/article/3429.htm"
                                       title="使用VS2010构建HotSpot工程" target="_blank">使用VS2010构建HotSpot工程</a>
                                    <span class="text-muted">p2p2500</span>
<a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a><a class="tag" taget="_blank" href="/search/OpenJDK/1.htm">OpenJDK</a><a class="tag" taget="_blank" href="/search/VS2010/1.htm">VS2010</a>
                                    <div>1. 下载OpenJDK7的源码: 
     
http://download.java.net/openjdk/jdk7 
     
http://download.java.net/openjdk/ 
     
2. 环境配置 
    ▶</div>
                                </li>
                                <li><a href="/article/3556.htm"
                                       title="Oracle实用功能之分组后列合并" target="_blank">Oracle实用功能之分组后列合并</a>
                                    <span class="text-muted">seandeng888</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E7%BB%84/1.htm">分组</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E7%94%A8%E5%8A%9F%E8%83%BD/1.htm">实用功能</a><a class="tag" taget="_blank" href="/search/%E5%90%88%E5%B9%B6/1.htm">合并</a>
                                    <div>1       实例解析  
由于业务需求需要对表中的数据进行分组后进行合并的处理,鉴于Oracle10g没有现成的函数实现该功能,且该功能如若用JAVA代码实现会比较复杂,因此,特将SQL语言的实现方式分享出来,希望对大家有所帮助。如下: 
表test 数据如下: 
ID,SUBJECTCODE,DIMCODE,VALUE 
1&nbs</div>
                                </li>
                                <li><a href="/article/3683.htm"
                                       title="Java定时任务注解方式实现" target="_blank">Java定时任务注解方式实现</a>
                                    <span class="text-muted">tuoni</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/jni/1.htm">jni</a>
                                    <div>Spring 注解的定时任务,有如下两种方式: 
第一种: 
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

 xmlns:xsi="http</div>
                                </li>
                                <li><a href="/article/3810.htm"
                                       title="11大Java开源中文分词器的使用方法和分词效果对比" target="_blank">11大Java开源中文分词器的使用方法和分词效果对比</a>
                                    <span class="text-muted">yangshangchuan</span>
<a class="tag" taget="_blank" href="/search/word%E5%88%86%E8%AF%8D%E5%99%A8/1.htm">word分词器</a><a class="tag" taget="_blank" href="/search/ansj%E5%88%86%E8%AF%8D%E5%99%A8/1.htm">ansj分词器</a><a class="tag" taget="_blank" href="/search/Stanford%E5%88%86%E8%AF%8D%E5%99%A8/1.htm">Stanford分词器</a><a class="tag" taget="_blank" href="/search/FudanNLP%E5%88%86%E8%AF%8D%E5%99%A8/1.htm">FudanNLP分词器</a><a class="tag" taget="_blank" href="/search/HanLP%E5%88%86%E8%AF%8D%E5%99%A8/1.htm">HanLP分词器</a>
                                    <div>本文的目标有两个: 
1、学会使用11大Java开源中文分词器 
2、对比分析11大Java开源中文分词器的分词效果 
本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断。 
11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: 
/**
 * 获取文本的所有分词结果, 对比</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>