<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Chinese</title><link>https://yaoyl.cn/post/</link><description>Recent content in Posts on Chinese</description><generator>Hugo -- gohugo.io</generator><language>zh</language><copyright>Copyright © 2017–2025, Yunyao Long and the Hugo Authors; 粤ICP备-17050867-1号</copyright><lastBuildDate>Tue, 06 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://yaoyl.cn/post/index.xml" rel="self" type="application/rss+xml"/><item><title>使用Dify的Agent模块实现复杂能力</title><link>https://yaoyl.cn/post/llm/p7%E4%BD%BF%E7%94%A8dify%E7%9A%84agent%E6%A8%A1%E5%9D%97%E5%AE%9E%E7%8E%B0%E5%A4%8D%E6%9D%82%E8%83%BD%E5%8A%9B/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/llm/p7%E4%BD%BF%E7%94%A8dify%E7%9A%84agent%E6%A8%A1%E5%9D%97%E5%AE%9E%E7%8E%B0%E5%A4%8D%E6%9D%82%E8%83%BD%E5%8A%9B/</guid><description>
本文详细介绍如何使用Dify的官方agent组件构建一个plan-act模式的复杂Agent，该Agent能够规划并撰写多章节小说，包括背景设定、角色档案及章节概要规划</description></item><item><title>实现一个简单的Agent</title><link>https://yaoyl.cn/post/llm/p5%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84agent/</link><pubDate>Sun, 05 Oct 2025 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/llm/p5%E5%AE%9E%E7%8E%B0%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84agent/</guid><description>
本章节，我们将正式开始我们的Agent开发之旅。</description></item><item><title>Continue插件模式分析：Chat、Plan与Agent模式深度解析</title><link>https://yaoyl.cn/post/llm/p4continue%E6%8F%92%E4%BB%B6%E6%A8%A1%E5%BC%8F%E5%88%86%E6%9E%90chatplan%E4%B8%8Eagent%E6%A8%A1%E5%BC%8F%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/llm/p4continue%E6%8F%92%E4%BB%B6%E6%A8%A1%E5%BC%8F%E5%88%86%E6%9E%90chatplan%E4%B8%8Eagent%E6%A8%A1%E5%BC%8F%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90/</guid><description>
深入分析Continue插件的Chat、Plan与Agent模式，通过Wireshark抓包分析网络请求</description></item><item><title>在VSCode中使用Continue插件连接本地大模型</title><link>https://yaoyl.cn/post/llm/p3%E5%9C%A8vscode%E4%B8%AD%E4%BD%BF%E7%94%A8continue%E6%8F%92%E4%BB%B6%E8%BF%9E%E6%8E%A5%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B/</link><pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/llm/p3%E5%9C%A8vscode%E4%B8%AD%E4%BD%BF%E7%94%A8continue%E6%8F%92%E4%BB%B6%E8%BF%9E%E6%8E%A5%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B/</guid><description>
在VSCode中使用Continue插件连接本地Ollama大模型服务</description></item><item><title>M1芯片MacBook搭建本地大模型</title><link>https://yaoyl.cn/post/llm/p2%E8%BF%90%E8%A1%8C%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/llm/p2%E8%BF%90%E8%A1%8C%E6%9C%AC%E5%9C%B0%E5%A4%A7%E6%A8%A1%E5%9E%8B/</guid><description>
M1芯片MacBook，在Docker中使用Ollama运行本地大模型</description></item><item><title>M1芯片MacBook安装Docker</title><link>https://yaoyl.cn/post/llm/p1m1%E8%8A%AF%E7%89%87macbook%E5%AE%89%E8%A3%85docker/</link><pubDate>Thu, 11 Sep 2025 19:30:00 +0000</pubDate><guid>https://yaoyl.cn/post/llm/p1m1%E8%8A%AF%E7%89%87macbook%E5%AE%89%E8%A3%85docker/</guid><description>
个人服务器上，搭建基础的Docker服务</description></item><item><title>技术分享-前瞻</title><link>https://yaoyl.cn/post/2025/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB-%E5%89%8D%E7%9E%BB/</link><pubDate>Wed, 10 Sep 2025 19:30:00 +0000</pubDate><guid>https://yaoyl.cn/post/2025/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB-%E5%89%8D%E7%9E%BB/</guid><description>
技术积累的系列文章，写在最前面</description></item><item><title>【Java并发 03】常用API及底层实现——Thread.start</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E5%B9%B6%E5%8F%91/java%E5%B9%B6%E5%8F%91-03%E5%B8%B8%E7%94%A8api%E5%8F%8A%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0thread.start/</link><pubDate>Mon, 01 Feb 2021 02:30:29 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E5%B9%B6%E5%8F%91/java%E5%B9%B6%E5%8F%91-03%E5%B8%B8%E7%94%A8api%E5%8F%8A%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0thread.start/</guid><description>
从源码层面解读 Thread.start</description></item><item><title>【Java并发 02】Thread由浅入深</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E5%B9%B6%E5%8F%91/java%E5%B9%B6%E5%8F%91-02thread%E7%94%B1%E6%B5%85%E5%85%A5%E6%B7%B1/</link><pubDate>Sat, 30 Jan 2021 03:02:49 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E5%B9%B6%E5%8F%91/java%E5%B9%B6%E5%8F%91-02thread%E7%94%B1%E6%B5%85%E5%85%A5%E6%B7%B1/</guid><description>
OS和Java中的线程状态转换、通过jstack分析线程状态</description></item><item><title>【Java并发 01】Java线程并发初窥</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E5%B9%B6%E5%8F%91/java%E5%B9%B6%E5%8F%91-01java%E7%BA%BF%E7%A8%8B%E5%B9%B6%E5%8F%91%E5%88%9D%E7%AA%A5/</link><pubDate>Tue, 19 Jan 2021 03:27:12 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E5%B9%B6%E5%8F%91/java%E5%B9%B6%E5%8F%91-01java%E7%BA%BF%E7%A8%8B%E5%B9%B6%E5%8F%91%E5%88%9D%E7%AA%A5/</guid><description>
从api层面，初窥Java线程并发。</description></item><item><title>设计模式-观察者模式</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/</link><pubDate>Mon, 20 Jul 2020 10:02:28 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/</guid><description>
&lt;h1 id="设计模式-观察者模式">设计模式-观察者模式&lt;/h1>
&lt;h2 id="使用observer和observable组合实现观察者">使用Observer和Observable组合实现观察者&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">DataCenter&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">extends&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Observable&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">private&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;Initial DataCenter&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">change&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;DataCenter has changed&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">changeSomething&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">change&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">setChanged&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c1">// 需要首先改变自身的状态，才能提醒观察者自己的状态已经改变了&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">notifyObservers&lt;/span>&lt;span class="p">();&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c1">// 表明这是一个拉取的方式，让观察者自己从被观察者中获取数据&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">getData&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">setData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">data&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">DigitalDisplay&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">implements&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Observer&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">private&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">List&lt;/span>&lt;span class="o">&amp;lt;?&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">extends&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Observable&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">observables&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">DigitalDisplay&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">List&lt;/span>&lt;span class="o">&amp;lt;?&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">extends&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Observable&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">observables&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">observables&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">observables&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">for&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Observable&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">obs&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">observables&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">obs&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">addObserver&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">this&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nd">@Override&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">update&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Observable&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">o&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Object&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">arg&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">o&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">instanceof&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">DataCenter&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">DataCenter&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">dataCenter&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">DataCenter&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">o&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">37&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">display&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dataCenter&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">getData&lt;/span>&lt;span class="p">());&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">38&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">39&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">40&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">41&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">private&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">void&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">display&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">42&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">System&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">out&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">println&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Observed data: &amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">43&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">44&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="优点">优点&lt;/h3>
&lt;p>优点显而意见，现成的Observable类已经装箱了注册、注销、主动推送消息以及提示观察者获取消息等基础功能，让使用者能够迅速上手完成观察者模式。&lt;/p></description></item><item><title>UML类图绘制实例</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/uml%E7%B1%BB%E5%9B%BE%E7%BB%98%E5%88%B6%E5%AE%9E%E4%BE%8B/</link><pubDate>Sun, 19 Jul 2020 16:28:45 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/uml%E7%B1%BB%E5%9B%BE%E7%BB%98%E5%88%B6%E5%AE%9E%E4%BE%8B/</guid><description>
&lt;h1 id="uml类图绘制实例">UML类图绘制实例&lt;/h1>
&lt;p>下面将使用如属官的借阅管理系统做一个图书馆管理系统的UML类图。参考自*&lt;a href="https://www.uml-diagrams.org/library-domain-uml-class-diagram-example.html">Library Domain Model&lt;/a>*&lt;/p>
&lt;p>最终的绘制结果大致如下：&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="UML class diagram example of the Library Domain Model."
class="image_figure image_external image_processed"
width="822"
height="700"
src="https://yaoyl.cn/images/class-example-library-domain_2398916653974515336.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;h1 id="前期建模">前期建模&lt;/h1>
&lt;p>对于图书馆的借阅系统的建模，首先我们把所有需要定义的基础类定义出来。分别是Book(书籍)、Library(图书馆)、Patron(顾客)、Librarian(图书管理员)四个基础的对象。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="Library Domain Model-1"
class="image_figure image_external image_processed"
width="827"
height="217"
src="https://yaoyl.cn/images/97611489-36dc1c00-1a51-11eb-856c-cf2280df1f06_3742796301368316937.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>我们尝试将四个基础类进行关系连接，最后的到的关系图如下（注，就算没有图书，图书馆也不会消失，因此使用空心的关联关系：&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="Library Domain Model-2"
class="image_figure image_external image_processed"
width="1039"
height="306"
src="https://yaoyl.cn/images/97611044-a1408c80-1a50-11eb-8013-273235d04c70_13782265216704952398.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;h1 id="业务扩展">业务扩展&lt;/h1>
&lt;h2 id="增加用户账号管理">增加用户账号管理&lt;/h2>
&lt;p>由于客户借还书籍过程中，图书馆里系统的后台会希望能够查看该顾客的曾借用书籍，已借阅待还书籍，以及当前客户是否有权限进行新书的借阅。&lt;/p>
&lt;p>因此我们需要在图书馆管理系统中，引入**Account（账户系统）**作为代理，用于方便关联借阅的顾客和馆中的书籍。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="Library Domain Model-3"
class="image_figure image_external image_processed"
width="1053"
height="448"
src="https://yaoyl.cn/images/97615370-2ed2ab00-1a56-11eb-838e-df7262399d9e_9832865924313917040.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>该UML中，图书馆持有多个账号，这个不难理解；每个账号代理以前每一个借书者去依赖书，也不难理解；账号有指向Partron的关联关系我们也不难理解，毕竟账户作为代理方，肯定需要有被代理的人的信息；但是可能存在的困惑点在于Account和Patron之间的&lt;strong>聚合&lt;/strong>关系，这里我理解是因为在本项目设计中，账号被设计成了可以回收利用的号码，因此如果该账号闲置的时候，是可以不&lt;strong>关联&lt;/strong>任何用户的，直到账号被下一次利用重新分发给新人。&lt;/p>
&lt;h2 id="增加书籍借阅信息">增加书籍借阅信息&lt;/h2>
&lt;p>管理好了借书的人，我们的图书馆管理系统还需要增加书籍管理系统，用来标记每本书籍自身的状态，比如该书籍的条码、RFID中的信息、是否允许借出图书馆、图书的类别、图书的借出时间、图书的借阅周期（时长）、图书的应归还时期等等信息。这些都是图书馆自身作图书管理所需要信息而非书籍本身的信息。&lt;/p>
&lt;p>因此我们需要在原始图书的基础之上扩展一个图书馆的书目实体Book Item，里面除了书籍自身的信息之外，还包含了该书管理过程中的信息。&lt;/p>
&lt;p>更新之后的UML如下：&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="Library Domain Model-4"
class="image_figure image_external image_processed"
width="1026"
height="558"
src="https://yaoyl.cn/images/97619039-b3bfc380-1a5a-11eb-8346-d96986ebd9c6_5740602031243574121.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;h2 id="增加检索和管理功能">增加检索和管理功能&lt;/h2>
&lt;p>随着图书馆书籍越来越多，图书馆管理员需要对这些书籍进行分类有序放置、对特定的书目进行查找，顾客需要根据条件检索自己需要的书目。因此我们需要继续扩展我们的Book Item类，给其更多的信息便于分类：比如定义其书籍语言、书籍名称、总页数、书目类别等等信息。&lt;/p>
&lt;p>此外我们扩展了原始书籍的作者信息，虽然作者通常是在书籍分类时才会使用，但是其本身作为书籍的通识信息，因此在类设计时，将其关联Book而非Book Item。&lt;/p>
&lt;p>同时我们需要对图书馆内所有的图书都进行完整的归档管理，所以需要新增一个Catalog类来统一管理。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="Library Domain Model-5"
class="image_figure image_external image_processed"
width="1069"
height="668"
src="https://yaoyl.cn/images/97621925-8543e780-1a5e-11eb-868e-cf053d39d649_8578078723728345691.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>这里，因为我们现在已经完成了Book Item的属性扩展，同时建立了Catalog用于专门的图书管理机制，Catalog本身虽然不受是否有书的影响，但是图书馆的管理和检索的规则，是一定建立在我们的Catalog之上的，因此这里使用&lt;strong>组合&lt;/strong>关系。&lt;/p>
&lt;p>由于赋予了顾客检索的功能，也赋予了图书馆管理员检索和管理图书的功能。这里我们不难发现两种不同的角色都有一个重复的操作——查找search。同时因为这个Search其实仅仅只和图书馆的目录Catalog相关，无论谁来这个图书馆，他们其实只关心能不能找到自己需要的书，至于怎么从Catalog中找到这本书，以及Catalog是怎么维护所有数目的，对于查找的人来说其实并不需要关心。&lt;/p>
&lt;p>因此外部的调用方（比如Patron、Librarian）其实只需要调用这个系统提供的API（也即接口）即可，这个API是一个大家对齐过的统一的规范，比如search就是查找本座图书馆有没有某本书，manage就是管理这本书。外部只需要直到调用这个api可以达到这个目的，而至于怎么达到这个目的则由图书馆的Catalog自行决定和具体实现。&lt;/p></description></item><item><title>Spring的Bean管理</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/spring%E7%9A%84bean%E7%AE%A1%E7%90%86/</link><pubDate>Sat, 20 Jun 2020 15:45:49 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/spring%E7%9A%84bean%E7%AE%A1%E7%90%86/</guid><description>
&lt;h1 id="目录">目录&lt;/h1>
&lt;p>[toc]&lt;/p>
&lt;h1 id="spring的bean管理">Spring的Bean管理&lt;/h1>
&lt;blockquote>
&lt;p>本博客基于&lt;a href="https://github.com/LongyunYao/SpringSourceCodeTest">SpringSourceCodeTest&lt;/a>仓库中【SpringDemo1.0】tag进行的编写。&lt;/p>&lt;/blockquote>
&lt;p>基于配置文件进行bean管理的方案是Spring初期推行的方式，在历史比较悠久的Spring项目中比较常见。&lt;/p>
&lt;h2 id="基于扫描的方式装载bean">基于扫描的方式装载bean&lt;/h2>
&lt;p>一个比较典型的配置文件通常包含&lt;code>&amp;lt;context&amp;gt;&lt;/code>标签， &lt;code>&amp;lt;context&amp;gt;&lt;/code>用来表示该项目中哪些包中的bean需要被进行生命周期管理。&lt;/p>
&lt;p>默认情况下，使用&lt;code>&amp;lt;context&amp;gt;&lt;/code>后，Spring会默认扫描定义的带有如下注解的bean：&lt;/p>
&lt;ul>
&lt;li>@Component&lt;/li>
&lt;li>@Repository&lt;/li>
&lt;li>@Service&lt;/li>
&lt;li>@Controller&lt;/li>
&lt;li>@RestController&lt;/li>
&lt;li>@ControllerAdvice&lt;/li>
&lt;li>@Configuration&lt;/li>
&lt;/ul>
&lt;p>参考项目src/main/resources/beans.xml，一个典型的&lt;code>&amp;lt;context&amp;gt;&lt;/code>文件如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&amp;lt;beans xmlns=&amp;#34;http://www.springframework.org/schema/beans&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> xmlns:context=&amp;#34;http://www.springframework.org/schema/context&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> xmlns:xsi=&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> xsi:schemaLocation=&amp;#34;http://www.springframework.org/schema/beans
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> http://www.springframework.org/schema/beans/spring-beans.xsd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> http://www.springframework.org/schema/context
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> http://www.springframework.org/schema/context/spring-context.xsd&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &amp;lt;!--默认会扫描包文件下的@Controller, @Service, @Repository, @Component等常见注解--&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &amp;lt;context:component-scan base-package=&amp;#34;com.springtest.demo&amp;#34;&amp;gt;&amp;lt;/context:component-scan&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&amp;lt;/beans&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="xml格式解读">XML格式解读&lt;/h3>
&lt;p>在这份xml中，我们可以稍微简单说明都是做了一些什么事情。&lt;/p>
&lt;ol>
&lt;li>首先我们定义了一个&lt;code>&amp;lt;beans&amp;gt;&lt;/code>的大标签，用于生命这个配置文件是用于Spring的生命周期管理，因此我们使用Spring-bean提供的命名空间，&lt;code>&amp;quot;xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;/code>；&lt;/li>
&lt;li>在下文中需要使用&lt;code>&amp;lt;context&amp;gt;&lt;/code>标签，因此我们定义context所使用的命名空间&lt;code>xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;/code>；&lt;/li>
&lt;li>然后我们定义我们需要扫描的包的位置&lt;code>&amp;lt;context:component-scan base-package=&amp;quot;com.springtest.demo&amp;quot;&amp;gt;&amp;lt;/context:component-scan&amp;gt;&lt;/code>；&lt;/li>
&lt;li>至此我们的xml其实就已经不会报错了，说明此事我们的xml从结构上已经没有明显问题；&lt;/li>
&lt;li>但是此时启动Spring启动依然会失败并且报错&lt;code>Cannot find the declaration of element 'beans'.&lt;/code>，因此我们需要继续补充这份这份xml的schema文件，用来描述我们的xml中的标签行为；&lt;/li>
&lt;li>此时我们就需要引入我们的&lt;code>xsi:schemaLocation&lt;/code>属性，为此我们首先需要引入&lt;code>xsi&lt;/code>的前缀命名空间&lt;code>xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/code>&lt;/li>
&lt;li>最后我们补充完整的&lt;code>xsi:schemaLocation&lt;/code>解析我们所引用的两个命名空间&lt;code>&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;/code>和&lt;code>&amp;quot;http://www.springframework.org/schema/context&amp;quot;&lt;/code>即可。&lt;/li>
&lt;li>附：xmlns即xml namespace的缩写; xsi即xml schema instance的缩写; xsd即xml schema definition的缩写&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&amp;lt;beans
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &amp;lt;!-- 表明整个beans标签使用的是xmlns所指向的命名空间 --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> xmlns=&amp;#34;http://www.springframework.org/schema/beans&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &amp;lt;!-- 表明子节点中context标签使用的是xmlns:contex所指向的命名空间 --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> xmlns:context=&amp;#34;http://www.springframework.org/schema/context&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &amp;lt;!-- 表明xsi属性标签使用的是xmlns:xsi所指向的命名空间 --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> xmlns:xsi=&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &amp;lt;!-- 表明每一个命名空间具体指向的描述文件(xsd文件) --&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> xsi:schemaLocation=&amp;#34;http://www.springframework.org/schema/beans
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> http://www.springframework.org/schema/beans/spring-beans.xsd
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> http://www.springframework.org/schema/context
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> http://www.springframework.org/schema/context/spring-context.xsd&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &amp;lt;!--默认会扫描包文件下的@Controller, @Service, @Repository, @Component等常见注解--&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &amp;lt;context:component-scan base-package=&amp;#34;com.springtest.demo&amp;#34;&amp;gt;&amp;lt;/context:component-scan&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&amp;lt;/beans&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="xml内容解读">XML内容解读&lt;/h3>
&lt;p>这里&lt;code>context:component-scan&lt;/code>定义了我们的组件扫描的范围，我们直接定义到整个项目的根节点&lt;code>com.springtest.demo&lt;/code>，这样这个包内所有的组件都会被扫描并且组装到上下文中供我们使用。&lt;/p></description></item><item><title>一点点手写Spring</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E4%B8%80%E7%82%B9%E7%82%B9%E6%89%8B%E5%86%99spring/</link><pubDate>Sat, 20 Jun 2020 10:02:28 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E4%B8%80%E7%82%B9%E7%82%B9%E6%89%8B%E5%86%99spring/</guid><description>
&lt;h1 id="目录">目录&lt;/h1>
&lt;p>[toc]&lt;/p>
&lt;h1 id="一点点手写spring">一点点手写Spring&lt;/h1>
&lt;p>一直有一个小小的计划，做一个完整的系列，从使用Spring，到模拟Spring，到“抄袭”Spring，一点点理解Spring的内在和机制，同时加深自己对Java机制以及设计模式等内在的理解。&lt;/p>
&lt;p>因为Spring很大，模块很多，这里我计划只关注Spring的core包、bean包和context包，分别对应核心、bean的生命周期管理和Spring上下文的。&lt;/p>
&lt;p>首先从Spring的基础配置开始，我们现在最经常使用Spring的Bean管理有两种方式：①通过配置文件管理bean; ②通过注解配置类进行bean的扫描管理。&lt;/p>
&lt;p>我将尝试两种扫描方式都用一次，然后尝试各自复现。基于此来对Spring 使用-模拟-“抄袭”。&lt;/p>
&lt;h2 id="关于仓库和分支">关于仓库和分支&lt;/h2>
&lt;p>相关demo发布在我个人仓库的&lt;a href="https://github.com/LongyunYao/SpringSourceCodeTest">《SpringSourceCodeTest》&lt;/a> 中，当前已经完成了对Spring的初步使用和模拟。&lt;/p>
&lt;p>每次有重大特性变动，或者有较大的刷新的时候，我都会打上tag，以此尽可能与博客描述的内容对齐。&lt;/p>
&lt;p>&lt;em>注：当前博客对应的仓库中的tag为&lt;a href="">&lt;/a>，可以切换到这个tag同步阅读博客&lt;/em>&lt;/p>
&lt;h2 id="关于博客分布">关于博客分布&lt;/h2>
&lt;p>本次更新计划按照系列更新的方式进行更新，因此这篇文章只是作为综述，详细点在各个文章中更新。&lt;/p>
&lt;p>相关文章：&lt;/p>
&lt;blockquote>
&lt;p>&lt;a href="https://blog.csdn.net/Michael753951/article/details/106578817">《自定义注解并且进行扫描解析》&lt;/a>&lt;/p>&lt;/blockquote></description></item><item><title>自定义注解并且进行扫描解析</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B3%A8%E8%A7%A3%E5%B9%B6%E4%B8%94%E8%BF%9B%E8%A1%8C%E6%89%AB%E6%8F%8F%E8%A7%A3%E6%9E%90/</link><pubDate>Fri, 05 Jun 2020 22:52:22 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B3%A8%E8%A7%A3%E5%B9%B6%E4%B8%94%E8%BF%9B%E8%A1%8C%E6%89%AB%E6%8F%8F%E8%A7%A3%E6%9E%90/</guid><description>
&lt;p>[toc]&lt;/p>
&lt;h1 id="注解背景">注解背景&lt;/h1>
&lt;p>首先我们要知道背景知识：&lt;/p>
&lt;ol>
&lt;li>每一个注解其实就是一个特殊的接口(带着@符号，其实是语法糖，会被编译器自动编译成继承自Annotation接口)。我们反编译一下class文件就能看出来。&lt;/li>
&lt;li>注解只是一个标记位，标记了某一个类，某一个字段或者某一个函数之后，我们就可以对被标记的属性进行我们期望的行为——比如运行时动态获取和修改被标记的属性，动态执行被标记的函数等等&lt;/li>
&lt;li>基于第二点，我们在定义了自己的注解之后，还要定义自己注解的解析类，这样我们才能真正让注解发挥起作用（只标记而不做任何动作就和没标记没任何区别了）&lt;/li>
&lt;/ol>
&lt;h1 id="源码解析">源码解析&lt;/h1>
&lt;p>废话不说上我自己定义的代码，然后一个一个说明。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="kn">package&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">com.springtest.demo.annotation&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.lang.annotation.Documented&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.lang.annotation.ElementType&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.lang.annotation.Retention&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.lang.annotation.RetentionPolicy&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">java.lang.annotation.Target&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nd">@Target&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ElementType&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">FIELD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nd">@Retention&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">RetentionPolicy&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">RUNTIME&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nd">@Documented&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nd">@interface&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Fruit&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">value&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">default&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">name&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">default&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">enum&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">FruitType&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">APPLE&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PEACH&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PEAR&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">WATERMELON&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">FruitType&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">type&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">default&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">FruitType&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">APPLE&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="kn">package&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">com.springtest.demo.entity.fruit&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">com.springtest.demo.annotation.Fruit&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">com.springtest.demo.annotation.Scope&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nd">@Scope&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Scope&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">SCOPE_PROTOTYPE&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Pear&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nd">@Fruit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">value&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;pear&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">private&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nd">@Fruit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">type&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Fruit&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">FruitType&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">PEAR&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">private&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">type&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">package&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">com.springtest.demo.entity.fruit&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">com.springtest.demo.annotation.Fruit&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kn">import&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nn">com.springtest.demo.annotation.Scope&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nd">@Scope&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Scope&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">SCOPE_PROTOTYPE&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">class&lt;/span> &lt;span class="nc">Apple&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nd">@Fruit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">value&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;apple&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">private&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nd">@Fruit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">type&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Fruit&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">FruitType&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="na">APPLE&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="kd">private&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">String&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">type&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>以上就是我做的最简单的demo，定义并应用了一个注解。我们来看看Fruit注解反编译的结果是什么就能大概知道这故事背后的作用。&lt;/p></description></item><item><title>Lambda表达式与函数式接口</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%8E%E5%87%BD%E6%95%B0%E5%BC%8F%E6%8E%A5%E5%8F%A3/</link><pubDate>Fri, 02 Aug 2019 00:55:10 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%8E%E5%87%BD%E6%95%B0%E5%BC%8F%E6%8E%A5%E5%8F%A3/</guid><description>
&lt;h1 id="目录">目录&lt;/h1>
&lt;p>[toc]&lt;/p>
&lt;h1 id="lambda表达式java函数式接口">Lambda表达式Java函数式接口&lt;/h1>
&lt;p>都9012年了，这篇博文代码看看5000年前4012年发布的Java 8新引入的Lambda表达式到底是个什么鬼。&lt;/p>
&lt;h2 id="简述lambda表达式">简述Lambda表达式&lt;/h2>
&lt;p>Lambda表达式并不是Java 8特有的特性，其设计初衷是用于一些特定代码中，已知固定入参和固定返回值的时候，动态生成的一种函数。&lt;/p>
&lt;p>举个栗子：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">func&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Var1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Var2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">Var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">doSomeThing&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上述代码是我们常见的Java代码格式，假如说我们已经设定这个函数只会被在特定位置被调用，或者换种说法，我们假设&lt;code>func&lt;/code>函数仅仅只会作为&lt;code>func2(Var3 var3)&lt;/code>的入参。同时如果我们把&lt;code>func&lt;/code>这个函数的声明放到&lt;code>func2&lt;/code>的入参时声明，那此时我们此时调用时，其实这个函数是叫&lt;code>func&lt;/code>还是叫&lt;code>funcA&lt;/code>还是叫&lt;code>ABCD&lt;/code>已经无所谓了。&lt;/p>
&lt;p>因此我们就可以省略这个函数名，将其替换成&lt;code>-&amp;gt;&lt;/code>，由此将上述函数省略为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">Var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Var1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Var2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">Var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">doSomeThing&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>接下来由于我们已知&lt;code>func2(Var3 var3)&lt;/code>的入参肯定为Var3类型，所以上述代码又可以进一步省略：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="p">(&lt;/span>&lt;span class="n">Var1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">Var2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">Var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">doSomeThing&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>同理由于我们已知&lt;code>func&lt;/code>的入参类型肯定为&lt;code>Var1&lt;/code>和&lt;code>Var2&lt;/code>，于是我们继续省略：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="p">(&lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="n">Var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">doSomeThing&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">var1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var2&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">var3&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后由于我们如果整个函数内部只有一行操作的话，则可以知道这个操作的返回值肯定是这一行的操作结果，因此我们继续省略：&lt;/p></description></item><item><title>Java的Integer类方法解读</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E7%9A%84integer%E7%B1%BB%E6%96%B9%E6%B3%95%E8%A7%A3%E8%AF%BB/</link><pubDate>Fri, 19 Jul 2019 16:13:38 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/java%E7%9A%84integer%E7%B1%BB%E6%96%B9%E6%B3%95%E8%A7%A3%E8%AF%BB/</guid><description>
&lt;h1 id="highestonebit">highestOneBit&lt;/h1>
&lt;p>获取一个int类型的二进制取整&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-java" data-lang="java">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="kd">public&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kd">static&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nf">highestOneBit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c1">// HD, Figure 3-1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">2&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">4&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">8&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">16&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">return&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&amp;gt;&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">1&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上述代码粗看会不理解实现原理，但是跟着推导一次就能理解算法的思想。假定一个int的二进制表达式是&lt;code>100001000&lt;/code>，这个常数的迭代过程如下：&lt;/p>
&lt;ul>
&lt;li>第一次结束 &lt;code>100001000&lt;/code> -&amp;gt; &lt;code>110001100&lt;/code>&lt;/li>
&lt;li>第二次结束 &lt;code>110001100&lt;/code> -&amp;gt; &lt;code>111101111&lt;/code>&lt;/li>
&lt;li>第三次结束 &lt;code>111101111&lt;/code> -&amp;gt; &lt;code>111111111&lt;/code>&lt;/li>
&lt;li>第四次结束 &lt;code>111111111&lt;/code> -&amp;gt; &lt;code>111111111&lt;/code>&lt;/li>
&lt;li>第五次结束 &lt;code>111111111&lt;/code> -&amp;gt; &lt;code>111111111&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>然后返回值为&lt;code>111111111&lt;/code>-&lt;code>11111111&lt;/code> = &lt;code>100000000&lt;/code>。&lt;/p></description></item><item><title>毕业旅行规划</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E6%AF%95%E4%B8%9A%E6%97%85%E8%A1%8C%E8%A7%84%E5%88%92/</link><pubDate>Tue, 15 May 2018 17:06:00 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E6%AF%95%E4%B8%9A%E6%97%85%E8%A1%8C%E8%A7%84%E5%88%92/</guid><description>
&lt;h1 id="毕业旅行规划">毕业旅行规划&lt;/h1>
&lt;p>15 MAY 2018&lt;/p>
&lt;!-- toc -->
&lt;h2 id="景点总览">景点总览&lt;/h2>
&lt;h3 id="青海大环线">青海大环线&lt;/h3>
&lt;ul>
&lt;li>DAY1(6-7) 塔尔寺 &lt;strong>住西宁&lt;/strong>&lt;/li>
&lt;li>DAY2(6-8) 金沙湾 - （二郎剑景区(151基地)） - 黑马河日落 &lt;strong>住黑马河&lt;/strong>&lt;/li>
&lt;li>DAY3(6-9) 黑马河看日出 - 茶卡盐湖 - 可鲁克湖-托素湖自然保护区 - 大柴旦 - （水上雅丹，会绕路但是很好看） - （翡翠湖）&lt;strong>住大柴旦&lt;/strong>&lt;/li>
&lt;li>DAY4(6-10) 大柴旦 - 玉门关 - 汉长城、河仓城 - 雅丹地质公园（魔鬼城） - 敦煌 &lt;strong>住敦煌&lt;/strong>&lt;/li>
&lt;li>DAY5(6-11) 敦煌 - 敦煌莫高窟 - 鸣沙山月牙泉 - 敦煌 &lt;strong>住敦煌&lt;/strong>&lt;/li>
&lt;li>DAY6(6-12) 敦煌 - （瓜州稍作调整） - 嘉峪关关城 - 张掖七彩丹霞（日落） - 张掖 &lt;strong>住张掖（如果七彩丹霞景区附近不贵的话，就住七彩丹霞景区附近）&lt;/strong>&lt;/li>
&lt;li>DAY7(6-13) 张掖 - 张掖七彩丹霞（日出） - 祁连山祁连大草原 - 门源油菜花（可能没开门） - 远眺岗什卡雪峰 - 西宁 &lt;strong>住西宁&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>参考链接：&lt;a href="http://www.mafengwo.cn/i/5536434.html">在最美的时光遇见你——青海甘肃&lt;/a>&lt;a href="http://www.mafengwo.cn/i/5536434.html">6日自驾游&lt;/a>&lt;/p></description></item><item><title>Ubuntu下使用CodeBlocks进行多线程编程</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8codeblocks%E8%BF%9B%E8%A1%8C%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%BC%96%E7%A8%8B/</link><pubDate>Mon, 19 Feb 2018 14:19:04 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8codeblocks%E8%BF%9B%E8%A1%8C%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%BC%96%E7%A8%8B/</guid><description>
&lt;p>因为项目开发需要, 我要在Ubuntu中使用多线程编程进行,以便能够在不影响主线程的情况下, 读写虚拟环境中的相关数据.&lt;/p>
&lt;p>&lt;strong>强烈建议先阅读&lt;a href="https://www.cnblogs.com/52why/p/7629285.html">[C/C++ 多线程（程序猿面试重点）CodeBlocks-CB的pthreads使用]&lt;/a>了解Ubuntu下使用多线程编程时的基本理论知识. 里面有很详细的解释说明&lt;/strong>&lt;/p>
&lt;h1 id="初始代码">初始代码&lt;/h1>
&lt;p>这里我首先参考了部分网上博客, 写了如下Read&amp;amp;Write的demo.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;pthread.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;sys/time.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;string.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;unistd.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="cp">#define MAX 10
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">test_multiple_threads_R_and_S&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nf">set_thread&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(;;){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="o">++&lt;/span>&lt;span class="n">test_multiple_threads_R_and_S&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="nf">sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="n">test_multiple_threads_R_and_S&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mi">20&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &lt;span class="nf">pthread_exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 测试退出子线程.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nf">read_thread&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(;;){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl"> &lt;span class="nf">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;the value of test is %d&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">test_multiple_threads_R_and_S&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl"> &lt;span class="nf">sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">argc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">[])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl"> &lt;span class="kt">pthread_t&lt;/span> &lt;span class="n">id1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">id2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl"> &lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">pthread_create&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">id1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">set_thread&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ret&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">37&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">38&lt;/span>&lt;span class="cl"> &lt;span class="nf">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Create pthread error!&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">39&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">40&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">41&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">42&lt;/span>&lt;span class="cl"> &lt;span class="n">ret&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">pthread_create&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">id2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">read_thread&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">43&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ret&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">44&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">45&lt;/span>&lt;span class="cl"> &lt;span class="nf">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Create pthread error!&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">46&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">47&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">48&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">49&lt;/span>&lt;span class="cl"> &lt;span class="nf">pthread_join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">id1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">50&lt;/span>&lt;span class="cl"> &lt;span class="nf">pthread_join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">id2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">51&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">52&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">53&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>直接运行上述代码可能会出现报错&lt;code>对‘pthread_create’未定义的引用&lt;/code>, 可以参考&lt;a href="http://blog.csdn.net/qq_20480611/article/details/49936457">[codeblocks 多线程编程时出现：对pthread_create未定义的引用，解决方法]&lt;/a>中的方法进行调试.&lt;/p></description></item><item><title>关于Apache HTTPD 2.2.15的部分漏洞修复建议</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%85%B3%E4%BA%8Eapache-httpd-2.2.15%E7%9A%84%E9%83%A8%E5%88%86%E6%BC%8F%E6%B4%9E%E4%BF%AE%E5%A4%8D%E5%BB%BA%E8%AE%AE/</link><pubDate>Thu, 21 Dec 2017 11:35:49 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%85%B3%E4%BA%8Eapache-httpd-2.2.15%E7%9A%84%E9%83%A8%E5%88%86%E6%BC%8F%E6%B4%9E%E4%BF%AE%E5%A4%8D%E5%BB%BA%E8%AE%AE/</guid><description>
&lt;p>龙云尧个人博客，转载请注明出处。&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/Michael753951/article/details/78861876&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/guan-yu-apache-httpd-2-2-15-de-bu-fen-lou-dong-xiu-fu-jian-yi/&lt;/p>
&lt;hr>
&lt;h1 id="修复apache-http-server畸形range和range-request选项处理远程拒绝服务漏洞">修复Apache HTTP Server畸形Range和Range-Request选项处理远程拒绝服务漏洞&lt;/h1>
&lt;p>该漏洞有如下几种修补方法&lt;/p>
&lt;h2 id="方式1">方式1：&lt;/h2>
&lt;p>升级Apache httpd至2.2.21及以上版本&lt;/p>
&lt;p>##方式2：
可以从官网&lt;a href="http://www.apache.org/dist/httpd/patches/apply_to_2.2.19/CVE-2011-3192-2.2.19-byterange-fixes.patch">下载补丁包&lt;/a>，重新打包编译Apache。&lt;/p>
&lt;p>##方式3：&lt;/p>
&lt;p>修改httpd.conf文件（一般位于&lt;code>/usr/local/apache2/conf/httpd.conf&lt;/code>，具体视安装Apache时的配置而定），相关配置参考&lt;a href="https://httpd.apache.org/security/CVE-2011-3192.txt">Apache官方关于该漏洞的修复建议&lt;/a>，（绿盟也有&lt;a href="http://www.nsfocus.net/index.php?act=sec_bug&amp;amp;do=view&amp;amp;bug_id=17605">对官方建议的中文翻译&lt;/a> ，不过翻译并不准确，不建议参考），这里使用官方建议的修复方式2&lt;/p>
&lt;p>&lt;strong>Step1.&lt;/strong> 引入mod_rewrite和mod_headers模块，这里去掉两个模块的默认的注释即可&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="引入mod_rewrite和mod_headers模块"
class="image_figure image_external image_processed"
width="467"
height="446"
src="https://yaoyl.cn/images/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcxMjIxMTEwMDQ1Njk5_8918633681367883446.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;strong>Step2.&lt;/strong> 在正文部分引入如下配置（配置说明：Range:标头中超过5个范围时即拒绝请求，并且总是丢弃Request-Range，因为是旧版的）&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&amp;lt;IfModule rewrite_module&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&amp;lt;IfModule mod_headers&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> # Reject request when more than 5 ranges in the Range: header.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> # CVE-2011-3192
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> #
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> RewriteEngine on
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> RewriteCond %{HTTP:range} !(^bytes=[^,]+(,[^,]+){0,4}$|^$) [NC]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> RewriteRule .* - [F]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> # We always drop Request-Range; as this is a legacy
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> # dating back to MSIE3 and Netscape 2 and 3.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> #
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> RequestHeader unset Request-Range
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&amp;lt;/IfModule&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&amp;lt;/IfModule&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Step3：&lt;/strong> 重启Apache httpd&lt;/p></description></item><item><title>华为初面+综合面试（技术面）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%8D%8E%E4%B8%BA%E5%88%9D%E9%9D%A2+%E7%BB%BC%E5%90%88%E9%9D%A2%E8%AF%95%E6%8A%80%E6%9C%AF%E9%9D%A2/</link><pubDate>Thu, 12 Oct 2017 02:28:17 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%8D%8E%E4%B8%BA%E5%88%9D%E9%9D%A2+%E7%BB%BC%E5%90%88%E9%9D%A2%E8%AF%95%E6%8A%80%E6%9C%AF%E9%9D%A2/</guid><description>
&lt;p>华为面试整体流程大致分为&lt;strong>笔试，性格测试，面试，综合面试&lt;/strong>，回学校等结果。笔试来说，华为的难度较中等，选择题难度和网易腾讯差不多。最后的代码题，相比下来就简单很多，一共3道题目，前2题很容易就AC，题目已经记不太清楚，不过难度确实不大。最后一题最后提交的代码过了75%的样例，一直没有发现剩下的25%可能存在什么坑。&lt;/p>
&lt;p>笔试部分太久远，我就不怎么回忆了。直接将面试。&lt;/p>
&lt;h1 id="面试">面试&lt;/h1>
&lt;p>如果说腾讯的面试是挥金如土（毕竟每个面试官都配了一件单独的房间），那华为就是戒奢宁俭。两个大会议厅坐满了面试官，其中一个是初面面试区，另一边是综合面试区。初面区的面试官会来等待区一个一个叫我们过去面试。&lt;/p>
&lt;p>面试桌采取一对一的形式，技术岗的面试通知短信虽然没有通知说要带简历，但是仍然带了一份以免中途需要。（事实证明这是一个明智的选择）&lt;/p>
&lt;h2 id="初面">初面&lt;/h2>
&lt;p>初面面试官点到我的名字之后，我跟着面试官去他的那个位置。&lt;/p>
&lt;p>面试流程和大多数互联网公司流程差不多，首先让自己介绍一个比较满意的项目。（可能想通过这个项目了解我们的技能程度）在我面试准备时，其实我就纠结过这个问题。因为在我的项目中，有两个项目是我比较满意的，第一个主要做后台，第二个主要做虚拟环境和数据交互。&lt;/p>
&lt;p>“我有两个项目是比较满意的”，我先抛出这句话，希望面试官能够给机会让我将两个项目都讲一下，“我先讲一下第一个我们当时做的换课平台，当时本来是一个课程项目，但是我们在这个课程项目之上，结合当时校内急需换课这个需求，做出了这么一个换课平台”,&lt;strong>（首先提出项目目的）&lt;/strong>，“然后这个项目大概实现了一个怎样怎样的功能”&lt;strong>（抛出产品功能）&lt;/strong>，“我在项目中主要负责后台开发和数据库交互功能”&lt;strong>（说下在项目中的角色）&lt;/strong>，“整个项目的架构大致如下。。。。”&lt;strong>（项目如何实现）&lt;/strong>，我拿着纸笔在草稿上给面试官画着后台所有的系统架构和数据流动方式，同时将涉及到的重要点的技术点都说了下。&lt;/p>
&lt;p>按照之前整理过的描述流程，我将整个换课平台项目描述了一遍，中途偶尔面试官会问一下技术细节，不过都不是很难，可能因为我没有使用“SSH”三大框架，而是使用纯JSP进行的底层开发，所以面试官也不是太好提问。&lt;/p>
&lt;p>不过有意思的是，在我介绍到项目中实现了实时聊天的时候，面试官提了两个小问题，是我之前项目中没碰到，而实际生产产品中可能遇到的问题：第一，我们的实时聊天是直接P2P，这样需要双方在同一子网下，那如果现在双方不在同一子网下，外网某个移动端客户A可以访问后台服务器B，这时候某个web端C同时也可以访问服务器，这个时候A和C是互相不同的，现在如果我们仍然想让他们通信怎么办；第二，考虑大量用户同时访问后台服务器的时候，该如何处理。&lt;/p>
&lt;p>第一个我首先考虑到用服务器作为中介，但是当时老是想着可能打两个聊天信息会对服务器造成压力，所以一直很犹豫要不要用后台服务器作为中转，以及，作为中转该如何操作。不过面试官稍微提醒我可以用服务器作为中转，这时候我突然意识到只要服务器收到之后，立刻将消息转发出去就可以了，不用走数据库。这时候我也才一直到为什么我以前分析微信的聊天服务时，会将所有的文本消息和图片消息发送到微信的后台服务器，而且简单的直接P2P对话，主要还是为了克服网络问题&lt;/p>
&lt;p>第二个不难，考虑云计算中的负载均衡，我大致说了下思路，选取一台主机作为负载均衡调度机，其他的作为工作机即可。&lt;/p>
&lt;p>第一个项目大概讲了十分钟，不知道是因为刚开始面试还是我项目确实对面试官的胃口。&lt;/p>
&lt;p>第一个项目完了以后，面试官翻了下我的简历，“你要不说下你另一个项目？”我有blabla说了一通。&lt;/p>
&lt;p>“有什么难点？”“项目中遇到过哪些问题？”&lt;/p>
&lt;p>说完之后，初面基本也就结束了，整个过程十分和谐（可能我遇到的面试官比较nice）。最后让我提一个问题，我大概问了下投递的这个岗位今后具体会是什么工作，面试官大致给我讲了下。（我投递的云计算开发岗，PaaS方向）&lt;/p>
&lt;h2 id="综合面试">综合面试&lt;/h2>
&lt;p>初面完之后，面试官指引我去综合面试区等待综合面试。&lt;/p>
&lt;p>综合面试整体感觉和初面差不多，不过在综合面试阶段面试官首先问了我的籍贯，工作意向和理想的工作地点。&lt;/p>
&lt;p>这里我表示并不挑，因为作为一个外省人，自从一个人出省读书以后，就已经对在哪生活在哪上班没有太多顾虑。&lt;/p>
&lt;p>接着面试官问了我一些成绩怎样，家庭情况之类问题之后，开始问我的项目经验。（虽然我不太明白，为什么综合面试还会问初面中问过的关于项目经验的问题）这里我就不在重复了，何处是一样，我大致和面试官交流了一下我们的项目内容。&lt;/p>
&lt;p>这一块内容完成之后，感觉综合面试整个流程已经基本结束了，面试官开始跟我介绍他们项目组的工作地点（深圳），工作内容，以及平常的一些工作，同时还给我介绍了一些将来工作中需要了解的基本知识——比如docker容器，k8s，部分国内国外的公有云的运行原理，让我回去之后提前自学一下。（到这里我开始感觉有戏了）&lt;/p>
&lt;p>其实，综面和初面差别其实没有太大，不过感觉这还是和面试官有关系，因为在我同行的队友中，他们有的就被问到了一些比较底层的知识点比如Java有什么特点之类，也有被问及面向对象的优点等等（这些我都没被问到）。&lt;/p>
&lt;h1 id="综述">综述&lt;/h1>
&lt;p>总的来说，其实华为的面试并没有我想象中的困难（因为听说华为今年缩招，我还以为面试会故意很难）。&lt;strong>简历准备很重要， 尤其是项目经历，个人blog，github这类容易加分的内容，最好能够写出来&lt;/strong>。两场面试相比较同伴更加顺利，有一定程度上就是简历给我加了分。&lt;/p>
&lt;p>因为我面试的是云计算开发岗，所以我在项目中重新添加了很多Java相关的项目经历，虽然不是很重要，但是至少能让面试官从中了解我在Java方面有不少经验。&lt;/p>
&lt;p>面试时候不用太紧张，在之前腾讯面试中我就明显很紧张，脑子一片发蒙，而这次华为面试就感觉稍微舒服很多，不知道是因为已经经历过几次面试，还是因为面试官带动的比较好。&lt;/p>
&lt;p>最后还挺重要的要能够及时清楚地描述自己想说的内容。毕竟将来工作岗位中，少不了和同事的交流。另外清晰的描诉对面试官了解你，了解你的项目会很有帮助。因此，不论是在给面试官讲述自己项目的时候，还是在回答面试官问题，亦或是想表达自己观点的时候，都需要清晰的表达。如果一时语塞，可以尝试停顿一下，整理下思路然后重新描述，只要面试官能够理解你的话，一般有些停顿是不会有什么大碍。&lt;/p>
&lt;p>最后的最后，希望能够收到华为的offer吧_(:зゝ∠)_目前正在“排队待录取”中。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>更新：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>10月10号面试&lt;/li>
&lt;li>10月17日收到进入资源池通知&lt;/li>
&lt;li>10月24日收到offer短信，通知27日签约（估计是两方协议）。&lt;/li>
&lt;li>27日签约，同时决定结束持续了6个月的备考生活，准备工作。&lt;/li>
&lt;/ul></description></item><item><title>腾讯初试（技术面）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%85%BE%E8%AE%AF%E5%88%9D%E8%AF%95%E6%8A%80%E6%9C%AF%E9%9D%A2/</link><pubDate>Wed, 11 Oct 2017 01:45:58 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%85%BE%E8%AE%AF%E5%88%9D%E8%AF%95%E6%8A%80%E6%9C%AF%E9%9D%A2/</guid><description>
&lt;p>腾讯笔试因为比较久远，而且最后的代码题没有成功AC，所以已经记不太清楚。这里主要讲一下面试经历吧。&lt;/p>
&lt;p>（听说鹅厂的简历关和笔试关都很松，几乎不卡人。这大概是我认为已经失败的情况下依然受到面试通知的原因吧。）&lt;/p>
&lt;h1 id="面试">面试&lt;/h1>
&lt;p>鹅厂的初试其实还是比较面向学生的，可能考虑到在校生没有接触太多工程项目，一般都是简单问一下项目经历，然后开始问智力题和简单编程题。&lt;/p>
&lt;p>面试之前我还是准备了挺久，看了不上网上关于腾讯面试的面经，看了很多以前的面试题，大致准备的内容如下吧。&lt;/p>
&lt;p>[外链图片转存中...(img-ACk3dKWt-1595021180397)]&lt;/p>
&lt;p>图片来自抱团面试小队。&lt;/p>
&lt;p>然而在我面试的时候，上面问题全部没有问到。。。可能是我最后花费的时间太长，表现的不好，面试官对我兴趣不大。也有可能是不同面试官问的问题不一样（因为小队里，有人面试鹅厂的被问到了该图中某几个问题）。&lt;/p>
&lt;h2 id="项目经历">项目经历&lt;/h2>
&lt;p>项目经历这一块，个人感觉其实还是很重要的。因为在面试官和你开始讲话之前，ta对你可以说没有一点了解，你擅长什么，你做过什么，你能做什么，你团队能力之类的怎样，这些都是需要通过你的项目经历来了解的。&lt;/p>
&lt;p>因为我在以前网易实习面试中，吃过项目经历删减太多，导致最后面试官已经没问题可问的尴尬。这次面试中我将大三之后，不是很水的项目经历，比赛经历，实验室项目经历都写在了简历上。&lt;strong>一共一页半&lt;/strong>（本来是两页，不过删掉了半页感觉太水的项目）。&lt;/p>
&lt;p>到达酒店扫码签到之后，等待面试短信告知面试地点在哪（鹅厂还是挺壕的，一个面试官包了一个房间）。&lt;/p>
&lt;p>上去首先递上自己的简历。面试官开始询问我的项目经历，我投的是后台开发岗位，所以讲的是大三下的时候，和3个小伙伴做的一个换课系统。我大致讲述了一下整个项目的创建目的，实现的功能（&lt;strong>这部分我拿笔在草稿上将设备的部署，设备之间的连接以及通信方式全部画出来，以便解释说明，个人觉得这是个好习惯&lt;/strong>），以及在整个项目中的难点和个人承担的角色。&lt;/p>
&lt;p>面试官一边听我讲诉，中途会偶尔插一两句话，比如某个功能是怎样实现，以及这个功能实现的时候是否有什么难点和在实现这个项目的时候担任了什么功能。不过总体不是很难。&lt;/p>
&lt;p>不知道是因为面试官对我的项目兴趣不大，或者对我负责的这一块不是很了解。这一部分面试官问的比较少。&lt;/p>
&lt;h2 id="智力题">智力题&lt;/h2>
&lt;p>接下来是智力题。是我很不擅长的数字推理题。题目我在后来找到了原题，大致如下：&lt;/p>
&lt;blockquote>
&lt;p>AB两男士女奇问C女士年龄，C女士将给出11个可能答案，35，36，38，42，45，46，51，55，57，61，62。&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>C女士将十位数告诉A，将个位数告诉B
A男士说，我不知道C女士年龄，我想B也不知道。
B男士说，原本我不知道C女士年龄，但现在知道了。
A男士说现在我也知道了&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>请问C女士年龄多少&lt;/p>&lt;/blockquote>
&lt;p>题目大致如此，我思考了一会，没有头绪，于是口头向面试官表示暂时可能解不出来，然后又大致讲了一下当前我已经思考到哪，以及我当前的推理逻辑。面试官听了一会，点了一下，然后开始让我做简单的代码实现题。&lt;/p>
&lt;p>这时候我开始有点紧张了，因为担心这一关是不是没有发挥好，或者是否哪里有逻辑漏洞。&lt;/p>
&lt;h2 id="简单代码题">简单代码题&lt;/h2>
&lt;p>题目确实很简单。&lt;/p>
&lt;p>面试官从她的题库中挑选了两道题目，第一道题目是看代码让我描述这段代码的功能，以及生么样的输入会带来什么样的输出。感觉实在考验我们的代码阅读能力。整段代码不长，30行左右，大致功能是将一个long型十进制整数转成字符串，然后逐位取出，统计该位出现次数，如果为3就会有特定输出。就是一个简单的桶排思想，认真看懂的话不难。&lt;/p>
&lt;p>第二道题是编程题，面试官让我实现一个功能函数，输入一个字符数组的头指针，让我实现一个功能函数将字符数组中的空格全部去掉。&lt;/p>
&lt;p>很简单吧？然而我想复杂了。&lt;/p>
&lt;p>太久没有写这种很基础的功能函数，加上有些紧张，我当时想的越来越复杂，以至于最后想出来的方法是&lt;strong>开辟一个bool型的标志数组标识当前位是否为空格，然后重新开辟一个数组空间，将传入的字符串一个一个字符数组遍历一次，如果是空格就跳过，如果不是就取出来放进新的数组空间，最后free掉指针指向的以前的数组空间，重新指向当前开辟的新空间。&lt;/strong>&lt;/p>
&lt;p>其实这是一种舍近求远的想法，这种思路直接让本来码代码就不是很快的我写了差不多十分钟才写完（感觉面试官已经等的有点不耐烦），最后实现的代码量也是很冗长，同时其实最后还是有bug。函数中new的数组空间在返回后是会被del掉了（这部分栈空间被回收掉了），这样我们操作完成的数组其实已经不存在了，原始数组也不存在了。但是当时我想法太乱，明明知道会有这种问题，但还是硬着头皮写了。&lt;/p>
&lt;p>写完面试官让我分析代码的时间复杂度和空间复杂度，然后问我还有什么问题想提问的，便让我回去等通知。&lt;/p>
&lt;p>回来的路上，我和朋友一起回学校的时候，才想起来，明明去空格可以很简单的实现，&lt;strong>只需将原数组中非空格的字符向前移动，直到遍历完成，然后手动添加\0结束&lt;/strong>就行了，只是我当时想的太复杂。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">del_blank_space&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="o">*&lt;/span> &lt;span class="n">pStr&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl"> &lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pStr&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> &lt;span class="k">while&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">temp&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">temp&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="sc">&amp;#39; &amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="n">temp&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">continue&lt;/span>&lt;span class="p">;}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="n">pStr&lt;/span>&lt;span class="o">++&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">temp&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="n">pStr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sc">&amp;#39;\0&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>就这么简单，然而我当时脑子蒙了。鹅厂面试也就只能草草收场。&lt;/p></description></item><item><title>2018网易校招运营开发工程师编程第一题</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/2018%E7%BD%91%E6%98%93%E6%A0%A1%E6%8B%9B%E8%BF%90%E8%90%A5%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%BC%96%E7%A8%8B%E7%AC%AC%E4%B8%80%E9%A2%98/</link><pubDate>Sat, 16 Sep 2017 22:38:56 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/2018%E7%BD%91%E6%98%93%E6%A0%A1%E6%8B%9B%E8%BF%90%E8%90%A5%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%BC%96%E7%A8%8B%E7%AC%AC%E4%B8%80%E9%A2%98/</guid><description>
&lt;p>由于之前准备不充分，没有做大量的编程练习，在实际编程过程中算法设计出现疏漏，最终导致结果没有AC。&lt;/p>
&lt;p>题目很简单，字符串编码问题。 &lt;strong>一个长度不超过6的字符串，内部不会重复且所有字母已经按照字典序排好。接下来按照字典序从短到长对这些字符串进行编码，接下来让你输入一个字符串，输出对应的编码即可。&lt;/strong> eg: a为1，z为26，ab为27，az为51，bc为52。。。&lt;/p>
&lt;p>思路和之前在牛客网做过的编码题类似，&lt;strong>跳过某些的字符串，直到定位到该字符串为止&lt;/strong>。&lt;/p>
&lt;p>举个例子：&lt;/p>
&lt;p>字符串为forx。它&lt;strong>跳过了所有的长度为1，长度为2，长度为3的字符串&lt;/strong>，以及&lt;strong>所有长度为4的字符串中a&lt;del>e开头的，fg&lt;/del>fn开头的，fop~foq开头的字符串&lt;/strong>。最后检查从fors到forx的序号就行了。&lt;/p>
&lt;p>刚开始思路出了点问题，跳过的过程中，我跳过了fa~fn这类包括了fa但是不可能出现的情况，结果导致最后的算法出来的结果并不如意，并且一直很异常。直到笔试结束，我也没及时跳出这个坑。&lt;/p>
&lt;p>笔试结束后我重新审查我的算法才发现了这个bug，并最终解决。最终的代码如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="n">using&lt;/span> &lt;span class="n">namespace&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">C_a_b&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="k">while&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">*=&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="k">while&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">len&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">number&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="n">string&lt;/span> &lt;span class="n">input_str&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="n">cin&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl"> &lt;span class="k">while&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl"> &lt;span class="n">number&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl"> &lt;span class="n">cin&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="n">input_str&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl"> &lt;span class="n">len&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">input_str&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">length&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">len&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">input_str&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="sc">&amp;#39;a&amp;#39;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl"> &lt;span class="k">continue&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 跳过所有长度小于该字符串的数目
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">len&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl"> &lt;span class="n">number&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nf">C_a_b&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">26&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 逐次跳过，eg：forx，首先跳过a开头的到e开头的所有长度为4的字符串（C_25_3累加到C_21_3）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 然后跳过fg开头到fn的所有长度为3的字符串（C_19_2累加到C_12_2）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 然后跳过fop到foq（C_10_1累加到C_9）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">37&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">len&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">25&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">--&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">38&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(;&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="sc">&amp;#39;z&amp;#39;&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">input_str&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">len&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="n">j&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">39&lt;/span>&lt;span class="cl"> &lt;span class="n">number&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nf">C_a_b&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">40&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">41&lt;/span>&lt;span class="cl"> &lt;span class="n">j&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">42&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">43&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 将最后一位的值算出来。eg：forx，则先算出从fors开始计数到forx时，对应的值
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">44&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">number&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">input_str&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">len&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">input_str&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">len&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">45&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">46&lt;/span>&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">number&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">47&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">48&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>目测应该没够ac。特殊测试样例为a，z，ab，az，bc（和前面样例差一），bz，yz，abc（和前面样例差一），abz，acd（和前面样例差一）&lt;/p></description></item><item><title>虚拟驾驶环境搭建(四)</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E5%9B%9B/</link><pubDate>Thu, 13 Jul 2017 16:18:07 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E5%9B%9B/</guid><description>
&lt;p>龙云尧个人博客，转载请注明出处。&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/75074051&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/huan-jing-da-jian-si-2/&lt;/p>
&lt;hr>
&lt;h1 id="障碍物移动的改进">障碍物移动的改进&lt;/h1>
&lt;p>在之前的版本中.我们的障碍物移动和场景移动放在同一个for循环中,虽然减少了代码的操作,但是很容易出现边界问题,程序运行中往往会出现障碍物骤现,或者障碍物还未抵达车前方便突然消失的情况,为了修改这出bug,我将重写这部分代码.&lt;/p>
&lt;h2 id="需求分析">需求分析&lt;/h2>
&lt;p>无脑写代码的多数结果都是bug不断,并且写完后文就忘记前文.为了提高代码的清晰度和准确性,挺尸帮我们捋清思路,我们先通过写伪代码的方式整理一下我们的程序有哪些需求,以及粗略的实现方式.&lt;/p>
&lt;h3 id="需求">需求&lt;/h3>
&lt;p>障碍物能够从左侧楼栋出现,到达路中央之后,将停留一小段时间(等待车撞上).&lt;/p>
&lt;p>对这个过程进行分解分析,我们可以大致得到如下流程:&lt;/p>
&lt;ul>
&lt;li>障碍物出现的时机: 左侧有障碍物 &amp;amp; 距离上次消失已经有10s以上&lt;/li>
&lt;li>障碍静止时机: 已经达到路中间, 并且停留时间没有达到2s&lt;/li>
&lt;li>障碍物消失诗句时机: 停留2s之后,障碍物消失&lt;/li>
&lt;/ul>
&lt;h3 id="伪代码">伪代码&lt;/h3>
&lt;ul>
&lt;li>首先判断障碍物是否已经消失,然后判断左侧是否有障碍物,然后检查消失时间是否已经达到10s,如果满足条件,就更新appear标志, 让障碍物开始移动&lt;/li>
&lt;li>开始步进障碍物, 直到达到边界, 此时更新appear_tmp, 更新appear标志, 记录下当前时间&lt;/li>
&lt;li>如果当前状态为静止, 并且停留时间还未到达2s,保持pos不变&lt;/li>
&lt;li>否则如果停留时间超过2s,就将appear更新为消失, 让障碍物消失, 同时用appear_tmp记录下消失的时间, 方便之后判断障碍物的出现时机&lt;/li>
&lt;/ul>
&lt;h2 id="代码实现">代码实现&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 先获取左侧建筑情况
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">left_temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">building_left_flag&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="c1">// bdw_appear有3个值, 0表示已经消失, 1表示正在进行移动, 2表示移动到边界,已经静止
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bdw_appear&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">left_temp&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;&lt;/span> &lt;span class="mi">11&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">b1&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="nf">time&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">appear&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 如果距离上次出现已经5s,就更新记录,同时更新flag
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">appear&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">appear_tmp&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="n">appear_tmp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">appear&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="n">bdw_appear&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>&lt;span class="k">else&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bdw_appear&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl"> &lt;span class="nf">glBindTexture&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">texture&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &lt;span class="nf">glLoadIdentity&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">child_run_len&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">7.0f&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="nf">glCallList&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">children&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">child_run_len&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">0.5&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl"> &lt;span class="c1">//child_run_len = -3.0f;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//bdw_appear = false;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 刚移动到边界
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bdw_appear&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl"> &lt;span class="nf">time&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">appear_tmp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl"> &lt;span class="n">child_pos&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">7.0f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl"> &lt;span class="n">bdw_appear&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl"> &lt;span class="n">child_run_len&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">0.5f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 小孩的速度恒定
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">child_run_len&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mf">0.1f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl"> &lt;span class="nf">time&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">appear&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 如果距离上次出现已经5s,就更新记录,同时更新flag
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">appear&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">appear_tmp&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl"> &lt;span class="n">appear_tmp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">appear&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">37&lt;/span>&lt;span class="cl"> &lt;span class="n">child_run_len&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">3.0f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">38&lt;/span>&lt;span class="cl"> &lt;span class="n">bdw_appear&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">39&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">40&lt;/span>&lt;span class="cl"> &lt;span class="nf">glBindTexture&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">texture&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">41&lt;/span>&lt;span class="cl"> &lt;span class="nf">glLoadIdentity&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">42&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 障碍物的pos还要加上run_len, 这样能够让障碍物在达到路中央静止之后, 和周围物体一起移动,产生向人靠近的感觉
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">43&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">child_run_len&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">child_pos&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">run_len&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">44&lt;/span>&lt;span class="cl"> &lt;span class="nf">glCallList&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">children&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">45&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">46&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="实现障碍物从两侧随机出现">实现障碍物从两侧随机出现&lt;/h1>
&lt;p>为了和真实驾驶更加相似,我们不应该让障碍物只从单侧出现,而是因该让其两侧都有可能出现.因此,我们需要在原来的代码上进行进一步的修改.&lt;/p></description></item><item><title>虚拟驾驶环境搭建(三)</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%B8%89/</link><pubDate>Thu, 13 Jul 2017 16:17:12 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%B8%89/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/75073755&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/huan-jing-da-jian-san/&lt;/p>
&lt;hr>
&lt;h1 id="移动场景的环境搭建">移动场景的环境搭建&lt;/h1>
&lt;p>需要移动的场景主要集中在公路,草坪,楼房和障碍物.下面我将逐一实现它们的移动.&lt;/p>
&lt;h2 id="公路以及草坪的移动">公路以及草坪的移动&lt;/h2>
&lt;p>公路的移动较为简单,还记得我们在第一节中那个run_len变量么,在这里我们将使用它进行操作,已达到移动的效果.代码如下:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl"> &lt;span class="cm">/* 开始进行场景移动 */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl"> &lt;span class="n">go_ahead_rate&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">go_ahead_ac&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="cm">/* 防止速度过快 */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">go_ahead_rate&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="n">run_len_max&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">go_ahead_rate&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">run_len_max&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">go_ahead_rate&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">run_len_min&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="n">go_ahead_rate&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">run_len_min&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="n">run_len&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">go_ahead_rate&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 小孩的速度恒定
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//child_run_len += 0.1f;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">run_len&lt;/span> &lt;span class="o">&amp;gt;=&lt;/span> &lt;span class="mf">4.0f&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="n">run_len&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中go_ahead_rate是一个步进长度,go_ahead_ac是步进加速度,用来模拟车辆的加速减速过程,以免车辆的加减速太过突然而失真.run_len_max用来限制车速的上下界.最后的if判断是为了当车辆运行到一块道路的边界的时候,将run_len归0模拟到达一块新的道路上继续行驶,这样能通过比较少的资源达到比较仿真的驾驶环境.&lt;/p>
&lt;p>到了这里,草地和楼房便能够正常的开始进行步进操作了.我们接下来开始移动楼房.&lt;/p>
&lt;h2 id="楼房的移动">楼房的移动&lt;/h2>
&lt;p>楼房的移动相比较场景的一动就就没有那么简单了.因为我们在第一节已经简单分析过,道路和草地的出现都是重复的,恒定的.而楼栋的出现是随机的,恒定的.&lt;/p>
&lt;h3 id="使用run_len进行前进控制">使用run_len进行前进控制&lt;/h3>
&lt;p>道路和草地的移动中我们可以使用run_len在0.0~4.0之间不停的变换,所以道路和草地的真正移动距离是不会操作4.0的,而我们在设计场景的时候,又是使用12*12的方块填满的,为了让楼栋能够跨过这12个方块完成移动,我们就需要想一些特殊的办法.&lt;/p>
&lt;p>为了简化场景建设,我们让视野内,每栋楼占据的设计面积和道路的方块一致,因此道路单侧最多也只能有12栋楼层,举个例子,就算左侧楼栋不停的出现的话,最多也只能出现12栋楼,再出现新的楼栋的时候,距离自己最近的楼栋也会消失在自己的视野,使用这种方法能够比较简单的同时控制道路和楼栋的运动,即使用len_run进行控制,让他们保持同样的速度运动.&lt;/p>
&lt;p>好了我们已经设计成使用len_run对楼栋进行控制了,但是我们又知道run_len在0.0~4.0之间不停的变换,这也就意味着,如果我们没有进行什么特定操作,那么楼栋在移动一段距离(4.0)之后,又会回到起点(0.0)重新移动,这种画风并不是我们需要的结果,因此需要对其进行一定的控制.&lt;/p>
&lt;h3 id="添加标志让楼栋完成移动">添加标志让楼栋完成移动&lt;/h3>
&lt;p>前一步骤中我们已经完成了楼栋简单的移动,但是楼栋并不能够跨过一个格子的长度.为了实现跨过格子的操作,我们需要添加一些标志位,用来记录当前这栋楼栋运行到了第几格,同时,每当run_len到达4.0,进行归0操作的时候,将标志位进行更新,让所有楼栋的的起点移动到下一个格子,这样当run_len增长的时候,就是从新的起点开始运动的,我们视觉上就会觉得,这栋楼没有间断的不停的向前走.&lt;/p>
&lt;p>这种格子移动操作和我们的位运算极其相似,因此我们可以使用一个int的后12位作为标志位,来标识楼栋的位置信息.这样能够让屏幕中同时显示多栋楼层,而且能够让所有楼层同时运动,并且不会显得很突兀.&lt;/p>
&lt;p>下面展示部分代码,首先是绘制楼栋的代码:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 绘制右边的楼栋
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBindTexture&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">texture&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">right_temp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">building_right_flag&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">right_temp&lt;/span> &lt;span class="o">&amp;amp;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="n">b1&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="nf">glLoadIdentity&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">((&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">*-&lt;/span>&lt;span class="mf">4.0f&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">run_len&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 移动绘点
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glCallList&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">building2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="n">right_temp&lt;/span> &lt;span class="o">&amp;gt;&amp;gt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后对场景移动代码稍作修改,让楼栋移动一格.&lt;/p></description></item><item><title>虚拟驾驶环境搭建(二)</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%BA%8C/</link><pubDate>Thu, 13 Jul 2017 16:15:53 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%BA%8C/</guid><description>
&lt;p>龙云尧个人博客，转载请注明出处。&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/75073580&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/huan-jing-da-jian-er/&lt;/p>
&lt;hr>
&lt;h1 id="基本素材和环境的准备">基本素材和环境的准备&lt;/h1>
&lt;h2 id="显示列表">显示列表&lt;/h2>
&lt;h3 id="基本准备">基本准备&lt;/h3>
&lt;p>显示列表部分的内容请先阅读&amp;lt;nehe学习笔记(九)&amp;gt;的&amp;quot;显示列表&amp;quot;部分.这里我就不再对代码进行一一解读了.&lt;/p>
&lt;p>为了适应本次实验的需求,我们需要对boxcol数组进行适当修改,将原本的正方体模型数组转修改长方体,其中,顶点的绘制准则在&amp;lt;nehe学习笔记(八)&amp;gt;中有绘图进行描述.&lt;/p>
&lt;h3 id="buildlist函数填充">BuildList函数填充&lt;/h3>
&lt;p>根据&amp;lt;nehe学习笔记(九)&amp;gt;中的内容,我们可以很清楚的知道显示列表的构建规则,本部分不多赘述.&lt;/p>
&lt;p>为了模拟一个比较真实的驾驶环境,我们需要绘制一条公路,公路两边需要有草坪以免过于空旷,需要有楼房以让障碍物的出现不会很突兀.最后,因为需要突然出现一个障碍物,所以我们需要准备一个障碍物.&lt;/p>
&lt;p>这些内容将在BuildList这个函数中完成,最终显示列表的表头存放在load中.渲染的时候,需要很很严谨的控制每个坐标点的位置,绘制完成之后最好能够显示出来以方便debug.&lt;/p>
&lt;h3 id="载入纹理">载入纹理&lt;/h3>
&lt;p>在LoadGLTextures函数中,我们实现了载入图片的操作.值得注意的是,在选择纹理的滤波方式的时候,我们需要选择临近滤波&lt;em>GL_NEAREST&lt;/em>.否则会在渲染道路的时候,出现图片边界过于突兀,影响实验效果的情况.&lt;/p>
&lt;p>举个例子,在加载道路的纹理时,代码如下:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTexParameteri&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_TEXTURE_MAG_FILTER&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_NEAREST&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// scale cheaply when image bigger than texture
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glTexParameteri&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_TEXTURE_MIN_FILTER&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_NEAREST&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// scale cheaply when image smalled than texture
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">gluBuild2DMipmaps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">image1&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">sizeX&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">image1&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">sizeY&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">GL_RGB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">GL_UNSIGNED_BYTE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">image1&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>到这里基本的素材准备就已经结束了,在DrawGLScene函数中进行合理设置,我们就能够预览整个实验环境了.&lt;/p>
&lt;h2 id="基础环境绘制">基础环境绘制&lt;/h2>
&lt;h3 id="公路以及草地绘制">公路以及草地绘制&lt;/h3>
&lt;p>为了模拟比较正常的驾驶环境,我们需要搭建一条公路,公路两侧的草地,并将楼栋放置在公路两侧.&lt;/p>
&lt;p>首先是绘制公路和草地.我们首选需要绘制整整条公路,使用一个for循环,向屏幕深处绘制12块道路贴图,这样能够尽可能让道路有无尽的感觉,同时,远方出现新的道路的时候,不会显得很突兀.你可以增加层数,比如将12增加至15甚至20,用来描绘更加真实的场景.&lt;/p>
&lt;p>接下来,我们需要在公路两侧进行扩展,经过测试,我发现绘制一个12*12个单位的草坪纹理时,场景看上去便已经较为正常,在下一步运动的时候便已经不会很突兀,当然,你也可以根据你自己的需要提高场景的草坪纹理数.&lt;/p>
&lt;p>公路和草地的绘制代码如下所示.run_len是在场景运动时需要用到的变量,这里你可以认为它的值为0.0.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 绘制公路
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBindTexture&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">texture&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="nf">glLoadIdentity&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">3.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">4.0f&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">run_len&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 移动绘点
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glCallList&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">road&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="c1">// 绘制草地
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBindTexture&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">texture&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">j&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">continue&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 此部分已经绘制了公路,使用continue而非让公路覆盖这一块草地是因为需要防止使用透视渲染时,画面异常,方便将来的扩展.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glLoadIdentity&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">4.0f&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">4.0f&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">run_len&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 移动绘点
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glCallList&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">road&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 草地和道路使用同一套模型,只不过纹理不同而已.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="楼栋绘制">楼栋绘制&lt;/h3>
&lt;p>因为楼栋的绘制并不像草坪和公路那样是固定出现的物体,漏洞的出现具有一定的随机性,就像我们一处陌生的道路路上行驶的时候,并不知道什么时候会出现一栋楼.&lt;/p></description></item><item><title>虚拟驾驶环境搭建(一)</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%B8%80/</link><pubDate>Thu, 13 Jul 2017 16:14:11 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E8%99%9A%E6%8B%9F%E9%A9%BE%E9%A9%B6%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E4%B8%80/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/75073333&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/huan_jing_da_jian_yi/&lt;/p>
&lt;hr>
&lt;h1 id="综述">综述&lt;/h1>
&lt;p>本篇博客将对整个虚拟环境的搭建进行一个综述,后续将会对环境中各个功能的实现进行一一解释分析.&lt;/p>
&lt;h1 id="功能">功能&lt;/h1>
&lt;p>整个pro实现了模仿一辆车在街道上进行奔驰的场景(目前实现的是在直道上行驶,后续会加入转弯功能).项目的运行效果如图所示.&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="驾驶状态"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;h1 id="简单描述">简单描述&lt;/h1>
&lt;p>为了实现上述功能,我将整个项目大致分为如下几块.&lt;/p>
&lt;ul>
&lt;li>基本素材和环境的准备&lt;/li>
&lt;li>草地环境的搭建&lt;/li>
&lt;li>两侧楼房的搭建&lt;/li>
&lt;li>实现前进动作&lt;/li>
&lt;li>完成障碍物的出现动作&lt;/li>
&lt;li>其他系统优化&lt;/li>
&lt;/ul>
&lt;p>其中,本次项目是基于OpenGL学习(十)的项目代码进行的修改扩充,库头文件依然一致.&lt;/p>
&lt;p>纹理渲染等方式和以前如出一辙.为了提高渲染速度,我使用纹理列表将图片在程序编译的时候提前进行传渲染,以达到最快的渲染速度,提高程序时间控制的稳定性.&lt;/p>
&lt;p>事物移动方式和以前一致,通过在DrawGLScene中绘笔的起点位置,来实现物体的移动.&lt;/p>
&lt;p>后续章节我将进行详细的解释说明.&lt;/p></description></item><item><title>Socket编程小结</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/socket%E7%BC%96%E7%A8%8B%E5%B0%8F%E7%BB%93/</link><pubDate>Sat, 10 Jun 2017 15:36:19 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/socket%E7%BC%96%E7%A8%8B%E5%B0%8F%E7%BB%93/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/Michael753951/article/details/72990141&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/socketbian-cheng-xiao-jie/&lt;/p>
&lt;hr>
&lt;p>本部分内容是对之前博客&lt;a href="http://blog.csdn.net/michael753951/article/details/72553287">【 Ubuntu下进行Socket编程】&lt;/a>中的补充说明，在这篇博客中，我将详细解释Socket编程的代码，分析编程的流程和思想。&lt;/p>
&lt;p>**声明：**本部分代码分别引用自&lt;a href="http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html">【Linux C Socket编程原理及简单实例】&lt;/a>以及&lt;a href="http://blog.csdn.net/lisonglisonglisong/article/details/22699675">【Linux网络编程：socket文件传输范例】&lt;/a>。&lt;/p>
&lt;p>首先我们先分析第一份较为简单的代码，使用Socket编程完成一个两个控制台窗口之间通信的demo。&lt;/p>
&lt;h1 id="简单通信">简单通信&lt;/h1>
&lt;p>在分析之前，我推荐你先看一下这篇博客&lt;a href="http://www.cnblogs.com/dolphinX/p/3460545.html">【简单理解Socket】&lt;/a>，上面很详细的解释说明了Socket编程的过程中，服务器端和客户端分别需要调用的函数和调用流程。比如博客中下面这张图，很重要也很直观的。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="流程图"
class="image_figure image_external image_processed"
width="554"
height="327"
src="https://yaoyl.cn/images/05232335-fb19fc7527e944d4845ef40831da4ec2_17119697933846672127.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>接下来我们开始分析代码，看代码的过程中，我们需要不断回头看看上面这张流程图，方便对整个代码进行理解剖析。&lt;/p>
&lt;p>服务器端代码如下。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;sys/types.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;sys/socket.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;netinet/in.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;arpa/inet.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;unistd.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;string.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdlib.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;fcntl.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;sys/shm.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="cp">#define MYPORT 8887
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="cp">#define QUEUE 20
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="cp">#define BUFFER_SIZE 1024
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="c1">///获得sockfd
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// SOCK_STREAM 表明使用TCP协议（有序，流）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 参考地址 http://baike.baidu.com/link?url=msvzh3jij6QHrqSMUVsst9P7o0wCNRJFS2qwZ_G5uu0hBL090wOB-4Nfgv7ye2-ZlQ3ZnnR4tqueYg6ThnqXSNP6aRe371EX2dhl5uYZ_jm
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">server_sockfd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">socket&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">AF_INET&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">SOCK_STREAM&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl"> &lt;span class="c1">///定义sockaddr_in，用来表示接受方的IP地址
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="n">sockaddr_in&lt;/span> &lt;span class="n">server_sockaddr&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl"> &lt;span class="n">server_sockaddr&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">sin_family&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AF_INET&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 设置地址家族
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// htons是将整型变量从主机字节顺序转变成网络字节顺序， 就是整数在地址空间存储方式变为：高位字节存放在内存的低地址处。 参考地址：http://baike.baidu.com/link?url=QUJ7h2uCP-Fag7xTlSgVCsZyGFr-hqJuaO-L5wRHbH7ODChk-vsHwsiipqVqIiJeNf1dCz4aeJ7SEvC-324Hfa
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 绑定端口号至8887号
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">server_sockaddr&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">sin_port&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">htons&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">MYPORT&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 设置端口
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// htonl将主机数转换成无符号长整型的网络字节顺序。本函数将一个32位数从主机字节顺序转换成网络字节顺序。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// INADDR_ANY就是指定地址为0.0.0.0的地址，这个地址事实上表示不确定地址，或“所有地址”、“任意地址”。 一般来说，在各个系统中均定义成为0值。 参考地址：http://baike.baidu.com/link?url=UnkEXjpR6yhwsqWJ9d_77IzqsbEPaiO_e8WI355TORvFwpgf9zO4sQcBLilHuKxTYEOanDCWxGedtp_8-7BfVDZwyjN8ZDJDLrXitPwr49Bf5E7OwvEKHQj6EjZQHGcPU8DpDDsdeixUmYnZxgJMya
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">server_sockaddr&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">sin_addr&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">s_addr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">htonl&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">INADDR_ANY&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 设置地址
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl"> &lt;span class="c1">///bind，成功返回0，出错返回-1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">bind&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">server_sockfd&lt;/span>&lt;span class="p">,(&lt;/span>&lt;span class="k">struct&lt;/span> &lt;span class="n">sockaddr&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">server_sockaddr&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">server_sockaddr&lt;/span>&lt;span class="p">))&lt;/span>&lt;span class="o">==-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl"> &lt;span class="nf">perror&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;bind&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">37&lt;/span>&lt;span class="cl"> &lt;span class="nf">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">38&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">39&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">40&lt;/span>&lt;span class="cl"> &lt;span class="c1">///listen，成功返回0，出错返回-1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">41&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// 消息队列长度为20
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">42&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">listen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">server_sockfd&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">QUEUE&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">43&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">44&lt;/span>&lt;span class="cl"> &lt;span class="nf">perror&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;listen&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">45&lt;/span>&lt;span class="cl"> &lt;span class="nf">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">46&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">47&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">48&lt;/span>&lt;span class="cl"> &lt;span class="c1">///客户端套接字
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">49&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="n">buffer&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">BUFFER_SIZE&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">50&lt;/span>&lt;span class="cl"> &lt;span class="k">struct&lt;/span> &lt;span class="n">sockaddr_in&lt;/span> &lt;span class="n">client_addr&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">51&lt;/span>&lt;span class="cl"> &lt;span class="kt">socklen_t&lt;/span> &lt;span class="n">length&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">client_addr&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">52&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">53&lt;/span>&lt;span class="cl"> &lt;span class="c1">///成功返回非负描述字，出错返回-1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">54&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">conn&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">accept&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">server_sockfd&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="k">struct&lt;/span> &lt;span class="n">sockaddr&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">client_addr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">55&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">conn&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">56&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">57&lt;/span>&lt;span class="cl"> &lt;span class="nf">perror&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;connect&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">58&lt;/span>&lt;span class="cl"> &lt;span class="nf">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">59&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">60&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">61&lt;/span>&lt;span class="cl"> &lt;span class="k">while&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">62&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">63&lt;/span>&lt;span class="cl"> &lt;span class="nf">memset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">buffer&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">buffer&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">64&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">len&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">recv&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">conn&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">buffer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">buffer&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">65&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nf">strcmp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">buffer&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s">&amp;#34;exit&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">==&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">66&lt;/span>&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">67&lt;/span>&lt;span class="cl"> &lt;span class="nf">fputs&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">buffer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stdout&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">68&lt;/span>&lt;span class="cl"> &lt;span class="nf">send&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">conn&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">buffer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">len&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">69&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">70&lt;/span>&lt;span class="cl"> &lt;span class="nf">close&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">conn&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">71&lt;/span>&lt;span class="cl"> &lt;span class="nf">close&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">server_sockfd&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">72&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">73&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>仔细查看代码，各种参数的设置原因我已经写在注释中了，就不再赘述。稍加注意我们便可以发现服务器端代码中，依次调用了socket, bind, listen, accept, recv, close。整个流程是符合我们之前放出来的那张图的，我们在计算机网络中也学习过，5层网络模型中，socket套接字担任了应用层和网络层之间通信的任务，我们也知道了每个socket套接字会绑定一个特定的端口，从而接受这个端口传入的讯息。&lt;/p></description></item><item><title>RFID实验三总结</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/rfid%E5%AE%9E%E9%AA%8C%E4%B8%89%E6%80%BB%E7%BB%93/</link><pubDate>Tue, 23 May 2017 01:19:42 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/rfid%E5%AE%9E%E9%AA%8C%E4%B8%89%E6%80%BB%E7%BB%93/</guid><description>
&lt;blockquote>
&lt;p>一次debug到哭泣的经历。&lt;/p>&lt;/blockquote>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951
个人blog地址：http://yaoyl.cn&lt;/p>&lt;/blockquote>
&lt;p>在实验过程中，需要不断翻阅实验课PPT之**《04 电子钱包的功能》&lt;strong>，word之&lt;/strong>《实验3文档》**，以及不知名大佬的&lt;a href="http://www.tqcto.com/article/software/83894.html">课程总代码&lt;/a>，CSDN大佬吕浪的&lt;a href="http://blog.csdn.net/lv_victor/article/details/51028930">Java card开发系列文章&lt;/a>。&lt;/p>
&lt;p>本次实验和前两次实验相比，代码量多&lt;strong>很多&lt;/strong>，并且&lt;strong>实验思路稍有区别&lt;/strong>。实验之前可以不太懂实验流程（主要是因为流程本身就太复杂了），但是一定要&lt;strong>一遍又一遍阅读源代码&lt;/strong>，只有在读源码的过程中，才能体会整个验证过程，对项目中涉及到的函数方法的使用才能有一个更加深入的了解。接着自己不断重写代码，理解整个实现过程，才能对这个课程实验有较为深入的了解。&lt;/p>
&lt;p>最终的代码地址：https://github.com/LongyunYao/RFID_lab/&lt;/p>
&lt;p>&lt;strong>代码在未征得本人同意之前，请勿直接Ctrl+C，Ctrl+V，谢谢。&lt;/strong>&lt;/p>
&lt;h1 id="正式实验">正式实验&lt;/h1>
&lt;h2 id="实验分析">实验分析&lt;/h2>
&lt;p>首先我们在PPT中知道本次实验的主要需要实现的功能是：&lt;/p>
&lt;ul>
&lt;li>圈存&lt;/li>
&lt;li>消费&lt;/li>
&lt;li>余额查询&lt;/li>
&lt;/ul>
&lt;p>接下来我们开始看ppt《04 电子钱包的功能》和《实验3文档》。&lt;/p>
&lt;p>首先是圈存功能的流程图。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="圈存流程"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>流程图中我们可以分析出圈存一共有4个步骤：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>终端发送消息初始化&lt;/strong>&lt;/li>
&lt;li>&lt;strong>IC响应初始化，并且发送MAC1验证&lt;/strong>&lt;/li>
&lt;li>&lt;strong>终端验证MAC1，确认IC卡是否合法，然后发送包含MAC2的圈存命令&lt;/strong>&lt;/li>
&lt;li>&lt;strong>IC卡验证终端机的合法性，执行完成以后返回TAC响应操作完成&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>接下来我们将一步一步仔细分析圈存是如何实现的。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="圈存初始化命令"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>step1：圈存机发送的初始信息如下所示。消息中包含了&lt;strong>秘钥标识符&lt;/strong>，&lt;strong>交易金额&lt;/strong>，&lt;strong>终端机编号&lt;/strong>。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="IC卡响应圈存初始化命令"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="IC卡处理圈存初始化信息流程"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>step2：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>IC卡根据秘钥标识符寻找圈存秘钥&lt;/strong>&lt;/li>
&lt;li>&lt;strong>生成过程秘钥。输入数据为[伪随机数||电子钱包联机交易序号||8000]，秘钥为圈存秘钥，使用3DES加密算法。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>生成MAC1。输入数据为[电子钱包余额（交易前）||交易金额||交易类型标识||终端机编号]，秘钥为过程秘钥，使用我们在上一次实现的MAC生成函数gmac4，计算出MAC1用来表明身份。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>IC卡返回[余额||联机交易序列号||秘钥版本号||算法标识||伪随机数||MAC1]。&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="圈存指令"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="圈存指令流程"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>step3：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>圈存机对IC卡发挥的MAC1信息进行校验，如果正确就说明IC卡信息合法。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>计算MAC2。输入信息为[交易金额||交易类型标识||终端机编号||交易日期（主机）||交易时间（主机）]，秘钥为过程秘钥，加密算法为依然为gmac4。用来表明自己的身份。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>发送圈存指令。消息中包含[交易日期||交易时间||MAC2]。&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="圈存TAC"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="TAC"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>step4：&lt;strong>IC使用同样的算法计算MAC2，如果计算结果和终端返回的MAC2一致，就说明终端的身份合法。IC卡就会执行圈存命令。同时返回TAC。其中TAC计算时，输入数据为[电子钱包余额（交易后）||电子钱包联机交易序号（加１前）||交易金额||交易类型标识||终端机编号||交易日期（主机）||交易时间（主机）]，密钥为TAC密码最左8个字节与TAC密码最右8个字节异或的结果。&lt;/strong>&lt;/p></description></item><item><title>RFID实验二总结</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/rfid%E5%AE%9E%E9%AA%8C%E4%BA%8C%E6%80%BB%E7%BB%93/</link><pubDate>Sun, 21 May 2017 02:55:05 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/rfid%E5%AE%9E%E9%AA%8C%E4%BA%8C%E6%80%BB%E7%BB%93/</guid><description>
&lt;blockquote>
&lt;p>没见过debug还这么麻烦的。。。。&lt;/p>&lt;/blockquote>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/70307683&lt;/p>
&lt;p>个人blog地址：http://123.207.243.115:81/rfidshi-yan-er-zong-jie-2/&lt;/p>
&lt;p>在实验过程中，需要不断翻阅实验课PPT之《03 电子钱包的安全管理》，《实验3文档》，以及不知名大佬的&lt;a href="http://www.tqcto.com/article/software/83894.html">课程总代码&lt;/a>，CSDN大佬吕浪的&lt;a href="http://blog.csdn.net/lv_victor/article/details/51028930">Java card开发系列文章&lt;/a>。&lt;/p>
&lt;p>然后再自己不断重写代码，理解整个实现过程，才能对这个课程实验有较为深入的了解。&lt;/p>
&lt;p>最终的代码地址：https://github.com/LongyunYao/RFID_lab/&lt;/p>
&lt;p>&lt;strong>代码在未征得本人同意之前，请勿直接Ctrl+C，Ctrl+V，谢谢。&lt;/strong>&lt;/p>
&lt;h1 id="正式实验">正式实验&lt;/h1>
&lt;h2 id="实验分析">实验分析&lt;/h2>
&lt;p>首先我们要知道本次实验中需要修改哪些函数，实现那哪些功能。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="主要内容"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>首先我们在PPT中知道本次实验的主要目的是：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>过程密钥的生成&lt;/strong>&lt;/li>
&lt;li>&lt;strong>消息验证码MAC或交易验证码TAC的生成&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="过程秘钥的产生"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="3DES"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="MACorTAC"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="MACorTAC2"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>再看详细内容，我们大概可以捋清如下关系：&lt;/p>
&lt;ul>
&lt;li>过程密钥的生成
&lt;ul>
&lt;li>输入数据包括“伪随机数+电子钱包联机交易序列号+8000”&lt;/li>
&lt;li>子密钥指的是圈存或消费密钥&lt;/li>
&lt;li>秘钥8字节长密钥&lt;/li>
&lt;li>秘钥生成过程由3次完成
&lt;ul>
&lt;li>子秘钥左半部分&lt;strong>加密&lt;/strong>&lt;/li>
&lt;li>子秘钥有半部分&lt;strong>解密&lt;/strong>&lt;/li>
&lt;li>子秘钥左半部分&lt;strong>加密&lt;/strong>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>MAC_TAC的生成
&lt;ul>
&lt;li>数组初始化为0&lt;/li>
&lt;li>数据&lt;strong>末尾填充0x80&lt;/strong>&lt;/li>
&lt;li>数组&lt;strong>补0x00直到数组长度为8的倍数&lt;/strong>&lt;/li>
&lt;li>数组分割成数据块&lt;/li>
&lt;li>按照PPT**《03 电子钱包的安全管理》P13**的过程，生成MAC或者TAC&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>在有了大概思路以后，我们开始阅读源代码。经过简单寻找，我们发现本次实验涉及的代码大多集中在PenCipher.java中。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="PenCipher构造函数"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="des运算函数"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>基本的构造函数和对称加密des的运算函数，这部分函数在ppt上都有解释，推荐把ppt代码复制上来方便阅读和理解。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="需要填充"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>这几个函数就是我们本此实验需要填写的函数了。第一个gen_SESPK是过程秘钥生成函数，后面3个都是MAC或者TAC生成中需要使用的函数。&lt;/p>
&lt;h2 id="开始打码">开始打码&lt;/h2>
&lt;p>前面的分析中，我们已经对本次实验有了大致的了解，接下来就是开始打码的过程了。&lt;/p></description></item><item><title>RFID实验一总结</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/rfid%E5%AE%9E%E9%AA%8C%E4%B8%80%E6%80%BB%E7%BB%93/</link><pubDate>Sat, 20 May 2017 14:11:32 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/rfid%E5%AE%9E%E9%AA%8C%E4%B8%80%E6%80%BB%E7%BB%93/</guid><description>
&lt;p>刚接到这个课程项目的时候，是一脸懵逼的。毕竟是第一次接触JavaCard编程（其实就是自己没认真听课）。不过在围观各路大佬的博客之后，总算对整个项目有了较为深入的了解。&lt;/p>
&lt;p>在实验过程中，需要不断翻阅实验课PPT之《01 Java智能卡之概述》，《02 电子钱包的文件系统》，《实验2文档》，以及不知名大佬的&lt;a href="http://www.tqcto.com/article/software/83894.html">课程总代码&lt;/a>，CSDN大佬吕浪的&lt;a href="http://blog.csdn.net/lv_victor/article/details/51028930">Java card开发系列文章&lt;/a>。&lt;/p>
&lt;p>然后再自己不断重写代码，理解整个实现过程，才能对这个课程实验有较为深入的了解。&lt;/p>
&lt;p>最终的代码地址：https://github.com/LongyunYao/RFID_lab/&lt;/p>
&lt;p>代码在未征得本人同意之前，请勿直接Ctrl+C，Ctrl+V，谢谢。&lt;/p>
&lt;h1 id="正式实验">正式实验&lt;/h1>
&lt;h2 id="实验分析">实验分析&lt;/h2>
&lt;p>首先我们要知道本次实验中需要修改哪些函数，实现那哪些功能。&lt;/p>
&lt;p>首先我们在PPT最后知道本次实验的主要目的是：&lt;/p>
&lt;ul>
&lt;li>创建文件&lt;/li>
&lt;li>写秘钥&lt;/li>
&lt;li>读写二进制文件&lt;/li>
&lt;/ul>
&lt;p>再看详细内容，我们大概可以捋清如下关系：&lt;/p>
&lt;ul>
&lt;li>创建文件
&lt;ul>
&lt;li>卡片收到命令并且开始解析&lt;/li>
&lt;li>所谓的解析就是判断是何种文件，然后再进行创建&lt;/li>
&lt;li>异常处理&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>写秘钥
&lt;ul>
&lt;li>秘钥消息是一条一条接受的，每次只会写入一条秘钥&lt;/li>
&lt;li>卡片收到命令以后，取出数据，然后写入秘钥文件&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>读写二进制文件
&lt;ul>
&lt;li>写指令只需要一条&lt;/li>
&lt;li>根据指令内容获得需要的参数，然后将其写入持卡人文件或者应用文件中&lt;/li>
&lt;li>注意：写入之前需要检查数据时候超过限定大小&lt;/li>
&lt;li>读取和写类似&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>在有了大概思路以后，我们开始阅读源代码。经过简单寻找，我们发现本次实验涉及的代码大多集中在Purse.java中。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="基本元素"
class="image_figure image_external image_processed"
width="372"
height="127"
src="https://yaoyl.cn/images/e80949d0-258b-11e7-96e2-89b3087741fc_7787092408133580828.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>上面四个元素指明了我们将要操作的几个对象。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="process"
class="image_figure image_external image_processed"
width="509"
height="159"
src="https://yaoyl.cn/images/e7b2830c-258b-11e7-8911-d2b7e7fc9d0d_12307540848290659802.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>这个部分似乎用处不明。但是根据让我们填写的部分，可以看出这一块是卡片读取指令的地方，将其缓冲到papdu中，让我们得以进行后续分析。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="handleEvent"
class="image_figure image_external image_processed"
width="481"
height="210"
src="https://yaoyl.cn/images/e78315e0-258b-11e7-8c78-08555ef584ec_12537409608955670593.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>注释已经说明了，在《01 Java智能卡之概述》P30也有讲到该部分的作用，这里就是我们分析指令的地方，通过这个地方我们可以知道卡片当前接收的指令目的是什么。&lt;/p>
&lt;p>将PPT上的操作内容先填进去，具体实现我们待会再说。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="handleEventv1"
class="image_figure image_external image_processed"
width="723"
height="295"
src="https://yaoyl.cn/images/e78578a8-258b-11e7-803f-d095709449d4_3479832271068198507.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="添加INS_READ_BIN"
class="image_figure image_external image_processed"
width="790"
height="367"
src="https://yaoyl.cn/images/a3f1f2b4-258c-11e7-8164-5433dd00f23e_2002550957571907844.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>我们发现这里还需要添加读二进制的常量。&lt;/p>
&lt;p>再往下读，就是创建文件部分。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="create_file"
class="image_figure image_external image_processed"
width="472"
height="439"
src="https://yaoyl.cn/images/e8051338-258b-11e7-8a65-057b6f6674bf_12972044147358193561.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>注释和代码里已经说明，将会有4种文件可以被创建&lt;/p>
&lt;ul>
&lt;li>电子钱包文件(EP_file，这个部分已经给出)&lt;/li>
&lt;li>秘钥文件&lt;/li>
&lt;li>持卡人基本文件&lt;/li>
&lt;li>应用基本文件&lt;/li>
&lt;/ul>
&lt;p>剩下的就是圈存指令获取，初始化，以及一些其他操作，不是本次试验需要关心的部分。&lt;/p>
&lt;h2 id="开始打码">开始打码&lt;/h2>
&lt;p>前面的分析中，我们已经对本次实验有了大致的了解，接下来就是开始打码的过程了。&lt;/p>
&lt;p>我们在PPT《01 Java智能卡之概述》中已经知道了cAPDU的结构。&lt;/p></description></item><item><title>Ubuntu下进行Socket编程</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/ubuntu%E4%B8%8B%E8%BF%9B%E8%A1%8Csocket%E7%BC%96%E7%A8%8B/</link><pubDate>Fri, 19 May 2017 19:28:45 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/ubuntu%E4%B8%8B%E8%BF%9B%E8%A1%8Csocket%E7%BC%96%E7%A8%8B/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/Michael753951/article/details/72553287&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/ubuntu-xia-jin-xing-socket-bian-cheng/&lt;/p>
&lt;hr>
&lt;p>这是第一次进行网络编程，献给Ubuntu了。&lt;/p>
&lt;p>由于需要结合OpenGL搭建的虚拟环境进行实验，为了将虚拟环境中的实验参数传送至另一台PC机协同工作。我们选择使用网络编程进行数据通行。本次博客先运行两个demo体会一下利用C++进行Socket编程。&lt;/p>
&lt;h1 id="实验进行">实验进行&lt;/h1>
&lt;p>我们在本次实验中将运行两个demo，第一个demo用来进行文件传输，第二个demo用来进行窗口对话。&lt;/p>
&lt;h2 id="demo1">demo1&lt;/h2>
&lt;p>本次demo采用TCP流，demo代码来自&lt;a href="http://blog.csdn.net/lisonglisonglisong/article/details/22699675">【 Linux网络编程：socket文件传输范例 】&lt;/a>。&lt;/p>
&lt;h3 id="代码编写">代码编写&lt;/h3>
&lt;p>我们打开codeblocks，建立两个项目(project)，新建的时候选择控制台(console)程序。第一个项目命名为“TCP_client”，第二个项目命名为“TCP_server”。然后将博客中的代码拷贝进main.cpp中，ctrl+F9进行编译。&lt;/p>
&lt;p>注意，在这里当我们编译到 &lt;code>close(new_server_socket_fd);&lt;/code> 的时候，编译器会报错 &lt;code>error: ‘close’ was not declared in this scope&lt;/code>。如下图所示。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="tcp_server_error"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>我参考CSDN中&lt;a href="http://blog.csdn.net/lanyang123456/article/details/40631453">【‘close’ was not declared in this scope 】&lt;/a>添加了unistd.h库头，编译成功。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span>&lt;span class="cpf">&amp;lt;unistd.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>在TCP_server编译成功之后，我们开始编译TCP_client。同样在将客户端复制下来之后，我们首先添加unistd.h库头，接着我们直接编译。&lt;/p>
&lt;p>首先是在编译到&lt;code>if(inet_pton(AF_INET, &amp;quot;127.0.0.1&amp;quot;, &amp;amp;server_addr.sin_addr) == 0)&lt;/code>的时候，编译器报&lt;code>error: ‘inet_pton’ was not declared in this scope&lt;/code>错误如下图所示。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="tcp_client_error_1"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>我参考了CSDN中&lt;a href="http://blog.csdn.net/zdyueguanyun/article/details/51352453">【‘inet_pton’ was not declared in this scope 】&lt;/a>添加了arpa/inet.h库头。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;arpa/inet.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>再次编译的时候，依然遇到了报错。此时在编译到&lt;code>close(fp);&lt;/code>的时候报错&lt;code>error: invalid conversion from ‘FILE* {aka _IO_FILE*}’ to ‘int’ [-fpermissive]&lt;/code>。如下图所示。&lt;/p></description></item><item><title>双系统安装Ubuntu的初始化</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%8F%8C%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85ubuntu%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96/</link><pubDate>Fri, 19 May 2017 17:05:46 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%8F%8C%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85ubuntu%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/72547775&lt;/p>
&lt;p>个人blog地址：http://http://yaoyl.cn/ubuntu-huan-jing-pei-zhi/&lt;/p>
&lt;hr>
&lt;h1 id="起源">起源&lt;/h1>
&lt;p>一方面由于实验室开发的要求，另一方面由于自己想搞Linux服务器，于是在自己的电脑上装了双系统——Ubuntu 16.04 + Windows10。其中Win10是PC自身的系统，Ubuntu为后期装入，本篇博客将稍微记录一下我对整个系统的UI优化以及部分必要的软件配置。&lt;/p>
&lt;h1 id="必要软件安装">必要软件安装&lt;/h1>
&lt;h2 id="输入法">输入法&lt;/h2>
&lt;p>首先需要安装的最最重要的当然是输入法了，这里我选用的是搜狗输入法，直接从官网下载安装包即可。（Ubuntu 版本的 搜狗输入法翻页是用 - 和 = 而不是 { 和 }）另外，在Ubuntu中切换输入法的快捷键是 Ctrl + Space 。&lt;/p>
&lt;h2 id="编辑器">编辑器&lt;/h2>
&lt;p>然后是编辑器，我依然选用的是Sublime，这个网上教程很多，上官网下载安装包，激活，配置环境教程太多了。&lt;/p>
&lt;h2 id="ide">IDE&lt;/h2>
&lt;p>另外，考虑到我有C++的开发需求，我是用了网上比较推荐的 CodeBlocks ，软件安装教程网上很多。&lt;/p>
&lt;h2 id="上网">上网&lt;/h2>
&lt;p>再然后就是上网了。毕竟我们不可能永远待在实验室或者图书馆或者蹭别人的WiFi，但是很可惜的是，学校的iNode 64位版本并不好用，官方也没有相对应的安装教程，网上有一些教程，但是都是讲如何在64位Ubuntu系统中使用32位iNode进行上网验证。这种方法并不推荐，因为库依赖太多，而且很难成功，教程也是很多年以前的教程，现如今并不太适用。在和网络中心交流几天之后，他们给我推荐了一款非官方的软件 YaH3C 。详见 &lt;a href="https://github.com/humiaozuzu/YaH3C">https://github.com/humiaozuzu/YaH3C&lt;/a> 。上面有安装教程。&lt;/p>
&lt;p>需要注意的是，安装教程中，默认的网卡为 eth0 ，但是在我的电脑上其实并不是，这个问题在一开始直接导致我一直配置不好环境。后面发现应该按照控制台中显示的网卡名称进行配置，否则会出现登录异常。&lt;/p>
&lt;p>如下图所示，左边控制台中显示，我的默认网卡其实是 “enp4s0f2” ，所以在配置的时候，我就需要在网卡上填写 “enp4s0f2” 而不是教程中的 “eth0”。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="网卡"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>配置完成以后，执行&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">sudo yah3c
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>然后选择正确的网卡（我是按1），验证成功以后就能够正常上网了。&lt;/p>
&lt;h2 id="wifi">WiFi&lt;/h2>
&lt;p>在WiFi开启这个问题上，Ubuntu下面还是很好解决的，因为系统本身就支持直接进行无线网络共享，我们就不再需要安装各种乱七八糟的WiFi共享软件啦。这里我推荐一个比较靠谱的配置教程&lt;a href="http://www.cnblogs.com/weiweisuhe/p/5635298.html">【ubuntu 16.04 设置位wifi热点 方法】&lt;/a>。其他的网络教程在我的系统中并不能够配置出一个靠谱的WiFi。&lt;/p>
&lt;h1 id="ui设置">UI设置&lt;/h1>
&lt;h2 id="tweak">Tweak&lt;/h2>
&lt;p>UI方面，我使用的网上普遍推荐的 Ubuntu Tweak 进行优化，安装教程网上很多，也忘记保存书签，安装的时候可以自行搜索。&lt;/p>
&lt;p>主题方面，“GTK主题”我选择的是“Radiance”，“图标主题”我选择的是“Ultra-Flat”，“光标主题”我选择的是“DMZ-Black”，“窗口主题”我选择的是“Radiance”。&lt;/p>
&lt;p>字体方面，我的设置为，“默认字体”为“Ubuntu Regular”，“桌面字体”为“Sans Regular”，“等宽字体”为“Ubuntu Mono Regular”，“文档字体”为“Sans Regular”，“窗口标题字体”为“FreeSans Bold”，其他的可以自行调整。&lt;/p></description></item><item><title>blog的文件迁移</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/ghostblog%E7%9A%84%E6%96%87%E4%BB%B6%E8%BF%81%E7%A7%BB/</link><pubDate>Fri, 19 May 2017 02:29:18 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/ghostblog%E7%9A%84%E6%96%87%E4%BB%B6%E8%BF%81%E7%A7%BB/</guid><description>
&lt;p>因为头一次自己搭建博客服务器，对平台的选用并不清楚。知乎上误打误撞碰见了Ghost，也就用着试试看了。&lt;/p>
&lt;h2 id="事件起因">事件起因&lt;/h2>
&lt;p>由于我的服务器本来部署在自己寝室的PC上，部分blog也提前写在了本地文件夹中，无奈一直找不到文件的存放位置。所以博客的迁移一直让我头疼。&lt;/p>
&lt;h2 id="迁移过程">迁移过程&lt;/h2>
&lt;p>整个迁移过程完全按照官方手册给的知道方法来——虽然官方手册藏得比较深。&lt;/p>
&lt;p>官方手册地址：&lt;a href="https://help.ghost.org/hc/en-us/articles/224112927-Import-Export-Data">https://help.ghost.org/hc/en-us/articles/224112927-Import-Export-Data&lt;/a>&lt;/p>
&lt;p>具体步骤为：&lt;/p>
&lt;ul>
&lt;li>进入需要备份的服务器后台管理界面&lt;/li>
&lt;li>进入Labs&lt;/li>
&lt;li>选择导出成json文件&lt;/li>
&lt;li>进入需要导入的服务器的后台管理界面&lt;/li>
&lt;li>进入Labs，选择import&lt;/li>
&lt;li>可能在import的时候，选择（.所有文件），否则找不到json文件&lt;/li>
&lt;/ul>
&lt;p>另，附上Ghost的中文网址：&lt;a href="http://www.ghostchina.com/">http://www.ghostchina.com/&lt;/a>&lt;/p></description></item><item><title>OpenGL学习笔记（十）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%8D%81/</link><pubDate>Sat, 13 May 2017 16:49:22 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%8D%81/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/72810534&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/nehexue-xi-bi-ji-shi/&lt;/p>
&lt;hr>
&lt;h1 id="概述">概述&lt;/h1>
&lt;p>本部分博客将以nehe教程第2课，笔记（三）为蓝本，将Windows中完成的基础实验在Ubuntu中进行实现。&lt;/p>
&lt;p>在&lt;a href="http://yaoyl.cn/ubuntu-huan-jing-pei-zhi/">【Ubuntu环境配置】&lt;/a>中我们已经对Ubuntu中的OpenGL环境进行了配置，并且完成了最基础的茶壶demo，接下来我们将进行实验相关的后续开发。&lt;/p>
&lt;h1 id="需求分析">需求分析&lt;/h1>
&lt;p>因为实验中我们需要终端接收到的数据能够在图形界面中实时显示出来，这里我们使用nehe教程的第二课内容，绘制一个矩形作为进度条，起始为0%，最高为100%。接着我们将让这个进度条能够对传输过来的信号产生反馈。将整个过程进行拆分，我们可以按照如下步骤进行实现。&lt;/p>
&lt;ol>
&lt;li>构建一个OpenGL窗口，能够根据本地按键实现进度条控制&lt;/li>
&lt;li>让OpenGL的窗口能够接收其他终端发送过来的消息&lt;/li>
&lt;li>让OpenGL窗口对接收到的信息进行一定的实时反馈（比如进度条变换）&lt;/li>
&lt;/ol>
&lt;h1 id="实验">实验&lt;/h1>
&lt;h2 id="opengl窗口搭建">OpenGL窗口搭建&lt;/h2>
&lt;p>本次使用的代码是以nehe教程第二课中，Linux代码为蓝本，进行修改实现的。&lt;a href="http://nehe.gamedev.net/data/lessons/linux/lesson02.tar.gz">【代码链接】&lt;/a>&lt;/p>
&lt;p>首先我们将窗口显示中的三角形去掉，留下一个长方形，同时将长方形的右边两个点和左边两个点重合以做出进度条为0%的感觉。代码如下：&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="进度条代码"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;h3 id="按钮控制的实现">按钮控制的实现&lt;/h3>
&lt;p>我在初始化InitGL的时候，将square_len初始化为0，当有按键触发的时候，square_len++，这样就能够完成进度条的前进工作。&lt;/p>
&lt;p>在原始代码中，我们可以看到main函数中，有一个&lt;code>glutKeyboardFunc&lt;/code>方法，传入了&lt;code>keyPressed&lt;/code>的地址，在&lt;code>keyPressed&lt;/code>中，定义了使用&lt;code>ESC&lt;/code>按钮进行退出的方法。我们将在这里进行尝试，试试方向键左和方向键右能不能让窗口出现一些反馈。&lt;/p>
&lt;p>在经过不短的一段时间的寻找之后，我终于找到了在OpenGL中，各种按键的键值是在&lt;code>glut.h&lt;/code>中预定义好的。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="键值"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>参考一片CSDN博客&lt;a href="http://blog.csdn.net/andy20081251/article/details/38922295">【pengl键盘控制一】&lt;/a>，我们可以发现在本次程序中，ESC按键确实也刚好是27，这是不是也就意味着我们可以直接按照上面的方法进行修改了？首先我们将ESC的宏定义值修改为102(十进制，对应0x66)，尝试使用左键退出窗体程序。&lt;/p>
&lt;p>但是很意外的，没有成功。是不是按键本身的键值并不是102？&lt;/p>
&lt;p>我对代码进行进一步修改，当有按键活动的时候，记录下来当前按键的键值，将其存进本地文件中。（亲测不能直接printf，因为根本不会显示出来，至于原因待会会有解释）代码如下：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="cm">/* The function called whenever a key is pressed. */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">keyPressed&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="n">key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="cm">/* avoid thrashing this procedure */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="c1">//usleep(100);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="n">fp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nf">fopen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;key_value.txt&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;a+&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// a+意味着在文本最后追加
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">fprintf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;%d&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">key&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="nf">fclose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">fp&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="cm">/* If escape is pressed, kill everything. */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">key&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">ESCAPE&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="cm">/* shut down our window */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="nf">glutDestroyWindow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">window&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &lt;span class="cm">/* exit the program...normal termination. */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &lt;span class="nf">exit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>尝试按下F1~F12的按键，以及上下左右等按键，以及数字按键之后，我们发现txt文档中只记录下来了数字键值，根本没有其他的键值。&lt;/p></description></item><item><title>OpenGL学习笔记（九）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B9%9D/</link><pubDate>Fri, 12 May 2017 18:00:15 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B9%9D/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/71750809&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/nehexue-xi-bi-ji-jiu/&lt;/p>
&lt;hr>
&lt;h1 id="前言">前言&lt;/h1>
&lt;p>本次笔记为nehe课程第11课的学习内容，通过实验，我们可以利用正弦函数绘制一个舞动的旗帜。在本次课程中，我们也将学习OpenGL中glPolygonMode函数对一个模型的正面和反面进行不同模式的绘图。&lt;/p>
&lt;h2 id="glpolygonmode-函数介绍">glPolygonMode 函数介绍&lt;/h2>
&lt;p>本部分内容请先查看前人整理的博客&lt;a href="http://www.cnblogs.com/Clingingboy/archive/2010/10/18/1854255.html">【OpenGL学习笔记(7)多边形绘制】&lt;/a>。请先仔细阅读该博客，理解如何区分模型中的正面反面（依然遵守右手定则，由描点的方向决定），以及3种填充方式（fill，line point）。&lt;/p>
&lt;h1 id="代码分析">代码分析&lt;/h1>
&lt;p>好了，到这里新的基本知识就已经讲述完毕了，我们看看作者是如何实现一个舞动的旗帜的。（基本的代码我就不分析了，只挑重点）&lt;/p>
&lt;p>InitGL中，在设置完纹理和透视的init之后，我们将插入glPolygonMode方法进行正反不同方式填充（以此从直观上区分正反面）。然后完成45*45个点阵的绘制。&lt;/p>
&lt;p>绘制中，作者将45*45个点阵均匀分布到一个长为9个单位，宽为9个单位，并且中点放置在原点上的正方形中（通过-4.5将中点移动到原点）。Z轴上，作者绘制了一个以x为自变量的正弦函数（刚好一个周期，至于为什么需要一个周期，在看完本篇博客之后你将会有答案）。&lt;/p>
&lt;p>接下来DrawGLScene开始进行图像旋转。这里我注释掉了作者的沿y轴和z轴旋转，仅仅保留沿x轴旋转，以方便观察。模型绘制和纹理绑定部分我不分析了，已经是很经典的代码了，就是利用45*45个点阵绘制44*44个正方形而已。&lt;/p>
&lt;p>接下来就是本此实验的重点了。一个if判断，这个判断实现了旗帜的舞动。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="n">wiggle_count&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">45&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="o">++&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="n">hold&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">points&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">44&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="n">points&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">points&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="n">points&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">44&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">hold&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="n">wiggle_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>仔细阅读代码我们可以发现，作者通过wiggle_count计数，每两帧画面，就将45*45点阵中的z值向左移动一位，最左边的z值放到最右边，实现循环。所以整个if实现的就是将一个正弦波向左移动，这也就是为什么我们在实验中旗帜的挥动，波纹向左走的原因。&lt;/p>
&lt;p>剩下的代码就不用怎么解释了，都是和以前一样的代码了。&lt;/p>
&lt;p>回到一开始的问题，为什么在设置45*45点阵的z值的时候，要使用2*pi将正弦波控制在一个周期。可不可以乘以n*pi，或者2*n*pi，或者其他值。（提示，if条件中左移的时候，左端点会被移动到右端，此时这个端点有可能是一个突变点造成波形尖锐或者畸形）。&lt;/p>
&lt;p>最后附上效果图，首先是作者源代码的运行结果。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="section9.1"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>然后是经过我注释掉y轴旋转，z轴旋转以及注释掉了整个if判断之后的图像。我们发现这个时候图像已经不能飘动了，而且上下两个边界呈现一种标准的正弦波的形式。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="section9.2"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>最后是没有注释if，单单注释掉y轴旋转和z轴旋转的图像。喜事已经能够正常的飘动了。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="section9.3"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;h1 id="显示列表">显示列表&lt;/h1>
&lt;p>nehe教程第12课显示列表。&lt;/p>
&lt;p>该课程主要讲解了glGenLists的使用样例。在使用之前，我们可以了解一下使用glGenLists能给你程序性能所带来的好处。这部分只是我们可以参考&lt;a href="http://blog.csdn.net/dcrmg/article/details/53133112">【OpenGL（八） 显示列表】&lt;/a>以及&lt;a href="http://www.cnblogs.com/yxnchinahlj/archive/2010/11/19/1881426.html">【OpenGL显示列表】&lt;/a>&lt;/p>
&lt;p>本次课程需要使用的光、材质和光照模型，就比较符合glGenLists的使用环境。&lt;/p>
&lt;p>我们来看看课程代码，作者首先定义了两个二位数组，boxcol用来存放立方体除了top之外，其他所有面的5种取，topcol用来存放立方体的顶部颜色。&lt;/p>
&lt;p>接下来作者定义了BuildLists方法，在这个方法中，作者使用了本次课程的核心——显示列表。使用方法大致如下。&lt;/p>
&lt;ul>
&lt;li>首先调用glGenListst生成一个显示列表（连续地址的数组形式），本次实验中作者生成了包含2个元素的数组，返回数组的首地址给box（不过定义的时候并没有定义成指针，有些奇怪）&lt;/li>
&lt;li>接着作者使用glNewList和glEndList定义显示列表中的每一个元素。
&lt;ul>
&lt;li>在GLNewList方法中，作者传入了box指向的第一个显示元素，同时传入了一个参数GL_COMPILE。（注意：按照【OpenGL显示列表】中所告诉我们的知识，glNewList的函数原型为&lt;code>void glNewList(GLuint list,GLenum mode);&lt;/code>说明一个显示列表的开始，其后的OpenGL函数存入显示列表中，直至调用结束表的函数（见下面）。参数list是一个正整数，它标志唯一的显示列表。参数mode的可能值有GL_COMPILE和GL_COMPILE_AND_EXECUTE。若要使后面的函数语句只存入而不执行，则用GL_COMPILE；若要使后面的函数语句存入表中且按瞬时方式执行一次，则用GL_COMPILE_AND_EXECUTE。）&lt;/li>
&lt;li>glNewList和glEndList中间定义矩阵的语句我这里就不再分析，和之前一样。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>定义完显示列表中第一个元素之后，定义第二个元素时，需要将数组头指针向后移一位，所以代码中会有&lt;code>top=box+1;&lt;/code>一行。&lt;/li>
&lt;/ul>
&lt;p>接着本次实验中作者修改了InitGL方法，他在Init的最后几行中，调用了3个glEnable方法，打开了GPU默认的灯光(GL_LIGHT0)，自定义的灯光(GL_LIGHTING)，以及颜色纹理(GL_COLOR_MATERIAL)，注意，如果不激活颜色纹理的话，在我们DrawGLScene中，将只能够贴上图片纹理，但是无法再往上添加颜色纹理（即之后的glColor3fv失效）。&lt;/p></description></item><item><title>OpenGL学习笔记（八）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%85%AB/</link><pubDate>Fri, 12 May 2017 03:28:48 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%85%AB/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/71702311&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/nehexue-xi-bi-ji-ba/&lt;/p>
&lt;hr>
&lt;h2 id="前言">前言&lt;/h2>
&lt;p>本部分单独讲Lesson10的内容，本次讲述重点将不再是作者在代码中各种方法如何如何调用，比如如何实现旋转，如何绘制图像，如何实现透明，如何实现步进等等，这个在我前面7篇笔记中已经有详细的说明了，本篇笔记将不再重复，如果有什么疑问可以翻我之前的笔记或者上网查询。&lt;/p>
&lt;p>本次实验参变量不少，作者通过代码带我们真正的实现了一个3D世界，我们可以在这个3D世界里面自由的走动和观察。（也是我们玩的譬如《我的世界》这样的第一视角游戏的世界构建的基本）&lt;/p>
&lt;p>文中给出了几个数据结构——tagVERTEX，tagTRIANGLE，tagSECTOR。vertex用来存放每一个坐标点的空间直角坐标系中的位置（x, y, z）和需要展示的图像的位置（u, v），trandgle表示三角形中存在的3个点，包含3个tagVERTEX（事实上，现今大多数人都是用无数这样的三角形来近似/逼近一个曲面），然后sector表示一个由许多三角形构成的体的结构。文中，所有的与体相关的三角形都放在一个文件中，通过读写文件来对体进行操作。&lt;/p>
&lt;h2 id="代码分析">代码分析&lt;/h2>
&lt;p>好了，大致的介绍已经完成，我们接着看看作者是如何一步一步完成这个3D世界的建设的。（晚上课程中已经解释的地方我这里不再重复，而还未解释清楚的地方我将重点解释）&lt;/p>
&lt;p>作者首先定义了一个readstr方法，用来读取文件f中的内容，将其读进string指向的内存空间。接着定义了一个SetupWorld方法，将&amp;quot;data/world.txt&amp;quot;中的内容调用readstr方法读取内容，并将其写进 tagSECTOR 类的变量 sector1 中，关于txt中数据格式需要在这里说明一下——每一行代表一个坐标点的信息，包含5个变量，分别为该点的x轴坐标、y轴坐标、z轴坐标、该点对应的渲染图片的点的x坐标，该点对应的渲染图片的点的y坐标。每3行（即3个点）构成一个3角形。前3个变量各位可能还有印象，后两个点可以回去看看《nehe学习笔记（五）》，找找&lt;code>glTexCoord2f&lt;/code>方法的说明。&lt;/p>
&lt;p>然后是和以前一样的LoadBMP以及LoadGLTextures方法。InitGL方法中，打开纹理映射和深度测试，同时调用之前定义好的SetupWorld方法读入所有三角形的信息。&lt;/p>
&lt;p>接下来就是第一个重头戏DrawGLScene了，所有的动作都是在这里展示出来的，理解这一块的知识对我们将来自己构建3D世界有莫大的帮助。&lt;/p>
&lt;p>该部分首先定义了5个浮点数x_m, y_m, z_m, u_m, v_m，分别用来对应tagVERTEX中的5个5种元素。使用xtrans &amp;amp; ytrans &amp;amp; ztrans 分别表示画笔起笔处的x坐标 &amp;amp; y坐标 &amp;amp; z坐标（也就是说在glTranslatef中将被用到。），接着定义了xtrans &amp;amp; ztrans &amp;amp; ytrans，这三个值决定了画笔起点沿X轴、Y轴、Z轴移动的长度，也即决定了画笔的起点位置（也即整张地图的位置），sceneroty则据定了角色的视觉角度。&lt;/p>
&lt;p>变量中我们需要注意，本次实验中，沿着某轴移动的长度通常以 pos 结尾作为变量，而旋转的角度通常以 ros 结尾作为变量，谨记这一点对我们后期按键控制的理解会有帮助。&lt;/p>
&lt;p>接着作者调用两次glRotatef，先将图像沿着x轴旋转一定角度(lookupdown)，完成抬头动作，再将图像沿着y轴旋转一定角度(sceneroty)，完成正面朝向的转换。&lt;/p>
&lt;p>现在我们已经确定了抬头角度和视角，接下来就要设定你现在所处的位置了——其实就是反方向移动整个3D模型即可，这也就是为什么在trans赋值的时候，会取负数的原因。&lt;/p>
&lt;p>在上一步骤调用glTranslatef已经绘点结束之后，我们将开始进行图像绘制，这个部分就不细说了。我对文本中前3行（第一个三角形）标稍作图解，剩下的你可以自己尝试继续绘制。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="坐标系"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>到这一步，绘制完成，接下来的KillGLWindow以及CreateGLWindow以及WndProc和之前一致，不解释。&lt;/p>
&lt;p>第二个重头戏来了，WinMain。这个部分我们将实现通过按键控制你在整个3D世界中的游荡（其实是在控制整个3D世界移动）。下面我将仔细解释。&lt;/p>
&lt;p>B键设置透明，这个之前笔记解释过，&lt;strong>记得disable深度测试，然后enable透明&lt;/strong>。F键设置画质，不解释了。&lt;/p>
&lt;p>接下来是按up键，这个时候首先会更改xpos和zpos，为什么会如此修改，期初我也很疑惑，不过在画了一张图解之后，便豁然开朗了。我们根据代码可以知道heading这个变量代表了你当前正脸朝向与Z轴正向的角度（因为heading赋值给了yrot，而yrot是绕着y轴旋转的角度，所以heading就是你转身的角度啦）。&lt;/p>
&lt;p>通过下图我们便可以知道为什么使用UP键向前走的时候，作者使用如下两行代码实现移动了。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="up&amp;amp;amp;amp;down"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">xpos&lt;/span> &lt;span class="o">-=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">float&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="nf">sin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">heading&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">piover180&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mf">0.05f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="n">zpos&lt;/span> &lt;span class="o">-=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">float&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="nf">cos&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">heading&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">piover180&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="mf">0.05f&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>接着作者在pos变换完成以后，稍稍微修改walkbias变量，它将影响到ypos，从而模仿人行走的时候的高低起伏，让人更加自然。&lt;/p>
&lt;p>接下来的 left, right, page_up &amp;amp; page_down 按键的反馈设置就基本不用解释啦，你按照右手定则稍稍为跟着做一下就能够理解啦。需要注意的是，在WinMain中，所有的pos和trans都是从观察者的角度进行变换的，真正的变换是在DrawGLScene，在DrawGLScene方法中我们已经对数据做了特殊处理以保证显示正常自然。&lt;/p>
&lt;p>好了，到这里本章节的代码也就解释完毕了，粗读代码会觉得很容易，因为都是我们之前已经掌握的内容，但是细想作者是如何一步一步具体实现的时候，情况就会复杂很多。通过不断画图和翻以前的代码，我才不断的深入理解整个OpenGL的原理，以及3D模型的构建原理和过程。至此，OpenGL应该算是正式入门了吧。&lt;/p>
&lt;p>稍稍留一个小问题，你知道为什么作者在DrawGLScene方法中，xtrans直接赋值为xpos的负值，ztrans同样直接赋值为zpos的负值，sceneroty也是直接取了yrot的负值（不过为了严谨，又添了一个360作为进位），偏偏ytrans要在赋值为walkbias的负值之后，还要减去一个0.25呢？（提示，walkbias乘上sin之后有正有负，如果不添加一个常数，你的“眼睛”就会在地板所在的y=0面上不断上下抖动，而添加0.25之后，则是将你的“眼睛”提高到了一定的高度，让你有了身高的感觉，从而更加自然）&lt;/p></description></item><item><title>OpenGL学习笔记（七）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%83/</link><pubDate>Tue, 09 May 2017 20:59:35 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%83/</guid><description>
&lt;p>龙云尧个人博客，转载请注明出处。&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/71511785&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/nehexue-xi-bi-ji-qi-2017-05-09-20-59/&lt;/p>
&lt;hr>
&lt;p>我们在前六个部分已经尝试了nehe教程中1-8可得所有内容，接下来第七部分将实现一个简单的实验，这个实验将涵盖前面所有的内容，以作为一个前期总结。&lt;/p>
&lt;h2 id="前期准备">前期准备&lt;/h2>
&lt;p>在实验之前，我们需要知道一个OpenGL中的基本概念。OpenGL中glEnable方法的使用。关于这个功能函数的使用以及参数设定，你可以点击&lt;a href="http://blog.csdn.net/liguangzhenghi/article/details/8166350">【gl.glenable()介绍】&lt;/a>以及&lt;a href="http://blog.csdn.net/huutu/article/details/20872525">【glEnable(GL_DEPTH_TEST) 有什么用？】&lt;/a>进行查看。以下关于glenable的内容转载自上述第二篇博客。&lt;/p>
&lt;hr>
&lt;p>在InitGL() 或者类似的初始化OpenGL的地方，会有glEnable(GL_DEPTH_TEST);&lt;/p>
&lt;p>启用了之后，OpenGL在绘制的时候就会检查，当前像素前面是否有别的像素，如果别的像素挡道了它，那它就不会绘制，也就是说，OpenGL就只绘制最前面的一层。&lt;/p>
&lt;p>当我们需要绘制透明图片时，就需要关闭它
glDisable(GL_DEPTH_TEST);
并且打开混合
glEnable(GL_BLEND);&lt;/p>
&lt;p>而且还需要设置使用的透明度
glColor4f(1.0f,1.0f,1.0f,0.5f);
这样就是一半的显示了，设置为1就是不透明&lt;/p>
&lt;p>glBlendFunc(GL_SRC_ALPHA,GL_ONE);
基于源像素Alpha通道值的半透明混合函数&lt;/p>
&lt;hr>
&lt;p>在实验一以及后续的几个实验中，我们Enable的都是传入GL_DEPTH_TEST作为参数启用深度测试。并立刻在glEnable方法后面调用glDepthFunc(GL_LEQUAL);方法进行前景像素的显示设置。&lt;/p>
&lt;p>这个概念在之前的实验中有所涉及，但是我们当时没有关注，这里我们将将其单独拿出来进行分析。**本部分以下部分均为转载。**转载来源为&lt;a href="http://blog.csdn.net/u012463389/article/details/50748128">【glDepthFunc】&lt;/a>&lt;/p>
&lt;p>函数原型：&lt;/p>
&lt;pre>&lt;code>void glDepthFunc(GLenum func);
&lt;/code>&lt;/pre>
&lt;p>函数功能：&lt;/p>
&lt;pre>&lt;code>指定“目标像素与当前像素在z方向上值大小比较”的函数，符合该函数关系的目标像素才进行绘制，否则对目标像素不予绘制。
&lt;/code>&lt;/pre>
&lt;p>参数说明：&lt;/p>
&lt;pre>&lt;code>func指定深度比较函数，GL_NEVER,GL_LESS,GL_EQUAL,GL_LEQUAL,GL_GREATER,GL_NOTE_QUAL,GL_GEQUAL,GL_ALWAYS,缺省值GL_LESS，
&lt;/code>&lt;/pre>
&lt;p>GL_NEVER,不通过（输入的深度值不取代参考值）&lt;/p>
&lt;p>GL_LESS,如果输入的深度值小于参考值，则通过&lt;/p>
&lt;p>GL_EQUAL,如果输入的深度值等于参考值，则通过&lt;/p>
&lt;p>GL_LEQUAL,如果输入的深度值小于或等于参考值，则通过&lt;/p>
&lt;p>GL_GREATER,如果输入的深度值大于参考值，则通过&lt;/p>
&lt;p>GL_NOTE_QUAL,如果输入的深度值不等于参考值，则通过&lt;/p>
&lt;p>GL_GEQUAL,如果输入的深度值大于或等于参考值，则通过&lt;/p>
&lt;p>GL_ALWAYS,总是通过（输入的深度值取代参考值）&lt;/p>
&lt;p>描述：&lt;/p>
&lt;pre>&lt;code> 通过目标像素与当前像素在z方向上值大小的比较是否满足参数指定的条件，来决定在深度（z方向）上是否绘制该目标像素。该函数只有启用“深度测试”时才有效，参考glEnable(GL_DEPTH_TEST)和glDisable(GL_DEPTH_TEST)
&lt;/code>&lt;/pre>
&lt;h2 id="代码分析">代码分析&lt;/h2>
&lt;p>前期准备能够帮助我们更好的理解作者在代码中的方法调用，，也能帮助我们更加深入的了解OpenGL的运行机制。我们接下来探讨本次实验中的实现方式。&lt;/p>
&lt;p>根据Lesson1课程给我们大基建好的框架结构以及我们整理出来的那张结构图，我们可以快速理解本次实验代码。&lt;/p>
&lt;p>首先定义了一个stars结构体，用来存放每一个星星的RGB值，与中心点的距离以及选装角度。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="k">typedef&lt;/span> &lt;span class="k">struct&lt;/span> &lt;span class="c1">// Create A Structure For Star
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Stars Color
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">GLfloat&lt;/span> &lt;span class="n">dist&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1">// Stars Distance From Center
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">angle&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Stars Current Angle
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">&lt;span class="n">stars&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">&lt;span class="n">stars&lt;/span> &lt;span class="n">star&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">num&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// Need To Keep Track Of &amp;#39;num&amp;#39; Stars
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>接着是LoadBMP和LoadGLTextures，这个和以前的实验代码无异，只需要改一下读入的文件名即可。ReSizeGLScene函数同样不需要修改。&lt;/p></description></item><item><title>OpenGL学习笔记（六）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%85%AD/</link><pubDate>Mon, 08 May 2017 13:54:19 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%85%AD/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/71407260&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/nehexue-xi-bi-ji-liu-2017-05-08-13-54/&lt;/p>
&lt;hr>
&lt;h1 id="混合">混合&lt;/h1>
&lt;p>我们在很多场合都过这样的经历，在设置某些色块的颜色的时候，我们不光要设置它的RGB值，还可能需要设置它的Alpha值。一般理解上，我们都认为这个Alpha值代表了当前色块的透明度。这样只是最外在的理解，其实图像的透明是一个颜色的混合过程，当有两种颜色混叠的时候，这个Alpha是用来控制两种颜色的混色程度的一种值。&lt;/p>
&lt;p>颜色的混合公式为(Rs*As + Rd (1 - As), Gs*As + Gd (1 - As), Bs*As + Bs (1 - As), As*As + Ad (1 - As))。其中As表示前景色的Alpha值，Rs表示前景色的R值，Rd表示背景色的R值，Gs &amp;amp; Gd，Bs &amp;amp; Bd类似。最终计算出来的RGB值就是混合之后显示出来的RGB值。&lt;/p>
&lt;p>举个例子，我们已经知道背景色是（255,255,255），现在有一个（128,128,128）的色块需要层叠在背景色块之上，并且我们先假设Alpha值为1.0，那我们很容易计算出来最终的显示的RGB值为（128,128,128），这个时候我们就从直观上认为前景色完全不透明。而如果Alpha为0.0，计算结果显然为（255,255,255），这个时候我们就认为前景色完全透明。其他的Alpha值类似。&lt;/p>
&lt;p>当我们有多张图片需要层叠的时候，并且每一层都有一个Alpha值的时候，我们需要怎么计算呢？&lt;/p>
&lt;p>从我们的直观上可以想象出来，当我们在看一堆颜色混合而成的颜色的时候，首先是离我们最近的pic1作为前景，其后面的pic2-picn糊混合结果作为背景，混合出来的结果。而pic2-picn是如何混合的呢？它是由pic2作为前景，pic3-picn混合结果作为背景混合出来的结果。如此递归下去知道最后两张图片混合完成。&lt;/p>
&lt;p>好了，到这里我们应该很了解在OpenGL中颜色混合的原理了。接下来动手试试。&lt;/p>
&lt;p>首先需要修改LoadGLTextures方法中的文件名，因为本次实验使用的是一张新的位图。将&lt;code>&amp;quot;Data/Crate.bmp&amp;quot;&lt;/code>改成&lt;code>&amp;quot;Data/glass.bmp&amp;quot;&lt;/code>即可。&lt;/p>
&lt;p>然后我们需要修改InitGL方法。在使用glEnable(GL_LIGHT1);激活光源之后，我们添加新的两行glColor4f和glBlendFunc方法。&lt;/p>
&lt;p>不过需要注意的是，在使用glColor4f以全亮度进行绘制的时候，它会和光照系统glLightfv产生的效果互相排斥。具体的排斥方式请参看&lt;a href="http://blog.csdn.net/tmljs1988/article/details/6445100">【 opengl纹理,光照,glColor4f(),混合】&lt;/a>.&lt;/p>
&lt;p>另外在glBlendFunc中，为什么会取GL_SRC_ALPHA,GL_ONE，以及GL_SRC_ALPHA,GL_ONE这两个参数会对最终的效果产生什么影响。我们可以参考&lt;a href="http://blog.csdn.net/aurora_mylove/article/details/1700540">【 颜色混合opengl】&lt;/a>&lt;/p>
&lt;p>最后，我们修改WinMain就能够结束本次实验。接着上一次实验的代码.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">keys&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">VK_LEFT&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="c1">// Left方向键按下了么?
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> &lt;span class="n">yspeed&lt;/span>&lt;span class="o">-=&lt;/span>&lt;span class="mf">0.01f&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// 若是, 减少yspeed
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>我们增加如下的代码。这几行监视B键是否按下。如果是的话，计算机检查混合选项是否已经打开。然后将其置为相反的状态。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="c1">// Blending Code Starts Here
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">keys&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="sc">&amp;#39;B&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">bp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl"> &lt;span class="n">bp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TRUE&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="n">blend&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">blend&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">blend&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="nf">glEnable&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_BLEND&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Turn Blending On
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glDisable&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_DEPTH_TEST&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Turn Depth Testing Off
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="nf">glDisable&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_BLEND&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Turn Blending Off
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glEnable&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_DEPTH_TEST&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Turn Depth Testing On
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">keys&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="sc">&amp;#39;B&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl"> &lt;span class="n">bp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">FALSE&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl"> &lt;span class="c1">// Blending Code Ends Here
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>到这里本次课程就结束了，我们试着按下B键查看透视效果怎样，另外我们还可以看看当前代码下，打开光源和不打开光源下，按下B键查看透视效果会有什么区别。思考为什么（光源和glColor4f的冲突）。&lt;/p></description></item><item><title>OpenGL学习笔记（五）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%BA%94/</link><pubDate>Sun, 07 May 2017 12:21:47 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%BA%94/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/71316132&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/nehexue-xi-bi-ji-wu/&lt;/p>
&lt;hr>
&lt;p>这次我们将尝试Lesson6和Lesson7的内容。这个部分我们将学习怎么给一个模型进行纹理映射（其实就是贴图）。&lt;/p>
&lt;h2 id="环境搭建">环境搭建&lt;/h2>
&lt;p>这次实验因为需要使用OpenGL的glaux.h库头使用位图对构建的图形进行纹理映射。所以我们需要进一步进行环境搭建。（注：环境搭建很麻烦，因为微软的VS环境很乱）&lt;/p>
&lt;p>如何布置这个库头可以参考&lt;a href="http://blog.csdn.net/delphiwcdj/article/details/6326586/">【 VS2008无法打开gl/glaux.h头文件的解决方法】&lt;/a>我使用的是方法4，测试能够正确include库头。&lt;/p>
&lt;p>在高版本的VS中，因为VS使用的是自己重新修改过的C++，所以在进行编译的过程中，可能会出现ERROR LNK2019报错，无法解析“_sscanf,_sscanf_s”，这个时候我们可以参考&lt;a href="http://blog.csdn.net/u010317005/article/details/51155363">【 VS2015 无法解析的外部符号 __vsnwprintf_s】&lt;/a>&lt;/p>
&lt;p>如果我们在使用AUX_RGBImageRec定义变量的时候，系统没有报错的话，就说明我们本次基本的环境已经搭建好了。&lt;/p>
&lt;p>另外，因为我们在实验中需要使用fopen，而微软的VS2015中会强行报错，为了避免不必要的麻烦，我们需要关掉fopen的报错。这个部分我们可以参考&lt;a href="http://jingyan.baidu.com/article/ce436649fd61543773afd32e.html">【百度经验：VS2013中如何解决error C4996: 'fopen'问题】&lt;/a>&lt;/p>
&lt;h2 id="开始实现">开始实现&lt;/h2>
&lt;p>如果没出什么问题的话，到这里我们应该能够正常的编写这一刻的代码了。（如果还有什么报错请尝试自行解决或者戳我）。&lt;/p>
&lt;p>本次需要在3维图像上添加纹理映射，首先需要的是读取位图像文件。读取的代码如下。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="n">AUX_RGBImageRec&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="nf">LoadBMP&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">char&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">Filename&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// Loads A Bitmap Image
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="n">FILE&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">File&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">NULL&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// File Handle
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="n">Filename&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// Make Sure A Filename Was Given
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// If Not Return NULL
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="n">File&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nf">fopen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Filename&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s">&amp;#34;r&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Check To See If The File Exists
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">File&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// Does The File Exist?
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl"> &lt;span class="nf">fclose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">File&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Close The Handle
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nf">auxDIBImageLoad&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Filename&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Load The Bitmap And Return A Pointer
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// If Load Failed Return NULL
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">LoadGLTextures&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="c1">// Load Bitmaps And Convert To Textures
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">Status&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">FALSE&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Status Indicator
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl"> &lt;span class="n">AUX_RGBImageRec&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// Create Storage Space For The Texture
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl"> &lt;span class="nf">memset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">TextureImage&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Set The Pointer To NULL
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl"> &lt;span class="c1">// Load The Bitmap, Check For Errors, If Bitmap&amp;#39;s Not Found Quit
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nf">LoadBMP&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Data/NeHe.bmp&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl"> &lt;span class="n">Status&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">TRUE&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Set The Status To TRUE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl"> &lt;span class="nf">glGenTextures&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">texture&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]);&lt;/span> &lt;span class="c1">// Create The Texture
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl"> &lt;span class="c1">// Typical Texture Generation Using Data From The Bitmap
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">37&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBindTexture&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">texture&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">38&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTexImage2D&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">sizeX&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">sizeY&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">GL_RGB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">GL_UNSIGNED_BYTE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">39&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTexParameteri&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_TEXTURE_MIN_FILTER&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_LINEAR&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">40&lt;/span>&lt;span class="cl"> &lt;span class="nf">glTexParameteri&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TEXTURE_2D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_TEXTURE_MAG_FILTER&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">GL_LINEAR&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">41&lt;/span>&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">42&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">43&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">])&lt;/span> &lt;span class="c1">// If Texture Exists
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">44&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">45&lt;/span>&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// If Texture Image Exists
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">46&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">47&lt;/span>&lt;span class="cl"> &lt;span class="nf">free&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">-&amp;gt;&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Free The Texture Image Memory
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">48&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">49&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">50&lt;/span>&lt;span class="cl"> &lt;span class="nf">free&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">TextureImage&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]);&lt;/span> &lt;span class="c1">// Free The Image Structure
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">51&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">52&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">53&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">Status&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Return The Status
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">54&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>第一个函数LoadBMP不需要解释，主要功能就是探寻目的位置中是否存在该图像文件。如果存在就调用auxDIBImageLoad将位图加载成渲染文件返回出来。&lt;/p></description></item><item><title>OpenGL学习笔记（四）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%9B%9B/</link><pubDate>Sun, 07 May 2017 12:20:57 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E5%9B%9B/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/71316089&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/nehexue-xi-bi-ji-si/&lt;/p>
&lt;hr>
&lt;h2 id="图像旋转">图像旋转&lt;/h2>
&lt;p>接下来我们将学习图像旋转。图像的旋转通过调用glRotatef(Angle,Xvector,Yvector,Zvector)实现。Angle表示旋转角度（注意是角度不是弧度），Xvector表示沿X轴旋转，Yvector表示沿着Y轴旋转，Zvector表示沿着Z轴旋转。注意旋转角度和RGB设置不一样，RGB的范围是0.0f-1.0f，而角度旋转的范围是0.0f-360.0f(其实可以超过360.0f，不过为了避免溢出我们应该将其做一个约束)。&lt;/p>
&lt;p>图像的旋转方向遵循右手定则，即右手握住旋转的轴，右手大拇指朝向轴的正方向，那么你右手其他手指所朝的方向便为正方向。&lt;/p>
&lt;p>为了实现图像的旋转，我们将尝试调用一个glRotatef方法。&lt;/p>
&lt;p>首先我们还是在DrawGLScene方法中，通过glTranslatef确定绘点以后，我们就可以插入glRotatef(rtri, 0.0f, 0.0f, 1.0f)来绕着Z轴旋转。为此我们需要定义一个GLfloat类型的全局变量rtri。同时在DrawGLScene方法结束之前我们需要不断改变rtri的值来实现图像的旋转工作。&lt;/p>
&lt;p>最终的参考代码如下（注意需要自己定义一个全局变量rtri）。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">DrawGLScene&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GLvoid&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// 从这里开始进行所有的绘制
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="nf">glClear&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_COLOR_BUFFER_BIT&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">GL_DEPTH_BUFFER_BIT&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 清除屏幕和深度缓存
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glLoadIdentity&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// 重置当前的模型观察矩阵
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//当您调用glLoadIdentity()之后，您实际上将当前点移到了屏幕中心，X坐标轴从左至右，Y坐标轴从下至上，Z坐标轴从里至外。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//中心左面的坐标值是负值，右面是正值。移向屏幕顶端是正值，移向屏幕底端是负值。移入屏幕深处是负值，移出屏幕则是正值。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="c1">//glTranslatef(x, y, z)沿着 X, Y 和 Z 轴移动。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//根据前面的次序，下面的代码沿着X轴左移1.5个单位，Y轴不动(0.0f)，最后移入屏幕6.0f个单位。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//注意在glTranslatef(x, y, z)中当您移动的时候，您并不是相对屏幕中心移动，而是相对与当前所在的屏幕位置。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.5f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">6.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 左移 1.5 单位，并移入屏幕 6.0
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glRotatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rtri&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Rotate The Triangle On The Y axis ( NEW )
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//glBegin(GL_TRIANGLES)的意思是开始绘制三角形，glEnd() 告诉OpenGL三角形已经创建好了。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//本节的简单示例中，我们只画一个三角形。如果要画第二个三角形的话，可以在这三点之后，再加三行代码(3点)。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBegin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TRIANGLES&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Drawing Using Triangles
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//接下来的一行代码设置三角形的第一个顶点(三角形的上顶点)，并使用当前颜色(红色)来绘制。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glColor3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 设置当前色为红色
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Top
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glColor3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 设置当前色为绿色
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Left
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">21&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glColor3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// 设置当前色为蓝色
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">22&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Right
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">23&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glEnd&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// Finished Drawing The Triangle
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">24&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//在屏幕的左半部分画完三角形后，我们要移到右半部分来画正方形。为此要再次使用glTranslate。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">25&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">3.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Move Right 3 Units
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">26&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//现在使用GL_QUADS绘制正方形。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">27&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBegin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_QUADS&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Draw A Quad
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">28&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//glColor3f(1.0f, 0.0f, 0.0f); // 将当前色设置为蓝色
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">29&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Top Left
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">30&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Top Right
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">31&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">//glColor3f(0.0f, 0.1f, 0.0f); // 将当前色设置为蓝色
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">32&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Right
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">33&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Left
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">34&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glEnd&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// Done Drawing The Quad
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">35&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">rtri&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mf">0.2f&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Increase The Rotation Variable For The Triangle ( NEW )
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">36&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">TRUE&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Everything Went OK
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">37&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>实现的效果如下图所示。&lt;/p></description></item><item><title>OpenGL学习笔记（三）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%89/</link><pubDate>Wed, 03 May 2017 15:14:09 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%89/</guid><description>
&lt;p>第二课和第三课内容为三角形和矩形的颜色渲染内容，通过实例告诉我们如何给实现的样例进行上色。&lt;/p>
&lt;p>我们已经知道任何在OpenGL中，任何形状都将最终被分解成矩形和三角形两种形状，所以在这两课中我们将对三角形和矩形的构建和渲染进行学习。&lt;/p>
&lt;h2 id="三角形和矩形构造">三角形和矩形构造&lt;/h2>
&lt;p>构建三角形或者矩形的方法在DrawGLScene方法中实现。&lt;/p>
&lt;p>绘制图像之前我们需要先将屏幕缓存清理掉，即调用glClear和glLoadIdentity。这个时候屏幕上的定位点将被重置于窗口的正中间。&lt;/p>
&lt;p>整个屏幕按照空间直角坐标系的形式进行坐标划分，分为X轴，Y轴和Z轴，其中&lt;strong>X轴正方向为右方，Y轴正方向为上方，Z轴正方向为屏幕外侧，原点为你的窗口中央。&lt;/strong>&lt;/p>
&lt;p>开始绘制图形的之前，我们首先需要使用glTranslatef对绘制的点进行偏移，将其移到适当的位置之后开始进行图像绘制（记住绘制点初始值位于屏幕正中央。）&lt;/p>
&lt;p>绘制图形之前，我们需要调用glBegin(GL_TRIANGLES)来决定绘制图形。GL_TRIANGLES表示绘制一个三角形，GL_QUADS表示绘制一个矩形。如果需要绘制更多点组成的图形的话，可以使用GL_POLYGON。&lt;/p>
&lt;p>下面以三角形的绘制为例，通过调用glVertex3f方法设置三个顶点的坐标我们就可以画出一个简单的三角形。如果需要绘制多个三角形，可以在glBegin之后添加3*n行glVertex3f方法，就能绘制出n个三角形。&lt;/p>
&lt;p>绘制结束之后，我们将调用glEnd();表示本次绘制结束。&lt;/p>
&lt;p>下面将展示第二课的代码及其实现效果。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">DrawGLScene&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GLvoid&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">// Here&amp;#39;s Where We Do All The Drawing
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl"> &lt;span class="nf">glClear&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_COLOR_BUFFER_BIT&lt;/span> &lt;span class="o">|&lt;/span> &lt;span class="n">GL_DEPTH_BUFFER_BIT&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Clear Screen And Depth Buffer
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glLoadIdentity&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// Reset The Current Modelview Matrix
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.5f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">6.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Move Left 1.5 Units And Into The Screen 6.0
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBegin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_TRIANGLES&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Drawing Using Triangles
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Top
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Left
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Right
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glEnd&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// Finished Drawing The Triangle
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glTranslatef&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">3.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mf">0.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Move Right 3 Units
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glBegin&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">GL_QUADS&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Draw A Quad
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Top Left
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Top Right
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span> &lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Right
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glVertex3f&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mf">1.0f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.0f&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c1">// Bottom Left
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nf">glEnd&lt;/span>&lt;span class="p">();&lt;/span> &lt;span class="c1">// Done Drawing The Quad
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="n">TRUE&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Keep Going
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>绘制出来的效果图如下所示。
&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p></description></item><item><title>OpenGL学习笔记（二）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%BA%8C/</link><pubDate>Mon, 01 May 2017 10:14:47 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%BA%8C/</guid><description>
&lt;p>其实这个和nehe学习没太多关系，纯粹知识记录一下VS的注释和反注释的快捷键而已。&lt;/p>
&lt;p>注释： 先CTRL+K，然后CTRL+C
取消注释： 先CTRL+K，然后CTRL+U&lt;/p></description></item><item><title>OpenGL学习笔记（一）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%80/</link><pubDate>Mon, 01 May 2017 10:08:09 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/opengl%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%B8%80/</guid><description>
&lt;p>龙云尧个人博客，转载请注明出处。&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/70254340&lt;/p>
&lt;p>个人blog地址：http://123.207.243.115:81/rfidshi-yan-yi-zong-jie-2/&lt;/p>
&lt;p>因为实验需要，我要使用OpenGL搭建一个仿真驾驶环境。因为之前没有接触过OpenGL的相关知识，淦哥推荐通过NEHE来进行学习，之后会零零散散做一些笔记用来进行记录。学习的博客参见&lt;a href="http://blog.51cto.com/zt/186/1">【地址】&lt;/a>。&lt;/p>
&lt;h2 id="创建新的c">创建新的C++&lt;/h2>
&lt;p>因为实验需要，我需要使用C++进行整个项目的编写。实验之前，我们需要先知道怎么用VS搭建一个窗口程序，这里我参考了&lt;a href="http://blog.csdn.net/yongh701/article/details/54896321">【这篇博客】&lt;/a>。&lt;/p>
&lt;p>需要注意的是，在实验中，不推荐直接按照博客中使用L对字符串直接进行强制转换的方式，这种方法在之后学习NEHE过程中会出现很多不可避免的问题。同时这种方式在输出中文的时候也会出翔错误，这个不是我们想看到的。所以我们还需要进行相关的设置。&lt;/p>
&lt;p>设置方法这里我们参考&lt;a href="http://blog.csdn.net/ccf19881030/article/details/7967514">【这篇博客】&lt;/a>。&lt;/p>
&lt;p>设置完成以后，我们就能很正常的输出字符串了，也不再需要在字符串前面加上L进行强制转换，之后进行NEHE学习的时候也能更加简单。&lt;/p>
&lt;h2 id="实验环境搭建">实验环境搭建&lt;/h2>
&lt;p>我在实验开发中使用的是VS2015专业版进行开发。需要使用到的所有库文件和环境搭建可以参考&lt;a href="http://www.cnblogs.com/zpcdbky/p/6724772.html">【这里】&lt;/a>，环境搭建完成之后，尝试include某些库头，如果没有报错，那就说明环境搭建成功。&lt;/p>
&lt;h2 id="可能出现的问题">可能出现的问题&lt;/h2>
&lt;p>实验过程中，最好从教程中，一个函数一个函数向你的项目中添加，如果一次性添加太多的话，报错太多可能会让你很崩溃。&lt;/p>
&lt;p>在添加函数的过程中，在开始调用PDB文件之后，可能会出现很多的“无法查找或打开PDB文件”错误信息，为了解决这个问题，你可以参考&lt;a href="http://blog.163.com/qimo601@126/blog/static/1582209320143410125543/">【这篇博客】&lt;/a>。&lt;/p>
&lt;p>如果在环境搭建过程中还出现了其他问题，试着参照&lt;a href="http://www.cnblogs.com/clairvoyant/p/5453551.html">【这篇博客】&lt;/a>进行解决。&lt;/p>
&lt;h2 id="逻辑图">逻辑图&lt;/h2>
&lt;p>经过仔细阅读源码以及理解，整个NEHE第一课的代码框架结构如下。&lt;/p>
&lt;p>理解过程中，我们其他的目前可以不用很掌握，但是一定要清楚，在本次项目中，作者将**OpenGL的着色描述表定义为 hRC &lt;strong>。要让您的程序能够绘制窗口的话，还需要创建一个设备描述表&lt;/strong>。Windows的设备描述表被定义为 hDC **。&lt;strong>DC将窗口连接到GDI&lt;/strong>(Graphics Device Interface图形设备接口)。&lt;strong>而RC将OpenGL连接到DC&lt;/strong>。&lt;strong>变量 hWnd 将保存由Windows给我们的窗口指派的句柄&lt;/strong>。最后，&lt;strong>程序的实例保存在hInstance中(实例)&lt;/strong>。&lt;/p>
&lt;p>通过上面的关系，我们能够更加容易的理解窗口的建立与注销的过程中，作者代码中每一步所做的目的和意义。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;h2 id="实验结果">实验结果&lt;/h2>
&lt;p>在读完代码之后，我们知道本次实验中仅仅只是建立一个640*480的窗口。并没有任何内容显示，另外因为我们在初始化设置中(InitGL这个方法中定义的)将屏幕的初始RGB值设置为（0.0f, 0.0f, 0.0f, 0.5f），所以程序运行的结果如图所示。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="实验一截图"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p></description></item><item><title>网易复试（技术面）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E7%BD%91%E6%98%93%E5%A4%8D%E8%AF%95%E6%8A%80%E6%9C%AF%E9%9D%A2/</link><pubDate>Thu, 27 Apr 2017 03:33:47 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E7%BD%91%E6%98%93%E5%A4%8D%E8%AF%95%E6%8A%80%E6%9C%AF%E9%9D%A2/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/michael753951/article/details/70837240&lt;/p>
&lt;p>个人blog地址：http://yaoyl.cn/wang_yi_fu_shi_ji_shu_mian/&lt;/p>
&lt;hr>
&lt;blockquote>
&lt;p>这篇博客还可以有个别称，网易复试被教做人。&lt;/p>&lt;/blockquote>
&lt;p>比较幸运的通过了初试。这周周三又去网易大厦参加了网易直播开发的复试面试。依然是技术面。&lt;/p>
&lt;p>一开始收到复试短信的时候，心情其实还蛮激动的，毕竟人生第一次实习面试，来的还算比较顺利。&lt;/p>
&lt;p>短信中没有提到要带简历，所以在收到通知后，我便以为这一次要问后台开发或者服务器相关的问题了。所以面试之前又临时补了一下网络编程（对，就是上次被问到的东西），然后又复习了一下排序+搜索，仔细看了**《程序员面宝典》**中面向对象以及继承与接口两个章节。&lt;/p>
&lt;p>带着100次/秒的心跳来到网易大厦。整个人紧张的不行，上一次还看到两个本科生，这一次本科生都没看见，上一次还看到一个我们级的同学，这一次也没看见过来。周围全是学硕大佬，听着他们讲着听不懂的项目名词，我越来越忐忑。&lt;/p>
&lt;h1 id="正式面试">正式面试&lt;/h1>
&lt;p>小姐姐给我打印了一张简历（因为我以为这一次不用带也就没带了），还是上次的小姐姐带我们去的面试小房间，房间里面依然还是两名面试官（和上一次不一样），不过两个人年龄差不多，不过不同的是，这一次两个人年龄都不大，30不到的样子。&lt;/p>
&lt;p>面试官拿着我的简历，以及我的笔试试卷，开始看起来。&lt;/p>
&lt;p>？？？竟然还是和初试一样的内容？？？&lt;/p>
&lt;p>接着面试官开始从我简历中第一个项目开始，从上往下一个一个问（跳过了Hadoop）。询问过程很细致，感觉主要在考验我的表达能力和对编程的理解能力。同时每个项目还问了我详细的设计思路（和上一次面试差不多）。另外还会从这个项目开始挖掘你对一些基础知识的了解程度。&lt;/p>
&lt;p>比如说在问我一个C++项目经验的时候，问了我使用了哪些特殊的东西（算法），大致上答完以后开始问我很基础的知识——C++中，如果两个头文件中有同名函数的时候，同时include这两个头文件会不会报错，以及会报何种错，如何解决这种错误。前两问问得我有点蒙，肯定会报错我知道，但是回报什么错我就不太知道了，每次编译都是看error信息，但是从没可以注意错误信息有哪些种类。我打的有点不好。&lt;/p>
&lt;p>至于解决方案，根绝我以前的项目经验，我果断说出了曾经使用过的&lt;code>ifndef&lt;/code>。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="cp">#ifndef XXX
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="cp">#define XXX
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="cp">&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="nf">fun1&lt;/span>&lt;span class="p">(){}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">fun2&lt;/span>&lt;span class="p">(){}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">fun3&lt;/span>&lt;span class="p">(){}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">&lt;span class="cp">#endif
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>“&lt;strong>不能使用ifndef&lt;/strong>”。“那就&lt;strong>封装成类&lt;/strong>。”“也&lt;strong>不能封装成类&lt;/strong>。”&lt;/p>
&lt;p>我开始蒙了，这个问题的解决办法我从来没想过，一直以来，为了良好的封装性，避免不同包头之间&lt;code>include&lt;/code>出问题，我都严格的控制函数名和变量名。但是怎么解决却没怎么注意过。&lt;/p>
&lt;p>回来之后，饭局上问了下老师，加上自己在网上查阅了相关资料，我找到了第三种解决办法，那就是使用命名空间namespace解决，具体结局方案可以参考&lt;a href="http://www.cnblogs.com/zhoug2020/p/5972439.html">【C++命名空间 namespace的作用和使用解析】&lt;/a>&lt;/p>
&lt;p>回到面试上。&lt;/p>
&lt;p>感觉简历太苍白，面试官看着我的简历似乎不太好。他继续往下提问，美赛的经历和算法设计过程。二维码图像识别中的实现方法和难点。&lt;/p>
&lt;p>最后在我们之前一个多平台项目中又开始了基础知识的提问。http请求报文中，第一行内容是什么，我开始又犯蒙，先回答了一个肯定会有的&lt;code>request&lt;/code>标识符。其他的还有什么，当时计网没要求记，我就跳过了，现在问起来，我有点犯难。想了半天我勉强想起来似乎有一个http版本。其它的又开始犯难了。&lt;/p>
&lt;p>以前使用jsp的时候都是使用已经封装好的库头，现在突然问我这个，我就有点想不起来了。根据我上个星期学python的时候网络处理部分的东西，我开始艰难的回忆，最后猜了一个ip地址和端口号。其他的也没觉得有什么东西了。&lt;/p>
&lt;p>然后面试官问了一个关于JavaXXX（一个没听过的名词，不是JavaScript）多线程的问题，我表示没听过这个名词之后，面试官也就停止提问了。&lt;/p>
&lt;p>接着面试官问我为什么在外网中无法访问内网的网站。这一点我在前期准备过程中，LDNS看的比较多，所以顺口就说了出来。当然，这个答案可能存在一定问题，欢迎指正。&lt;/p>
&lt;p>最后面试官问了我一些我的试卷上那些错题是怎么错的，错在哪。这些还好我在笔试那天回寝室之后和舍友讨论过，自己也到查过，所以基本上都能讲出来。&lt;/p>
&lt;h1 id="面试总结">面试总结&lt;/h1>
&lt;p>感觉复试过程明显就没有初试的时候顺利了。面试过程磕磕绊绊，挺多东西不知道，加上自己本身紧张，所以答得并不好。&lt;/p>
&lt;p>总结一下，在准备方面：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>二面和一面内容上其实差不多，可能面试官也知道我们对相关岗位的知识并不是很熟，所以就不会问太深入的东西，基本上都是稍微试探一下，如果你不会也就停止了。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>前期准备还是需要对着自己的简历准备，因为面试官还是会对着你的简历进行提问，而且二面明显感觉比一面更加重基础，反而不问任何算法知识。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>心态还是很重要，紧张很容易导致自己犯下不该犯的错误。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>面试官对你的了解仅仅只有那十几分钟，怎么在短短的十几分钟之内将自己的有点展示出来，需要在面试前做好比较好的准备，同事面试的时候，要适当的带面试官走。&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>最后，希望我还有机会写一个HR终面总结吧。&lt;/p>
&lt;hr>
&lt;p>更新，归咎于自己的技术底子是在不好，我还是没有成功闯过复试关。&lt;/p></description></item><item><title>网易初面（技术面）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E7%BD%91%E6%98%93%E5%88%9D%E9%9D%A2%E6%8A%80%E6%9C%AF%E9%9D%A2/</link><pubDate>Sat, 22 Apr 2017 23:22:08 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E7%BD%91%E6%98%93%E5%88%9D%E9%9D%A2%E6%8A%80%E6%9C%AF%E9%9D%A2/</guid><description>
&lt;p>昨天我正在怼RFID第三次实验的圈存，消费和查询功能，丝毫没注意有短信，直到我出门准备拿快递查短信的时候才发现。。。&lt;/p>
&lt;p>于是今天什么都没准备的去猪场（网易）面试，不过还好对面两个面试官人比较好，并没有怼我什么。&lt;/p>
&lt;h1 id="笔试">笔试&lt;/h1>
&lt;p>上周四，网易在中大场的宣讲结束以后，便同时进行了一场笔试。&lt;strong>笔试题目较难&lt;/strong>。题目&lt;strong>满分一百分，前60分选择以及计算填空题，后40分编程&lt;/strong>。&lt;/p>
&lt;h2 id="前60分">前60分&lt;/h2>
&lt;p>前面60分里面主要是&lt;strong>理论算法题&lt;/strong>，还夹杂一些&lt;strong>操作系统题目&lt;/strong>和&lt;strong>计算机网络题目&lt;/strong>，以及部分&lt;strong>和岗位有关的内容&lt;/strong>（比如我面试的是直播开发，试卷上就有问视频格式不包括下面中的哪一个），另外选择题里面&lt;strong>少量数据库&lt;/strong>。&lt;/p>
&lt;p>现在还记得的比如很经典的&lt;strong>2017!的结构末尾有多少个0&lt;/strong>, &lt;strong>7^2017%5结果为多少&lt;/strong>啊，&lt;strong>第一趟快排结果&lt;/strong>怎样，&lt;strong>堆排调整结果怎样&lt;/strong>，&lt;strong>OS的内存置换算法&lt;/strong>，还有一些暂时想不起来的题目。&lt;/p>
&lt;p>题目&lt;strong>难度有点大&lt;/strong>，对&lt;strong>基础的算法&lt;/strong>要求比较高，同时还要求被试者记得&lt;strong>OS&lt;/strong>，&lt;strong>计网&lt;/strong>知识等。如果以后有人打算去网易的话，遇到笔试前最好去&lt;a href="https://www.nowcoder.com/">&lt;strong>牛客网&lt;/strong>&lt;/a>刷一套或者几套网易的笔试题感受一下。笔试的时候才更加适应网易的套路，&lt;strong>运气好的话还有可能遇到原题&lt;/strong>。（我遇到一个比较简单的原题，还有一个一起考试的碰到了移到算法计算题的原题）。&lt;/p>
&lt;p>这部分答题过程中，我思路比较清楚。可能因为不少题目在以前上机测试或者其他算法书中遇到过，所以不是特别偏的算法还是会的（比如有一道三进制的题，当时怎么都不会，现在时间太久也忘了）。经常打算法的人应该完成难度不大。&lt;/p>
&lt;h2 id="后40分">后40分&lt;/h2>
&lt;p>40分一共&lt;strong>有两道手写编程题&lt;/strong>，&lt;strong>第一题10分比较简单&lt;/strong>，&lt;strong>第二题会难一点30分&lt;/strong>。&lt;/p>
&lt;p>在这次考试中，第一题是&lt;strong>求最大公因数和最小公倍数&lt;/strong>。第一题题目要求数据大小在1~2^32-1之间。这两个算法的实现我就不说了，因为已经算是算法入门级的代码了。但是很傻的是，我在计算最大公倍数时，return的结果只开到了undesigned int，这个估计会扣不少分。其实应该开到long long才能不溢出。&lt;/p>
&lt;p>第二题，是一道&lt;strong>0-1背包问题，DP可解&lt;/strong>。但是因为时间不够，加上笔试前没有准备关于DP和背包问题，所以空出来了。题目大概意思是，在线直播平台上有各种打赏，比如打赏1（分数100）、打赏2（200）、打赏3（300），每种打赏收费标准不一样。相当于背包问题中的物品。一个用户想给主播发礼品，怎样做才能既将手中的钱花完，主播收到的积分也能最多。（题目大致应该是这样的，时间有点久了，记不是很清楚。）&lt;/p>
&lt;p>然后在面试过程中，我瞟到了我的试卷，前面60分拿了36。这个能理解，我在那天回寝室，回想题目的时候，就发想算法填空题里面，有几道题手算出错了。页面置换的题目里面，将LRU（Least Recently Used, 最近最久未使用，可以实际应用），错用成了OPT（Optimal，最佳置换，理论上的置换方法）。其他的错在哪就可能自己事后都没发现吧。&lt;/p>
&lt;p>&lt;strong>编程只拿到了4分&lt;/strong>（还是6分？）。羞耻= =，全是在那一道10分题中拿到的，除了long long之外不知道其他分数扣在哪，有可能是因为我当时图快使用的是递归求解，效率赶不上迭代，也有可能是犯了其他某些错误。30分的DP一分没拿到，毕竟我一行代码都没写= =。只有一行注释说“背包问题，可以用DP求解”。&lt;/p>
&lt;p>总的来说，当时笔试完自我感觉并不好。本来以为不会过，等了快一周还没收到短信，所以都已经准备放弃希望了。直到昨天翻快递短信的时候，看到了网易的短信通知，说我笔试过了，可以参加初面了。&lt;/p>
&lt;h1 id="初面">初面&lt;/h1>
&lt;h2 id="裸面">裸面&lt;/h2>
&lt;p>初面来的猝不及防，没有一点点心理准备的我，在收到短信的当天都还在淡定撸RFID的课程项目代码。结果一下午都在debug，晚上10点才搞完。当时觉得，“完了完了，明天得裸面了”。&lt;/p>
&lt;p>半夜看了一会&lt;a href="http://chenbowen.baijia.baidu.com/article/472127">直播相关的技术帖&lt;/a>，白天精力消耗太大，爬上床睡了。&lt;/p>
&lt;p>第二天早上7点多就爬起来继续看了一会，毕竟自己以前没怎么学过这一块，就按照计网知识，再加上自己以前学图像处理时对音频的知识，勉强硬啃下来了。&lt;/p>
&lt;p>&lt;strong>但是我忘记了，校招一般不会问太多和工作岗位相关的工作，他们往往问的比较基础。比如最经典的8排序3搜索，比如OOP的虚类，虚函数，继承之类的基础知识。尤其是我简历里面还说了我主力代码是C/C++，之后是Java。&lt;/strong>&lt;/p>
&lt;p>抱着裸面的心态去的网易大厦。今天的人还不少，不过脸熟的没多少，可能我们院（指我们软件工程（移动信息工程），而不是整个数据科学院啦）的人有的上午就面过了，或者没什么人投这边。整场面试下来就碰到一个认识的人。&lt;/p>
&lt;p>进去之后人挺多了，我们在网易大厦一楼一个放映室等待，然后被一波一波叫出去等待面试。等不多一会，一个应该是HR的小姐姐带我们上了四楼（直播平台开发所在的楼层），十几个人在一个会议室等着被喊去面试。&lt;/p>
&lt;p>全是中大人，我们这一波十几个人就仨本科生，其他都是研究生，我开始有点怂了。。。。那个时候，对面一个研二师姐说上次面试就是手写搜索算法，我才突然想到，我光看直播技术贴，排序搜索什么的都没看= =&lt;/p>
&lt;p>临时用手机翻了一点关于排序和搜索的算法，看了一下时间复杂度，被叫去面试。&lt;/p>
&lt;h2 id="面试">面试&lt;/h2>
&lt;p>面试环境还好，空间虽然小了点，但是因为是透明玻璃墙，所以也就没有显得拥挤，房间里面有&lt;strong>两个面试官&lt;/strong>。年轻的面试官主要提问算法和其他工程上的问题，另一位大叔感觉像是HR或者主管之类的管理者。&lt;/p>
&lt;p>首先是自我介绍啦，稍微讲一下自己的情况就好（我就讲了讲我来自哪，目前情况怎么样之类的，半分钟就没词了= =）。&lt;/p>
&lt;p>之后试官首先问我兴趣点，因为这个岗位进去之后还是有很多方向，比如&lt;strong>前端 ，服务器，移动端&lt;/strong>之类。我说的是服务器，一方面是因为自己确实对前段没什么兴趣，另一方面去年和今年项目做得多了，就越来越觉得服务器挺重要的，毕竟很多前端的动态处理，移动端的服务，都得靠服务器端进行处理。&lt;/p>
&lt;p>接着面试开始问我的项目经验。年轻面试官从我的简历里面抽了大二时候做的用哈希表实现词典查询的项目进行提问。&lt;/p>
&lt;p>一脸懵逼，两脸茫然，猝不及防。我以为会问我直播技术有哪些瓶颈，我以为会问我怎么降低网络延迟，我以为会问我直播使用什么协议，分别有哪些优缺点，我以为会问我云计算课程实现的利用MapReduce分布式项目，我以为。。。&lt;/p>
&lt;p>然而，他竟然问我大二的项目= =&lt;/p>
&lt;p>还好当时自己在那个项目上折腾了好几天，依稀记得使用&lt;strong>Map方法+链表&lt;/strong>实现的查询功能。然后我开始&lt;strong>在草稿上回忆项目思路，一边回忆一遍和面试官口述&lt;/strong>（虽然一开始有点紧张还回忆错了，面试官仔细听了以后，对我查询方式提了一点质疑，我才重新想起来当时的项目内容。）口述完自己当时的项目之后，考官问我对这个项目有什么&lt;strong>改进的想法&lt;/strong>。&lt;/p>
&lt;p>改进的想法？？？刚刚回忆完整个项目的我又开始陷入了沉思。我开始吧这个项目和这个岗位可能需要的地方开始考虑。&lt;/p>
&lt;p>这个岗位不是应该对分布式要求对点么，那就分布式搜索？？&lt;strong>没听说过，不能瞎说&lt;/strong>。自己唯一写过的分布式架构的也就&lt;strong>MapReduce实现的线性回归&lt;/strong>，自己也暂时没想带怎么使用分布式进行搜索的方法。突然我想到，提问过程中，面试官似乎问过我&lt;strong>处理的信息量&lt;/strong>，&lt;strong>我那种实现方法需要将所有数据写进内存，很费空间，这一点似乎可以优化&lt;/strong>。于是我就根据操作系统里面内存的的&lt;strong>多级检索&lt;/strong>，大致讲了一下在大量数据情况下，减少内存消耗的方法。&lt;/p>
&lt;p>接下来面试官又从我项目经验中挑了一个二维码识别的项目。这个虽然是团队项目，但是前半部分我和队友一人一半，后半部分一人单挑，再加上是上个学期的项目，所以讲起来比较轻松。大致讲了一下自己当时实现的原理（直线在极坐标中的表示，点光源影响去除之类的）。&lt;/p>
&lt;p>又谈了一点项目经验，面试官开始问我主要擅长的领域。&lt;/p>
&lt;p>擅长的领域？？？又开始茫然，大学3年下来，基本都是按照课程项目走过来的，学的很散，也没有做过很成熟的项目。知识面有点广度，但是没有几个领域有深度，开始打算个人项目也是在上周四被网易理论试题打击以后，突然开始搞的。&lt;/p>
&lt;p>那就&lt;strong>算法&lt;/strong>吧，再加个&lt;strong>计网&lt;/strong>。仔细想了想自己的两年半多，算法自己从大一下怼到大二下，一年半下来，&lt;strong>比赛奖项也集中在算法比赛上&lt;/strong>，就提了下自己的比较擅长算法。然后又想到我们上学期我&lt;strong>计网理论&lt;/strong>学的还行，实验课怼交换机也贡献了大部分力气。这两个合起来对我拿到这份offer会不会有帮助。&lt;/p>
&lt;p>面试官开始问我关于&lt;strong>网络编程的问题&lt;/strong>（当时的问题是，&lt;strong>tcp编程的时候，什么时候会有time_ wait&lt;/strong>）。但是我没经历过网络编程啊，上个学期交换器和路由器的实验全部重在配置，在控制台输指令的那种。网络编程这一块我就没接触过啊，我就试探了一下说是不是在网络用塞的时候，因为听到这个变量我以为是TCP的连接超时。面试官否决了我的回答，我只能如实说自己没做过相关项目，面试官说了真确答案是断开连接的时候。（&lt;strong>回来查了一下相关知识，time _wait确实是在TCP的四次挥手的时候用到的，拥塞控制是tcp _timestamps，&lt;/strong>&lt;a href="http://blog.csdn.net/qq100440110/article/details/52267708">&lt;strong>知识来源&lt;/strong>&lt;/a>）&lt;/p>
&lt;p>接着面试官开始问我&lt;strong>算法题&lt;/strong>，比如&lt;strong>堆排和快排的对比，两种算法的应用场景之类&lt;/strong>。我大致分析了一下快排的缺点是&lt;strong>最坏情况时间复杂度&lt;/strong>是(On^2), 堆排整理需要(Onlgn)，但是忘记分析堆排和快拍的&lt;strong>空间消耗&lt;/strong>（自己平时从来没注意过），&lt;strong>是否乱序&lt;/strong>方面也忘记分析了（其实两者都会乱序）。终究还是自己平时项目做得少了，算法也看的少了。。。。&lt;/p>
&lt;p>然后面试官问了我&lt;strong>快排的实现方法&lt;/strong>，我在纸上大致说了一种刚刚在网上看到，回忆起来的教科书上的快排。这种方法对最后的标志位在一开始是不明确的。我看考官没怎么说话，就默默在纸上再说了一下整个整理过程。看完考官提问，没有标志位的么。我就又说了在大一的时候学的预先定位标志位进行快排整理的方法，考官这次就似乎比较满意。&lt;/p>
&lt;p>再接着面试官问了一下&lt;strong>STL中Map是用什么实现的&lt;/strong>。因为我第一个项目中，就是使用的标准STL Map，而不是自己实现。我答了&lt;strong>红黑树&lt;/strong>，这个在很久以前某篇文章中看到过。&lt;/p>
&lt;p>最后就是大叔面试官问，&lt;strong>我还想说些什么&lt;/strong>。（大叔面试官全程比较少提问，感觉他应该是坐在主管位置，年轻的小哥面试官则应该是主要带项目什么的了）我大致说了一下&lt;strong>自己在投简历和面试过程中对这个岗位产生的疑问，以及问了下我能够学到什么&lt;/strong>，基本面试也就结束了。&lt;/p>
&lt;h2 id="面试总结">面试总结&lt;/h2>
&lt;p>总的来说，网易的&lt;strong>笔试确实有难度，面试关反而没有那么难了&lt;/strong>，主要重在&lt;strong>项目&lt;/strong>和你&lt;strong>擅长的方向&lt;/strong>的了解。&lt;/p>
&lt;p>在准备方面&lt;/p>
&lt;ul>
&lt;li>&lt;strong>我笔试40分都有机会拿到面试机会，如果有机会参加笔试机会的人可以有信心了。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>简历上的项目一定要是你有参与或者主持或者独自完成的项目。混水的项目就不要写上去了，以免面试官问起来自己一脸茫然。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>面试前最好准备一下基础的算法知识。因为自己面的是开发岗，所以对算法要求还是比较高的。基本的8大查找，3大搜索要知道。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>网易的面试方面不会太难。提前对自己的项目做好整理，看一下自己的项目报告什么的帮助回忆，也就不会像我这样裸面，在面试的时候一边面试一边回忆了。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>有些问题还是流程化的，比如对这个工作有什么期待，自我评价（本次面试没有提到），自我介绍什么的。在准备前都好好准备下。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>网易技术岗的技术面一共有两轮。我目前只经历了第一轮，希望有机会能够接触到第二轮（并不知道会问什么内容），以及最终的HR面。&lt;/strong>&lt;/li>
&lt;li>&lt;strong>面试官不会很严，技术面也不会压力面试什么的，面试环节还是比较轻松的，不用紧张。&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>&lt;em>最后，希望我还有机会写一个二面以及终面总结吧。&lt;/em>&lt;/strong>&lt;/p></description></item><item><title>CSDN如何转载他人文章</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/csdn%E5%A6%82%E4%BD%95%E8%BD%AC%E8%BD%BD%E4%BB%96%E4%BA%BA%E6%96%87%E7%AB%A0/</link><pubDate>Fri, 21 Apr 2017 04:01:16 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/csdn%E5%A6%82%E4%BD%95%E8%BD%AC%E8%BD%BD%E4%BB%96%E4%BA%BA%E6%96%87%E7%AB%A0/</guid><description>
&lt;p>本来我一直不会在csdn中转载他人的文章的，知道有一次在网上看到一篇教程（来源已经忘记，但是原理很简答）。&lt;/p>
&lt;p>利用&lt;strong>Markdown可以解析html&lt;/strong>的特点，我们只要在开发者模式中，将需要转载的人的博客地址的文章部分的div块整个复制下来就行了。&lt;/p>
&lt;p>下面我将演示一下如何操作。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt="开发者模式"
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/content/images/2017/04/temp2.png"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>打开浏览器的&lt;strong>开发者模式&lt;/strong>（Chrome为F12，其他的从设置中一般能够找到），点一下开发者模式&lt;strong>左上角的小指针图标&lt;/strong>，这个时候，浏览器就能够通过你鼠标点击的位置定位到相应的html结构中了。&lt;/p>
&lt;p>在本次操作中，我发现我的正文都被放在一个class为“markdown_views”的div块中了。&lt;/p>
&lt;p>我们右键单击这个div块，然后选择&lt;code>Copy-&amp;gt;copy element&lt;/code>，就能够将这个块内的元素全部提取下来啦。接下来的事情就是转回自己的博客，使用&lt;strong>markdown编辑器&lt;/strong>，将元素复制进来。标明出处和原始博客地址，就可以发表啦。（如果不小心复制了广告或者“上一篇”之类的元素，删掉就行了）。&lt;/p>
&lt;p>这种方式对转载其他出处的文章一样可用。&lt;strong>不过，记得无论怎么转载，都要注明“转载”并且说明出处就是咯。&lt;/strong>&lt;/p>
&lt;p>下面是我从我另一篇博客中复制过来的内容，可以看看。&lt;/p>
&lt;hr>
&lt;div class="markdown_views">&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：&lt;a href="http://blog.csdn.net/Michael753951/article/details/70307694">http://blog.csdn.net/Michael753951/article/details/70307694&lt;/a>&lt;/p>
&lt;p>个人博客地址：&lt;a href="http://123.207.243.115:81/li-yong-ghostzuo-wei-tu-chuang/">http://123.207.243.115:81/li-yong-ghostzuo-wei-tu-chuang/&lt;/a>&lt;/p>
&lt;h1 id="起源">&lt;a name="t0">&lt;/a>起源&lt;/h1>
&lt;p>图床一直是一个很让我头疼的问题，在去年开始，我就有用markdown写项目总结的习惯，贴图的时候，怎么找一个好用的图床这个问题却一直没有解决。&lt;/p>
&lt;p>目前我是用过的图床包括网易&lt;code>LOFTER&lt;/code>，&lt;code>github&lt;/code>，&lt;code>CSDN&lt;/code>以及自己搭建的&lt;code>Ghost博客服务器&lt;/code>。&lt;/p>
&lt;p>前三种方式中，&lt;code>LOFTER&lt;/code>和&lt;code>github&lt;/code>直接将图片拖进去，然后右键图片，复制源地址就行了。但是美中不足的是&lt;code>LOFTER&lt;/code>的源在其他网站上显示并不是很友好，&lt;code>github&lt;/code>在虽然图片显示很清楚，但是上传图片的时候总是会出问题。&lt;code>CSDN&lt;/code>和&lt;code>github&lt;/code>一样，上传文件时总是会出问题。&lt;/p>
&lt;p>这迫使我有了再重新寻找一个图床的想法。&lt;/p>
&lt;h1 id="解决">&lt;a name="t1">&lt;/a>解决&lt;/h1>
&lt;p>今晚（2017/4/21）凌晨在写项目总结的时候，我突然意识到我&lt;strong>可以利用自己的博客服务器&lt;/strong>作为图床。而且服务器ip地址在公网中，地理地质位于华南，作为图床应该会比较稳定。&lt;/p>
&lt;p>果然，在稍微折腾一下之后，我在ghost官网中找到一篇&lt;a href="https://help.ghost.org/hc/en-us/articles/223237408-Upload-Images">【Upload Images】&lt;/a>的教程，有告诉我们怎么向服务器传文件并且在博客中显示。&lt;/p>
&lt;p>我就可以利用这个原理，将Ghost服务器作为图床啦。&lt;/p>
&lt;h1 id="实际操作">&lt;a name="t2">&lt;/a>实际操作&lt;/h1>
&lt;p>操作过程比较简单。&lt;/p>
&lt;p>首先我们进入后台新建一篇文章(&lt;code>New Post&lt;/code>)。然后在正文空白部分输入&lt;code>![]()&lt;/code>，右侧就会出现一个提示框。如下图所示。&lt;/p>
&lt;p>&lt;img src="http://123.207.243.115:81/content/images/2017/04/temp.png" alt="" title="">&lt;/p>
&lt;p>点击&lt;code>Update an image&lt;/code>，我们就能从本地文件中选取一张图片上传上服务器，同时之前&lt;code>![]()&lt;/code>中的括号中出现了一个相对路径，比如我的就是&lt;code>/content/images/2017/04/temp.png&lt;/code>。&lt;/p>
&lt;p>&lt;strong>注意，相对路径是不能在其他地方打开的，只能在本服务器才能打开&lt;/strong>。&lt;/p>
&lt;p>但是&lt;strong>我们的目的是将该图片用在其他&lt;/strong>，将本服务器作为图床。所以我们这是就需要&lt;strong>右键单击右侧显示的图片&lt;/strong>，选择&lt;strong>&lt;code>“复制图片地址”&lt;/code>&lt;/strong>，然后将这个地址粘贴到其他地方，这样这张图片在其他地方也就能够正常显示啦。&lt;/p>
&lt;p>&lt;em>本篇博客就是使用这个原理实现的图像显示。&lt;/em>&lt;/p>&lt;/div></description></item><item><title>利用Ghost作为图床</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%88%A9%E7%94%A8ghost%E4%BD%9C%E4%B8%BA%E5%9B%BE%E5%BA%8A/</link><pubDate>Wed, 19 Apr 2017 12:14:03 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%88%A9%E7%94%A8ghost%E4%BD%9C%E4%B8%BA%E5%9B%BE%E5%BA%8A/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处。&lt;/strong>&lt;/p>
&lt;p>CSDN地址：http://blog.csdn.net/Michael753951/article/details/70307694&lt;/p>
&lt;p>个人博客地址：http://123.207.243.115:81/li-yong-ghostzuo-wei-tu-chuang/&lt;/p>
&lt;h1 id="起源">起源&lt;/h1>
&lt;p>图床一直是一个很让我头疼的问题，在去年开始，我就有用markdown写项目总结的习惯，贴图的时候，怎么找一个好用的图床这个问题却一直没有解决。&lt;/p>
&lt;p>目前我是用过的图床包括网易&lt;code>LOFTER&lt;/code>，&lt;code>github&lt;/code>，&lt;code>CSDN&lt;/code>以及自己搭建的&lt;code>Ghost博客服务器&lt;/code>。&lt;/p>
&lt;p>前三种方式中，&lt;code>LOFTER&lt;/code>和&lt;code>github&lt;/code>直接将图片拖进去，然后右键图片，复制源地址就行了。但是美中不足的是&lt;code>LOFTER&lt;/code>的源在其他网站上显示并不是很友好，&lt;code>github&lt;/code>在虽然图片显示很清楚，但是上传图片的时候总是会出问题。&lt;code>CSDN&lt;/code>和&lt;code>github&lt;/code>一样，上传文件时总是会出问题。&lt;/p>
&lt;p>这迫使我有了再重新寻找一个图床的想法。&lt;/p>
&lt;h1 id="解决">解决&lt;/h1>
&lt;p>今晚（2017/4/21）凌晨在写项目总结的时候，我突然意识到我&lt;strong>可以利用自己的博客服务器&lt;/strong>作为图床。而且服务器ip地址在公网中，地理地质位于华南，作为图床应该会比较稳定。&lt;/p>
&lt;p>果然，在稍微折腾一下之后，我在ghost官网中找到一篇&lt;a href="https://help.ghost.org/hc/en-us/articles/223237408-Upload-Images">【Upload Images】&lt;/a>的教程，有告诉我们怎么向服务器传文件并且在博客中显示。&lt;/p>
&lt;p>我就可以利用这个原理，将Ghost服务器作为图床啦。&lt;/p>
&lt;h1 id="实际操作">实际操作&lt;/h1>
&lt;p>操作过程比较简单。&lt;/p>
&lt;p>首先我们进入后台新建一篇文章(&lt;code>New Post&lt;/code>)。然后在正文空白部分输入&lt;code>![]()&lt;/code>，右侧就会出现一个提示框。如下图所示。&lt;/p>
&lt;p>&lt;figure>
&lt;picture>
&lt;img
loading="lazy"
decoding="async"
alt=""
class="image_figure image_internal image_unprocessed"
src="https://yaoyl.cn/"
/>
&lt;/picture>
&lt;/figure>
&lt;/p>
&lt;p>点击&lt;code>Update an image&lt;/code>，我们就能从本地文件中选取一张图片上传上服务器，同时之前&lt;code>![]()&lt;/code>中的括号中出现了一个相对路径，比如我的就是&lt;code>/content/images/2017/04/temp.png&lt;/code>。&lt;/p>
&lt;p>&lt;strong>注意，相对路径是不能在其他地方打开的，只能在本服务器才能打开&lt;/strong>。&lt;/p>
&lt;p>但是&lt;strong>我们的目的是将该图片用在其他&lt;/strong>，将本服务器作为图床。所以我们这是就需要&lt;strong>右键单击右侧显示的图片&lt;/strong>，选择**&lt;code>“复制图片地址”&lt;/code>**，然后将这个地址粘贴到其他地方，这样这张图片在其他地方也就能够正常显示啦。&lt;/p>
&lt;p>&lt;em>本篇博客就是使用这个原理实现的图像显示。&lt;/em>&lt;/p></description></item><item><title>第一次爬虫实验代码及运行结果（html文本进行适当删除以压缩版面）</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%88%AC%E8%99%AB%E5%AE%9E%E9%AA%8C%E4%BB%A3%E7%A0%81%E5%8F%8A%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9Chtml%E6%96%87%E6%9C%AC%E8%BF%9B%E8%A1%8C%E9%80%82%E5%BD%93%E5%88%A0%E9%99%A4%E4%BB%A5%E5%8E%8B%E7%BC%A9%E7%89%88%E9%9D%A2/</link><pubDate>Wed, 19 Apr 2017 01:28:43 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%88%AC%E8%99%AB%E5%AE%9E%E9%AA%8C%E4%BB%A3%E7%A0%81%E5%8F%8A%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9Chtml%E6%96%87%E6%9C%AC%E8%BF%9B%E8%A1%8C%E9%80%82%E5%BD%93%E5%88%A0%E9%99%A4%E4%BB%A5%E5%8E%8B%E7%BC%A9%E7%89%88%E9%9D%A2/</guid><description>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;http://news.sina.com.cn/o/2017-04-18/doc-ifyeimzx6745829.shtml&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_url&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encoding&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;!-- [ published at 2017-04-18 04:22:23 ] --&amp;gt;
&amp;lt;!-- LLTJ_MT:name =&amp;quot;环球网&amp;quot; --&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;
&amp;lt;meta name=&amp;quot;sudameta&amp;quot; content=&amp;quot;urlpath:c/; allCIDs:56044,257,51895,200856,51922,56261,258,38790&amp;quot;&amp;gt;
&amp;lt;title&amp;gt;美媒:中国奇迹没有结束 而是进入了第二阶段|中国经济_新浪新闻&amp;lt;/title&amp;gt;
&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;中国经济&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;tags&amp;quot; content=&amp;quot;中国经济&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;原标题：美媒：中国奇迹没有结束，而是进入了第二阶段[环球时报综合报道]“增长表现超出预期”，对于中国国家统计局公布的今年一季度6.9%的国内生产总值（GDP）增长率，外媒昨天纷纷这样强调。不同的人看到不一样的风景，但一个显而易见的事实是，只&amp;quot; /&amp;gt;
&amp;lt;link rel=&amp;quot;mask-icon&amp;quot; sizes=&amp;quot;any&amp;quot; href=&amp;quot;//www.sina.com.cn/favicon.svg&amp;quot; color=&amp;quot;red&amp;quot;&amp;gt;
&amp;lt;meta property=&amp;quot;og:type&amp;quot; content=&amp;quot;news&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:title&amp;quot; content=&amp;quot;美媒:中国奇迹没有结束 而是进入了第二阶段&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:description&amp;quot; content=&amp;quot;美媒:中国奇迹没有结束 而是进入了第二阶段&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:url&amp;quot; content=&amp;quot;http://news.sina.com.cn/o/2017-04-18/doc-ifyeimzx6745829.shtml&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;og:image&amp;quot; content=&amp;quot;http://n.sinaimg.cn/news/transform/20170418/UrtA-fyeimrn2749398.jpg&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;weibo: article:create_at&amp;quot; content=&amp;quot;2017-04-18 02:25:00&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;weibo: article:update_at&amp;quot; content=&amp;quot;2017-04-18 04:22:15&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;article:published_time&amp;quot; content=&amp;quot;2017-04-18T02:31:33+08:00&amp;quot; /&amp;gt;
&amp;lt;meta property=&amp;quot;article:author&amp;quot; content=&amp;quot;环球网&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;stencil&amp;quot; content=&amp;quot;PGLS000115&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;publishid&amp;quot; content=&amp;quot;fyeimzx6745829&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;comment&amp;quot; content=&amp;quot;gn:comos-fyeimzx6745829&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;sudameta&amp;quot; content=&amp;quot;comment_channel:gn;comment_id:comos-fyeimzx6745829&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;mediaid&amp;quot; content=&amp;quot;环球网&amp;quot;&amp;gt;
&amp;lt;meta name=&amp;quot;sudameta&amp;quot; content=&amp;quot;sinaog:0&amp;quot; /&amp;gt;
&amp;lt;meta name=&amp;quot;mobile-agent&amp;quot; content=&amp;quot;format=html5; url=http://news.sina.cn/2017-04-18/detail-ifyeimzx6745829.d.html&amp;quot;&amp;gt;
&amp;lt;meta name=&amp;quot;mobile-agent&amp;quot; content=&amp;quot;format=xhtml; url=http://news.sina.cn/2017-04-18/detail-ifyeimzx6745829.d.html&amp;quot;&amp;gt;
&amp;lt;meta name=&amp;quot;mobile-agent&amp;quot; content=&amp;quot;format=wml; url=http://news.sina.cn/2017-04-18/detail-ifyeimzx6745829.d.html&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;新浪新闻中心_国内新闻&amp;quot; href=&amp;quot;http://rss.sina.com.cn/news/china/focus15.xml&amp;quot; /&amp;gt;
&amp;lt;!-- 栏目名： 56044 国内新闻 --&amp;gt;&amp;lt;!-- id： fyeimzx6745829 URL： http://news.sina.com.cn/o/2017-04-18/doc-ifyeimzx6745829.shtml --&amp;gt;
&amp;lt;meta name=jspreload content=&amp;quot;jspreload&amp;quot;&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
(function(){
if(navigator.userAgent.indexOf('MSIE') === -1){return};
var list = [&amp;quot;http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&amp;quot;,&amp;quot;http://news.sina.com.cn/js/87/content2014/common.js&amp;quot;,&amp;quot;http://d1.sina.com.cn/litong/zhitou/sspnew.js&amp;quot;,&amp;quot;http://d2.sina.com.cn/d1images/button/rotator.js&amp;quot;,&amp;quot;http://i.sso.sina.com.cn/js/ssologin.js&amp;quot;,&amp;quot;http://i.sso.sina.com.cn/js/outlogin_layer.js&amp;quot;,&amp;quot;http://i.sso.sina.com.cn/js/user_panel_new_version_v2.js&amp;quot;,&amp;quot;http://n.sinaimg.cn/ent/wsy/topnav20150402.js&amp;quot;,&amp;quot;http://static.bshare.cn/b/buttonLite.js#style=-1&amp;amp;amp;uuid=cc6dc2b3-f467-40cb-afae-c7c6154a5f54&amp;amp;amp;pophcol=2&amp;amp;amp;lang=zh&amp;quot;,&amp;quot;http://static.bshare.cn/b/bshareC0.js&amp;quot;,&amp;quot;http://news.sina.com.cn/268/2014/0919/bshare_update.js&amp;quot;,&amp;quot;http://news.sina.com.cn/js/87/content2014/d_location.js&amp;quot;,&amp;quot;http://news.sina.com.cn/js/87/20130522/content/piclead.js&amp;quot;,&amp;quot;http://pfp.sina.com.cn/js/17/2013/0621/tb/59.js&amp;quot;,&amp;quot;http://d2.sina.com.cn/d1images/button/rotator.js&amp;quot;,&amp;quot;http://d5.sina.com.cn/litong/zhitou/sinaads/release/sinaads.js&amp;quot;,&amp;quot;http://pfp.sina.com.cn/iframe/14/2011/0517/47zhongshiwangmeng.js&amp;quot;,&amp;quot;http://pfp.sina.com.cn/js/17/2012/0928/china00_300x500.js&amp;quot;,&amp;quot;http://d5.sina.com.cn/litong/zhitou/sinaads/release/sinaads.js&amp;quot;,&amp;quot;http://pfp.sina.com.cn/js/17/2013/0621/tb/58.js&amp;quot;,&amp;quot;http://d5.sina.com.cn/litong/xianwei/taobao0827.js&amp;quot;,&amp;quot;http://d3.sina.com.cn/litong/zhitou/sinaads/release/sinaads.js&amp;quot;,&amp;quot;http://d0.sina.com.cn/litong/zhitou/sinaads/release/sinaads.js&amp;quot;,&amp;quot;http://d5.sina.com.cn/litong/zhitou/sinaads/release/sinaads.js&amp;quot;,&amp;quot;http://tech.sina.com.cn/js/717/20140827/index2014/top.js&amp;quot;,&amp;quot;http://news.sina.com.cn/js/87/20140926/comment.3.min.js&amp;quot;,&amp;quot;http://news.sina.com.cn/js/87/content2014/feed.relatedNews.js&amp;quot;,&amp;quot;http://i1.sinaimg.cn/unipro/pub/suda_m_v629.js&amp;quot;,&amp;quot;http://d3.sina.com.cn/litong/zhitou/sinaads/release/sinaads.js&amp;quot;];
for(var i=0;i&amp;lt;list.length;i++){(new Image()).src = list[i]}
})();
&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://tech.sina.com.cn/css/717/20140911/index2014/feed.1.1.7.css&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://news.sina.com.cn/268/2014/0919/bshare_update.css&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://news.sina.com.cn/css/87/20140926/comment.3.css&amp;quot;&amp;gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://news.sina.com.cn/css/87/content2014/common.min.css&amp;quot; /&amp;gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;http://news.sina.com.cn/css/87/content2014/style_news.css&amp;quot; /&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://news.sina.com.cn/js/87/content2014/common.js&amp;quot; charset=&amp;quot;gbk&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
(function(){
//var isTouchDevice = 'ontouchstart' in window;
var _doc = document;
var head, meta;
if(SINA_ARTICLE_PAGE_SETTINGS.isPad){
head = _doc.querySelector('head');
meta = document.createElement('meta');
meta.setAttribute('name', 'viewport');
meta.setAttribute('content', 'initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no');
head.appendChild(meta);
_doc.write('&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://n0.sinaimg.cn/news/4803d74b/20170109/ipad.min.css&amp;quot;&amp;gt;');
_doc.write('&amp;lt;' + 'script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://n.sinaimg.cn/news/content2014/zepto.min.js&amp;quot;&amp;gt;&amp;lt;/' + 'script&amp;gt;');
} else {
_doc.write('&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://news.sina.com.cn/css/87/content2014/desktop.min.css&amp;quot;&amp;gt;');
_doc.write('&amp;lt;' + 'script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://n.sinaimg.cn/news/content2014/jquery-1.11.1.min.js&amp;quot;&amp;gt;&amp;lt;/' + 'script&amp;gt;');
}
})();
&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;try{document.domain='sina.com.cn'}catch(e){}&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://d1.sina.com.cn/litong/zhitou/sspnew.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://d2.sina.com.cn/d1images/button/rotator.js&amp;quot; charset=&amp;quot;gbk&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
//设置本页面的富媒体类型的顺序
var _SINAADS_CONF_PAGE_MEDIA_ORDER = [&amp;quot;PDPS000000056619&amp;quot;, &amp;quot;PDPS000000042133&amp;quot;, &amp;quot;PDPS000000057131&amp;quot;];
//var sinaadsPageMediaOrder = ['bottomstream', 'kzhzh', 'fc'];
&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
(function (d, s, id) {
var s, n = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
s = d.createElement(s);
s.id = id;
s.setAttribute('charset', 'utf-8');
s.src = '//d' + Math.floor(0 + Math.random() * (9 - 0 + 1)) + '.sina.com.cn/litong/zhitou/sinaads/release/sinaads.js';
n.parentNode.insertBefore(s, n);
})(document, 'script', 'sinaads-script');
&amp;lt;/script&amp;gt;
&amp;lt;script language='javascript' charset='utf-8' src='http://i.sso.sina.com.cn/js/ssologin.js'&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://i.sso.sina.com.cn/js/outlogin_layer.js&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://i.sso.sina.com.cn/js/user_panel_new_version_v2.js&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;&amp;lt;!-- body code begin --&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">bs4&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_soup&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;html.parser&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_div&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;#artibody p&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_div&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>[&amp;lt;p&amp;gt;　　[环球时报综合报道] “增长表现超出预期”，对于中国国家统计局公布的今年一季度6.9%的国内生产总值（GDP）增长率，外媒昨天纷纷这样强调。不同的人看到不一样的风景，但一个显而易见的事实是，只要中国大体维持目前的相对增长优势，上升的步伐便不可阻挡。正如美国《福布斯》日前所说：中国的经济奇迹没有结束，而是进入了第二阶段。&amp;lt;/p&amp;gt;, &amp;lt;p&amp;gt;　　虽然增长放缓，挑战越来越多，但中国的进步有目共睹。《纽约时报》17日称，过去11个季度的官方数据显示，中国经济增长在6.7%到7.2%之间。从国际标准看，这是令人吃惊的长期稳定增长。与此形成鲜明对比的是，美国的季度增长经常仅为一两个百分点。过去12年，中国蓝领工人薪酬激增8倍，这大幅削弱了中国的劳工成本优势，不过同时也促进了经济繁荣，推动消费增长。&amp;lt;/p&amp;gt;, &amp;lt;p&amp;gt;　　日本《外交学者》称，过去几十年中国GDP保持两位数增长，但现在增幅仅为6%到7%之间。尽管中国经济增长确实放缓了，但中国消费者强势登上世界舞台的购买力并没有减弱的趋势。事实上，中国消费者的购买力今后还将变得更加显著。麦肯锡分析师预计，到2020年中国将有近4亿家庭收入在1.6万到3.4万美元之间的“主流消费者”，或者说中产阶层消费者。这些消费者的强大实力将震撼世界。&amp;lt;/p&amp;gt;, &amp;lt;p&amp;gt;　　19日，第17届上海国际车展将拉开帷幕。法新社称，全球汽车厂商本周汇聚中国，面对世界最大汽车市场上的激烈竞争，业界正在为销售放缓和潜在的价格战做好准备。不过，应该客观认识中国汽车产业遇到的这些麻烦，中国对汽车厂商来说仍是一座金矿。去年美国汽车销量创下历史新高，达到1755万辆，但中国早在8年前就超越这个数字并成为世界第一大汽车市场。&amp;lt;/p&amp;gt;, &amp;lt;p&amp;gt;　　“中国奇迹没有结束，而是进入了第二阶段”，美国《福布斯》日前刊文称，1980年，世界人口最多的国家也是最贫困的国家之一。30多年后，中国已成为仅次于美国的世界第二大经济体。去年中国GDP达到10.8万亿美元。此前，从没有一个像中国这样规模如此之大、情况如此之复杂、历史如此之悠久的国家能在如此短的时间内迅速崛起。过去6年来，中国平均增速“仅为”6%到9%之间，这使得有些人宣称中国奇迹结束了。这些人错了，中国只是进入了第二阶段。中国政府在保持稳定的同时寻求发展。我们可将此解释为努力将中国经济从侧重制造和出口转向更成熟的经济发展推动力量。通过致力于现代化增长的四大支柱消费、科技、高端制造和服务业，中国将推动其经济增长奇迹转型和继续发展。&amp;lt;/p&amp;gt;]
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">article&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">artibody_div&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl"> &lt;span class="n">article&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">article&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>['[环球时报综合报道] “增长表现超出预期”，对于中国国家统计局公布的今年一季度6.9%的国内生产总值（GDP）增长率，外媒昨天纷纷这样强调。不同的人看到不一样的风景，但一个显而易见的事实是，只要中国大体维持目前的相对增长优势，上升的步伐便不可阻挡。正如美国《福布斯》日前所说：中国的经济奇迹没有结束，而是进入了第二阶段。', '虽然增长放缓，挑战越来越多，但中国的进步有目共睹。《纽约时报》17日称，过去11个季度的官方数据显示，中国经济增长在6.7%到7.2%之间。从国际标准看，这是令人吃惊的长期稳定增长。与此形成鲜明对比的是，美国的季度增长经常仅为一两个百分点。过去12年，中国蓝领工人薪酬激增8倍，这大幅削弱了中国的劳工成本优势，不过同时也促进了经济繁荣，推动消费增长。', '日本《外交学者》称，过去几十年中国GDP保持两位数增长，但现在增幅仅为6%到7%之间。尽管中国经济增长确实放缓了，但中国消费者强势登上世界舞台的购买力并没有减弱的趋势。事实上，中国消费者的购买力今后还将变得更加显著。麦肯锡分析师预计，到2020年中国将有近4亿家庭收入在1.6万到3.4万美元之间的“主流消费者”，或者说中产阶层消费者。这些消费者的强大实力将震撼世界。', '19日，第17届上海国际车展将拉开帷幕。法新社称，全球汽车厂商本周汇聚中国，面对世界最大汽车市场上的激烈竞争，业界正在为销售放缓和潜在的价格战做好准备。不过，应该客观认识中国汽车产业遇到的这些麻烦，中国对汽车厂商来说仍是一座金矿。去年美国汽车销量创下历史新高，达到1755万辆，但中国早在8年前就超越这个数字并成为世界第一大汽车市场。', '“中国奇迹没有结束，而是进入了第二阶段”，美国《福布斯》日前刊文称，1980年，世界人口最多的国家也是最贫困的国家之一。30多年后，中国已成为仅次于美国的世界第二大经济体。去年中国GDP达到10.8万亿美元。此前，从没有一个像中国这样规模如此之大、情况如此之复杂、历史如此之悠久的国家能在如此短的时间内迅速崛起。过去6年来，中国平均增速“仅为”6%到9%之间，这使得有些人宣称中国奇迹结束了。这些人错了，中国只是进入了第二阶段。中国政府在保持稳定的同时寻求发展。我们可将此解释为努力将中国经济从侧重制造和出口转向更成熟的经济发展推动力量。通过致力于现代化增长的四大支柱消费、科技、高端制造和服务业，中国将推动其经济增长奇迹转型和继续发展。']
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="s1">&amp;#39; &amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">article&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>'[环球时报综合报道] “增长表现超出预期”，对于中国国家统计局公布的今年一季度6.9%的国内生产总值（GDP）增长率，外媒昨天纷纷这样强调。不同的人看到不一样的风景，但一个显而易见的事实是，只要中国大体维持目前的相对增长优势，上升的步伐便不可阻挡。正如美国《福布斯》日前所说：中国的经济奇迹没有结束，而是进入了第二阶段。 虽然增长放缓，挑战越来越多，但中国的进步有目共睹。《纽约时报》17日称，过去11个季度的官方数据显示，中国经济增长在6.7%到7.2%之间。从国际标准看，这是令人吃惊的长期稳定增长。与此形成鲜明对比的是，美国的季度增长经常仅为一两个百分点。过去12年，中国蓝领工人薪酬激增8倍，这大幅削弱了中国的劳工成本优势，不过同时也促进了经济繁荣，推动消费增长。 日本《外交学者》称，过去几十年中国GDP保持两位数增长，但现在增幅仅为6%到7%之间。尽管中国经济增长确实放缓了，但中国消费者强势登上世界舞台的购买力并没有减弱的趋势。事实上，中国消费者的购买力今后还将变得更加显著。麦肯锡分析师预计，到2020年中国将有近4亿家庭收入在1.6万到3.4万美元之间的“主流消费者”，或者说中产阶层消费者。这些消费者的强大实力将震撼世界。 19日，第17届上海国际车展将拉开帷幕。法新社称，全球汽车厂商本周汇聚中国，面对世界最大汽车市场上的激烈竞争，业界正在为销售放缓和潜在的价格战做好准备。不过，应该客观认识中国汽车产业遇到的这些麻烦，中国对汽车厂商来说仍是一座金矿。去年美国汽车销量创下历史新高，达到1755万辆，但中国早在8年前就超越这个数字并成为世界第一大汽车市场。 “中国奇迹没有结束，而是进入了第二阶段”，美国《福布斯》日前刊文称，1980年，世界人口最多的国家也是最贫困的国家之一。30多年后，中国已成为仅次于美国的世界第二大经济体。去年中国GDP达到10.8万亿美元。此前，从没有一个像中国这样规模如此之大、情况如此之复杂、历史如此之悠久的国家能在如此短的时间内迅速崛起。过去6年来，中国平均增速“仅为”6%到9%之间，这使得有些人宣称中国奇迹结束了。这些人错了，中国只是进入了第二阶段。中国政府在保持稳定的同时寻求发展。我们可将此解释为努力将中国经济从侧重制造和出口转向更成熟的经济发展推动力量。通过致力于现代化增长的四大支柱消费、科技、高端制造和服务业，中国将推动其经济增长奇迹转型和继续发展。'
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="s1">&amp;#39; &amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;#artibody p&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]])&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>'[环球时报综合报道] “增长表现超出预期”，对于中国国家统计局公布的今年一季度6.9%的国内生产总值（GDP）增长率，外媒昨天纷纷这样强调。不同的人看到不一样的风景，但一个显而易见的事实是，只要中国大体维持目前的相对增长优势，上升的步伐便不可阻挡。正如美国《福布斯》日前所说：中国的经济奇迹没有结束，而是进入了第二阶段。 虽然增长放缓，挑战越来越多，但中国的进步有目共睹。《纽约时报》17日称，过去11个季度的官方数据显示，中国经济增长在6.7%到7.2%之间。从国际标准看，这是令人吃惊的长期稳定增长。与此形成鲜明对比的是，美国的季度增长经常仅为一两个百分点。过去12年，中国蓝领工人薪酬激增8倍，这大幅削弱了中国的劳工成本优势，不过同时也促进了经济繁荣，推动消费增长。 日本《外交学者》称，过去几十年中国GDP保持两位数增长，但现在增幅仅为6%到7%之间。尽管中国经济增长确实放缓了，但中国消费者强势登上世界舞台的购买力并没有减弱的趋势。事实上，中国消费者的购买力今后还将变得更加显著。麦肯锡分析师预计，到2020年中国将有近4亿家庭收入在1.6万到3.4万美元之间的“主流消费者”，或者说中产阶层消费者。这些消费者的强大实力将震撼世界。 19日，第17届上海国际车展将拉开帷幕。法新社称，全球汽车厂商本周汇聚中国，面对世界最大汽车市场上的激烈竞争，业界正在为销售放缓和潜在的价格战做好准备。不过，应该客观认识中国汽车产业遇到的这些麻烦，中国对汽车厂商来说仍是一座金矿。去年美国汽车销量创下历史新高，达到1755万辆，但中国早在8年前就超越这个数字并成为世界第一大汽车市场。 “中国奇迹没有结束，而是进入了第二阶段”，美国《福布斯》日前刊文称，1980年，世界人口最多的国家也是最贫困的国家之一。30多年后，中国已成为仅次于美国的世界第二大经济体。去年中国GDP达到10.8万亿美元。此前，从没有一个像中国这样规模如此之大、情况如此之复杂、历史如此之悠久的国家能在如此短的时间内迅速崛起。过去6年来，中国平均增速“仅为”6%到9%之间，这使得有些人宣称中国奇迹结束了。这些人错了，中国只是进入了第二阶段。中国政府在保持稳定的同时寻求发展。我们可将此解释为努力将中国经济从侧重制造和出口转向更成熟的经济发展推动力量。通过致力于现代化增长的四大支柱消费、科技、高端制造和服务业，中国将推动其经济增长奇迹转型和继续发展。'
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_editor&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;.article-editor&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lstrip&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;责任编辑：&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_editor&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>李伟山
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_title&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_title&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>美媒:中国奇迹没有结束 而是进入了第二阶段|中国经济_新浪新闻
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_div&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;p&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contents&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_p&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>['\u3000\u3000原标题：美媒：中国奇迹没有结束，而是进入了第二阶段']
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;.time-source&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contents&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">datetime&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">datetime&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="n">dt&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">datetime&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strptime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_time&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;%Y年%m月&lt;/span>&lt;span class="si">%d&lt;/span>&lt;span class="s1">日%H:%M&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dt&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strftime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;%Y-%m-&lt;/span>&lt;span class="si">%d&lt;/span>&lt;span class="s1"> %H:%M&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>2017-04-18 02:25
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_from&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;.time-source span a&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_from&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>环球网
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_commentCount&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;.page-tool-i&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_commentCount&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>[&amp;lt;span class=&amp;quot;page-tool-i page-tool-s&amp;quot; title=&amp;quot;分享&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;javascript:;&amp;quot; id=&amp;quot;shareArticleButton&amp;quot; onclick=&amp;quot;_S_uaTrack('index_news_content', 'other_click');&amp;quot;&amp;gt;分享&amp;lt;/a&amp;gt;
&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;page-tool-i page-tool-c page-tool-share&amp;quot; title=&amp;quot;评论&amp;quot;&amp;gt;
&amp;lt;span id=&amp;quot;commentCount1&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;a href=&amp;quot;javascript:;&amp;quot; suda-uatrack=&amp;quot;key=index_news_content&amp;amp;amp;value=comment_click&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;page-tool-i page-tool-s&amp;quot; title=&amp;quot;分享&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;javascript:;&amp;quot; id=&amp;quot;shareArticleButton2&amp;quot; onclick=&amp;quot;_S_uaTrack('index_news_content', 'other_roll_click');&amp;quot;&amp;gt;分享&amp;lt;/a&amp;gt;
&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;page-tool-i page-tool-c page-tool-share&amp;quot; id=&amp;quot;pageToolShare&amp;quot; title=&amp;quot;评论&amp;quot;&amp;gt;
&amp;lt;a href=&amp;quot;javascript:;&amp;quot; suda-uatrack=&amp;quot;key=index_news_content&amp;amp;amp;value=comment_roll_click&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;span id=&amp;quot;commentCount1M&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/span&amp;gt;]
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">comment_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;http://comment5.news.sina.com.cn/page/info?version=1&amp;amp;format=js&amp;amp;channel=gn&amp;amp;newsid=comos-fyeimzx6745829&amp;amp;group=&amp;amp;compress=0&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;page=1&amp;amp;page_size=20&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="n">comment_res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">comment_url&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="n">comment_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encoding&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">comment_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>var data={&amp;quot;result&amp;quot;: {&amp;quot;status&amp;quot;: {&amp;quot;msg&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;code&amp;quot;: 0}, &amp;quot;count&amp;quot;: {&amp;quot;qreply&amp;quot;: 10065, &amp;quot;total&amp;quot;: 10756, &amp;quot;show&amp;quot;: 200}, &amp;quot;replydict&amp;quot;: {&amp;quot;58F5941B-CA2D81B7-5D7A2F91-8C6-8ED&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;219.133.40.14&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u6df1\u5733&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F56F0A-DB85280E-EA280EB0-8C6-8D5&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e2d\u56fd\u6c7d\u8f662016\u5e74\u4ea7\u9500\u91cf2800\u4e07\u8f86\uff0c\u5168\u7403\u7b2c\u4e00\uff0c\u7f8e\u56fd1800\u4e07\u8f86\u7b2c\u4e8c\uff0c\u65e5\u672c500\u4e07\u8f86\u7b2c\u4e09\uff0c\u4e2d\u56fd\u662f\u7f8e\u56fd\u52a0\u65e5\u672c\u52a0\u5fb7\u56fd\u52a0\u6cd5\u56fd\u4e4b\u548c\u3002\u5168\u7403\u4e09\u5206\u4e4b\u4e00\u6c7d\u8f66\u88ab\u4e2d\u56fd\u4eba\u4e70\u8d70\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7528\u6237fkh05x1o56&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;77&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;12&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 09:42:34&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=qqweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HONORBLN-AL10) Chrome/37.0.0.0 MQQBrowser/6.0 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u6df1\u5733&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7528\u6237fkh05x1o56&amp;amp;wb_profile_img=http%3A%2F%2Ftvax1.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=1&amp;amp;wb_user_id=3928493744&amp;amp;wb_time=1492479754&amp;amp;area=\u5e7f\u4e1c\u6df1\u5733&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;11&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;3928493744&amp;quot;}], &amp;quot;58F59478-CA2D81B7-5D7A2F91-8C6-8A2&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;49.87.56.99&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6c5f\u82cf\u6dee\u5b89&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F547C0-31573863-DCD0C9AA-8C6-89D&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4f60\u7684\u5efa\u8bae\u6216\u613f\u671b\u662f\u7f8e\u597d\u7684\uff0c\u4f46\u5728\u73b0\u5728\u7684\u4e2d\u56fd\u4e0d\u5bb9\u6613\u5b9e\u73b0\u3002\u4e00\u5f53\u6743\u8005\u6ca1\u6709\u9510\u610f\u6539\u9769\u7684\u52c7\u6c14\uff0c\u4e8c\u65e2\u5f97\u5229\u76ca\u8005\u7684\u52bf\u529b\u53ca\u963b\u529b\u5f88\u5927\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;3704670634&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;54&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;44&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 06:54:56&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;p_nick=Maryland-DC&amp;amp;p_uid=3102045191&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;43&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;3704670634&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F547C0-31573863-DCD0C9AA-8C6-89D&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;124.207.17.226&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F550EF-7CCF11E2-5DFCC6D5-8C6-8F1&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5475\u5475\uff0c\u4e00\u8fb9\u60f3\u8981\u514d\u8d39\u7684\u4e00\u8fb9\u53c8\u60f3\u4f4e\u7a0e\u6536\uff01\u90a3\u8bf7\u95ee\u94b1\u4ece\u54ea\u91cc\u6765\uff1f\u5317\u6b27\u798f\u5229\u662f\u597d\uff0c\u4f46\u662f\u7a0e\u7387\u63a5\u8fd150%\uff01\u4f60\u53d7\u5f97\u4e86\u5417\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1576847061&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;50&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;481&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:34:07&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5317\u4eac&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=9&amp;amp;wb_user_id=1576847061&amp;amp;wb_time=1492472047&amp;amp;area=\u5317\u4eac&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;478&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1576847061&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F550EF-7CCF11E2-5DFCC6D5-8C6-8F1&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;112.96.33.147&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F56976-70602193-4B6CF1AD-8C6-8F0&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4eba\u5bb6\u5317\u6b27\u624d\u662f\u5171\u540c\u5bcc\u88d5&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;today1874&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;10&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;46&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 09:18:46&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=13&amp;amp;SOFT_TYPE=Safari/602.1&amp;amp;area=\u5e7f\u4e1c&amp;amp;wb_verified=0&amp;amp;wb_screen_name=today1874&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=2&amp;amp;wb_user_id=1265430957&amp;amp;wb_time=1492478326&amp;amp;area=\u5e7f\u4e1c&amp;amp;p_nick=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;p_uid=1576847061&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;45&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1265430957&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;palmnews&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F56976-70602193-4B6CF1AD-8C6-8F0&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;4&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;180.173.225.78&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u4e0a\u6d77&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F56B38-B4ADE14E-16D5DDB9C-8C6-8AC&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5317\u6b27\u5c0f\u56fd\u5be1\u6c11\u7684\uff0c\u5356\u5356\u77f3\u6cb9\uff0c\u5f00\u53d1\u4e00\u70b9\u70b9\u9ad8\u79d1\u6280\uff0c\u5c31\u5168\u89e3\u51b3\u4e86\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u4fca\u6770nautilus&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;28&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;19&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 09:26:17&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=&amp;amp;SOFT_TYPE=&amp;amp;area=\u4e0a\u6d77&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u4fca\u6770nautilus&amp;amp;wb_profile_img=http%3A%2F%2Ftva4.sinaimg.cn%2Fcrop.0.0.960.960.50%2F006GQa4Yjw8fcb22s2ya6j30qo0qot9d.jpg&amp;amp;followers_count=8&amp;amp;wb_user_id=6129834908&amp;amp;wb_time=1492478777&amp;amp;area=\u4e0a\u6d77&amp;amp;p_nick=today1874&amp;amp;p_uid=1265430957&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;18&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;6129834908&amp;quot;}], &amp;quot;58F595B8-ED7A027-16DF4AF24-8C6-8CD&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;49.87.56.99&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6c5f\u82cf\u6dee\u5b89&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F547C0-31573863-DCD0C9AA-8C6-89D&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4f60\u7684\u5efa\u8bae\u6216\u613f\u671b\u662f\u7f8e\u597d\u7684\uff0c\u4f46\u5728\u73b0\u5728\u7684\u4e2d\u56fd\u4e0d\u5bb9\u6613\u5b9e\u73b0\u3002\u4e00\u5f53\u6743\u8005\u6ca1\u6709\u9510\u610f\u6539\u9769\u7684\u52c7\u6c14\uff0c\u4e8c\u65e2\u5f97\u5229\u76ca\u8005\u7684\u52bf\u529b\u53ca\u963b\u529b\u5f88\u5927\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;3704670634&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;54&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;44&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 06:54:56&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;p_nick=Maryland-DC&amp;amp;p_uid=3102045191&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;43&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;3704670634&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F547C0-31573863-DCD0C9AA-8C6-89D&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;124.207.17.226&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F550EF-7CCF11E2-5DFCC6D5-8C6-8F1&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5475\u5475\uff0c\u4e00\u8fb9\u60f3\u8981\u514d\u8d39\u7684\u4e00\u8fb9\u53c8\u60f3\u4f4e\u7a0e\u6536\uff01\u90a3\u8bf7\u95ee\u94b1\u4ece\u54ea\u91cc\u6765\uff1f\u5317\u6b27\u798f\u5229\u662f\u597d\uff0c\u4f46\u662f\u7a0e\u7387\u63a5\u8fd150%\uff01\u4f60\u53d7\u5f97\u4e86\u5417\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1576847061&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;50&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;481&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:34:07&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5317\u4eac&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=9&amp;amp;wb_user_id=1576847061&amp;amp;wb_time=1492472047&amp;amp;area=\u5317\u4eac&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;478&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1576847061&amp;quot;}], &amp;quot;58F59210-CA2D81B7-5D7A2F91-8C6-8ED&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;125.107.105.210&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6d59\u6c5f\u7ecd\u5174&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55930-7D6B69D2-52FC936B-8C6-894&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u6211\u4e2a\u4eba\u89c9\u5f97\u4e2d\u56fd\u7ecf\u6d4e\u7684\u6301\u7eed\u9ad8\u901f\u53d1\u5c55\uff0c\u6709\u4e00\u4e2a\u6781\u5176\u91cd\u8981\u7684\u56e0\u7d20\u88ab\u4e16\u4eba\u6240\u9057\u5fd8-----\u90a3\u5c31\u662f\u51e0\u5343\u5e74\u519c\u8015\u6587\u660e\u6c89\u6dc0\u4e0b\u6765\u7684\u751f\u6d3b\u6001\u5ea6\u201c\u52e4\u52b3\u201d&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1392284523&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;61&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;27&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:09:20&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u6d59\u6c5f\u7ecd\u5174&amp;amp;wb_verified=0&amp;amp;wb_screen_name=70\u5e74\u4ee3\u524d\u671f&amp;amp;wb_profile_img=http%3A%2F%2Ftvax4.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=0&amp;amp;wb_user_id=1392284523&amp;amp;wb_time=1492474160&amp;amp;area=\u6d59\u6c5f\u7ecd\u5174&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;26&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1392284523&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F55930-7D6B69D2-52FC936B-8C6-894&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F55930-7D6B69D2-52FC936B-8C6-894&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;49.87.56.99&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6c5f\u82cf\u6dee\u5b89&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55FF1-31573863-DCD0C9AA-8C6-7E6&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u6bdb\u6cfd\u4e1c\u65f6\u4ee3\u88ab\u675f\u5265\u7684\u52b3\u52a8\u529b\u5728\u9093\u5c0f\u5e73\u6539\u9769\u5f00\u653e\u4e2d\u5f97\u5230\u6709\u6548\u7684\u91ca\u653e\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;3704670634&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;29&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;9&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:38:12&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;p_nick=70\u5e74\u4ee3\u524d\u671f&amp;amp;p_uid=1392284523&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;8&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;3704670634&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F55930-7D6B69D2-52FC936B-8C6-894&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F55FF1-31573863-DCD0C9AA-8C6-7E6&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;221.0.94.217&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5c71\u4e1c\u70df\u53f0&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F57CF1-DD005ED9-9F481B41-8C6-8F2&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4f60\u786e\u5b9a\u6bdb\u6cfd\u4e1c\u65f6\u4ee3\u88ab\u675f\u7f1a\uff1f\u4f60\u548b\u4e0d\u8bf4\uff0c\u6bdb\u6cfd\u4e1c\u65f6\u4ee3\u79ef\u7d2f\u4e86\u5f3a\u5927\u7684\u4eba\u53e3\u7ea2\u5229\uff1f\u5c31\u50cf\u4e00\u4e2a\u4e00\u7a77\u4e8c\u767d\u7684\u5bb6\u5ead\uff0c\u521a\u5f00\u59cb\u548c\u53d1\u5c55\u4e86\u82e5\u5e72\u5e74\u80fd\u4e00\u6837\u4e48\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;2672302913&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;60&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;31&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 10:41:52&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5c71\u4e1c\u70df\u53f0&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u91cd\u9547\u4e4b\u8a89&amp;amp;wb_profile_img=http%3A%2F%2Ftva1.sinaimg.cn%2Fcrop.0.0.180.180.50%2F9f481b41jw1e8qgp5bmzyj2050050aa8.jpg&amp;amp;followers_count=77&amp;amp;wb_user_id=2672302913&amp;amp;wb_time=1492483313&amp;amp;area=\u5c71\u4e1c\u70df\u53f0&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;30&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2672302913&amp;quot;}], &amp;quot;58F5917A-7A9CDBC6-706633CB-8C6-7D9&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;client&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;111.121.41.120&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u8d35\u5dde\u8d35\u9633&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55411-6F792978-812AA718-8C6-83A&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u8fd9\u662f\u7f8e\u56fd\u4eba\u7684\u7cd6\u8863\u70ae\u5f39\uff0c\u662f\u6367\u6740\u3002\u5f53\u5e74\u5c31\u662f\u8fd9\u4e48\u5439\u57ae\u5c0f\u65e5\u672c\u7684\uff0c\u865a\u5fc3\u4f7f\u4eba\u8fdb\u6b65\uff0c\u9a84\u50b2\u4f7f\u4eba\u843d\u540e\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u5200\u5c16\u6f2b\u821e&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;42&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;1099&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:47:33&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;OS_LANG=zh&amp;amp;SOFT_TYPE=SinaNews_v495&amp;amp;LATITUDE=26.564052&amp;amp;LONGITUDE=106.688995&amp;amp;client_ip=111.121.41.120&amp;amp;port=21506&amp;amp;from=palmnews&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u5200\u5c16\u6fb7\u821e&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.768.768.50%2F812aa718jw8ex6jtxc0o5j20lc0lcjsl.jpg&amp;amp;followers_count=39&amp;amp;wb_user_id=2167056152&amp;amp;wb_time=1492472849&amp;amp;area=\u8d35\u5dde\u8d35\u9633&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;1097&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2167056152&amp;quot;}], &amp;quot;58F591F7-72F2F8E8-A34740CF-8C6-86E&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;49.87.56.99&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6c5f\u82cf\u6dee\u5b89&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F547C0-31573863-DCD0C9AA-8C6-89D&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4f60\u7684\u5efa\u8bae\u6216\u613f\u671b\u662f\u7f8e\u597d\u7684\uff0c\u4f46\u5728\u73b0\u5728\u7684\u4e2d\u56fd\u4e0d\u5bb9\u6613\u5b9e\u73b0\u3002\u4e00\u5f53\u6743\u8005\u6ca1\u6709\u9510\u610f\u6539\u9769\u7684\u52c7\u6c14\uff0c\u4e8c\u65e2\u5f97\u5229\u76ca\u8005\u7684\u52bf\u529b\u53ca\u963b\u529b\u5f88\u5927\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;3704670634&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;54&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;44&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 06:54:56&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;area=\u6c5f\u82cf\u6dee\u5b89&amp;amp;p_nick=Maryland-DC&amp;amp;p_uid=3102045191&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;43&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;3704670634&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F547C0-31573863-DCD0C9AA-8C6-89D&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;124.207.17.226&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F550EF-7CCF11E2-5DFCC6D5-8C6-8F1&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5475\u5475\uff0c\u4e00\u8fb9\u60f3\u8981\u514d\u8d39\u7684\u4e00\u8fb9\u53c8\u60f3\u4f4e\u7a0e\u6536\uff01\u90a3\u8bf7\u95ee\u94b1\u4ece\u54ea\u91cc\u6765\uff1f\u5317\u6b27\u798f\u5229\u662f\u597d\uff0c\u4f46\u662f\u7a0e\u7387\u63a5\u8fd150%\uff01\u4f60\u53d7\u5f97\u4e86\u5417\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1576847061&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;50&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;481&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:34:07&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5317\u4eac&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=9&amp;amp;wb_user_id=1576847061&amp;amp;wb_time=1492472047&amp;amp;area=\u5317\u4eac&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;478&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1576847061&amp;quot;}], &amp;quot;58F59606-793A120A-16ECC0302-8C6-91B&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.215.161.210&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4ee5\u524d\u6c11\u4f17\u4ec0\u751f\u6d3b\uff0c\u73b0\u5728\u4ec0\u4e48\u751f\u6d3b\uff1f\u4e2d\u56fd\u73b0\u5728\u53ea\u8981\u4f60\u80af\u52aa\u529b\uff0c\u867d\u7136\u4e0d\u4e00\u5b9a\u6709\u8f66\u6709\u623f\uff0c\u4f46\u80af\u5b9a\u4e0d\u6101\u5403\u4f4f\u7a7f\u3002\u7535\u89c6\u3001\u6469\u6258\u8f66\u3001\u6d17\u8863\u673a\u3001\u7535\u8111\u3001\u624b\u673a\u3001\u8fd9\u4e9b\u90fd\u5df2\u7ecf\u662f\u666e\u901a\u5bb6\u5ead\u7684\u914d\u5907\u4e86\u300220\u5e74\u524d\u6709\u51e0\u5bb6\u6709\uff1f\u4f60\u8bf4\u6ca1\u6709\u60e0\u53ca\u6c11\u4f17\u662f\u7741\u773c\u8bf4\u778e\u8bdd\u3002\u867d\u7136\u8fd8\u6709\u5f88\u591a\u4e0d\u8db3\uff0c\u4f46\u4e2d\u56fd\u7684\u751f\u6d3b\u6c34\u5e73\u7684\u786e\u6709\u5f88\u5927\u7684\u98de\u8dc3\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;127&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;442&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:58:08&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIMHA-AL00) Chrome/40.0.2214.89 UCBrowser/11.4.9.941 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.1180.1180.50%2F00641SPUgw1eq5fm40xnsj30wu0wu0yi.jpg&amp;amp;followers_count=24&amp;amp;wb_user_id=5556351458&amp;amp;wb_time=1492477087&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=8866\u5f00\u5fc3&amp;amp;p_uid=1413695942&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;441&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5556351458&amp;quot;}], &amp;quot;58F59540-ED7A091-1485BB312-8C6-8CA&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.215.161.210&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4ee5\u524d\u6c11\u4f17\u4ec0\u751f\u6d3b\uff0c\u73b0\u5728\u4ec0\u4e48\u751f\u6d3b\uff1f\u4e2d\u56fd\u73b0\u5728\u53ea\u8981\u4f60\u80af\u52aa\u529b\uff0c\u867d\u7136\u4e0d\u4e00\u5b9a\u6709\u8f66\u6709\u623f\uff0c\u4f46\u80af\u5b9a\u4e0d\u6101\u5403\u4f4f\u7a7f\u3002\u7535\u89c6\u3001\u6469\u6258\u8f66\u3001\u6d17\u8863\u673a\u3001\u7535\u8111\u3001\u624b\u673a\u3001\u8fd9\u4e9b\u90fd\u5df2\u7ecf\u662f\u666e\u901a\u5bb6\u5ead\u7684\u914d\u5907\u4e86\u300220\u5e74\u524d\u6709\u51e0\u5bb6\u6709\uff1f\u4f60\u8bf4\u6ca1\u6709\u60e0\u53ca\u6c11\u4f17\u662f\u7741\u773c\u8bf4\u778e\u8bdd\u3002\u867d\u7136\u8fd8\u6709\u5f88\u591a\u4e0d\u8db3\uff0c\u4f46\u4e2d\u56fd\u7684\u751f\u6d3b\u6c34\u5e73\u7684\u786e\u6709\u5f88\u5927\u7684\u98de\u8dc3\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;127&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;442&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:58:08&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIMHA-AL00) Chrome/40.0.2214.89 UCBrowser/11.4.9.941 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.1180.1180.50%2F00641SPUgw1eq5fm40xnsj30wu0wu0yi.jpg&amp;amp;followers_count=24&amp;amp;wb_user_id=5556351458&amp;amp;wb_time=1492477087&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=8866\u5f00\u5fc3&amp;amp;p_uid=1413695942&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;441&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5556351458&amp;quot;}], &amp;quot;58F59113-CA2D81B7-5D7A2F91-8C6-95F&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;117.141.117.161&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u897f\u5357\u5b81&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F585C8-758D75A1-1487E0A75-8C6-898&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e2d\u56fd\u521b\u4e1a\u521b\u65b0\u6d3b\u529b\u65e5\u76ca\u589e\u5f3a\uff0c\u793e\u4f1a\u7ecf\u6d4e\u53d1\u5c55\u81ea\u7136\u5947\u8ff9\u95ea\u70c1\uff0c\u6211\u4eec\u76f8\u4fe1\u65b0\u7684\u4e00\u5e74\u91cc\uff0c\u5728\u201c\u521b\u65b0\u3001\u534f\u8c03\u3001\u7eff\u8272\u3001\u5f00\u653e\u3001\u5171\u4eab\u201d\u4e94\u5927\u53d1\u5c55\u65b0\u7406\u5ff5\u5f15\u9886\u4e0b\u7684\u4e2d\u56fd\uff0c\u4f1a\u53d8\u5f97\u66f4\u597d\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;5511187061&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;73&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;23&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 11:19:36&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5e7f\u897f\u5357\u5b81&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u82b1\u7530\u519c\u592b_54159&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=3&amp;amp;wb_user_id=5511187061&amp;amp;wb_time=1492485576&amp;amp;area=\u5e7f\u897f\u5357\u5b81&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;22&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5511187061&amp;quot;}], &amp;quot;58F591AE-CA2D81B7-5D7A2F91-8C6-A08&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;123.125.193.138&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55875-7B7DC18A-160C230EF-8C6-8C8&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e2d\u56fd\u7684gdp\u90fd\u662f\u623f\u4ef7\u63a8\u4e0a\u53bb\u7684\uff0c\u5176\u4ed6\u4ea7\u4e1a\u88ab\u589e\u957f\u4e86\uff01&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u9060\u65b9\u4e0d\u8fdcKM&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;24&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;10&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:06:13&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/MMB29T) Chrome/40.0.2214.89 UCBrowser/11.3.8.909 Safari/537.36&amp;amp;area=\u5317\u4eac&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u9060\u65b9\u4e0d\u8fdcKM&amp;amp;wb_profile_img=http%3A%2F%2Ftvax1.sinaimg.cn%2Fcrop.0.0.1328.1328.50%2F006swBT9ly8fdq6a6qejhj310w10w0wi.jpg&amp;amp;followers_count=16&amp;amp;wb_user_id=5918306543&amp;amp;wb_time=1492473973&amp;amp;area=\u5317\u4eac&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;10&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5918306543&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F55875-7B7DC18A-160C230EF-8C6-8C8&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F55875-7B7DC18A-160C230EF-8C6-8C8&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;221.0.94.217&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5c71\u4e1c\u70df\u53f0&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F57D61-DD005ED9-9F481B41-8C6-8ED&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u54c7\uff0c\u8fd9\u4e48\u597d\u7528\uff0c\u4e3a\u4ec0\u4e48\u5c31\u4e2d\u56fd\u7528\u5462\u3002\u3002\u771f\u5947\u4e86\u602a\u3002\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;2672302913&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;23&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;19&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 10:43:45&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5c71\u4e1c\u70df\u53f0&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u91cd\u9547\u4e4b\u8a89&amp;amp;wb_profile_img=http%3A%2F%2Ftva1.sinaimg.cn%2Fcrop.0.0.180.180.50%2F9f481b41jw1e8qgp5bmzyj2050050aa8.jpg&amp;amp;followers_count=77&amp;amp;wb_user_id=2672302913&amp;amp;wb_time=1492483425&amp;amp;area=\u5c71\u4e1c\u70df\u53f0&amp;amp;p_nick=\u9060\u65b9\u4e0d\u8fdcKM&amp;amp;p_uid=5918306543&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;18&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2672302913&amp;quot;}], &amp;quot;58F59278-3B216B15-451467A8-8C6-881&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.215.161.210&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4ee5\u524d\u6c11\u4f17\u4ec0\u751f\u6d3b\uff0c\u73b0\u5728\u4ec0\u4e48\u751f\u6d3b\uff1f\u4e2d\u56fd\u73b0\u5728\u53ea\u8981\u4f60\u80af\u52aa\u529b\uff0c\u867d\u7136\u4e0d\u4e00\u5b9a\u6709\u8f66\u6709\u623f\uff0c\u4f46\u80af\u5b9a\u4e0d\u6101\u5403\u4f4f\u7a7f\u3002\u7535\u89c6\u3001\u6469\u6258\u8f66\u3001\u6d17\u8863\u673a\u3001\u7535\u8111\u3001\u624b\u673a\u3001\u8fd9\u4e9b\u90fd\u5df2\u7ecf\u662f\u666e\u901a\u5bb6\u5ead\u7684\u914d\u5907\u4e86\u300220\u5e74\u524d\u6709\u51e0\u5bb6\u6709\uff1f\u4f60\u8bf4\u6ca1\u6709\u60e0\u53ca\u6c11\u4f17\u662f\u7741\u773c\u8bf4\u778e\u8bdd\u3002\u867d\u7136\u8fd8\u6709\u5f88\u591a\u4e0d\u8db3\uff0c\u4f46\u4e2d\u56fd\u7684\u751f\u6d3b\u6c34\u5e73\u7684\u786e\u6709\u5f88\u5927\u7684\u98de\u8dc3\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;127&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;442&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:58:08&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIMHA-AL00) Chrome/40.0.2214.89 UCBrowser/11.4.9.941 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.1180.1180.50%2F00641SPUgw1eq5fm40xnsj30wu0wu0yi.jpg&amp;amp;followers_count=24&amp;amp;wb_user_id=5556351458&amp;amp;wb_time=1492477087&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=8866\u5f00\u5fc3&amp;amp;p_uid=1413695942&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;441&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5556351458&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;117.136.97.39&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u897f&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F58496-75886127-14302C124-8C6-843&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;20\u5e74\u524d\uff1f\u4f60\u600e\u4e48\u4e0d\u8bf4500\u5e74\u524d\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7528\u62375419221284&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;16&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;34&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 11:14:31&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/LMY47D) Chrome/35.0.1916.138 Safari/537.36 T7/7.4 baiduboxapp/8.4&amp;amp;area=\u5e7f\u897f&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7528\u62375419221284&amp;amp;wb_profile_img=http%3A%2F%2Ftvax1.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=3&amp;amp;wb_user_id=5419221284&amp;amp;wb_time=1492485270&amp;amp;area=\u5e7f\u897f&amp;amp;p_nick=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;p_uid=5556351458&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;33&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5419221284&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F58496-75886127-14302C124-8C6-843&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.152.68.195&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F58D06-E9844C3-9A001259-8C6-88F&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u56e0\u4e3a\u4e2d\u56fd\u8fd1\u4e09\u5341\u5e74\u624d\u7b97\u6539\u9769\u53d1\u5c55\uff0c\u4e09\u5341\u5e74\u7684\u53d1\u5c55\u8ffd\u8d76\u4e0a\u4e86\u5f88\u591a\u56fd\u5bb6\u4e00\u4e2a\u4e16\u7eaa\u7684\u811a\u6b65\u3002\u5982\u679c\u4f60\u8981\u786c\u626f500\u5e74\uff0c\u6211\u53ea\u80fd\u4ee5\u5173\u7231\u667a\u969c\u7684\u773c\u795e\u770b\u7740\u4f60&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;waitinlee&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;62&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;50&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 11:50:29&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIFRD-AL00) Chrome/40.0.2214.89 UCBrowser/11.4.2.936 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=waitinlee&amp;amp;wb_profile_img=http%3A%2F%2Ftva4.sinaimg.cn%2Fcrop.0.0.640.640.50%2F9a001259jw8eqi6mc128tj20hs0hs76c.jpg&amp;amp;followers_count=98&amp;amp;wb_user_id=2583695961&amp;amp;wb_time=1492487430&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=\u7528\u62375419221284&amp;amp;p_uid=5419221284&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;49&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2583695961&amp;quot;}], &amp;quot;58F593EF-DB85280E-454C19D3-8C6-98B&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.215.161.210&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4ee5\u524d\u6c11\u4f17\u4ec0\u751f\u6d3b\uff0c\u73b0\u5728\u4ec0\u4e48\u751f\u6d3b\uff1f\u4e2d\u56fd\u73b0\u5728\u53ea\u8981\u4f60\u80af\u52aa\u529b\uff0c\u867d\u7136\u4e0d\u4e00\u5b9a\u6709\u8f66\u6709\u623f\uff0c\u4f46\u80af\u5b9a\u4e0d\u6101\u5403\u4f4f\u7a7f\u3002\u7535\u89c6\u3001\u6469\u6258\u8f66\u3001\u6d17\u8863\u673a\u3001\u7535\u8111\u3001\u624b\u673a\u3001\u8fd9\u4e9b\u90fd\u5df2\u7ecf\u662f\u666e\u901a\u5bb6\u5ead\u7684\u914d\u5907\u4e86\u300220\u5e74\u524d\u6709\u51e0\u5bb6\u6709\uff1f\u4f60\u8bf4\u6ca1\u6709\u60e0\u53ca\u6c11\u4f17\u662f\u7741\u773c\u8bf4\u778e\u8bdd\u3002\u867d\u7136\u8fd8\u6709\u5f88\u591a\u4e0d\u8db3\uff0c\u4f46\u4e2d\u56fd\u7684\u751f\u6d3b\u6c34\u5e73\u7684\u786e\u6709\u5f88\u5927\u7684\u98de\u8dc3\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;127&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;442&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:58:08&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIMHA-AL00) Chrome/40.0.2214.89 UCBrowser/11.4.9.941 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.1180.1180.50%2F00641SPUgw1eq5fm40xnsj30wu0wu0yi.jpg&amp;amp;followers_count=24&amp;amp;wb_user_id=5556351458&amp;amp;wb_time=1492477087&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=8866\u5f00\u5fc3&amp;amp;p_uid=1413695942&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;441&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5556351458&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;117.136.97.39&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u897f&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F58496-75886127-14302C124-8C6-843&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;20\u5e74\u524d\uff1f\u4f60\u600e\u4e48\u4e0d\u8bf4500\u5e74\u524d\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7528\u62375419221284&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;16&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;34&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 11:14:31&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/LMY47D) Chrome/35.0.1916.138 Safari/537.36 T7/7.4 baiduboxapp/8.4&amp;amp;area=\u5e7f\u897f&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7528\u62375419221284&amp;amp;wb_profile_img=http%3A%2F%2Ftvax1.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=3&amp;amp;wb_user_id=5419221284&amp;amp;wb_time=1492485270&amp;amp;area=\u5e7f\u897f&amp;amp;p_nick=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;p_uid=5556351458&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;33&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5419221284&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F58496-75886127-14302C124-8C6-843&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.152.68.195&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F58D06-E9844C3-9A001259-8C6-88F&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u56e0\u4e3a\u4e2d\u56fd\u8fd1\u4e09\u5341\u5e74\u624d\u7b97\u6539\u9769\u53d1\u5c55\uff0c\u4e09\u5341\u5e74\u7684\u53d1\u5c55\u8ffd\u8d76\u4e0a\u4e86\u5f88\u591a\u56fd\u5bb6\u4e00\u4e2a\u4e16\u7eaa\u7684\u811a\u6b65\u3002\u5982\u679c\u4f60\u8981\u786c\u626f500\u5e74\uff0c\u6211\u53ea\u80fd\u4ee5\u5173\u7231\u667a\u969c\u7684\u773c\u795e\u770b\u7740\u4f60&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;waitinlee&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;62&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;50&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 11:50:29&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIFRD-AL00) Chrome/40.0.2214.89 UCBrowser/11.4.2.936 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=waitinlee&amp;amp;wb_profile_img=http%3A%2F%2Ftva4.sinaimg.cn%2Fcrop.0.0.640.640.50%2F9a001259jw8eqi6mc128tj20hs0hs76c.jpg&amp;amp;followers_count=98&amp;amp;wb_user_id=2583695961&amp;amp;wb_time=1492487430&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=\u7528\u62375419221284&amp;amp;p_uid=5419221284&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;49&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2583695961&amp;quot;}]}, &amp;quot;language&amp;quot;: &amp;quot;ch&amp;quot;, &amp;quot;encoding&amp;quot;: &amp;quot;utf-8&amp;quot;, &amp;quot;top&amp;quot;: [], &amp;quot;cmntlist&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;121.58.18.10&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6d77\u5357\u6d77\u53e3&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59606-793A120A-16ECC0302-8C6-91B&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u662f\u7684\uff01\u6c11\u4f17\u751f\u6d3b\u6c34\u5e73\u5927\u6b65\u63d0\u9ad8\u662f\u4e8b\u5b9e\uff01\u867d\u7136\u8fd8\u6709\u4e0d\u8db3\uff01\u4f46\u8981\u77e5\u9053\u4e2d\u56fd\u8fd9\u4e48\u5927\uff0c\u6709\u95ee\u9898\u662f\u6b63\u5e38&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7528\u62376153831170&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;40&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;13&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:28:55&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/CHM-CL00) Safari/537.36&amp;amp;area=\u6d77\u5357\u6d77\u53e3&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7528\u62376153831170&amp;amp;wb_profile_img=http%3A%2F%2Ftvax3.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=1&amp;amp;wb_user_id=6153831170&amp;amp;wb_time=1492489734&amp;amp;area=\u6d77\u5357\u6d77\u53e3&amp;amp;p_nick=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;p_uid=5556351458&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;12&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;6153831170&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F550EF-7CCF11E2-5DFCC6D5-8C6-8F1&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.215.160.39&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F595B8-ED7A027-16DF4AF24-8C6-8CD&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5317\u6b27\u4e0d\u6b6250%\u5427&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7528\u62376139719460&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;8&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:27:37&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIKNT-AL10) Chrome/40.0.2214.89 UCBrowser/11.4.9.941 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7528\u62376139719460&amp;amp;wb_profile_img=http%3A%2F%2Ftvax1.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=6&amp;amp;wb_user_id=6139719460&amp;amp;wb_time=1492489656&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;p_uid=1576847061&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;6139719460&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.215.160.145&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59540-ED7A091-1485BB312-8C6-8CA&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u95ed\u5173\u9501\u56fd\u53ea\u4f1a\u843d\u540e \u73b0\u5728\u79fb\u52a8\u652f\u4ed8 \u5feb\u9012 \u5916\u5356\u53d1\u5c55\u592a\u5feb\u4e86\u3002\u592a\u65b9\u4fbf\u7684\u3002\u4e0d\u8fc7\u4e0d\u8981\u5fd8\u4e86\u6211\u4eec\u7684\u98df\u54c1\u5b89\u5168 \u7a7a\u6c14\u8d28\u91cf \u4ea4\u901a\u72b6\u51b5\u7b49\u7b49 \u505a\u7684\u8fd8\u8fdc\u8fdc\u4e0d\u591f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u4e00\u676f\u624e\u5564\u7684\u91cf&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;65&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;12&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:25:36&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=13&amp;amp;SOFT_TYPE=UCBrowser/11.5.1.957 AliApp(TUnionSDK/0.1.15)&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u4e00\u676f\u624e\u5564\u7684\u91cf&amp;amp;wb_profile_img=http%3A%2F%2Ftvax3.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=10&amp;amp;wb_user_id=5508936466&amp;amp;wb_time=1492489536&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;p_uid=5556351458&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;11&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5508936466&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;117.12.74.210&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5929\u6d25&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F594AE-750C4AD2-7F9E30AF-8C6-9DA&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e2d\u56fd\u8fd8\u662f\u8981\u6212\u9a84\u6212\u8e81\uff0c\u8e0f\u5b9e\u53d1\u5c55\u81ea\u5df1\uff0c\u505a\u597d\u6211\u4eec\u81ea\u5df1\u7684\u4e8b\u4e1a\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;2141073583&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;27&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;9&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:23:10&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5929\u6d25&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u5a01\u4e0d\u9732&amp;amp;wb_profile_img=http%3A%2F%2Ftvax4.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=34&amp;amp;wb_user_id=2141073583&amp;amp;wb_time=1492489390&amp;amp;area=\u5929\u6d25&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;9&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2141073583&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F56B38-B4ADE14E-16D5DDB9C-8C6-8AC&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;5&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;202.45.129.183&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u65e5\u672c&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59478-CA2D81B7-5D7A2F91-8C6-8A2&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5317\u6b27\u5356\u6cb9\uff1f\u5927\u4e0a\u6d77\u4eba\u771f\u6709\u89c1\u8bc6\uff01\u8fd8\u6709\u8bf4\u5f97\u9ad8\u79d1\u6280\u597d\u50cf\u5f88\u7b80\u5355\u4e00\u6837\uff0c\u5927\u4e0a\u6d77\u51fa\u4eba\u624d[\u5077\u7b11][\u54c8\u54c8]&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1568288657&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;43&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;8&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:22:15&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u65e5\u672c&amp;amp;area=\u65e5\u672c&amp;amp;p_nick=\u4fca\u6770nautilus&amp;amp;p_uid=6129834908&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;7&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1568288657&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;36.187.228.208&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u65b0\u7586\u54c8\u5bc6&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59445-24BBE4D0-451438C1-8C6-92C&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u52a0\u6cb9&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1158953153&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:21:24&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u65b0\u7586\u54c8\u5bc6&amp;amp;wb_verified=0&amp;amp;wb_screen_name=xhs421120&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.180.180.50%2F451438c1jw1e8qgp5bmzyj2050050aa8.jpg&amp;amp;followers_count=30&amp;amp;wb_user_id=1158953153&amp;amp;wb_time=1492489285&amp;amp;area=\u65b0\u7586\u54c8\u5bc6&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1158953153&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;10.71.2.95&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac\u6d77\u6dc0&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5941F-A47025F-3C11E60C-8C6-8D0&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u8fc7\u53bb\u5341\u4e8c\u5e74\uff0c\u4e2d\u56fd\u84dd\u9886\u6536\u5165\u6fc0\u589e8\u500d\u2026\u2026\u8fd9\u4e2a\u6570\u636e\u5e76\u4e0d\u5ba2\u89c2\u2026\u2026\u62112005\u5e74\u51fa\u6765\u505a\u5de5\uff0c\u5c0f\u5382\u7684\u666e\u5de5\u5de5\u8d44\u4e00\u5343\u4e94\u5de6\u53f3\uff0c\u5230\u4e86\u4eca\u5e74\uff0c\u6211\u5728\u4e00\u4e2a\u653f\u5e9c\u6ce8\u8d44\u7684\u6db2\u6676\u9762\u677f\u4f01\u4e1a\u505a\u4e2d\u7ea7\u6280\u672f\u5458\uff0c\u5de5\u8d44\u516d\u5343\u5230\u4e03\u5343\uff0c\u4e0d\u8bba\u8fd9\u4e2d\u95f4\u6211\u81ea\u5df1\u7684\u8fdb\u6b65\uff0c\u7ea7\u522b\u7684\u63d0\u9ad8\uff0c\u5355\u8bba\u5de5\u8d44\uff0c\u4e5f\u5c31\u7ffb\u4e86\u56db\u500d\u591a\u4e00\u70b9\uff0c\uff08\u5982\u679c\u505a\u666e\u5de5\uff0c\u6216\u8005\u552e\u8d27\u5458\uff0c\u670d\u52a1\u5458\u4e4b\u7c7b\uff0c\u5de5\u8d44\u4e09\u56db\u5343\u7684\u5927\u6709\u4eba\u5728\uff09\uff0c\u5355\u8bba\u8d2d\u4e70\u529b\uff0c\u6211\u89c9\u5f97\u6211\u73b0\u5728\u7684\u516d\u4e03\u5343\u8ddf\u90a3\u65f6\u5019\u7684\u4e00\u5343\u591a\u6bd4\u8f83\uff0c\u6ca1\u6709\u591a\u5927\u5dee\u522b\uff0c\u90a3\u65f6\u5019\u8857\u5934\u5403\u4e00\u4e2a\u7092\u996d2.5\u5143\uff0c\u73b0\u5728\u516b\u5143\u8d77\uff0c&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u98ce\u4e2d\u52b2\u8349198702&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;206&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;12&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:20:47&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/LRX21M) Chrome/40.0.2214.89 UCBrowser/11.4.9.941 Safari/537.36&amp;amp;area=\u5317\u4eac\u6d77\u6dc0&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u98ce\u4e2d\u52b2\u8349198702&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.996.996.50%2F3c11e60cjw8f3c9sj2rivj20ro0rpq59.jpg&amp;amp;followers_count=1&amp;amp;wb_user_id=1007805964&amp;amp;wb_time=1492489247&amp;amp;area=\u5317\u4eac\u6d77\u6dc0&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;11&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1007805964&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F56F0A-DB85280E-EA280EB0-8C6-8D5&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F56F0A-DB85280E-EA280EB0-8C6-8D5&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;202.45.129.183&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u65e5\u672c&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5941B-CA2D81B7-5D7A2F91-8C6-8ED&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e0a\u6c7d\u901a\u7528\u4e94\u83f1\u5417\uff1f[\u5077\u7b11][\u54c8\u54c8]&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1568288657&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;16&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:20:42&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u65e5\u672c&amp;amp;area=\u65e5\u672c&amp;amp;p_nick=\u7528\u6237fkh05x1o56&amp;amp;p_uid=3928493744&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1568288657&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;palmnews&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;183.37.211.59&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u6df1\u5733&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F593FA-B725D33B-1643E5602-8C6-911&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u6367\u6740&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7231\u5728\u53bb\u5e74\u6628\u5929&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:20:10&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=&amp;amp;SOFT_TYPE=&amp;amp;area=\u5e7f\u4e1c\u6df1\u5733&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7231\u5728\u53bb\u5e74\u6628\u5929&amp;amp;wb_profile_img=http%3A%2F%2Ftvax3.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=46&amp;amp;wb_user_id=5976774146&amp;amp;wb_time=1492489210&amp;amp;area=\u5e7f\u4e1c\u6df1\u5733&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5976774146&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F58D06-E9844C3-9A001259-8C6-88F&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;4&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;219.133.40.14&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac\u6d77\u6dc0&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F593EF-DB85280E-454C19D3-8C6-98B&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u8bf4\u7684\u597d\uff01&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;yanghua5725&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;4&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;4&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:20:01&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=qqweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/LMY47I) Chrome/37.0.0.0 MQQBrowser/7.4 Safari/537.36&amp;amp;area=\u5317\u4eac\u6d77\u6dc0&amp;amp;wb_verified=0&amp;amp;wb_screen_name=yanghua5725&amp;amp;wb_profile_img=http%3A%2F%2Ftvax4.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=16&amp;amp;wb_user_id=1162615251&amp;amp;wb_time=1492489201&amp;amp;area=\u5317\u4eac\u6d77\u6dc0&amp;amp;p_nick=waitinlee&amp;amp;p_uid=2583695961&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1162615251&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.152.68.162&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F593CC-E9844A2-6F2D2985-8C6-827&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5915\u9633\u65e0\u9650\u597d\uff0c\u53ea\u662f\u8fd1\u9ec4\u660f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u5112\u5efa&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;11&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:19:23&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/MRA58K) Chrome/40.0.2214.89 UCBrowser/11.4.2.936 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u5112\u5efa&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=22&amp;amp;wb_user_id=1865230725&amp;amp;wb_time=1492489164&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1865230725&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;palmnews&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;222.223.56.115&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6cb3\u5317\u6ca7\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5927D-DEDF3873-163BE44DA-8C6-92A&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u793e\u4f1a\u4fdd\u969c\u6ca1\u6709\u672c\u8d28\u63d0\u5347 \u9664\u4e86\u5c11\u6570\u51e0\u4e2a\u5927\u57ce\u5e02\u5176\u4ed6\u4eba\u90fd\u662f\u4e8c\u7b49\u516c\u6c11&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;Amrice199606&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;29&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;9&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:13:49&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=&amp;amp;SOFT_TYPE=&amp;amp;area=\u6cb3\u5317\u6ca7\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=Amrice199606&amp;amp;wb_profile_img=http%3A%2F%2Ftva4.sinaimg.cn%2Fcrop.0.12.640.640.50%2F006vUIA2jw8f95gxe90ykj30hs0igt9m.jpg&amp;amp;followers_count=9&amp;amp;wb_user_id=5968381146&amp;amp;wb_time=1492488829&amp;amp;area=\u6cb3\u5317\u6ca7\u5dde&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;9&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5968381146&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F58D06-E9844C3-9A001259-8C6-88F&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;4&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;59.33.107.21&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u4e2d\u5c71&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59278-3B216B15-451467A8-8C6-881&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e8c\u697c\u8fd9\u62ac\u6760\u592a\u641e\u7b11\u4e86\uff0c\u8981\u77e5\u9053\u5f88\u591a\u56fd\u5bb6\u7684\u751f\u6d3b\u6c34\u5e73\u8fd8\u5982\u4ed6\u4eec20\u5e74\u524d\u7684\u6c34\u5e73\u5462&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1158965160&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;34&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;8&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:13:44&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5e7f\u4e1c\u4e2d\u5c71&amp;amp;wb_verified=0&amp;amp;wb_screen_name=tanxu08&amp;amp;wb_profile_img=http%3A%2F%2Ftvax1.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=1&amp;amp;wb_user_id=1158965160&amp;amp;wb_time=1492488824&amp;amp;area=\u5e7f\u4e1c\u4e2d\u5c71&amp;amp;p_nick=waitinlee&amp;amp;p_uid=2583695961&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;7&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1158965160&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;121.207.75.51&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u798f\u5efa\u6cc9\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59246-79CF4B33-C2C552ED-8C6-8C2&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5f52\u529f\u4e8e\u4f1f\u5927\u7684\uff0c\u52e4\u52b3\u7684\uff0c\u667a\u6167\u7684\uff0c\u4f20\u7edf\u7684\u4e2d\u56fd\u4eba\u6c11\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u5bd2\u6c5f\u5782\u9493\u56fe&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;23&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;5&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:12:55&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/MMB29M) Chrome/53.0.2785.146 Safari/537.36 XiaoMi/MiuiBrowser/8.7.5&amp;amp;area=\u798f\u5efa\u6cc9\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u5bd2\u6c5f\u5782\u9493\u56fe&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.78.7.235.235.50%2Fc2c552edgw1fb0xb8wi9bj20aw070js4.jpg&amp;amp;followers_count=3&amp;amp;wb_user_id=3267711725&amp;amp;wb_time=1492488774&amp;amp;area=\u798f\u5efa\u6cc9\u5dde&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;5&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;3267711725&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F55930-7D6B69D2-52FC936B-8C6-894&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F57CF1-DD005ED9-9F481B41-8C6-8F2&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;202.45.129.183&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u65e5\u672c&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59210-CA2D81B7-5D7A2F91-8C6-8ED&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e00\u770b\u5c31\u662fM\u5de6\uff0c\u751f\u591a\u4e86\u90fd\u517b\u4e0d\u8d77\uff0c\u8fd8\u4eba\u53e3\u7ea2\u5229&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1568288657&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;20&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:11:59&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u65e5\u672c&amp;amp;area=\u65e5\u672c&amp;amp;p_nick=\u91cd\u9547\u4e4b\u8a89&amp;amp;p_uid=2672302913&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1568288657&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;palmnews&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F550EF-7CCF11E2-5DFCC6D5-8C6-8F1&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;3&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;114.242.248.232&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F591F7-72F2F8E8-A34740CF-8C6-86E&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u65e0\u77e5\u548c\u611a\u6627\u7684 loser\u624d\u4f1a\u544a\u8bc9\u7f51\u6c11\u201c\u5916\u56fd\u7684\u6708\u4eae\u6bd4\u56fd\u5185\u7684\u5706\u201d&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u72fc\u4eba\u6740\u5e38\u5e74\u83b7\u80dc\u8005&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;30&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:11:35&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=&amp;amp;SOFT_TYPE=&amp;amp;area=\u5317\u4eac&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u72fc\u4eba\u6740\u5e38\u5e74\u83b7\u80dc\u8005&amp;amp;wb_profile_img=http%3A%2F%2Ftvax3.sinaimg.cn%2Fcrop.1.0.510.510.50%2Fa34740cfly8fek52dsg8bj20e80e63zz.jpg&amp;amp;followers_count=1511&amp;amp;wb_user_id=2739355855&amp;amp;wb_time=1492488695&amp;amp;area=\u5317\u4eac&amp;amp;p_nick=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;p_uid=1576847061&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2739355855&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;palmnews&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;125.111.82.100&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u6d59\u6c5f\u5b81\u6ce2&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F591DB-7D6F5264-97B14195-8C6-940&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e2d\u56fd\u4eba\u7684\u52e4\u52b3 \u806a\u660e\u5728\u5168\u4e16\u754c\u5404\u6c11\u65cf\u4e2d\u65e0\u4e0e\u4f26\u6bd4\uff0c\u52a0\u4e0a\u7a33\u5b9a\u7684\u73af\u5883\u548c\u56fd\u4eba\u7684\u53d1\u8d22\u81f4\u5bcc\u4e4b\u5fc3\u524d\u6240\u672a\u6709\uff0c\u6210\u4e3a\u4e16\u754c\u7b2c\u4e00\u5f3a\u56fd\u6307\u65e5\u53ef\u5f85\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u9a6c\u4e0a\u6709\u623f\u7f51_\u6d77\u5357\u4e09\u4e9a\u5b81\u6ce2\u623f\u4ea7&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;57&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;5&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:11:07&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=&amp;amp;SOFT_TYPE=&amp;amp;area=\u6d59\u6c5f\u5b81\u6ce2&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u9a6c\u4e0a\u6709\u623f\u7f51_\u6d77\u5357\u4e09\u4e9a\u5b81\u6ce2\u623f\u4ea7&amp;amp;wb_profile_img=http%3A%2F%2Ftva1.sinaimg.cn%2Fcrop.0.0.199.199.50%2F97b14195gw1f9ctatrzrlj205k05kdg8.jpg&amp;amp;followers_count=4098&amp;amp;wb_user_id=2544976277&amp;amp;wb_time=1492488667&amp;amp;area=\u6d59\u6c5f\u5b81\u6ce2&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;4&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2544976277&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F55875-7B7DC18A-160C230EF-8C6-8C8&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F57D61-DD005ED9-9F481B41-8C6-8ED&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;202.45.129.183&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u65e5\u672c&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F591AE-CA2D81B7-5D7A2F91-8C6-A08&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u6ede\u80c0\u903b\u8f91\uff0c\u600e\u4e48\u5c31\u8fd9\u4e2a\u5730\u65b9\u5f3a\u76d7\u591a\u5462\uff1f\u5176\u4ed6\u5730\u65b9\u5f3a\u76d7\u600e\u4e48\u4e0d\u591a\u5462\uff1f\u81ea\u5df1\u7528\u8111\u60f3\u53bb\uff0c\u5982\u679c\u4f60\u6709\u8111\u7684\u8bdd[\u5077\u7b11][\u54c8\u54c8]&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1568288657&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;51&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:10:21&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u65e5\u672c&amp;amp;area=\u65e5\u672c&amp;amp;p_nick=\u91cd\u9547\u4e4b\u8a89&amp;amp;p_uid=2672302913&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1568288657&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;palmnews&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F55411-6F792978-812AA718-8C6-83A&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F55411-6F792978-812AA718-8C6-83A&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;122.156.219.198&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u9ed1\u9f99\u6c5f\u5927\u5e86&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5917A-7A9CDBC6-706633CB-8C6-7D9&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u56fd\u5bb6\u4e0d\u662f\u4e00\u4e2a\u4eba\u7ec4\u6210\u7684\uff0c\u5341\u51e0\u4ebf\u4eba\u6c11\u7ec4\u6210\u7684\uff0c\u4f60\u4ee5\u4e3a\u90fd\u50cf\u4f60\u4e0d\u4ea2\u5ffd\u60a0\u5462\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u51b0\u96ea\u5c0f\u738b\u5b50&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;32&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;7&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:09:29&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=&amp;amp;SOFT_TYPE=&amp;amp;area=\u9ed1\u9f99\u6c5f\u5927\u5e86&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u51b0\u96ea\u5c0f\u738b\u5b50&amp;amp;wb_profile_img=http%3A%2F%2Ftva3.sinaimg.cn%2Fcrop.0.0.180.180.50%2F706633cbjw1e8qgp5bmzyj2050050aa8.jpg&amp;amp;followers_count=61&amp;amp;wb_user_id=1885746123&amp;amp;wb_time=1492488570&amp;amp;area=\u9ed1\u9f99\u6c5f\u5927\u5e86&amp;amp;p_nick=\u5200\u5c16\u6fb7\u821e&amp;amp;p_uid=2167056152&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;6&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1885746123&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F585C8-758D75A1-1487E0A75-8C6-898&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F585C8-758D75A1-1487E0A75-8C6-898&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;202.45.129.183&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u65e5\u672c&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F59113-CA2D81B7-5D7A2F91-8C6-95F&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;50\u90a3\u597d\uff0c\u518d\u53d19\u4e2a\u5e16\u4eca\u5929\u7684\u996d\u94b1\u6709\u4e86[\u5077\u7b11][\u54c8\u54c8]&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1568288657&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;25&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;5&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 12:07:46&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u65e5\u672c&amp;amp;area=\u65e5\u672c&amp;amp;p_nick=\u82b1\u7530\u519c\u592b_54159&amp;amp;p_uid=5511187061&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;4&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1568288657&amp;quot;}], &amp;quot;news&amp;quot;: {&amp;quot;status&amp;quot;: &amp;quot;N_NORMAL&amp;quot;, &amp;quot;groups&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;show&amp;quot;: &amp;quot;M_DEFAULT&amp;quot;, &amp;quot;default&amp;quot;: &amp;quot;M_CHECK&amp;quot;, &amp;quot;title&amp;quot;: &amp;quot;\u7f8e\u5a92:\u4e2d\u56fd\u5947\u8ff9\u6ca1\u6709\u7ed3\u675f \u800c\u662f\u8fdb\u5165\u4e86\u7b2c\u4e8c\u9636\u6bb5&amp;quot;, &amp;quot;tagalias&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;column&amp;quot;: &amp;quot;comos-56044&amp;quot;, &amp;quot;topic&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;subnum&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;script&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;base&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;url&amp;quot;: &amp;quot;http://news.sina.com.cn/o/2017-04-18/doc-ifyeimzx6745829.shtml&amp;quot;, &amp;quot;anonymous&amp;quot;: &amp;quot;A_DEFAULT&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 02:49:10&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;countmode&amp;quot;: &amp;quot;C_HIDE,C_QREPLY,C_SHOW&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;url_wap=http%3A%2F%2Fnews.sina.cn%2F2017-04-18%2Fdetail-ifyeimzx6745829.d.html&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;}, &amp;quot;grouplist&amp;quot;: [], &amp;quot;hot_list&amp;quot;: [{&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;124.207.17.226&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F54F60-7CCF11E2-5DFCC6D5-8C6-89D&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4e2d\u56fd\u81ea\u53e4\u90fd\u662f\u6062\u590d\u529b\u5f3a\uff01\u65e0\u8bba\u90a3\u4e2a\u65f6\u671f\u53ea\u8981\u662f\u653f\u6cbb\u3001\u519b\u4e8b\u7a33\u5b9a\u5e76\u4e14\u5f00\u653e\u7684\u60c5\u51b5\u4e0b\u7528\u4e0d\u4e86\u591a\u5c11\u5e74\u5c31\u53ef\u4ee5\u8fc5\u901f\u53d1\u5c55\u5230\u4e00\u4e2a\u6bd4\u8f83\u9ad8\u7684\u6c34\u5e73\uff01\u8fd9\u662f\u4e16\u754c\u4e0a\u4efb\u4f55\u4e00\u4e2a\u56fd\u5bb6\u548c\u6c11\u65cf\u65e0\u6cd5\u6bd4\u62df\u7684\uff01&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1576847061&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;78&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;1232&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:27:31&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5317\u4eac&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=9&amp;amp;wb_user_id=1576847061&amp;amp;wb_time=1492471648&amp;amp;area=\u5317\u4eac&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;1227&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1576847061&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;client&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;111.121.41.120&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u8d35\u5dde\u8d35\u9633&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55411-6F792978-812AA718-8C6-83A&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u8fd9\u662f\u7f8e\u56fd\u4eba\u7684\u7cd6\u8863\u70ae\u5f39\uff0c\u662f\u6367\u6740\u3002\u5f53\u5e74\u5c31\u662f\u8fd9\u4e48\u5439\u57ae\u5c0f\u65e5\u672c\u7684\uff0c\u865a\u5fc3\u4f7f\u4eba\u8fdb\u6b65\uff0c\u9a84\u50b2\u4f7f\u4eba\u843d\u540e\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u5200\u5c16\u6f2b\u821e&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;42&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;1099&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:47:33&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;OS_LANG=zh&amp;amp;SOFT_TYPE=SinaNews_v495&amp;amp;LATITUDE=26.564052&amp;amp;LONGITUDE=106.688995&amp;amp;client_ip=111.121.41.120&amp;amp;port=21506&amp;amp;from=palmnews&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u5200\u5c16\u6fb7\u821e&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.768.768.50%2F812aa718jw8ex6jtxc0o5j20lc0lcjsl.jpg&amp;amp;followers_count=39&amp;amp;wb_user_id=2167056152&amp;amp;wb_time=1492472849&amp;amp;area=\u8d35\u5dde\u8d35\u9633&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;1097&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2167056152&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.152.68.63&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F548DB-E98443F-9BB1F267-8C6-90C&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5947\u8ff9\u6240\u521b\u9020\u7684\u6210\u679c\u5e94\u591a\u591a\u60e0\u53ca\u4e8e\u5e7f\u5927\u6c11\u4f17\uff01&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;561017abc_106&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;19&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;1037&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 06:59:39&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HuaweiMediaPad) UCBrowser/10.9.1.711 U3/0.8.0 Safari/534.30&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=561017abc_106&amp;amp;wb_profile_img=http%3A%2F%2Ftvax4.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=0&amp;amp;wb_user_id=2612130407&amp;amp;wb_time=1492469979&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;1035&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2612130407&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;111.161.46.229&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5929\u6d25&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55364-6FA12EE5-12CBD6D6E-8C6-932&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u57fa\u672c\u90fd\u662f\u623f\u5b50\u6da8\u7684&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7528\u6237pkje9oqkf7&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;8&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;756&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:44:39&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/MMB29M) Chrome/40.0.2214.89 UCBrowser/11.4.5.937 Safari/537.36&amp;amp;area=\u5929\u6d25&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7528\u6237pkje9oqkf7&amp;amp;wb_profile_img=http%3A%2F%2Ftvax3.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=1&amp;amp;wb_user_id=5045579118&amp;amp;wb_time=1492472676&amp;amp;area=\u5929\u6d25&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;756&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5045579118&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F547C0-31573863-DCD0C9AA-8C6-89D&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;124.207.17.226&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5317\u4eac&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F550EF-7CCF11E2-5DFCC6D5-8C6-8F1&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u5475\u5475\uff0c\u4e00\u8fb9\u60f3\u8981\u514d\u8d39\u7684\u4e00\u8fb9\u53c8\u60f3\u4f4e\u7a0e\u6536\uff01\u90a3\u8bf7\u95ee\u94b1\u4ece\u54ea\u91cc\u6765\uff1f\u5317\u6b27\u798f\u5229\u662f\u597d\uff0c\u4f46\u662f\u7a0e\u7387\u63a5\u8fd150%\uff01\u4f60\u53d7\u5f97\u4e86\u5417\uff1f&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;1576847061&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;50&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;481&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:34:07&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5317\u4eac&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=9&amp;amp;wb_user_id=1576847061&amp;amp;wb_time=1492472047&amp;amp;area=\u5317\u4eac&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;478&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1576847061&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;183.193.185.176&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u4e0a\u6d77&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55631-B7C1B9B0-15AFD8BF3-8C6-88F&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u7b2c\u4e00\u9636\u6bb5\uff1a\u5947\u8ff9\u3002\u7b2c\u4e8c\u9636\u6bb5\uff1a\u5947\u8469\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u7528\u62375821533171&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;16&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;460&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:56:34&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/SANFRANCISCO) Chrome/46.0.2490.11 Safari/537.36&amp;amp;area=\u4e0a\u6d77&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u7528\u62375821533171&amp;amp;wb_profile_img=http%3A%2F%2Ftvax4.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=2&amp;amp;wb_user_id=5821533171&amp;amp;wb_time=1492473393&amp;amp;area=\u4e0a\u6d77&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;460&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5821533171&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F54F60-7CCF11E2-5DFCC6D5-8C6-89D&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F54F60-7CCF11E2-5DFCC6D5-8C6-89D&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;202.116.70.152&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F55D3C-CA744698-ABEFEB0E-8C6-923&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u8fd9\u4e9b\u90fd\u8981\u5f52\u529f\u4e8e\u5343\u767e\u5e74\u6765\u7684\u5112\u5bb6\u601d\u60f3\u548c\u4efb\u52b3\u4efb\u6028\u7684\u4e2d\u56fd\u4eba\u6c11&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;2884627214&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;26&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;448&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:26:40&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=Hello_\u5e7f\u5dde&amp;amp;wb_profile_img=http%3A%2F%2Ftva1.sinaimg.cn%2Fcrop.0.0.198.198.50%2Fabefeb0egw1e839n9chjmj205k05jaa4.jpg&amp;amp;followers_count=72&amp;amp;wb_user_id=2884627214&amp;amp;wb_time=1492475197&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=\u871a\u8bed\u6d41\u8a00_74190&amp;amp;p_uid=1576847061&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;447&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;2884627214&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F551FD-6F01419B-544349C6-8C6-88C&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;14.215.161.210&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u5e7f\u4e1c\u5e7f\u5dde&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F5649F-ED7A1D2-14B2F31E2-8C6-948&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u4ee5\u524d\u6c11\u4f17\u4ec0\u751f\u6d3b\uff0c\u73b0\u5728\u4ec0\u4e48\u751f\u6d3b\uff1f\u4e2d\u56fd\u73b0\u5728\u53ea\u8981\u4f60\u80af\u52aa\u529b\uff0c\u867d\u7136\u4e0d\u4e00\u5b9a\u6709\u8f66\u6709\u623f\uff0c\u4f46\u80af\u5b9a\u4e0d\u6101\u5403\u4f4f\u7a7f\u3002\u7535\u89c6\u3001\u6469\u6258\u8f66\u3001\u6d17\u8863\u673a\u3001\u7535\u8111\u3001\u624b\u673a\u3001\u8fd9\u4e9b\u90fd\u5df2\u7ecf\u662f\u666e\u901a\u5bb6\u5ead\u7684\u914d\u5907\u4e86\u300220\u5e74\u524d\u6709\u51e0\u5bb6\u6709\uff1f\u4f60\u8bf4\u6ca1\u6709\u60e0\u53ca\u6c11\u4f17\u662f\u7741\u773c\u8bf4\u778e\u8bdd\u3002\u867d\u7136\u8fd8\u6709\u5f88\u591a\u4e0d\u8db3\uff0c\u4f46\u4e2d\u56fd\u7684\u751f\u6d3b\u6c34\u5e73\u7684\u786e\u6709\u5f88\u5927\u7684\u98de\u8dc3\u3002&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;127&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;442&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 08:58:08&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;from=ucweb&amp;amp;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/HUAWEIMHA-AL00) Chrome/40.0.2214.89 UCBrowser/11.4.9.941 Safari/537.36&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u68ee\u6797\u516c\u4e3b\u51c0\u5316\u5668499\u5143&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.0.0.1180.1180.50%2F00641SPUgw1eq5fm40xnsj30wu0wu0yi.jpg&amp;amp;followers_count=24&amp;amp;wb_user_id=5556351458&amp;amp;wb_time=1492477087&amp;amp;area=\u5e7f\u4e1c\u5e7f\u5dde&amp;amp;p_nick=8866\u5f00\u5fc3&amp;amp;p_uid=1413695942&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;441&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5556351458&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;wap&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;58F51574-60EACE16-B8E57407-8C6-9B2&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;101.90.253.194&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u4e0a\u6d77&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F54759-655AFDC2-696EE40E-8C6-992&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u770b\u5230\u4f4e\u4ef7\u4f4f\u623f\u5c31\u7279\u4e48\u7b11\u4e86&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;Neil_de_\u8089\u8089\u548c\u7403\u7403\u54d2\u5bb6&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;11&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;315&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 06:53:16&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;OS_TYPE=14&amp;amp;SOFT_TYPE=Build/NRD90M) SamsungBrowser/5.0 Chrome/51.0.2704.106 Safari/537.36&amp;amp;area=\u4e0a\u6d77&amp;amp;wb_verified=1&amp;amp;wb_screen_name=Neil_de_\u8089\u8089\u548c\u7403\u7403\u54d2\u5bb6&amp;amp;wb_profile_img=http%3A%2F%2Ftva2.sinaimg.cn%2Fcrop.83.0.493.493.50%2F696ee40ejw8eozry1zu5sj20ik0dpdgk.jpg&amp;amp;wb_description=\u4e1c\u822a\u5de5\u7a0b\u6280\u672f\u516c\u53f8\u6ce2\u97f3\u98de\u673a\u7ef4\u4fee\u5e08\u8c22\u4e00\u6625&amp;amp;followers_count=242&amp;amp;wb_user_id=1768875022&amp;amp;wb_verified_type=0&amp;amp;wb_time=1492469593&amp;amp;area=\u4e0a\u6d77&amp;amp;p_nick=Maryland-DC&amp;amp;p_uid=3102045191&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;314&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;1768875022&amp;quot;}, {&amp;quot;status&amp;quot;: &amp;quot;M_PASS&amp;quot;, &amp;quot;usertype&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;thread&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;parent&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;level&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;ip&amp;quot;: &amp;quot;118.124.239.246&amp;quot;, &amp;quot;area&amp;quot;: &amp;quot;\u56db\u5ddd\u4e50\u5c71&amp;quot;, &amp;quot;newsid&amp;quot;: &amp;quot;comos-fyeimzx6745829&amp;quot;, &amp;quot;mid&amp;quot;: &amp;quot;58F54990-767CEFF6-1313DBE69-8C6-921&amp;quot;, &amp;quot;against&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;\u6539\u9769\u5f00\u653e\u7684\u6210\u679c\uff0c\u5e94\u8be5\u66f4\u591a\u5730\u548c\u8001\u767e\u59d3\u5171\u4eab\uff01&amp;quot;, &amp;quot;nick&amp;quot;: &amp;quot;5121097321&amp;quot;, &amp;quot;length&amp;quot;: &amp;quot;20&amp;quot;, &amp;quot;rank&amp;quot;: &amp;quot;251&amp;quot;, &amp;quot;time&amp;quot;: &amp;quot;2017-04-18 07:02:41&amp;quot;, &amp;quot;vote&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;config&amp;quot;: &amp;quot;client_port=0&amp;amp;area=\u56db\u5ddd\u4e50\u5c71&amp;amp;wb_verified=0&amp;amp;wb_screen_name=\u4e00\u9519\u5728\u951938379&amp;amp;wb_profile_img=http%3A%2F%2Ftvax2.sinaimg.cn%2Fdefault%2Fimages%2Fdefault_avatar_male_50.gif&amp;amp;followers_count=1&amp;amp;wb_user_id=5121097321&amp;amp;wb_time=1492470160&amp;amp;area=\u56db\u5ddd\u4e50\u5c71&amp;quot;, &amp;quot;agree&amp;quot;: &amp;quot;251&amp;quot;, &amp;quot;channel&amp;quot;: &amp;quot;gn&amp;quot;, &amp;quot;uid&amp;quot;: &amp;quot;5121097321&amp;quot;}]}}
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="n">jd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">loads&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">comment_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;var data=&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="n">jd&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;result&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;count&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;total&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>10756
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="c1">#artibody_url.split(&amp;#39;/&amp;#39;)[-1].rstrip(&amp;#39;.shtml&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="c1"># newsid=comos-fyeimzx6745829&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="c1">#news_id = artibody_url.split(&amp;#39;/&amp;#39;)[-1].lstrip(&amp;#39;doc-i&amp;#39;).rstrip(&amp;#39;.shtml&amp;#39;)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">re&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">&lt;span class="n">news_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">re&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;doc-i(.*).shtml&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">artibody_url&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">group&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">form_comment_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;http://comment5.news.sina.com.cn/page/info?version=1&amp;amp;&lt;/span>&lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>&lt;span class="s1">format=js&amp;amp;channel=gn&amp;amp;newsid=comos-&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s1">&amp;amp;group=&amp;amp;compress=0&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;page=1&amp;amp;page_size=20&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="n">form_comment_url&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">news_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>'http://comment5.news.sina.com.cn/page/info?version=1&amp;amp;format=js&amp;amp;channel=gn&amp;amp;newsid=comos-fyeimzx6745829&amp;amp;group=&amp;amp;compress=0&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;page=1&amp;amp;page_size=20'
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">re&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;http://news.sina.com.cn/o/2017-04-18/doc-ifyeimzx6745829.shtml&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">getCommentCounts&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">news_url&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl"> &lt;span class="n">news_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">re&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;doc-i(.*).shtml&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">news_url&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">group&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl"> &lt;span class="n">comments&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">form_comment_url&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">news_id&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl"> &lt;span class="n">jd&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">loads&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">comments&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lstrip&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;var data=&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">jd&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;result&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;count&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;total&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">getCommentCounts&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_url&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>13051
&lt;/code>&lt;/pre>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">bs4&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">re&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">datetime&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">datetime&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">getNewsDetail&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">newsurl&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl"> &lt;span class="n">res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">newsurl&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl"> &lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encoding&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl"> &lt;span class="n">soup&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;html.parser&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;newssource&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;p&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contents&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl"> &lt;span class="n">artibody_time&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;.time-source&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">contents&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;dt&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">datetime&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strptime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_time&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;%Y年%m月&lt;/span>&lt;span class="si">%d&lt;/span>&lt;span class="s1">日%H:%M&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;article&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39; &amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strip&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;#artibody p&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;editor&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;.article-editor&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">lstrip&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;责任编辑：&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl"> &lt;span class="n">result&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;comments&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">getCommentCounts&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">newsurl&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">&lt;span class="n">getNewsDetail&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_url&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>{'article': '[环球时报综合报道] “增长表现超出预期”，对于中国国家统计局公布的今年一季度6.9%的国内生产总值（GDP）增长率，外媒昨天纷纷这样强调。不同的人看到不一样的风景，但一个显而易见的事实是，只要中国大体维持目前的相对增长优势，上升的步伐便不可阻挡。正如美国《福布斯》日前所说：中国的经济奇迹没有结束，而是进入了第二阶段。 虽然增长放缓，挑战越来越多，但中国的进步有目共睹。《纽约时报》17日称，过去11个季度的官方数据显示，中国经济增长在6.7%到7.2%之间。从国际标准看，这是令人吃惊的长期稳定增长。与此形成鲜明对比的是，美国的季度增长经常仅为一两个百分点。过去12年，中国蓝领工人薪酬激增8倍，这大幅削弱了中国的劳工成本优势，不过同时也促进了经济繁荣，推动消费增长。 日本《外交学者》称，过去几十年中国GDP保持两位数增长，但现在增幅仅为6%到7%之间。尽管中国经济增长确实放缓了，但中国消费者强势登上世界舞台的购买力并没有减弱的趋势。事实上，中国消费者的购买力今后还将变得更加显著。麦肯锡分析师预计，到2020年中国将有近4亿家庭收入在1.6万到3.4万美元之间的“主流消费者”，或者说中产阶层消费者。这些消费者的强大实力将震撼世界。 19日，第17届上海国际车展将拉开帷幕。法新社称，全球汽车厂商本周汇聚中国，面对世界最大汽车市场上的激烈竞争，业界正在为销售放缓和潜在的价格战做好准备。不过，应该客观认识中国汽车产业遇到的这些麻烦，中国对汽车厂商来说仍是一座金矿。去年美国汽车销量创下历史新高，达到1755万辆，但中国早在8年前就超越这个数字并成为世界第一大汽车市场。 “中国奇迹没有结束，而是进入了第二阶段”，美国《福布斯》日前刊文称，1980年，世界人口最多的国家也是最贫困的国家之一。30多年后，中国已成为仅次于美国的世界第二大经济体。去年中国GDP达到10.8万亿美元。此前，从没有一个像中国这样规模如此之大、情况如此之复杂、历史如此之悠久的国家能在如此短的时间内迅速崛起。过去6年来，中国平均增速“仅为”6%到9%之间，这使得有些人宣称中国奇迹结束了。这些人错了，中国只是进入了第二阶段。中国政府在保持稳定的同时寻求发展。我们可将此解释为努力将中国经济从侧重制造和出口转向更成熟的经济发展推动力量。通过致力于现代化增长的四大支柱消费、科技、高端制造和服务业，中国将推动其经济增长奇迹转型和继续发展。',
'comments': 13152,
'dt': datetime.datetime(2017, 4, 18, 2, 25),
'editor': '李伟山 ',
'newssource': '原标题：美媒：中国奇迹没有结束，而是进入了第二阶段',
'title': '美媒:中国奇迹没有结束 而是进入了第二阶段|中国经济_新浪新闻'}
&lt;/code>&lt;/pre></description></item><item><title>Python网络爬虫学习</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/python%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB%E5%AD%A6%E4%B9%A0/</link><pubDate>Wed, 19 Apr 2017 01:22:18 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/python%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB%E5%AD%A6%E4%B9%A0/</guid><description>
&lt;p>&lt;strong>龙云尧个人博客，转载请注明出处&lt;/strong>&lt;/p>
&lt;p>&lt;em>初步了解网络爬虫的工具使用和代码编写&lt;/em>&lt;/p>
&lt;p>学习地址见&lt;a href="http://study.163.com/course/courseMain.htm?courseId=1003285002">&lt;code>网易云课堂《Python网络实战》&lt;/code>&lt;/a>&lt;/p>
&lt;h2 id="前言">前言&lt;/h2>
&lt;p>&lt;strong>工具&lt;/strong>&lt;/p>
&lt;p>1.Python编辑工具&lt;/p>
&lt;p>实验中使用到的Python工具为&lt;a href="https://www.continuum.io/downloads/">&lt;code>Anaconda&lt;/code>&lt;/a>，工具的安装参照&lt;a href="http://python.jobbole.com/86236/">&lt;code>Anaconda使用总结&lt;/code>&lt;/a>（Linux下）以及&lt;a href="http://blog.csdn.net/u012675539/article/details/46974217">&lt;code>Python科学计算的瑞士军刀——Anaconda 安装与配置&lt;/code>&lt;/a>（windows下）相关教程。&lt;/p>
&lt;p>在视频教学过程中，讲师也会有一点安装指导。&lt;/p>
&lt;p>初学过程中推荐使用&lt;code>Jupyter notebook&lt;/code>工具在浏览器中编辑，这样可以每次只执行几行函数，而不用一次从头到尾执行完毕。调试完成以后，可以在&lt;code>Spyder&lt;/code>中一次运行。&lt;/p>
&lt;p>&lt;code>Jupyter notebook&lt;/code>工具中，ctrl+enter表示执行当前cell的代码，alt+enter表示新建一个cell，其他的在本次实验中用不到。&lt;/p>
&lt;p>2.辅助工具&lt;/p>
&lt;p>使用&lt;code>Chrome&lt;/code>辅助元素选择。需要对Chrome的&lt;code>开发者模式&lt;/code>有较多的使用经验。&lt;/p>
&lt;p>不过在视频中，讲师会反复示范怎么使用Chrome的开发者模式，所以使用起来不必太担心。&lt;/p>
&lt;p>&lt;strong>知识储备&lt;/strong>&lt;/p>
&lt;p>1.语法&lt;/p>
&lt;p>基本的Python语法知识可以参照&lt;a href="http://www.runoob.com/python/python-basic-syntax.html">Python 基础语法&lt;/a>（&lt;strong>推荐&lt;/strong>）和&lt;a href="http://www.cnblogs.com/toutou/p/4774284.html">Python基本语法，python入门到精通[二]&lt;/a>（页面很low）&lt;/p>
&lt;p>&lt;strong>注：&lt;a href="http://www.runoob.com/python">runoob.com&lt;/a>是一个好网站&lt;/strong>&lt;/p>
&lt;p>在语法和知识结构上，Python的概念和C++/Java这类面向对象型语言很相似，比如类似的对象概念.&lt;/p>
&lt;p>比如类似于数组的列表(List)，类似于map的字典(dictdict)。其他部分自行体会.&lt;/p>
&lt;p>因为本次教学课程中，实验较为简单，所以我其实也只是对Python有一个基本的了解。&lt;/p>
&lt;p>2.工具使用&lt;/p>
&lt;p>BeautifulSoap的使用教程参见&lt;a href="http://cuiqingcai.com/1319.html">&lt;code>Python爬虫利器二之Beautiful Soup的用法&lt;/code>&lt;/a>&lt;/p>
&lt;p>在本次实验中，网络爬虫需要对爬取的网页进行解析，故而不可避免的需要使用到html的相关知识。不过难度不大，一边实验一边回忆都已经足够了。&lt;/p>
&lt;p>在实验中使用了BeautifulSoup工具能够很方便的将抓取的网页解析成一个文档树。然后我们就可以对这个文档树进行select，选择出特定的标签，进而分析出我们想要的信息。&lt;/p>
&lt;p>举个例子：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span> &lt;span class="c1"># 导入工具包&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;http://news.sina.com.cn/o/2017-04-18/doc-ifyeimzx6745829.shtml&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_url&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 模仿浏览器，使用get方法获取url指向的网页资源&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">encoding&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;utf-8&amp;#39;&lt;/span> &lt;span class="c1"># 设置编码，否则抓取的文档会出现乱码&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">bs4&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span> &lt;span class="c1"># 从bs4中导入BeautifulSoap包&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_soup&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">BeautifulSoup&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">artibody_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;html.parser&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 将抓取的网页扔进BeautifulSoap生成一个文档树&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">&lt;span class="n">artibody_div&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">artibody_soup&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">select&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;#artibody p&amp;#39;&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="c1"># 使用select方法获取想要的内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">&lt;span class="c1"># select中内容的使用和css的选择器类似，id使用&amp;#39;#xxx&amp;#39;， 类使用&amp;#39;.xxx&amp;#39;，普通标签使用&amp;#39;p&amp;#39;，另外还可以有子代选择器&amp;#39;body div #artibody p&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>3.&lt;strong>本篇博客系个人学习所总结的知识，如果有什么概念或者其他错误，欢迎喷。但是不小心对你们造成误导，那就概不负责了2333&lt;/strong>&lt;/p>
&lt;p>##正题&lt;/p>
&lt;h3 id="课程知识总结">课程知识总结&lt;/h3>
&lt;p>将这个部分写在最前面，是为了在课程开始之前就对整个课程的目的，以及coding过程中，每一步的目的有所了解。避免盲目跟着打代码，而不知道整个项目目的。&lt;/p>
&lt;p>本课程实现了从网易新闻网页中抓取新闻信息，封装成结构化数据的过程。&lt;/p>
&lt;p>课程一共18讲，每一讲2-10分钟不等，一般为5分钟。&lt;/p>
&lt;ul>
&lt;li>第1-3讲，为课程入门，大致介绍课程目的，对Python编写网络爬虫进行初步介绍。&lt;/li>
&lt;li>第4讲，实现模拟浏览器，使用get方法获取网页信息的方法。&lt;/li>
&lt;li>第5-6讲，介绍BeautifulSoap，介绍基本使用方法&lt;/li>
&lt;li>第7-16讲，利用BeautifulSoap构造的文档树剖析整个网页，并且通过网页一步一步获取&amp;quot;title&amp;quot;(标题), &amp;quot;newssource&amp;quot;(原标题), &amp;quot;date&amp;quot;(发稿时间), &amp;quot;article&amp;quot;(新闻主题), &amp;quot;article&amp;quot;(编辑), &amp;quot;comments&amp;quot;(评论数)。&lt;/li>
&lt;li>第17讲，函数封装指导&lt;/li>
&lt;li>第18讲，将前17章中所实现的功能封装成一个函数，最终实现输入一个网页，返回一个封装好的结构化数据。&lt;/li>
&lt;/ul>
&lt;h3 id="代码解释">代码解释&lt;/h3>
&lt;p>&lt;strong>1.requests获取网页信息&lt;/strong>&lt;/p></description></item><item><title>囚笼</title><link>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%9B%9A%E7%AC%BC/</link><pubDate>Fri, 14 Apr 2017 17:06:00 +0000</pubDate><guid>https://yaoyl.cn/post/%E5%8E%86%E5%8F%B2/%E5%9B%9A%E7%AC%BC/</guid><description>
&lt;blockquote>
&lt;p>一个病人除了说他自己病了以外，还能说什么呢？——&lt;em>塞·约翰逊&lt;/em>&lt;/p>&lt;/blockquote>
&lt;h2 id="现在正在看这篇推送的你对艾滋病了解多少">现在正在看这篇推送的你对艾滋病了解多少？&lt;/h2>
&lt;ul>
&lt;li>你可能知道艾滋病是由HIV病毒引起的；&lt;/li>
&lt;li>你可能知道HIV病毒传播途径主要包括血液传播、性传播和母婴传播，此外还有可能通过尿液、泪液等其他体液传播（但是飞沫、握手等日常行为并不会传播）；&lt;/li>
&lt;li>你可能知道HIV在人体内的潜伏期平均为8～9年，一旦爆发就是临床上表现的艾滋病；&lt;/li>
&lt;li>你可能知道艾滋病爆发会破坏病人的免疫系统，造成病人的免疫系统紊乱，使病人极易受到各种感染或者罹患癌症；&lt;/li>
&lt;li>你还可能知道一个良好的心态和健康的锻炼对艾滋病的治疗会有所帮助。&lt;/li>
&lt;/ul>
&lt;p>可是你知道的内容大概也就仅限于此了。&lt;/p>
&lt;h2 id="初访艾滋">初访艾滋&lt;/h2>
&lt;p>出发的高铁上，我刷着VICE的 [ &lt;a href="http://mp.weixin.qq.com/s/OtB0-GGbB2wqk_F_AGxOyA">我们问了几个艾滋携带者，愿意这辈子只吃饺子皮还是感染 HIV？&lt;/a> ]，想着待会该怎么说话，想着可以拿到几个公益时，想着还能不能赶回来拿快递，想着今天的晚餐。&lt;/p>
&lt;p>一切似乎就像在广州地下来来往往的地铁一样，按部就班。&lt;/p>
&lt;h2 id="笼">笼&lt;/h2>
&lt;p>沉寂。&lt;/p>
&lt;p>所有人都带着口罩。&lt;/p>
&lt;p>病人躺在病床上，没有呻吟。电子屏规律的跳动，没有一点干扰。家属在病人旁边或削水果，或枕着床沿休息，或在走廊外的小板凳上想些什么。护工在走廊上自顾地擦着玻璃。&lt;/p>
&lt;p>一切似乎都很安静，安静中夹杂着一丝灰色。&lt;/p>
&lt;p>第一个病房，拥挤，稍显杂乱。三个病人躺在里面。&lt;/p>
&lt;p>突然进入的我们5个人，几乎占据了病房剩余空间的一半。&lt;/p>
&lt;p>介绍完此行的目的猴，我开始试着和靠在门口的病人进行交流。&lt;/p>
&lt;p>这是我第一次访问重症病人，我没察觉他旁边起伏的呼吸机显示着他已经很虚弱，甚至当我们刚开始对话时我都没察觉他说话已经颇为费力。&lt;/p>
&lt;p>他很瘦，露在被单的小腿已经不像我们那般结实，嶙峋的胸膛贴着呼吸机的某种贴片，眼看体重不会超过100斤。&lt;/p>
&lt;p>他用一支空闲的手轻轻的笔画，配合着几乎已经模糊的吐字介绍着他现在正在进行的治疗。&lt;/p>
&lt;p>我突然反应过来他现在并不适合说话。和另一名同行队员将手中的水果放在床头柜，送上祈愿，退出走廊和他的弟弟开始了对话。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">“他原来有170斤。”
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">病人的家属指了指床上的哥哥。“病发后一直瘦，就
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">变成了现在这个样子。”
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">5&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">6&lt;/span>&lt;span class="cl">“我们也只有平时多安抚他啊，要对活下去有希望
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">7&lt;/span>&lt;span class="cl">啊。但是他本身（求生）欲望其实不高。”家属看
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">8&lt;/span>&lt;span class="cl">了看走廊中部某个病房，“两天前刚从那间病房拉
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">9&lt;/span>&lt;span class="cl">走一个人。”
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>平淡的语气，似乎已经司空见惯。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">“不管情况怎么糟，总要对生存下去抱有希望啊，”
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">我开始根据我仅知道的一点艾滋病知识安慰他，
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">“艾滋病只要能够好好控制，按时吃药，拥有一个良
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">好的心态，其实生活和正常人差不多。你平时给他多
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">打气，多带他出去走走，对他的治疗会有好处的。”
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">“他现在已经基本走不动了。其实很久以前他就查出
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">来了身上有异常。去医院好不容易压（制）下来，医
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">生告诫他，不能停药，病才能控制得住。但是回去没
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">几天他还是自己停了，”家属看着病床上的哥哥，小
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">声说，“但是其实药是可以免费领的。前两年还挺正
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">常的。但是后面他慢慢的发现老是咳嗽，偏偏他自己
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">又喜欢拖着，等到严重了才去大医院检查。结果透析
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">的时候发现，病灶转移了。肺里面有一团絮状阴影，
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">真菌感染的。”
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>我突然语塞，不知道该怎么继续安抚家人，因为我发现我既无法站在一个旁观者的角度说“要保持一个良好的心态接受治疗”，也无法冷静的说“如果他当时及时吃药，是不会有这样的境况的”。&lt;/p>
&lt;p>一个只能靠呼吸机维生的人，浑身痛楚的人，怎么谈心态良好。&lt;/p>
&lt;p>一个消瘦至此、离不开床的人，怎么能后悔“如果当初”。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">但是还是得给家属鼓气，至少树立点信心还是好的，
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">我想。
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">“家人还是多劝导他，艾滋虽然可怕，但是好好疗养，
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">能够过上正常的生活就好了。”
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">“其实糖尿病也是很惨的”。我开始比惨，“糖尿病也
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">是终生没法治疗，只能保守治疗。糖尿病平常也是要
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">控制饮食加上不停吃药。如果碰上其他并发症，血管
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">病变之类了，也是很痛苦的。”
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">“不不不，艾滋可怕多了。艾滋（HIV病毒）潜伏周期
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">长，10年都可以和没事人一样。这段时间你要是发现
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">了，提早预防，提早控制，说不定还能一辈子不爆发
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">（艾滋病）。但是你如果没发现，还一点不照顾自己
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">身体，有一点毛病就开药打针，你的免疫力下降了，
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">提前爆发都有可能。一旦发病，就要格外小心，你的
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl">免疫力那么差，万一不小心交叉感染就很容易出事
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl">了……”
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>终于，病房中一直捂着头的大爷打断了我们对这个病房的探视，他有点不耐烦的比划着让我们离开。&lt;/p></description></item><item><title/><link>https://yaoyl.cn/post/2025/agent%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/2025/agent%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</guid><description/></item><item><title/><link>https://yaoyl.cn/post/2025/home_page/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/2025/home_page/</guid><description>
&lt;!DOCTYPE html>
&lt;html>
&lt;/html></description></item><item><title/><link>https://yaoyl.cn/post/2025/llm%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE%E7%BB%8F%E9%AA%8C/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/2025/llm%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE%E7%BB%8F%E9%AA%8C/</guid><description/></item><item><title/><link>https://yaoyl.cn/post/2025/rag%E7%9F%A5%E8%AF%86%E5%BA%93%E6%90%AD%E5%BB%BA/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/2025/rag%E7%9F%A5%E8%AF%86%E5%BA%93%E6%90%AD%E5%BB%BA/</guid><description/></item><item><title/><link>https://yaoyl.cn/post/2025/%E4%B8%8A%E4%B8%8B%E6%96%87%E5%B7%A5%E7%A8%8B%E6%A6%82%E8%A7%88/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/2025/%E4%B8%8A%E4%B8%8B%E6%96%87%E5%B7%A5%E7%A8%8B%E6%A6%82%E8%A7%88/</guid><description/></item><item><title/><link>https://yaoyl.cn/post/2025/%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B%E6%A6%82%E8%A7%88/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yaoyl.cn/post/2025/%E6%8F%90%E7%A4%BA%E8%AF%8D%E5%B7%A5%E7%A8%8B%E6%A6%82%E8%A7%88/</guid><description/></item></channel></rss>