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/1835513567663714304.htm"
                           title="想家" target="_blank">想家</a>
                        <span class="text-muted">爆米花机</span>

                        <div>也许不同于大家对家乡的思念,我对家乡甚至是疯狂的不舍。还未踏出车站就感觉到幸福,我享受这里的夕阳、这里的浓烈柴火味、这里每一口家常菜。我是宅女,我贪恋家的安逸。刚刚踏出大学校门,初出茅庐,无法适应每年只能国庆和春节回家。我焦虑、失眠、无端发脾气,是无法适应工作的节奏,是无法接受我将一步步离开家乡的事实。我不想承认自己胸无大志,选择再次踏上征程。图片发自App</div>
                    </li>
                    <li><a href="/article/1835511912192897024.htm"
                           title="微服务下功能权限与数据权限的设计与实现" target="_blank">微服务下功能权限与数据权限的设计与实现</a>
                        <span class="text-muted">nbsaas-boot</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>在微服务架构下,系统的功能权限和数据权限控制显得尤为重要。随着系统规模的扩大和微服务数量的增加,如何保证不同用户和服务之间的访问权限准确、细粒度地控制,成为设计安全策略的关键。本文将讨论如何在微服务体系中设计和实现功能权限与数据权限控制。1.功能权限与数据权限的定义功能权限:指用户或系统角色对特定功能的访问权限。通常是某个用户角色能否执行某个操作,比如查看订单、创建订单、修改用户资料等。数据权限:</div>
                    </li>
                    <li><a href="/article/1835511542284644352.htm"
                           title="学点心理知识,呵护孩子健康" target="_blank">学点心理知识,呵护孩子健康</a>
                        <span class="text-muted">静候花开_7090</span>

                        <div>昨天听了华中师范大学教育管理学系副教授张玲老师的《哪里才是学生心理健康的最后庇护所,超越教育与技术的思考》的讲座。今天又重新学习了一遍,收获匪浅。张玲博士也注意到了当今社会上的孩子由于心理问题导致的自残、自杀及伤害他人等恶性事件。她向我们普及了一个重要的命题,她说心理健康的一些基本命题,我们与我们通常的一些教育命题是不同的,她还举了几个例子,让我们明白我们原来以为的健康并非心理学上的健康。比如如果</div>
                    </li>
                    <li><a href="/article/1835511030260789248.htm"
                           title="c++ 的iostream 和 c++的stdio的区别和联系" target="_blank">c++ 的iostream 和 c++的stdio的区别和联系</a>
                        <span class="text-muted">黄卷青灯77</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/iostream/1.htm">iostream</a><a class="tag" taget="_blank" href="/search/stdio/1.htm">stdio</a>
                        <div>在C++中,iostream和C语言的stdio.h都是用于处理输入输出的库,但它们在设计、用法和功能上有许多不同。以下是两者的区别和联系:区别1.编程风格iostream(C++风格):C++标准库中的输入输出流类库,支持面向对象的输入输出操作。典型用法是cin(输入)和cout(输出),使用>操作符来处理数据。更加类型安全,支持用户自定义类型的输入输出。#includeintmain(){in</div>
                    </li>
                    <li><a href="/article/1835509390879322112.htm"
                           title="扫地机类清洁产品之直流无刷电机控制" target="_blank">扫地机类清洁产品之直流无刷电机控制</a>
                        <span class="text-muted">悟空胆好小</span>
<a class="tag" taget="_blank" href="/search/%E6%B8%85%E6%B4%81%E6%9C%8D%E5%8A%A1%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">清洁服务机器人</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>扫地机类清洁产品之直流无刷电机控制1.1前言扫地机产品有很多的电机控制,滚刷电机1个,边刷电机1-2个,清水泵电机,风机一个,部分中高端产品支持抹布功能,也就是存在抹布盘电机,还有追觅科沃斯石头等边刷抬升电机,滚刷抬升电机等的,这些电机有直流有刷电机,直接无刷电机,步进电机,电磁阀,挪动泵等不同类型。电机的原理,驱动控制方式也不行。接下来一段时间的几个文章会作个专题分析分享。直流有刷电机会自动持续</div>
                    </li>
                    <li><a href="/article/1835509391361667072.htm"
                           title="Linux下QT开发的动态库界面弹出操作(SDL2)" target="_blank">Linux下QT开发的动态库界面弹出操作(SDL2)</a>
                        <span class="text-muted">13jjyao</span>
<a class="tag" taget="_blank" href="/search/QT%E7%B1%BB/1.htm">QT类</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</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/sdl2/1.htm">sdl2</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口</div>
                    </li>
                    <li><a href="/article/1835508376604340224.htm"
                           title="2021-08-26" target="_blank">2021-08-26</a>
                        <span class="text-muted">影幽</span>

                        <div>在生活中,女人与男人的感悟往往有所不同。人生最大的舞台就是生活,大幕随时都可能拉开,关键是你愿不愿意表演都无法躲避。在生活中,遇事不要急躁,不要急于下结论,尤其生气时不要做决断,要学会换位思考,大事化小小事化了,把复杂的事情尽量简单处理,千万不要把简单的事情复杂化。永远不要扭曲,别人善意,无药可救。昨天是张过期的支票,明天是张信用卡,只有今天才是现金,要善加利用!执着的攀登者不必去与别人比较自己的</div>
                    </li>
                    <li><a href="/article/1835502705553010688.htm"
                           title="LLM 词汇表" target="_blank">LLM 词汇表</a>
                        <span class="text-muted">落难Coder</span>
<a class="tag" taget="_blank" href="/search/LLMs/1.htm">LLMs</a><a class="tag" taget="_blank" href="/search/NLP/1.htm">NLP</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大语言模型</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/llama/1.htm">llama</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>Contextwindow“上下文窗口”是指语言模型在生成新文本时能够回溯和参考的文本量。这不同于语言模型训练时所使用的大量数据集,而是代表了模型的“工作记忆”。较大的上下文窗口可以让模型理解和响应更复杂和更长的提示,而较小的上下文窗口可能会限制模型处理较长提示或在长时间对话中保持连贯性的能力。Fine-tuning微调是使用额外的数据进一步训练预训练语言模型的过程。这使得模型开始表示和模仿微调数</div>
                    </li>
                    <li><a href="/article/1835502578050363392.htm"
                           title="PHP环境搭建详细教程" target="_blank">PHP环境搭建详细教程</a>
                        <span class="text-muted">好看资源平台</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这</div>
                    </li>
                    <li><a href="/article/1835501821569888256.htm"
                           title="关于提高复杂业务逻辑代码可读性的思考" target="_blank">关于提高复杂业务逻辑代码可读性的思考</a>
                        <span class="text-muted">编程经验分享</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C/1.htm">开发经验</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录前言需求场景常规写法拆分方法领域对象总结前言实际工作中大部分时间都是在写业务逻辑,一般都是三层架构,表示层(Controller)接收客户端请求,并对入参做检验,业务逻辑层(Service)负责处理业务逻辑,一般开发都是在这一层中写具体的业务逻辑。数据访问层(Dao)是直接和数据库交互的,用于查数据给业务逻辑层,或者是将业务逻辑层处理后的数据写入数据库。简单的增删改查接口不用多说,基本上写好一</div>
                    </li>
                    <li><a href="/article/1835501771485704192.htm"
                           title="山东大学小树林支教调研团青青仓木队——翟晓楠" target="_blank">山东大学小树林支教调研团青青仓木队——翟晓楠</a>
                        <span class="text-muted">山东大学青青仓木队</span>

                        <div>过了半年,又一次启程,又一次回到支教的初心之地。比起上一次的试探与不安,我更多了一丝稳重与熟练。心境、处境也都随着半个学期的过去而变得不同,半个学期中,身体上的,心理上的,太多的逆境让我变得步履维艰,曲曲折折,弯弯绕绕,我仿佛打不起精神,没有胃口,没有动力。感觉走的不顺畅的时候,支教这个旅程,给了我力量。自告奋勇承担起队长这一职务的我,从组织时的复杂和困难的经历,协调各种问题,从无到有,和校长和队</div>
                    </li>
                    <li><a href="/article/1835499615491813376.htm"
                           title="四章-32-点要素的聚合" target="_blank">四章-32-点要素的聚合</a>
                        <span class="text-muted">彩云飘过</span>

                        <div>本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers5.3.xapi。源码见1032.html,对应的官网示例https://openlayers.org/en/latest/examples/cluster.htmlhttps://openlayers.org/en/latest/examples/earthquake-clusters.</div>
                    </li>
                    <li><a href="/article/1835497792265613312.htm"
                           title="【加密社】Solidity 中的事件机制及其应用" target="_blank">【加密社】Solidity 中的事件机制及其应用</a>
                        <span class="text-muted">加密社</span>
<a class="tag" taget="_blank" href="/search/%E9%97%B2%E4%BE%83/1.htm">闲侃</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/1.htm">智能合约</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a>
                        <div>加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件存储的地方当我们在Solidity合约中使用emit关键字触发事件时,该事件会被记录在区块链的交易收据中。具体而言,事件</div>
                    </li>
                    <li><a href="/article/1835497664381284352.htm"
                           title="探索OpenAI和LangChain的适配器集成:轻松切换模型提供商" target="_blank">探索OpenAI和LangChain的适配器集成:轻松切换模型提供商</a>
                        <span class="text-muted">nseejrukjhad</span>
<a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>#探索OpenAI和LangChain的适配器集成:轻松切换模型提供商##引言在人工智能和自然语言处理的世界中,OpenAI的模型提供了强大的能力。然而,随着技术的发展,许多人开始探索其他模型以满足特定需求。LangChain作为一个强大的工具,集成了多种模型提供商,通过提供适配器,简化了不同模型之间的转换。本篇文章将介绍如何使用LangChain的适配器与OpenAI集成,以便轻松切换模型提供商</div>
                    </li>
                    <li><a href="/article/1835497537369370624.htm"
                           title="利用Requests Toolkit轻松完成HTTP请求" target="_blank">利用Requests Toolkit轻松完成HTTP请求</a>
                        <span class="text-muted">nseejrukjhad</span>
<a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>RequestsToolkit的力量:轻松构建HTTP请求Agent在现代软件开发中,API请求是与外部服务交互的核心。RequestsToolkit提供了一种便捷的方式,帮助开发者构建自动化的HTTP请求Agent。本文旨在详细介绍RequestsToolkit的设置、使用和潜在挑战。引言RequestsToolkit是一个强大的工具包,可用于构建执行HTTP请求的智能代理。这对于想要自动化与外</div>
                    </li>
                    <li><a href="/article/1835495170972413952.htm"
                           title="git - Webhook让部署自动化" target="_blank">git - Webhook让部署自动化</a>
                        <span class="text-muted">大猪大猪</span>

                        <div>我们现在有一个需求,将项目打包上传到gitlab或者github后,程序能自动部署,不用手动地去服务器中进行项目更新并运行,如何做到?这里我们可以使用gitlab与github的挂钩,挂钩的原理就是,每当我们有请求到gitlab与github服务器时,这时他俩会根据我们配置的挂钩地扯进行访问,webhook挂钩程序会一直监听着某个端口请求,一但收到他们发过来的请求,这时就知道用户有请求提交了,这时</div>
                    </li>
                    <li><a href="/article/1835494030801203200.htm"
                           title="人生的每一步路都算数" target="_blank">人生的每一步路都算数</a>
                        <span class="text-muted">sheli</span>

                        <div>如果你想打工,一直靠打工赚钱,那你就会不断的希望自己变得更专业,不断的希望能够获得更好的工作机会,升职加薪。如果你的目标志不在此,而是拥有自己的企业,那你的选择就会出现差别。在认真打工的人眼里,会“不务正业”,会总是选择不同岗位,甚至放弃高薪机会。但是这背后都是有更加长远的规划。成功富人所必需的管理技能包括:1.对现金流的管理。2.对系统的管理。3.对人员的管理。所以,在没有获得这些能力之前,只要</div>
                    </li>
                    <li><a href="/article/1835493651992637440.htm"
                           title="大伟说成语之唉声叹气" target="_blank">大伟说成语之唉声叹气</a>
                        <span class="text-muted">求索大伟</span>

                        <div>*大伟说成语*【唉声叹气】叹气:因心里不痛快或不如意而吐出长气,发出声音。因为痛苦、憋闷或感伤而发出叹息的声音。【大伟说】情绪外露,非人类所特有,动物亦有情绪,悲哀和欢乐所表示的情绪亦是不一样的,会嗷嗷大叫也会低吟痛哭。不同的是,人类的情绪更复杂,更多样,更丰富。唉声叹气,可以说是最基础的情绪,因为无奈而举足无措,不知该如何如何化解,只有独自一人慢慢承受,长吁短叹不知如何是好,其实是无能无力的表现</div>
                    </li>
                    <li><a href="/article/1835493269233037312.htm"
                           title="走向以教育叙事为载体的教育叙事研究" target="_blank">走向以教育叙事为载体的教育叙事研究</a>
                        <span class="text-muted">666小飞鱼</span>

                        <div>今天我读了吴松超老师的《给教师的68条建写作建议》中的第23条《如何通过教育叙事走向研究》,吴老师在文中与我们分享了一个德育案例,这是一个反面的案例,意在告知我们在处理问题时,不能就考虑的点太窄,思考要全面。走向教育叙事研究,教师要有敏锐的“感知力”,这个感知力来自于背后专业知识的支撑,思维能力以及广阔的视野和见识等。所以对于同一件事处理方法不同,这个就是教师背后“敏锐力”的不同造成的,也就是说是</div>
                    </li>
                    <li><a href="/article/1835493266645151744.htm"
                           title="2023-10-22" target="_blank">2023-10-22</a>
                        <span class="text-muted">奥雷里亚诺第n</span>

                        <div>昨天在B站看到关于猫喜欢挠人的视频,视频教导说猫挠人的话就抓住它的后脖颈然后用手打打挠人的那个爪子。视频本身没什么,但评论区却炸开了锅(真是符合挑食者厌食心理)。令我印象最深刻的一个甚至上升到了关于我是谁这种终极问题。它说,猫就是畜生,它挠人就打它别惯着它,反正我六道轮回成了人就应该保持人的高贵,谁都别想来打破。我顿时汗颜,但看到下面全是类似的言论只不过后面的理由各有不同,本来想骂人的心都凉了一半</div>
                    </li>
                    <li><a href="/article/1835493008716427264.htm"
                           title="没有邀请码怎么注册买手妈妈?" target="_blank">没有邀请码怎么注册买手妈妈?</a>
                        <span class="text-muted">氧惠评测</span>

                        <div>买手妈妈怎么注册小编为大家带来买手妈妈没有邀请码怎么注册。打开买手妈妈APP,点击“马上注册”,输入邀请信息“邀请码”点击下一步,没有邀请码是登录不上的,所以这个必须要填写,那我们没有怎么办?填写成功就可以登录下一步。这里面有手机登录和淘宝登录,手机登录以后也需要用淘宝授权的,所以基本上都是淘宝登录。购物、看电影、点外卖、用氧惠APP!更优惠!氧惠(全网优惠上氧惠)——是与以往完全不同的抖客+淘客</div>
                    </li>
                    <li><a href="/article/1835491354004779008.htm"
                           title="【华为OD技术面试真题 - 技术面】-测试八股文真题题库(1)" target="_blank">【华为OD技术面试真题 - 技术面】-测试八股文真题题库(1)</a>
                        <span class="text-muted">算法大师</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.黑盒测试和白盒测试的区别2.假设我们公司现在开发一个类似于微信的软件1.0版本,现在要你测试这个功能:打开聊天窗口,输入文本,限制字数在200字以内。问你怎么提取测试点。功能测试性能测试安全性测试可用性测试跨平台兼容性测试网络环境测试3.接口测试的工具你了解哪些</div>
                    </li>
                    <li><a href="/article/1835491101276991488.htm"
                           title="数据仓库——维度表一致性" target="_blank">数据仓库——维度表一致性</a>
                        <span class="text-muted">墨染丶eye</span>
<a class="tag" taget="_blank" href="/search/%E8%83%8C%E8%AF%B5/1.htm">背诵</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a>
                        <div>数据仓库基础笔记思维导图已经整理完毕,完整连接为:数据仓库基础知识笔记思维导图维度一致性问题从逻辑层面来看,当一系列星型模型共享一组公共维度时,所涉及的维度称为一致性维度。当维度表存在不一致时,短期的成功难以弥补长期的错误。维度时确保不同过程中信息集成起来实现横向钻取货活动的关键。造成横向钻取失败的原因维度结构的差别,因为维度的差别,分析工作涉及的领域从简单到复杂,但是都是通过复杂的报表来弥补设计</div>
                    </li>
                    <li><a href="/article/1835490712716668928.htm"
                           title="第六集如何安装CentOS7.0,3分钟学会centos7安装教程" target="_blank">第六集如何安装CentOS7.0,3分钟学会centos7安装教程</a>
                        <span class="text-muted">date分享</span>

                        <div>从光盘引导系统按回车键继续进入引导程序安装界面,选择语言这里选择简体中文版点击继续选择桌面安装下面给系统分区选择磁盘,点击完成选择基本分区,点击加号swap分区,大小填内存的两倍在选择根分区,使用所有可用的磁盘空间选择文件系统ext4点击完成,点击开始安装设置root密码,点击完成设置普通用户和密码,点击完成整个过程持续八分钟左右根据个人配置不同,时间长短不同好,现在点击重启系统进入重启状态点击本</div>
                    </li>
                    <li><a href="/article/1835490092068728832.htm"
                           title="Redis系列:Geo 类型赋能亿级地图位置计算" target="_blank">Redis系列:Geo 类型赋能亿级地图位置计算</a>
                        <span class="text-muted">Ly768768</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>1前言我们在篇深刻理解高性能Redis的本质的时候就介绍过Redis的几种基本数据结构,它是基于不同业务场景而设计的:动态字符串(REDIS_STRING):整数(REDIS_ENCODING_INT)、字符串(REDIS_ENCODING_RAW)双端列表(REDIS_ENCODING_LINKEDLIST)压缩列表(REDIS_ENCODING_ZIPLIST)跳跃表(REDIS_ENCODI</div>
                    </li>
                    <li><a href="/article/1835489311177404416.htm"
                           title="主题升华随机抽总结" target="_blank">主题升华随机抽总结</a>
                        <span class="text-muted">木棉咕噜</span>

                        <div>昨天晚上在火山灿教练那里抽了主题升华最后一关。一共抽了两个故事,现总结如下。第一个故事是《并不是你想象的那样》。主题一:有时候,面对别人一些貌似不合常情的行为,不要轻易的指责他,也许背后有我们所不知道的原因。在这一个主题里面,刚开始的时候,我没有加上貌似二字。所以就没有改动之后这么精准。主题二:有时候我们对他人善意的行为,可能会给我们带来一些意外的回报。主题三:面对同样一件事,因为不同的人看待问题</div>
                    </li>
                    <li><a href="/article/1835489207716507648.htm"
                           title="基于CODESYS的多轴运动控制程序框架:逻辑与运动控制分离,快速开发灵活操作" target="_blank">基于CODESYS的多轴运动控制程序框架:逻辑与运动控制分离,快速开发灵活操作</a>
                        <span class="text-muted">GPJnCrbBdl</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>基于codesys开发的多轴运动控制程序框架,将逻辑与运动控制分离,将单轴控制封装成功能块,对该功能块的操作包含了所有的单轴控制(归零、点动、相对定位、绝对定位、设置当前位置、伺服模式切换等等)。程序框架由主程序按照状态调用分归零模式、手动模式、自动模式、故障模式,程序状态的跳转都已完成,只需要根据不同的工艺要求完成所需的动作即可。变量的声明、地址的规划都严格按照C++的标准定义,能帮助开发者快速</div>
                    </li>
                    <li><a href="/article/1835488424933552128.htm"
                           title="直返APP是什么?直返APP是干嘛的" target="_blank">直返APP是什么?直返APP是干嘛的</a>
                        <span class="text-muted">氧惠帮朋友一起省</span>

                        <div>直返是一种电商购物模式,其核心特点是用户购买商品后可以获得直接返利。具体来说,用户在直返电商平台购买商品时,不仅可以获得商品本身的优惠,还可以获得一定的现金返利或者积分奖励。返利的金额可以提现到用户的账户余额,或者用于下次购物时抵扣。氧惠APP(带货领导者)——是与以往完全不同的抖客+淘客app!2023全新模式,我的直推也会放到你下面。主打:带货高补贴,深受各位带货团队长喜爱(每天出单带货几十万</div>
                    </li>
                    <li><a href="/article/1835486647840501760.htm"
                           title="直返的东西正品吗?直返APP安全吗?直返是正规平台吗?" target="_blank">直返的东西正品吗?直返APP安全吗?直返是正规平台吗?</a>
                        <span class="text-muted">氧惠购物达人</span>

                        <div>亲们,你们是不是经常在直返APP上买东西呀?但是,你们有没有想过,里面的东西到底是不是正品呢?这个APP安全吗?它是不是一个正规的平台呀?别着急,今天我就来给大家揭秘一下!氧惠APP(带货领导者)——是与以往完全不同的抖客+淘客app!2023全新模式,我的直推也会放到你下面。主打:带货高补贴,深受各位带货团队长喜爱(每天出单带货几十万单)。注册即可享受高补贴+0撸+捡漏等带货新体验。送万元推广大</div>
                    </li>
                    <li><a href="/article/1835484420023349248.htm"
                           title="18、架构-可观测性之聚合度量" target="_blank">18、架构-可观测性之聚合度量</a>
                        <span class="text-muted">大树~~</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>聚合度量聚合度量是指对系统运行时产生的各种指标数据进行收集、聚合和分析,以了解系统的健康状况和性能表现。聚合度量是可观测性的关键组成部分,通过对度量数据的分析,可以及时发现系统中的异常和瓶颈。以下是对聚合度量各个方面的详细解析,并结合具体的数据案例和技术支撑。指标收集收集系统运行时产生的各种指标数据是聚合度量的基础。常见的指标包括CPU使用率、内存使用率、请求处理时间、请求数、错误率等。以下是指标</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>