<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>夜晚的雨滴</title>
    <description>本站是吴浩的技术分享博客。内容涵盖Java、python爬虫技术、pyQt5 GUI界面开发、python数据分析、机器学习等相关的研究与知识分享。</description>
    <link>https://haoforward.github.io/</link>
    <atom:link href="https://haoforward.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 23 May 2021 14:05:20 +0000</pubDate>
    <lastBuildDate>Sun, 23 May 2021 14:05:20 +0000</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>Python中的异常处理</title>
        <description>&lt;h2 id=&quot;错误&quot;&gt;错误&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;语法上的&lt;/li&gt;
  &lt;li&gt;逻辑上的&lt;/li&gt;
  &lt;li&gt;遇到错误后，解释器会引发异常。如果异常对象并未被处理或捕捉，程序就会用所谓的回溯（traceback）终止执行。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;异常处理语句-tryexceptfinally&quot;&gt;异常处理语句 try…except…finally&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;except&lt;/code&gt;语句不是必须的，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;finally&lt;/code&gt;语句也不是必须的，但是二者必须要有一个，否则就没有&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;try&lt;/code&gt;的意义了。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;except&lt;/code&gt;语句可以有多个，Python会按&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;except&lt;/code&gt;语句的顺序依次匹配你指定的异常，如果异常已经处理就不会再进入后面的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;except&lt;/code&gt;语句。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;except&lt;/code&gt;语句可以以元组形式同时指定多个异常。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;except&lt;/code&gt;语句后面如果不指定异常类型，则默认捕获所有异常，你可以通过logging或者sys模块获取当前异常。&lt;/p&gt;

    &lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;logging&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;do_work&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;except&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;    
    &lt;span class=&quot;c1&quot;&gt;# get detail from logging module
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;logging&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;exception&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;'Exception caught!'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
         
    &lt;span class=&quot;c1&quot;&gt;# get detail from sys.exc_info() method
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;error_type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;error_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;trace_back&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;exc_info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;error_value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;raise&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;如果要捕获异常后要重复抛出，请使用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;raise&lt;/code&gt;，后面不要带任何参数或信息。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;不建议捕获并抛出同一个异常，请考虑重构你的代码。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;不建议在不清楚逻辑的情况下捕获所有异常，有可能你隐藏了很严重的问题。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;尽量使用内置的异常处理语句来替换&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;try/except&lt;/code&gt;语句，比如&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;with&lt;/code&gt;语句，&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getattr()&lt;/code&gt;方法。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;抛出异常&quot;&gt;抛出异常&lt;/h2&gt;

&lt;p&gt;​使用raise关键字可自主抛出一个异常，等同于Java和C#中的throw；&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;raise&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;NameError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;bad name!&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;raise&lt;/code&gt;关键字后面可以指定你要抛出的异常实例，一般来说抛出的异常越详细越好，Python在&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exceptions&lt;/code&gt;模块内建了很多的异常类型，通过使用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dir()&lt;/code&gt;函数来查看&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;exceptions&lt;/code&gt;中的异常类型，如下：&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;exceptions&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;exceptions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;# ['ArithmeticError', 'AssertionError'...]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;异常处理时常见的问题&quot;&gt;异常处理时常见的问题&lt;/h2&gt;

&lt;h3 id=&quot;如何自定义异常类型&quot;&gt;如何自定义异常类型&lt;/h3&gt;
&lt;p&gt;直接从Exception类继承即可。&lt;/p&gt;

&lt;h3 id=&quot;exception和baseexception&quot;&gt;Exception和BaseException&lt;/h3&gt;

&lt;p&gt;当要捕获一个通用异常时，应该用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Exception&lt;/code&gt;还是&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BaseException&lt;/code&gt;？以下是它们之间的继承关系。&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;BaseException&lt;/span&gt;
 &lt;span class=&quot;o&quot;&gt;+--&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;SystemExit&lt;/span&gt;
 &lt;span class=&quot;o&quot;&gt;+--&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;KeyboardInterrupt&lt;/span&gt;
 &lt;span class=&quot;o&quot;&gt;+--&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;GeneratorExit&lt;/span&gt;
 &lt;span class=&quot;o&quot;&gt;+--&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Exception&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;+--&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;StopIteration&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;+--&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;StandardError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;+--&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Warning&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;程序在捕获所有异常时更应该使用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Exception&lt;/code&gt;而不是&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BaseException&lt;/code&gt;，因为被排除的三个异常属于更高级别的异常，合理的做法应该是交给Python的解释器处理。&lt;/p&gt;

&lt;h3 id=&quot;使用内置的语法范式代替tryexcept&quot;&gt;使用内置的语法范式代替try/except&lt;/h3&gt;

&lt;p&gt;Python 本身提供了很多的语法范式简化了异常的处理，比如&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;for&lt;/code&gt;语句就处理了的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StopIteration&lt;/code&gt;异常，让你很流畅地写出一个循环。&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;with&lt;/code&gt;语句在打开文件后会自动调用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;finally&lt;/code&gt;并关闭文件。我们在写 Python 代码时应该尽量避免在遇到这种情况时还使用try/except/finally的思维来处理。&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;# should not
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;do_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;finally&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# should 
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;do_something&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;当我们需要访问一个不确定的属性时，有可能你会写出这样的代码：&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;# not sure if we can get its name
&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;AttributeError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'default'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;其实我们可以使用更简单的&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getattr()&lt;/code&gt;来达到目的。&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;getattr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'name'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;'default'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;异常速查表&quot;&gt;异常速查表&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;https://haoforward.github.io/assets/images/2019/it/Exception_table.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;异常处理好习惯&quot;&gt;异常处理好习惯&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;只处理你知道的异常，尽量避免捕获所有异常然后吞掉它们。&lt;/li&gt;
  &lt;li&gt;抛出的异常应该说明原因，有时候你知道异常类型也猜不出所以然。&lt;/li&gt;
  &lt;li&gt;不要使用异常来控制流程，那样你的程序会无比难懂和难维护。&lt;/li&gt;
  &lt;li&gt;如果有需要，切记使用&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;finally&lt;/code&gt;来释放资源。&lt;/li&gt;
  &lt;li&gt;如果有需要，请不要忘记在处理异常后做清理工作或者回滚操作。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;注：以上内容摘自betacat 《&lt;a href=&quot;https://segmentfault.com/a/1190000007736783&quot;&gt;总结：Python中的异常处理&lt;/a&gt;》，内容有些许删改。&lt;/p&gt;
</description>
        <pubDate>Wed, 10 Jul 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/it/2019/07/10/exception-handle.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/it/2019/07/10/exception-handle.html</guid>
        
        <category>it</category>
        
        
        <category>it</category>
        
      </item>
    
      <item>
        <title>撸了今年阿里、网易和美团的面试，我有一个重要发现.......</title>
        <description>&lt;p&gt;就目前大环境来看，跳槽成功的难度比往年高很多。一个明显的感受：今年的面试，无论一面还是二面，都很考验Java程序员的技术功底。&lt;/p&gt;

&lt;p&gt;最近我搜集了93套阿里、美团、网易等公司19年的面试题，把技术点梳理成一份大而全的“Java高级工程师”面试xmind（实际上比预期多花了不少精力），包含知识脉络 + 分支细节，由于篇幅有限，这里以图片的形式给大家展示一部分。&lt;/p&gt;

&lt;p&gt;这份 xmind 尤其适合：&lt;/p&gt;

&lt;p&gt;1.近期想跳槽，要面试的Java程序员，查漏补缺，以便尽快弥补短板；&lt;/p&gt;

&lt;p&gt;2.想了解“一线互联网公司”最新技术要求，对比找出自身的长处和弱点所在，评估自己在现有市场上的竞争力如何；&lt;/p&gt;

&lt;p&gt;3.做了几年Java开发，但还没形成系统的Java知识体系，缺乏清晰的提升方向和学习路径的程序员。&lt;/p&gt;

&lt;p&gt;相信它会给大家带来很多收获。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;画外音：xmind 源文件，以及面试资料，文末获取，建议下载到电脑上查看。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/kkb01.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/kkb02.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/kkb03.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/kkb04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;除面试资料外，分享一位百度的架构师朋友他新录制的“分布式事务”专题视频，对于面试中的难点-分布式事务这块，是很好的补充。&lt;/p&gt;

&lt;p&gt;画外音：这位朋友比较低调，我只能说，你一定认识他。&lt;/p&gt;

&lt;p&gt;视频具体内容如下：&lt;/p&gt;

&lt;p&gt;搞定“分布式事务”解决方案&lt;/p&gt;

&lt;p&gt;1.数据一致性存在原因&lt;/p&gt;

&lt;p&gt;2 数据一致性类型
3 追求强一致性还是最终一致性
4 分布式缓存和数据库数据一致性如何解决
5 基于分布式事务数据一致性解决方式
6 分布式事务业界常有解决方案( 2PC /TCC／基于 MQ)以及我们如何设计（同步场景，异步场景）&lt;/p&gt;

&lt;p&gt;需要获取更全面的面试资料，或专题视频，可以加微信领取。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;画外音：免费。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/kkb05.jpg&quot; alt=&quot;&quot; /&gt;
长按扫码  领取资料&lt;/p&gt;

&lt;p&gt;这次 xmind 面试资料+专题视频，是由开课吧赞助提供，非常感谢开课吧的支持。&lt;/p&gt;

&lt;p&gt;现在开课吧联合了“廖雪峰”和前58技术委员会主席，针对1～5年和5年以上工作经验的Java程序员，分别打造了《JavaEE企业级分布式高级架构师》和《百万年薪架构师》2门课程，帮助Java程序员快速提高自身开发能力，提升职场竞争力。&lt;/p&gt;
</description>
        <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/it/2019/07/01/ali-interview.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/it/2019/07/01/ali-interview.html</guid>
        
        <category>it</category>
        
        
        <category>it</category>
        
      </item>
    
      <item>
        <title>第二期，14个月，开干！</title>
        <description>&lt;p&gt;很久没有给大家介绍我的知识星球了，因为第一期即将结束的时候加入，对用户来讲体验度不会很好，虽然星球内的内容都是一样，但参与感就弱了很多。&lt;/p&gt;

&lt;p&gt;终于到了现在《就聊挣钱》第二期开始了，现在加入可享受长达14个月的长周期，现在加入直到2020年8月8号到期。如果你一直关注，这是个好时机。&lt;/p&gt;

&lt;p&gt;在开始第二期的时候，我先给大家做一个复盘，我是为什么要开通这个知识星球，这个知识星球里面都分享什么内容等等。&lt;/p&gt;

&lt;p&gt;2018年8月8日，我开通了知识星球《就聊挣钱》，目标是搭建一个平台，一方面分享自己这些年对商业模式的认识，一方面想通过这个平台链接具有同样目标乐于实践分享的群体，让大家有一个交流讨论的地方。&lt;/p&gt;

&lt;p&gt;做了一些准备之后，2018年08月18日在公号发布了一篇文章，星球进来了 100 多人，第二天又进来了 100 多人，基本上前 300 个用户就是这么来的，这里面的很多用户在后面都做了高质量分享。&lt;/p&gt;

&lt;p&gt;第一期的星球定价阶梯制，从最初的 100 人特价到最后的 188 元，越早加入的用户越有利；到现在知识星球共 1500 多用户，我现在公号共 15w 读者，意味着每 100 人中有 1 位在知识星球。&lt;/p&gt;

&lt;p&gt;其实星球起名叫做《就聊挣钱》这个名字虽然稍微有点争议，不过到也挺符合我的性格，说话直接，不遮遮掩掩，大家工作、创业、希望自我成长，最终目标也应该都是挣钱，当然不排除有极少数是为了理想，只是鉴于中国传统，都不会放在桌面上来直接谈而已。&lt;/p&gt;

&lt;p&gt;星球虽于挣钱而起但又不仅限于聊挣钱，同时还有商业模式、创业想法、增长黑客、营销策略、赚钱思路，撮合相关资源方对接等等。&lt;/p&gt;

&lt;p&gt;这一年我在知识星球内寻找了一些合作伙伴，一起合作做了一些小事情，现在每个月大概也能给小伙伴带来几千元的收入吧。同时还撮合了一些资源方的合作，这个价格暂时也不好去评估，有时候感慨，知识星球其实就是一条线，链接了更多可能性。&lt;/p&gt;

&lt;p&gt;第二期，我想增加很多新的玩法，有些已经确定，有些还在筹划中，相信会比第一期的内容更加精彩。&lt;/p&gt;

&lt;p&gt;那么加入知识星球到底能获得哪些有价值的信息呢？我认为是这样，了解更多的商业模式，挣钱套路可以增强你的认知、开阔你的眼界、培养你的挣钱思维，当机会出现时，可以帮助你做出正确的决策来抓住它。&lt;/p&gt;

&lt;p&gt;《就聊挣钱》知识星球是一个平台，这里面有很多的牛人，观察牛人思考问题的角度是一种学习；星球内有各行各业的朋友，可以对接更多的可能性。&lt;/p&gt;

&lt;p&gt;就说这些吧，反正一说知识付费，肯定有人说你是割韭菜，认同的人自然认同，不认同的也多说无益，每个人根据自己的认知来选择。&lt;/p&gt;

&lt;p&gt;现在加入，有如下福利：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;二期初始价格 188元，每增加 100 人，价格上涨一部分，持续时间到 2020 年 8 月 8 日，后续会涨价，我的星球一直都是，早就是优势；&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;球友可以加我私人VIP微信，平时我也会在朋友圈分享自己的一些想法，另外现在坑位非常有限，早到早得；&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;现在加入，赠送第一期精华电子书，这是《就聊挣钱》知识星球的一部分精华内容，我和朋友一起，足足整理了三天，总共 157 页，10 万多字！&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/zsxq/ebook.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;毫不夸张的说就这份电子书精华，差不多就值回票价了，现在免费赠送，如果把这本电子书看完，相信我，肯定会对各种案例、现象、商业模式有不一样的看法和思考。&lt;/p&gt;

&lt;p&gt;2019年国际上发生很多事情，国内国际经济形式都产生了变化，未来必定会产生很多新的商业模式和变化，但是危机就是机会，变化就是机遇，一生抓住一两个足以。&lt;/p&gt;

&lt;p&gt;《就聊挣钱》就是一群热爱谈钱，忠于实践的朋友，期待在这里可以探讨更多可能性。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PS：如果觉得我星球对你有价值，趁着现在优惠，欢迎推荐你的朋友一起加入，一起结伴前行。&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;长按扫码加入&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/zsxq/weixiao.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 28 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/life/2019/06/28/do-it.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/life/2019/06/28/do-it.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>Libra 加密稳定币：Facebook的&quot;野心&quot;？</title>
        <description>&lt;p&gt;2008年11月1日，有一个传说叫中本聪的日裔美国人，发表了一篇名为《比特币：一种点对点式的电子现金系统》的论文。2009年，比特币出世，从此开启了电子货币这个收割机器，全世界的韭菜都是一个味。&lt;/p&gt;

&lt;p&gt;2008年马克·扎克伯格带领的 Facebook 势头正旺，正在全球攻城掠地，前五月访问量首次突破了一亿用户。同年6月，Facebook 推出简体中文版本，当然现在 Facebook 仍然还没有入华。&lt;/p&gt;

&lt;p&gt;2008年，马克·扎克伯格可能并没有注意到一个叫中本聪的人。2019年，两个完全不同领域的人竟然产生了一点联系。&lt;/p&gt;

&lt;h2 id=&quot;libra-币横空出世&quot;&gt;Libra 币横空出世&lt;/h2&gt;

&lt;p&gt;2019年6月18日下午，Facebook 旗下全球数字加密货币 Libra 官方网站正式上线，Libra 稳定币白皮书也已经公布。&lt;/p&gt;

&lt;p&gt;在比特币价格再次冲破了10000 美元的这个时机（26号已经突破 13000 美元），难道 Facebook 也想割韭菜？no no no ，Facebook 的野心会更大。&lt;/p&gt;

&lt;p&gt;无国界货币、未来支付方式、冲击美元霸权、覆盖全球三分之一人口，各行大佬、媒体纷纷报道，那么 Facebook 发布的 Libra 项目到底是个啥？&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/libra01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;libra-币的使命&quot;&gt;Libra 币的使命&lt;/h2&gt;

&lt;p&gt;Libra 的使命是建立一套简单的、无国界的货币和为数十亿人服务的金融基础设施。Libra 的目的是让全球用户，支付、转账时可以像现在发一条文字信息一样简单。&lt;/p&gt;

&lt;p&gt;不得不承认，电子货币必将会成为未来的主流支付方式之一，但是现在的主流电子货币，真的很难能作为一种支付工具来使用，有两个问题，一直不能得到解决。&lt;/p&gt;

&lt;p&gt;第一，电子货币的价格波动太厉害，19年初的时候比特币的价格是 3000 美元左右，在我写这篇文章的时候已经到了 13000 美元，翻了近四倍；第二，多个国家不承认，由于很难监管，很多国家都不承认电子货币，包括我们国家。&lt;/p&gt;

&lt;p&gt;所以现在主流电子货币就成为了一种投资产品，大家买比特币都是为了投资，很少是因为支付的需求来使用。&lt;/p&gt;

&lt;p&gt;那么 Facebook 发布的 Libra 就可以解决这两个问题了吗？&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;真有可能都解决。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Libra 目标是成为一个稳定加密货币，那具体是怎么操作的呢？比如在中国，如果 Libra 想成为一个稳定货币的话，它会先购入一部分的人民币作为抵押，那么它就可以使用抵押的这部分金额来进行交易，它的价值和人民币在某种程度上是绑定的，从而达到稳定币的作用。&lt;/p&gt;

&lt;p&gt;第二个，国家是否认可的问题。Libra 币并不是要完全替代本国的货币，更多的是想成为一种”中介“的货币来使用，因此各个国家对它的抵触可能没有纯粹的电子货币那么大。&lt;/p&gt;

&lt;p&gt;当然也有很大的概率不被多个国家承认，Libra 组织也是刚刚开始尝试和各个国家去谈判，6月25日，美国公布了7月中旬举行听证会讨论 Libra 的合法性。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Facebook 为了把蛋糕做大，也是下足了狠功夫。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;创建 Libra 项目之初就成立了一个 Libra 协会，Libra 协会统一管理 Libra 项目的发展。Libra 协会的注册地点选择是瑞士日内瓦，原因是：瑞士一直以来都持全球中立立场，并对区块链技术持开放性态度。&lt;/p&gt;

&lt;p&gt;企业可以加入成为 Libra 协会创始人，加入门槛是1000万美元，只要是 Libra 协会的创始人大家都享有同等权力，不过，Facebook 将保有领导角色至2019年结束。&lt;/p&gt;

&lt;p&gt;算上 Facebook 和其新子公司 Calibra，该协会目前已有 29 个创始成员。在 Facebook 的计划中，到2020上半年，协会的创始人数量能够达到100个左右。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/libra02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;看来 Facebook 是要把利益相关方都绑定到这艘船上，大伙好一起搞事情。&lt;/p&gt;

&lt;p&gt;总结起来 Libra  币有以下三个特点：&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;使用了区块链技术，Libra 建立在安全、可扩展和可靠的区块链基础上。&lt;/li&gt;
  &lt;li&gt;价值稳定，Libra 以资产储备为担保，可保持价值稳定。&lt;/li&gt;
  &lt;li&gt;独立治理，Libra 由独立的 Libra 协会治理，该协会的任务是促进其生态系统的发展。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;libra-带来的影响&quot;&gt;Libra 带来的影响&lt;/h2&gt;

&lt;p&gt;大家知道，现在全球货币是美元，如果需要跨国购买货物的时候，必须先把本国货币转换成美元，再把美元兑换成本国货币，再购买商品；同时国外用户购买中国物品的时候也是一样，先将本国货币兑换成美元，美元再兑换成人民币进行购买。&lt;/p&gt;

&lt;p&gt;美国控制了全球的货币权之后，就经常在国际上薅羊毛，过个几年就搞量化宽松货币超发，全球就开始出现泡沫，股市暴涨、楼市高歌；再过个几年美联储就再进行加息，全球美元回流，股市暴跌，资产贬值，这个时候美国公司再趁机去低价收购。&lt;/p&gt;

&lt;p&gt;所以说全球各国苦美国久矣，为了摆脱美元霸权，各个国家想尽了办法，比如欧元区推出了欧元货币，中国极力推进人民币国际化，但目前来讲路漫漫。Libra 电子货币在这个时机出现，可能会对美元霸权或者人民币国际化进展产生巨大影响。&lt;/p&gt;

&lt;p&gt;根据历史传统在欧洲或者北美工作的非洲人们，每年都将挣来的工资汇回自己的祖国，为此非洲一些国家的 GDP 的 37% 都来自外汇，但是非洲的外汇费率全球最高，有的竟然高达 9% 左右，那就意味你在欧洲挣了100元欧元，跨国汇到到家乡就只剩 91 欧元了。&lt;/p&gt;

&lt;p&gt;非洲一些小国家民众，在货币方面不断的被割羊毛，Libra 电子货币如果一旦可以流行起来，就可以一定程度上避免类似的事情，挣了欧元可以直接使用 Libra 币在本国来使用，当然这只是官方所宣传的理想情况。&lt;/p&gt;

&lt;p&gt;同样问题要反过来看，对小国家的民众可能会有一些益处，但对整个国家来讲，其实是一种威胁，如果民众完全认可了 Libra 币，后期一旦 Libra 币和本国货币松绑，对小国的金融安全将会造成极大的伤害。&lt;/p&gt;

&lt;p&gt;所以 Libra 币的发布，首先冲击最大的就是一些弱小的国家，因为小国的货币不稳定导致物价波动巨大，国民有持有稳定币的需求， Facebook 的策略应该是先干掉这些小国家，然后再走农村包围城市的道路。&lt;/p&gt;

&lt;p&gt;如果 Libra 币一旦成为世界货币，那 Facebook 可挖的金旷就太大了，就仅仅统一 Facebook 内部体系的支付方式，就是非常巨大的一块财富。&lt;/p&gt;

&lt;p&gt;那么 Libra 币到底是否能成为世界货币，还是一地鸡毛，时间会给我们答案。&lt;/p&gt;

&lt;h2 id=&quot;其它有趣的点&quot;&gt;其它有趣的点：&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;1、Libra 币使用 Move 编程语言， 编程语言内部对电子货币有特定的支持。&lt;/li&gt;
  &lt;li&gt;2、Libra 币不同于支付宝和微信，支付宝和微信本质是一个第三方支付，处于交易的第三方，Libra 属于电子货币。&lt;/li&gt;
  &lt;li&gt;3、Libra 使用的是联盟链，未来随着技术的突破将转向公链。&lt;/li&gt;
  &lt;li&gt;4、Libra 目前不是投资品，因为 Libra 币是一款稳定电子货币，暂时不具有投资价值。&lt;/li&gt;
  &lt;li&gt;5、BBC 报道说这个数字货币叫 GlobalCoin（全球币），但后来被纠正说这只是 Facebook 员工在内部对其的昵称。 Facebook 为了避其锋芒，选择了一个避免低调的名字。&lt;/li&gt;
  &lt;li&gt;6、其它互联网巨头也虎视眈眈，观察  Facebook 是否会成为先烈 ：&amp;gt; 。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2019年，我们还是不知道中本聪是谁？但比特币已经家喻户晓。
2019年，扎克伯格带领的 Libra 币的横空出世，也许会激发电子货币新的春天，我们拭目以待。&lt;/p&gt;

&lt;p&gt;更多详细信息请大家参考 Libra 白皮书，因为官网比较慢我已经给大家下载下来了，公号内回复：Libra，即可获取  Libra 中文版白皮书。&lt;/p&gt;
</description>
        <pubDate>Thu, 27 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/it/2019/06/27/facebook-Libra.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/it/2019/06/27/facebook-Libra.html</guid>
        
        <category>it</category>
        
        
        <category>it</category>
        
      </item>
    
      <item>
        <title>自由职业第66天：我成为了一个北京六环公民</title>
        <description>&lt;p&gt;自从写了文章&lt;a href=&quot;http://www.ityouknow.com/life/2019/05/15/freelance.html&quot;&gt;《自由职业一时爽，一直自由一直爽》&lt;/a&gt;，宣布开启自由职业后，就有网友给我留言，让我定期给大家汇报一下自己进展。&lt;/p&gt;

&lt;p&gt;今天是离职后的第66天，也是自由职业的第66天，那我都干了些啥呢？&lt;/p&gt;

&lt;h2 id=&quot;参加了一个训练营&quot;&gt;参加了一个训练营&lt;/h2&gt;

&lt;p&gt;大家都知道我喜欢写作，但是写文章的功底真的是太差了，我自己是一个非常粗心的人，几乎每篇文章都可以找到错别字。错别字这个情况，暂时没有特别好的办法去拯救，关于写作还是有很大的提升空间的。&lt;/p&gt;

&lt;p&gt;我先给大家强调一个观点，这个世界上的绝大多数技能，都是可以通过刻意训练来获取的，根本没有到拼什么天赋的阶段。编程和写作其实都只是一种技能而已，只要你愿意去学，肯花时间去练习，相信我，你并不会比别人差。&lt;/p&gt;

&lt;p&gt;于是离职后的第一件事，就是报了一个21天的写作训练营，就是跟着很大神的那种博主去学习。写作其实也有一套自己的体系，我之前都是放任自流野蛮生长，这次21天的学习算是小小的开了一下眼界，让我知道写作原来还有这么多道道。&lt;/p&gt;

&lt;p&gt;那么21天之后我写文章的功力大增了吗？答案是肯定的，没有。但是我跟着这个课程体系学习之后，掌握了一套方法论，跟着这套方法论去学习可以节省我很多的时间，让我更快的找到写作的一些技巧，这就是知识付费的价值。&lt;/p&gt;

&lt;p&gt;不要期望花钱买一个什么课程就可以马上拥有什么样的能力，这都是不现实的，花钱买的课程只是给你提供了一个更高效的学习指导，帮助你少走了一些弯路，真正的提升永远都是需要靠自己。&lt;/p&gt;

&lt;p&gt;不过第一次参加训练营还是挺稀奇的，21天持续坚持学习，真的和买个课程放到那里去学习有很大的区别，训练营里面有导师会催着你每天打卡练习，每天需要按照进度学习，然后跟着课程去实践，非常适合自控力稍弱的同学。&lt;/p&gt;

&lt;h2 id=&quot;创建了一个训练营&quot;&gt;创建了一个训练营&lt;/h2&gt;

&lt;p&gt;大家都知道我和 Gitchat 平台有着长期的合作，我在他们平台的 Spring Boot 课程一直在畅销课程的前六。因此在今年我快离职的时候，他们就联系我说能不能针对 Spring Boot 开设一个训练营，根据运营的介绍感觉这个模式还不错。&lt;/p&gt;

&lt;p&gt;找了一个时间和 Gitchat 平台的工作人员进行了深入的沟通，普通的图文课程，读者购买之后打开率其实是非常低的，大部分用户购买了课程之后，很难跟着课程体系坚持学习下来，这样其实没有真正发挥课程的价值。&lt;/p&gt;

&lt;p&gt;根据他们之前开设训练营的数据反馈，训练营的学习模式让文章打开率火速提升 N  倍，一群人一起鼓励着学习的方式很特别，有种重新开始上学的感觉。我提前参加写作训练营也是为了真正体验一下这个过程。&lt;/p&gt;

&lt;h2 id=&quot;和江南一点雨合作开了一个-spring-cloud-课程&quot;&gt;和江南一点雨合作开了一个 Spring Cloud 课程&lt;/h2&gt;

&lt;p&gt;说起我和江南一点雨的认识过程其实还蛮有趣的，在很早之前不知道是什么原因早早加了他的微信，但一直都没有怎么沟通过。突然有一天，华为云开放日做活动，工作人员邀请我去深圳东莞参观，在华为工作人员把我拉到群里的时候，发现了一个共同好友就是江南一点雨。&lt;/p&gt;

&lt;p&gt;活动当天在深圳酒店的时候我们见了一面，算是真正的认识了一下，聊了一圈才发现同是陕西老乡，活动一天的时间聊了不少东西，觉得江南一点雨确实是一个很靠谱的小伙子，活动结束后又专门约了一个时间一起再次吃了个饭。&lt;/p&gt;

&lt;p&gt;几天的聊天中得知他还写了一本书《Spring Boot + Vue全栈开发实战》，同样也运营了一个公众号叫做”江南一点雨“。他在 CSDN 的博客排名高达 364 ，比我在 CSDN 的博客排名要高出一千多名，其中的 Spring Boot/Cloud 文章阅读量最高。&lt;/p&gt;

&lt;p&gt;这是我们认识的背景，后来回北京没多久，就收到慕课网的邀请，说能不能在他们平台开设一个 Spring Cloud 的专栏。因为写专栏真的是一个很费时间的事情，我自己的时间根本安排不过来，就提出能不能和另外一个作者一起来写。&lt;/p&gt;

&lt;p&gt;得到慕课网平台的同意后，我就试着和江南一点雨聊了一下，他也很有兴趣，于是就这样愉快的定了下来。这个专栏整整写了近两个月，大部分内容都是江南一点雨输出的，并且文章的输出质量都比我写得要好太多，所以大家看到专栏内比较好的内容，应该都是他写的。&lt;/p&gt;

&lt;p&gt;好了，这里我再无耻的放一下，我和他联合出版的 Spring Cloud 系列学习课程，如果你们对 Spring Cloud 学习感兴趣的话，可以扫码了解一下，前面几个章节是免费的，大家也可以猜猜哪篇是我写的，哪篇是他写的。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/life/springcloud.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;成为一个六环的公民&quot;&gt;成为一个六环的公民&lt;/h2&gt;

&lt;p&gt;来北京六年多，一直都住在北京的南三环周边，住的房子是一室一厨一卫大概 50 平方左右吧，因为和房东的关系还不错，就一直住了近 5 年的时间。&lt;/p&gt;

&lt;p&gt;住在南三环上班通勤时间大概是 1 个小时左右，在北京这个时间算比较正常。四月份离职，6月份房子刚好到期，我就在想要不要换一个更好一点的居住环境，南三环那个地方真的是住烦了，周边环境已经没有任何新鲜感。&lt;/p&gt;

&lt;p&gt;住在南三环周边的好处是通勤方便，坐火车或者去中关村上班距离都可以接受，但缺点也很明显，周边好一点的房子租金都很贵，空气质量很差，因为小区后面有一条马路噪音比较高。综合比较后，就决定要挪个窝了。&lt;/p&gt;

&lt;p&gt;看来看去最后选上了大兴的一个小区，小区内有健身房、绿化面积、安静程度整体都可以，关键是租金也不是那么贵。反正我也不用上班了，住的远一点好像也没有太多关系，于是就这么愉快的定了下来。&lt;/p&gt;

&lt;p&gt;等搬完家之后，我打开地图一看，竟然已经搬离了北京城区，甚至距离北京五环还有一段距离，真正的成为了一个北京六环公民。写到这里我想起了一首歌，五环之歌。&lt;/p&gt;

&lt;p&gt;下图为北京的环线示意图，我就搬到了下图这个小红圈内。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/life/liuhuan.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;最近我在大兴区的核心区域逛了一下，深深的感觉到大兴区其实很像国内的三线城市的格局，楼房矮矮的，路上人也没有那么多，空气质量明显比南三环要好一些，晚上过了十点以后人好像也没那么多了。&lt;/p&gt;

&lt;p&gt;突然感觉这个环境真的很适合我，距离城区也不是特别远，平时如果有合适的活动，可以随时去城里面Hgih，没事的时候就安静的写点东西，逛逛小街道，反正看着整个核心区域也不是那么大，准备花点时间把周边都拔个草。&lt;/p&gt;

&lt;p&gt;后来了解到大兴区隶属于北京的卫星城市，专门百度了一下，卫星城市，是指在中心城市外围建设的人口较少、规模较小，与中心城市功能联系紧密的城镇。北京像这样的卫星城市有很多，除过北京城六区之外，其它好像都可以算上卫星城市。&lt;/p&gt;

&lt;p&gt;下图中有颜色的区域为北京城六区，其它大概率就是卫星的节奏。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/life/liuqu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;北京有16个区，有时候东城区和西城区同称为城区（二环内），整体并不是一个很规整的形状，网上有一个很形象的示意图，找来大家可以了解下。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/life/dixingtu.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;其它事情&quot;&gt;其它事情&lt;/h2&gt;

&lt;p&gt;还和知识星球内的朋友，一起做了一个没有广告的、纯粹的技术公众号：”Java极客技术”，到目前为止这个公号没有发过一篇商业广告，都是一群纯粹的技术人在运营它。大家如果对广告比较敏感，只想关注技术的话，可以试着关注一下它。&lt;/p&gt;

&lt;p&gt;因为很多读者都给我反馈，不知道如何提升自己的技能，不知道刚刚毕业后应该学什么，后期”Java极客技术“的作者团队们，计划整理一个初级程序员的技能指南，方便指引大家去提高自己，当然会免费推送到”Java极客技术”公号中。&lt;/p&gt;

&lt;p&gt;没有关注的朋友，可以扫码支持一把。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/java.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;另外，还参加了几次行业内的聚会，认识了一些很牛很牛的人，还在持续面基各种各样的大牛们。另外自己在尝试一个新的领域，目前还处在学习阶段，某天有所收获的时候分享给大家。&lt;/p&gt;

&lt;p&gt;告诉大家一个真相：&lt;/p&gt;

&lt;p&gt;自由职业真的不是那么爽，虽然时间完全自由了，但其实我反而更忙了，每天醒来都会发现有很多的计划没有完成，忙到晚上十一点也是家常便饭。&lt;/p&gt;

&lt;p&gt;不过心情确实更自由了，真是：一边自由，一边酸爽。好了今天就给大家分享到这里，后面有时间再给大家继续分享我自由职业生涯。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;作者简介&lt;/strong&gt;：纯洁的微笑，&lt;strong&gt;一个有故事的程序员&lt;/strong&gt;。曾在互联网金融，第三方支付公司工作，现为一名自由职业者，和你一起用技术的角度去看这个世界。我的个人微信号 &lt;strong&gt;puresmile2&lt;/strong&gt;，欢迎大家找我聊天，记录你我的故事。&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 21 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/life/2019/06/21/66-days.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/life/2019/06/21/66-days.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>报复性熬夜：熬夜一时爽，一直熬夜一直爽</title>
        <description>&lt;p&gt;最近有一个网络流行词”报复性熬夜“在各种热议中，我也来凑个热闹来聊聊。&lt;/p&gt;

&lt;p&gt;我曾经也是报复性熬夜的忠实用户。&lt;/p&gt;

&lt;p&gt;在互联网公司，996是日常情况，偶尔997也不是夸张的事情。&lt;a href=&quot;http://www.ityouknow.com/it/2019/06/10/write-blog.html&quot;&gt;《你为什么有那么多时间写博客》&lt;/a&gt;这篇文章也给大家介绍过我的时间安排，平时10、11点回家是家常便饭。&lt;/p&gt;

&lt;p&gt;打个车回家，收拾东西洗澡刷牙，躺倒床上的时候，看了一下时间，怎么直接就到了12点，如果这个时候直接睡觉的话，总感觉太 TM 对不起自己了。&lt;/p&gt;

&lt;p&gt;白天忙了整整一天，总感觉只有到晚上的这个时间点，才真正的属于自己。所以一定要犒劳一下自己，刷个视频、看个文章什么的，一不小心就到凌晨两三点。&lt;/p&gt;

&lt;p&gt;第二天顶着浓浓的黑眼圈，无精打采的去上班。依旧加班到很晚，一九每天熬着夜，生活好事进入了死循环。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/aoye01.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;有人穷得太久了，如果一旦暴富，就疯狂的炫富性消费。&lt;/p&gt;

&lt;p&gt;有人太渴望成名，压抑太久之后，就出现反常行为，为了出名成为跳梁小丑。&lt;/p&gt;

&lt;p&gt;我也一样，白天时间被占用得太多，晚上就报复性熬夜。&lt;/p&gt;

&lt;p&gt;因为只有凌晨两三点的时候，我才感觉自己真实的活着。&lt;/p&gt;

&lt;h2 id=&quot;晚上熬夜有多爽白天就有多刺激&quot;&gt;晚上熬夜有多爽，白天就有多刺激&lt;/h2&gt;

&lt;p&gt;如果是自己敲代码到还好，主要是自己来控制状态和时间，如果碰上了领导开会，特别是还需要自己发言的时候，那就很酸爽。&lt;/p&gt;

&lt;p&gt;紧紧的提醒着自己的熊猫眼要保持睁大，但如果领导持续讲话超过20分钟，还是不由自主的进入半仙境状态。&lt;/p&gt;

&lt;p&gt;突然听到领导说，XX，你觉得呢？&lt;/p&gt;

&lt;p&gt;一阵惊醒。&lt;/p&gt;

&lt;p&gt;掐大腿、捏手指、喝咖啡、装做记笔记均无效。&lt;/p&gt;

&lt;p&gt;在互联网公司，中午吃饭的时候，经常可以听到各种此消彼长鼾声。&lt;/p&gt;

&lt;p&gt;你会神奇的发现当人极度困乏的时候，什么姿势都可以睡着，趴着睡的、仰着睡的、靠着沙发睡的、甚至还有站着就睡着的。&lt;/p&gt;

&lt;p&gt;这不是最刺激的，在日本东京甚至出现了睡在街上的职场人。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/aoye02.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;为什么在坚持熬夜&quot;&gt;为什么在坚持熬夜？&lt;/h2&gt;

&lt;p&gt;现实社会忍气吞声蝇营狗苟，在虚拟世界横刀立马快意恩仇。&lt;/p&gt;

&lt;p&gt;王者荣耀、绝境求生、完美世界、梦幻西游、阴阳师、穿越火线….，一系列的网络游戏满足着职场人的精神世界。&lt;/p&gt;

&lt;p&gt;于是腾讯手游员工年终奖72个月，王者荣耀日入过亿等之类的新闻冲刺着我们的眼球。&lt;/p&gt;

&lt;p&gt;熬最晚的夜，吃最野的鸡，敷最贵的面膜。&lt;/p&gt;

&lt;p&gt;这是当代职场人的真实写照。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/aoye03.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;熊猫眼、黑眼圈已经成为了职场人的标配，女生还可以用粉底、眼霜等化妆手段遮掩一下，男生基本都素颜出镜了。&lt;/p&gt;

&lt;p&gt;当看到自己大大的黑眼圈、第二天上演各种疯狂刺激的时候，都会下死决心，再也不熬夜了。&lt;/p&gt;

&lt;p&gt;然而，好不容易下班后回到家洗漱完趟床上时，那着手机或iPad就不自觉的享受起这好不容易属于自己的时间。没啥真正的目的，就是不小心刷了下抖音，追了下美剧，看了几集综艺等等就已到深夜。内心默默的对自己说，再熬最后一晚！最后一晚永远没有到来。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/aoye04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;报复性熬夜的本质是什么&quot;&gt;报复性熬夜的本质是什么？&lt;/h2&gt;

&lt;p&gt;”报复性熬夜”的爽感，其实来自一种“补偿心理”，属于自我防御机制的一种。&lt;/p&gt;

&lt;p&gt;按照个体心理学开创者阿德勒的说法：当人们因生理或心理问题感到受挫，便会不自觉用其他方式（或在其他领域）来弥补这种缺憾、缓解焦虑、减轻内心不安。&lt;/p&gt;

&lt;p&gt;当我们总要花费大量时间用于工作、处理和别人的关系、甚至处理恋爱矛盾时，留给自己一个人的时间便少得可怜——说白了，也就只剩晚上仅有的几个小时。&lt;/p&gt;

&lt;p&gt;为了”补偿“，我们便容易疯狂熬夜，希望通过熬夜弥补这一天的遗憾，对生活表达一种无声的反抗或不满。&lt;/p&gt;

&lt;p&gt;作为一种心理防御机制，寻求“补偿”自然是有好处的：它能成为维持心理平衡的内在动力。&lt;/p&gt;

&lt;h2 id=&quot;最后&quot;&gt;最后&lt;/h2&gt;

&lt;p&gt;每个熬夜的人都知道熬夜伤身体，有时候那怕盯着天花板也要坚持到十二点，在报复性熬夜的独处中获得不自觉的心理慰寄。&lt;/p&gt;

&lt;p&gt;年轻还好，当人至中年，你便会发现健康的重要性，而拥有正常的生活作息状态是健康最基本的硬核保障。&lt;/p&gt;

&lt;p&gt;所以，因不可避免的正事偶尔熬夜还行，当你发现自己陷入在报复性熬夜的状态里时就要好好调整了。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;作者简介&lt;/strong&gt;：纯洁的微笑，&lt;strong&gt;一个有故事的程序员&lt;/strong&gt;。曾在互联网金融，第三方支付公司工作，现为一名自由职业者，和你一起用技术的角度去看这个世界。我的个人微信号 &lt;strong&gt;puresmile2&lt;/strong&gt;，欢迎大家找我聊天，记录你我的故事。&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 18 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/it/2019/06/18/stay-up-late.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/it/2019/06/18/stay-up-late.html</guid>
        
        <category>it</category>
        
        
        <category>it</category>
        
      </item>
    
      <item>
        <title>我的十年程序生涯：建模启航</title>
        <description>&lt;blockquote&gt;
  &lt;p&gt;此文配曲：Sailing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;我是一个有魄力的人&quot;&gt;我是一个有魄力的人！&lt;/h2&gt;

&lt;p&gt;我是一个有魄力的人！&lt;/p&gt;

&lt;p&gt;请大家记住这句话，只有记住这句话，你才能明白我这十年间的选择。&lt;/p&gt;

&lt;p&gt;十年前我还是象牙塔中数学系的一名普通的大三学生。&lt;br /&gt;
六年前我包里揣着3000块钱来北漂。&lt;br /&gt;
三年前我在一家互联网金融公司做到了技术负责人。&lt;br /&gt;
两年前我辞职了，在一家公司做架构师，入职半年后连跳三级，被领导提拔到研发副总，最多管理超过100人。&lt;br /&gt;
现在我是一名自由工作者。&lt;/p&gt;

&lt;p&gt;以上其实只是我的职场生涯，业余时间我还做了一些其它的事情。&lt;/p&gt;

&lt;p&gt;2016年6月，开始在博客园写技术文章，当年即被推荐成为推荐博客，陆续成为其它技术社区博客专家，16年年底文章阅读累计超百万。 &lt;br /&gt;
2017年，在公众号红利期早过的情况下，开通“纯洁的微笑”公众号，2 年后读者关注量超 12 万，综合指数排在原创个人技术号中前十。 &lt;br /&gt;
2018年，尝试在网上写教程，年底成为 Gitchat 专栏销量前三，后面陆续尝试线上演讲、知乎Live、免费视频课程、线下演讲等等，在每个领域去拔草，不为挣钱只为尝试，寻找自己最想做的事情。&lt;br /&gt;
2019年，我也在期待会发生什么。&lt;/p&gt;

&lt;p&gt;你想听听我的故事吗？&lt;/p&gt;

&lt;h2 id=&quot;题外话&quot;&gt;题外话&lt;/h2&gt;

&lt;p&gt;我的个人公众号介绍只有一句：一个有故事的程序员。说这句话不是吹牛逼，是我非常非常喜欢有故事的人，有故事的事，同时发生在我和我身边朋友身上的事情，足足够我写一辈子了。&lt;/p&gt;

&lt;p&gt;生活不是电影，但远比电影更具有戏剧性，更精彩，更荒诞，更不真实，我想用文字记录下这些故事，这些故事就是我的世界。&lt;/p&gt;

&lt;p&gt;年归正传，这次还是先来聊聊我的故事，相信我，绝对精彩！&lt;/p&gt;

&lt;h2 id=&quot;一件事情&quot;&gt;一件事情&lt;/h2&gt;

&lt;p&gt;回顾我们的历史长河会发现，往往在人生的道路上，突然会有一件事影响到我们，从而改变了我们的一生。我就有这么一件事情影响到了我，让我找到了自己最喜欢做的事情，就是做一名程序员去 Coding 这个世界。&lt;/p&gt;

&lt;p&gt;我的这件事情发生在大学时期，参加了全国大学生《数学建模竞赛》。那年，我们小组还得了一个小奖，我把它保留至今。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/life/jianmoshenger.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;我给大家从头讲起。。。&lt;/p&gt;

&lt;h2 id=&quot;一个机会&quot;&gt;一个机会&lt;/h2&gt;

&lt;p&gt;09年那会是我读大三的最后一个学期，和许许多多考研的大军不同，我从来都没有想过我还要继续在学业上有所发展。因为我大学上学家里欠了一屁股的债，所以我对钱极度的渴望，恨不得立刻马上工作，让我的家庭我可怜的母亲可以喘上一口气。&lt;/p&gt;

&lt;p&gt;我大学学的专业是信息与科学，大家不要被这个高大上的名字所迷惑了，基本上和应用数学没有太多的区别，整天就是学各种数列、极限、微积分、空间解析几何等等，还有一本书就是专门证明一毫米之内的世界。一想到学这么多东西和我的就业扯不上半毛钱关系，我就提不起一丝丝的兴趣。&lt;/p&gt;

&lt;p&gt;大学三年通宵网吧、旷课篮球、挂科重考、探索男女之情，慌慌而过，唯一让我感谢自己的就是，喜欢看书的毛病没有变，泡在图书馆看了许许多多的书，中文系的现代文学、经济系的人物传记、艺术系的人体艺术都是我常常涉猎的内容，极大的扩充了我的世界观和人生观。&lt;/p&gt;

&lt;p&gt;大学的碌碌无为加剧了我内心的不甘，耗费了四年火辣辣的青春、还有不知道父母从哪个亲戚借来的学费，我总该学点啥吧！就是那种你感觉浑身哪哪都是劲儿，就是不知道往哪儿使的感觉，我以为我的大学就这样碌碌无为的过去了，终于等到了一个机会。&lt;/p&gt;

&lt;h2 id=&quot;干票大的&quot;&gt;干票大的&lt;/h2&gt;

&lt;p&gt;那年我们学校是抱着干一票大的来准备这件事的，我就喜欢干大的。&lt;/p&gt;

&lt;p&gt;虽然我不怎么喜欢数学，但数学系当时是我们学校的名牌专业，但却被兄弟院校虐了好几年，《数学建模竞赛》从来都没有拿到过国家一等奖。于是09年的时候，学校的重视程度也上来了，在系里抽调了几位有能力的年轻老师组建了一个团队，并且承诺竞赛结束后根据成绩重奖。&lt;/p&gt;

&lt;p&gt;老师的积极性被调动了起来（这个世界看来还是钱顶用），学校开始从数学系、物理系、化学系、计算机系招募学生，那年夏天一共招募了七八十号人。招募过来的人，大家都没有什么建模经验，学校统一安排高强度培训，并且两周做一次模拟竞赛，根据竞赛结果不断进行淘汰，最后真正参赛的人员只有十几个人。&lt;/p&gt;

&lt;p&gt;那时候年轻感觉不到累，整个暑假大家都是泡在实验楼。这也成了我大学生涯中最充实的一段经历，老师从建模算法、编程语言、论文书写、历届考题分析等几个维度不断培训，每培训一段时间就来一次模拟竞赛，然后宣布淘汰名额。这个过程很爽、很累、也很残酷。&lt;/p&gt;

&lt;p&gt;建模竞赛是模拟现实生活中的真实问题，通过一套理论、算法、建立数学模型来解决问题，涉猎的内容非常多。因此需要团队配合来解决，每个建模小组由三个人组成，每个人的分工都不同，有的擅长算法，有的擅长论文书写，有的强在编程实现，相互配合完成整个竞赛。&lt;/p&gt;

&lt;h2 id=&quot;找到喜欢做的事情&quot;&gt;找到喜欢做的事情&lt;/h2&gt;

&lt;p&gt;刚开始培训的时候大家啥都不懂，也不知道自己擅长做什么，模拟竞赛的过程中遇到很多问题，大家都不会，但其实这个并不重要，重要的是你可以学呀。99% 的问题在搜索引擎的加持下都可以解决，所以竞赛对自我学习能力要求极高。另外竞赛是开卷的，你可以利用任何你可以搜索到的资料包括书籍。&lt;/p&gt;

&lt;p&gt;有的杠精可能要说，既然是开卷的是不是就可以抄了，so yong so simple。《数学建模竞赛》强调的是模拟现实解决实际问题，那在现实生活中解决问题当然可以查阅任何资料。但是并不意味着可以抄，第一，你可以想到的，考题老师也可以想到；第二， 建模都是解决现实中的具体问题，这些具体问题当然是搜索不到的。&lt;/p&gt;

&lt;p&gt;我给大家截图看下2018年数学建模的题目，大家看完就可以理解了。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/life/jianmo2018.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;感兴趣可以去这里下载：http://www.mcm.edu.cn/html_cn/block/8579f5fce999cdc896f78bca5d4f8237.html&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;经过一个多月的封闭培训、模拟竞赛，我终于找到了自己擅长做的事情，那就是用编程来解决问题，我喜欢敲打键盘的那种感觉，通过 Coding 实际解决问题简直太酷了。那时候老师推荐使用 MATLAB 来做数据处理，但我个人更喜欢使用 C 语言来编程，也就是在那段时间让我体会到了编程的乐趣，于是心里想终于找到了我喜欢做的事情。&lt;/p&gt;

&lt;h2 id=&quot;疯狂三天&quot;&gt;疯狂三天&lt;/h2&gt;

&lt;p&gt;2009年9月经过3个多月的拼杀，我们十几个人总于迎来了最终的考验，前面提到了我们学校准备今年干票大的，于是把我们整体拉到老校区的招待所里面，好吃好喝伺候，要求只有一个：三天三夜不许出去，完全无干扰的完成竞赛。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2017/life/jianmo.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;2009年竞赛照片，左小角就是我们团队。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;给大家解释一下《数学建模竞赛》规则，试题出来后会给参赛者三天时间，三天后交出一份解决方案的论文，附带程序。所以也会涉及到战术问题，是三天都不睡觉完成竞赛；还是第一天睡觉，第二天第三天不睡觉；每个团队根据情况自行决定。我们是第一天每人睡6小时，第二天轮流睡4小时，第三天通宵。&lt;/p&gt;

&lt;p&gt;每次竞赛会出四道题，小组根据自己的情况来选择，我们当时选择的B组题，解决医院眼科病床的问题。拿到这道题的时候，我们还挺高兴，觉得就是个处理数据的问题，但是做着做着发现并没有那么的简单，同时我们尝试了很多的数学模型，但是结果并不是很理想。&lt;/p&gt;

&lt;p&gt;三个人不断的讨论、争吵，实验数学模型，调整着细小的参数，时间一下就过去了一天，还是没有太多的头绪，脑子都快炸了。这个时候我们组内最小的那个女生（她来自物理系），提出了一个假设，我虽然立刻就否定了她的这个设想，但还是按照她的思路进行了调整，意外的发现找到了解决问题的方法。&lt;/p&gt;

&lt;p&gt;当找到解决方案后，最最重要的一件事情就是要写好论文，因为不论你的模型多么的好，如果不能明白的把它讲清楚，那其实效果就大大打折扣了。写论文我们也会进行分工，有的负责写开头，有的负责写论文的中部，有的专门来写结尾。我就是那个写结尾的人。&lt;/p&gt;

&lt;p&gt;写完之后，再按照竞赛的标准去审稿，一遍一遍不断的去审，改个它罗汉十八次后才到定稿。其实到了最后的那天晚上，不管是人的精神还是体力都已经到达了极限，改着改着我在座位上坐着都能睡着了，被指导老师骂醒之后，爬起来接着改。早上当我检查完所有信息无误后，点击了邮件的发送按钮，拼命三天终于结束。&lt;/p&gt;

&lt;p&gt;过了几个月后，竞赛结果出来了，那年我们学校终于扬眉吐气了一把，获奖数量和质量都突破了历史，拿到了学校的第一个国家一等奖。我们小组得了一个省级的二等奖，虽然成绩并不是特别好，但我们知足了，三个月的辛苦努力并没有白费。&lt;/p&gt;

&lt;h2 id=&quot;后来&quot;&gt;后来&lt;/h2&gt;

&lt;p&gt;2010年毕业的那年，我将曾经练习过的一个竞赛题目作为毕业论文进行了提交，没想到毕业时还成为了学校的优秀毕业论文。也正是因为数学建模竞赛的这段经历，让我和编程结缘，为我以后走向编程的这条道路，埋下了伏笔。&lt;/p&gt;

&lt;p&gt;大家以为我就这样直接走向了程序员这个职业吗？当时我也是这样认为的，直到我碰了一鼻子灰，走了很多的弯路，甚至还南下去了深圳流水线工厂工作了几个月，才让我真正的下了决心走上编程这条路。&lt;/p&gt;

&lt;p&gt;当然了我找工作的这段经历其实更精彩，我会在后面的文章中慢慢来告诉大家。限于篇幅这篇文章就写到这里，我计划用连载的方式来记录我渡过的十年程序员生涯，预计会写下十万字，所以故事才刚刚开始。。。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;注：前两天我在文章&lt;a href=&quot;https://mp.weixin.qq.com/s/euFfCBObzh_eJhTQXOFOsw&quot;&gt;《我的前六年程序生涯》&lt;/a&gt;做了个舆情调查，看到大家的热情后我写下此文。&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;因为这段时间比较忙，可能并不会即时连载完，请大家见谅：&amp;gt;&lt;/em&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;作者简介&lt;/strong&gt;：纯洁的微笑，&lt;strong&gt;一个有故事的程序员&lt;/strong&gt;。曾在互联网金融，第三方支付公司工作，现为一名自由职业者，和你一起用技术的角度去看这个世界。我的个人微信号 &lt;strong&gt;puresmile2&lt;/strong&gt;，欢迎大家找我聊天，记录你我的故事。&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 12 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/life/2019/06/12/ten-years-of-program-career.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/life/2019/06/12/ten-years-of-program-career.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>你为什么有那么多时间写博客？</title>
        <description>&lt;p&gt;从2016年开始有规律的写博客以来，陆陆续续收到一些读者类似的问题：比如作为技术负责人，你为什么有那么多时间写博客；博主，你是每天都写博客写到很晚吗；可以聊聊你是如何做时间管理的吗？感觉输出的频率很高呀。&lt;/p&gt;

&lt;p&gt;既然大家这么好奇，那今天就聊聊吧。&lt;/p&gt;

&lt;h2 id=&quot;01-平时多积累&quot;&gt;01 平时多积累&lt;/h2&gt;

&lt;p&gt;先说一个事实，写技术文章真的挺耗时的，有时候写一篇技术文章需要8小时，深度一点的文章需要几天都很正常，但有的时候却只需要几个小时，这是为什么呢？&lt;/p&gt;

&lt;p&gt;先抛一个截图，这是我在2017年的时候在博客园给一个读者的回复：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/write_time.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;其实上图已经说明一点原因，只要我们平时多积累，写文章的时候就可以节省很多时间。&lt;/p&gt;

&lt;p&gt;比如我刚开始写 Spring Boot/Cloud 的时候，是因为我们公司需要大量使用 Spring Boot/Cloud 技术，在我们实践的过程中，我会不时把使用的过程、关键点、思考记录到云笔记中，写文章的时候只需要将这些内容整理出来即可。&lt;/p&gt;

&lt;p&gt;所以我一直鼓励写技术博客的朋友，尽量多写对工作有帮助的内容，或者工作中实践的成果，一方面方便我们积累素材，一方面更好的促进了工作。&lt;/p&gt;

&lt;p&gt;这样对个人、对公司都有好处，大家可以看我博客中 90% 以上的技术文章都是来自于工作，不然我也没有那么多时间重新研究一个新技术，然后再整理、学习发布出来。&lt;/p&gt;

&lt;p&gt;不过前提条件是，公司必须有良好的技术文化，热衷于使用最新的技术解决问题。不过我呆过的两家公司，基本上我都是技术管理岗位，所以技术氛围来讲问题不大，另外公司也一直鼓励大家大胆采用新的技术。&lt;/p&gt;

&lt;h2 id=&quot;02-专注才能高效&quot;&gt;02 专注才能高效&lt;/h2&gt;

&lt;p&gt;我不知道其它的技术管理者是一个什么样的情况，在我做技术管理的时候，白天的时间几乎不可能是自己的，早上10：00到下午6：00之间，会有各种各样的事情来打断你的工作节奏。&lt;/p&gt;

&lt;p&gt;比如：某某部门叫你一起开个会；某个程序员遇到了一个技术问题；生产突然出现一些不稳定的报警；业务部门有个问题希望帮忙推进一下；有几个技术经理的面试需要准备一下等等。几乎不可能有自己连续的时间。&lt;/p&gt;

&lt;p&gt;所以在这个时间段里面，如果你搞编程或者写作，几乎都是效率非常低下，大家可以想象一下，你正全身心的在思考一个问题的时候，突然旁边有一个人说：要不要办一张信用卡？这种感觉就是真的想给丫的一拳。&lt;/p&gt;

&lt;p&gt;如果和别的业务部门坐在一起的话，那更酸爽。各种大声讨论问题的声音、打电话的声音、吃东西的声音、敲击键盘的声音。这也是办公室很多程序员上班都需要带一个耳机的原因。&lt;/p&gt;

&lt;p&gt;所以对于我来讲，一般有两个时间段可以用来写作或者编程，我之前的公司早上9：00上班，我一般早上8：00 左右就会到公司，8：00-10：00 中间有两个小时，下午6点左右下班，我一般晚上 9 点左右回家，这样会有三个小时的时间。&lt;/p&gt;

&lt;p&gt;专注的2-3个小时的时间，可以干很多事情，如果提前准备好资料写一篇技术文章足以。如果日常工作中有需要排查定位问题的事情，我一般也会在这个时间段来处理。&lt;/p&gt;

&lt;p&gt;特别建议早上上班先不要处理邮件，回复邮件太费时间了。一般情况下我一天会收到一百多封邮件，有十几封邮件需要回复，回复的过程还需要找相关人员确认，稍不注意几个小时就过去了。&lt;/p&gt;

&lt;p&gt;所以在做日常时间管理时，给自己留一段连续的时间去专注的做一件事情，可以起到事半功倍的效果。&lt;/p&gt;

&lt;h2 id=&quot;03-热爱才可以坚持&quot;&gt;03 热爱才可以坚持&lt;/h2&gt;

&lt;p&gt;好多人在问我怎么有那么多时间写文章的时候，其实我的第一冲动是反问，虽然这确实不太礼貌。&lt;/p&gt;

&lt;p&gt;比如：&lt;/p&gt;

&lt;p&gt;你怎么有那么多时间刷抖音？&lt;/p&gt;

&lt;p&gt;你怎么有那么多时间玩游戏？&lt;/p&gt;

&lt;p&gt;你怎么有那么多时间追剧？&lt;/p&gt;

&lt;p&gt;我相信不管再忙，肯定有人会在业余时间玩这些，你反问他为什么有时间玩的时候，大多数会说，我喜欢呀，为了放松呀。工作了一天，难道还不应该放松一下！对，就是这样。&lt;/p&gt;

&lt;p&gt;我写文章、写博客其实也是这个道理。&lt;/p&gt;

&lt;p&gt;我其实也喜欢刷抖音、喜欢玩游戏、喜欢追各种电视剧。但我更喜欢玩博客，写文章的喜欢程度远远高于刷抖音、玩游戏，所以对我来讲，写博客就是放松、和读者在文章下面互动就是娱乐，看到文章被很多人看就会有成就感，所以写博客带给我的愉悦感远超于其它，因此慢慢对那些兴趣淡了一些。&lt;/p&gt;

&lt;h2 id=&quot;04-忽略生活琐事&quot;&gt;04 忽略生活琐事&lt;/h2&gt;

&lt;p&gt;有时候身边的朋友或者我自己都会觉得，生活好像有点单调得过分，周内天天加班忙工作，业余时间还需要写文章、写课程，除过看电影之外几乎没有其它业余生活了。&lt;/p&gt;

&lt;p&gt;并且我其它可以省的时间也都给省了。&lt;/p&gt;

&lt;p&gt;几乎省略掉了应酬、旅行、购物等所需要的时间，就连喜欢的衣服，我都可以一次买上很多件，比如有一个黑色短袖，我家里几乎买了十几件，同事可能会看到我天天穿同一件衣服，不知道的朋友还以为我不换洗。&lt;/p&gt;

&lt;p&gt;生活中的相关琐事几乎都让老婆给处理了，所以在这方面我操心的也不多。省下时间可以专心处理工作和写文章，专注于忙自己喜欢做的事情。&lt;/p&gt;

&lt;p&gt;所以大家问我的时间是哪里来的，其实就是这样节省出来，不喜欢的事情全部忽略掉，省出来的时间就可以专注干自己喜欢做的事情了。&lt;/p&gt;

&lt;h2 id=&quot;05-结尾&quot;&gt;05 结尾&lt;/h2&gt;

&lt;p&gt;这就是我为什么有那么多时间写博客的原因，看完不知道大家有什么样的感想，欢迎给我留言，因为互动就是我的休闲方式之一：）&lt;/p&gt;

&lt;p&gt;另外，持续坚持做一件事情，真的很爽。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;作者简介&lt;/strong&gt;：纯洁的微笑，&lt;strong&gt;一个有故事的程序员&lt;/strong&gt;。曾在互联网金融，第三方支付公司工作，现为一名自由职业者，和你一起用技术的角度去看这个世界。我的个人微信号 &lt;strong&gt;puresmile2&lt;/strong&gt;，欢迎大家找我聊天，记录你我的故事。&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 10 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/it/2019/06/10/write-blog.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/it/2019/06/10/write-blog.html</guid>
        
        <category>it</category>
        
        
        <category>it</category>
        
      </item>
    
      <item>
        <title>技术总监到底要不要写代码？</title>
        <description>&lt;p&gt;这是一个非常敏感的话题，每次谈论到技术总监要不要写代码的时候，总会引起一片争论。&lt;/p&gt;

&lt;p&gt;有的程序员说技术总监如果不写代码怎么能领导好技术团队；有的说技术总监还需要写代码？如果技术总监都需要写代码的话，那技术团队有多操心呐。正反观点看起来都蛮有道理的，我也试着和大家聊聊这个话题。&lt;/p&gt;

&lt;p&gt;我感觉自己还是蛮有资格来讨论这个话题的，我有过30人左右技术团队负责人的经历、也有过管理超100多人研发副总的经验，也经历了从一个程序员到一个技术管理者身份转变的历程，所以方便从各个角度来看待这个问题。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;任何问题抛开背景来讨论都是耍流氓。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;比如下面这个图片，正着看的时候是一个老太太，如果我们把手机倒过来看的话是一个小姑娘。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/it/notgirl.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;这就是我们看待问题的角度不同，所展现给我们的视角也是不同的。&lt;/p&gt;

&lt;p&gt;技术总监要不要写代码这个话题，其实也是需要看公司是什么样的背景、处于什么样的阶段、技术总监管理人员的规模来定。&lt;/p&gt;

&lt;p&gt;另外技术总监只是一个统称，很多公司还会分部门技术总监、研发中心技术总监等，不同级别也需要不同的讨论。&lt;/p&gt;

&lt;p&gt;首选探讨一下什么样的技术总监需要写代码，这里的&lt;strong&gt;写代码&lt;/strong&gt;指的是参与到具体的编码实现。个人认为有以下 3 种情况：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;01 技术驱动型的技术总监需要写代码&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;很多互联网公司产品，完全是依赖技术来构建的，公司的命脉都是技术，那么这个技术总监就一定要参与到核心代码的编写中。&lt;/p&gt;

&lt;p&gt;比如我一直比较关注的创业公司 PingCAP ，他们公司的主要产品是 TIDB，一个开源分布式关系型数据库。我们知道开发一个高效的数据库是一个技术含量很高的事情，那么这种类型公司的技术总监一定会参与到编码中。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;02 初创技术团队的技术总监需要写代码&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;一个创业公司的初创团队，可能公司的技术体系、技术路线、技术文化完全都没有搭建起来的时候，必定需要技术总监参与到一线，一步步将这些内容搭建起来。&lt;/p&gt;

&lt;p&gt;同时几乎所有的创业公司在刚开始的时候，就技术的需要程度是相当紧迫的，所以这个时期的技术总监，一定要亲自参与其中，确保核心系统功能不会出现问题。&lt;/p&gt;

&lt;p&gt;有一个很著名的反例：&lt;/p&gt;

&lt;p&gt;2012年的时候程维为了滴滴产品快速上线，花了 8 万找了一个外包做了一个 APP，开发出来不仅体验差，还出现了耗费流量高、耗电、听不到订单、定位不准的问题，差点直接将滴滴搞死。后来张博的加盟才逐步解决了这些问题，产品稳定后才赢得了滴滴后期的大发展。&lt;/p&gt;

&lt;p&gt;国内外的互联网公司都存在创业早期过分注重技术，认为技术可以搞定一切；创业成熟期后又过分轻视技术，导致后期问题频发。所以对技术的重视程度应长期保持一致。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;03 管理十几人以下的技术总监需要写代码&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;管理十几人的技术总监，个人建议总体还是需要参与到核心代码的梳理中，需要对系统的各个特性了然于胸，知道系统很可能出现的问题点，在出现问题的时候可以快速定位解决。&lt;/p&gt;

&lt;p&gt;在这个规模的时候，如果技术总监不参与到核心代码的工作中，其实是很难掌控整个系统的稳定性，出现问题的时候需要依赖于团队中的核心骨干来解决。&lt;/p&gt;

&lt;p&gt;当然肯定不是需要参与大量的编码工作，可以在架构设计、核心代码评审、代码优化层面来多做工作。如果这个阶段的技术总监完全脱离代码编写工作，容易导致团队技术失控。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;国内技术总监现状&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在国内，大多数技术总监其实是没有参与到具体的代码编写中的。一方面国内很少有上面所说的纯粹技术驱动型的公司，大多数互联网公司对技术的重视程度仍然很不够，认为技术只是服务于公司商业价值，从而不断的压迫技术团队。&lt;/p&gt;

&lt;p&gt;特别是老板如果对技术一点都不了解的话，那对技术团队就是一个大灾难，可悲的是大多数企业都是这个情况，这个时候技术总监的很大一部分精力，就变成了如何向老板合理的解释清楚技术团队的工作情况，不是封闭几个月或者压迫一下就可以搞出一个完美的系统。&lt;/p&gt;

&lt;p&gt;国内的大多数技术总监都被迫陷入很多的行政事务中，比如我曾经呆过的第三方支付公司，各种监管机构每个月都会有各种检查，另外还需要处理各种外部需要文档、行政事务、外部谈判、公司会议等各种各样的杂事中。&lt;/p&gt;

&lt;p&gt;当然这些都不是最可怕的，最可怕的是如果参与到公司的办公室政治，那很多事情就已经偏移了事务的本质，不是这个事情你要不要做好的问题，还需要考虑很多其它的因素，类似的事情最容易让人心累，耗费巨大的精力。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;技术总监到底需要干些什么？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;首先强调一下技术总监是一个管理岗位，所以它的管理职责远远大于编码职责，技术总监的工作更应该关注宏观、全局性的问题。&lt;/p&gt;

&lt;p&gt;如果一个技术总监自己代码写得贼溜，团队内小伙伴代码写得一片烂渣渣，那他绝对不是一个合格的技术总监。&lt;/p&gt;

&lt;p&gt;所以技术总监不是让自己编码很爽，技术总监的工作更应该是让团队内的成员编码很爽。让团队内的小伙伴编码很爽，其实就有很多的工作要来做。&lt;/p&gt;

&lt;p&gt;比如构建一个有技术氛围的团队，做有前瞻性的技术选型，在业务设计、架构设计、系统架构上下狠功夫。任何团队内不太爽的工作都是技术总监的责任，比如需求变动太频繁、技术选型不合理导致问题频发，团队没有定期的技术分享。&lt;/p&gt;

&lt;p&gt;技术总监需要负责技术管理体系的建设和维护，对行业技术发展趋势和管理现状具有准确的判断，从技术层面上协助决策层实现战略目标。所以必须综合实力很强，既要懂技术，也要懂管理，而且职位越高，所需要的知识面要越广。&lt;/p&gt;

&lt;p&gt;用通俗易懂的话来讲：&lt;strong&gt;技术总监的工作就是对内就是让团队干活很爽，对外要拼命接住老板吹过的牛逼。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;那么我们最后来探讨一个话题：除过上面三种情况，工作中写代码的技术总监就是好的技术总监，不写代码的技术总监就不是好的技术总监吗？&lt;/p&gt;

&lt;p&gt;答案留给大家，请在评论区告诉我。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;作者简介&lt;/strong&gt;：纯洁的微笑，&lt;strong&gt;一个有故事的程序员&lt;/strong&gt;。曾在互联网金融，第三方支付公司工作，现为一名自由职业者，和你一起用技术的角度去看这个世界。我的个人微信号 &lt;strong&gt;puresmile2&lt;/strong&gt;，欢迎大家找我聊天，记录你我的故事。&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/it/2019/06/04/tech-leader.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/it/2019/06/04/tech-leader.html</guid>
        
        <category>it</category>
        
        
        <category>it</category>
        
      </item>
    
      <item>
        <title>Spring Boot 为什么这么火？</title>
        <description>&lt;p&gt;没错 Spring Boot 越来越火了，而且火的超过了我的预期，作为一名行走一线的 Java 程序员，你可能在各个方面感受到了 Spring Boot 的火。&lt;/p&gt;

&lt;h2 id=&quot;spring-boot-的火&quot;&gt;Spring Boot 的火&lt;/h2&gt;

&lt;p&gt;技术社区 Spring Boot 的文章越来越多；Spring Boot 相关的图文、视频课程越来越多；使用 Spring Boot 的互联网公司越来越多；现在出去面试 Java 工程师， Spring Boot 已经成了必问的内容。&lt;/p&gt;

&lt;p&gt;一切都在证明，Spring Boot 已经成为了 Java 程序员必备的技能。并且可以预见的是未来 Spring Boot 的发展还会更好。&lt;/p&gt;

&lt;p&gt;那我个人是如何感受到这一点呢？&lt;/p&gt;

&lt;p&gt;三年前写的一个 Spring Boot 入门的文章，单篇文章阅读量超过百万！在百度指数上搜索 Spring Boot 关键字，可以看到一个气势如虹的增长曲线。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/springboot/spring-boot-hot-01.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2016年，在 Github 上写了一个 Spring Boot 的开源项目，现在竟有 15000+ Star，6600 + Fork ，在 Github 上 Star 排名今次于 Spring Boot 官方。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/springboot/spring-boot-hot-02.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;项目名称：spring-boot-examples&lt;/p&gt;

&lt;p&gt;项目地址：&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/ityouknow/spring-boot-examples&quot;&gt;https://github.com/ityouknow/spring-boot-examples&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;注：这个开源项目还有很多国际友人参与贡献。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Spring 官方也特别特别重视 Spring Boot ，直接将 Spring Boot 摆放到官网第一的位置上来。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/springboot/spring-boot-hot-03.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;spring-boot-为什么这么火&quot;&gt;Spring Boot 为什么这么火&lt;/h2&gt;

&lt;p&gt;作为一个学习使用三年多 Spring Boot 的程序员，我来试着从我的角度来给大家聊聊 Spring Boot 为什么这么火，可以在短短几年内给 Java 程序员带来这么大的变革。&lt;/p&gt;

&lt;h3 id=&quot;从设计理念谈起&quot;&gt;从设计理念谈起&lt;/h3&gt;

&lt;p&gt;要说到 Spring Boot 为什么这么火，就必须得聊聊 Spring Boot 的设计理念，正是此设计理念奠基了Spring Boot 开发设计的基准，让 Spring Boot 走到了今天。&lt;/p&gt;

&lt;p&gt;那 Spring Boot 的设计理念是什么呢？它就是&lt;strong&gt;约定优于配置（convention over configuration）。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;约定优于配置并不是一个新概念，它是一种软件设计范式，很早就应用在软件架构设计中，它的作用是减少软件开发人员需做决定的数量，获得简单的好处，而又不失灵活性。&lt;/p&gt;

&lt;p&gt;只是 Spring Boot 让这个设计理念上升了一个层次，Spring Boot 不止在某个功能上实现此设计理念，而是整个软件体系都在践行约定优于配置。&lt;/p&gt;

&lt;p&gt;Spring Boot 体系将约定优于配置的思想展现得淋淋尽致，小到配置文件，中间件的默认配置，大到内置容器、生态中的各种 Starters 无不遵循此设计规则。&lt;/p&gt;

&lt;p&gt;Spring Boot Jpa 80% 大部分查询功能都以约定的方式给与提供，另外 20% 复杂的场景，提供另外的技术手段来解决，典型的约定优于配置的实现。&lt;/p&gt;

&lt;p&gt;Spring Boot Starter ，在项目启动的时候，根据约定信息对组件进行加载、初始化。因此项目中引入了对于的 Starter 之后，就可以到达开箱即用的效果。&lt;/p&gt;

&lt;p&gt;甚至 Spring Cloud 的设计，也借鉴了约定优于配置的思想，很多组件都是在启动时，默认提供了其相关的功能，可以让我们的使用到达很少配置或者零配置。&lt;/p&gt;

&lt;h3 id=&quot;spring-boot-的-starter-机制&quot;&gt;Spring Boot 的 Starter 机制&lt;/h3&gt;

&lt;p&gt;Spring Boot Starter  是 Spring Boot 的 星辰大海。&lt;/p&gt;

&lt;p&gt;正是因为丰富的 Spring Boot Starter  ，让 Spring Boot 征服了使用各个开源软件的开发者，只要 Spring Boot Starter 指向哪个开源软件，就会让某个开源软件变得异常好用。&lt;/p&gt;

&lt;p&gt;这真的是这样，有一种神笔马良的感觉（夸张了一点）。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;那什么是 Spring Boot Starter 呢？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在 Spring Boot 中，Starter 是为快速应用开发提供“一站式服务”的依赖（Dependency）。Starter 使得开发人员在开始编写新的模块时不需要拷贝样板式的配置文件、编写样板式的代码，只需要提供最简单的配置即可开始编程。&lt;/p&gt;

&lt;p&gt;Spring Boot Starter 有两个核心组件：自动配置代码和提供自动配置模块及其它有用的依赖。也就意味着当我们项目中引入某个 Starter ，即拥有了此软件的默认使用能力，除非我们需要特定的配置，一般情况下我仅需要少量的配置或者不配置即可使用组件对应的功能。&lt;/p&gt;

&lt;p&gt;Spring Boot 由众多 Starter 组成，随着版本的推移 Starter 家族成员也与日俱增。在传统 Maven 项目中通常将一些层、组件拆分为模块来管理，以便相互依赖复用，在 Spring Boot 项目中我们则可以创建自定义 Spring Boot Starter 来达成该目的。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spring Boot Starter 统一了使用不同软件的编程体验。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;在没有使用 Spring Boot Starter 之前，我们需要按照每个开源软件的特性，将对应的组件包集成到我们的开发项目中，因为每个组件的设计理念和开发团队都不一致，因此会有很多不同的调用风格在我们的项目中。&lt;/p&gt;

&lt;p&gt;Spring Boot 强大到很多技术社区都主动提供了对应的 Starter 组件，比如 MyBatis 、Apache Camel、Apache CXF 等等。随着 Spring Boot 的发展 Starter 组件会越来越多。&lt;/p&gt;

&lt;p&gt;Spring Boot 非常强大的原因之一就是提供了大量的 Spring Boot Starter ，如此多的“开箱即用” 的依赖模块，让我们在日常开发中“拿来即用”，以便更加快速和高效专注于业务开发。&lt;/p&gt;

&lt;h3 id=&quot;spring-boot-的豪华开发团队&quot;&gt;Spring Boot 的豪华开发团队&lt;/h3&gt;

&lt;p&gt;我们经常会看到在介绍 Spring Boot 的时候有这么一句：Spring Boot 是由 Pivotal 团队提供的全新框架。由此我们得知 Spring Boot 是由 Pivotal 团队所研发，那么 Pivotal 团队到底是一个什么样的团队呢？其实这里的 Pivotal 团队是指 Pivotal 公司。&lt;/p&gt;

&lt;p&gt;Pivotal 公司介绍：致力于“改变世界构造软件的方式（We are transforming how the world builds software）”，提供云原生应用开发 PaaS 平台及服务，帮助企业客户采用敏捷软件开发方法论，从而提高软件开发人员工作效率、减少运维成本，实现数字化转型、IT 创新，并最终实现业务创新。&lt;/p&gt;

&lt;p&gt;Pivotal 公司可谓是大牛云集，公司研发的产品有： Spring 以及衍生框架、缓存中间件 Redis、消息队列框架 RabbitMQ、数据引擎产品 Greenplum，还有 Tomcat、Groovy 里的一些顶级开发者，DevOps 理论的提出者都在这个公司。&lt;/p&gt;

&lt;p&gt;2016 年风靡全球的云原生理念亦是 Pivotal 公司提出，美国硅谷著名的精益化创业书籍的作者 Eric Ries 也加入了 Pivotal公司。Spring Boot 为什么如此的优秀，正是因为背后有这些全球的顶级开发者。&lt;/p&gt;

&lt;p&gt;Pivotal 公司的背后其实是一场商业并购大片，有很多著名的公司在其身后，戴尔、Spring、EMC、VMware 等等，详情大家开源看这篇文章：&lt;a href=&quot;http://www.ityouknow.com/springboot/2019/01/03/spring-pivotal.html&quot;&gt;《是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了》&lt;/a&gt;。&lt;/p&gt;

&lt;h3 id=&quot;有个好干爹&quot;&gt;有个好干爹&lt;/h3&gt;

&lt;p&gt;Spring Boot 的干爹是谁呢？毫无疑问就是 Spring 了。有图为证，看下面：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2019/springboot/spring-boot-hot-04.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Spring Boot 完全依赖 Spring 来开发，发明 Spring Boot 也是为了让大家更好的使用 Spring，而不是消灭 Spring ，所以说没有 Spring 这个干爹，就没有 Spring Boot 。&lt;/p&gt;

&lt;p&gt;当然 Spring Boot 不仅是基于 Spring 开发这么简单，Spring Boot 完全继承了 Spring 干爹的声誉，说实话如果没有 Spring 这个老干爹十多年来打拼下来的天气，哪有 Spring Boot 今天来的风光。&lt;/p&gt;

&lt;p&gt;2002 年的时候， Rod Johnson 可能也没有想到自己开创的一个小开源软件，可以发展到今天这么辉煌的一刻。到了今天，如果一个 Java 程序员说自己不知道 Spring ，那估计会把他当作外星人吧。&lt;/p&gt;

&lt;p&gt;Spirng 当时以 IoC 和 Aop 开始发家，一开始的目标只是想干掉 EJB 这个庞然大物，但是随着时间的发展，Spring 开始了一路的逆袭之路，在2010年的时候 Spring 还是 SSH 三大框架之一，到了今天 Spring 要说自己是老二，还这没有人敢说自己是第一。&lt;/p&gt;

&lt;p&gt;正是因为 Spring 在 Java 社区中有如此强大的影响力，所以在 Spring Boot 一出生的时候，就受到了广大社区爱好者的关注、使用、写教程、贡献代码、提 Bug。正是因为庞大的开源爱好者，才一起反铺 Spring Boot ，让 Spring Boot 发展这么快，这么好。&lt;/p&gt;

&lt;p&gt;如果你想系统的学习 Spring Boot ，给大家推荐一个 Spring Boot 中文索引，收集了 Spring Boot 中文社区的所有学习资料，地址： &lt;a href=&quot;http://springboot.fun/&quot;&gt;http://springboot.fun/&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;以上便是我个人对 Spring Boot 为什么这么火的一些浅薄见解，大家是怎么认为的呢，欢迎给我留言。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;作者简介&lt;/strong&gt;：纯洁的微笑，&lt;strong&gt;一个有故事的程序员&lt;/strong&gt;。曾在互联网金融，第三方支付公司工作，现为一名自由职业者，和你一起用技术的角度去看这个世界。我的个人微信号 &lt;strong&gt;puresmile2&lt;/strong&gt;，欢迎大家找我聊天，记录你我的故事。&lt;/em&gt;&lt;/p&gt;

</description>
        <pubDate>Mon, 03 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://haoforward.github.io/springboot/2019/06/03/spring-boot-hot.html</link>
        <guid isPermaLink="true">https://haoforward.github.io/springboot/2019/06/03/spring-boot-hot.html</guid>
        
        <category>springboot</category>
        
        
        <category>springboot</category>
        
      </item>
    
  </channel>
</rss>
