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/1896471276613070848.htm"
                           title="eNSP中AR2220、AR201、AR1220、AR2240、AR3260、Router、NE40E、NE5000E、NE9000、CX路由器学习笔记" target="_blank">eNSP中AR2220、AR201、AR1220、AR2240、AR3260、Router、NE40E、NE5000E、NE9000、CX路由器学习笔记</a>
                        <span class="text-muted">learning-striving</span>
<a class="tag" taget="_blank" href="/search/eNSP/1.htm">eNSP</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/eNSP/1.htm">eNSP</a><a class="tag" taget="_blank" href="/search/%E8%B7%AF%E7%94%B1%E5%99%A8/1.htm">路由器</a><a class="tag" taget="_blank" href="/search/%E8%B7%AF%E7%94%B1%E5%99%A8%E6%8E%A5%E5%8F%A3/1.htm">路由器接口</a><a class="tag" taget="_blank" href="/search/VRP/1.htm">VRP</a>
                        <div>eNSP中常见华为路由器型号的接口特性详解及横向对比,重点关注接口类型、扩展能力和适用场景:缩写解释:LPU:LineProcessingUnit(线路处理单元)SPU:ServiceProcessingUnit(业务处理单元)PoE:PoweroverEthernet(以太网供电)GE:GigabitEthernet(千兆以太网)FE:FastEthernet(快速以太网)SFP:SmallFo</div>
                    </li>
                    <li><a href="/article/1896470142217416704.htm"
                           title="app专项测试" target="_blank">app专项测试</a>
                        <span class="text-muted">Zzzdr</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>SDK平台工具版本说明|AndroidStudio|AndroidDevelopersADB安装app专项测试:app弱网测试(网络测试流程)一、网络测试的一般流程step1:首先要考虑网络正常的情况①各个模块的功能正常可用②页面元素/数据显示正常step2:其次要考虑无网络的情况①APP各个功能在无网络情况下是否可用②APP各个页面之间切换是否正常③发送网络请求时是否会导致闪退、卡死等异常情况④</div>
                    </li>
                    <li><a href="/article/1896469763111055360.htm"
                           title="【2025年14期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股近年增发数据获取实例演示及接口API说明文档" target="_blank">【2025年14期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股近年增发数据获取实例演示及接口API说明文档</a>
                        <span class="text-muted">不会写代码的码农农</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8API/1.htm">股票API</a><a class="tag" taget="_blank" href="/search/%E8%82%A1%E7%A5%A8%E6%95%B0%E6%8D%AE%E6%8E%A5%E5%8F%A3/1.htm">股票数据接口</a>
                        <div>在近一至两年期间,股票量化分析逐步成为备受关注的热门议题。对于投身于该领域工作而言,首要步骤便是获取全面且精准的股票数据。无论是实时交易数据、历史交易记录、财务数据,亦或是基本面信息,这些数据均是开展量化分析过程中不可或缺的宝贵资源。我们的核心任务在于从这些数据中提炼出具有价值的信息,从而为投资策略提供坚实有力的指导。在数据探索进程中,我尝试运用了多种方法,涵盖自编网易股票页面爬虫程序、申万行业数</div>
                    </li>
                    <li><a href="/article/1896469255973564416.htm"
                           title="一文3000字从0到1带你接口测试基础知识【建议收藏】" target="_blank">一文3000字从0到1带你接口测试基础知识【建议收藏】</a>
                        <span class="text-muted">程序员小 濠</span>
<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/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/1.htm">技术分享</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95/1.htm">压力测试</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</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/%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95/1.htm">接口测试</a>
                        <div>接口测试是软件测试中的一个重要环节,它主要用于验证系统各个组件之间的相互通信是否正确,以及系统对外提供的接口是否符合预期的功能和性能要求。下面我将带你从零开始,详细介绍接口测试的基础知识。一、什么是接口测试接口测试是指测试软件系统之间通过接口进行的通信协议,以及系统对外提供的接口功能和性能的一种测试方法。它关注的是系统内外部组件之间的数据流和消息传递,以及接口对外提供的数据格式和接口规范是否符合预</div>
                    </li>
                    <li><a href="/article/1896467619100291072.htm"
                           title="AUTOSAR 的运行时环境(RTE)详解及综合实例" target="_blank">AUTOSAR 的运行时环境(RTE)详解及综合实例</a>
                        <span class="text-muted">大模型大数据攻城狮</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E9%9D%A2%E8%AF%95/1.htm">嵌入式面试</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA%E9%9D%A2%E7%BB%8F/1.htm">单片机面经</a><a class="tag" taget="_blank" href="/search/iot/1.htm">iot</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E6%9E%B6%E6%9E%84/1.htm">硬件架构</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">硬件工程</a>
                        <div>目录1.运行时环境(RTE)概述1.1RTE的核心功能1.2RTE的架构1.3RTE的工作流程2.RTE的详细功能解析2.1通信管理2.1.1通信模式2.1.2通信机制2.1.3实例:CAN通信的RTE实现2.2调度管理2.2.1调度策略2.2.2调度器实现2.2.3实例:发动机控制的调度2.3事件管理2.3.1事件类型2.3.2事件处理流程2.3.3实例:CAN消息的事件处理3.综合实例:发动机</div>
                    </li>
                    <li><a href="/article/1896466737298206720.htm"
                           title="Postman 离线登录版" target="_blank">Postman 离线登录版</a>
                        <span class="text-muted">乌姗或Jonathan</span>

                        <div>Postman离线登录版项目地址:https://gitcode.com/open-source-toolkit/4b03c简介本仓库提供了一个无需登录即可使用的Postman离线版本。新版本的Postman需要账号登录,但在国内由于网络原因,登录过程经常缓慢甚至超时。此版本允许用户跳过账号登录步骤,直接进行离线模拟HTTP请求开发。功能特点无需登录:跳过账号登录步骤,直接使用Postman进行开</div>
                    </li>
                    <li><a href="/article/1896464214625677312.htm"
                           title="告别繁琐、拥抱高效-翔云发票识别+发票查验接口" target="_blank">告别繁琐、拥抱高效-翔云发票识别+发票查验接口</a>
                        <span class="text-muted">OCR_API</span>
<a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3/1.htm">接口</a><a class="tag" taget="_blank" href="/search/ocr/1.htm">ocr</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a>
                        <div>你是否还在为发票管理而烦恼?财务人员每天被堆积如山的发票淹没,手动录入信息耗时耗力,还容易出错?发票真伪难辨,担心收到假发票给企业带来损失?难以快速获取发票全票面信息,影响后续报销、入账等流程?缺乏有效的发票管理手段,难以进行数据分析和风险控制?别担心,翔云发票识别与发票查验接口来帮您!翔云发票识别与发票查验接口,为企业提供高效、精准的发票管理解决方案。只需上传发票图片或PDF文件,即可快速识别发</div>
                    </li>
                    <li><a href="/article/1896461567554285568.htm"
                           title="图像分类项目 2.28" target="_blank">图像分类项目 2.28</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/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a>
                        <div>今天的内容是图像分类项目一.图像分类将不同的图像,划分到不同的类别标签,实现最小的分类误差。图像分类的三层境界1.通用的多类别图像分类2.子类细粒度图像分类3.实例级图片分类二.图像分类评估指标TP(Truepositive,真正例):将正类预测为正类数。FP(Falsepositive,假正例):将反类预测为正类数。TN(Truenegative,真反例):将反类预测为反类数。FN(Falsen</div>
                    </li>
                    <li><a href="/article/1896461568569307136.htm"
                           title="爬虫多线程概念" target="_blank">爬虫多线程概念</a>
                        <span class="text-muted">代码逐梦人</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E6%8A%80%E8%83%BD%E6%99%8B%E5%8D%87%E8%B7%AF%E7%BA%BF/1.htm">爬虫技能晋升路线</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在爬虫领域,多线程是一种重要的技术手段,它能够显著提升爬虫程序的性能和效率。下面从基本概念、原理、优缺点和使用场景几个方面详细介绍爬虫多线程。基本概念线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。多线程则是指在一个程序中同时运行多个线程,每个线程都可以独立执行不同的任务。在爬虫程序里,多线程意味着可以同时开启多个线程去执行不同的爬虫任务,比如同时抓取多个网页</div>
                    </li>
                    <li><a href="/article/1896461063218589696.htm"
                           title="8个Python爬虫高效数据抓取技巧" target="_blank">8个Python爬虫高效数据抓取技巧</a>
                        <span class="text-muted">程序员小鱼_</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%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/%E7%88%AC%E8%99%AB/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爬虫成为了获取网络数据的重要工具。本文将深入浅出地介绍8个高效的Python爬虫技巧,帮助初学者提升数据抓取能力,从简单的网页内容提取到复杂的动态网站抓取,逐步解锁爬虫高级技能。1.使用Requests库优雅地请求网页技巧简介:Requests是Python中处理HTTP请求的明星库,简洁易用。实践示例:importrequestsurl='https://examp</div>
                    </li>
                    <li><a href="/article/1896458165831135232.htm"
                           title="App弱网测试是怎么测试的!" target="_blank">App弱网测试是怎么测试的!</a>
                        <span class="text-muted">程序员小 濠</span>
<a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">自动化测试</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/1.htm">技术分享</a><a class="tag" taget="_blank" href="/search/%E5%B9%B2%E8%B4%A7%E5%88%86%E4%BA%AB/1.htm">干货分享</a><a class="tag" taget="_blank" href="/search/jmeter/1.htm">jmeter</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/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/APP%E6%B5%8B%E8%AF%95/1.htm">APP测试</a>
                        <div>一、网络测试的一般流程step1:首先要考虑网络正常的情况①各个模块的功能正常可用②页面元素/数据显示正常step2:其次要考虑无网络的情况①APP各个功能在无网络情况下是否可用②APP各个页面之间切换是否正常③发送网络请求时是否会导致闪退、卡死等异常情况④APP各个页面是否显示完整美观,未刷新的页面是否做了相应的提示和处理⑤在无网络情况下数据是否会丢失⑥无网络提示信息是否友好step3:再次考虑</div>
                    </li>
                    <li><a href="/article/1896455894049288192.htm"
                           title="自动驾驶系统工程师的技术图谱与学习路径" target="_blank">自动驾驶系统工程师的技术图谱与学习路径</a>
                        <span class="text-muted">执于代码</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%80%85%E8%81%8C%E4%B8%9A%E5%8A%A0%E9%80%9F%E6%9C%8D%E5%8A%A1/1.htm">开发者职业加速服务</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6/1.htm">自动驾驶</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>自动驾驶系统工程师的技术图谱与学习路径自动驾驶系统工程师是一个跨学科的角色,涵盖了硬件、软件、传感器、算法、控制系统等多个领域。为了清晰展示这一职位所需要掌握的技术,我们可以将其分为多个能力层次,并根据工程师在不同阶段的需求设计学习路径。以下是一个详细的自动驾驶系统工程师技术图谱与学习路径,按照“技能树与能力模型”展示,从基础到进阶,分层次列出了所需的核心技能和学习路线。一、基础能力层(数学、编程</div>
                    </li>
                    <li><a href="/article/1896454005589078016.htm"
                           title="知识赋能,效率倍增:探讨 Baklib 实现自助服务知识系统的最佳实践" target="_blank">知识赋能,效率倍增:探讨 Baklib 实现自助服务知识系统的最佳实践</a>
                        <span class="text-muted">数字体验运营官</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a>
                        <div>一、什么是自助服务?自助服务就是自助访问信息和服务的一种方式。自助服务终端可以是银行的ATM取款机,零售店的自助售卖机,图书馆的图书导览大屏,软件公司的在线操作指南,SaaS平台的HelpCenter等等。自助服务的流行源于其从客户体验和客户满意度角度带来的价值。在知识边缘管理方面也是如此。客户和员工希望尽可能自己完成工作,不论信息需求如何不同,自助服务的需求却是一致的。只有当事情变得复杂时,他们</div>
                    </li>
                    <li><a href="/article/1896453501584732160.htm"
                           title="完整指南:从基础到高级使用 Semantic Kernel" target="_blank">完整指南:从基础到高级使用 Semantic Kernel</a>
                        <span class="text-muted">江沉晚呤时</span>
<a class="tag" taget="_blank" href="/search/Net/1.htm">Net</a><a class="tag" taget="_blank" href="/search/core/1.htm">core</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/.netcore/1.htm">.netcore</a>
                        <div>SemanticKernel是微软推出的一款强大的开发框架,旨在帮助开发者通过语义理解和自然语言处理(NLP)构建智能应用。它为开发者提供了与OpenAI、AzureCognitiveServices等人工智能服务集成的简便接口,使得构建自然语言处理(NLP)应用变得更加直观和高效。在本文中,我们将从基础到高级全面讲解如何使用SemanticKernel,并提供详细的代码示例,帮助你快速掌握这个框</div>
                    </li>
                    <li><a href="/article/1896450348260847616.htm"
                           title="ITE Super IO入门篇" target="_blank">ITE Super IO入门篇</a>
                        <span class="text-muted">YOYO--小天</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a>
                        <div>接触BIOS以来算起来已经有四年了,想着将自己所学的知识记录起来,这样也方便他人学习。这是我的第一篇博客,从SIO开始吧!简介SIO应用在台式机比较多,主要用来做电源管理,如上电时序控制;外围接口扩充,如串口、并口;还有温度、电压监控、智能风扇等。SIO是一个半可定制化的芯片,怎么说是半可定制化呢?比如上电时序,这一部分就是固化好的,而可定制化部分则是逻辑设备(LogicDevice)部分。接入电</div>
                    </li>
                    <li><a href="/article/1896449087306264576.htm"
                           title="FromData传参形式:" target="_blank">FromData传参形式:</a>
                        <span class="text-muted">It 小白努力中…</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a>
                        <div>前端传参有很多形式下面介绍一下FromData传参!!首先模拟的是获取列表的形式向后端传递参数:1、第一要在发请求函数里new一个新的对象通过append方式向这个对象中添加参数://获取列表getLists(){letformdata=newFormData();//new出来的对象formdata.append("pageNum",this.queryParams.page);//所传递参数f</div>
                    </li>
                    <li><a href="/article/1896448583398387712.htm"
                           title="Java实现基数排序算法详解及优化" target="_blank">Java实现基数排序算法详解及优化</a>
                        <span class="text-muted">捕风捉你</span>
<a class="tag" taget="_blank" href="/search/%E4%BB%8E0%E5%BC%80%E5%A7%8B%E5%AD%A6%E7%AE%97%E6%B3%95/1.htm">从0开始学算法</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>引言基数排序(RadixSort)是一种非比较型整数排序算法,通过将整数按位进行排序来实现。它具有稳定、高效的特点,特别适用于大规模数据的排序。本文将详细讲解如何使用Java实现基数排序算法,并结合图解和实例代码,帮助您全面理解这一高级排序算法。同时,我们还将进行时间复杂度分析,并探讨基数排序的优化方法,以进一步提高其性能。基数排序算法的原理基数排序通过按位排序,从最低位到最高位(或从最高位到最低</div>
                    </li>
                    <li><a href="/article/1896442278117961728.htm"
                           title="Spring Cloud 的限流、熔断、降级" target="_blank">Spring Cloud 的限流、熔断、降级</a>
                        <span class="text-muted">java1224</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>一、限流、熔断、降级的概念(一)限流--系统的“流量警察”限流是指在一段时间内,限制系统能够处理的请求数量,以防止系统因过多的请求而崩溃。限流可以有效地保护系统的资源,确保系统在高负载情况下仍然能够正常运行。例如,一个电商网站在促销活动期间,可能会面临大量的用户请求。如果不进行限流,系统可能会因为无法处理这么多请求而崩溃,导致用户无法访问网站。通过限流,可以限制每秒能够处理的请求数量,确保系统不会</div>
                    </li>
                    <li><a href="/article/1896441773211840512.htm"
                           title="fmpeg 中 avio_check() 代码分析" target="_blank">fmpeg 中 avio_check() 代码分析</a>
                        <span class="text-muted">hjjdebug</span>
<a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/avio_check/1.htm">avio_check</a>
                        <div>author:hjjdebugdate:2025年02月28日星期五15:03:10CSTdescriptonffmpeg中avio_check()代码分析文章目录1.测试程序程序执行结果2.源码注释:3.分析程序3.1.ff_file_protocol,是URLProtocol的一个实例3.2.FileContext是fileprotocol下使用的一个私有对象结构3.3.URLContext,</div>
                    </li>
                    <li><a href="/article/1896438748598562816.htm"
                           title="工程化与框架系列(16)--前端路由实现" target="_blank">工程化与框架系列(16)--前端路由实现</a>
                        <span class="text-muted">一进制ᅟᅠ        ‌‍‎‏ </span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%8C%96%E4%B8%8E%E6%A1%86%E6%9E%B6/1.htm">前端工程化与框架</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>前端路由实现前端路由是单页应用(SPA)的核心功能,它使得在不刷新页面的情况下实现视图切换和状态管理。本文将深入探讨前端路由的实现原理和关键技术。前端路由概述小知识:前端路由是指在单页应用中,通过JS动态操作改变页面内容,而不触发浏览器刷新的技术,使得用户体验更加流畅。为什么需要前端路由在传统的多页面应用中,页面跳转需要向服务器发送请求并重新加载页面。而在单页应用中,前端路由带来以下优势:提升用户</div>
                    </li>
                    <li><a href="/article/1896436227092049920.htm"
                           title="神经进化算法(Neuroevolution) 原理与代码实例讲解" target="_blank">神经进化算法(Neuroevolution) 原理与代码实例讲解</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/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%B8%8E%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">AI大模型与大数据</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>神经进化算法,Neuroevolution,进化算法,深度学习,机器学习,遗传算法,神经网络,代码实例1.背景介绍在机器学习领域,神经网络凭借其强大的学习能力和泛化能力,在图像识别、自然语言处理、语音识别等领域取得了显著的成就。然而,传统的神经网络训练方法通常依赖于人工设计的网络结构和参数初始化,这往往需要大量的经验和试错,并且难以找到最优的网络结构和参数。神经进化算法(Neuroevolutio</div>
                    </li>
                    <li><a href="/article/1896435805489000448.htm"
                           title="“码农”成长记,渐渐不想「砸」电脑了" target="_blank">“码农”成长记,渐渐不想「砸」电脑了</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E7%A8%8B%E5%BA%8F%E5%91%98%E5%8F%91%E5%B1%95/1.htm">程序员程序员发展</a>
                        <div>在互联网这个充满神奇与挑战的江湖里,程序员们就像是一群身怀绝技的侠客,在代码的世界里闯荡。一开始,很多程序员都觉得自己像是个“搬砖”的码农,每天对着屏幕,一行行地敲着代码,仿佛在堆砌一座看不见尽头的城堡。初入编程世界,那感觉就像掉进了一个巨大的迷宫。各种编程语言,像Python、Java、C++,就如同迷宫里错综复杂的路径,让人眼花缭乱。每一种语言都有它独特的语法规则,就好像不同门派的武功秘籍,各</div>
                    </li>
                    <li><a href="/article/1896434669101051904.htm"
                           title="HarmonyOS Next 跨端适配的电商购物应用开发" target="_blank">HarmonyOS Next 跨端适配的电商购物应用开发</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a>
                        <div>商品展示的不同模式(网格布局vs列表布局)在电商应用中,商品展示模式主要有网格布局和列表布局两种。网格布局以矩阵形式排列商品,能在有限空间内展示较多商品,适合快速浏览和比较商品。列表布局则是将商品依次纵向排列,每个商品信息展示更详细,注重商品详情的呈现。小屏单列vs大屏多列的适配策略小屏设备(如手机)屏幕空间有限,为保证商品信息清晰展示和操作便捷,商品列表通常采用单列布局。用户可以通过上下滑动轻松</div>
                    </li>
                    <li><a href="/article/1896434586204827648.htm"
                           title="神经架构搜索 原理与代码实例讲解" target="_blank">神经架构搜索 原理与代码实例讲解</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/%E5%A4%A7%E5%8E%82Offer%E6%94%B6%E5%89%B2%E6%9C%BA/1.htm">大厂Offer收割机</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a><a class="tag" taget="_blank" href="/search/%E7%AE%80%E5%8E%86/1.htm">简历</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E8%AF%BB%E4%B9%A6/1.htm">程序员读书</a><a class="tag" taget="_blank" href="/search/%E7%A1%85%E5%9F%BA%E8%AE%A1%E7%AE%97/1.htm">硅基计算</a><a class="tag" taget="_blank" href="/search/%E7%A2%B3%E5%9F%BA%E8%AE%A1%E7%AE%97/1.htm">碳基计算</a><a class="tag" taget="_blank" href="/search/%E8%AE%A4%E7%9F%A5%E8%AE%A1%E7%AE%97/1.htm">认知计算</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9%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/AIGC/1.htm">AIGC</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/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%9E%E7%8E%B0%E8%B4%A2%E5%AF%8C%E8%87%AA%E7%94%B1/1.htm">程序员实现财富自由</a>
                        <div>神经架构搜索:原理与代码实例讲解作者:禅与计算机程序设计艺术/ZenandtheArtofComputerProgramming1.背景介绍1.1问题的由来随着深度学习的快速发展,神经网络在各个领域取得了显著的成果。然而,设计一个高效、通用的神经网络架构仍然是一个具有挑战性的问题。手动设计网络架构需要大量的专业知识和经验,而且往往效率低下。因此,神经架构搜索(NeuralArchitectureS</div>
                    </li>
                    <li><a href="/article/1896431814587772928.htm"
                           title="浅析TypeScript setTimeout语法" target="_blank">浅析TypeScript setTimeout语法</a>
                        <span class="text-muted">yangguosheng</span>
<a class="tag" taget="_blank" href="/search/TypeScript/1.htm">TypeScript</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/setTimeout/1.htm">setTimeout</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E6%B3%95/1.htm">语法</a>
                        <div>偶遇TypeScriptsetTimeout语法问题,百度没有结果。所以自己研究了一下正常是这样的结构setTimeout(function(){...},interval)第一个参数是回调函数,第二个参数是间隔时间。意思是interval毫秒后,执行回调函数。不过因为JavaScript是单线程函数,所以可能会有顺延,今天不讨论这个。与JavaScript不同,第一个参数不能是字符串。今天遇到的</div>
                    </li>
                    <li><a href="/article/1896430932219457536.htm"
                           title="使用区块链验证txt文件内容一致性" target="_blank">使用区块链验证txt文件内容一致性</a>
                        <span class="text-muted">欣然~</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、概述本系统旨在利用区块链技术验证两个文件(try.txt和try_copy.txt)的内容是否一致,以检测文件是否被篡改。通过将文件的哈希值存储在区块链的不同区块中,并对区块链进行有效性验证,结合文件哈希值的比较,实现文件内容的完整性检查。二、功能特性区块链基础功能:实现了基本的区块链结构,包含区块的创建、链接以及区块链的有效性验证。文件哈希计算:能够计算指定文件的SHA-256哈希值,用于唯</div>
                    </li>
                    <li><a href="/article/1896428912808882176.htm"
                           title="89c51 单片机 c语言 编写sszymmh 歌曲 文档,Proteus仿真51单片机生日快乐音乐播放器..." target="_blank">89c51 单片机 c语言 编写sszymmh 歌曲 文档,Proteus仿真51单片机生日快乐音乐播放器...</a>
                        <span class="text-muted">林中有一只小猫猫</span>
<a class="tag" taget="_blank" href="/search/89c51/1.htm">89c51</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E5%86%99sszymmh/1.htm">编写sszymmh</a><a class="tag" taget="_blank" href="/search/%E6%AD%8C%E6%9B%B2/1.htm">歌曲</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3/1.htm">文档</a>
                        <div>实验名称:基于51单片机音乐播放器实验目的:声音的音调不同是因为声音的频率不同造成的。那么,就可以通过单片机发送不同频率的脉冲信号给蜂鸣器,来达到让蜂鸣器发出不同音调声音的目的。不同频率的脉冲信号就意外着每个脉冲之间必须有着不一样的时差,这可以通过延时或者定时计数器定时的方式来实现。我们便是通过这个目的,去通过对于单片机的操作,蜂鸣器变调,使蜂鸣器完成对于歌曲乐谱的播放,再通过LCD1602把我们</div>
                    </li>
                    <li><a href="/article/1896427099162472448.htm"
                           title="HarmonyOS Next跨设备拖拽——文件与文本自由流转" target="_blank">HarmonyOS Next跨设备拖拽——文件与文本自由流转</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a>
                        <div>作为一名在华为鸿蒙开发领域摸爬滚打多年的老开发者,今天来和大家深入聊聊HarmonyOSNext中跨设备拖拽这个超酷的功能。它实现了文件与文本在不同设备间的自由流转,极大地提升了用户的分布式交互体验,就像是给设备之间搭建了一座无形的桥梁,让数据传输变得轻松又高效。跨设备拖拽的基本原理跨设备拖拽的实现依赖于两个关键技术:键鼠穿越和数据传输机制。键鼠穿越就像是给用户的键鼠操作赋予了“超能力”,让它们能</div>
                    </li>
                    <li><a href="/article/1896423984254218240.htm"
                           title="深度解析与实践:外观模式" target="_blank">深度解析与实践:外观模式</a>
                        <span class="text-muted">代码世界的浪客</span>
<a class="tag" taget="_blank" href="/search/java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E6%B7%B1%E5%BA%A6%E8%AF%A6%E8%A7%A3/1.htm">java设计模式深度详解</a><a class="tag" taget="_blank" href="/search/%E5%A4%96%E8%A7%82%E6%A8%A1%E5%BC%8F/1.htm">外观模式</a>
                        <div>1.什么是外观模式1.1外观模式的定义外观模式(FacadePattern)是一种结构性设计模式,它为复杂的子系统提供一个更简单、更易用的接口。通过这种方式,外部客户端无需直接与复杂的子系统交互,而是通过一个统一的外观类来访问子系统的功能。外观模式主要用于简化客户程序与复杂系统之间的接口。1.2为什么需要外观模式当程序需要处理多个子系统的复杂交互时,直接操作这些子系统可能会给客户端带来很大的负担。</div>
                    </li>
                    <li><a href="/article/1896419192412893184.htm"
                           title="记录C++学习 8 构造函数、析构函数、继承" target="_blank">记录C++学习 8 构造函数、析构函数、继承</a>
                        <span class="text-muted">MYX_309</span>
<a class="tag" taget="_blank" href="/search/%E8%B7%9F%E7%9D%80Cherno%E5%AD%A6C%2B%2B/1.htm">跟着Cherno学C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>构造函数它的作用是初始化该类,当创建了一个新对象实例时,构造函数确保你初始化了所有内存,做了所有你需要做的设置引出#includeclassEntity{public:floatX,Y;voidPrint(){std::coutclassEntity{public:floatX,Y;voidPrint(){std::coutclassEntity{public:floatX,Y;Entity(){</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>