<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>易博云天 &#187; 技术周边</title>
	<atom:link href="http://www.eavea.com/blog/index.php/category/main/jishuzhoubian/feed" rel="self" type="application/rss+xml" />
	<link>http://www.eavea.com/blog</link>
	<description>专注技术：学习、交流、分享、免费，每天进步一点点！</description>
	<lastBuildDate>Mon, 13 Mar 2023 07:04:16 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6.1</generator>
		<item>
		<title>前后端分离优缺点</title>
		<link>http://www.eavea.com/blog/index.php/qianhouduanfenliyouquedian.html</link>
		<comments>http://www.eavea.com/blog/index.php/qianhouduanfenliyouquedian.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 07:06:36 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[技术周边]]></category>
		<category><![CDATA[Web开发]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=40</guid>
		<description><![CDATA[前后端分离优缺点 之前有朋友问我：什么是前后端分离。他说北度搜到的都是大篇幅文章，看完还是很懵。 这里我简单总 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>前后端分离优缺点</div>
<blockquote><p>之前有朋友问我：什么是前后端分离。他说北度搜到的都是大篇幅文章，看完还是很懵。<br />
这里我简单总结下，如果有疏漏和不对的地方还请路过的网友指出。</p></blockquote>
<h2 id="toc-heading-1">一、先用一张图来解释</h2>
<div><img alt="what_is_frontend_and backend.jpg" src="https://www.wenyuanblog.com/medias/blogimages/what_is_frontend_and%20backend.jpg" data-original="/medias/blogimages/what_is_frontend_and backend.jpg" /></div>
<p>&nbsp;</p>
<h2 id="toc-heading-2">二、为什么要前后端分离（优点）</h2>
<h3 id="toc-heading-3">1. 全端适应</h3>
<p>PC、APP、PAD等。</p>
<h3 id="toc-heading-4">2. SPA开发模式开始流行</h3>
<p>SPA即Single Page Web Application，俗称单页应用。</p>
<h3 id="toc-heading-5">3. 前后端开发职责不清</h3>
<p>比如JSP、PHP页面，到底是由前端写还是后端写 (所有的模板语言会遇到这样的问题)。</p>
<h3 id="toc-heading-6">4. 开发效率问题，前后端互相等待</h3>
<p>要把html转成template等，效率比较低。</p>
<h3 id="toc-heading-7">5. 前端一直配合着后端，能力受限</h3>
<p>很多交互逻辑要在template里面由后端实现，前端只负责提供静态html，对前端工程师的能力提高不利。</p>
<h3 id="toc-heading-8">6. 后台开发语言和模板高度耦合，导致开发语言依赖严重</h3>
<p>比如后端是Java写的，后期要换成Python，可是模板中嵌入了很多Java语法，等于要重写整个template。</p>
<h2 id="toc-heading-9">三、前后端分离缺点</h2>
<h3 id="toc-heading-10">1. 前端学习门槛增加、前端工作量加大</h3>
<p>前端需要实现一部分的交互逻辑。</p>
<h3 id="toc-heading-11">2. 数据依赖导致文档重要性增加</h3>
<p>接口文档需要很详细，且要及时更新。（一个段子，程序员最痛恨两件事：1.别人的代码没写文档，2.写文档）</p>
<h3 id="toc-heading-12">3. SEO难度加大</h3>
<p>前端渲染的页面不利于搜索引擎爬虫爬取，但有办法解决的，即SSR策略。(以vue为例可以参考这个链接：<a href="https://segmentfault.com/a/1190000007933349" target="_0" rel="external nofollow noopener noreferrer">https://segmentfault.com/a/1190000007933349</a>)</p>
<h2 id="toc-heading-13">四、综上</h2>
<h3 id="toc-heading-14">1. 一种趋势</h3>
<p>前后端分离有一些缺点，但都是可以想办法解决的，总的来说优点大于缺点，而且也是一种趋势。</p>
<h3 id="toc-heading-15">2. 不过在一些场合其实也没有必要前后端分离</h3>
<p>比如写个人网站、内部小运维系统等。这些一般情况下都是一个人完成的，如果前后端分离写，就有frontend和backend两套代码要写，打开两个IDE，颇有左右手互搏的感觉。</p>
<p>当然如果为了练习和学习，写个这样的博客系统也是不错的。</p>
<h2 id="toc-heading-16">五、补充知识点 &#8211; restful api</h2>
<h3 id="toc-heading-17">restful api目前是前后端分离最佳实现</h3>
<ol>
<li>restful api是一种规范，作为开发时的标准</li>
<li>轻量，直接通过http。不需要额外的协议，post/get/put/delete操作</li>
<li>面向资源，一目了然，具有自解释性。比如看请求头delete就知道是删除动作。</li>
<li>数据描述简单，一般通过json或者xml做数据通信</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/qianhouduanfenliyouquedian.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git迁移仓库并保留commit记录</title>
		<link>http://www.eavea.com/blog/index.php/gitqianyicangkubingbaoliucommitjilu.html</link>
		<comments>http://www.eavea.com/blog/index.php/gitqianyicangkubingbaoliucommitjilu.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 06:57:59 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[技术周边]]></category>
		<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=36</guid>
		<description><![CDATA[Git迁移仓库并保留commit记录 在支持 Git 的代码托管平台间进行仓库的迁移，并保留历史 commit [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>Git迁移仓库并保留commit记录</div>
<blockquote><p>在支持 Git 的代码托管平台间进行仓库的迁移，并保留历史 commit 记录。</p></blockquote>
<h2 id="toc-heading-1">一、作用</h2>
<p>把在 A 托管平台的仓库完全的迁移到 B 托管平台，保留 commit 历史记录。</p>
<h2 id="toc-heading-2">二、场景</h2>
<p>将 Gitlab 上的仓库迁移到 GitHub<br />
将 Coding 上的仓库迁移到 GitHub<br />
将 Gitee 上的仓库迁移到 GitHub<br />
……<br />
迁移前后，保留 commit 历史记录，即在迁移后的新仓库中能查询历史提交信息，同时也能保留小绿点。</p>
<h2 id="toc-heading-3">三、步骤</h2>
<ul>
<li>建立新仓库</li>
<li>克隆旧仓库</li>
<li>推送新仓库</li>
</ul>
<p>下面，以 Coding 迁移到 GitHub 为例。</p>
<h3 id="toc-heading-4">A. Git Bash操作</h3>
<p><strong>1. 在 GitHub 建立新仓库</strong></p>
<p>在 GitHub 中新建一个同名项目（不同名也可以），不要添加 <code>README.md</code>，以及任何 <code>License</code> 和 <code>.gitignore</code> 文件，只需要新建一个空的仓库。</p>
<p>只需要一个空的仓库。</p>
<p><strong>2. 克隆 Coding 上的项目</strong></p>
<p>将 Coding 上想要迁移的项目完整克隆到本地。</p>
<p>本地执行</p>
<pre><code>git clone https://git.coding.net/winyuan/blog.git  --bare
</code></pre>
<p><strong>3. 将克隆下来的仓库推送到GitHub</strong></p>
<p>克隆完成后，将仓库推送到 GitHub。</p>
<p>使用新仓库页面提供的仓库地址（web URL），推送所有的分支和对象</p>
<pre><code>cd blog.git
git push https://github.com/winyuan/blog.git --all
</code></pre>
<p><strong>4. 完成后，再执行推送所有的Tags</strong></p>
<pre><code>git push https://github.com/winyuan/blog.git --tags
</code></pre>
<p>这样，整个仓库就全部迁移到 GitHub 了，如果这些commit中的邮箱在GitHub配置中，可以看到小绿点也一起迁移过来了。</p>
<h3 id="toc-heading-5">B. TortoiseGit 操作</h3>
<p>这种简单的操作我不是很喜欢用可视化工具，不过这里也介绍下怎么用「小乌龟」来完成仓库的迁移。</p>
<p><strong>1. 在 GitHub 建立新仓库</strong></p>
<p>同上，不赘述了。</p>
<p><strong>2. 克隆 Coding 上的项目</strong></p>
<p>同上，不赘述了。</p>
<p><strong>3. 将克隆下来的仓库推送到 GitHub</strong></p>
<p>进入项目文件夹，鼠标右键 -&gt; Git Sync…</p>
<div><img alt="TortoiseGit同步" src="https://www.wenyuanblog.com/medias/blogimages/TortoiseGit_Sync.png" data-original="/medias/blogimages/TortoiseGit_Sync.png" /></div>
<p>点击 Manage。<br />
<img alt="TortoiseGit同步-管理" src="https://www.wenyuanblog.com/medias/blogimages/TortoiseGit_Sync_Manage.png" width="500" height="300" align="center" data-original="/medias/blogimages/TortoiseGit_Sync_Manage.png" /><br />
填写 GitHub 远程仓库的信息，并 Add New/Save，应用，确认。<br />
<img alt="TortoiseGit同步-管理-远程信息" src="https://www.wenyuanblog.com/medias/blogimages/TortoiseGit_Sync_Manage_Remote.png" width="500" height="300" align="center" data-original="/medias/blogimages/TortoiseGit_Sync_Manage_Remote.png" /><br />
Remote URL 选则刚刚添加的 gitHub，然后 Push。<br />
<img alt="TortoiseGit同步-管理-推送" src="https://www.wenyuanblog.com/medias/blogimages/TortoiseGit_Sync_Manage_Push.png" width="500" height="300" align="center" data-original="/medias/blogimages/TortoiseGit_Sync_Manage_Push.png" /><br />
最后再提交 Tags.<br />
<img alt="TortoiseGit同步-管理-推送标签" src="https://www.wenyuanblog.com/medias/blogimages/TortoiseGit_Sync_Manage_Push_tags.png" data-original="/medias/blogimages/TortoiseGit_Sync_Manage_Push_tags.png" /></p>
<p>&nbsp;</p>
<h2 id="toc-heading-6">四、git命令区别</h2>
<p>上面在推送代码至 GitHub（新仓库）时，我们用到了下面这个命令：<br />
<code>git push https://github.com/winyuan/blog.git --all</code><br />
其实还有另外一个命令：<br />
<code>git push https://github.com/winyuan/blog.git --mirror</code></p>
<p>关于这两个命令的区别，可以参见<a title="Git push --all vs --mirror" href="https://stackoverflow.com/questions/49343025/git-push-all-vs-mirror" target="_0" rel="external nofollow noopener noreferrer">Git push –all vs –mirror</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/gitqianyicangkubingbaoliucommitjilu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git提交信息规范</title>
		<link>http://www.eavea.com/blog/index.php/gittijiaoxinxiguifan.html</link>
		<comments>http://www.eavea.com/blog/index.php/gittijiaoxinxiguifan.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 06:54:49 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[技术周边]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[规范]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=34</guid>
		<description><![CDATA[Git提交信息规范 无论是个人项目还是在团队协作中，commit message 都应该清晰明了，遵守一定规范 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>Git提交信息规范</div>
<blockquote><p>无论是个人项目还是在团队协作中，commit message 都应该清晰明了，遵守一定规范。<br />
目前，社区有多种 commit message 的写法规范。本文介绍 Angular规范，这是目前使用最广的写法，比较合理和系统化，并且有配套的工具。</p></blockquote>
<h2 id="toc-heading-1">一、格式化 commit message 的目的</h2>
<ul>
<li>提供更多的历史信息，方便快速浏览。</li>
<li>可以过滤某些 commit（比如文档改动），便于快速查找信息。</li>
<li>可以直接从 commit 生成 Change log。</li>
</ul>
<h2 id="toc-heading-2">二、commit message 的格式</h2>
<p>每次提交，commit message 都包括三个部分：Header，Body 和 Footer。</p>
<div>bash<i></i><i></i></div>
<pre><code>&lt;type&gt;(&lt;scope&gt;): &lt;subject&gt; # header
# 空一行
&lt;body&gt;
# 空一行
&lt;footer&gt; 
</code></pre>
<p>其中，Header 是必需的，Body 和 Footer 可以省略。<br />
不管是哪一个部分，任何一行都不得超过 72 个字符（或 100 个字符）。这是为了避免自动换行影响美观。</p>
<h3 id="toc-heading-3">1. Header</h3>
<p>Header部分只有一行，包括三个字段：type（必需）、scope（可选）和subject（必需）。</p>
<p><strong>(1) type </strong></p>
<p>type用于说明 commit 的类别，只允许使用下面7个标识：</p>
<ul>
<li><code>feat</code>：新功能（feature）</li>
<li><code>fix</code>：修补bug</li>
<li><code>docs</code>：文档（documentation）</li>
<li><code>style</code>：格式（不影响代码运行的变动）</li>
<li><code>refactor</code>：重构（即不是新增功能，也不是修改bug的代码变动）</li>
<li><code>test</code>：增加测试</li>
<li><code>chore</code>：构建过程或辅助工具的变动</li>
</ul>
<p>如果 type 为 feat 和 fix，则该 commit 将肯定出现在 Change log 之中。其他情况（docs、chore、style、refactor、test）由你决定，要不要放入 Change log，建议是不要。</p>
<p><strong>(2) scope </strong></p>
<p>用于说明 commit 影响的范围，比如数据层、控制层、视图层等等，视项目不同而不同。</p>
<p><strong>(3) subject </strong></p>
<p>subject 是 commit 目的的简短描述，不超过 50 个字符。</p>
<ul>
<li>以动词开头，使用第一人称现在时，比如 change，而不是 changed 或 changes。</li>
<li>第一个字母小写。</li>
<li>结尾不加句号（.）。</li>
</ul>
<h3 id="toc-heading-4">2. Body</h3>
<p>用于对本次 commit 的详细描述，可以分成多行。下面是一个范例：</p>
<div>bash<i></i><i></i></div>
<pre><code>More detailed explanatory text, if necessary.  Wrap it to 
about 72 characters or so. 

Further paragraphs come after blank lines.

- Bullet points are okay, too
- Use a hanging indent
</code></pre>
<p>有两个注意点。<br />
(1) 使用第一人称现在时，比如使用 change 而不是 changed 或 changes。<br />
(2) 应该说明代码变动的动机，以及与以前行为的对比。</p>
<h3 id="toc-heading-5">3. Footer</h3>
<p>Footer 部分只用于两种情况。</p>
<p><strong>(1) 不兼容变动 </strong></p>
<p>如果当前代码与上一个版本不兼容，则 Footer 部分以 <code>BREAKING CHANGE</code> 开头，后面是对变动的描述、以及变动理由和迁移方法。</p>
<div>bash<i></i><i></i></div>
<pre><code>BREAKING CHANGE: isolate scope bindings definition has changed.

To migrate the code follow the example below:

Before:

scope: {
  myAttr: 'attribute',
}

After:

scope: {
  myAttr: '@',
}

The removed `inject` wasn't generaly useful for directives so there should be no code using it.
</code></pre>
<p><strong> (2) 关闭 Issue </strong></p>
<p>如果当前 commit 针对某个issue，那么可以在 Footer 部分关闭这个 issue 。</p>
<div>bash<i></i><i></i></div>
<pre><code>Closes #234
</code></pre>
<p>也可以一次关闭多个 issue 。</p>
<div>bash<i></i><i></i></div>
<pre><code>Closes #123, #245, #992
</code></pre>
<h3 id="toc-heading-6">4. Revert（可忽视）</h3>
<p>还有一种特殊情况，如果当前 commit 用于撤销以前的 commit，则必须以 <code>revert:</code> 开头，后面跟着被撤销 Commit 的 Header。</p>
<div>bash<i></i><i></i></div>
<pre><code>revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
</code></pre>
<p>Body 部分的格式是固定的，必须写成 <code>This reverts commit &lt;hash&gt;.</code>，其中的 hash 是被撤销 commit 的 SHA 标识符。</p>
<p>如果当前 commit 与被撤销的 commit，在同一个发布（release）里面，那么它们都不会出现在 Change log 里面。如果两者在不同的发布，那么当前 commit，会出现在 Change log 的Reverts小标题下面。</p>
<h2 id="toc-heading-7">三、提交频率</h2>
<p>关于什么时候提交一次：<br />
每次你写完一个功能的时候，就应该做一次提交（这个提交是提交到本地的 git 库中）。<br />
当<br />
然，这里的写完表示的是你的这个功能是没有问题的。</p>
<h2 id="toc-heading-8">四、Angular规范</h2>
<p><a href="https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#heading=h.greljkmo14y0" target="_0" rel="external nofollow noopener noreferrer">Angular规范</a>见上图：</p>
<div><img alt="Angular规范" src="https://www.wenyuanblog.com/medias/blogimages/git_commit_message_angular.png" data-original="/medias/blogimages/git_commit_message_angular.png" /></div>
<p>&nbsp;</p>
<h2 id="toc-heading-9">附：团队协作风格指南</h2>
<p>在团队协作中，不管有多少人共同参与同一项目，我们期望每一行代码都像是同一个人编写的。因此需要永远遵循同一套编码规范。<br />
我基于国内大厂规范，整理了一套<a title="团队协作风格指南" href="https://github.com/winyuan/style-guide" target="_0" rel="external nofollow noopener noreferrer">《团队协作风格指南》</a>，仅供参考。<br />
整理自<a href="http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html" target="_0" rel="external nofollow noopener noreferrer">《Commit message 和 Change log 编写指南》-阮一峰</a><br />
参考<a href="https://segmentfault.com/a/1190000004282514" target="_0" rel="external nofollow noopener noreferrer">［译］AngularJS Git提交信息规范</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/gittijiaoxinxiguifan.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>群里提问的艺术</title>
		<link>http://www.eavea.com/blog/index.php/qunlitiwendeyishu.html</link>
		<comments>http://www.eavea.com/blog/index.php/qunlitiwendeyishu.html#comments</comments>
		<pubDate>Tue, 14 Apr 2020 06:42:01 +0000</pubDate>
		<dc:creator>eavea</dc:creator>
				<category><![CDATA[技术周边]]></category>
		<category><![CDATA[杂谈]]></category>

		<guid isPermaLink="false">http://www.eavea.com/blog/?p=32</guid>
		<description><![CDATA[群里提问的艺术 在技术交流群里，只有正确地提问，才能最有效地得到期望的答案。 提问，是一门艺术。 经常会看到有 [&#8230;]]]></description>
				<content:encoded><![CDATA[<div>群里提问的艺术</div>
<blockquote><p>在技术交流群里，只有正确地提问，才能最有效地得到期望的答案。<br />
提问，是一门艺术。</p></blockquote>
<p>经常会看到有人在，xxx 交流群 / xxx 技术交流群 / xxx 学习交流群 里问问题，然而总是得不到想要的答案，最后无奈地吐槽完一句后默默离开。</p>
<p>其实这种问题地频繁出现，最终会让好端端的技术群成为车友群。之所以有这样的现象，跟提问者不会提问有很大的关系。</p>
<p>下面就 如何正确地提问 分成以下三部分进行介绍：</p>
<ul>
<li>提问之前</li>
<li>提问之时，怎么提问注意事项</li>
<li>提问之后</li>
</ul>
<h2 id="toc-heading-1">一、提问之前</h2>
<p>遇到问题首先你得尝试自己解决自己的问题。</p>
<p>我相信很多群里都有这样的幽默公告：本群已和谷歌，百度，360，搜狗，必应等搜索引擎公司达成战略合作，有什么疑问可以先咨询他们，不用在群里问了。</p>
<p>尝试自己解决是非常重要的一步，这也是我们能否经过这个问题能够成长的关键所在。自己动手丰衣足食，这是亘古不变的道理，遇到难题也是如此，自己不首先动动脑子，只知道一个劲的问「为什么」「怎么做」，到头来，即使你解决了问题，你也没有学到解决的思路和方法。</p>
<p>那么如何自己尝试着解决呢？按下面的步骤走一遍：</p>
<ol>
<li><strong>通过搜索引擎搜索</strong>：Baidu 或者 Google（推荐），搜索结果中前三页如果找不到你想要的信息，就进行下一步吧。对于成熟的开源项目，你遇到的问题，很可能别人也遇到过。这时通过 Google、StackOverflow 等网站的搜索服务，可以帮你快速定位并解决问题。永远记住，地球上的你并不孤单，包括你遇到的问题。</li>
<li><strong>查阅手册/文档</strong>：确保自己阅读过至少一次官方文档。这样在遇到问题时，如果能回忆起只言片语，就可以再去读一遍相关文档，问题往往也就解决了。</li>
<li><strong>查阅社区/论坛</strong>：阅读常见问题文件（FAQ）或者开源项目的 issue，或者论坛（类似 react china）。</li>
<li><strong>询问朋友</strong>：如果你使用的开源软件，在朋友圈或同事圈里也有人使用，那么抬起你的脚、或拿起你的电话，真挚诚恳的探讨不会遭遇拒绝，而会增进友谊。相信我，同样是请教别人，有时候寻求身边看得见摸得着的人，会远比寻求网络上的水友更有效。当然，如果你是妹子，恰好群里的单身狗们闲着没事干就另当别论了。</li>
<li><strong>自检并不断测试</strong>：反复尝试自己检查以找到答案。</li>
<li><strong>阅读源码（这步非必须）</strong>：如果你是程序开发者，尽量尝试阅读源码以找到答案，有的第三方库文档漏写的东西，在源码的注释中会体现，实在不行还能直接看相应的函数（方法）。</li>
</ol>
<p>经过以上 6 步或者 5 步你都无法解决遇到的问题，那么你确实针对这个问题能力有限，准备去群里请教了，那么在尝试自己解决之后无果，应该做哪些准备呢？</p>
<p>你一定要准备好下面这些才能去群里提问。</p>
<ol>
<li>一定要明白自己想要问什么问题：不能自己都说不清自己想要问什么问题，那么群里提问你也问不出什么来。</li>
<li>请梳理好您的问题：要说明之前你都干了些什么。</li>
<li>要用言简意赅的语言：这个是我们作为职场一个必备的技能，说重点，言简意赅。</li>
</ol>
<h2 id="toc-heading-2">二、怎么提问</h2>
<p>抱着平和对等的心态，找到合适的途径后，就得静下心来将遇到的问题写成文字。书写文字不是一件简单的事情，我们可以从遵循一些简单的规则开始。</p>
<p>用词准确，问题明确。</p>
<p>标题要简洁清晰，要言之有物。</p>
<blockquote><p>反例：有人会用Vue吗？<br />
正例：在使用 xxx 版本的 Vue ，我操作了 xxx，也写了 xxx，但是 xxx 组件渲染不出来。</p></blockquote>
<p>一个好标题范例是<code>目标 —— 差异</code>式的描述，许多技术支持组织就是这样做的。在<code>目标</code>部分指出是哪一个或哪一组东西有问题，在<code>差异</code>部分则描述与期望的行为不一致的地方。</p>
<p>描述清晰，信息充足。</p>
<ol>
<li><strong>准确有效的信息</strong>：描述事实，而不是猜测，如果你想给出你的猜测，一定要先描述事实，给你的猜测一些证据，不然就不要猜测。</li>
<li><strong>问题表现/内容</strong>：按照时间顺序列出问题症状。问题发生前的一系列操作，往往就是对找出问题最有帮助的线索。因此，你的说明里应该包含你的操作步骤，以及机器和软件的反应，直到问题发生。在命令行处理的情况下，提供一段操作记录（例如运行脚本工具所生成的），并引用相关的若干行（如 20 行）记录会非常有帮助。</li>
<li><strong>简单的做过什么尝试</strong>：在描述你做过什么尝试的时候，简单的你描述你做了哪些尝试就行，为什么要这么做其实不是那么重要。</li>
</ol>
<p>如果你想弄清楚如何做某事（而不是报告一个Bug），在开头就描述你的目标，然后才陈述重现你所卡住的特定步骤。</p>
<p>经常寻求技术帮助的人在心中有个更高层次的目标，而他们在自以为能达到目标的特定道路上被卡住了，然后跑来问该怎么走，但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。</p>
<p>玉伯有句话是这么说的：</p>
<blockquote><p>提问者选择的路本身就是一条崎岖之路，对于要解决的问题，实际上有更好的方式。这种情况下，描述清楚目标，讲清楚要干什么非常重要。</p></blockquote>
<ol>
<li><strong>想要问到什么</strong>：提供建议？发送一段代码？检查你的补丁或者别的？在群里经常会出现这种情况，当某个人发了一段文字，另外的人说：你想问什么？</li>
</ol>
<p>所以我们在问问题的时候一定要把你想要问到什么，这个目标想清楚。</p>
<ol>
<li><strong>提供尽量多的信息</strong>：尽量提供可重现的例子，你可以在 <a href="http://www.jsbin.com/" target="_0" rel="external nofollow noopener noreferrer">jsbin</a>、<a href="https://runjs.cn/" target="_0" rel="external nofollow noopener noreferrer">runjs</a>、<a href="http://www.jsfiddle.net/" target="_0" rel="external nofollow noopener noreferrer">jsfiddle</a>、<a href="http://codepen.io/" target="_0" rel="external nofollow noopener noreferrer">codepen</a> 等这些地方提供一个可重现的例子。即使你是一个很大的项目，想办法把你需要验证的点提取出来，如果确实无法提取，就贴一些代码，出现问题那行代码周围的代码（周围的相关代码都要，因为你可能觉得不是他们的问题，但也许就是，不然你觉得的都是对的，你就不会不知道怎么解决了）。</li>
</ol>
<p>避免一些毫无意义的问题。</p>
<p>经常会有人问一些毫无意义的问题，比如这样的：</p>
<blockquote><p>反例：有没有人会xxx？<br />
反例：有没有人在？<br />
反例：谁能帮我解决一个问题？</p></blockquote>
<p>面对这种问题，别人就很难预估你这个问题需要解决多久，也很难判断自己是否能解决这个问题，如果他回答了你，意味着他就是有空而且很在行，所以他还是选择不出声。这个就跟微信私聊的时候说：「在吗？」 这种一个意思。</p>
<blockquote><p>反例：ES6是什么？</p></blockquote>
<p>这种问题也是，很明显通过搜索引擎就能搞定的，要是下次还有这种问题，你就把这个图发给它。</p>
<div><img alt="鸟哥语录" src="https://www.wenyuanblog.com/medias/blogimages/niao_ge_yu_lu.jpg" data-original="/medias/blogimages/niao_ge_yu_lu.jpg" /></div>
<p>&nbsp;</p>
<p>建议的问法。</p>
<ol>
<li>有问题直接问。比如：vue2.0什么时候出，bootstrap表格插件有什么推荐的？</li>
<li>直接说场景：我在做xx端东西的时候，在 window 7 平台的 IE7 版本下遇到了左右不对齐问题，具体如图所示img，代码地址：<code>http://www.jsbin.com/xxxx</code>，在百度中找到的答案，试了之后还是有同样的问题。请有空的同学帮我看看是什么问题？</li>
</ol>
<h2 id="toc-heading-3">三、提问之后</h2>
<ol>
<li>如果有人花时间帮你理清了思路、解决了问题，记得表示下感谢。不强迫说一定要发个红包道谢，但如果一个群里能养成解决问题后发红包的风气，那也是很正能量的。</li>
<li>无论问题有没有在群里得到解决，都要对参与讨论的人说声「谢谢你的建议，我再看看。」</li>
<li>经常主动帮别人解决问题，你在群里自然就混了个眼熟，那么当你遇到问题的时候，别人也会乐意读完你的提问。能不能替你解决是另一码事。</li>
</ol>
<h2 id="toc-heading-4">四、心态放平</h2>
<ul>
<li>提前做好冷场的准备：也许别人在忙，也许这个问题太简单了，也许没人做过这块，如果冷场了，没人回答，赶紧换下一个群。</li>
<li>谦虚，别人没有义务帮你解决问题，往往大牛的时间比你少，比你珍贵。</li>
<li>没有一定的自学能力，遇到问题就伸手的不适合玩这个。</li>
<li>群唯一的作用就是：扯淡、交流、分享，以上几条为前提。</li>
</ul>
<p>其实根据我的经验，<strong>选型问题</strong> 和 <strong>求资源/求推荐</strong> 这类问题在群里得到的反响比较多。真正遇到难点的技术问题，尤其还是跟业务紧密耦合的，还是要养成自己摸索解决的习惯。</p>
<h2 id="toc-heading-5">五、懒人必看</h2>
<p>最后，如果嫌上文太长懒得看，收藏一下这个图吧：</p>
<div><img alt="群里提问的艺术" src="https://www.wenyuanblog.com/medias/blogimages/how_to_ask_questions_correctly.png" data-original="/medias/blogimages/how_to_ask_questions_correctly.png" /></div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eavea.com/blog/index.php/qunlitiwendeyishu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
