差不多的wwWv6d5是什么,刚刚vg浏览器破解版 v6.5的v6d5cOm怎么不显示了

&figure&&img src=&https://pic1.zhimg.com/v2-aaac61d145ced6e2d2b59a_b.jpg& data-rawwidth=&699& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&699& data-original=&https://pic1.zhimg.com/v2-aaac61d145ced6e2d2b59a_r.jpg&&&/figure&&p&本文由观看&a href=&https://link.zhihu.com/?target=https%3A//www.imooc.com/learn/947& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ajax跨域问题解决视频教程-慕课网&/a&总结而来&/p&&hr&&p&跨域问题来源于JavaScript的同源策略,即只有‘协议’+‘主机名’+‘端口号’相同才允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。&/p&&p&如果产生跨域调用问题,会在浏览器控制台中报出如下错误:&/p&&figure&&img src=&https://pic7.zhimg.com/v2-ae773c1e3d3fbb81abc5733c_b.jpg& data-size=&normal& data-rawwidth=&1390& data-rawheight=&171& class=&origin_image zh-lightbox-thumb& width=&1390& data-original=&https://pic7.zhimg.com/v2-ae773c1e3d3fbb81abc5733c_r.jpg&&&figcaption&跨域报错截图&/figcaption&&/figure&&hr&&p&下面列出产生跨域问题的主要原因于解决方案:&/p&&h2&1、浏览器限制&/h2&&p&浏览器由于对安全性的考虑,会自动检查出跨域请求并阻止。&/p&&p&这时可以通过命令行启动chrome并添加禁止检查参数 '--disable-web-security' 来避免跨域安全问题。&/p&&h2&2、XHR请求&/h2&&p&普通的ajax请求方式是XMLHttpRequest,这种type的请求会被浏览器所检查,因此想要跳过XHR检查,就需要使请求不是XHR的方式。&/p&&h2&3、跨域问题&/h2&&p&解决跨域问题最常用的方式就是使用Jsonp,因为Jsonp的请求是script方式,并不是上面所说的XHR方式,所以可以跳过XHR检查。&/p&&p&值得注意的是,当使用jsonp时,不仅要修改ajax请求中的datatype,还需要在后端指出jsonp请求的约定参数,如'callback'。这是因为普通ajax返回的结果是json类型,但jsonp返回的是js脚本,并且jsonp的请求会在尾部加上指定的请求参数,如'callback'。这时需要在后端中指出带有'callback'参数的请求就是jsonp请求,当服务器收到请求的参数中带有约定的参数,就把请求的结果包装成一个js脚本返回,这样就解决了跨域问题。&/p&&p&这里的'callback'参数可以由前后端随意约定,要是想改成李二狗的话,就需要在ajax请求中指定参数 jsonp:'liergou' ,并且在后端指定同样的jsonp约定参数就好。&/p&&p&可以发现在jsonp的请求除了callback参数,还有一个随机数,这是为了防止缓存而出现的,如果想去掉此参数,需要在ajax请求中添加 cache:true 参数。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-60a8bac3e7ba6e980c91dcbbbebc31d4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&605& data-rawheight=&94& class=&origin_image zh-lightbox-thumb& width=&605& data-original=&https://pic1.zhimg.com/v2-60a8bac3e7ba6e980c91dcbbbebc31d4_r.jpg&&&/figure&&hr&&h2&利用服务端初步解决跨域问题&/h2&&p&Jsonp依旧存在某些弊端,如需要服务器更改代码、只支持get方式等。&/p&&p&所以由服务器端解决跨域问题似乎是一个更好的方案&/p&&p&观察跨域请求的请求头中有一个Origin字段,这个字段的含义是当前的域名信息,当请求返回时,浏览器会检查响应头中有没有允许跨域的信息,如果没有,就会报错。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a5fe5abcfd1ff5df5aa1d0a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&894& data-rawheight=&530& class=&origin_image zh-lightbox-thumb& width=&894& data-original=&https://pic3.zhimg.com/v2-a5fe5abcfd1ff5df5aa1d0a_r.jpg&&&/figure&&p&于是就可以在后端代码返回时添加如下响应头信息,这时当前8081域就可以完成GET方式的跨域操作,当然也可以把值设为*,代表允许所有域和方法的跨域操作。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b93f7b5de1a7a7bf419a8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&964& data-rawheight=&86& class=&origin_image zh-lightbox-thumb& width=&964& data-original=&https://pic2.zhimg.com/v2-b93f7b5de1a7a7bf419a8_r.jpg&&&/figure&&h2&简单请求与非简单请求&/h2&&p&视频作者把简单请求与非简单请求列举如下。在跨域问题中,浏览器判断请求为简单请求时,会先执行请求,再判断此请求是否支持跨域;而浏览器判断请求为非简单请求时,会先向服务器发送一个预检命令,当此命令通过后,再向服务器发送真正的跨域请求。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-8d1805233debfe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&695& data-rawheight=&606& class=&origin_image zh-lightbox-thumb& width=&695& data-original=&https://pic1.zhimg.com/v2-8d1805233debfe_r.jpg&&&/figure&&p&上文中的请求为get请求,属于简单请求,于是通过上面的方法可以直接解决跨域问题。但当请求为非简单请求时,通过上面的方法会报如下错误:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f0eab43fab_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1389& data-rawheight=&332& class=&origin_image zh-lightbox-thumb& width=&1389& data-original=&https://pic2.zhimg.com/v2-f0eab43fab_r.jpg&&&/figure&&p&根据报错信息,在相应头中加入如下字段即可解决非简单请求的跨域问题。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f65e189655_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&732& data-rawheight=&42& class=&origin_image zh-lightbox-thumb& width=&732& data-original=&https://pic3.zhimg.com/v2-f65e189655_r.jpg&&&/figure&&p&但非简单请求每次需要请求两次(一次预检请求、一次真正请求),这样会十分影响效率,此时可以在响应头中加入如下字段,即可设置预检请求的缓存,单位为秒。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-da1534601cbbc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&731& data-rawheight=&41& class=&origin_image zh-lightbox-thumb& width=&731& data-original=&https://pic2.zhimg.com/v2-da1534601cbbc_r.jpg&&&/figure&&h2&带Cookie的跨域&/h2&&p&上面当请求头中带有 'access-control-allow-Origin' , '*' 时,虽然代表着允许所有域的跨域请求,但当我们的跨域请求中带有Cookie时,会报如下错误。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-a06a44b3c6aac41c75a7951eeaa173ac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1367& data-rawheight=&373& class=&origin_image zh-lightbox-thumb& width=&1367& data-original=&https://pic2.zhimg.com/v2-a06a44b3c6aac41c75a7951eeaa173ac_r.jpg&&&/figure&&p&根据报错原因,知道了带Cookie时的相应头中access-control-allow-Origin字段必须为当前域的全匹配地址,不能为*号。并且需要加入如下的允许Cookie字段,这样就可以使得带Cookie的跨域问题得以解决。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c5c1e02fe9468a1bdd93fa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&812& data-rawheight=&82& class=&origin_image zh-lightbox-thumb& width=&812& data-original=&https://pic3.zhimg.com/v2-c5c1e02fe9468a1bdd93fa_r.jpg&&&/figure&&p&当然这样的话只能解决某一个域的跨域问题,解决方案可以是把access-control-allow-Origin字段设为从请求中获取到的Origin值,但这样感觉又使安全性得不到保障。&/p&&h2&带自定义头的跨域&/h2&&p&当请求中带有自定义头信息时,可以从resquest中获取并把其字段名添加到access-control-allow-Headers中,这样就可以解决。&/p&&h2&利用Spring解决跨域&/h2&&p&Spring解决跨域问题简直太爽,直接一个@CrossOrigin在类或方法上即可解决。&/p&&p&&br&&/p&&h2&利用Nginx解决跨域&/h2&&p&上文均是Client直接请求某应用服务器的解决方案,但目前网站架构一般是先请求Nginx再转发到某应用服务器,所以在Nginx中解决跨域更加通用。有了上文的启发,想到可以在Nginx中添加响应头信息的方式来解决跨域。打开Nginx的配置文件,添加header如下。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-1f3abc412d38a94aad0e4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&825& data-rawheight=&474& class=&origin_image zh-lightbox-thumb& width=&825& data-original=&https://pic3.zhimg.com/v2-1f3abc412d38a94aad0e4_r.jpg&&&/figure&&h2&调用方解决跨域&/h2&&p&上文都是通过修改被调用方代码来解决跨域,但有些情况是不能修改被调用方代码的,这种情况下可以尝试用反向代理-隐藏跨域的方式来解决。&/p&&p&通过添加一个调用方Nginx配置来解决,关键点在于设置了一个代理地址:/ajaxserver。在请求时,把请求地址改为此代理地址即可解决。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-82dd32bbf3c6cf86a911_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&721& data-rawheight=&418& class=&origin_image zh-lightbox-thumb& width=&721& data-original=&https://pic2.zhimg.com/v2-82dd32bbf3c6cf86a911_r.jpg&&&/figure&&p&此方式与之前最大的不同在于请求的url为本域地址(/ajaxserer),都是相对地址。所以浏览器看到的都是本域地址,也就不存在跨域地址的问题了。&/p&&hr&&p&课程非常好,再次推荐 &a href=&https://link.zhihu.com/?target=https%3A//www.imooc.com/learn/947& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ajax跨域问题解决视频教程-慕课网&/a&&/p&
本文由观看总结而来跨域问题来源于JavaScript的同源策略,即只有‘协议’+‘主机名’+‘端口号’相同才允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。如果产生跨域调用问…
&p&长大以后,疲劳感难以通过睡一觉消除的最大原因之一,&b&是我们在大多数时候所感受到的不再只是小时候那样的身体上的“疲惫”,或是偶尔一次的、短时间的精神紧张感,而更多的是一种持续的、长期的身心紧绷。要&/b&缓解这种紧绷感,需要人们能够真正进入一种“放松”的状态,它不仅仅是一种身体上的休息。&/p&&p&&br&&/p&&p&闭眼感受一下,你是不是身体上某些部位比较僵硬、紧张?或者心情烦躁?&b&即便手头没有什么即刻要做的事情,但仍然有一种随时待命、随时需要提防新问题出现的状况?&/b&&/p&&p&&br&&/p&&p&如果你也有以上这些感受,那么,你感受到的“疲劳感”就不仅仅是短暂的身体疲惫,也很难仅仅通过睡一觉就彻底恢复,你所感受到的是一种长期积累下来的&b&“紧绷感”。&/b&这种紧绷感既有心理上的,也有生理上的。&/p&&p&&br&&/p&&h2&&b&长大之后,我们更容易陷入“紧绷”之中不自知&/b&&/h2&&p&&br&&/p&&p&人们会因为外界刺激和情绪变化而进入紧绷状态,但不是所有的紧绷状态都是短暂而突然的。有时身处的环境和特定的外界因素都会成为让我们紧绷的原因,而这样导致的紧绷是很难意识到且长期存在的。那么,哪些因素造成了人们长期紧绷呢?&/p&&p&&br&&/p&&p&&b&首先,所在公司的企业文化鼓励人们透支能量。&/b&许多企业的公司文化鼓励人们成为工作狂,去压榨自己的能量,错误地认为持续紧张就意味着高产出,而休息就是懈怠。受到企业文化影响,许多人认为只有通过不断地工作,才能证明自己的价值,或是不在竞争中输给同伴。于是人们习惯于超额透支能量,唯恐自己一旦松懈下来,就会被淘汰。&/p&&p&&br&&/p&&p&&b&其次,糟糕的时间管理也会让人陷入持续紧绷。&/b&例如,有习惯性拖延的人们在完成任务之前,会长时间陷入“没有完成任务”焦虑中,在此期间,即使拖延者没有在工作,Ta也在情绪的影响下处于无法放松的状态;而等工作终于完成后,由于拖延浪费了原本可以用来休息的时间,拖延者也无法得到充足的放松,最终形成长期紧绷感。&/p&&p&&br&&/p&&p&&b&而那些总想着“事情做完我再休息”的人们也容易长期紧绷。&/b&他们总想着要等事情完成,才能放心投入地放松。然而事情总是一件接一件的出现,他们很少有放松的时候。而且,实际上,研究发现,在工作到一半时去放松,和工作结束后去放松,产生的欣悦感是相似的。工作结束才去休息,并不会比中间就去放松更让人感到享受。所以,不要拖到工作做完才去放松,有时间休息就应该抓紧机会休息。&/p&&p&&br&&/p&&p&&b&最后,高敏感人士容易持续紧绷。&/b&高敏感人士对他人的情绪和外界刺激(例如声音气味等等)容易过度反应。比如声音的突然变化会让高敏感人士进入应激状态、感到惊惧,而在普通人身上,可能只是稍微吸引他们的注意而已。呆在同一种环境里,普通人会感到很舒缓、放松,但对高敏感人士而言,却像是待在一个需要随时准备战斗的危险地带。长此以往,比起普通人,高敏感人士总是消耗更多能量,也就容易持续地感到紧绷(Aron, 1996)。&/p&&p&&br&&/p&&h2&&b&为什么睡一觉不能完全缓解这种“紧绷感”呢?&/b&&/h2&&p&&br&&/p&&p&缓解这种紧绷感,&b&需要人们能够真正进入一种“放松”的状态,它不仅仅是一种身体上的休息,而是一种身心上既不激动也没有不安的状态。&/b&放松状态下,人们处于低紧张水平,没有愤怒、恐惧和焦虑造成的唤起(arousal);与此相反,人们往往有种平静的欣悦感(Jacobson, 1976)&/p&&p&&br&&/p&&p&但,长大后我们心理和生理上的疲劳感几乎不会是某一次的加班、某一次的通宵聚会,或是某一天的剧烈运动造成的——如今困扰我们的疲惫感,&b&是长时间紧绷之下的结果。&/b&而长时间紧绷后再补觉、甚至给自己放长假,也很难恢复紧绷带来的损伤,更不用期望在一次充足睡眠后就消除这种疲惫。&/p&&p&&br&&/p&&p&如果,想避免长大后高压生活下形成的长期紧绷感所带来的伤害,正确的做法是在它还未累积成难以消除的疲惫的紧绷早期时,就开始学会放松。&/p&&p&&br&&/p&&h2&&b&怎样才能在紧绷的生活中见缝插针地放松?&/b&&/h2&&p&&br&&/p&&blockquote&1. 调整心态:&b&把放松当做一件必须做的事情,而不是可有可无的事&/b&&/blockquote&&p&&br&&/p&&p&有些人误以为“放松就是在浪费时间”,他们由于不了解放松的好处而不重视放松。实际上,放松对我们的生活与工作有许多帮助。研究人类表现的作者Brad Stulberg提出了一个公式:“紧绷+放松=成长”。他认为,如果缺乏放松,人们就更难以自我提升(Stulberg&&br&Magness, 2017)。&/p&&p&&br&&/p&&p&而对于生活中的我们而言,对放松的误解还不止于此,并不是所有的娱乐行为和进行运动就等于放松了,我们应当改变对待放松的态度,而非把它当做其他活动所附带的感受和结果。同时,就像上面说到的,放松不应当是在你已经感觉筋疲力尽时才去做的事(那时也为时已晚),而是应当成为日常生活中重要的一部分。&/p&&p&&br&&/p&&blockquote&2. &b&放松的核心是日常良好的能量管理&/b&&/blockquote&&p&&br&&/p&&p&Jacobson(1976)教授建议人们像管理预算一样管理自己的能量,注意“节流”,避免能量的过度使用,因为那样会让我们的疲惫感久久挥之不去。我们可以规划自己的放松,时间比如列一个“活动-能量”单,写下对我们而言,哪些活动会消耗大量能量,而那些活动耗能较少。选择那些能给你带来快乐、且耗能较少的活动,可能是看小说啊、发呆啊等等。&b&在做日常工作规划时,也要将这些小能量活动放到日程计划里。&/b&&/p&&p&&br&&/p&&p&此外,&b&要好好利用周末来放松。尽量不要在周末加班。&/b&这要求人们平时要做好时间管理,避免拖延,把工作日应该完成的事情放到周末去做。&/p&&p&&br&&/p&&blockquote&3. &b&工作间隙的小睡(nap)&/b&&/blockquote&&p&&br&&/p&&p&研究建议人们可以在工作期间进行15~30分钟的小睡,可以有效地提升记忆力、及时地缓解短期的疲劳,并且能清空大脑、为之后接触新的信息作准备。但小睡时间不宜过长,如果超过30分钟,人们负责决策的脑区活动会开始减弱,等醒来后,人们需要更多时间让它恢复到工作时期应有的兴奋水平。&/p&&p&&br&&/p&&blockquote&&b&4. 社交放松(social recovery)&/b&&/blockquote&&p&&br&&/p&&p&值得注意的是,不是所有的社交都能让人放松。你需要选择你社交的对象。建议放松时,找自己最信任、熟悉的朋友们,和他们聚在一起。有时你们不必一直聊天,即使呆在一个空间里也会有放松和安抚的效果。如果你们想要聊天,注意不要谈论工作等会让你紧张的内容(所以说下班后和同事去喝酒聊工作并不是一种放松)。&/p&&p&&br&&/p&&p&最后,想和大家强调:要想获得质量良好的休息和放松,需要在平时就认真地做好能量管理。越是因为疲倦而懈怠,越有可能导致紧绷的持续。而当放松成为你的日常惯例后,你就不用费神去规划放松,疲劳感也就更难累积到难以消除的程度了。&/p&&p&&br&&/p&&p&以上。&/p&&p&&br&&/p&&p&想更有针对性地解决心理问题,请关注KY心理课:&a href=&//link.zhihu.com/?target=https%3A//m.genshuixue.com/i/knowyourself%3Ffrom%3Dsinglemessage& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【KnowYourself】KnowYourself,宇宙中最酷的泛心理学社区,人人都能看懂,但只有一部分人才会喜欢。-跟谁学官网&/a&&/p&&p&&i&点击查看过往高赞回答:&/i&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&年轻人千万别碰哪些东西?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&有哪些看似很傻,实则聪明的行为?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&恋爱中不合适就分手是什么心态?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&为什么一部分女性不喜欢生孩子?&/a&&/p&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&有哪些细微但是高效有用的习惯?&/a&&/p&
长大以后,疲劳感难以通过睡一觉消除的最大原因之一,是我们在大多数时候所感受到的不再只是小时候那样的身体上的“疲惫”,或是偶尔一次的、短时间的精神紧张感,而更多的是一种持续的、长期的身心紧绷。要缓解这种紧绷感,需要人们能够真正进入一种“放松…
&p&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-9c3a34772bfc74fea485014_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-9c3a34772bfc74fea485014_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-666dc993af06d3c5f1afa_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-666dc993af06d3c5f1afa_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-616d2ecc5be4e0a0ee7cf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-616d2ecc5be4e0a0ee7cf_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-124c7c6dd0eeca7440d32_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-124c7c6dd0eeca7440d32_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-7b0dce9b2e2a600d4f2c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-7b0dce9b2e2a600d4f2c_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-b0a020c066_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-b0a020c066_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-fba34ed3ddcb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-fba34ed3ddcb_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-4e98c30c8ffec35663c33dae7e0e85b4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-4e98c30c8ffec35663c33dae7e0e85b4_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-a275dc7dcf0af2d019e7a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-a275dc7dcf0af2d019e7a_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-ba04bc47aff_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-ba04bc47aff_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-67ae412daed06d0b7697_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-67ae412daed06d0b7697_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-ab5fed0da67dcd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-ab5fed0da67dcd_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-6d25aa48d6896eb3ebb8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-6d25aa48d6896eb3ebb8_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-392ab636a659aff07bc55c37c420bfc4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-392ab636a659aff07bc55c37c420bfc4_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-2a877f2eb313afc3d469_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-2a877f2eb313afc3d469_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-d4e7a18dea34ac3ced0aac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-d4e7a18dea34ac3ced0aac_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-242a6f9a2a5bce6de3cf66_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-242a6f9a2a5bce6de3cf66_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-ac208aeae6b6a164e423bd6daaedcb65_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-ac208aeae6b6a164e423bd6daaedcb65_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-3cfc45cd55a0b3ca3ea0a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-3cfc45cd55a0b3ca3ea0a_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-7d1aa0ef0ad68a62e69ec4c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-7d1aa0ef0ad68a62e69ec4c_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-e10ff4bb5da3ecb128c4bcb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-e10ff4bb5da3ecb128c4bcb_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-84c737c754af8e795c4e56_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-84c737c754af8e795c4e56_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-c536cfa0aceb2f80b44f8bcbd7cf0f3f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-c536cfa0aceb2f80b44f8bcbd7cf0f3f_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-c79508eecbb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-c79508eecbb_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-eadfbfbdd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-eadfbfbdd_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-14fda1be8ae308fec979896_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-14fda1be8ae308fec979896_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-de18b17ce7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-de18b17ce7_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-6d55ebbf5bb0121ecf818c01aff43b82_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-6d55ebbf5bb0121ecf818c01aff43b82_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-eed71ce715dba011ef11bb5a3de80a48_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-eed71ce715dba011ef11bb5a3de80a48_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-4d1d9bba961ee473b68c6a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-4d1d9bba961ee473b68c6a_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-8a3ddcca15f8cc9f4533_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-8a3ddcca15f8cc9f4533_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-8a00c5e3e8db_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-8a00c5e3e8db_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-c9fd4d3e8acfeb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-c9fd4d3e8acfeb_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-c9fd4d3e8acfeb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-c9fd4d3e8acfeb_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-b15a5ba03b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-b15a5ba03b_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-9bc215032_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-9bc215032_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-c02f7b8edabdbae9d8e86b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-c02f7b8edabdbae9d8e86b_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-e4ee130b2f799f288d10f31e4c154664_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-e4ee130b2f799f288d10f31e4c154664_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-d7f14db9e15b0fe74b4593_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-d7f14db9e15b0fe74b4593_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-faf44e9076_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-faf44e9076_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-b4a829dc0adc8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-b4a829dc0adc8_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-e742ca9edc2d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-e742ca9edc2d_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-dfe07a32899ddb7573f99_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-dfe07a32899ddb7573f99_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-29ea1afb03418bea109c48_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-29ea1afb03418bea109c48_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-9adedba4e705e769d522_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-9adedba4e705e769d522_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-4ca726dfd6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-4ca726dfd6_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-2bb54f49e1dbfefbc4657e76_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-2bb54f49e1dbfefbc4657e76_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-dbc85e3e3b0f347c12513_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-dbc85e3e3b0f347c12513_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-68c2ce045d3e72b1c2cb0f3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-68c2ce045d3e72b1c2cb0f3_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-479ef596e7b37131c18d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-479ef596e7b37131c18d_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-dbdfd3da69c8a860f10d04d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-dbdfd3da69c8a860f10d04d_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-35ffd60a79f5c07ceec17b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-35ffd60a79f5c07ceec17b_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-1f4aeda948b3ddce9ff0b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-1f4aeda948b3ddce9ff0b_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-5a5fca66a1ae7d96c9df1e150b153b54_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-5a5fca66a1ae7d96c9df1e150b153b54_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-70cecd0e6ccdda1f02314_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-70cecd0e6ccdda1f02314_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-8f98b704f9a8edf76e5b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-8f98b704f9a8edf76e5b_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-2b605ccc0903dcec1c3fd7dc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-2b605ccc0903dcec1c3fd7dc_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-b0890e47cae7e0f8d5fc4a7fff452535_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-b0890e47cae7e0f8d5fc4a7fff452535_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-cbeb0fccf13369ebb36f7d98a0221258_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-cbeb0fccf13369ebb36f7d98a0221258_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-d2ca893c46d64eb4a742_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-d2ca893c46d64eb4a742_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-dcb8fb03cb0bab1c27afb0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-dcb8fb03cb0bab1c27afb0_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-6d484c12dee8c228a866c9d0bf316e5a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-6d484c12dee8c228a866c9d0bf316e5a_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-259a9ff569dfd12e05274cce5c7dc070_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-259a9ff569dfd12e05274cce5c7dc070_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-f140fbf040d923a9c18ceb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-f140fbf040d923a9c18ceb_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-af1afa262c86e5bfed7d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-af1afa262c86e5bfed7d_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-1e7cc83b10ddfdb9eaed4b9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-1e7cc83b10ddfdb9eaed4b9_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-cbb2acf8235187cbb8e1b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-cbb2acf8235187cbb8e1b_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-845c30a208b48e56cc61868_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-845c30a208b48e56cc61868_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-14f762e9d83f481a60ca4b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-14f762e9d83f481a60ca4b_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-aeeaa5eb33d8de42fe359a387b4db32a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-aeeaa5eb33d8de42fe359a387b4db32a_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-774bc626eea88_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-774bc626eea88_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-67e3a6d116dc81ad0f72fb2d7f9d5294_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-67e3a6d116dc81ad0f72fb2d7f9d5294_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-1e7cc83b10ddfdb9eaed4b9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-1e7cc83b10ddfdb9eaed4b9_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-af1afa262c86e5bfed7d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-af1afa262c86e5bfed7d_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-d7cf3a90dd3d42aba9b18_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-d7cf3a90dd3d42aba9b18_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-74fd5b012b8e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-74fd5b012b8e_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-9defb623ec2bb7c2d0aab_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-9defb623ec2bb7c2d0aab_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-c14d3d87ce03ff_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-c14d3d87ce03ff_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-ccdfdf5fdc5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-ccdfdf5fdc5_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-a409afc342_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-a409afc342_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-2ae6c7135ede9e14ed495_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-2ae6c7135ede9e14ed495_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-af59f3b827a43aad732aeeea_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-af59f3b827a43aad732aeeea_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-8e77fda4c9576bbf9c30913fee331bb8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-8e77fda4c9576bbf9c30913fee331bb8_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-f_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-223a988aa64c0e2de5203e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic3.zhimg.com/v2-223a988aa64c0e2de5203e_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-955cee5de5dac82596bfa0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-955cee5de5dac82596bfa0_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-7dbdbeb75c557d85b1e4eec694eb361c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/v2-7dbdbeb75c557d85b1e4eec694eb361c_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-616d2ecc5be4e0a0ee7cf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-616d2ecc5be4e0a0ee7cf_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-7e745fc21017ee5cfb2a12d28580bcb7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-7e745fc21017ee5cfb2a12d28580bcb7_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-bdd2d2fc3ba8d99ba95a3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-bdd2d2fc3ba8d99ba95a3_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-739d3aa7149aaea320eb8b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/v2-739d3aa7149aaea320eb8b_r.jpg&&&/figure&&p&能够简单地按Spatial或者Temporal分工的情况都是简单的。你负责界面的左边,我负责右边。你负责流程的前半段,我负责后半段。&/p&&p&当分工无法简单直观的完成的时候,就遇到了架构设计的三大难题&/p&&ul&&li&按 Layer Decomposition 的套路拆分出来的 Layer 自身不稳定&/li&&ul&&li&越靠近业务越难提炼出所谓的层,需求肯本兜不住。经常跨层传导,各层都在做业务需求。&/li&&li&压力和激励都很难跨层传导。大公司病的根源所在&/li&&/ul&&li&平行流程 和 平行单据 本质上是 Spatial 分工,但是很难像界面UI那样清晰明了。&/li&&li&当完全分不开的时候,如何更好地一起生活&/li&&ul&&li&“主流程”的代码和“场景化”的代码&/li&&li&“业务”的代码和“非业务”的代码&/li&&li&“正常流程”的代码和“异常流程”的代码&/li&&/ul&&/ul&&p&一个小tips:编程语言的文本形式决定了它只能提高一个方面的信噪比而放弃其他方面的信噪比。但是文本不是唯一的信息获取方式。IDE 或者
PaaS 完全可以用各种不同的方式重组信息。&/p&
能够简单地按Spatial或者Temporal分工的情况都是简单的。你负责界面的左边,我负责右边。你负责流程的前半段,我负责后半段。当分工无法简单直观的完成的时候,就遇到了架构设计的三大难题按 Layer Decomposition 的套路拆分出来的 Layer 自身不稳定越靠近…
&p&答主对Java比较熟悉,就用Java来讲一讲吧。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c7cb18cbd37262ffad7b04e50fb13b92_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&61& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/v2-c7cb18cbd37262ffad7b04e50fb13b92_r.jpg&&&/figure&&h2&&b&什么是Lambda?&/b&&/h2&&p&我们知道,对于一个Java变量,我们可以赋给其一个&b&“值”&/b&。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ab6a4af3f28a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&602& data-rawheight=&204& class=&origin_image zh-lightbox-thumb& width=&602& data-original=&https://pic1.zhimg.com/v2-ab6a4af3f28a_r.jpg&&&/figure&&p&如果你想把&b&“一块代码”&/b&赋给一个Java变量,应该怎么做呢?&/p&&p&比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-1cc87e82fba0872c2cae3fee08e8fe41_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&534& data-rawheight=&133& class=&origin_image zh-lightbox-thumb& width=&534& data-original=&https://pic2.zhimg.com/v2-1cc87e82fba0872c2cae3fee08e8fe41_r.jpg&&&/figure&&p&在Java 8之前,这个是做不到的。但是Java 8问世之后,利用Lambda特性,就可以做到了。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-145a556d1a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&585& data-rawheight=&120& class=&origin_image zh-lightbox-thumb& width=&585& data-original=&https://pic4.zhimg.com/v2-145a556d1a_r.jpg&&&/figure&&p&当然,这个并不是一个很简洁的写法。所以,为了使这个赋值操作更加elegant, 我们可以移除一些没用的声明。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-a72e094a548ae02fa82987_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1362& data-rawheight=&1498& class=&origin_image zh-lightbox-thumb& width=&1362& data-original=&https://pic4.zhimg.com/v2-a72e094a548ae02fa82987_r.jpg&&&/figure&&p&这样,我们就成功的非常优雅的把“一块代码”赋给了一个变量。&b&而“这块代码”,或者说“这个被赋给一个变量的函数”,就是一个Lambda表达式&/b&。&/p&&p&但是这里仍然有一个问题,就是变量aBlockOfCode的类型应该是什么?&/p&&p&在Java 8里面,&b&所有的Lambda的类型都是一个接口,而Lambda表达式本身,也就是”那段代码“,需要是这个接口的实现。&/b&这是我认为理解Lambda的一个关键所在,简而言之就是,&b&Lambda表达式本身就是一个接口的实现&/b&。直接这样说可能还是有点让人困扰,我们继续看看例子。我们给上面的aBlockOfCode加上一个类型:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-55de193ddc7fea201b257_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&534& data-rawheight=&244& class=&origin_image zh-lightbox-thumb& width=&534& data-original=&https://pic4.zhimg.com/v2-55de193ddc7fea201b257_r.jpg&&&/figure&&p&这种只有&b&一个接口函数需要被实现的接口类型,我们叫它”函数式接口“。&/b&为了避免后来的人在这个接口中增加接口函数导致其有多个接口函数需要被实现,变成&非函数接口”,我们可以在这个上面加上一个声明@FunctionalInterface, 这样别人就无法在里面添加新的接口函数了:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2c57eeb09c327d01fb766_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&318& data-rawheight=&123& class=&content_image& width=&318&&&/figure&&p&这样,我们就得到了一个完整的Lambda表达式声明:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-02eedc528fcee115f5ed0b7b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1354& data-rawheight=&148& class=&origin_image zh-lightbox-thumb& width=&1354& data-original=&https://pic4.zhimg.com/v2-02eedc528fcee115f5ed0b7b_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-b3c9ad03ac3ee_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&61& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-b3c9ad03ac3ee_r.jpg&&&/figure&&h2&&b&Lambda表达式有什么作用?&/b&&/h2&&p&&b&最直观的作用就是使得代码变得异常简洁。&/b&&/p&&p&我们可以对比一下Lambda表达式和传统的Java对同一个接口的实现:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-dbd46cf9d188d0fde25db700c23dcc79_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1178& data-rawheight=&403& class=&origin_image zh-lightbox-thumb& width=&1178& data-original=&https://pic2.zhimg.com/v2-dbd46cf9d188d0fde25db700c23dcc79_r.jpg&&&/figure&&p&这两种写法本质上是等价的。但是显然,Java 8中的写法更加优雅简洁。并且,由于Lambda可以直接赋值给一个变量,&b&我们就可以直接把Lambda作为参数传给函数, 而传统的Java必须有明确的接口实现的定义,初始化才行:&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8baf7f70a36bd689e5ea_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1112& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&1112& data-original=&https://pic3.zhimg.com/v2-8baf7f70a36bd689e5ea_r.jpg&&&/figure&&p&有些情况下,这个接口实现只需要用到一次。传统的Java 7必须要求你定义一个“污染环境”的接口实现MyInterfaceImpl,而相较之下Java 8的Lambda, 就显得干净很多。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-413d712fb74b031cf8d4c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&61& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-413d712fb74b031cf8d4c_r.jpg&&&/figure&&h2&Lambda结合FunctionalInterface Lib, forEach, stream(),method reference等新特性可以使代码变的更加简洁!&/h2&&p&直接上例子。&/p&&p&假设Person的定义和List&Person&的值都给定。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-02ae14b4c341eda6a038a2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&693& data-rawheight=&236& class=&origin_image zh-lightbox-thumb& width=&693& data-original=&https://pic3.zhimg.com/v2-02ae14b4c341eda6a038a2_r.jpg&&&/figure&&p&现在需要你打印出guiltyPersons List里面所有LastName以&Z&开头的人的FirstName。&/p&&p&&b&原生态Lambda写法&/b&:定义两个函数式接口,定义一个静态函数,调用静态函数并给参数赋值Lambda表达式。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-fdef4fa244e89c84a567f1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&587& data-rawheight=&457& class=&origin_image zh-lightbox-thumb& width=&587& data-original=&https://pic2.zhimg.com/v2-fdef4fa244e89c84a567f1_r.jpg&&&/figure&&p&这个代码实际上已经比较简洁了,但是我们还可以更简洁么?&/p&&p&当然可以。在Java 8中有一个函数式接口的包,里面定义了大量可能用到的函数式接口(&a href=&//link.zhihu.com/?target=https%3A//docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&java.util.function (Java Platform SE 8 )&/a&)。所以,我们在这里压根都不需要定义NameChecker和Executor这两个函数式接口,直接用Java 8函数式接口包里的Predicate&T&和Consumer&T&就可以了——因为他们这一对的接口定义和NameChecker/Executor其实是一样的。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ad5b3e8d225bf9e6d988c6dc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&551& data-rawheight=&247& class=&origin_image zh-lightbox-thumb& width=&551& data-original=&https://pic4.zhimg.com/v2-ad5b3e8d225bf9e6d988c6dc_r.jpg&&&/figure&&p&&b&第一步简化 - 利用函数式接口包:&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ad13bf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&609& data-rawheight=&323& class=&origin_image zh-lightbox-thumb& width=&609& data-original=&https://pic4.zhimg.com/v2-ad13bf_r.jpg&&&/figure&&p&静态函数里面的for each循环其实是非常碍眼的。这里可以利用Iterable自带的forEach()来替代。forEach()本身可以接受一个Consumer&T& 参数。&/p&&p&&b&第二步简化 - 用Iterable.forEach()取代foreach loop:&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-bdd6f5a6dbf65bb7ad5ab6cf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&606& data-rawheight=&276& class=&origin_image zh-lightbox-thumb& width=&606& data-original=&https://pic4.zhimg.com/v2-bdd6f5a6dbf65bb7ad5ab6cf_r.jpg&&&/figure&&p&由于静态函数其实只是对List进行了一通操作,这里我们可以甩掉静态函数,直接使用stream()特性来完成。stream()的几个方法都是接受Predicate&T&,Consumer&T&等参数的(&a href=&//link.zhihu.com/?target=https%3A//docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&java.util.stream (Java Platform SE 8 )&/a&)。你理解了上面的内容,stream()这里就非常好理解了,并不需要多做解释。&/p&&p&&b&第三步简化 - 利用stream()替代静态函数:&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e196d987f852b9b8e26a6a9dac648a06_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&507& data-rawheight=&116& class=&origin_image zh-lightbox-thumb& width=&507& data-original=&https://pic3.zhimg.com/v2-e196d987f852b9b8e26a6a9dac648a06_r.jpg&&&/figure&&p&对比最开始的Lambda写法,这里已经非常非常简洁了。但是如果,我们的要求变一下,变成print这个人的全部信息,及p -& System.out.println(p); 那么还可以利用Method reference来继续简化。所谓Method reference, 就是用已经写好的别的Object/Class的method来代替Lambda expression。格式如下:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-291f3bb8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&459& data-rawheight=&76& class=&origin_image zh-lightbox-thumb& width=&459& data-original=&https://pic1.zhimg.com/v2-291f3bb8_r.jpg&&&/figure&&p&&b&第四步简化 - 如果是println(p),则可以利用Method reference代替forEach中的Lambda表达式:&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f29ed54265_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&449& data-rawheight=&104& class=&origin_image zh-lightbox-thumb& width=&449& data-original=&https://pic2.zhimg.com/v2-f29ed54265_r.jpg&&&/figure&&p&这基本上就是能写的最简洁的版本了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ad2b43af522ea121d3b751c4a0f881c6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&61& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/v2-ad2b43af522ea121d3b751c4a0f881c6_r.jpg&&&/figure&&h2&Lambda配合Optional&T&可以使Java对于null的处理变的异常优雅&/h2&&p&这里假设我们有一个person object,以及一个person object的Optional wrapper:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e78d71bd86d77aabec42cf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&539& data-rawheight=&134& class=&origin_image zh-lightbox-thumb& width=&539& data-original=&https://pic4.zhimg.com/v2-e78d71bd86d77aabec42cf_r.jpg&&&/figure&&p&Optional&T&如果不结合Lambda使用的话,并不能使原来繁琐的null check变的简单。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ce82e2c3e69caab9acdec9d4e42cde0e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&667& data-rawheight=&181& class=&origin_image zh-lightbox-thumb& width=&667& data-original=&https://pic3.zhimg.com/v2-ce82e2c3e69caab9acdec9d4e42cde0e_r.jpg&&&/figure&&p&&b&只有当Optional&T&结合Lambda一起使用的时候,才能发挥出其真正的威力!&/b&&/p&&p&我们现在就来对比一下下面四种常见的null处理中,Java 8的Lambda+Optional&T&和传统Java两者之间对于null的处理差异。&/p&&p&&b&情况一 - 存在则开干&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-feffa8fe2ed_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&747& data-rawheight=&160& class=&origin_image zh-lightbox-thumb& width=&747& data-original=&https://pic2.zhimg.com/v2-feffa8fe2ed_r.jpg&&&/figure&&p&&b&情况二 - 存在则返回,无则返回屁&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-cfa0e3298ba94efa29dc9cb8b32356fe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&790& data-rawheight=&181& class=&origin_image zh-lightbox-thumb& width=&790& data-original=&https://pic3.zhimg.com/v2-cfa0e3298ba94efa29dc9cb8b32356fe_r.jpg&&&/figure&&p&&b&情况三 - 存在则返回,无则由函数产生&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ac575fd83d5fa07dd7c2dce_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&996& data-rawheight=&176& class=&origin_image zh-lightbox-thumb& width=&996& data-original=&https://pic3.zhimg.com/v2-ac575fd83d5fa07dd7c2dce_r.jpg&&&/figure&&p&&b&情况四 - 夺命连环null检查&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-7bc0ac86cd29a1cea92a853d73f41cec_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&867& data-rawheight=&276& class=&origin_image zh-lightbox-thumb& width=&867& data-original=&https://pic1.zhimg.com/v2-7bc0ac86cd29a1cea92a853d73f41cec_r.jpg&&&/figure&&p&由上述四种情况可以清楚地看到,Optional&T&+Lambda可以让我们少写很多ifElse块。尤其是对于情况四那种夺命连环null检查,传统java的写法显得冗长难懂,而新的Optional&T&+Lambda则清新脱俗,清楚简洁。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e6b653cd6eced03376d5feb2e5943be3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&61& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/v2-e6b653cd6eced03376d5feb2e5943be3_r.jpg&&&/figure&&p&关于Java的Lambda, 还有东西需要讨论和学习。比如如何handle lambda exception,如何利用Lambda的特性来进行parallel processing等。总之,我只是一如既往地介绍个大概,让你大概知道,哦!原来是这样子就OK了。网上关于Lambda有很多相关的教程,多看多练。假以时日,必定有所精益。&/p&
答主对Java比较熟悉,就用Java来讲一讲吧。什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:在Java 8之前,…
&figure&&img src=&https://pic3.zhimg.com/v2-ccc1b0bf2e6e7d1f27bb_b.jpg& data-rawwidth=&443& data-rawheight=&291& class=&origin_image zh-lightbox-thumb& width=&443& data-original=&https://pic3.zhimg.com/v2-ccc1b0bf2e6e7d1f27bb_r.jpg&&&/figure&&p&IOC容器背后有个可怕的事实,代码引用在你不注意的情况下悄悄地传递了。我决定写些文章来讨论这些问题和处理原则及解决方案。问题非常清楚:IOC容器作为单件的替代物被滥用了。随着项目越来越大,许多类包含了越来越多的功能,然后到处都存在各种依赖。&/p&&p&那么用IOC容器来代替单件会有什么问题呢?不过也别误会,IOC容器还是非常棒的工具,但是如果他们被滥用的话,会造成很严重的问题。如果没有理解怎样使用IOC容器,很容易造成误用和滥用。在开始之前,我们先解释下依赖注入到底是什么:&/p&&p&依赖注入并不是什么神奇的东西。依赖就是指你的类依赖的接口。通常我们有2种方式来使用依赖:注入和单件。单件作为某种全局变量打破了封装,它们可以不受作用域的限制随意使用。单件还隐藏了你类的依赖,你的类使用了各种单件,但你在你类的接口里是看不到这种信息的。单件会把实现耦合进来,使你在重构代码的时候感到很困难。再实际点说,单件通常作为全局变量保留各种引用从而造成内存泄漏。所以我们更倾向于使用注入的方式来解决依赖。&/p&&p&class Watcher&/p&&p&{&/p&&p&INofification action =&/p&&p&&br&&/p&&p&public Watcher(INofification concreteImplementation)&/p&&p&{&/p&&p&this.action = concreteI&/p&&p&}&/p&&p&&br&&/p&&p&public void Notify(string message)&/p&&p&{ &/p&&p&action.OnNotification(message); //Watcher depends on INotificaiton interface&/p&&p&}&/p&&p&}&/p&&p&现在我们考虑一下,如果不用IOC容器我们会怎样注入依赖?比如说:像上面的例子一样作为构造函数的参数传入依赖。不过当依赖太多,你会往构造函数中传入10个或更多的参数么?我确定你不会,那太痛苦了,而且对灵活性和扩展性都会有问题。使用IOC容器时也会有一样的问题。虽然IOC容器会让这变得方便一些,但由于用了太多的依赖对象会造成更严重的耦合。实话说,如果代码设计的时候遵循了SOLID原则,问题也不会发生,因为类的依赖与类的职责是直接相关的。单一职责肯定会使注入的依赖非常少。然而如果没有一个合适的模式去遵守的话,程序员总会更倾向于打破开闭原则,给现有的类加入更多的功能,而不是采取模块化的,可扩展的设计。尤其是IOC容器会助长那种不正确的设计,所以这时候使用IOC容器是非常容易出错,造成难以维护的代码的。&/p&&p&当依赖注入到一个实例的时候,这些依赖一般都从哪儿来?如果是通过构造函数注入的,他们显然是和正在创建的实例是在一个作用域中的。而往新创建的实例中注入依赖的那个类也会有它自己的依赖,而它的依赖又是从它的父作用域中注入的。这样的依赖关系就是我们所说的:对象图。&/p&&p&但是终归要有个起点。通常发生在初始对象创建的地方。这个地方就是我们所说的 组合根,简称 CR。说它是根是因为一般他是上下文初始化的地方,组合又是因为依赖被创建并注入,并组成初始关系。&/p&&p&现在你就明白Unity框架的问题:缺少一个可以放CR的地方。Unity没有像一个mian方法可以让各种对象间的关系在那里进行组合。这就是为什么如果只用unity框架来创建对象间关系时就只能用单件或者静态类或静态方法了。其实我们平常用unity的方式都还是用传统的OOP方式,放一个空GameObject作为一个全局main,而没有纯粹的用unity的EC框架。&/p&&p&为了让对象间交流沟通,总会导致要注入依赖。唯一允许不依靠注入依赖就能沟通的形式我们称为:Event Bus.Event Bus可以对象间的沟通都通过使用事件的方式通过一个单件转发。因此,它是一个经常使用的一个反模式。请注意,你应该创建一个类似于Event Bus的东西,但是不要使用单件的实现方式。&/p&&p&对象间沟通可以造成耦合,也可以不耦合。有一些方法可以让对象进行沟通:&/p&&p&1.接口注入:A注入到B里,B就耦合了A, B.someFunc(){A.someFunc()}&/p&&p&2.事件:B注入到A里,A就耦合了B,比如在A里:B.onSomeThing += A.SomeFunc&/p&&p&3.命令模式:B和A解耦了。B可以通过调用一个命令,然后命令再去调用A的方法。命令是一个对于经常变化的业务逻辑的非常好的封装。在B中通常会注入一个命令工厂。&/p&&p&4.中介模式:B和A互相不知道,但是都知道那个中介。B和A都传入中介中,然后中介负责其间的沟通,比如通过事件或接口的形式。&/p&&p&5.其他各种模式:观察者,事件队列等等。&/p&&p&怎样选出合适的呢?如果没有指导方针,选择一个看起来和选择另外一个并没有什么不一样。不过请记住前2个是不好的,他们耦合了随时间可能会变化的接口。&/p&&p&我可以介绍下我们代码设计的方针:解决方案要最小化依赖。&/p&&p&第二个方针是:单一职责并接口分离。你的类必须只有一个职责。类间的沟通也需要视为一种职责,因此最好也将其分离代理给其他类进行。&/p&&p&文章翻译自:&a href=&http://link.zhihu.com/?target=http%3A//www.sebaslab.com/the-truth-behind-inversion-of-control-part-i-dependency-injection/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The truth behind Inversion of Control – Part I – Dependency Injection&/a&&/p&
IOC容器背后有个可怕的事实,代码引用在你不注意的情况下悄悄地传递了。我决定写些文章来讨论这些问题和处理原则及解决方案。问题非常清楚:IOC容器作为单件的替代物被滥用了。随着项目越来越大,许多类包含了越来越多的功能,然后到处都存在各种依赖。那么…
&figure&&img src=&https://pic3.zhimg.com/f75bc00cf9db363b568cae_b.jpg& data-rawwidth=&1064& data-rawheight=&477& class=&origin_image zh-lightbox-thumb& width=&1064& data-original=&https://pic3.zhimg.com/f75bc00cf9db363b568cae_r.jpg&&&/figure&之前看到知乎上的一个问题:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&典型的「学生思维」有哪些? &/a& 觉得还挺有意思。因为自己2010年也是从学生身份加入Facebook公司,然后经过了4年的洗礼,有一些自己和同事们的总结。特地在这里和大家分享一下:&p&这个问题是很有意义的, 特别是我最近2年开始带人以后,有几点注意好了之后的确可以帮忙很多new grad学生更加地适应工作和职业发展。(想起当年我毕业的时候,2010年,刚踏入工作的时候犯了不少的错误;现在想想,自己的确很菜,还走了不少弯路)所以这里我回想总结了下,大概这几点要好好注意。(因为是在美国学校毕业和加入硅谷公司,所以有个别几点是针对北美;但是大部分观点还比较通用,行业是:互联网+计算机。)&/p&&p&&b&1.主动揽活和思考&/b&&/p&&br&&p&如果说大学的时候,有老师给你布置任务而且还有deadline之类的东西。在工作上&strong&似乎&/strong&开始也有领导给你分配一些任务;如果用 tower 或者 teambition 的话,一些任务还有deadline,&strong&貌似&/strong&和上学的时候一样。如果你这样想就大错特错了。工作上领导喜欢的是你能够proactive(预先主动地,这个词不好翻译) 能够自主地去把负责的事情做好。你要能自己去规划一些事情,有好的想法的话(并且是能够落地的)可以及时和他们去反馈。一般的领导只在你入职最开始的时候,像老师那样来给你布置作业,甚至还有些无微不至的关怀,但是最后希望的都是你能够成长起来,独挡一面。我举个简单的例子:开始入职的时候,你就好像LOL里的英雄出生一样,你要做的是带线补刀,打小怪,就好像完成一个个任务一样;但是你在心中要有一本明确的认知:打小怪补刀赚线只是一个过程(过渡阶段),并不是全部;其目的是为了给你涨经验涨钱涨等级,然后你的目标是要发育成一个能线上打崩对手能gank能团战而且和整个团队互补能够配合的英雄!你不是打怪机器,也不是补刀能手,这些只是一个过程,所以你眼睛不能只看着自己今天完成了几个任务(新人的任务一般都是很小粒度的bug或者是小功能),而是心想自己通过完成这些任务可以&strong&成长&/strong&多少,自己开始出去gank或者团战还欠缺什么?如何来补全?&/p&&p&&b&2.扩大你的圈子&/b&&/p&&br&&p&不要只呆在自己熟悉的圈子:这个我做得不太好,刚开始工作的时候我觉得自己之前竞赛、程序比别人写得快那么一点,于是就可以不在乎圈子和关系。于是渐渐地只和自己熟悉一些中国朋友(圈子不够国际化)吃饭和玩。到了最后我才意识到,当一个工程师做到了上面的级别,你代码能力的重要程度指数型下降而你的soft skill(除了编程能力之外的软实力) 则越来越重要。这时你的圈子和人脉(即使在公司里)就显得越来越重要。所以,我建议你逼自己走入主流的圈子。比如:“team lunch” 这种东西,不管他们是什么牛鬼蛇神,吃什么难吃的东西,你都是要去的,是强制的。国内的话,如果你是工程师的话,就要主动和其他部门或者公司其他职能部门多沟通和合作,不要只是简单地埋头写代码。&/p&&br&&p&&b&3.行业趋势分析&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/7b36cccd32114_b.jpg& data-rawwidth=&883& data-rawheight=&502& class=&origin_image zh-lightbox-thumb& width=&883& data-original=&https://pic3.zhimg.com/7b36cccd32114_r.jpg&&&/figure&&p&看未来和趋势,而不是眼前。这点我觉得是学生事情刚踏入工作的时候最容易犯的错误。根本原因是学生时代一般都没钱也没太多眼界,所以开始挣钱了之后,觉得随便一些收入很容易满足,从而settle down下来。我看到很多新毕业生在挑公司或者挑工作的时候,看得不是未来(趋势),而只看眼前。很典型的例子就是当年我加入Facebook的时候,旁边同学问我说为什么不去Google或者Apple,那时他们的Android和iPhone,还有搜索和Mac业务如日中天,去一个社交网站干嘛?(当时Facebook可没有Instagram,Whatsapp和Oculus VR)甚至还有人有了Facebook的offer和微软的offer或者Google的offer,最后选择去了Google的。也有人只看工资和现金,对股票和option不去研究甚至摆出一副不在乎的态度的。甚至还有人说 Google 食堂的菜更多,说Google因为有游泳池或者免费的洗衣机,真让人哭笑不得。创业路上有一句话叫做顺势而为。看清以后发展的趋势非常重要,而且你在这个公司或者这个领域要在&strong&起步之前&/strong&(看清楚,是之前)就赶紧跳上去;这样才能最大限度地借势公司的成长(而不是在公司已经飞得很高的时候上去)。这些道理说出来大家好像都很明白,但是在亲自选择的时候很难不犯错误,因为人们总是不愿意思考以后的不确定性而趋向于选择当下的安逸。不然这里问几个问题?你是选择 BAT 还是创业公司? 是选择 互联网金融的领域还是O2O领域?VR/AR 是走向爆发还是扯淡?(对的,您要思考!同学)&/p&&p&&b&4.分清工作的优先级&/b&&/p&&br&&p&Prioritize your tasks:(给英文小白翻译下:分清自己工作的优先级)具体说来就是:学习上的课程是有限的,作业也有有限的,而且还有相对明确的deadline和最后一个期末考试;考试完结后,几乎学业清空一段时间。但是在工作上你会发现你没有一个类似暑假或者寒假的东西,另外最可怕的是你的活是干不完的 --- 对的,是无穷无尽的。特别你是在一个上升期的互联网公司的话,给你任务的速度很多时候是超过你的处理速度的。所以这个时候,你在接到一个被分配的任务或者一个email要求你干什么的时候,你不是要马上可以做,而是要强迫自己停顿下,分清现在这个任务的优先级,然后分配好开始时间,之后再开始做。这点尤其重要!特别当看到一个简单或者routine的任务被email或者tower上分配来的时候,不要因为任务简单就马上跳上去干,不然这样极可能被简单重复劳动把自己的时间全部占光,最后没来得及干重要的事情,或者没有精力去思考更加长远更有影响力的事情。所以,重申一次,去做impact和urgency最高的事情(这种事情一般来说不是很愉悦,甚至是比较棘手或者说是无从下手的事情),而把简单重复的活尽量后排(或者delegate出去)。这时你才会发现你的忙碌是有意义的,而不是伪工作(pseudo work)。我常常看到一些毕业不久的人每天都很忙,但却没有抓住重点,只是为了忙碌而忙碌,或者用更加贴切的话描述是:“为了感动自己而忙碌”。很多时候这样的忙碌,最后都是一个屁。之前在Facebook里,对于这样的同事有一个称号叫做“pseudo worker”,领导的职责是直接给他们透彻的反馈,让他们认清自己工作的impact最大化的地方到底在哪儿,同时告诫他们要忍住低impact的简单任务的诱惑。对的,那些垃圾任务有着一种诱惑;诱惑着没有定力的人一直去做,一直去做,感觉自己特别有成就感,特别“忙碌和充实”。所以要小心! 在国内创业路上也有很多这样的创始人(或者cofounders),他们自己的方向可能没怎么想清楚,或者路线制定有错,却一天到晚在朋友圈晒自己和同事们的加班,觉得这样的“忙碌”很充实。其实这是一种很可怕而且对团队极不负责的做法。一般在工作时长惊人但又没有unicorn估值的公司里,我总觉得加班是一种羞耻,是团队领导不会分优先级或者战略不明确的表现;如果创始人还一直在那里秀加班来感动自己的话,我的建议是“尽早离开这样的公司”。同时我还敢打赌,90%这样的公司在加班(和日常工作时间里)的效率非常低。&/p&&br&&p&&b&5.工作不是你的全部&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/a388cef1

我要回帖

更多关于 百度浏览器v6.5 的文章

 

随机推荐