<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>楼主的人生</title>
    <description>本站是楼主的人生的博客。内容涵盖生活故事、Java后端技术、Spring Boot、Spring Cloud、微服务架构、大数据演进、高可用架构、中间件使用、系统监控等相关的研究与知识分享。</description>
    <link>http://www.ityouknow.com/</link>
    <atom:link href="http://www.ityouknow.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Fri, 21 Dec 2018 02:13:26 +0000</pubDate>
    <lastBuildDate>Fri, 21 Dec 2018 02:13:26 +0000</lastBuildDate>
    <generator>Jekyll v3.7.4</generator>
    
      <item>
        <title>五叔的女儿</title>
        <description>&lt;p&gt;在北京一个没有雾霾的周日下午，身上洒着冬日下午的一缕余阳，坐在书桌旁为大家继续讲述五叔身后的故事。&lt;/p&gt;

&lt;p&gt;五叔的一生是一个典型的悲剧，但这样的事例在西北农村绝不是个例，多少家庭因为家里的主劳动力遭受意外后导致家庭落败，甚至家破人亡都不夸张。一方面中国农村家庭收入严重依赖主劳动力且收入单一，另一方面社会保障体系不完善导致家庭抗风险系数为零。家里主劳动力一旦伤残，家庭将会遭受毁灭性打击。&lt;/p&gt;

&lt;p&gt;读这篇文章之前，强烈建议大家先阅读&lt;a href=&quot;https://mp.weixin.qq.com/s/B5qFrUhB3Nx8pMe_WxGLoA&quot;&gt;《五叔的一生》&lt;/a&gt;这篇文章，本篇文章是对这篇文章的一个后续补充。&lt;/p&gt;

&lt;p&gt;上篇文章讲到五叔是去接女儿上班的时候发生的意外，那个时候孩子才四五岁，五叔出事半年后嫂子就带着女儿走了，毕竟五叔家里就留下这个一个女儿，大家也都担心这个孩子的去向。后来回村就断断续续的听说嫂子和另外一个人重新组建了家庭，大家想着毕竟有一个完整的家庭也挺好，再后来就没有什么消息了，直到今年国庆节。&lt;/p&gt;

&lt;p&gt;今年国庆为了躲避出行大军早早的回了老家，召集着姐姐、弟弟妹妹在小姨家一起搞烧烤，正在惬意的享受假期的自由时光，村里的一个大妈带着五叔的女儿来到了小姨家，大家大吃一惊，原本印象中的小女孩已经变成了小姑娘，毕竟已经过去了七八年，第一眼全然认不出来了。&lt;/p&gt;

&lt;p&gt;大妈的邻居就是五叔的哥哥一家，五叔的哥哥一家全部出门打工去了，整个屋子空无一人。大妈说下午她正在做饭，她听到隔壁有人不断的在敲门，并且不断的喊着 XX（五叔哥哥的女儿） 的名字，足足敲了十几分钟没有人答应，就一个人站在门外哭。&lt;/p&gt;

&lt;p&gt;大妈听见哭声就过来看了一下，发现一个小姑娘蹲在门上嚎嚎大哭，大妈心想不对呀，这是不是五叔的那个女儿？于是上去就问你找谁，你是不是五叔的那个女儿 xx。这一问才知道这她就是五叔留下来的那个女儿，12岁，不知道一个小女孩怎么隔了这么多年找了回来。&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;县城到我家步行大概有30分钟的路程，开车也就十分钟左右，虽说也不是特别远，但是一个12岁的小女孩，从五叔家走的时候也才5岁左右，隔了七八年愣生生的一个人走了回来，不知道是什么力量支撑着她，姨夫说，娃知道她的家在这里，肯定就会回来的，虽然家里现在空无一人，但这是她出生的地方呀！&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;一个国家是不是真的强大，一定不是出了多少英明领袖，造了多少核弹，有多少外汇储备，在奥运会拿了多少金牌，GDP增长率多高，修建了多少高铁，盖了多少世界大楼。。。这些和处在社会底端的那些人真的没有什么关系。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;一个国家怎样对待弱势群体，是一个社会最柔软的部分，恰恰也是一个社会最强大的部分。&lt;/strong&gt;&lt;/p&gt;

</description>
        <pubDate>Sun, 16 Dec 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/12/16/five-uncle-daughter.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/12/16/five-uncle-daughter.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>springcloud(十五)：服务网关 Spring Cloud GateWay 初级篇</title>
        <description>&lt;p&gt;Spring 官方最终还是按捺不住推出了自己的网关组件：Spring Cloud Gateway ，相比之前我们使用的 Zuul（1.x） 它有哪些优势呢？Zuul（1.x） 基于 Servlet，使用阻塞 API，它不支持任何长连接，如 WebSockets，Spring Cloud Gateway 使用非阻塞 API，支持 WebSockets，支持限流等新特性。&lt;/p&gt;

&lt;h2 id=&quot;spring-cloud-gateway&quot;&gt;Spring Cloud Gateway&lt;/h2&gt;

&lt;p&gt;Spring Cloud Gateway 是 Spring Cloud 的一个全新项目，该项目是基于 Spring 5.0，Spring Boot 2.0 和 Project Reactor 等技术开发的网关，它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。&lt;/p&gt;

&lt;p&gt;Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关，目标是替代 Netflix Zuul，其不仅提供统一的路由方式，并且基于 Filter 链的方式提供了网关基本的功能，例如：安全，监控/指标，和限流。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;相关概念:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Route（路由）：这是网关的基本构建块。它由一个 ID，一个目标 URI，一组断言和一组过滤器定义。如果断言为真，则路由匹配。&lt;/li&gt;
  &lt;li&gt;Predicate（断言）：这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容，例如 headers 或参数。&lt;/li&gt;
  &lt;li&gt;Filter（过滤器）：这是&lt;code class=&quot;highlighter-rouge&quot;&gt;org.springframework.cloud.gateway.filter.GatewayFilter&lt;/code&gt;的实例，我们可以使用它修改请求和响应。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;工作流程：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.ityouknow.com/assets/images/2018/springcloud/spring-cloud-gateway.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;客户端向 Spring Cloud Gateway 发出请求。如果 Gateway Handler Mapping 中找到与请求相匹配的路由，将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑，然后返回。
过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前（“pre”）或之后（“post”）执行业务逻辑。&lt;/p&gt;

&lt;p&gt;Spring Cloud Gateway 的特征：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;基于 Spring Framework 5，Project Reactor 和 Spring Boot 2.0&lt;/li&gt;
  &lt;li&gt;动态路由&lt;/li&gt;
  &lt;li&gt;Predicates 和 Filters 作用于特定路由&lt;/li&gt;
  &lt;li&gt;集成 Hystrix 断路器&lt;/li&gt;
  &lt;li&gt;集成 Spring Cloud DiscoveryClient&lt;/li&gt;
  &lt;li&gt;易于编写的 Predicates 和 Filters&lt;/li&gt;
  &lt;li&gt;限流&lt;/li&gt;
  &lt;li&gt;路径重写&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;快速上手&quot;&gt;快速上手&lt;/h2&gt;

&lt;p&gt;Spring Cloud Gateway 网关路由有两种配置方式：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;在配置文件 yml 中配置&lt;/li&gt;
  &lt;li&gt;通过&lt;code class=&quot;highlighter-rouge&quot;&gt;@Bean&lt;/code&gt;自定义 RouteLocator，在启动主类 Application 中配置&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这两种方式是等价的，建议使用 yml 方式进配置。&lt;/p&gt;

&lt;p&gt;使用 Spring Cloud Finchley 版本，Finchley 版本依赖于 Spring Boot 2.0.6.RELEASE。&lt;/p&gt;

&lt;div class=&quot;language-xml 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;nt&quot;&gt;&amp;lt;parent&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-parent&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.0.6.RELEASE&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;relativePath/&amp;gt;&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- lookup parent from repository --&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/parent&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependencyManagement&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.cloud&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-cloud-dependencies&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;Finchley.SR2&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class=&quot;nt&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
			&lt;span class=&quot;nt&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;import&lt;span class=&quot;nt&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
		&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependencyManagement&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;经测试 Finchley.RELEASE 有 bug 多次请求会报空指针异常，SR2 是 Spring Cloud 的最新版本。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;添加项目需要使用的依赖包&lt;/p&gt;

&lt;div class=&quot;language-xml 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;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.cloud&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-cloud-starter-gateway&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Spring Cloud Gateway 是使用 netty+webflux 实现因此不需要再引入 web 模块。&lt;/p&gt;

&lt;p&gt;我们先来测试一个最简单的请求转发。&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;server:
  port: 8080
spring:
  cloud:
    gateway:
      routes:
      - id: neo_route
        uri: http://www.ityouknow.com
        predicates:
        - Path=/spring-cloud
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;各字段含义如下：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;id：我们自定义的路由 ID，保持唯一&lt;/li&gt;
  &lt;li&gt;uri：目标服务地址&lt;/li&gt;
  &lt;li&gt;predicates：路由条件，Predicate 接受一个输入参数，返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑（比如：与，或，非）。&lt;/li&gt;
  &lt;li&gt;filters：过滤规则，本示例暂时没用。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上面这段配置的意思是，配置了一个 id 为 neo_route 的路由规则，当访问地址 &lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost:8080/spring-cloud&lt;/code&gt;时会自动转发到地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://www.ityouknow.com/spring-cloud&lt;/code&gt;。配置完成启动项目即可在浏览器访问进行测试，当我们访问地址&lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost:8080/spring-cloud&lt;/code&gt; 时会展示页面展示如下：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.ityouknow.com/assets/images/2018/springcloud/spring-cloud-gateway1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;证明页面转发成功。&lt;/p&gt;

&lt;p&gt;转发功能同样可以通过代码来实现，我们可以在启动类 GateWayApplication 中添加方法 &lt;code class=&quot;highlighter-rouge&quot;&gt;customRouteLocator()&lt;/code&gt; 来定制转发规则。&lt;/p&gt;

&lt;div class=&quot;language-java 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;nd&quot;&gt;@SpringBootApplication&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;GateWayApplication&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;

	&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;SpringApplication&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GateWayApplication&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

	&lt;span class=&quot;nd&quot;&gt;@Bean&lt;/span&gt;
	&lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RouteLocator&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;customRouteLocator&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RouteLocatorBuilder&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;builder&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
				&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;route&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;path_route&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;/about&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
						&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://ityouknow.com&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;
				&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
	&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;上面配置了一个 id 为 path_route 的路由，当访问地址&lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost:8080/about&lt;/code&gt;时会自动转发到地址：&lt;code class=&quot;highlighter-rouge&quot;&gt;http://www.ityouknow.com/about&lt;/code&gt;和上面的转发效果一样，只是这里转发的是以&lt;code class=&quot;highlighter-rouge&quot;&gt;项目地址/about&lt;/code&gt;格式的请求地址。&lt;/p&gt;

&lt;p&gt;上面两个示例中 uri 都是指向了我的个人网站，在实际项目使用中可以将 uri 指向对外提供服务的项目地址，统一对外输出接口。&lt;/p&gt;

&lt;p&gt;以上便是 Spring Cloud Gateway 最简单的两个请求示例，Spring Cloud Gateway 还有更多实用的功能接下来我们一一介绍。&lt;/p&gt;

&lt;h2 id=&quot;路由规则&quot;&gt;路由规则&lt;/h2&gt;

&lt;p&gt;Spring Cloud Gateway 的功能很强大，我们仅仅通过 Predicates 的设计就可以看出来，前面我们只是使用了 predicates 进行了简单的条件匹配，其实 Spring Cloud Gataway 帮我们内置了很多 Predicates 功能。&lt;/p&gt;

&lt;p&gt;Spring Cloud Gateway 是通过 Spring WebFlux 的 &lt;code class=&quot;highlighter-rouge&quot;&gt;HandlerMapping&lt;/code&gt; 做为底层支持来匹配到转发路由，Spring Cloud Gateway 内置了很多 Predicates 工厂，这些 Predicates 工厂通过不同的 HTTP 请求参数来匹配，多个 Predicates 工厂可以组合使用。&lt;/p&gt;

&lt;h3 id=&quot;predicate-介绍&quot;&gt;Predicate 介绍&lt;/h3&gt;

&lt;p&gt;Predicate 来源于 Java 8，是 Java 8 中引入的一个函数，Predicate 接受一个输入参数，返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑（比如：与，或，非）。可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。&lt;/p&gt;

&lt;p&gt;在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性实现了各种路由匹配规则，有通过 Header、请求参数等不同的条件来进行作为条件匹配到对应的路由。网上有一张图总结了 Spring Cloud 内置的几种 Predicate 的实现。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.ityouknow.com/assets/images/2018/springcloud/spring-cloud-gateway3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;说白了 Predicate 就是为了实现一组匹配规则，方便让请求过来找到对应的 Route 进行处理，接下来我们接下 Spring Cloud GateWay 内置几种 Predicate 的使用。&lt;/p&gt;

&lt;h3 id=&quot;通过时间匹配&quot;&gt;通过时间匹配&lt;/h3&gt;

&lt;p&gt;Predicate 支持设置一个时间，在请求进行转发的时候，可以通过判断在这个时间之前或者之后进行转发。比如我们现在设置只有在2019年1月1日才会转发到我的网站，在这之前不进行转发，我就可以这样配置：&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
       - id: time_route
        uri: http://ityouknow.com
        predicates:
         - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Spring 是通过 ZonedDateTime 来对时间进行的对比，ZonedDateTime  是 Java 8 中日期时间功能里，用于表示带时区的日期与时间信息的类，ZonedDateTime 支持通过时区来设置时间，中国的时区是：&lt;code class=&quot;highlighter-rouge&quot;&gt;Asia/Shanghai&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;After Route Predicate 是指在这个时间之后的请求都转发到目标地址。上面的示例是指，请求时间在 2018年1月20日6点6分6秒之后的所有请求都转发到地址&lt;code class=&quot;highlighter-rouge&quot;&gt;http://ityouknow.com&lt;/code&gt;。&lt;code class=&quot;highlighter-rouge&quot;&gt;+08:00&lt;/code&gt;是指时间和UTC时间相差八个小时，时间地区为&lt;code class=&quot;highlighter-rouge&quot;&gt;Asia/Shanghai&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;添加完路由规则之后，访问地址&lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost:8080&lt;/code&gt;会自动转发到&lt;code class=&quot;highlighter-rouge&quot;&gt;http://ityouknow.com&lt;/code&gt;。&lt;/p&gt;

&lt;p&gt;Before Route Predicate 刚好相反，在某个时间之前的请求的请求都进行转发。我们把上面路由规则中的 After 改为 Before，如下：&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
       - id: after_route
        uri: http://ityouknow.com
        predicates:
         - Before=2018-01-20T06:06:06+08:00[Asia/Shanghai]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;就表示在这个时间之前可以进行路由，在这时间之后停止路由，修改完之后重启项目再次访问地址&lt;code class=&quot;highlighter-rouge&quot;&gt;http://localhost:8080&lt;/code&gt;，页面会报 404 没有找到地址。&lt;/p&gt;

&lt;p&gt;除过在时间之前或者之后外，Gateway 还支持限制路由请求在某一个时间段范围内，可以使用 Between Route Predicate 来实现。&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
       - id: after_route
        uri: http://ityouknow.com
        predicates:
         - Between=2018-01-20T06:06:06+08:00[Asia/Shanghai], 2019-01-20T06:06:06+08:00[Asia/Shanghai]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样设置就意味着在这个时间段内可以匹配到此路由，超过这个时间段范围则不会进行匹配。通过时间匹配路由的功能很酷，可以用在限时抢购的一些场景中。&lt;/p&gt;

&lt;h3 id=&quot;通过-cookie-匹配&quot;&gt;通过 Cookie 匹配&lt;/h3&gt;

&lt;p&gt;Cookie Route Predicate 可以接收两个参数，一个是 Cookie name ,一个是正则表达式，路由规则会通过获取对应的  Cookie name 值和正则表达式去匹配，如果匹配上就会执行路由，如果没有匹配上则不执行。&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
  		 - id: cookie_route
              uri: http://ityouknow.com
              predicates:
              - Cookie=ityouknow, kee.e
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;使用 curl 测试，命令行输入:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://localhost:8080 --cookie &quot;ityouknow=kee.e&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;则会返回页面代码，如果去掉&lt;code class=&quot;highlighter-rouge&quot;&gt;--cookie &quot;ityouknow=kee.e&quot;&lt;/code&gt;，后台汇报 404 错误。&lt;/p&gt;

&lt;h3 id=&quot;通过-header-属性匹配&quot;&gt;通过 Header 属性匹配&lt;/h3&gt;

&lt;p&gt;Header Route Predicate 和 Cookie Route Predicate 一样，也是接收 2 个参数，一个 header 中属性名称和一个正则表达式，这个属性值和正则表达式匹配则执行。&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: http://ityouknow.com
        predicates:
        - Header=X-Request-Id, \d+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;使用 curl 测试，命令行输入:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://localhost:8080  -H &quot;X-Request-Id:666666&quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;则返回页面代码证明匹配成功。将参数&lt;code class=&quot;highlighter-rouge&quot;&gt;-H &quot;X-Request-Id:666666&quot;&lt;/code&gt;改为&lt;code class=&quot;highlighter-rouge&quot;&gt;-H &quot;X-Request-Id:neo&quot;&lt;/code&gt;再次执行时返回404证明没有匹配。&lt;/p&gt;

&lt;h3 id=&quot;通过-host-匹配&quot;&gt;通过 Host 匹配&lt;/h3&gt;

&lt;p&gt;Host Route Predicate 接收一组参数，一组匹配的域名列表，这个模板是一个 ant 分隔的模板，用&lt;code class=&quot;highlighter-rouge&quot;&gt;.&lt;/code&gt;号作为分隔符。它通过参数中的主机地址作为匹配规则。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://ityouknow.com
        predicates:
        - Host=**.ityouknow.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;使用 curl 测试，命令行输入:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://localhost:8080  -H &quot;Host: www.ityouknow.com&quot; 
curl http://localhost:8080  -H &quot;Host: md.ityouknow.com&quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;经测试以上两种 host 均可匹配到 host_route 路由，去掉 host 参数则会报 404 错误。&lt;/p&gt;

&lt;h3 id=&quot;通过请求方式匹配&quot;&gt;通过请求方式匹配&lt;/h3&gt;

&lt;p&gt;可以通过是 POST、GET、PUT、DELETE 等不同的请求方式来进行路由。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: http://ityouknow.com
        predicates:
        - Method=GET
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;使用 curl 测试，命令行输入:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# curl 默认是以 GET 的方式去请求
curl http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;测试返回页面代码，证明匹配到路由，我们再以 POST 的方式请求测试。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# curl 默认是以 GET 的方式去请求
curl -X POST http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;返回 404 没有找到，证明没有匹配上路由&lt;/p&gt;

&lt;h3 id=&quot;通过请求路径匹配&quot;&gt;通过请求路径匹配&lt;/h3&gt;

&lt;p&gt;Path Route Predicate 接收一个匹配路径的参数来判断是否走路由。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://ityouknow.com
        predicates:
        - Path=/foo/{segment}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;如果请求路径符合要求，则此路由将匹配，例如：/foo/1 或者 /foo/bar。&lt;/p&gt;

&lt;p&gt;使用 curl 测试，命令行输入:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl http://localhost:8080/foo/1
curl http://localhost:8080/foo/xx
curl http://localhost:8080/boo/xx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;经过测试第一和第二条命令可以正常获取到页面返回值，最后一个命令报404，证明路由是通过指定路由来匹配。&lt;/p&gt;

&lt;h3 id=&quot;通过请求参数匹配&quot;&gt;通过请求参数匹配&lt;/h3&gt;

&lt;p&gt;Query Route Predicate 支持传入两个参数，一个是属性名一个为属性值，属性值可以是正则表达式。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: http://ityouknow.com
        predicates:
        - Query=smile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样配置，只要请求中包含 smile 属性的参数即可匹配路由。&lt;/p&gt;

&lt;p&gt;使用 curl 测试，命令行输入:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl localhost:8080?smile=x&amp;amp;id=2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;经过测试发现只要请求汇总带有 smile 参数即会匹配路由，不带 smile 参数则不会匹配。&lt;/p&gt;

&lt;p&gt;还可以将 Query 的值以键值对的方式进行配置，这样在请求过来时会对属性值和正则进行匹配，匹配上才会走路由。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: http://ityouknow.com
        predicates:
        - Query=keep, pu.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这样只要当请求中包含 keep 属性并且参数值是以 pu 开头的长度为三位的字符串才会进行匹配和路由。&lt;/p&gt;

&lt;p&gt;使用 curl 测试，命令行输入:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl localhost:8080?keep=pub
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;测试可以返回页面代码，将 keep 的属性值改为 pubx 再次访问就会报 404,证明路由需要匹配正则表达式才会进行路由。&lt;/p&gt;

&lt;h3 id=&quot;通过请求-ip-地址进行匹配&quot;&gt;通过请求 ip 地址进行匹配&lt;/h3&gt;

&lt;p&gt;Predicate 也支持通过设置某个 ip 区间号段的请求才会路由，RemoteAddr Route Predicate  接受 cidr 符号(IPv4 或 IPv6 )字符串的列表(最小大小为1)，例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址，16 是子网掩码)。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: http://ityouknow.com
        predicates:
        - RemoteAddr=192.168.1.1/24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;可以将此地址设置为本机的 ip 地址进行测试。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl localhost:8080
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;果请求的远程地址是 192.168.1.10，则此路由将匹配。&lt;/p&gt;

&lt;h3 id=&quot;组合使用&quot;&gt;组合使用&lt;/h3&gt;

&lt;p&gt;上面为了演示各个 Predicate 的使用，我们是单个单个进行配置测试，其实可以将各种 Predicate 组合起来一起使用。&lt;/p&gt;

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

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;spring:
  cloud:
    gateway:
      routes:
       - id: host_foo_path_headers_to_httpbin
        uri: http://ityouknow.com
        predicates:
        - Host=**.foo.org
        - Path=/headers
        - Method=GET
        - Header=X-Request-Id, \d+
        - Query=foo, ba.
        - Query=baz
        - Cookie=chocolate, ch.p
        - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;各种 Predicates 同时存在于同一个路由时，请求必须同时满足所有的条件才被这个路由匹配。&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;一个请求满足多个路由的谓词条件时，请求只会被首个成功匹配的路由转发&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;总结&quot;&gt;总结&lt;/h2&gt;

&lt;p&gt;通过今天的学习发现 Spring Cloud Gateway 使用非常的灵活，可以根据不同的情况来进行路由分发，在实际项目中可以自由组合使用。同时 Spring Cloud Gateway 还有更多很酷的功能，比如 Filter 、熔断和限流等，下次我们继续学习 Spring Cloud Gateway 的高级功能。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ityouknow/spring-cloud-examples&quot;&gt;示例代码-github&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://gitee.com/ityouknow/spring-cloud-examples&quot;&gt;示例代码-码云&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;参考&quot;&gt;参考&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://cloud.spring.io/spring-cloud-gateway/single/spring-cloud-gateway.html&quot;&gt;Spring Cloud Gateway&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://windmt.com/2018/05/07/spring-cloud-13-spring-cloud-gateway-router/&quot;&gt;Spring Cloud Gateway（路由）&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Wed, 12 Dec 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/springcloud/2018/12/12/spring-cloud-gateway.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/springcloud/2018/12/12/spring-cloud-gateway.html</guid>
        
        <category>springcloud</category>
        
        
        <category>springcloud</category>
        
      </item>
    
      <item>
        <title>写年终总结到底有没有意义？</title>
        <description>&lt;p&gt;又到了年末，你的余额不到20天，特别想问大家一句糟心的话：&lt;strong&gt;你的2018年计划完成了吗？&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;能真正每年完成年初计划的人都是勇士，我知道大部分朋友肯定是完不成的，也包括我。当然没有完成的朋友也不用太沮丧，因为年初个人计划往往是一种美好的期望，稍稍会超出我们能力 Hold 的范围，&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;strong&gt;模板雷同到80%以上&lt;/strong&gt;，这样的形式这样的总结真的有意义吗？说实话我都感觉没意思，领导看了能有意思吗？直到多年后（其实也就是一两年后）一个朋友给我们的小群里面发了一份年终总结，说你看这就是咱 xx 公司（当时已经离职）某某的年终总结，看完之后我的想法有点改变，好像真的有人在认真写年终总结，而且还写得真好。&lt;/p&gt;

&lt;p&gt;想起多年前一个前领导给我讲的一段话，他说：你知道吗？写周报是对你们有利的，公司建议大家写周报，但是没有做强制的要求，有的人在做有的人在应付，领导一眼即可看出。其实大领导对每个人的印象并不是那么深，更多是来自于你的直属领导给予你的评判，那么周报其实就成为你和上层领导能够直接交流的途径之一，&lt;strong&gt;让你的领导知道你在忙什么这很重要&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;周报如此，年终总结只会更重要，周报领导层可能偶尔看一下，但年终总结是你的上三层领导大概率都会看到的。特别年终是一个特殊的节点，比如：评选优秀员工、申请加薪等，很多时候这些并不是你的直属领导能够决定的，上层领导对你的印象就至关重要，&lt;strong&gt;年终总结是很好的途径之一&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;大家更关心的是年终总结如何去写？我在上一家公司的时候，对技术团队是这样要求的：强烈不建议到网上下载一个年终总结改改给我，可以不写不提交没有关系，但不能敷衍，年终总结字数不限，形式不限，但请认真回顾你过去一年的工作，认为&lt;strong&gt;它可以代表你过去一年的工作价值即可&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;有的人文笔不好，有的人不擅长总结，这些其实都不要紧，但是如果你是认真的去写，看到的人肯定会有感触，反之如果只是敷衍几句他也会感受到，其实大家都不傻。但不排除，一大部分公司只是把它做成形式化、流程化，反正任何事情一旦上升到强制、或者不少于xxx千字的总结，都会有点变味道。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;有的人真是傻，辛辛苦苦忙活了一年，干活的时候有的是时间，总结的时候草草应付，这真的是自己坑自己。&lt;/strong&gt;年终总结既是和领导沟通的重要方式，也是对自己过去一年的工作回顾，通过这种方式更全面的认识到自己的优势和不足，可能&lt;strong&gt;你会发现善于总结的人，往往都是你的领导&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;年终总结的几点建议：&lt;/p&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;用数据说话，比如：平台交易量提升20%、性能提升2倍等。&lt;/li&gt;
  &lt;li&gt;突出重点，不要全篇无亮点，一马平川叙事文。&lt;/li&gt;
  &lt;li&gt;要保持积极向上的态度。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;人总是下意识逃避自己不太擅长的事情，但如果克服了其实也就那样。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我知道说了这么多，大家肯定还是想要一个年终总结的模板，我这里有一份个人感觉很不错样例，感兴趣的朋友可以扫描下方二维码，关注公号后在对话框中回复：&lt;strong&gt;年终总结&lt;/strong&gt;，下载参考。&lt;/p&gt;
</description>
        <pubDate>Sun, 09 Dec 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/12/09/year-end-summary.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/12/09/year-end-summary.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>有点不淡定了</title>
        <description>&lt;p&gt;早上一大早看到一则新闻：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;12月6日早间，据外媒环球邮报报道称，因华为涉嫌违反美国对伊朗的出口禁令，加拿大应美国方面要求，近日在温哥华逮捕了华为副董事长、全球首席财务官孟晚舟，她或将随后被引渡到美国，就涉嫌违反美国对伊朗的出口禁令一事接受调查。而孟晚舟是华为创始人任正非的长女。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;之前美国制裁中兴的时候国内还有一堆人说中兴是活该，说是因为中兴违反了美国法律，法律个毛线呀，美国说大家都不要跟伊朗玩了，我们和伊朗在吵架不和他玩了，然后给全世界的国家都说，你们也不能和伊朗玩了，因为我是美国我说了算。&lt;/p&gt;

&lt;p&gt;大家想象下这算什么道理，这不就是无赖吗？美国说因为你们使用了我们的零部件，因此就不能使用这些零部件的产品卖给伊朗，卖了我就制裁你，但是在如今全球化格局分工合作之下，没有哪家大的厂商不使用别家的零件，美国的武器也不敢说完全不使用中国制造的零部件。&lt;/p&gt;

&lt;p&gt;美国的这些行为本来就违反了国际法，它引用自己国内的法律对中国企业进行制裁，这TM什么道理呀，我中国的企业行为还需要遵守美国的法律？所以大国之间的竞争从来就不分什么正义，利益最大。只要你威胁到了美国的利益，你就犯法了。&lt;/p&gt;

&lt;p&gt;国际法中只承认美国国内法有管辖美国主权领土境内事务。他国企业或个人无义务在美国境外遵守美国国内法。只要中兴不是在美国领土领海范围内将货物卖给伊朗，哪怕就是在美国领海外一海里的公海交易，美国国内法也无权干涉。&lt;/p&gt;

&lt;p&gt;这些年中国各方面不断的崛起，给美国带来了非常大的压力，于是各个方面对中国进行限制打压，在这之前所有的手段还算文明，但这次的做法完全就是耍流氓，已经到了无下限的地步。&lt;/p&gt;

&lt;p&gt;前段时间华为在各个国家被禁止 5G 网络建设，其实就是次事件的一个先兆，中国的一个企业被一个国家举全国之力来限制打压，还能说明什么呢？美国对华为的打压其实就是因为华为太过强大了，已经威胁到了他们的核心利益。&lt;/p&gt;

&lt;p&gt;网络上流程着这么一段，真实性有待验证：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;17年4月华为董事余承东亲自开车在五洲宾馆接走在深圳参加IT峰会的华裔著名科学家张首晟 &lt;br /&gt;
18年9月张首晟获得欧洲物理奖，其团队掌握的量子自旋霍尔效应将带来世界芯片革命&lt;br /&gt;
18年12月1日华为CFO任正非女儿与张首晟将共同出席一个在阿根廷的晚宴&lt;br /&gt;
18年12月1日华为CFO任正非女儿孟晚舟在加拿大转机被加拿大扣留并将引渡到美国&lt;br /&gt;
18年12月1日华裔科学家在美跳楼自杀 &lt;br /&gt;
18年12月3日当下世界最先进的芯片光刻机制造商荷兰ASML公司发生火灾毁了了中国商家订购的价值1.2亿美金的EUV光刻机&lt;/p&gt;
&lt;/blockquote&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;strong&gt;以斗争求和平则和平存，以妥协求和平则和平亡。&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;丢掉幻想，准备斗争。&lt;/strong&gt;&lt;/p&gt;

</description>
        <pubDate>Thu, 06 Dec 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/12/06/huawei-canada.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/12/06/huawei-canada.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>培训班出来的怎么了？</title>
        <description>&lt;p&gt;前两天我在公号转载了一篇关于程序员生活的文章，文章中作者有提到培训班的一点事情，其实文章的主体和培训倒没有太大的关系，结果就有一个哥们给我留言:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;培训班出来的全是垃圾，没有例外。一个优秀的程序员首先是兴趣和热爱这个行业，其次是思维方式和学习能力。短短几个月的培训班只会毁了你，让你变成面试机器而不是塑造你。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;虽然他的留言稍微偏激，但其实也能代表了行业内很少一部分人的观点，甚至有时候一些公司招聘的时候，也会特别注意从某个培训机构出来的学生，因为从他们机构出来的学生有少部分简历造假，简历统一写着各种电商项目，当你准备和他细谈电商的技术架构时，一问三不知。&lt;/p&gt;

&lt;p&gt;这类的简历因为毕竟难找到工作，因此会不断流转到市场中，导致大家对培训机构出来的人可能有一些偏见，但是仅仅因为这一少部分人就完全否定整体，绝对是 SB 行为，可能你不知道正是中国这些年兴起的培训机构，支撑起了一大片中国互联网江山。我们真正应该鄙视的是这些简历造假的程序员，而不是从培训机构出来的同学。&lt;/p&gt;

&lt;p&gt;在前几年，随着互联网高速发展，各个互联网公司对人才的渴望是非常迫切的，而中国高校每年输出的那点计算机相关专业的毕业生，完全不能满足中国IT行业快速崛起的用人需求，想象下手里拿着大把钱也有很好的项目，却找不到合适的人是多么痛苦的一件事。&lt;/p&gt;

&lt;p&gt;可能你的同事是毕业于化学系、物理学、数学系或者机电系的都比较常见，随着行业的发展慢慢的你会发现学医的、学市场管理的、学旅游的等等，甚至还有很多没有上过大学的朋友、在别的行业已经工作多年转行到IT行业的朋友，真的可以说是：365 行行行转程序员。&lt;/p&gt;

&lt;p&gt;这些朋友中有一部分毅力特别强的可以通过自学来进入这个行业，但更多想从事IT行业的朋友最便捷的途径是培训班，甚至有很多计算机专业的朋友也会选择先去培训后再找工作，这样出来找工作时竞争力更大一些。&lt;/p&gt;

&lt;p&gt;上次有一个读者看了我的&lt;a href=&quot;http://www.ityouknow.com/life/2016/11/20/six-years-program.html&quot;&gt;《六年程序生涯》&lt;/a&gt;这篇文章之后给我留言，说自己没有学历，家里条件非常的差，自己也33岁了，人在上海感觉对未来非常的迷茫，他想从事IT这个行业，这是不知道如何去开始，上海培训班的费用高达2万多，那是他多年积累下来的唯一储蓄。过了一段时间，他说他放下一切，选择报名培训班了，后续结果如何不知。&lt;/p&gt;

&lt;p&gt;其实有时候我觉得我们不应该去鄙视培训班出来的朋友，甚至要敬佩他们的行为，在他们选择去培训班之前大多是自己经济最为贫弱的时候，比如：作为一个经济条件并不好的家庭，大学四年可能已经花光了家里的积蓄，在对未来不确定的情况下，却要举债去参加培训，其中的压力可知有多大。入职后可能还需要比科班出身的程序员付出更多的努力才能慢慢的补齐缺失的计算机基础。&lt;/p&gt;

&lt;p&gt;这些年我面试过的人差不多有500多，工作过的同事差不多也有几百人，和不同背景的程序员都打过交道，并没有因为来自不同途径而有很大的不同，甚至有一些跨行跨界的程序员能力表现得更为突出。所以说凡事不能绝对，培训班出来的有渣渣也有优秀的程序员，科班毕业的也是，我们比的不是起点，而是终点。&lt;/p&gt;

&lt;p&gt;就拿我个人来讲，我非计算机专业，通过培训机构进入这个行业，刚毕业又进了外包公司，可以说程序员的两大争议经历培训和外包我都经历了。刚毕业的时候是难一点，但慢慢的我发现我并没有比别人差多少，甚至在某些方面慢慢的走在了前面。&lt;/p&gt;

&lt;p&gt;我认识IT行业的几个大V，据我了解他们也都不少是培训机构出来的，现在他们都在不同的领域引领着一批技术人在共同成长，作为一个大气的中国，一个大气的中国程序员，请放下你的偏见，不然我们怎么走向世界呢？一切一切都是需要用实力来说话，否则都是瞎BB。&lt;/p&gt;

&lt;p&gt;那些经常鄙视这个鄙视那个的程序员才是最应该被鄙视的，应该把更多的精力放在提高自己的能力上面，而不是为了鄙视别人而去彰显自己的SB。海纳百川，有容乃大，每个人都有每个人的经历，每个人的经历都值得我们去尊重。&lt;/p&gt;

&lt;p&gt;我不以有过培训经历为耻，也不会以此为荣，这不过是我过去的一段经历，仅此而已。&lt;/p&gt;
</description>
        <pubDate>Mon, 03 Dec 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/12/03/train-it.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/12/03/train-it.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>每个程序员都有一个故事</title>
        <description>&lt;p&gt;上周在公众号做了一个&lt;a href=&quot;https://mp.weixin.qq.com/s/jvy7kgYClBilfr7bk6xesw&quot;&gt;送书活动&lt;/a&gt;，鼓励大家在文末分享自己的故事，其中有很多朋友的分享很有故事，看了大家的留言真心感觉每个程序员一路走来都不容易，也许他的故事会对你我有所启发，今天将这些故事整理分享给大家。&lt;/p&gt;

&lt;h3 id=&quot;张学伟&quot;&gt;张学伟&lt;/h3&gt;

&lt;p&gt;我是一个小白，今年23岁，我的编程故事才开始…汽车专业顶着压力转行，从周围人的不理解，不看好慢慢的走过来，现在在上海，9月17号工作到现在，总结了一些小观点希望大家不要笑话：所有的异常都要考虑到，尽量做到细致入微。&lt;/p&gt;

&lt;p&gt;还有不要畏手畏脚，大胆去尝试，不要害怕报错，不会的可以上网查关键点。我觉得目前初级程序员编程不困难，困难的是你没有理清业务逻辑。随着业务不断复杂，需要的关键代码越来越难以理解，我的技术也会有所提高吧！&lt;/p&gt;

&lt;p&gt;还有最重要的一点，代码是讲道理的，比女 生 讲道理……总之我来到上海也有7分之2年了吧，目前有了自己的小窝（虽然是厨房改的，但是很干净），有了小车（100块钱买的小自行车），很开心能步入程序员这个行业，因为我每天都可以学到东西。&lt;/p&gt;

&lt;h3 id=&quot;无关&quot;&gt;无关&lt;/h3&gt;

&lt;p&gt;22岁大三党，一本院校，大一上想走编程，太懒了，懒得去刷算法入门经典，没进ACM也就落下了，幸亏大一下选择了网络工程师的路，我没有说走网络前程多好的意思，进程网络培训最大的收获是让我开阔了自己的技术视野，提高了自学的能力，以后学什么都游刃有余。&lt;/p&gt;

&lt;p&gt;从路由交换到安全到数据中心，到SDN，数据中心又给我开阔了运维技术栈，从此又开始了Linux运维培训，一路又走过了自动化运维，云计算大数据，编程也掌握了Python, Golang，我希望自己能够保持热情，再拼一年，目标明年的BAT offer 20k+&lt;/p&gt;

&lt;h3 id=&quot;幽离&quot;&gt;幽离&lt;/h3&gt;

&lt;p&gt;高中没考上，只能去技校里上学，但是没有后悔，因为在初中时就一直想接触编程，来到了技校认识了一些老师，还有一些志同道合的朋友，让我学会了很多编程知识，现在在学JAVA，虽然有时候会烦躁，但是学会新知识后的喜悦是无法形容的，还有一年多就要毕业了，为了自己的梦想加油！&lt;/p&gt;

&lt;h3 id=&quot;demon&quot;&gt;Demon&lt;/h3&gt;

&lt;p&gt;现在的我是一名程序员，而我六年前大学毕业去煤矿实习，不幸井下发生意外左手食指和中指之间被二锤一棒子砸了下去，很庆幸骨头没事，去的医院我记得很清楚，西京医院，医生我也记得很清楚，因为他扫描一眼，让我在他的休息室外，等他休息一个点，当时楼道静悄悄，除了钟表再走，剩下的全部省略..&lt;/p&gt;

&lt;p&gt;最后安好，但是食指和中指不能大幅度张开，导致现在敲键盘有时候不能全部覆盖，这事件后，我动用了一切能用的关系，离开了煤矿，那次后选择来京，反而收到了家里的支持，后来明白了几分道理，第一个是活着真好，第二个就是所谓梦想，就是你要去坚持你未付出行动的东西！个人见解不同，希望不要喷！&lt;/p&gt;

&lt;p&gt;现在，我在北京待了有五年之久，工作也算稳定，工作之中没有丝毫感觉到我手上的异常，反而有时候想想，一切所谓的加班和各种不顺，对于我来说，都是那么不值一提，我都欣然接受，我很享受现在的工作和生活，我还在为我的梦想，生活继续努力着，现在也为了我的女儿。好好工作，学无止境，只是想尽可能在it行多留下自己的努力，一切真实存在！&lt;/p&gt;

&lt;h3 id=&quot;王超&quot;&gt;王超&lt;/h3&gt;

&lt;p&gt;很多时候感觉自己站在一个十字路口，面对抉择的时刻。人生是单行道，我知道，不会有回头的机会。但是因为好奇心，我又很难抉择，我到底应该选择哪一条。我什么都想尝试，什么都想学，当你面对这样的分叉路口，你会选哪一条?好走的还是冒险的?是你喜欢的那一条?还是别人帮你决定的?或者是你会停下来，停留在同一个地方?&lt;/p&gt;

&lt;p&gt;人生的这条路没有红灯，不能停留，必须要选择，也必须面对选择带来的后果。没有人能预料，这条路会带你到哪里，但是我觉得当我到达终点站时，回头看看，没有后悔，我每一分钟都在努力追寻快乐、幸福、梦想。以前的我不是现在的我，而未来的我，我连想像都无法想像。至少，通过不断的学习和努力，我现在是开心的，我爱的人也是开心的，这样就够了。&lt;/p&gt;

&lt;h3 id=&quot;布衣小弟&quot;&gt;布衣小弟&lt;/h3&gt;

&lt;p&gt;不知道该留言何物，但真的贼想要这些书啊，哈哈。😬作为一个有时间啃书的学生党，深知一本好书的力量，醍醐灌顶之感，更让你惊叹知识，艺术之奇妙！在一个CS倒数的所谓C9学校里(我爱母校)，第一门C语言老师照着数年前的PPT念(我不爱这个老师)，然后……我就厌恶编程了。&lt;/p&gt;

&lt;p&gt;但毕竟靠这个吃饭，大二下开始阅读了《C和指针》从此打开了新世界大门…接着看了浙大的数据结构便爱上了数据结构去啃《算法导论》(还木有啃完)，大三学校的英文教材Silberschatz的操作系统概念和计组…&lt;/p&gt;

&lt;p&gt;总之，经典就是经典，代表计算机科学的经典的基础知识怎么也不过时，阅读经典，配合微笑哥的经典博客与实战，味道更佳
阅读让你愉悦，实战让你亢奋。&lt;/p&gt;

&lt;h3 id=&quot;上官振宏&quot;&gt;上官振宏&lt;/h3&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;h3 id=&quot;林彦&quot;&gt;林彦&lt;/h3&gt;

&lt;p&gt;我不是学计算机的，再2个月就40岁了。人生走了很多弯路。做过数据分析，运营，市场和项目管理。因为2年多前的一些职业经历和去年大龄求职时的艰难，去年才真正开始系统学和编程有关的知识和技能。&lt;/p&gt;

&lt;p&gt;完成了机器学习工程师纳米学位。还上了一些Python，基本爬虫，数据分析的网课。现在还在同时上2门网课，学习SAS，根据最近工作中遇到的场景有可能会试试自动化测试和爬虫。之前也坚持看完了极客时间的3门课程和其他课程的部分内容。选择技术作为人生下半场的基石之一是觉得技术在某些环境下可以更务实一些，令自己提升的几率更大一些。&lt;/p&gt;

&lt;p&gt;昨天一早已经买了几本推荐的书用了优惠券。谢谢作者&lt;/p&gt;

&lt;h3 id=&quot;weidan&quot;&gt;Weidan&lt;/h3&gt;

&lt;p&gt;我本来是普通大专物流毕业的，因为高中的时候对诺基亚进行刷机修改源码，在网上看一堆16进制的代码，以为编程就是每天对着这些数字进行填写修改，大学避开软件开发选了物流。但是又想物流”专家”的同时会一点计算机，报了软件工程的专升本考试。&lt;/p&gt;

&lt;p&gt;偶然接触Java这几个字的编程，对着培训机构的视频敲，发现握草，太好玩了吧，一发不可收拾。大三了，那时候真心是人生转折点，跟我爸说我可能想去培训，需要2w，出来可能好也可能不好。谁知我爸爽快的答应（家庭不太好其实我开口内心很纠结）了。&lt;/p&gt;

&lt;p&gt;于是去培训，接触了java，半年，家里全权负责吃喝拉撒，我很感谢我的父亲。出来工作薪资就是我专业的3倍多。所以我很感谢这次转折感谢这个机会也感谢这个公司。&lt;/p&gt;

&lt;p&gt;即使管理层不是很好，待遇不算高。但是我拼命学模式架构框架，给同事们进行培训，我并不是追新，而是想用更舒适的方式表达业务，开发舒服，业务表达简单，软件也就不会很快进入死刑。&lt;/p&gt;

&lt;p&gt;我那么注重开发体验是因为，还是这家公司给了我两次机会做架构方面的工作，第一次，瞎几把乱分割，软件周期到了半年之多，无法维护。只能进行新一版本的开发，新一版本采用springcloud的技术也就是这时候认识笑哥，配合DDD复服用，前后端彻底分离。&lt;/p&gt;

&lt;p&gt;软件开发体验提升了，效率提高了，也就大家都舒舒服服的。我现在没想做管理，只想做技术，想着未来也是朝着技术方面的道路去走。啥？专升本？只过了英语一科…愿开发是大家的兴趣，每天面对的不是工作而是兴趣，开心每一天~&lt;/p&gt;

&lt;h3 id=&quot;david&quot;&gt;David&lt;/h3&gt;

&lt;p&gt;17年毕业的小白一枚，毕业后跳槽进入到现公司，在前领导的赏识下进入到公司的基础架构组，帮助同事们做了一件整个的技术升级，虽然不够彻底，问题也很多。但是一路走来，自己无论是从心态上还是技术上都有了踏踏实实的提升。&lt;/p&gt;

&lt;p&gt;回想自己的大学四年，虽说是本专业(计算机科学与技术),但是自己确实那时候把青春都荒废了很多，和那些大佬相比自己确实还是差的很远。从16年开始实习到现在一路走来，就感觉一个行业中牛逼的就是牛逼，菜的人各有各的菜法。其实真正让人拉出差距的不是所谓掌握技术的多少，能力的强弱。&lt;/p&gt;

&lt;p&gt;这些都是表面的差距，而影响这些表层的而是你的深层次的思想和意识有没有真正把你调动起来，现在的市场和社会是都很浮躁，但是能沉下心来投资自己，挖掘自己，改变自己，颠覆自己的才能走出一条自己的路。当然，我不想灌鸡汤，因为每个人都不一样，不要让任何人干扰到自己的轨迹，我们所需要的就是坚持自己认为对的事情，一路走下去。&lt;/p&gt;

&lt;p&gt;到最后，时间会证明一切。一杯敬朝阳，一杯敬过往。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;欢迎大家投稿聊聊你的程序员生涯，我准备发一系列程序员的故事。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;这里只是选取了十位程序员朋友的留言，其实总共有190位朋友留言，公号文章精选留言只能展示100条，大家如想查看这些内容，可以扫描下方二维码在公号内回复：送书，即可。&lt;/p&gt;
</description>
        <pubDate>Sun, 11 Nov 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/11/11/programmer-story.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/11/11/programmer-story.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>Spring Boot 2 (九)：【重磅】Spring Boot 2.1.0 权威发布</title>
        <description>&lt;p&gt;如果这两天登录 &lt;a href=&quot;https://start.spring.io/&quot;&gt;https://start.spring.io/&lt;/a&gt; 就会发现，Spring Boot 默认版本已经升到了 2.1.0。这是因为 Spring Boot 刚刚发布了 2.1.0 版本，我们来看下 Spring Boot 2 发布以来第一个子版本都发布了哪些内容？&lt;/p&gt;

&lt;h2 id=&quot;21-中的新特性&quot;&gt;2.1 中的新特性&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;将&lt;code class=&quot;highlighter-rouge&quot;&gt;spring-boot-starter-oauth2-oidc-client&lt;/code&gt;重命名为&lt;code class=&quot;highlighter-rouge&quot;&gt;spring-boot-starter-oauth2-client&lt;/code&gt;命名更简洁&lt;/li&gt;
  &lt;li&gt;添加 OAuth2 资源服务 starter，OAuth2 一个用于认证的组件。&lt;/li&gt;
  &lt;li&gt;支持 &lt;code class=&quot;highlighter-rouge&quot;&gt;ConditionalOnBean&lt;/code&gt; 和 &lt;code class=&quot;highlighter-rouge&quot;&gt;ConditionalOnMissingBean&lt;/code&gt; 下的参数化容器&lt;/li&gt;
  &lt;li&gt;自动配置 applicationTaskExecutor bean 的延迟加载来避免不必要的日志记录&lt;/li&gt;
  &lt;li&gt;将 DatabaseDriver＃SAP 重命名为 DatabaseDriver&lt;/li&gt;
  &lt;li&gt;跳过重启器不仅适用于 JUnit4，也适用于 JUnit5&lt;/li&gt;
  &lt;li&gt;在 Jest HealthIndicator 中使用集群端点&lt;/li&gt;
  &lt;li&gt;当 DevTools 禁用重启时添加日志输出&lt;/li&gt;
  &lt;li&gt;添加注解：&lt;code class=&quot;highlighter-rouge&quot;&gt;@ConditionalOnMissingServletFilter&lt;/code&gt;提高 Servlet Filters 的自动装配。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;同时还有一大堆以来组件进行了升级:&lt;/p&gt;

&lt;h2 id=&quot;21-中的组件升级&quot;&gt;2.1 中的组件升级&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;升级 Hibernate 5.3，Hibernate 的支持升级到了 5.3&lt;/li&gt;
  &lt;li&gt;升级 Tomcat 9 ，支持最新的 tomcat 9&lt;/li&gt;
  &lt;li&gt;支持 Java 11，Java 现在更新越来越快，Spring 快赶不上了。&lt;/li&gt;
  &lt;li&gt;升级 Thymeleaf Extras Springsecurity 到 3.0.4.RELEASE ，&lt;code class=&quot;highlighter-rouge&quot;&gt;thymeleaf-extras-springsecurity&lt;/code&gt; 是 Thymeleaf 提供集成 Spring Security 的组件&lt;/li&gt;
  &lt;li&gt;升级 Joda Time  2.10.1，Joda-Time， 面向 Java 应用程序的日期/时间库的替代选择，Joda-Time 令时间和日期值变得易于管理、操作和理解。&lt;/li&gt;
  &lt;li&gt;升级 Lettuce  5.1.2.RELEASE ，Lettuce 前面说过，传说中 Redis 最快的客户端。&lt;/li&gt;
  &lt;li&gt;升级 Reactor Californium-SR2 ，Californium 是物联网云服务的 Java COAP 实现。因此，它更专注的是可扩展性和可用性而不是像嵌入式设备那样关注资源效率。不过，Californium 也适合嵌入式的 JVM。&lt;/li&gt;
  &lt;li&gt;升级 Maven Failsafe Plugin 2.22.1 ，Maven 中的测试插件。&lt;/li&gt;
  &lt;li&gt;升级 Flyway 5.2.1 ， Flyway是一款开源的数据库版本管理工具&lt;/li&gt;
  &lt;li&gt;升级 Aspectj 1.9.2 ，AspectJ 是 Java 中流行的 AOP（Aspect-oriented Programming）编程扩展框架，是 Eclipse 托管给 Apache 基金会的一个开源项目。&lt;/li&gt;
  &lt;li&gt;升级 Mysql 8.0.13 ，Mysql 支持到 8。&lt;/li&gt;
  &lt;li&gt;升级 Undertow 2.0.14.Final ， Undertow 是一个用 java 编写的、灵活的、高性能的 Web 服务器，提供基于 NIO 的阻塞和非阻塞A PI。&lt;/li&gt;
  &lt;li&gt;升级 Rxjava2 2.2.3 ，RxJava是一个在 Java 虚拟机上的响应式扩展：一个用于通过使用可观察序列来编写异步和基于事件的程序的库。&lt;/li&gt;
  &lt;li&gt;升级 Hazelcast 3.11 ，Hazelcast 是一个开源的可嵌入式数据网格（社区版免费，企业版收费）。你可以把它看做是内存数据库，不过它与 Redis 等内存数据库又有些不同。&lt;/li&gt;
  &lt;li&gt;升级 Spring Kafka 2.2.0.RELEASE ，Kafka 高吞吐量、内置分区、支持数据副本和容错的 消息中间件。&lt;/li&gt;
  &lt;li&gt;升级 Spring Batch 4.1.0.RELEASE ，Spring 的批处理框架。&lt;/li&gt;
  &lt;li&gt;升级 Micrometer 1.1.0 ，Micrometer 是一款监控指标的度量类库，可以让您在没有供应商锁定的情况下对JVM 的应用程序代码进行调整。&lt;/li&gt;
  &lt;li&gt;升级 Spring Integration 5.1.0.RELEASE，Spring integration，它是一种便捷的事件驱动消息框架。&lt;/li&gt;
  &lt;li&gt;升级 Spring Data Lovelace SR2 ，&lt;strong&gt;网上查了一下，仍然不知道 Spring Data Lovelace 是什么鬼，了解的朋友留言给我&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;升级 Spring Framework 5.1.2.RELEASE ，对于的 Spring 也进行了升级。&lt;/li&gt;
  &lt;li&gt;升级 Byte Buddy 1.9.3 ，Byte Buddy 是一个字节码生成与维护的库,主要用于在 Java 应用运行时生成和修改 Java 类,并且不需要编译器来辅助。&lt;/li&gt;
  &lt;li&gt;升级 Spring Session Bean-RELEASE ，Spring 提供 Session 管理的组件。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;详细内容参考这里：&lt;a href=&quot;https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes&quot;&gt;Spring Boot 2.1 Release Notes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;每次看 Spring Boot 发布指南都要更新一遍脑子里面的技术名词，Spring Boot 体系太大，几乎集成了 Java 领域所有知名框架。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我在 &lt;a href=&quot;https://gitbook.cn/gitchat/column/5b86228ce15aa17d68b5b55a/topic/5b968861780fdb5e97d3e157&quot;&gt;Spring Boot 2.0 升级的时候说过一段话&lt;/a&gt;：&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Spring Boot 2.0 是历时 4 年开发出来的巨作，在 Spring Boot 1.0 的基础上进行了大量的优化，淘汰了很多过期的 API，同时引入了一大批最新的技术，这些新技术在未来的一段时间内都具有引导性。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;如果不是特别需要使用 Spring Boot 2.0 上面提到的新特性，就尽量不要着急进行升级，等 Spring Boot 2.0 彻底稳定下来后再使用。如果想要升级也请先从早期的版本升级到 Spring Boot 1.5X 系列之后，再升级到 Spring Boot 2.0 版本，Spring Boot 2.0 的很多配置内容和 Spring Boot 1.0 不一致需要注意。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;这是因为 Spring Boot 2.0 刚刚发布会有一段时间的稳定期，现在 Spring Boot 2.1.0 的发布，意味着 Spring Boot 2.0 已经彻底稳定下来，如果公司比较喜欢尝新，现在可以大胆的使用了。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gitbook.cn/gitchat/column/5b86228ce15aa17d68b5b55a#catalog&quot;&gt;另外我在 GitChat 的课程《精通 Spring Boot 42 讲》也会基于最新的 Spring Boot 2.1.0，大家感兴趣可以关注&lt;/a&gt;&lt;/p&gt;

</description>
        <pubDate>Sat, 03 Nov 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/springboot/2018/11/03/spring-boot-2.1.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/springboot/2018/11/03/spring-boot-2.1.html</guid>
        
        <category>springboot</category>
        
        
        <category>springboot</category>
        
      </item>
    
      <item>
        <title>英语外教老师被骗后续：石锤证据，果真是骗子！</title>
        <description>&lt;p&gt;不了解整个事事件的朋友，请先移步看这篇文章&lt;a href=&quot;http://www.ityouknow.com/life/2018/10/22/english-teacher-10000-rmb.html&quot;&gt;《我的英语外教老师被骗 10000 RMB的惨痛经历》&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;前两天我还在想这个哥们可能刚开始是想帮忙，只是后面出了问题。结果这两天英语老师又给我发了一张截图，这张图片明显可以看出钱已经被提现到他的银行卡中，不管他的微信是否被腾讯警告什么的，那么至少钱已经到了他的银行卡。接收到钱之后立刻删除外教老师微信，另外一个外教老师在帮忙沟通了几次之后也被拉黑T除了。&lt;/p&gt;

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

&lt;p&gt;这样的话，我觉得没必要给打码了，大家看看这位哥们嚣张的对话&lt;/p&gt;

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

&lt;p&gt;外教老师也爆了他的 FaceBook 地址，我上去看了一下感觉生活好像过的也挺不错，应该不至于为了这 10000 RMB 去做这件事情的人，人真的是说不来。&lt;/p&gt;

&lt;p&gt;FaceBook 地址：&lt;a href=&quot;https://www.facebook.com/guoping.nie.75&quot;&gt;https://www.facebook.com/guoping.nie.75&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;有读者看完这个文章&lt;a href=&quot;http://www.ityouknow.com/life/2018/10/22/english-teacher-10000-rmb.html&quot;&gt;《我的英语外教老师被骗 10000 RMB的惨痛经历》&lt;/a&gt;之后说有办法把钱追回来，我问了一下有什么办法，给了一个链接，看了一下就是按照步骤向腾讯去投诉。投诉的步骤如下：&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/wxjb.png&quot; alt=&quot;&quot; /&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/2018/life/tx110.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;img src=&quot;http://www.itmind.net/assets/images/2018/life/talk.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;因为这个老师现在急缺钱，我就想帮她介绍几个学生。在上次的文章末尾给大家留言：如果想学英语回复“英文”，联系我，我帮大家介绍一下。结果就很多人喷我，要发软文就大大方方的发软文，别搞得偷偷摸摸的。&lt;/p&gt;

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

&lt;p&gt;估计都没好好把文章看完就来喷我，就这智商和理解能力，我只能给他回复一下，让他认清现实。&lt;/p&gt;

&lt;p&gt;尽管这个世界大部分时候都是让人很失望和无语的，但是也得保留一点点最后的底线，给留那么一点点光吧。大家可以帮忙转发此文章让更多的人看到，相信终究会让骗子看到这篇文章，无处可藏！&lt;/p&gt;
</description>
        <pubDate>Tue, 30 Oct 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/10/30/report-again.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/10/30/report-again.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
      <item>
        <title>我的英语外教老师被骗 10000 RMB的惨痛经历</title>
        <description>&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/insane.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;大家都知道作为一名程序员，学好英语是多么的重要，可以最快的速度去学习最权威的技术指南，可以在互联网上和全世界的技术人一起讨论问题。这也是我毕业这么多年一直没有放弃学习英语的重要原因之一。&lt;/p&gt;

&lt;p&gt;这些年断断续续的尝试过背单词，读短小的英文小说，报名参加线下、线上的培训班，但至今英语仍然是烂的一滩糊涂，直到因为遇到了一些菲律宾的英语老师，经过半年多持续的视频对话，现在才勉强好了一点。&lt;/p&gt;

&lt;p&gt;我上课不喜欢按照大纲来学习嫌太枯燥，一般就喜欢找个英语老师 free talk ，尝试了几个英语老师之后，就找了一个可以聊得来的英语老师固定了下来，有一阵子没一阵子上着课，时间长了慢慢就有了一点信任感。&lt;/p&gt;

&lt;p&gt;上课的形式就是大家约定个时间，在微信上以视频的方式去交流，每次上完课后将课时费发红包给老师，就这样愉快的合作了一段时间。突然有一天（9月6号）这个英语老师问我微信给她谈了一个框，她不知道是什么，想让我帮忙解释一下。&lt;/p&gt;

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

&lt;p&gt;可能是微信最近收紧了微信支付限额政策，她不能通过转账将钱给别人。时间到了10月16号，这位老师突然问我有什么办法可以帮她把钱取出来，我确实帮不上忙。&lt;/p&gt;

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

&lt;p&gt;第二我正上班着，这名英语老师突然联系我，让我帮忙给她报警，吓了我一跳，不知道发生了什么？这个时候，她已经非常着急了，一边哭一边说这些钱不只是她的，还有一部分是其他老师的钱，如果她把这些钱搞丢了，这些人会杀了她。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/003.png&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;&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/004.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;第二个微信聊天记录：&lt;/p&gt;

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

&lt;p&gt;转完钱后，他就把这个老师给拉黑了，另外一个英语老师也认识这个哥们，因为帮忙联系这个哥们让帮忙给解决问题，大家可以看看，通话内容很嚣张。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/101.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/102.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/103.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/104.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/105.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;到现在为止，这个哥们仍然没有把钱退回给这位英语老师，并且将另外一个英语老师也给拉黑了。我有两个疑问：&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1、微信支付有这样的限额吗？&lt;/li&gt;
  &lt;li&gt;2、这位哥们的行为有没有涉嫌诈骗？&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;就算他是出于帮忙的性质，也不应该直接收到钱，将别人直接拉黑吧？这件事情告诫大家，任何时候不要轻易的去相信别人，特别是网络上认识的人，这位英语老师确实有点傻大哈了，这个教训估计会记住一辈子。&lt;/p&gt;

&lt;p&gt;奉劝那些想通过其它手段致富的朋友，赶紧收手吧，别老通过这种方式给国人丢脸，我都替你不好意思了。这篇文章我对当事人的敏感信息都进行了屏蔽，如果后期有必要也是可以选择曝光出来的，我会继续跟踪此事的进展，感兴趣可关注此公号跟踪。&lt;/p&gt;
</description>
        <pubDate>Mon, 22 Oct 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/10/22/english-teacher-10000-rmb.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/10/22/english-teacher-10000-rmb.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;说实话这些年我挺烦参加一些技术论坛，一方面是技术交流质量的原因，另外主要还是因为太多的商业因素掺杂到了其中，但这也能理解，毕竟组织者是需要花费很多精力、财力。没这些广告主的赞助，可能都不会有各种技术峰会的举行。昨天参加的作者图书探讨会算是一个质量很高的交流会议，和以往参加的技术峰会不太一样。&lt;/p&gt;

&lt;p&gt;首先出版社介绍了一下参加研讨会的嘉宾，看了一下名单都是各个领域的大咖，有一线大厂的知名开发者、知名公司的CTO、创业公司技术负责人等，但他们在这里都有同一个身份，那就是都是热销图书的作者，有一个大合影大家可以瞅瞅都认识几个。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.itmind.net/assets/images/2018/life/meet.png&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;杜江老师，杜老师的图书主要是 PHP 领域的，出版过多部 PHP 专业书籍。杜江老师工作了十几年，几乎在热门的一线互联网公司初期都呆过，比如今日头条、赶集网等。&lt;/p&gt;

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

&lt;p&gt;杜老师分享了自己从一线员工到技术管理者的路程，因为想为PHP圈子尽一份力，所以写了一本关于 PHP 的书籍，结果因为写了这本书而认识了一些朋友，因为认识了这些朋友而被介绍了一个活，干完了这个私活就在&lt;strong&gt;北京买了一套房&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;听完这个还是挺震撼的，这就是因为写书而扩大了知名度，连接了更多的人，创造了更多的机会，这就是个人品牌的力量。其实我觉得个人写博客、写专栏、开公众号其实也是打造个人品牌的好机会，说不定因此而结缘更多志同道合有趣的人和事。&lt;/p&gt;

&lt;p&gt;李智慧老师（大型网站技术架构 核心原理与案例分析）分享了一个小案例挺有意思，有一个读者看了他的书之后跟他说，我看着你的书搭建了我们公司的技术架构，现在已经支持了上亿用户的访问。李智慧老师心想，我当初写这本书的时候，公司架构也没能达到支撑这么大的访问量，读者真是青出于蓝而胜于蓝。&lt;/p&gt;

&lt;p&gt;后面黄勇（微服务架构）、高阳（敏捷开发）、李林峰（3个月出一本书的大神）、李智慧（大型网站技术架构）、刘京洋（深入Linux）、温昱（一线架构师实践指南）、王新栋（京东618）等大佬，也做了非常精彩的分享，还有很多大佬的分享没有记录下来。大多数都是随机上去做的分享，谈的是个人成长、因为读书而结缘改变人生经历的故事，分享质量都很高。&lt;/p&gt;

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

&lt;p&gt;我在研讨会上也做了一个小的分享，主题大概是：一切都是顺其自然。开篇介绍了网名为什么叫做纯洁的微笑（对技术保持纯洁，对生活保持微笑），主要分享我是如何从一线的开发者，到一个喜欢写博客的技术人，以及自己创建公号的经历，有机会可以给大家写篇文章介绍一下。&lt;/p&gt;

&lt;p&gt;我个人是非常喜欢这种技术人在一起深入交流、分享的这种感觉，刚好通过出版社连接了这么一群热爱技术，热爱写作的朋友，在一起比较纯粹和高质量的分享、讨论是一件很过瘾的事情。期间想和黄东旭老师讨论一下他们公司的产品 TiDB 的使用，很遗憾因为后面没在一个分会场错过了，不过有他微信后面也有机会可以再请教。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;听君一席话，胜读百年书&lt;/strong&gt;。参加会议的作者，有的正在创业的路上、有的已经拥有了自己的公司、有的还坚持在一线，不同的人分享着不同的故事，但同样的是拥有精彩的人生，同样结缘于写作而影响了一群技术人，在某种程度上来讲同样也是促进了国内技术的发展。&lt;/p&gt;
</description>
        <pubDate>Sat, 20 Oct 2018 00:00:00 +0000</pubDate>
        <link>http://www.ityouknow.com/life/2018/10/20/book-author.html</link>
        <guid isPermaLink="true">http://www.ityouknow.com/life/2018/10/20/book-author.html</guid>
        
        <category>life</category>
        
        
        <category>life</category>
        
      </item>
    
  </channel>
</rss>
