前言  

  相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票。投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了,不能重复投票。这时候,我们可能会想,能不能突破ip地址的限制进行刷票呢?有了这样的想法,那就去做吧,下面我将介绍我这个简单的刷票系统,仅供有需求的园友们参考。

1.系统设计

  系统主要实现的是突破IP限制进行刷票,其中,由IP采集模块负责从互联网上爬取代理IP,放入阻塞队列,该任务会定期执行。之后由投票模块从阻塞队列中获取IP,并进行设置,然后进行投票。系统流程图如下:

  

  

2.系统技术

  系统使用HttpClient + JSoup + 多线程来完成刷票,HttpClient用于进行投票,JSoup用于解析页面,多线程技术用于分离任务,使得分工更加明确。使用到了生产者消费者模式,该模式直接使用BlockingQueue来实现。

3、系统介绍

  系统主要分为三个模块:

    ①.IP采集模块

    ②.投票模块

    ③.IP信息模块

  其中,IP采集模块主要是从互联网爬取IP代理信息,并将该信息放入阻塞队列,这样就可以伪造IP,进行多次投票。

  其中,投票模块从IP采集模块放入阻塞队列取出IP信息,并设置代理,找到投票入口地址,然后进行投票操作。

  其中,IP信息模块主要是对爬取的IP信息进行了封装,方便其他模块进行操作。

  3.1.IP采集模块

    IP采集模块流程图如下

    

    几点说明:

      1.系统使用的代理IP站点URL为http://www.kuaidaili.com/,www.xicidaili.com。

      2.提取IP信息为提取单条IP信息,并判断历史IP表是否已经存在,若存在,表示之前已经加入过此IP信息,则直接丢弃,反之,则加入队列并加入历史IP表。

      3.此任务会定期开启,如一个小时爬取一次代理IP。

  3.2.投票模块

    投票模块流程图如下

      

    几点说明:

      1.投票网站http://www.hnxdf.com/vote/,我们选取的第一位进行投票,分析出投票的入口为http://www.hnxdf.com/vote/iRadio_vote.asp?VoTeid=215。

      2.根据IP采集模块放入队列的IP信息进行设置,然后进行投票。

  3.3.IP信息模块

    此模块主要对从网站爬取的IP信息进行了封装,方便其他模块进行操作。

4、系统代码框架

  系统的整个代码框架如下

  

  其中,bean包的IpInfo封装了爬取的IP信息。

  其中,entrance包的Vote为系统的入口。

  其中,thread包的IPCollectTask为爬取代理IP任务,VoteThread为进行投票线程。

5.系统代码

  1.IpInfo.java

  1. package com.hust.grid.leesf.bean;
  2.  
  3. public class IpInfo {
  4. public IpInfo(String ipAddress, int port, String location,
  5. String anonymousType, String type, String confirmTime) {
  6. this(ipAddress, port, location, anonymousType, type, confirmTime, null,
  7. null);
  8. }
  9.  
  10. public IpInfo(String ipAddress, int port, String location,
  11. String anonymousType, String type, String confirmTime,
  12. String getPostSupport, String responseSpeed) {
  13. this.ipAddress = ipAddress;
  14. this.port = port;
  15. this.location = location;
  16. this.anonymousType = anonymousType;
  17. this.type = type;
  18. this.confirmTime = confirmTime;
  19. this.getPostSupport = getPostSupport;
  20. this.responseSpeed = responseSpeed;
  21. }
  22.  
  23. public String getIpAddress() {
  24. return ipAddress;
  25. }
  26.  
  27. public void setIpAddress(String ipAddress) {
  28. this.ipAddress = ipAddress;
  29. }
  30.  
  31. public int getPort() {
  32. return port;
  33. }
  34.  
  35. public void setPort(int port) {
  36. this.port = port;
  37. }
  38.  
  39. public String getLocation() {
  40. return location;
  41. }
  42.  
  43. public void setLocation(String location) {
  44. this.location = location;
  45. }
  46.  
  47. public String getAnonymousType() {
  48. return anonymousType;
  49. }
  50.  
  51. public void setAnonymousType(String anonymousType) {
  52. this.anonymousType = anonymousType;
  53. }
  54.  
  55. public String getType() {
  56. return type;
  57. }
  58.  
  59. public void setType(String type) {
  60. this.type = type;
  61. }
  62.  
  63. public String getConfirmTime() {
  64. return confirmTime;
  65. }
  66.  
  67. public void setConfirmTime(String confirmTime) {
  68. this.confirmTime = confirmTime;
  69. }
  70.  
  71. public String getGetPostSupport() {
  72. return getPostSupport;
  73. }
  74.  
  75. public void setGetPostSupport(String getPostSupport) {
  76. this.getPostSupport = getPostSupport;
  77. }
  78.  
  79. public String getResponseSpeed() {
  80. return responseSpeed;
  81. }
  82.  
  83. public void setResponseSpeed(String responseSpeed) {
  84. this.responseSpeed = responseSpeed;
  85. }
  86.  
  87. @Override
  88. public boolean equals(Object anthor) {
  89. if (this == anthor) {
  90. return true;
  91. }
  92. if (anthor == null || getClass() != anthor.getClass()) {
  93. return false;
  94. }
  95.  
  96. IpInfo ipInfo = (IpInfo) anthor;
  97. return (this.ipAddress.equals(ipInfo.ipAddress)
  98. && this.port == ipInfo.port
  99. && this.location.equals(ipInfo.location)
  100. && this.anonymousType.equals(ipInfo.anonymousType)
  101. && this.type.equals(ipInfo.type) && this.confirmTime
  102. .equals(ipInfo.confirmTime))
  103. && this.getPostSupport.equals(ipInfo.getPostSupport)
  104. && this.responseSpeed.equals(ipInfo.responseSpeed);
  105. }
  106.  
  107. @Override
  108. public int hashCode() {
  109. int hash = 5;
  110. hash = 89 * hash
  111. + (this.ipAddress != null ? this.ipAddress.hashCode() : 0);
  112. hash = 89 * hash + this.port;
  113. hash = 89 * hash
  114. + (this.location != null ? this.location.hashCode() : 0);
  115. hash = 89
  116. * hash
  117. + (this.anonymousType != null ? this.anonymousType.hashCode()
  118. : 0);
  119. hash = 89 * hash + (this.type != null ? this.type.hashCode() : 0);
  120. hash = 89 * hash
  121. + (this.confirmTime != null ? this.confirmTime.hashCode() : 0);
  122. hash = 89
  123. * hash
  124. + (this.getPostSupport != null ? this.getPostSupport.hashCode()
  125. : 0);
  126. hash = 89
  127. * hash
  128. + (this.responseSpeed != null ? this.responseSpeed.hashCode()
  129. : 0);
  130. return hash;
  131. }
  132.  
  133. @Override
  134. public String toString() {
  135. return "ipAddress = " + ipAddress + ", port = " + port + ", localtion = "
  136. + location + ", anonymousType = " + anonymousType + ", type = "
  137. + type + ", confirmTime = " + confirmTime + ", getPostSupport = "
  138. + getPostSupport + ", responseSpeed = " + responseSpeed;
  139. }
  140.  
  141. private String ipAddress;
  142. private int port;
  143. private String location;
  144. private String anonymousType;
  145. private String type;
  146. private String confirmTime;
  147. private String getPostSupport;
  148. private String responseSpeed;
  149. }

  2.Vote.java

  1. package com.hust.grid.leesf.entrance;
  2.  
  3. import java.util.Timer;
  4. import java.util.concurrent.BlockingQueue;
  5. import java.util.concurrent.LinkedBlockingQueue;
  6.  
  7. import com.hust.grid.leesf.bean.IpInfo;
  8. import com.hust.grid.leesf.thread.IPCollectTask;
  9. import com.hust.grid.leesf.thread.VoteThread;
  10.  
  11. public class Vote {
  12. private BlockingQueue<IpInfo> ipInfoQueue;
  13. private IPCollectTask ipCollectTask;
  14. private VoteThread voteThread;
  15.  
  16. public Vote() {
  17. ipInfoQueue = new LinkedBlockingQueue<IpInfo>();
  18. ipCollectTask = new IPCollectTask(ipInfoQueue);
  19. voteThread = new VoteThread(ipInfoQueue);
  20. }
  21.  
  22. public void vote() {
  23. Timer timer = new Timer();
  24. long delay = 0;
  25. long period = 1000 * 60 * 60;
  26. // 每一个小时采集一次ip
  27. timer.scheduleAtFixedRate(ipCollectTask, delay, period);
  28.  
  29. // 开启投票任务
  30. voteThread.start();
  31. }
  32.  
  33. public static void main(String[] args) {
  34. Vote vote = new Vote();
  35. vote.vote();
  36. }
  37. }

  3.IPCollectTask.java

  1. package com.hust.grid.leesf.thread;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.TimerTask;
  7. import java.util.concurrent.BlockingQueue;
  8. import java.util.concurrent.LinkedBlockingQueue;
  9.  
  10. import org.jsoup.Jsoup;
  11. import org.jsoup.nodes.Document;
  12. import org.jsoup.nodes.Element;
  13. import org.jsoup.select.Elements;
  14.  
  15. import com.hust.grid.leesf.bean.IpInfo;
  16.  
  17. public class IPCollectTask extends TimerTask {
  18. private BlockingQueue<IpInfo> ipInfoQueue; // 连接生产者与消费者的阻塞队列
  19. private List<IpInfo> historyIpLists; // 记录已经获取的ip信息
  20.  
  21. public IPCollectTask(BlockingQueue<IpInfo> ipInfoQueue) {
  22. this.ipInfoQueue = ipInfoQueue;
  23. this.historyIpLists = new ArrayList<IpInfo>();
  24. }
  25.  
  26. /**
  27. * 获取www.xicidaili.com的ip地址信息
  28. */
  29. public void getXiCiDaiLiIpLists() {
  30. String url = "http://www.xicidaili.com/";
  31. String host = "www.xicidaili.com";
  32. Document doc = getDocumentByUrl(url, host);
  33. // 解析页面的ip信息
  34. parseXiCiDaiLiIpLists(doc);
  35. }
  36.  
  37. /**
  38. * 解析页面的ip信息
  39. *
  40. * @param doc
  41. */
  42. public void parseXiCiDaiLiIpLists(Document doc) {
  43. Elements eleLists = doc.getElementsByTag("tbody");
  44. Element tbody = eleLists.get(0); // 获取tbody
  45. Elements trLists = tbody.children();
  46. Element ele = null;
  47. for (int i = 0; i < trLists.size(); i++) {
  48. if ((i % 22 == 0) || (i % 22 == 1)) { // 去掉不符合条件的项
  49. continue;
  50. }
  51. ele = trLists.get(i);
  52. Elements childrenList = ele.children();
  53. String ipAddress = childrenList.get(1).text();
  54. int port = Integer.parseInt(childrenList.get(2).text());
  55. String location = childrenList.get(3).text();
  56. String anonymousType = childrenList.get(4).text();
  57. String type = childrenList.get(5).text();
  58. String confirmTime = childrenList.get(6).text();
  59.  
  60. IpInfo ipInfo = new IpInfo(ipAddress, port, location,
  61. anonymousType, type, confirmTime);
  62. putIpInfo(ipInfo);
  63.  
  64. }
  65. }
  66.  
  67. /**
  68. * 将ip信息放入队列和历史记录中
  69. *
  70. * @param ipInfo
  71. */
  72. private void putIpInfo(IpInfo ipInfo) {
  73. if (!historyIpLists.contains(ipInfo)) { // 若历史记录中不包含ip信息,则加入队列中
  74. // 加入到阻塞队列中,用作生产者
  75. try {
  76. ipInfoQueue.put(ipInfo);
  77. } catch (InterruptedException e) {
  78. // TODO Auto-generated catch block
  79. e.printStackTrace();
  80. }
  81. // 加入历史记录中
  82. historyIpLists.add(ipInfo);
  83. }
  84. }
  85.  
  86. /**
  87. * 根据网页Document解析出ip地址信息
  88. *
  89. * @param doc
  90. */
  91. private void parseKuaiDaiLiIpLists(Document doc) {
  92. Elements eleLists = doc.getElementsByTag("tbody");
  93. Element tbody = eleLists.get(0); // 获取tbody
  94. Elements trLists = tbody.children(); // 获取十条ip记录
  95. for (Element tr : trLists) { // 遍历tr
  96. Elements tdElements = tr.children(); // tr中的td包含了具体的信息
  97. String ipAddress = tdElements.get(0).text();
  98. int port = Integer.parseInt(tdElements.get(1).text());
  99. String anonymousType = tdElements.get(2).text();
  100. String type = tdElements.get(3).text();
  101. String getPostSupport = tdElements.get(4).text();
  102. String location = tdElements.get(5).text();
  103. String responseSpeed = tdElements.get(6).text();
  104. String confirmTime = tdElements.get(7).text();
  105.  
  106. IpInfo ipInfo = new IpInfo(ipAddress, port, location,
  107. anonymousType, type, confirmTime, getPostSupport,
  108. responseSpeed);
  109.  
  110. putIpInfo(ipInfo);
  111. }
  112. }
  113.  
  114. /**
  115. * 根据提供的url和host来获取页面信息
  116. *
  117. * @param url
  118. * @param host
  119. * @return
  120. */
  121. private Document getDocumentByUrl(String url, String host) {
  122. Document doc = null;
  123. try {
  124. doc = Jsoup
  125. .connect(url)
  126. .header("User-Agent",
  127. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0")
  128. .header("Host", host).timeout(5000).get();
  129. } catch (IOException e) {
  130. e.printStackTrace();
  131. }
  132.  
  133. return doc;
  134. }
  135.  
  136. /**
  137. * 获取http://www.kuaidaili.com/free/的ip
  138. */
  139. private void getKuaiDaiLiFreeIpLists() {
  140. // 第一次访问,需解析总共多少页
  141. String baseUrl = "http://www.kuaidaili.com/free/inha/";
  142. String host = "www.kuaidaili.com";
  143. Document doc = getDocumentByUrl(baseUrl, host);
  144. // 解析ip信息
  145. parseKuaiDaiLiIpLists(doc);
  146. Element listNav = doc.getElementById("listnav");
  147. // 获取listnav下的li列表
  148. Elements liLists = listNav.children().get(0).children();
  149. // 获取含有多少页的子元素
  150. Element pageNumberEle = liLists.get(liLists.size() - 2);
  151. // 解析有多少页
  152. int pageNumber = Integer.parseInt(pageNumberEle.text());
  153. // 拼接成其他页的访问地址
  154. for (int index = 1; index <= pageNumber; index++) {
  155. baseUrl = baseUrl + index;
  156. doc = getDocumentByUrl(baseUrl, host);
  157. parseKuaiDaiLiIpLists(doc);
  158. // 休眠一秒
  159. fallSleep(1);
  160. }
  161. }
  162.  
  163. /**
  164. * 获取www.kuaidaili.com/proxylist/的ip
  165. */
  166. private void getKuaiDaiLiIpLists() {
  167. int start = 1;
  168. String baseUrl = "http://www.kuaidaili.com/proxylist/";
  169. String host = "www.kuaidaili.com";
  170. while (start <= 10) { // 爬取10页
  171. String url = baseUrl + start + "/";
  172. Document doc = getDocumentByUrl(url, host);
  173. // 解析ip信息
  174. parseKuaiDaiLiIpLists(doc);
  175. start++;
  176. // 休眠一秒
  177. fallSleep(1);
  178. }
  179. }
  180.  
  181. /**
  182. * 进行休眠
  183. */
  184. private void fallSleep(long seconds) {
  185. try {
  186. Thread.sleep(seconds * 1000);
  187. } catch (InterruptedException e) {
  188. e.printStackTrace();
  189. }
  190. }
  191.  
  192. @Override
  193. public void run() {
  194. // getKuaiDaiLiFreeIpLists();
  195. System.out.println("IPCollect task is running");
  196. getKuaiDaiLiIpLists();
  197. getXiCiDaiLiIpLists();
  198. }
  199.  
  200. public BlockingQueue<IpInfo> getIpInfoQueue() {
  201. return ipInfoQueue;
  202. }
  203.  
  204. public static void main(String[] args) {
  205. BlockingQueue<IpInfo> queue = new LinkedBlockingQueue<IpInfo>();
  206. IPCollectTask task = new IPCollectTask(queue);
  207. Thread thread = new Thread(task);
  208. thread.start();
  209. try {
  210. Thread.sleep(30 * 1000);
  211. } catch (InterruptedException e) {
  212. // TODO Auto-generated catch block
  213. e.printStackTrace();
  214. }
  215. System.out.println("queue size is " + queue.size());
  216. try {
  217. while (!queue.isEmpty()) {
  218. System.out.println(queue.take());
  219. }
  220. } catch (InterruptedException e) {
  221. e.printStackTrace();
  222. }
  223.  
  224. System.out.println("historyList size is " + task.historyIpLists.size());
  225. }
  226. }

  4.VoteThread.java

  1. package com.hust.grid.leesf.thread;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.BlockingQueue;
  5.  
  6. import org.apache.http.HttpEntity;
  7. import org.apache.http.HttpHost;
  8. import org.apache.http.HttpResponse;
  9. import org.apache.http.client.ClientProtocolException;
  10. import org.apache.http.client.HttpClient;
  11. import org.apache.http.client.methods.HttpGet;
  12. import org.apache.http.conn.params.ConnRoutePNames;
  13. import org.apache.http.impl.client.DefaultHttpClient;
  14. import org.apache.http.params.HttpConnectionParams;
  15. import org.apache.http.params.HttpParams;
  16. import org.apache.http.util.EntityUtils;
  17.  
  18. import com.hust.grid.leesf.bean.IpInfo;
  19.  
  20. public class VoteThread extends Thread {
  21. private BlockingQueue<IpInfo> ipInfoQueue;
  22.  
  23. public VoteThread(BlockingQueue<IpInfo> ipInfoQueue) {
  24. this.ipInfoQueue = ipInfoQueue;
  25. }
  26.  
  27. @Override
  28. public void run() {
  29. HttpClient client = new DefaultHttpClient();
  30. HttpParams params = client.getParams();
  31. HttpConnectionParams.setConnectionTimeout(params, 10000);
  32. HttpConnectionParams.setSoTimeout(params, 15000);
  33. HttpResponse response = null;
  34. HttpGet get = null;
  35. HttpEntity entity = null;
  36. HttpHost proxy = null;
  37. while (true) {
  38. IpInfo ipInfo = null;
  39. try {
  40. ipInfo = ipInfoQueue.take();
  41. } catch (InterruptedException e1) {
  42. // TODO Auto-generated catch block
  43. e1.printStackTrace();
  44. }
  45. proxy = new HttpHost(ipInfo.getIpAddress(), ipInfo.getPort());
  46. client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
  47. proxy);
  48. get = new HttpGet(
  49. "http://www.hnxdf.com/vote/iRadio_vote.asp?VoTeid=215");
  50. get.addHeader("Host", "www.hnxdf.com");
  51. get.addHeader("User-Agent",
  52. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0");
  53. try {
  54. response = client.execute(get);
  55. entity = response.getEntity();
  56. byte[] bytes = EntityUtils.toByteArray(entity);
  57. // 对响应内容编码格式进行转化,统一成utf-8格式
  58. String temp = new String(bytes, "gbk");
  59. byte[] contentData = temp.getBytes("utf-8");
  60. System.out.println(new String(contentData));
  61. System.out.println("-----------------------------------");
  62. } catch (ClientProtocolException e) {
  63. e.printStackTrace();
  64. } catch (IOException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. }
  69. }

6.系统总结

  此系统很简单,想清楚思路之后很快就能够写出代码,系统运行时,由于代理IP站点提供的免费IP质量不是太高,有效的IP地址还是很少,所有效果不是特别理想,此系统功能也很简单,但是各位园友可以在此基础上去发挥自己的想象力,定制属于自己的投票系统。

结束语

  至此,整个系统分析就已经完成了,其中,图也画得不是太规范,还请各位园友海涵。也谢谢各位园友观看。

  ps:整个工程(包含必要的jar文件)已经上传到GitHub上,欢迎各位园友访问:https://github.com/leesf/TicketBrushSystem

http://www.cnblogs.com/leesf456/p/5170212.html

简单的刷票系统(突破IP限制进行投票) (转)的更多相关文章

  1. 【小型系统】简单的刷票系统(突破IP限制进行投票)

    一.前言 相信大家平时肯定会收到朋友发来的链接,打开一看,哦,需要投票.投完票后弹出一个页面(恭喜您,您已经投票成功),再次点击的时候发现,啊哈,您的IP(***.***.***.***)已经投过票了 ...

  2. 在投票系统方法的原则刷票(突破ip限制刷票PHP版)

    让我谈一点:事实上,没有一个突破ip限制,因为实际上,,这项限制server结束,client牛逼,不能突破..只要是能够始终重复刷票罢了 一个朋友突然来了个网站,让我帮她投票..我是一个更好的人说话 ...

  3. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

  4. 获取系统的IP

    如何获取Linux系统的ip.当时一直用这种方法获取IP的. ifconfig|grep 'Bcast'|awk -F ':' '{print $2}'|awk '{print $1}' 今天偶然发现 ...

  5. 伪造http的ip地址,突破ip限制的投票程序

    某WEB投票程序, 使用 ip 限制和cookie限制技术,来限制每个ip每天只能投一次票,使用的是php开发,获取访问者的 ip 使用了搜狐的接口: http://txt.go.sohu.com/i ...

  6. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  7. 《Linux内核分析》第三周 构建一个简单的Linux系统MenuOS

    [刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK THREE ...

  8. 第三节 构造一个简单的Linux系统MenuOS——20135203齐岳

    第三节 构造一个简单的Linux系统MenuOS By 20135203齐岳 Linux内核源代码 arch/ 支持不同cpu的源代码 Documentations/ 文档存储 init/ 内核启动相 ...

  9. 一个简单的CS系统打包过程图文版

    一个简单的CS系统打包过程图文版 1.     打包内容 1.1.  此次打包的要求和特点 主工程是一个CS系统: 此CS系统运行的先决条件是要有.Net Framework 3.5: 主工程安装完成 ...

随机推荐

  1. OpenVPN多处理之-netns容器与iptables CLUSTER

    假设还是沉湎于之前的战果以及强加的感叹,不要冥想,将其升华. 1.C还是脚本 以前,我用bash组织了复杂的iptables,ip rule等逻辑来配合OpenVPN,将其应用于差点儿全部能够想象得到 ...

  2. Linux下Qt4与qt5的程序使用输入法(ibus与fcitx)不冲突

    这篇文章引用了较多其他作者的内容,也忘记引用的出处了,只能感谢了.以下转入正题. 对于qt5.5,要下载libqt库源码自己编译,参考解决Qt5 Creator无法切换输入法(fcitx),Ubunt ...

  3. Java调用cmd命令 打开一个站点

    使用Java程序打开一个站点 近期做了个东西使用SWT技术在一个client程序 须要升级时在提示升级 点击窗口上的一个连接 打开下载网页 花费了我非常长时间 用到了把它记录下来  怕是忘记,须要时能 ...

  4. Maven-1:下载&安装

    (一)下载 下载网址:http://maven.apache.org/download.cgi 版本:3.0.5 (二)安装 1.解压至目录:F:\Kevin\software\apache-mave ...

  5. 与众不同 windows phone (29) - Communication(通信)之与 OData 服务通信

    原文:与众不同 windows phone (29) - Communication(通信)之与 OData 服务通信 [索引页][源码下载] 与众不同 windows phone (29) - Co ...

  6. 随想录(关于ucore)

    [ 声明:版权全部,欢迎转载.请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 之前用过一段时间skyeye,也对开发skyeye的陈渝有一些了解.近期在github上闲逛的 ...

  7. 字符串转换为整数”123“-&gt;123

    字符串转换为整数"123"->123 题目描写叙述: 输入一个由数字组成的字符串.把它转换成整数并输出. 比如:输入字符串"123".输出整数123. 给 ...

  8. 类型自动转换引起的误解——QString可以赋值数字1,也能直接与0比较,真是昏倒!

    看以下代码,能编译通过: void MainWindow::on_pushButton_clicked() { QString str = "test"; ) { QMessage ...

  9. [Cocos2d-x]博客推荐

    推荐一下大神们的博客: JackyStudio: http://blog.csdn.net/jackyvincefu/article/category/1591201/3 老G的小屋: http:// ...

  10. lucene4.4 索引的增删改查

    package com.lucene.test; import java.io.File; import java.io.FileReader; import java.io.IOException; ...