<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>杂谈 on 庞玉栋个人博客</title><link>https://pangyd.com/categories/%E6%9D%82%E8%B0%88/</link><description>Recent content in 杂谈 on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 18 Sep 2026 19:53:39 +0800</lastBuildDate><atom:link href="https://pangyd.com/categories/%E6%9D%82%E8%B0%88/index.xml" rel="self" type="application/rss+xml"/><item><title>如果代码按行付费，会有什么好玩的事情发生？</title><link>https://pangyd.com/post/213/</link><pubDate>Thu, 28 Mar 2019 16:09:54 +0800</pubDate><guid>https://pangyd.com/post/213/</guid><description>&lt;p>&lt;strong>&lt;span>程序员联盟发布了一条消息：&lt;/span>&lt;/strong>&lt;span>以后我们的代码要&lt;span>按行收费&lt;/span>。客户们立即就炸了锅，按代码收费？那你程序员不是想怎么写就怎么写，我们让你们做个项目，你写个空行，写点注释什么的，谁来管?&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;img data-type="gif" data-src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" class=" __bg_gif" data-ratio="1" data-w="300" _width="100%" src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" data-order="1" data-fail="0">&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;br>&lt;/p>&lt;p>&lt;strong>&lt;span>物竞天择。&lt;/span>&lt;/strong>&lt;span>有人有需求就立即有人响应。正当这些客户无所适从的时候，一个职业产生了：代码缩行师。客户在审查项目交付的时候会先去缩行事务所请一位缩行师。缩行师的职责就是，在保证不改变原有系统功能的前提下，将程序最大程度的缩减行数，缩行师按照缩减行数的百分之
 10 收费。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong>&lt;span>缩行师&lt;/span>&lt;/strong>&lt;/span>&lt;span>是程序员最大的天敌。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;img data-type="gif" data-src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" class=" __bg_gif" data-ratio="0.564" data-w="500" src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" data-order="2" data-fail="0">&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>缩行师也是分等级的，最低级的缩行师只能缩缩空行，挪一挪括号，一般人都能做，大抵是被程序员看不起的，往上一级就要稍微懂一点编程知识了，知道怎么把定义的变量合到一行，怎么去掉可以去掉的括号，他们已经一脚踏入了领域和空间的境界了，他们许多是程序员做不下去为了生计讨口饭吃，倘若搞好客户关系，也能活的很滋润。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>再往上一级，这些人是缩行师界的精英，而且随时可以成为最优秀的程序员，他们把无聊的体力工作交给下边的人去做，自己则和程序员斗智斗勇，“你这个变量没必要定义”，“你这两处的功能重复了，回去重构一下”，“你这个是自己造轮子，去找别人开源写好的”。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>他们有的曾经是最好的程序员，有的是因为忍受不了缩行师的百般挑刺，无奈转行，有的是因为满足内心找茬的欲望。他们有的是从事多年的缩行师，从学徒起一步一步坐起，扎扎实实的走到现在的地位，这个级别的缩行师是各大缩行事务所争抢的对象。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;img data-type="gif" data-src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" class=" __bg_gif" data-ratio="0.546" data-w="500" src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" data-order="3" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>每个客户都以邀请到他们为荣，预约的人多了，事务所开始准备&lt;strong>“缩号”&lt;/strong>，客户只有摇到了缩号才能有幸邀请到这些人，有的客户更是为专家缩号大打出手，于是又催生了一种叫&lt;strong>“缩牛”&lt;/strong>的职业，不再赘述。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>他们某种程度上已经达到了缩行师的顶峰，但还有一种传说中的存在，他们是打破规则的存在，如果你侥幸看到他们的杰作，你就会发现上面提到的都是浮云。一行，只需要一行就够了，什么工程，什么项目，只需要一行。jQuery.min.js 就是他们的杰作。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>有一个站在巅峰的男人曾经应拉里
 · 佩奇的邀请将谷歌的所有代码写成了一行，并且能完整的实现了谷歌现有的所有功能，人们甚至发现谷歌搜索快了将近 
30%。后来有华尔街和硅谷的资深从业者看到这行代码后久久不能平静，对这行代码给出了 5600 
亿美元的估值，当然这行代码一般人是看不完的，据说这行代码的长度可以从加州连接到 M31 星系。&lt;/span>&lt;/p>&lt;p>&lt;span>程序员的生活变得越来越艰难，程序员联盟本身的福祉：变成了灾难，尽管随着代码的行数减少，单行的价格在不断的升高，程序员行业的整体质量也在不断的提高，但依旧艰难。程序员联盟又做了一个艰难的决定：最终的代码每行不得多于
 200 字符。对于一般的程序，一行 200 字符足够了，即使一行内容长，也可以分行解决。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;img data-type="gif" data-src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" class=" __bg_gif" data-ratio="0.75" data-w="800" src="https://pangyd.com/uploads/2019/03/74c10f869f038762.gif" data-order="4" data-fail="0">&lt;/p></description></item><item><title>IT程序员被叫“码农”程序员你怎么看？</title><link>https://pangyd.com/post/205-it/</link><pubDate>Tue, 06 Nov 2018 14:07:36 +0800</pubDate><guid>https://pangyd.com/post/205-it/</guid><description>&lt;p style="text-align: start">在几年之前，”码农“还只是行业内大家互相调侃的称谓，感觉现在几乎所有行业的人都喊IT工程师“码农”。“码农”反而成为了官方称呼了。感觉这不是一个好事，影响学生们对这个行业的看法，感觉好学校的学生都不愿意做技术了。技术大拿们该不该号召大家不要再以码农自称了？&lt;/p>&lt;p style="text-align: start">&lt;br>&lt;/p>&lt;p style="text-align: start">预料之内，这个话题引来众多程序员的讨论，下面摘选了10个比较有代（有）表（意）性（思）的回答：&lt;/p>&lt;p style="text-align: center">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-size="700|569">&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员一：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>歧视农名是不对的！&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员二：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>“码农”比“码畜”好听多了。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员三：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>你多给我一倍薪水，叫我孙子都行。&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员四：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>我们好歹还是人，产品和设计已经是狗了。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员五：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>码农算是好的，硅工是我等打磨芯片的民工的昵称。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员六：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>一位长者告诉我们“中国有句古话,叫做闷声发大财。”&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员七：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>这有什么？有些人还巴不得大家都说他是人民公仆呢。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员八：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>我们公司的美术还管我叫做“打字员”呢，满满的恶意啊&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员九：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>我们每天研究技术，哪有心思管这些，小屁孩们爱来不来。现在码农工资节节高升，正说明了人还不够。等人太多了，工资就会下跌，到时候我们就知道中国需要多少码农了。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员十：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>一年工作经验的java程序员在北京可以拿到8k+以上（保守估计），码农通常智力都不低，少数码农有交际困难，不过多数都没有。这么一群高收入高智力的人群会被人鄙视？别闹了，我们只是自嘲而已，真的有哪个文科生来嘲笑我们，我们绝对会不择手段的在各个方面碾压过去的。trust
 me&lt;/span>&lt;/p></description></item><item><title>OSI七层模型</title><link>https://pangyd.com/post/201-osi/</link><pubDate>Fri, 12 Oct 2018 11:07:51 +0800</pubDate><guid>https://pangyd.com/post/201-osi/</guid><description>&lt;p>&lt;span>OSI模型是开放系统互连参考模型，为开放式的互连信息提供一种功能的框架。&lt;span>举个栗子，你通过计算机向其他人传递某一个信息的时候，要保证信息正确准确的传递到他的计算机上，就要遵守一定的协议。否则，他的计算机可能就不能识别你的信息。&lt;/span>&lt;/span>&lt;span>这个协议是人为建立的，在1979年国际标准化组织建立了一个分委会来专门研究一种用于开放系统的体系结构，用来定义连接异种计算机的标准主体结构。&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;/span>&lt;span>同层之间的通信规则和约定被称之为协议。这个协议贯彻了计算的硬件和软件。&lt;/span>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>第一层：物理层&lt;/span>&lt;/p>
&lt;h3>&lt;span>为设备之间的信息传输提供可靠环境，那么这个环境是什么呢？&lt;br>
就是如：同轴电缆，插头，接收器，水晶头，网线等。可以在通信的两个数据终端的设备之间连接起来形成一条通路。&lt;br>
再说下这个协议中的某一项规定：比如eiars-232-c及rs-449就可以兼容于100序列线上。&lt;/span>&lt;/h3>
&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>第二层：数据链路层&lt;/span>&lt;/p>
&lt;p>&lt;span>提供数据的传送服务。这里涉及到一个信息就是帧，它是数据传输的单元，不同的协议帧的长短也不同。它还有差错恢复，流量控制的功能（这个指的是硬件）&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;span>ISO1745--1975 、&lt;/span>&lt;span>&lt;span>ISO7776 、&lt;/span>&lt;span>&lt;span>ISO3309--1984&amp;nbsp;&lt;/span>&lt;span>就是这一层的三种不同协议，而每一个协议帧的长短也是不同的。&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;span>我们常见的链路层产品就是网卡，网桥等。&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;span>&lt;span>第三层：网络层&amp;nbsp;&lt;/span>&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>它的作用是路由的选择，网络的激活和终止。它还有的一个重要功能就是在一条数据链路上复用多条网络连接，大多采用的是分时复用的技术。&lt;/span>&lt;/p>
&lt;p>&lt;span>我们常见的是路由器、网关等&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>第四层：传输层&lt;/span>&lt;/p>
&lt;p>&lt;span>它是两台计算机经过网络进行数据通信时最基础的端到端的一个层次。它的服务满足了传送质量，传达速度，传送费用的不同需要。它还具有差错恢复，流量控制的功能（这个指的是软件）&lt;/span>&lt;/p>
&lt;p>&lt;span>很多时候我们会发现QQ聊天的速度很快，但是我们上网速度就很慢，这就是因为QQ使用UDP协议，没有纠错功能，而网络的传输使用的是TCP协议，它的纠错功能就会导致传输速度变慢。&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>第五层：会话层&lt;/span>&lt;/p>
&lt;p>&lt;span>它的服务可使应用建立和维持会话。再举个栗子：就像两个人打电话，一个人说，对方听到后回应他，这就是会话层在发挥作用，它能够使信息传递时保持同步，并按次序进行。&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>第六层：表示层&lt;/span>&lt;/p>
&lt;p>&lt;span>它包括数据的表示形式，文字，图形，图片等都有各自的格式，就像图片的格式有JPG，GIF等。&lt;/span>&lt;/p>
&lt;p>&lt;span>还有就是数据含义，就是数据的符号&lt;/span>&lt;/p>
&lt;p>&lt;span>这一层的作用就是为异种机通信提供一种公共语言，以便相互操作。例如，IBM主机使用EBCDIC编码，而大部分的PC机使用的是ASCII码。这就要表示层来完成这一转换。&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>第七层：应用层&lt;/span>&lt;/p>
&lt;p>&lt;span>实现应用进程之间的信息交换。同时还有一系列的业务处理所需要的服务功能。像文件的传送，访问和管理，打印服务都是属于应用层。&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>
&lt;p>&lt;span>七层模型是很抽象的一个概念。&lt;/span>&lt;span>一般情况下，&lt;span>物理层，数据链路层，网络层对应的是一个设备，&lt;/span>这个设备在某一层就有某种功能，而&lt;span>传输层，会话层，表示层对应的是协议&lt;/span>，而&lt;span>应用层就是使用什么样的软件&lt;/span>。&lt;/span>&lt;/p></description></item><item><title>大数据行业就业指南</title><link>https://pangyd.com/post/200/</link><pubDate>Mon, 01 Oct 2018 09:00:25 +0800</pubDate><guid>https://pangyd.com/post/200/</guid><description>&lt;p>
&lt;/p>&lt;p align="center">&lt;b>&lt;a name="_Toc518382491">大数据行业就业指南&lt;/a>&lt;/b>&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>大数据开发工程师&lt;span lang="EN-US">/&lt;/span>大数据运维&lt;span lang="EN-US">/Hadoop&lt;/span>开发：&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>熟悉&lt;span lang="EN-US">Hadoop&lt;/span>生态圈（
&lt;span lang="EN-US">MapReduce&lt;/span>，&lt;span lang="EN-US">hdfs&lt;/span>，&lt;span lang="EN-US">Hive&lt;/span>，&lt;span lang="EN-US">Spark&lt;/span>等相关组件），&lt;span lang="EN-US">liunx&lt;/span>（&lt;span lang="EN-US">shell&lt;/span>脚本）相关技术以及对源码有深入认识，熟悉&lt;span lang="EN-US">mysql&lt;/span>数据库等，掌握&lt;span lang="EN-US">JAVA&lt;/span>语言或者&lt;span lang="EN-US">python&lt;/span>语言 （有的公司要求掌握&lt;span lang="EN-US">Scala&lt;/span>语言，流式处理框架使用经验，熟悉&lt;span lang="EN-US">Tableau&lt;/span>报表设计&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">&amp;nbsp;&lt;/span>&lt;/p>
&lt;p>数据采集工程师&lt;span lang="EN-US">/&lt;/span>网络爬虫工程师&lt;span lang="EN-US">/&lt;/span>反爬虫工程师&lt;span lang="EN-US">:&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">&lt;span>&amp;nbsp; &lt;/span>&lt;/span>熟悉&lt;span lang="EN-US">Selenium, phantomjs, scrapy&lt;/span>等自动化测试工具，以及爬虫框架，精通&lt;span lang="EN-US">Java/Objective-C/python&lt;/span>等至少一种语言，了解各种前端技术，包括&lt;span lang="EN-US">XHTML/XML/CSS/JavaScript/AJAX&lt;/span>等；熟悉正则表达式和&lt;span lang="EN-US">XPATH&lt;/span>，能够从结构化或非结构化数据中获取信息；熟悉&lt;span lang="EN-US">DDMS&lt;/span>、&lt;span lang="EN-US">Instruments&lt;/span>，&lt;span lang="EN-US">Charles&lt;/span>，&lt;span lang="EN-US">Fildder&lt;/span>等抓包工具&lt;span lang="EN-US">;&lt;/span>，熟悉网络编程，对&lt;span lang="EN-US">TCP/IP&lt;/span>有深入理解，精通&lt;span lang="EN-US">MySQL&lt;/span>或&lt;span lang="EN-US">PostgreSQL&lt;/span>；熟悉&lt;span lang="EN-US">Redis&lt;/span>或&lt;span lang="EN-US">MongoDB&lt;/span>；了解&lt;span lang="EN-US">linux&lt;/span>优先&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>大数据分析工程师&lt;span lang="EN-US">/&lt;/span>统计建模师&lt;span lang="EN-US">/&lt;/span>数据管理&lt;span lang="EN-US">/&lt;/span>数据统计&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span>&lt;/span>熟悉&lt;span lang="EN-US">R/Spark/Python&lt;/span>或&lt;span lang="EN-US">C/C++&lt;/span>等至少一个常用语言；以机器学习、深度学习、复杂网络、自然语言处理等其中一种或几种模型见长；对建模技术的前沿探索有热情，优秀的学习能力和逻辑思考能力；对风险管理、用户生命周期管理、或不同垂直领域有深入研究，对各式海量数据分析与挖掘有强烈兴趣。具备&lt;span lang="EN-US">ETL&lt;/span>数据处理能力，有经验者优先，优秀的逻辑思维能力，和数据敏感度，可从海量数据中日趋分析并反推业务逻辑，优化核心业务流程；&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>数据可视化工程师：&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">.&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span>&lt;/span>理解&lt;span lang="EN-US">W3C&lt;/span>标准与&lt;span lang="EN-US">ES&lt;/span>规范，熟悉&lt;span lang="EN-US">Web&lt;/span>语义化，掌握盒模型、常用布局以及浏览器兼容性；熟练掌握各项&lt;span lang="EN-US">Web&lt;/span>前端技术&lt;span lang="EN-US"> (HTML/CSS/Javascript) &lt;/span>，了解&lt;span lang="EN-US">svg&lt;/span>，&lt;span lang="EN-US">canvas&lt;/span>，&lt;span lang="EN-US">webgl&lt;/span>技术；熟练掌握&lt;span lang="EN-US">JET Charts/ECharts/HighCharts/D3.js/Three.js&lt;/span>等图形库熟练使用可视化&lt;span lang="EN-US">BI&lt;/span>工具及前端工具，具有计算机图形学理论基础，熟悉数据可视化相关基础算法；熟悉&lt;span lang="EN-US"> HTTP
&lt;/span>协议及缓存，了解基本的浏览器渲染及网络传输过程，掌握&lt;span lang="EN-US">Java/python&lt;/span>等一门语言，有前端开发经验&lt;span lang="EN-US">/&lt;/span>大规模数据存储，处理经验者优先&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;/p></description></item><item><title>程序员相爱相杀鄙视指南</title><link>https://pangyd.com/post/181/</link><pubDate>Sat, 01 Sep 2018 19:00:34 +0800</pubDate><guid>https://pangyd.com/post/181/</guid><description>&lt;p>有人的地方就有江湖。在互联网技术世界里，身为中流砥柱的程序员们，看似每天都坐在屏幕前，两耳不闻公司事，一心苦练编程功。殊不知，在“技术至上”的程序世界，早已暗波汹涌，一条条相爱相杀的鄙视链盘根错节，江湖的争斗久久未分出胜负…&lt;/p>&lt;p>相信吃瓜群众都知道，编程语言是程序员的立身之本，然而，很少有人知道，不同的编程语言出自各派、功能不一，它更代表了程序员在江湖上的地位高低。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>程序语言太复杂，一旦选不好，就会落入鄙视链的底层！&lt;/p>&lt;p>最心疼的还是 PHP 工程师，明明人家也是为公司奉献很多的，却遭到全体的鄙视。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>如果你觉得程序员的江湖仅仅只有这些，那你就错了，就拿到底是 Tab 键缩进还是 Space 键缩进来说，就能引起一众程序员争执半天，要知道，理科男一旦认真起来也是很拼的！从九月初沪江发布的《程序员非正式生存指南》来看，多数程序员还是偏爱 Tab 键的。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>tab 大战空格键，轻松 KO 一边倒&lt;/p>&lt;p>Tab vs Space 的大战刚刚平息，硬件配置的军备赛又将上演。俗话说得好：有纹身的都怕热，用苹果的都没兜。可见硬件配置对于显示地位的重要性，在程序员的世界也不例外，程序员的鄙视链有愈演愈烈之势。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>面对程序员对设备的执着，老板的心在滴血：养活一个程序员实在是太难了！除了设备的比拼，程序员职场世界的“潜规则”也不少。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>不敢想象，这群看起来沉迷于“编程世界”里不能自拔的程序员们，连办公环境、座椅舒适度都要比。可怜那些站着写程序的工程师，虽然辛苦，依然没有阻挡其写代码的热情，这股热情，成为其鄙视其他工程师的最大优势。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>程序猿、设计狮、产品狗之间的相爱相杀也早已成为互联网公司的家常便饭，面对这样的三角鄙视链，只想对广大程序员们道一声：“保重身体，来日再战！”&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>虽然程序员男性居多，但依然有一部分女性冲破阻碍，成为一名光荣的程序媛，在这个男女比例 9:1 的世界里努力奋斗着。既然同为程序员，相互扶持才能共同进步。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>看了这么多鄙视链，只想问最厉害的程序员到底是谁？！&lt;/p>&lt;p>铛！&lt;/p>&lt;p>铛！&lt;/p></description></item><item><title>re正则表达式学习</title><link>https://pangyd.com/post/194-re/</link><pubDate>Wed, 01 Aug 2018 14:24:09 +0800</pubDate><guid>https://pangyd.com/post/194-re/</guid><description>&lt;p>&lt;/p>&lt;p>
&lt;/p>&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">Python&lt;/span>&lt;/span>&lt;span>&lt;span>环境：&lt;span lang="EN-US">3.6&lt;/span>&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>
&lt;/p>&lt;p style="text-align: left" align="left">&lt;span>&lt;span>需要的库：&lt;span lang="EN-US">re&lt;/span>正则表达式&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span>正则表达式的学习&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">1&lt;/span>&lt;/span>&lt;span>&lt;span>，原子时正则表达式中最基本的组成单位，每个正则表达式至少要包含一个原子，常见的原子有以下几类：&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span>普通字符作为原子使用，非打印字符作为原子使用，通用字符作为原子，原子表&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;pre>&lt;span>普通字符作为原子：比如数字大小写字符，下划线等 ：&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/pre>&lt;pre>&lt;span lang="EN-US">pattern = &lt;/span>&lt;b>&lt;span lang="EN-US">'yue'&lt;br>
&lt;p>&lt;/span>&lt;/b>&lt;span lang="EN-US">string=&lt;/span>&lt;b>&lt;span lang="EN-US">&amp;lsquo;&lt;a href="https://yum.iqianyue.com">https://yum.iqianyue.com&lt;/a>&amp;rsquo;&lt;br>
&lt;/span>&lt;/b>&lt;span lang="EN-US">result=re.search(pattern,string)&lt;br>
&lt;/span>&lt;span lang="EN-US">print&lt;/span>&lt;span lang="EN-US">(result)&lt;/span>&lt;/pre>&lt;pre>&lt;span>输出：&lt;span lang="EN-US">&amp;lt;_sre.SRE_Match object; span=(16, 19), match=&amp;lsquo;yue&amp;rsquo;&amp;gt;&lt;span>&lt;span>&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/pre>&lt;pre>&lt;span>非打印字符：在字符串中用于格式控制的符号，比如换行符：&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/pre>&lt;pre>&lt;span lang="EN-US">pattern = &lt;/span>&lt;b>&lt;span lang="EN-US">&amp;rsquo;&lt;/span>&lt;/b>&lt;b>&lt;span lang="EN-US">\n&lt;/span>&lt;/b>&lt;b>&lt;span lang="EN-US">&amp;rsquo;&lt;br>
&lt;/span>&lt;/b>&lt;span lang="EN-US">string=&lt;/span>&lt;b>&lt;span lang="EN-US">&amp;lsquo;&amp;lsquo;&amp;lsquo;&lt;a href="https://yum.iqianyue.com">https://yum.iqianyue.com&lt;/a>&lt;br>
&lt;a href="https://baidu.com">https://baidu.com&lt;/a>&lt;br>
&amp;lsquo;&amp;rsquo;&amp;rsquo;&lt;br>
&lt;/span>&lt;/b>&lt;span lang="EN-US">result=re.search(pattern,string)&lt;/span>&lt;/pre>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span>输出结果：&lt;span lang="EN-US">&amp;lt;_sre.SRE_Match
object; span=(23, 24), match='\n'&amp;gt;&lt;/span>&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span>通用字符作为原子：既用一个原子就可以匹配一类字符&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">\w:&lt;/span>&lt;/span>&lt;span>&lt;span>匹配任意一个字母，数字，下划线&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">\W:&lt;/span>&lt;/span>&lt;span>&lt;span>匹配除字母，数字，下划线以外的任意一个字符&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">\d:&lt;/span>&lt;/span>&lt;span>&lt;span>匹配任意一个十进制数&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">\D:&lt;/span>&lt;/span>&lt;span>&lt;span>匹配除十进制数以外的任意一个其他字符&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">\s&lt;/span>&lt;/span>&lt;span>&lt;span>：匹配任意一个空白字符&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">\S:&lt;/span>&lt;/span>&lt;span>&lt;span>匹配除空白字符外的任意一个其他字符&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">Python %&lt;/span>&lt;/span>&lt;span>&lt;span>操作符&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;b>&lt;span lang="EN-US">%s &lt;/span>&lt;/b>&lt;span>字符串&lt;span lang="EN-US"> (&lt;/span>采用&lt;span lang="EN-US">str()&lt;/span>的显示&lt;span lang="EN-US">)&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;b>&lt;span lang="EN-US">%r &lt;/span>&lt;/b>&lt;span>字符串&lt;span lang="EN-US"> (&lt;/span>采用&lt;span lang="EN-US">repr()&lt;/span>的显示&lt;span lang="EN-US">)&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;b>&lt;span lang="EN-US">%c&lt;/span>&lt;/b>&lt;span lang="EN-US"> &lt;/span>&lt;span>单个字符&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;b>&lt;span lang="EN-US">%d&lt;/span>&lt;/b>&lt;span lang="EN-US"> &lt;/span>&lt;span>十进制整数&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;b>&lt;span lang="EN-US">%i &lt;/span>&lt;/b>&lt;span>十进制整数&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;b>&lt;span lang="EN-US">%f&lt;/span>&lt;/b>&lt;span lang="EN-US"> &lt;/span>&lt;span>浮点数&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;b>&lt;span lang="EN-US">%F&lt;/span>&lt;/b>&lt;span lang="EN-US"> &lt;/span>&lt;span>浮点数，与上相同&lt;span lang="EN-US">%% &lt;/span>字符&lt;span lang="EN-US">"%"&lt;/span>&lt;/span>&lt;/p>
&lt;pre>&lt;span lang="EN-US">pattern = &lt;/span>&lt;b>&lt;span lang="EN-US">'\wpython\w'&lt;br>
&lt;/span>&lt;/b>&lt;span lang="EN-US">string=&lt;/span>&lt;b>&lt;span lang="EN-US">'abcdfphp3145pythony_py'&lt;br>
&lt;/span>&lt;/b>&lt;span lang="EN-US">result=re.search(pattern,string)&lt;/span>&lt;/pre>
&lt;p style="text-align: left" align="left">&lt;span>输出：&lt;span lang="EN-US">&amp;lt;_sre.SRE_Match object; span=(11, 19), match='5pythony'&amp;gt;&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span>原子表：原子表用&lt;span lang="EN-US">[ ]&lt;/span>表示，匹配时会取该原子表中的任意一个原子进行匹配&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">[abc]:&lt;/span>&lt;/span>&lt;span>&lt;span>表示之匹配&lt;span lang="EN-US">a&lt;/span>或者&lt;span lang="EN-US">b&lt;/span>或者&lt;span lang="EN-US">c&lt;/span>，&lt;span lang="EN-US">abc&lt;/span>这三个原子之间地位平等&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">[^]&lt;/span>&lt;/span>&lt;span>&lt;span>代表除了中括号里面的原子均能进行匹配：例如&lt;span lang="EN-US">[^xyz]py&lt;/span>能匹配&lt;span lang="EN-US">apy &lt;/span>但是却不能匹配&lt;span lang="EN-US">xpy&lt;/span>&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span lang="EN-US">2&lt;/span>&lt;/span>&lt;span>&lt;span>，元字符&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p style="text-align: left" align="left">&lt;span>&lt;span>元字符就是正则表达式中具有特殊含义的字符，比如重复&lt;span lang="EN-US">N&lt;/span>次前面的字符等&lt;/span>&lt;/span>&lt;span>&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p></description></item><item><title>关联分析规则</title><link>https://pangyd.com/post/198/</link><pubDate>Tue, 10 Jul 2018 10:30:25 +0800</pubDate><guid>https://pangyd.com/post/198/</guid><description>&lt;p>&lt;span>&lt;span>&lt;span>&lt;strong>关联规则是指从大量数据中挖掘出有价值的数据项之间的相关关系，用关联规则表示出来，从而为当前市场经济发展提供准确的决策手段。&lt;/strong>&lt;/span>&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;span>&lt;strong>关联规则中三个重要的衡量指标：&lt;/strong>&lt;/span>&lt;/span>&lt;/p>&lt;span>&lt;span>
&lt;p>&lt;span>（&lt;span lang="EN-US">1&lt;/span>）支持度（&lt;span lang="EN-US">support&lt;/span>）&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>支持度是指在所有项目集中&lt;span lang="EN-US">{X, 
Y}&lt;/span>出现的可能性，即项目集中同时含有&lt;span lang="EN-US">X&lt;/span>和&lt;span lang="EN-US">Y&lt;/span>的概率，记为&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;span>；&lt;/span>&lt;/p>
&lt;p>&lt;span>（&lt;span lang="EN-US">2&lt;/span>）置信度（&lt;span lang="EN-US">confidence&lt;/span>）&lt;span lang="EN-US">&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>置信度表示在先决条件&lt;span lang="EN-US">X&lt;/span>发生的条件下，关联结果&lt;span lang="EN-US">Y&lt;/span>发生的概率&lt;span lang="EN-US">,&lt;/span>记为&lt;span>；&lt;/span>&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span>（&lt;span lang="EN-US">3&lt;/span>）提升度（&lt;span lang="EN-US">lift&lt;/span>）&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;/span>&lt;span>提升度表示在含有&lt;span lang="EN-US">X&lt;/span>的条件下同时含有&lt;span lang="EN-US">Y&lt;/span>的可能性与没有&lt;span lang="EN-US">X&lt;/span>这个条件下项目集中含有&lt;span lang="EN-US">Y&lt;/span>的可能性之比，记为&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;span>。&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;/span>&amp;nbsp;&lt;/p>&lt;/span>&lt;/span>
&lt;p>&lt;span>&lt;span>&lt;strong>关联规则挖掘&lt;/strong>&lt;strong>总体过程主要包括两步：&lt;/strong>&lt;/span>&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;span>&lt;strong>&amp;nbsp;&amp;nbsp; &lt;/strong>&lt;/span>&lt;/span>&lt;span lang="EN-US">&lt;span>（1）&lt;/span>&lt;/span>&lt;span>找出所有支持度≥最小支持度的频繁项目集；&lt;/span>&lt;/p>
&lt;p>&lt;span>&amp;nbsp;&amp;nbsp; &lt;/span>&lt;span lang="EN-US">&lt;span>（2）&lt;/span>&lt;/span>&lt;span>由频繁项目集生成满足≥最小置信度的关联规则。&lt;/span>&lt;/p>
&lt;p>&lt;span>&lt;strong>构造Apriori算法模型：&lt;/strong>&lt;/span>&lt;/p>
&lt;p>&lt;span>关联规则挖掘算法中最经典的是&lt;span lang="EN-US">Apriori&lt;/span>算法，它利用逐层搜索的迭代方法来完成频繁项集的挖掘，即利用&lt;/span>&lt;span lang="EN-US">(&lt;i>k&lt;/i>-1)-&lt;/span>&lt;span>项集产生&lt;/span>&lt;i>&lt;span lang="EN-US">k&lt;/span>&lt;/i>&lt;span lang="EN-US">-&lt;/span>&lt;span>项集。具体做法如下：&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">&lt;span>（1）&lt;/span>&lt;/span>&lt;span>找出所有的频繁&lt;/span>&lt;span lang="EN-US">1-&lt;/span>&lt;span>项集，记为&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;span>；&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">&lt;span>（2）&lt;/span>&lt;/span>&lt;span>利用&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;span>来挖掘频繁&lt;/span>&lt;span lang="EN-US">2-&lt;/span>&lt;span>项集&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;span>，如此不断循环，直至找到所有的频繁&lt;/span>&lt;i>&lt;span lang="EN-US">k&lt;/span>&lt;/i>&lt;span lang="EN-US">-&lt;/span>&lt;span>项集为止；&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;/p>
&lt;p>&lt;span lang="EN-US">&lt;span>（3）&lt;/span>&lt;/span>&lt;span>计算每类中各个规则的支持度，找出所有支持度≥最小支持度的规则&lt;/span>&lt;span>即为关联规则。&lt;/span>&lt;span lang="EN-US">&lt;/span>&lt;/p></description></item><item><title>未来Kotlin取代Java或成为可能</title><link>https://pangyd.com/post/189-kotlinjava/</link><pubDate>Sat, 30 Jun 2018 21:04:58 +0800</pubDate><guid>https://pangyd.com/post/189-kotlinjava/</guid><description>&lt;p>未来Kotlin取代Java或成为可能&amp;nbsp;&lt;/p>&lt;p>Java遇上大麻烦了!一种新的编程语言Kotlin或将取代Java成为Android开发中的主要语言。不过对于外行人来说，Kotlin是什么鬼?Kotlin真的会取代Java吗?今天小编就来说说关于Kotlin的那些事。&amp;nbsp;&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;p>Kotlin取代Java是真的吗?&amp;nbsp;&lt;/p>&lt;p>Kotlin 是一个基于 JVM 的新的编程语言，由 JetBrains 开发。Kotlin可以编译成Java字节码，也可以编译成JavaScript，方便在没有JVM的设备上运行。目前Kotlin已正式成为Android官方开发语言，未来Kotlin取代Java还是有希望的。&amp;nbsp;&lt;/p>&lt;p>随着Kotlin的诞生及应用，市场上流传着Kotlin取代Java成为Android开发的主要语言。以下是小编整理的Kotlin的优点及不足：&amp;nbsp;&lt;/p>&lt;p>Kotlin的优点：&amp;nbsp;&lt;/p>&lt;p>对于 Android 开发者而言，Kotlin 有很多优点。Kotlin 完全兼容现有的 Java 工具和函数库，同时能够很好的在 Android Studio 中使用。最明显的是它的类型系统和对空类型的处理，Kotlin 有助于公平的竞争环境。&amp;nbsp;&lt;/p>&lt;p>Kotlin 迈出了 Android 开发的一大步，从一个开发者的经验来看，Kotlin 是 Android 应用开发的未来。对于初学者来说，Kotlin 很简洁，它具备其他现代语言的特性，它由 JetBrains 这样很专业的团队进行持续的开发，同时一直有社区的支持，因为它是开源的!因此可见，未来Kotlin取代Java其实是有迹可循的。&amp;nbsp;&lt;/p>&lt;p>Kotlin的不足：&amp;nbsp;&lt;/p>&lt;p>Kotlin缺乏成熟的模式和广泛的实践，这样就造成了使用Kotlin编写的代码很难得到维护。另一方面来说，如果项目规模较大将很难引入 Kotlin，因为Kotlin 存在的主要问题：静态代码分析工具的缺乏和成熟设计模式的缺乏。从 Kotlin 缺乏静态代码分析工具可以看出来。&amp;nbsp;&lt;/p>&lt;p>虽然 Java 的静态代码分析工具不完美，但它们可以作为衡量技术债务的好指标。Java 工具不能用于 Kotlin，因为它们专门分析的是 Java 语言源码。综合来看，Kotlin取代Java的路还很长。&amp;nbsp;&lt;/p>&lt;p>当前Kotlin的应用已经令很多学习Java的人内心产生动摇，不过从技术面来说，Java的应用并不仅限于Android开发，目前Java被广泛应用于企业级网站开发、游戏开发等方面&lt;/p></description></item><item><title>程序员的日常</title><link>https://pangyd.com/post/190/</link><pubDate>Tue, 26 Jun 2018 11:31:21 +0800</pubDate><guid>https://pangyd.com/post/190/</guid><description>&lt;p>&lt;span>大神写的代码&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;span>自己写的代码&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p></description></item><item><title>程序员6大幽默的编程语录，比尔盖茨诠释了什么叫编程进度！</title><link>https://pangyd.com/post/188-6/</link><pubDate>Fri, 01 Dec 2017 21:23:53 +0800</pubDate><guid>https://pangyd.com/post/188-6/</guid><description>&lt;p>在很多人的印象当中，程序员是比较内向、呆板的。&lt;/p>&lt;p>实际上，这是一个很有幽默感的群体。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>下面w3cschool就让小伙伴们感受一下程序员们的幽默感，程序员幽默起来很吓人。&lt;/p>&lt;p>0、编程就像性一样:一时犯错,终生维护。——Michael Sinz&lt;/p>&lt;p>改bug是消除BUG的过程，编程就是将bug放进的过程。&lt;/p>&lt;p>你的代码写的有多聪明，你就要用更聪明的方式DEBUG。&lt;/p>&lt;p>正所谓魔高一尺，道高一丈。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>1、编程时要保持这种心态：就好象将来要维护你这些代码的人是一位残暴的精神病患者，而且他知道你住在哪。——MartinGolding&lt;/p>&lt;p>并非所有的程序员写的代码是易于维护的，有些程序员代码没有注释的习惯，或者违反了编程惯例，导致了代码难以维护。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>2、如果没能一次成功，那就叫它1.0版吧。&lt;/p>&lt;p>3、用代码行数来衡量程序的开发进度，就好比用重量来衡量飞机的制造进度。—— 比尔·盖茨&lt;/p>&lt;p>一直以来，很赞同一个观点：码20万行程序和编20万行工业级质量的代码，体验是完全不同的!&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>4、有的时候宁愿付钱让你周一在床上待着，也不想让你用这周剩下的时间去调试你在周一所写的代码。 —— 丹·所罗门&lt;/p>&lt;p>5、Talk is cheap, show me the code。——Linus之父&lt;/p>&lt;p>来看看神翻译：“废话少说，放码过来”。&lt;/p></description></item><item><title>请不要自称自己是程序员</title><link>https://pangyd.com/post/183/</link><pubDate>Mon, 27 Nov 2017 19:51:25 +0800</pubDate><guid>https://pangyd.com/post/183/</guid><description>&lt;p>&lt;span>每年都有无数年轻程序员，加入软件行业。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>他们在学校里学过编程，但是对这个行业的现实一无所知。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" class="" data-ratio="0.660377358490566" data-w="636" data-type="jpeg" width="333px" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>Patrick McKenzie&amp;nbsp;是美国一家小软件公司的老板，他写了一篇长文，介绍这个行业的一些实际情况。我看了以后很感慨，有些地方很受启发。我选择了一部分，翻译如下。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;h2>&lt;span>&lt;/span>&lt;/h2>&lt;p>&lt;/p>&lt;section class="" data-mpa-template-id="489541" data-mpa-color="#ffffff" data-mpa-category="title">&lt;section label="Copyright Reserved by ipaiban.com." donone="shifuMouseDown('shifu_t_016')" mpa-is-content="t">&lt;span>&lt;span>一、90% 的编程工作来自内部软件&lt;/span>&lt;/span>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>计算机专业的学生，可能有一种印象，觉得大部分程序员，都在编写公开出售的软件或者通用软件。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>这种看法是不对的。大部分程序员，实际上编写的是不公开的企业内部软件，比如追踪费用的软件、优化装运成本的软件、帮助记账的软件、设计新部件的软件、计算保单价格的软件、识别恶意订单的软件等等。各种各样的商业公司，开发内部软件，解决它们自己的问题。市场上对程序员的大部分需求来源于此，只有极少数程序员直接编写面向外部顾客的软件。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>内部软件的开发，通常非常乏味，令人厌倦。因为它们的技术复杂性低、技术决策非常保守、预算很少、缺乏长远考虑。但是，世界上大部分编程工作都是这种。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;h2>&lt;span>&lt;/span>&lt;/h2>&lt;p>&lt;/p>&lt;section class="" data-mpa-template-id="489541" data-mpa-color="#ffffff" data-mpa-category="title">&lt;section label="Copyright Reserved by ipaiban.com." donone="shifuMouseDown('shifu_t_016')" mpa-is-content="t">&lt;span>&lt;span>二、别人雇你的目的，是让你创造利润，不是让你编程&lt;/span>&lt;/span>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-type="gif" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-copyright="0" class=" __bg_gif" data-ratio="0.562" data-w="500" width="382px" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-order="0" data-fail="0">&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;br>&lt;/p>&lt;p>&lt;span>商业公司最关心的（或者说唯一在乎的）事情，就是增加收入、降低成本。因此，它们实际上需要的不是程序员，而是能够帮助它们增加收入、降低成本的人。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>开发优美的软件，解决技术难题，编写没有 bug 的代码，这些都不是商业公司的目的。它们雇佣你，是为了让你帮它们完成某个可以增加收入、降低成本的项目，而不是为了让你追求个人的软件成就。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>你对于公司的唯一价值，就在于能多大程度上为它们增加收入、降低成本。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;h2>&lt;span>&lt;/span>&lt;/h2>&lt;p>&lt;/p>&lt;section class="" data-mpa-template-id="489541" data-mpa-color="#ffffff" data-mpa-category="title">&lt;section label="Copyright Reserved by ipaiban.com." donone="shifuMouseDown('shifu_t_016')" mpa-is-content="t">&lt;span>&lt;span>三、不要自称为程序员&lt;/span>&lt;/span>&lt;/section>&lt;/section>&lt;p>&lt;/p></description></item><item><title>深入理解Java虚拟机到底是什么</title><link>https://pangyd.com/post/180-java/</link><pubDate>Fri, 24 Nov 2017 22:54:49 +0800</pubDate><guid>https://pangyd.com/post/180-java/</guid><description>&lt;p>什么是Java虚拟机&lt;/p>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1">&lt;p>作为一个Java程序员，我们每天都在写Java代码，我们写的代码都是在一个叫做Java虚拟机的东西上执行的。但是如果要问什么是虚拟机，恐怕很多人就会模棱两可了。在本文中，我会写下我对虚拟机的理解。因为能力所限，可能有些地方描述的不够欠当。如果你有不同的理解，欢迎交流。&lt;/p>&lt;p>我们都知道java程序必须在虚拟机上运行。那么虚拟机到底是什么呢？先看网上搜索到的比较靠谱的解释：&lt;/p>&lt;p>虚拟机是一种抽象化的计算机，通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构，如处理器、堆栈、寄存器等，还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息，使得Java程序只需生成在Java虚拟机上运行的目标代码（字节码），就可以在多种平台上不加修改地运行。&lt;/p>&lt;p>这种解释应该算是正确的，但是只描述了虚拟机的外部行为和功能，并没有针对内部原理做出说明。一般情况下我们不需要知道虚拟机的运行原理，只要专注写java代码就可以了，这也正是虚拟机之所以存在的原因--屏蔽底层操作系统平台的不同并且减少基于原生语言开发的复杂性，使java这门语言能够跨各种平台（只要虚拟机厂商在特定平台上实现了虚拟机），并且简单易用。这些都是虚拟机的外部特性，但是从这些信息来解释虚拟机，未免太笼统了，无法让我们知道内部原理。&lt;/p>&lt;p>从进程的角度解释JVM&lt;/p>&lt;p>让我们尝试从操作系统的层面来理解虚拟机。我们知道，虚拟机是运行在操作系统之中的，那么什么东西才能在操作系统中运行呢？当然是进程，因为进程是操作系统中的执行单位。可以这样理解，当它在运行的时候，它就是一个操作系统中的进程实例，当它没有在运行时（作为可执行文件存放于文件系统中），可以把它叫做程序。&lt;/p>&lt;p>对命令行比较熟悉的同学，都知道其实一个命令对应一个可执行的二进制文件，当敲下这个命令并且回车后，就会创建一个进程，加载对应的可执行文件到进程的地址空间中，并且执行其中的指令。下面对比C语言和Java语言的HelloWorld程序来说明问题。&lt;/p>&lt;p>首先编写C语言版的HelloWorld程序。&lt;/p>&lt;p>&lt;span>[cpp]&lt;/span>view plain copy&lt;/p>&lt;p>#include&lt;/p>&lt;p>#include&lt;/p>&lt;p>int main(void) {&lt;/p>&lt;p>printf("hello world\n");&lt;/p>&lt;p>return 0;&lt;/p>&lt;p>}&lt;/p>&lt;p>编译C语言版的HelloWorld程序：&lt;/p>&lt;p>&lt;span>[plain]&lt;/span>view plain copy&lt;/p>&lt;p>gcc HelloWorld.c -o HelloWorld&lt;/p>&lt;p>运行C语言版的HelloWorld程序：&lt;/p>&lt;p>&lt;span>[plain]&lt;/span>view plain copy&lt;/p>&lt;p>zhangjg@linux:/deve/workspace/HelloWorld/src$ ./HelloWorld&lt;/p>&lt;p>hello world&lt;/p>&lt;p>gcc编译器编译后的文件直接就是可被操作系统识别的二进制可执行文件，当我们在命令行中敲下 ./HelloWorld这条命令的时候， 直接创建一个进程， 并且将可执行文件加载到进程的地址空间中， 执行文件中的指令。&lt;/p>&lt;p>作为对比， 我们看一下Java版HelloWord程序的编译和执行形式。&lt;/p>&lt;p>首先编写源文件HelloWord.java ：&lt;/p>&lt;p>&lt;span>[java]&lt;/span>view plain copy&lt;/p>&lt;p>public class HelloWorld {&lt;/p>&lt;p>public static void main(String[] args) {&lt;/p>&lt;p>}&lt;/p>&lt;p>}&lt;/p>&lt;p>编译Java版的HelloWorld程序：&lt;/p>&lt;p>&lt;span>[java]&lt;/span>view plain copy&lt;/p>&lt;p>zhangjg@linux:/deve/workspace/HelloJava/src$ javac HelloWorld.java&lt;/p>&lt;p>zhangjg@linux:/deve/workspace/HelloJava/src$ ls&lt;/p>&lt;p>HelloWorld.class HelloWorld.java&lt;/p></description></item><item><title>Java 注解全面解析</title><link>https://pangyd.com/post/178-java/</link><pubDate>Wed, 22 Nov 2017 21:06:20 +0800</pubDate><guid>https://pangyd.com/post/178-java/</guid><description>&lt;p style="text-align: center">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-size="550|338">&lt;/p>&lt;p>注解定义看起来很像接口的定义。事实上，与其他任何接口一样，注解也将会编译成class文件。&lt;/p>&lt;blockquote>&lt;p>@Target(ElementType.Method)&lt;/p>&lt;p>@Retention(RetentionPolicy.RUNTIME)&lt;/p>&lt;p>public @interface Test {}&lt;/p>&lt;/blockquote>&lt;p>除了@符号以外，@Test的定义很像一个空的接口。定义注解时，需要一些元注解（meta－annotation），如@Target和@Retention&lt;/p>&lt;p>@Target用来定义注解将应用于什么地方（如一个方法或者一个域）&lt;/p>&lt;p>@Retention用来定义注解在哪一个级别可用，在源代码中（source），类文件中（class）或者运行时（runtime）&lt;/p>&lt;p>在注解中，一般都会包含一些元素以表示某些值。当分析处理注解时，程序可以利用这些值。没有元素的注解称为标记注解（marker annotation）&lt;/p>&lt;p>四种元注解，元注解专职负责注解其他的注解，所以这四种注解的Target值都是ElementType.ANNOTATION_TYPE&lt;/p>&lt;table width="736" class="layui-table">&lt;tbody>&lt;tr class="firstRow">&lt;th style="text-align: center">注解&lt;/th>&lt;th style="text-align: center">说明&lt;/th>&lt;/tr>&lt;tr>&lt;td>@Target&lt;/td>&lt;td>表示该注解可以用在什么地方，由ElementType枚举定义&lt;br data-filtered="filtered">CONSTRUCTOR：构造器的声明&lt;br data-filtered="filtered">FIELD：域声明（包括enum实例）&lt;br data-filtered="filtered">LOCAL_VARIABLE：局部变量声明&lt;br data-filtered="filtered">METHOD：方法声明&lt;br data-filtered="filtered">PACKAGE：包声明&lt;br data-filtered="filtered">PARAMETER：参数声明&lt;br data-filtered="filtered">TYPE：类、接口（包括注解类型）或enum声明&lt;br data-filtered="filtered">ANNOTATION_TYPE：注解声明（应用于另一个注解上）&lt;br data-filtered="filtered">TYPE_PARAMETER：类型参数声明（1.8新加入）&lt;br data-filtered="filtered">TYPE_USE：类型使用声明（1.8新加入）&lt;br data-filtered="filtered">PS：当注解未指定Target值时，此注解可以使用任何元素之上，就是上面的类型&lt;/td>&lt;/tr>&lt;tr>&lt;td>@Retention&lt;/td>&lt;td>表示需要在什么级别保存该注解信息，由RetentionPolicy枚举定义&lt;br data-filtered="filtered">SOURCE：注解将被编译器丢弃（该类型的注解信息只会保留在源码里，源码经过编译后，注解信息会被丢弃，不会保留在编译好的class文件里）&lt;br data-filtered="filtered">CLASS：注解在class文件中可用，但会被VM丢弃（该类型的注解信息会保留在源码里和class文件里，在执行的时候，不会加载到虚拟机（JVM）中）&lt;br data-filtered="filtered">RUNTIME：VM将在运行期也保留注解信息，因此可以通过反射机制读取注解的信息（源码、class文件和执行的时候都有注解的信息）&lt;br data-filtered="filtered">PS：当注解未定义Retention值时，默认值是CLASS&lt;/td>&lt;/tr>&lt;tr>&lt;td>@Documented&lt;/td>&lt;td>表示注解会被包含在javaapi文档中&lt;/td>&lt;/tr>&lt;tr>&lt;td>@Inherited&lt;/td>&lt;td>允许子类继承父类的注解&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>&lt;p>&lt;/p>&lt;section class="">&lt;section data-by="96weixin">&lt;section style="text-align: center">&lt;section>&lt;img data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-type="jpeg" class="" data-ratio="1.09" data-w="100" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/section>&lt;section>&lt;h2>&lt;span>2. 注解元素&lt;/span>&lt;/h2>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;span>– 注解元素可用的类型如下：&lt;/span>&lt;/p>&lt;p>– 所有基本类型（int,float,boolean,byte,double,char,long,short）&lt;/p>&lt;p>– String&lt;/p>&lt;p>– Class&lt;/p>&lt;p>– enum&lt;/p>&lt;p>– Annotation&lt;/p>&lt;p>– 以上类型的数组&lt;/p>&lt;p>如果使用了其他类型，那编译器就会报错。也不允许使用任何包装类型。注解也可以作为元素的类型，也就是注解可以嵌套。&lt;/p>&lt;p>元素的修饰符，只能用public或default。&lt;/p>&lt;p>&lt;span>– 默认值限制&lt;/span>&lt;/p>&lt;p>编译器对元素的默认值有些过分挑剔。首先，元素不能有不确定的值。也就是说，元素必须要么具有默认值，要么在使用注解时提供元素的值。&lt;/p>&lt;p>其次，对于非基本类型的元素，无论是在源代码中声明，还是在注解接口中定义默认值，都不能以null作为值。这就是限制，这就造成处理器很难表现一个元素的存在或缺失状态，因为每个注解的声明中，所有的元素都存在，并且都具有相应的值。为了绕开这个限制，只能定义一些特殊的值，例如空字符串或负数，表示某个元素不存在。&lt;/p>&lt;blockquote>&lt;p>@Target(ElementType.Method)&lt;/p>&lt;p>@Retention(RetentionPolicy.RUNTIME)&lt;/p></description></item><item><title>学习Java编程最有效的方法</title><link>https://pangyd.com/post/177-java/</link><pubDate>Tue, 21 Nov 2017 18:07:45 +0800</pubDate><guid>https://pangyd.com/post/177-java/</guid><description>&lt;p style="text-align: center">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-size="550|338">&lt;/p>&lt;section data-author="Wxeditor">&lt;article class="" data-author="Wxeditor">&lt;section>&lt;section>&lt;p>有很多的Java程序员，在初期学习时，通常会对如何学习而感到迷茫。下面我就来分析下如何学好Java编程，相信能帮助那些正在处于迷茫状态的初学者。&lt;/p>&lt;/section>&lt;/section>&lt;/article>&lt;/section>&lt;p>&lt;/p>&lt;section data-author="Wxeditor">&lt;article class="" data-author="Wxeditor">&lt;section>&lt;h3 class="">&lt;span>1、培养兴趣&lt;/span>&lt;/h3>&lt;/section>&lt;/article>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;span>兴趣是能够让你坚持下去的动力,如果只是把写程序作为谋生的手段的话，你会活的很累，多关心一些行业趣事，多想想盖茨。不是提倡天天做白日梦，但人要是没有了梦想，你觉得有味道吗？&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>可能像许多人一样，打打麻将，喝喝功夫茶，拜拜财神爷；每个月就有几万十几万甚至更多的进帐，凭空多出个"食利阶层"。你认为，这样有味道吗？有空多到一些程序员论坛转转，你会发现，他们其实很乐观幽默，时不时会冒出智慧的火花。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;/p>&lt;section data-author="Wxeditor">&lt;article class="" data-author="Wxeditor">&lt;section>&lt;h3 class="">&lt;span>2、要脚踏实地&lt;/span>&lt;/h3>&lt;/section>&lt;/article>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;span>快餐式的学习不可取，欲速则不达，浮躁是现代人最普遍的心态，能怪谁？也许是贫穷落后了这么多年的缘故，就像当年的大跃进一样，都想大步跨入共产主义社会。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。社会环境如是，我们不能改变，只能改变自己,闹市中的安宁，弥足珍贵。许多初学者C++/Java没开始学，立马使用VC/JBuilder,会使用VC/JBuilder开发一个HelloWorld程序，就忙不迭的向世界宣告，"我会软件开发了"，简历上也大言不惭地写上"精通VC/Java"。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>结果到软件公司面试时要么被三两下打发走了，要么被驳的体无完肤，无地自容。到处碰壁之后才知道捧起《Java编程思想》仔细钻研，早知如此何必当初呀。"你现在讲究简单方便，你以后的路就长了"，好象也是佛经中的劝戒。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;/p>&lt;section data-author="Wxeditor">&lt;article class="" data-author="Wxeditor">&lt;section>&lt;h3 class="">&lt;span>3、多实践，快实践&lt;/span>&lt;/h3>&lt;/section>&lt;/article>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;span>任何事情，一旦考虑好了，就要马上上路，不要等到准备周全之后，再去干事情。假如事情准备考虑周全了再上路的话，别人恐怕捷足先登了。Java软件开发是一门工程学科，注重的就是实践，"君子动口不动手"对软件开发人员来讲根本就是错误的，他们提倡"动手至上"，但别害怕，他们大多温文尔雅，没有暴力倾向，虽然有时候蓬头垢面的一副"比尔盖茨"样。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>有前辈高人认为，学习编程的秘诀是：编程、编程、再编程，笔者深表赞同。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>不仅要多实践，而且要快实践。我们在看书的时候，不要等到你完全理解了才动手敲代码，而是应该在看书的同时敲代码，程序运行的各种情况可以让你更快更牢固的掌握知识点。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>加强英文阅读能力对学习Java编程来说，不要求英语,但不能一点不会,最起码像JAVAAPI文档这些东西还是要能看懂的,连猜带懵都可以；旁边再开启一个"金山词霸"。看多了就会越来越熟练。在学Java的同时学习英文，一箭双雕多好。另外好多软件需要到英文网站下载，你要能够找到它们，这些是最基本的要求,英语好对你学习有很大的帮助。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>使用合适的工具工欲善其事必先利其器。软件开发包含各种各样的活动，需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等，没有工具帮忙可以说是寸步难行。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>工具可以提高开发效率，使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了，无招胜有招，手中无剑心中有剑这样的境界几乎不可企及。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>从软件开发人员的生涯规划来讲，我们可以大致分为三个阶段，软件工程师→软件设计师→架构设计师或项目管理师。&lt;/span>&lt;/span>&lt;span>不想当元帅的士兵不是好士兵，不想当架构设计师或项目管理师的程序员也不是好的程序员。我们应该努力往上走。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>Java是现在大型软件项目中的主角，市场用人需求量大,大家都知道21世纪进入信息时代，信息科技给人类的生产和生活方式带来了深刻的变革，信息产业已成为推动国家经济发展的主导产业之一，为此，从就业前景，发展方向等多方面来看，学Java编程无疑是最佳选择。&lt;/span>&lt;/p>&lt;div>&lt;span>&lt;br>&lt;/span>&lt;/div></description></item><item><title>惹毛程序员的十件事！需求变更居然不是排第一！</title><link>https://pangyd.com/post/176/</link><pubDate>Mon, 20 Nov 2017 18:26:26 +0800</pubDate><guid>https://pangyd.com/post/176/</guid><description>&lt;p>程序员是一个比较特殊的群体，他们因为长期和电脑打交道养成的性格和脾气是比较相近的。当然，既然是人，都会有性格的，也会有脾气的。下面，让我们来看看十件能把程序员惹毛了的事情。&lt;/p>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1">&lt;p>&lt;span>&lt;span>第十位：程序注释&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;img class="" data-ratio="0.66625" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-type="jpeg" data-w="800" height="446.3875" width="670" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>程序注释本来是一些比较好的习惯，当程序员老手带新手的时候，总是会告诉新手，一定要写程序注释。于是，新手们当然会听从老手的吩咐。只不过，他们可能对程序注释有些误解，于是，我们经常在程序中看到一些如下的注释：&lt;/span>&lt;/p>&lt;p>&lt;span>每当看到这样的注释——只注释是什么，而不注释为什么，相信你一定会被惹火，这是谁写的程序注释啊？不找来骂一顿看来是不会解气了。程序注释应该是告诉别人你的意图和想法，而不是告诉别人程序的语法，这是为了程序的易读性和可维护性，这样的为了注释而注释的注释，分明不是在注释，而是在挑衅，惹毛别人当然毋庸置疑。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第九位：打断&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;img class="" width="670" height="352.5875" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-ratio="0.52625" data-w="800" data-type="jpeg" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>正当程序沉浸于编程算法的思考，或是灵感突现正在书写程序的时候，但却遭到别人的打断，那是一件非常痛苦的事情，如果被持续打断，那可能会让人一下子就烦躁起来。打断别人的人在这种情况下是非常不礼貌的。被打断的人就像函数调用一下，当其返回时，需要重新恢复断点时的现场。当然，人不是电脑，恢复现场通常是一个很痛苦的过程，极端的情况下可能需要从头开始寻找思绪，然后一点一点地回到断点。&lt;/span>&lt;br>&lt;/p>&lt;p>&lt;span>因此，我看到一些程序员在需要安静不被打扰的时候，要么会选择去一个没人找得到的地方，要么会在自己的桌子上方高挂一个条幅以示众人——「本人正执行内核程序，无法中断，请勿骚扰，谢谢！」自然，被打断所惹毛了的人也不在少数了。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第八位：需求变化&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;img class="" width="670" height="446.3875" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-ratio="0.66625" data-w="800" data-type="jpeg" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这个事情估计不用多说了。只要是是程序员，面对需求变化的时候可能总是很无奈的。一次两次可能还可以接受，但也顶不住经常变啊。据说敏捷开发中有一套方法论可以让程序员们享受需求的变化，不知道是真是假。不过，今天让你做一个书桌，明天让你把书桌改成餐桌，后天让你把餐桌改成双人床，大后天让你把床改成小木屋，然后把小木屋再改成高楼大厦。哎，是人都会被惹毛了的。那些人只用 30 分钟的会议就可以作出任何决定，但后面那几十个程序员需要搭上几百个小时的辛苦工作。如果是我，可能我也需要神兽草泥马帮助解解气了。&lt;/span>&lt;/p>&lt;p>&lt;span>不过，这也正说明了，程序员并不懂得怎么和用户沟通，而用户也不懂得和程序员沟通，如果一个项目没有一个中间人（如 PM）在其中协调的话，那么整个项目可能就是「鸡同鸭讲」，用户和程序员都会被对方所惹毛了。如果要举例几个用户被惹毛的事情，估计程序员的那种一根筋的只从技术实现上思考问题的方法应该也能排进前 5 名。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第七位：经理不懂技术&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;img class="" width="670" height="445.55" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-ratio="0.665" data-w="800" data-type="jpeg" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>外行领导内行的事例还少吗？领导一句话，无论对不对，都是对的，我们必需照做，哪怕是多么愚蠢多么错误的决定，我们也得照做。程序员其实并不怕经理不懂技术，最怕的就是不懂技术的经理装着很懂技术。最可气的是，当你据理力争的挑战领导权威的时候，领导还把你视为异类。哎，想起这样的领导别说是骂人了，打人的冲动都有了。&lt;/span>&lt;/p>&lt;p>&lt;span>其实，经理只不过是一个团队的支持者，他应该帮助团队，为团队排忧解难。而不是对团队发号施令。其实管理真的很简单，如果懂的话，就帮着做，如果不懂的话，就相信下属，放手让下属做。最怕的就是又不懂技术，还不信任下属的经理了。哎，这真是程序员的痛啊。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第六位：用户文档&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;img class="" width="670" height="504.175" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-ratio="0.7525" data-w="800" data-type="jpeg" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p></description></item><item><title>Java 异常处理的误区和经验总结</title><link>https://pangyd.com/post/172-java/</link><pubDate>Sat, 18 Nov 2017 22:29:47 +0800</pubDate><guid>https://pangyd.com/post/172-java/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1">&lt;p>&lt;span>本文着重介绍了 Java 异常选择和使用中的一些误区，希望各位读者能够熟练掌握异常处理的一些注意点和原则，注意总结和归纳。只有处理好了异常，才能提升开发人员的基本素养，提高系统的健壮性，提升用户体验，提高产品的价值。&lt;/span>&lt;/p>&lt;h2>&lt;span>误区一、异常的选择&lt;/span>&lt;/h2>&lt;p>&lt;span>图 1. 异常分类&lt;/span>&lt;/p>&lt;p>&lt;img class="" title="img001" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" width="643" height="383" data-ratio="0.5956454121306376" data-w="643" data-type="png" data-backw="643" data-backh="383" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0" style="text-align: center">&lt;/p>&lt;p>&lt;span>图 1 描述了异常的结构，其实我们都知道异常分检测异常和非检测异常，但是在实际中又混淆了这两种异常的应用。由于非检测异常使用方便，很多开发人员就认为检测异常没什么用处。其实异常的应用情景可以概括为以下：&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>一、调用代码不能继续执行，需要立即终止。出现这种情况的可能性太多太多，例如服务器连接不上、参数不正确等。这些时候都适用非检测异常，不需要调用代码的显式捕捉和处理，而且代码简洁明了。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>二、调用代码需要进一步处理和恢复。假如将 SQLException 定义为非检测异常，这样操作数据时开发人员理所当然的认为 SQLException 不需要调用代码的显式捕捉和处理，进而会导致严重的 Connection 不关闭、Transaction 不回滚、DB 中出现脏数据等情况，正因为 SQLException 定义为检测异常，才会驱使开发人员去显式捕捉，并且在代码产生异常后清理资源。当然清理资源后，可以继续抛出非检测异常，阻止程序的执行。根据观察和理解，检测异常大多可以应用于工具类中。&lt;/span>&lt;/p>&lt;h2>&lt;span>误区二、将异常直接显示在页面或客户端。&lt;/span>&lt;/h2>&lt;p>&lt;span>将异常直接打印在客户端的例子屡见不鲜，以 JSP 为例，一旦代码运行出现异常，默认情况下容器将异常堆栈信息直接打印在页面上。其实从客户角度来说，任何异常都没有实际意义，绝大多数的客户也根本看不懂异常信息，软件开发也要尽量避免将异常直接呈现给用户。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>清单 1&lt;/span>&lt;/p>&lt;pre class="">&amp;nbsp;package&amp;nbsp;com.ibm.dw.sample.exception;/**&lt;br>&amp;nbsp;*&amp;nbsp;自定义&amp;nbsp;RuntimeException&lt;br>&amp;nbsp;*&amp;nbsp;添加错误代码属性&lt;br>&amp;nbsp;*/public&amp;nbsp;class&amp;nbsp;RuntimeException&amp;nbsp;extends&amp;nbsp;java.lang.RuntimeException&amp;nbsp;{&amp;nbsp;&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//默认错误代码&amp;nbsp;&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;final&amp;nbsp;Integer&amp;nbsp;GENERIC&amp;nbsp;=&amp;nbsp;1000000;&amp;nbsp;&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//错误代码&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;Integer&amp;nbsp;errorCode;&amp;nbsp;&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;RuntimeException(Integer&amp;nbsp;errorCode,&amp;nbsp;Throwable&amp;nbsp;cause)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this(errorCode,&amp;nbsp;null,&amp;nbsp;cause);&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;RuntimeException(String&amp;nbsp;message,&amp;nbsp;Throwable&amp;nbsp;cause)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//利用通用错误代码&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this(GENERIC,&amp;nbsp;message,&amp;nbsp;cause);&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;RuntimeException(Integer&amp;nbsp;errorCode,&amp;nbsp;String&amp;nbsp;message,&amp;nbsp;Throwable&amp;nbsp;cause)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;super(message,&amp;nbsp;cause);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.errorCode&amp;nbsp;=&amp;nbsp;errorCode;&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Integer&amp;nbsp;getErrorCode()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;errorCode;&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;br>}&lt;/pre>&lt;p>&lt;span>正如示例代码所示，在异常中引入错误代码，一旦出现异常，我们只要将异常的错误代码呈现给用户，或者将错误代码转换成更通俗易懂的提示。其实这里的错误代码还包含另外一个功能，开发人员亦可以根据错误代码准确的知道了发生了什么类型异常。&lt;/span>&lt;/p>&lt;h2>&lt;span>误区三、对代码层次结构的污染&lt;/span>&lt;/h2>&lt;p>&lt;span>我们经常将代码分 Service、Business Logic、DAO 等不同的层次结构，DAO 层中会包含抛出异常的方法，如清单 2 所示：&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>清单 2&lt;/span>&lt;/p>&lt;pre class="">public&amp;nbsp;Customer&amp;nbsp;retrieveCustomerById(Long&amp;nbsp;id)&amp;nbsp;throw&amp;nbsp;SQLException&amp;nbsp;{&amp;nbsp;//根据&amp;nbsp;ID&amp;nbsp;查询数据库}&lt;/pre>&lt;p>&lt;span>上面这段代码咋一看没什么问题，但是从设计耦合角度仔细考虑一下，这里的 SQLException 污染到了上层调用代码，调用层需要显式的利用 try-catch 捕捉，或者向更上层次进一步抛出。根据设计隔离原则，我们可以适当修改成：&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>清单 3&lt;/span>&lt;/p>&lt;pre class="">public&amp;nbsp;Customer&amp;nbsp;retrieveCustomerById(Long&amp;nbsp;id)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//根据&amp;nbsp;ID&amp;nbsp;查询数据库&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}catch(SQLException&amp;nbsp;e){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//利用非检测异常封装检测异常，降低层次耦合&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;RuntimeException(SQLErrorCode,&amp;nbsp;e);&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}finally{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//关闭连接，清理资源&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br>}&lt;/pre>&lt;h2>&lt;span>误区四、忽略异常&lt;/span>&lt;/h2>&lt;p>&lt;span>如下异常处理只是将异常输出到控制台，没有任何意义。而且这里出现了异常并没有中断程序，进而调用代码继续执行，导致更多的异常。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>清单 4&lt;/span>&lt;/p>&lt;pre class="">&amp;nbsp;public&amp;nbsp;void&amp;nbsp;retrieveObjectById(Long&amp;nbsp;id){&amp;nbsp;&amp;nbsp;&amp;nbsp;try{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//..some&amp;nbsp;code&amp;nbsp;that&amp;nbsp;throws&amp;nbsp;SQLException&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}catch(SQLException&amp;nbsp;ex){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*了解的人都知道，这里的异常打印毫无意义，仅仅是将错误堆栈输出到控制台。&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;而在&amp;nbsp;Production&amp;nbsp;环境中，需要将错误堆栈输出到日志。&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;而且这里&amp;nbsp;catch&amp;nbsp;处理之后程序继续执行，会导致进一步的问题*/&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ex.printStacktrace();&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br>}&lt;/pre>&lt;p>&lt;span>可以重构成：&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>清单 5&lt;/span>&lt;/p></description></item><item><title>关于烂代码的一切</title><link>https://pangyd.com/post/171/</link><pubDate>Fri, 17 Nov 2017 21:52:42 +0800</pubDate><guid>https://pangyd.com/post/171/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1">&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>当程序员经常听到您想要关注ABCD(需求文档/功能设计/架构设计/理解原则)时，编写代码只是将想法翻译成编程语言，这是一种技术内容。&lt;/p>&lt;p>当我听到这种观点的时候，会有一种近似于高寒的蔑视:你是一群傻X，不懂代码质量的重要性等等，这么下去迟早有一天会踩坑。&lt;/p>&lt;p>但几个月后，他们似乎没有进入坑里。随着编程技术的发展，带来了更多的我以前认为是傻X的人加入到程序员这个行业中来。&lt;/p>&lt;p>语言是越来越先进,封装,越来越完美,各种技术帮助程序员提高效率的生产代码,依赖于层的封装,程序员不需要知道的一些技术细节,只要翻译需求的内容逐行是好吗?&lt;/p>&lt;p>许多程序员不知道如何组织他们的代码，如何提高他们的效率，以及底层是如何基于他们在我的头脑中作为一段代码编写的。即使我认为他们写的代码是坨翔，但是从不接触代码的人的视角来看（比如说你的boss），代码编译过了，测试过了，上线运行了一个月都没出问题，你还想要奢求什么？&lt;/p>&lt;p>所以，即使不情愿，也必须承认，时至今日，写代码这件事本身没有那么难了。&lt;/p>&lt;p>许多程序员喜欢简单的东西:简单的函数名，简单的变量名，以及几句话来命名;缩写，缩写，省略，合并或合并。这种类型的代码编写的代码中有很多首字母缩写，没有人知道g /s/gos/ / / MSS，或一串不知道该怎么做的连续调用。&lt;/p>&lt;p>有很多程序员喜欢复杂，各种各样的宏定义，位和位，等等，所以代码似乎不能让它看起来很好。&lt;/p>&lt;p>简单地说，他们的代码是机器，而不是人。&lt;/p>&lt;p>不适当的组织是高级一些不好的代码，程序员写了一些代码，有基本的代码风格，但是对于更大的规模项目控制能力是不够的，不知道代码应该如何解耦，分层，和组织。&lt;/p>&lt;p>这种反模式现象经常出现在复制到项目的代码中;文件中有大量的代码;一个函数堆叠了几十万行;或者一个简单的函数，七到八圈的函数，在一个小的，难以找到的角落里无声地调用一些关键的逻辑。&lt;/p>&lt;p>这种代码的复杂度很高，很难修改，通常会发生崩溃;另一方面，创建代码的人倾向于修改代码，害怕创建代码，他们宁愿一步一步地复杂代码变得更加复杂，不愿意重新组织代码。当你面对几千行的时候，问你为什么不提取所谓的逻辑，他们说:&lt;/p>&lt;p>“这样会多一个类”&lt;/p>&lt;p>相反，如果一个项目的代码很难读，你能说这是糟糕的代码吗?这很难定义，可能不太好，但你能说它很糟糕吗?如果这个项目每次只维护一个人，而且这个人维护得很好，那么它似乎就是“足够的代码”。&lt;/p>&lt;p>许多项目刚刚开始只是一个小项目，而重点仅仅在于代码能够顺利地按时地运行。&lt;/p>&lt;p>过了一段时间后，其他人发现代码写的是问题，而不是理解，不敢移动。需求方又开始催促行，怎么办?我必须小心地改变逻辑，不移动结构，然后在注释中写出来，这样它就很丑，这样我就能理解内部的逻辑并重构它。&lt;/p>&lt;p>在一段时间内，也有类似的需要重用逻辑，只是要意识到代码具有不同特定场景的特殊逻辑，这对于重用非常麻烦。只需复制代码并更改它。问题解决了，问题翻了一倍。&lt;/p>&lt;p>几乎所有的“代码”进化的坏代码，代码不变，使用的代码场景发生了变化，最初的代码不符合新的场景，所以它变成了一个糟糕的代码。&lt;/p>&lt;p>从技术上讲，重构复杂代码时，要做三件事:理解旧代码，分解旧代码，构建新代码。要重构的旧代码通常很难理解;模块间的过度耦合导致了影响对整个身体的影响。旧代码不容易测试，不能保证新代码的正确性。&lt;/p>&lt;p>还有一个核心问题，重构的复杂性并不依赖于代码的复杂性。例如，如果你有1000行代码，重构需要1个小时，所以重构5000行代码需要2到3天的时间。重构一个失去控制的项目通常比重写它的效率要低。&lt;/p>&lt;p>在重构方面，重构也是一件非常困难的事情:很难直接从中获益，而且很难量化。这里有一个有趣的现象，几乎所有关于重构的书都有一个独立的章节，关于“如何向老板解释重构的需要”。&lt;/p>&lt;p>重构后你能提高多少效率?可以减少多少风险?很难说，糟糕的代码本身并不是一个简单的标准化的东西。&lt;/p>&lt;/div></description></item><item><title>Java面试基础知识--重点</title><link>https://pangyd.com/post/170-java/</link><pubDate>Fri, 17 Nov 2017 21:31:24 +0800</pubDate><guid>https://pangyd.com/post/170-java/</guid><description>&lt;p>1.面向对象的三大特性&lt;/p>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1">&lt;p>&lt;span>继承、封装、多态&lt;/span>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>什么是继承?&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>①继承是面向对象程序设计能够提高软件开发效率的重要原因之一。&lt;/span>&lt;/p>&lt;p>&lt;span>②继承是具有传递性的，就像现实中孙子不仅长得像爸爸而且还像他爷爷。&lt;/span>&lt;/p>&lt;p>&lt;span>③继承来的属性和方法是隐式的，也就是在本类里面是看不见的。&lt;/span>&lt;/p>&lt;p>&lt;span>④一个类只能有一个父类，也就是类只能是单继承。&lt;/span>&lt;/p>&lt;p>&lt;span>⑤一个接口可以有多个父类，也就是接口可以是多继承。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>实际项目开发中，一个类继承于另一个类，那么前者就是后者的子类，反则反之。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>什么是封装?&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>对象数据和操作该对象的指令都是对象自身的一部分，能够实现尽可能对外部隐藏数据。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>实际项目开发中，使用封装最多的就是实体类，常常和 JavaBean (类必须是具体的和公共的，并且具有无参数的构造器)一起使用。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>那么，实体类有那些东西呢&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>答：私有的成员变量、无参数的构造器、有参数的构造器、setter和getters方法、重写tostring方法、重写hashCode和equals方法。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>什么是多态?&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>①多态就是对象拥有多种形态：引用多态和方法多态。&lt;/span>&lt;/p>&lt;p>&lt;span>②引用多态：父类的引用可以指向本类对象、父类的引用可以指向子类的对象。&lt;/span>&lt;/p>&lt;p>&lt;span>③方法多态：创建本类对象时，调用的方法为本类的方法；创建子类对象时，调用的方法为子类重写的方法或者继承的方法。&lt;/span>&lt;/p>&lt;p>&lt;span>④存在多态的必要条件：继承、重写。&lt;/span>&lt;/p>&lt;p>&lt;span>⑤多态的作用是消除类型之间的耦合关系。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>在实际项目开发中，A 类继承 B 类，如果在 A 类中不重写 B 类的方法的时候，输出的仍旧是 B 类方法里面的信息(B b=new A());如果在A类中重写 B 类的方法的时候，输出的是 A 类方法里面的信息(B b=new A())。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;/p>&lt;section class="" data-tools="135编辑器" data-id="90150">&lt;section>&lt;section data-width="100%">&lt;p class="" data-brushtype="text">&lt;span>2.Java集合框架树&lt;/span>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>Collection 接口：&lt;/span>&lt;/span>&lt;span>它是 Java 集合框架的一个根接口，也是List、Set和 Queue 接口的父接口。同时它定义了可用于操作 List、Set 和 Queue 的方法—增删改查。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p></description></item><item><title>Java后端程序员1年工作经验总结</title><link>https://pangyd.com/post/169-java1/</link><pubDate>Wed, 15 Nov 2017 19:26:07 +0800</pubDate><guid>https://pangyd.com/post/169-java1/</guid><description>&lt;p>&lt;span>&lt;span>1.引言&lt;/span>&amp;nbsp;&lt;/span>&lt;br>&lt;/p>&lt;p>　毕业已经一年有余，这一年里特别感谢技术管理人员的器重，以及同事的帮忙，学到了不少东西。这一年里走过一些弯路，也碰到一些难题，也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东西，为大家分享一下。&amp;nbsp;&lt;br>　　经过一年意识到以前也有很多认识误区，比如：&amp;nbsp;&lt;br>　　偏爱收集，经常收集各种资料视频塞满一个个硬盘，然后心满意足的看着容量不行动。&amp;nbsp;&lt;br>　　不重基础，总觉得很多基础东西不需要再看了，其实不懂的地方很多，计算机程序方面任何一个结果都必有原因，不要只会用不知道原理，那是加工厂出来的。现在ide查看代码那么方便，ctrl+点击就进入了JDK查看实现细节。&amp;nbsp;&lt;br>　　好高骛远，在计算机基础不牢固的情况下，总想着要做架构，弄分布式，搞大数据之类。&amp;nbsp;&lt;br>　　不重视性能，只求能实现功能，sql查询是不是可以优化，是否有算法妙用，大对象是否要清除。&amp;nbsp;&lt;br>　　不重视扩展性，模块之间紧密耦合，常用方法不提取成工具类，调用关系混乱等问题。&amp;nbsp;&lt;br>　　……&amp;nbsp;&lt;br>　　本文重点不在这些，故只列举了一小部分，下面进入正题。&lt;/p>&lt;p>&lt;span>2.语法基础&lt;/span>&lt;/p>&lt;p>　2.1 Java类初始化顺序&amp;nbsp;&lt;br>　　这是所有情况的类初始化顺序，如果实际类中没有定义则跳过：父类静态变量——父类静态代码块——子类静态代码块——父类非静态变量——父类非静态代码块——父类构造函数——子类非静态变量——子类非静态代码块——子类构造函数&amp;nbsp;&lt;br>　2.2 值传递和引用传递&amp;nbsp;&lt;br>　　可能很多人对此不屑一顾，心想老子都工作一年了，对这些还不熟悉吗？但实际情况并非这样，JDK中东西全部熟悉了吗？以一个最简单的例子开始，你觉得下图中代码执行完之后fatherList中的元素是什么？&amp;nbsp;&lt;br>&lt;/p>&lt;p>&lt;img class="" data-ratio="0.2854077253218884" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-type="png" data-w="932" title="" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;br>&lt;/p>&lt;p>　　这是一个最基础的值传递和引用传递的例子，你觉得好简单，已经想跃跃欲试的挑战了，那么请看下面的，StringBuffer很好理解，但是当你执行一遍之后发现是不是和预想中的输出不一样呢？String不是引用类型吗，怎么会这样呢？如果你无法理解，那么请看下String的实现源码，了解下其在内存中分配的实现原理。&amp;nbsp;&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>　2.3 集合的使用&amp;nbsp;&lt;br>　　这部分几乎每个人都会用到，而且大家还都不陌生。下图来源于互联网，供大家复习一下。但是利用集合的特性进行巧妙的组合运用能解决优化很多复杂问题。Set不可重复性，List的顺序性，Map的键值对，SortSet/SortMap的有序性，我在工作中有很多复杂的业务都巧妙的使用了这些，涉及到公司保密信息，我就不贴出代码了。工作越久越发现这些和越巧妙。&amp;nbsp;&lt;br>　&lt;/p>&lt;p>&lt;img class="" data-ratio="0.9415094339622642" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-type="jpeg" data-w="530" title="" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;br>&lt;/p>&lt;p>　2.3 异常处理&amp;nbsp;&lt;br>　　1.看着try、catch、finally非常容易，如果和事务传播结合在一起，就会变得极其复杂。&amp;nbsp;&lt;br>　　2.finally不一定必须执行，return在catch/finally中处理情况（建议亲自操刀试一下）。&amp;nbsp;&lt;br>　　3.catch中可以继续抛自定义异常（并把异常一步步传递到控制层，利用切面抓取封装异常，返回给调用者）。&amp;nbsp;&lt;br>　2.4 面向对象思想&amp;nbsp;&lt;br>　　一提起面向对象，大家都知道抽象、封装、继承、和多态。但是实际工作经验中又知道多少呢，对于项目中如何巧用估计更不要提了。&amp;nbsp;&lt;br>　　共性的机会每个都需要用的建立基类，如每个控制层方法可能要通过security获取一个登录用户id，用于根据不同的用户操作不同的数据，可以抽象出一个应用层基类，实现获取id的protect方法。同理DAO层可以利用泛型提取出一个包含增删改查的基类。&amp;nbsp;&lt;br>　　多态的Override：基类的引用变量不仅可以指向基类的实例对象，也可以指向其子类的实例对象，如果指向子类的实例对象，其调用的方法应该是正在运行的那个对象的方法。在策略模式中使用很普遍。&amp;nbsp;&lt;br>　　提到面向对象，就不可避免的要说设计模式，在工作中，一个技术大牛写的一个类似策略模式（更复杂一点），十分巧妙的解决了各种业务同一个方法，并且实现了订单、工单、业务的解耦，看得我是非常佩服。我想很多面试中都会问道单例模式吧，还没有理解的建议去看一看。&lt;/p>&lt;p>&lt;span>3.多线程&lt;/span>&lt;/p>&lt;p>　3.1 线程安全&amp;nbsp;&lt;br>　　这个是老生常谈的问题了，但是确实是问题和bug高发区。线程同步问题不需要单独写了，想必大家都清楚，不太熟悉的建议百度一下。&amp;nbsp;&lt;br>　3.1.1 线程安全问题&amp;nbsp;&lt;br>　　1.代码中如果有同步操作，共享变量要特别注意（这个一般都能意识到）&amp;nbsp;&lt;br>　　2多个操作能修改数据表中同一条数据的。（这个容易被忽略，业务A可能操作表a，业务B也可以操作表a，业务A、B即使在不同的模块和方法中，也会引起线程安全问题。例如如果一个人访问业务A接口，另一个人访问业务B接口，在web中每个业务请求都是会有单独的一个线程进行处理的，就会出现线程安全问题）。&amp;nbsp;&lt;br>　　3.不安全的类型使用，例如StringBuffer、StringBuild，HashTable、HashMap等。在工作中我就遇到过有人在for循环进行list的remove，虽然编译器不报错，程序可以运行，但是结果却可想而知。&amp;nbsp;&lt;br>　　4.Spring的bean默认是单例的，如果有类变量就要特别小心了（一般情况下是没人在控制层、业务层、DAO层等用类变量的，用的话建议是final类型，例如日志log，gson等）。&amp;nbsp;&lt;br>　　5.多个系统共享数据库情况，这个其实和分布式系统类似&amp;nbsp;&lt;br>　　用户重复提交问题（即使代码中从数据库读取是否存在进行限制不能解决问题）&amp;nbsp;&lt;br>　3.1.2 线程安全解决&amp;nbsp;&lt;br>　　在需要同步的地方采用安全的类型。&amp;nbsp;&lt;br>　　JDK锁机制，lock、tryLock，synchronized，wait、notify、notifyAll等&amp;nbsp;&lt;br>　　Concurrent并发工具包，在处理一些问题上，谁用谁知道。强烈建议查看源码！&amp;nbsp;&lt;br>　　数据表加锁。（除非某个表的访问频率极低，否则不建议使用）&amp;nbsp;&lt;br>　　涉及分布式的，采用中间件技术例如zookeeper等解决。&amp;nbsp;&lt;br>　3.2 异步&amp;nbsp;&lt;br>　　异步使用场景不影响主线程，且响应较慢的业务。例如IO操作，第三方服务（短信验证码、app推送、云存储上传等）。&amp;nbsp;&lt;br>　　如果异步任务很多，就需要使用任务队列了，任务队列可以在代码级别实现，也可以利用redis（优势太明显了）。&amp;nbsp;&lt;br>　3.3 多线程通信&amp;nbsp;&lt;br>　　这方面文章非常多，这里不在详述。&amp;nbsp;&lt;br>　　1.共享变量方式（共享文件、全局变量，信号量机制等）&amp;nbsp;&lt;br>　　2.消息队列方式&amp;nbsp;&lt;br>　　3. 忙等，锁机制&amp;nbsp;&lt;br>　3.4多线程实现&amp;nbsp;&lt;br>　　1.集成Thread类，重写（这里的重写指的是override）run方法，调用start方法执行。&amp;nbsp;&lt;br>　　2.实现Runable接口，实现run方法，以Runable实例创建thread对象。&amp;nbsp;&lt;br>　　3.实现Callable接口，实现call方法，FutureTask包装callable接口，FutureTask对象创建thread对象，常用语异步操作，建议使用匿名内部类，方便阅读和使用。&amp;nbsp;&lt;br>　　额外需要说明的是：&amp;nbsp;&lt;br>　　1.理解thread的join方法；&amp;nbsp;&lt;br>　　2.不要认为volitate是线程安全的（不明白原因的建议去看jvm运行时刻内存分配策略）；&amp;nbsp;&lt;br>　　3.sleep时间片结束后并不保证立马获取cpu。&amp;nbsp;&lt;br>　　4.ThreadLocal能够为每一个线程维护变量副本，常用于在多线程中用空间换时间。&amp;nbsp;&lt;br>&lt;/p></description></item><item><title>程序员到底累不累，其实正真的程序员比谁都轻松，不信你看</title><link>https://pangyd.com/post/168/</link><pubDate>Wed, 15 Nov 2017 19:23:08 +0800</pubDate><guid>https://pangyd.com/post/168/</guid><description>&lt;h2 class="rich_media_title" id="activity-name">&lt;span>说到底，是自己的选择问题。&lt;/span>&lt;/h2>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>三百六十行，哪行容易？&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>但关键是自己的心态，如果工作成了你的负担和困扰，你得有跳出来的勇气和行动力。&lt;/span>&lt;/p>&lt;p>&lt;span>我自己先后就职于虎扑体育、爱奇艺和凯英网络，担任iOS研发经理，有6年工作经验，4年的iOS开发经验，2年的管理经验，1年的服务器端开发经验。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>就职于大公司期间，我的工资已经算是高薪了，前途逐渐明朗。我已经看到了：如果沿着这条路走下去，可能生活是稳定顺畅的。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>可是虽然工资不断攀升，身体和生活也出了一些问题：我发现自己陷入了工作生活不分开的死循环，哪怕周末也是一直在想着工作，完全没有自己的生活。几年下来，各种身体问题开始涌现。大公司里面频繁又无意义的会议让我厌烦，压抑的工作氛围也让我觉得难以忍受。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>有天觉得这样不行，再这样下去身体会废掉，整个人状态也不好。一番犹豫之后，我痛下决心，想离开目前这种温水煮青蛙的生活。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>于是我放弃了大公司的高薪，换了一份工作。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>还是做技术，但这份工作和以往最大的差别就在于：这份工作是远程办公。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>我可以自由的安排自己的工作时间，可以摆脱公司没完没了的会议，更加高效地工作，省去上下班的时间，更多的用来享受生活。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>换工作只是一个开始，不过也引起了一连串生活方式的改变。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>我开始去徒步旅行。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>去过了尼泊尔 Poolhill、江西武功山、浙江七尖、徽杭古道、仙霞古道，假期基本都在路上。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>我开始在上海各个咖啡馆敲代码。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="0.5636363636363636" data-w="550" data-backw="550" data-backh="310" width="100%" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这工作环境，秒杀大公司惨白的灯光、压抑的环境好几个档次好嘛！&lt;/span>&lt;/p>&lt;p>&lt;span>我开始健身。人变得挺拔多了，和产品据理力争的时候不用担心挨揍。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>我开始阅读。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" class="" data-backw="556" data-backh="370" data-croporisrc="https://mmbiz.qpic.cn/mmbiz_jpg/JfI4bJ7rK0l8ib38obyZ9T2ex1ibOjK6qcyrXDQwMcYCvZLbGg3UWuHccq9e0qzudfv8XCp8ibkAZqOvJ5HHwMQ3w/0?wx_fmt=jpeg" data-cropx1="0" data-cropx2="1000" data-cropy1="0" data-cropy2="631.2949640287769" data-ratio="0.631" data-w="1000" width="556px" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;br>&lt;/p>&lt;p>&lt;span>是一种出于兴趣和好奇而进行的更广泛的阅读，通过旅行和阅读发现更大的世界。&lt;/span>&lt;/p></description></item><item><title>看十万程序员总结：优秀的程序员和码农差别在哪？</title><link>https://pangyd.com/post/167/</link><pubDate>Sun, 12 Nov 2017 19:55:45 +0800</pubDate><guid>https://pangyd.com/post/167/</guid><description>&lt;p>程序员的水平必然有高有低，工资更是相差极大，而且有些时候，工作年限少的还会比工作年限多的人工资更高，那么，程序员的水平如何衡量？来看看网友怎么说。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>当然，一定会有更加优秀的程序员，可能我们见到的比较少吧。&lt;/p></description></item><item><title>听说程序员秃顶是尊贵身份的象征？</title><link>https://pangyd.com/post/165/</link><pubDate>Fri, 10 Nov 2017 22:22:57 +0800</pubDate><guid>https://pangyd.com/post/165/</guid><description>&lt;p style="text-align: center">&lt;span>作为一名程序员必须知道的事情：女怕嫁错郎，男怕入错行，程序猿最怕就是选错语言！&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>选择一门牛逼的编程语言是每一位程序员进入IT江湖的头等大事。为什么？选择语言就像投资买房，选对了，是北上广深，选错了，就是“鄂尔多斯”【有房无价】：to be or not to be！？&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>那么，如何选择牛逼的编程语言？&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>想知道秘笈吗？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-ratio="1.3392857142857142" data-w="224" class="" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>编程语言是人写的，冥冥大道，&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>编程语言的运势同创始人密不可分。&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>气运旺盛的语言，必然是其创始人用心血滋补养育，&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>经过老九君仔细盘查发现，这其中最直观的表现，&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>&lt;span>就是编程语言之父们头顶的发量！！！&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>是的，你没看错，老九君一般不轻易泄露天机！&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-ratio="0.7192429022082019" data-w="317" class="" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;span>列举如下，小伙伴们可借此参考。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>&amp;nbsp;&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>【一】&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我们首先来看Java语言，这几年大数据、Android、微服务的大行其道而如日中天【三个领域均在开发中均会使用大量Java代码】。这在1998年Java刚出道时，很多人是完全预料不到的。但如果我们看看Java之父James Gosling的头顶茂密指数，便一目了然。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;img class="" data-ratio="0.78" data-s="300,640" data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" data-type="jpeg" data-w="300" width="auto" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;br>&lt;/p></description></item><item><title>一线城市年薪四十万以上的程序员，他的真实生活状态是怎样的？</title><link>https://pangyd.com/post/164/</link><pubDate>Thu, 09 Nov 2017 18:15:01 +0800</pubDate><guid>https://pangyd.com/post/164/</guid><description>&lt;p>一线城市年薪四十万以上的程序员，他的真实生活状态是怎样的？&lt;/p>&lt;p>假设是税前40w，而职位还只是程序员，那一般情况下是在中大型互联网公司了。传统软件行业不是给不了年薪40，但是在传统软件行业拿40w年薪的一般来说都是中层以上的管理岗了，就算曾经是程序员，生活状态也不一样了。也不是创业型公司，虽然的确创业型公司都说给的工资高，但是拿年薪40来招多半都是招的架构师岗了，而创业型公司也不需要太多架构师，所以这个架构师说不定还是首席架构师了，跟程序员的生活还是有一定差距。同时，不要觉得40万是个好大的数，说的是年薪，互联网公司一般是发13到16个月的薪水，所以40w算到每个月也就是20k到30k，这个薪水也就是个高级开发的职位。那么问题就简化为在中大型互联网公司高级开发工程师的生活状态。互联网公司节奏快，发展快，所以会有很多需求，高级开发每天要做的事就是手上有需求或者项目要编码的时候就在编码，有需求要立项的时候就会被产品叫去开会，产品PRD出来的时候就在做设计，设计出来就编码，编码完成就提交测试，测试测出bug就改bug，测完就上线。除此之外线上有问题的时候必须第一时间响应，无论问题大小，如果能通过运维手段解决的问题需要立刻执行。如果开发时间充足，上线顺利，线上没有问题的话，程序员也不会经常加班，该回家的还是回家，该去健身的还是会去健身，该调戏产品或者测试妹纸的还是会去调戏。周末的话，开发任务紧的话就去加班，开发任务不紧的话也就各自过各自的生活。题目问40w的程序员什么生活状态，其实40w的程序员生活状态跟30w，20w的一样，他拿40w并不是说他就要干的时间比别人多，不是说拿40w就要加班多。拿40w和拿20w的区别在于拿40w的要站在一定的高度想问题，要用他的经验和知识带着20w干活，少走弯路少掉坑，这才是40w的价值。而不是体现在加班上面的。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>在外行看来，年薪四十万以上的程序员生活应该是很滋润的那种，我当初刚毕业也是那么觉得的。但是现实中，拿的起这工资的一般都是管理层，没有过硬的技术一般是拿不起那工资的，职位最低也是项目组组长（只限大公司）。一旦项目入手，管理不比底层轻松，要考虑的不只是单模块的功能和架构，涉及层次方面太多了。项目上线前和上线后也是最累的时候，加班也是家常便饭，不到早上1点的还不算加班。平时而且也没太多时间，拿着钱到处娱乐消遣的，技术还是要每天不短的学习消化，IT发展技术发展太快了，必须要时刻跟上步伐。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>一线城市40w年薪以上的程序员一般有两种人，第一种，在互联网公司工作，薪水较高，但工作压力也相对较大，也就是常说的996。第二种，就是一些年龄较大的专家级程序员（架构师），压力可能没有互联网公司的大，且凭借强大的技术能力和知识面以及项目经验在一些中等或大型公司中担任顾问的岗位，也有可能在小公司中以技术入股的形式担任相关职位。但不管是哪种人，以下两点非常重要，就是过硬的技术能力和持续的学习能力。坐标北京，也算程序员高薪聚集地了吧！假设该名程序员年薪税后40万，那就约等于每个月3万多一点，当然可能有一些年终奖或者是14或15月薪你，这就不细算了。月薪3万的程序员起码得有个3年及以上工作经验了（研究生博士生也按年折算为工作经验），这还得是互联网企业，传统企业怕是给不了这么多的。互联网企业一大特点就是加班！加班！每天起码得有10几个小时扑在工作上，其余时间除了休息就是浪费在了通勤路上。&lt;/p>&lt;p>如果这个程序员还没买房并且也不打算在北京买房或者已经有房子了，这些钱倒是可以过得潇洒。如果打算在北京买房，按照一平米5万，买个80平来算的话，首付就得120万，这还不是学区房。所以说，年薪40万得分有没有房才能决定过的怎么样！深圳、上海等地房价也不便宜，同理！&lt;/p></description></item><item><title>程序员如何高效学习（以 Java 为例）</title><link>https://pangyd.com/post/163-java/</link><pubDate>Thu, 09 Nov 2017 18:10:09 +0800</pubDate><guid>https://pangyd.com/post/163-java/</guid><description>&lt;blockquote>&lt;p>写在前面：&lt;/p>&lt;p>其实学习是一件很私人的事情，每个人都应该有一套自己的学习方式，而不是照搬照抄别人的。适合别人的不一定适合自己。所以，读这篇分享的时候，请以一种&lt;span>这点是不是对我有帮助&lt;/span>的心态来阅读，&lt;span>而不是&lt;/span>&lt;span>原来我要这样才能学的好&lt;/span>的心态。如果你觉得某一点对你有用，那就记在心里，如果你觉得不太适合你，那么一笑而过就好。&lt;/p>&lt;/blockquote>&lt;p>&lt;br>&lt;/p>&lt;p>我不是什么大牛，只是一个普通的本科生，有说的不好的地方，还望海涵。也因为我只是一个本科生，没有很多的工作经验，所以对于工作后的一些学习经验比较匮乏，所以文章里大部分说的都是大学时期的一些经验，很抱歉。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>这篇文章大体上会从以下几个部分展开：&lt;/p>&lt;ul class=" list-paddingleft-2">&lt;li>&lt;p>认清自己&lt;/p>&lt;/li>&lt;li>&lt;p>学习目的&lt;/p>&lt;/li>&lt;li>&lt;p>时间管理&lt;/p>&lt;/li>&lt;li>&lt;p>学习方法&lt;/p>&lt;/li>&lt;li>&lt;p>学习的步骤&lt;/p>&lt;/li>&lt;li>&lt;p>获取知识的途径&amp;nbsp;&lt;/p>&lt;/li>&lt;li>&lt;p>影响学习的几个因素&amp;nbsp;&lt;/p>&lt;/li>&lt;li>&lt;p>自己的心态&lt;/p>&lt;/li>&lt;li>&lt;p>外物的影响&lt;/p>&lt;/li>&lt;li>&lt;p>其他想说的&amp;nbsp;&lt;/p>&lt;/li>&lt;li>&lt;p>大学生的学习&amp;nbsp;&lt;/p>&lt;/li>&lt;li>&lt;p>一些感悟&lt;/p>&lt;/li>&lt;/ul>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>一、认清自己&lt;/span>&lt;/span>&lt;/p>&lt;p>1.1&lt;/p>&lt;p>认清自己最关键的一点是要&lt;span>知道自己到底想要什么&lt;/span>。这是第一步，也是最重要的一步。因为这关系到你能够&lt;span>选对学习方向&lt;/span>，能否&lt;span>沉下心来去学习&lt;/span>。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>我们都知道，&lt;span>做自己感兴趣的事情的时候，是可以事半功倍的&lt;/span>，因为你愿意去做它，而不是出于某种原因不得不去做。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>经常会有人问我，现在前端找工作好找么？java 找工作好找么？我要不要学 android 呢？这些问题的答案其实大家心里都明白：只要你足够优秀，学什么都能够找到一份好的工作。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>所以说，&lt;span>不要因为某一个方向火，而盲目的去追；也不要因为某一个方向可能不容易找工作而不去学。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>对一个搞技术的人来说，年龄的增长其实不是那么可怕，可怕的是你没有&lt;span>匹配自己年龄的技术深度&lt;/span>。当你的工作换一个刚毕业的学生都能做的时候，你很快就会被淘汰了。所以，选方向一定要选自己感兴趣的方向，因为只有这样，&lt;span>你才有兴趣去往深入了学，你才不会在未来被年轻人挤下去。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1.2&lt;/p>&lt;p>认清自己的第二点是&lt;span>认识到人外有人&lt;/span>。自满，自大，自欺欺人是影响自己进步的绊脚石。如果你觉得，你现在已经很了不起了，你能做到这个程度已经很不错了，你就会停滞不前，然后浪费大把的时间。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;blockquote>&lt;p>这是我自己的亲身经历。我的学校是一个双非大学，计算机也不是学校很好的专业，消息也比较闭塞。在我的圈子里，我觉得自己已经很不错了，我之前也一直这样认为。但是，当我今年开始准备春招准备校招的时候，我发现我错了，&lt;span>和真正优秀的人比起来，我什么都不是&lt;/span>。以前觉得自己会的东西，出去一看，大家其实都会；以前觉得很多知识等工作了再去学也不迟，出去一看，发现早就有人学会了。但是，现在认识到这些已经有点晚了，因为已经开始找工作了，没有时间再去让你从头开始学了。&lt;/p>&lt;/blockquote>&lt;p>&lt;br>&lt;/p>&lt;p>所以说，永远不要自满，要知道人外有人。&lt;span>如果有一天，你觉得周围没有人比你更厉害了，一定要记得，不是你走到巅峰了，而是你的圈子，应该扩大了。&lt;/span>只有你的周围，有很多更厉害的人，你才能意识到自己的不足。这也是我常挂在嘴边的：&lt;span>你想变成什么样的人，你就要去认识什么样的人，你的周围是什么样的人，你就会变成什么样的人。&lt;/span>要知道，人以群分。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>二、学习的目的&lt;/span>&lt;/span>&lt;/p>&lt;p>为什么要学习呢？&lt;span>学习的目的，根本上是为了获取竞争优势，增加选择机会。&lt;/span>你比别人懂得多，比别人学的深，你就更有竞争力。对于程序员来说，不懂得学习是没有办法在这个行业混下去的。技术的更新换代，技术的深入掌握都需要去不断的学习，如果你不学，很快就会被淘汰了。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>找工作的时候，有其他专业的朋友会羡慕的和我说：你这个专业真好，一毕业月薪就上万，我才 3，4 千。其实我想说的是，如果不好好学习技术，搞技术的也会失业。大部分的人都只看到一部分计算机的应届生工资很高很羡慕，却忽略了他们这四年是怎么度过的。天上是不会掉馅饼的，计算机专业的每天看剧打游戏，毕业一样找不到工作。希望以后你不会是那群天天打游戏看剧最后抱怨自己工资低的那群人中的一个。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>三、时间管理&lt;/span>&lt;/span>&lt;/p>&lt;p>知道了自己的方向，知道了为什么要学，那么我们接下来谈一谈，怎么安排自己的时间，或者说，&lt;span>怎么制定一个计划&lt;/span>。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>很多人应该都有过这样的经历：我现在很无聊，不知道做什么好，学习吧，不知道学什么，打开电脑也不知道做什么，打开手机也不知道做什么，然后只能选择看个直播，看个电视或者打个游戏来打发时间。当一天过去以后，突然后悔，觉得自己当时要是学习就好了。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>为什么会这样呢？是因为你自己没有一个计划，如果你每天都有一个按时间段安排的计划的话，你就不会迷茫了，你就会知道这个时间点自己应该做什么，而不是用看剧打游戏来打发时间。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>关于时间的管理，首先&lt;/span>：&lt;/p>&lt;blockquote>&lt;p>要有一个大一点的计划，比如年计划，月计划，周计划。&lt;/p>&lt;p>这一年大体上要打到什么目标，这个月要学习哪些知识。&lt;/p>&lt;p>然后是精确到小时的日计划。&lt;/p>&lt;p>每一天，哪个时间段做什么都详细的列出来。&lt;/p>&lt;/blockquote>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>其次，不要太盲目自信。&lt;/span>很多人其实从来没有完成过自己的计划。如果你真的能够完成你制定的每一个计划，那现在的你一定已经很了不起了。如果你几乎没有完成过自己的计划，那么你一开始制定日计划的时候，不要给自己太多的任务。因为如果你一旦完不成，就会影响自己的信心。最好的方式是，&lt;span>一开始制定一些简单的计划，然后每天很容易就能做到，然后慢慢的去增加自己每天的任务量。&lt;/span>最后找到一个最适合自己的节奏。这个过程可能需要很长的时间，因为你要&lt;span>不断的去尝试，去改进&lt;/span>。找到最适合自己的作息时间去休息，找到自己工作状态最好的时间去工作等等。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>最后，不要把你的计划当摆设。虽然我上面说过，&lt;span>很多人其实从来没有完成过自己的计划&lt;/span>。但是我还是希望你能够&lt;span>认真的去对待它&lt;/span>，因为受益的有且只有你自己。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>四、学习方法&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>盲目的学习效果并不好。以前看书的时候，看完一遍再从头看，感觉就像是在看一本新书，完全没有印象。看似自己学了不少，其实真正掌握到的并不多。学习不是你看得书越多，读过的文章越多你就学的越好，而是看你究竟掌握了多了。那么，&lt;span>怎么才能有效的去学习一门新的技术呢&lt;/span>？我总结了以下几个步骤。&lt;/p>&lt;p>&lt;br>&lt;/p></description></item><item><title>程序员被误贴的“六大标签”，你中招了吗？</title><link>https://pangyd.com/post/162/</link><pubDate>Wed, 08 Nov 2017 19:35:50 +0800</pubDate><guid>https://pangyd.com/post/162/</guid><description>&lt;div class="userinfo" data-reactid=".0.1.0.0.0.1.1.0" style="text-align: start">&lt;span class="username" data-reactid=".0.1.0.0.0.1.1.0.0">&lt;br class="Apple-interchange-newline">绅士稀有&lt;/span>&lt;span class="male" data-reactid=".0.1.0.0.0.1.1.0.1">&lt;/span>&lt;span data-reactid=".0.1.0.0.0.1.1.0.2">&lt;span class="honour " data-reactid=".0.1.0.0.0.1.1.0.2.$">&lt;/span>&lt;/span>&lt;/div>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1" style="text-align: start">&lt;p>程序员这个群体，常常被外行人贴上一些错误的标签。今天小编将这些标签整理了一下，快看看你中招了吗？&lt;/p>&lt;p>&lt;strong>排名一：生活邋遢&lt;/strong>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>可以说很多人都在吐槽程序员的生活邋遢，由于工作忙碌的原因，他们常常不修边幅，穿着打扮各方面都是比较随意的。但在我看来，很多程序员早已注意到这个问题，所以他们也开始走“精致生活”路线。无论是穿衣打扮，还是日常生活习惯，都是非常优秀的。&lt;/p>&lt;p>&lt;strong>排名二：修电脑的&lt;/strong>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>“你是程序员对吧？”&lt;/p>&lt;p>“是啊，怎么了？”&lt;/p>&lt;p>“那你帮我修一下电脑吧。”&lt;/p>&lt;p>一般这种尬聊直接的后果就是友尽。很多不了解程序员的人认为，程序员就是写代码的，修电脑应该也是一把好手。在这种神逻辑的驱使下，他们往往是话题终结者。在这里，小编郑重告诉大家：程序员虽然每天编程要和电脑打交道，但他们真没有修电脑这种技能。所以请不要再把天聊死了。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;strong>排名三：不会拍照&lt;/strong>&lt;/p>&lt;p>很多妹子都表示自己的程序员男朋友不会拍照，比如说自己的大长腿拍成了短粗腿。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>但这里要为程序员正名，其实不会拍照的男生很多，为什么非要把这个锅甩给我们程序员。这个锅，我们不背不背。就我的了解，身边的很多程序员朋友都有摄像的爱好，他们入手专业的摄像设备，而且会找一些摄影的兼职。咳咳，当然偶尔会在三里屯的街头拍些好看的妹纸什么的。&lt;/p>&lt;p>&lt;strong>排名四：死宅&lt;/strong>&lt;/p>&lt;p>可能很多人说起程序员，就会想到他们在周末根本不出门，躲在电脑后面刷动漫吧。&lt;/p>&lt;p>今年前半年有个妹纸在街头采访的时候回答了一个问题，突然爆红网络。当采访者问她，你觉得玩地下城的都是怎样一群人时，妹子笑着回答道：“我觉得他们都是一群死肥宅。”&lt;/p>&lt;p>于是，愤怒的“死肥宅”冲上街头，开着自己的宝马，穿上一身帅气西装，将头发梳成大人模样，包下了豪华网吧。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>小编认为，比如“死宅”这个名词作为调侃或自嘲用用可以，但不要使用过度，否则就是对别人的攻击了，难免会伤了和气。很多程序员其实有丰富的业余生活的，可能刚入行时他们都特别忙碌。但这种忙碌的状态不可能一直都存在，等到他们闲下来的时候，其实生活还是很丰富多彩的。&lt;/p>&lt;p>&lt;strong>排名五：缺乏艺术细胞&lt;/strong>&lt;/p>&lt;p>很多人觉得程序员每天都是在进行枯燥的写代码检查bug的工作，但我们谁又没用他们辛苦做出来的产品呢？那些东西就是艺术，是他们思维和智慧的结晶，本身就是一个艺术品。&lt;/p>&lt;p>抛却这些东西不谈，他们能学会枯燥难懂的编程语言，自然就能学会其他的东西。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>事实上，我身边的很多程序员都是多才多艺的，有人会弹吉他，有的拍过自己的微电影，有人是街舞高手。&lt;/p>&lt;p>他们是隐藏的高手，只不过深藏不露罢了。&lt;/p>&lt;p>&lt;strong>排名六：无趣&lt;/strong>&lt;/p>&lt;p>咪蒙说：“有趣是最好的解药”。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>很多人千篇一律的重复着：“好看的皮囊千篇一律，有趣的灵魂万里挑一。”&lt;/p>&lt;p>我们都在叫嚷着有趣，似乎都不愿意承认自己的无趣。程序员这个群体，无趣这个标签算是坐实了很多年。因为工作的原因，他们的逻辑思维跟正常人的稍有不同，所以表现出十分无趣的表象。&lt;/p>&lt;p>但当你真正和他们接触之后就会发现，所谓的无趣都是偏见。因为他们会给你一些意想不到的惊喜，这里请自行脑补。&lt;/p>&lt;/div></description></item><item><title>IT程序员被叫“码农”程序员你怎么看？</title><link>https://pangyd.com/post/161-it/</link><pubDate>Wed, 08 Nov 2017 19:29:06 +0800</pubDate><guid>https://pangyd.com/post/161-it/</guid><description>&lt;p style="text-align: start">在几年之前，”码农“还只是行业内大家互相调侃的称谓，感觉现在几乎所有行业的人都喊IT工程师“码农”。“码农”反而成为了官方称呼了。感觉这不是一个好事，影响学生们对这个行业的看法，感觉好学校的学生都不愿意做技术了。技术大拿们该不该号召大家不要再以码农自称了？&lt;/p>&lt;p style="text-align: start">&lt;br>&lt;/p>&lt;p style="text-align: start">预料之内，这个话题引来众多程序员的讨论，下面摘选了10个比较有代（有）表（意）性（思）的回答：&lt;/p>&lt;p style="text-align: center">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-size="700|569">&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员一：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>歧视农名是不对的！&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员二：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>“码农”比“码畜”好听多了。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员三：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>你多给我一倍薪水，叫我孙子都行。&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员四：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>我们好歹还是人，产品和设计已经是狗了。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员五：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>码农算是好的，硅工是我等打磨芯片的民工的昵称。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员六：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>一位长者告诉我们“中国有句古话,叫做闷声发大财。”&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员七：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>这有什么？有些人还巴不得大家都说他是人民公仆呢。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员八：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>我们公司的美术还管我叫做“打字员”呢，满满的恶意啊&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员九：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>我们每天研究技术，哪有心思管这些，小屁孩们爱来不来。现在码农工资节节高升，正说明了人还不够。等人太多了，工资就会下跌，到时候我们就知道中国需要多少码农了。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>程序员十：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>一年工作经验的java程序员在北京可以拿到8k+以上（保守估计），码农通常智力都不低，少数码农有交际困难，不过多数都没有。这么一群高收入高智力的人群会被人鄙视？别闹了，我们只是自嘲而已，真的有哪个文科生来嘲笑我们，我们绝对会不择手段的在各个方面碾压过去的。trust me&lt;/span>&lt;/p></description></item><item><title>JAVA的图案为什么是咖啡</title><link>https://pangyd.com/post/158-java/</link><pubDate>Mon, 06 Nov 2017 18:19:56 +0800</pubDate><guid>https://pangyd.com/post/158-java/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;div class="content rich" data-reactid=".0.1.0.0.0.1.1.1">&lt;p style="text-align: center">&lt;span>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-size="603|434">&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>JAVA的图案为什么是咖啡？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>在学习JAVA的时候&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>看到了JAVA的图案&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>是一杯咖啡&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>有没有好奇的呢？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>有的话，我们一起来探讨探讨&lt;/span>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;/p>&lt;section class="">&lt;section>&lt;section>&lt;section class="">&lt;/section>&lt;/section>&lt;section style="text-align: center">&lt;section class="">&lt;section class="">&lt;span>第一个版本&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="" style="text-align: center">&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;span>&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span>&lt;span>&lt;span>&amp;nbsp;2000年度的&lt;/span>JavaOne&lt;span>国际会议大厅热闹非凡，一阵阵浓郁的咖啡味儿香气扑鼻。从世界各地汇集到旧金山参加会议的&lt;/span>Java&lt;span>精英们兴奋异常，排着长队，等待得到一杯由&lt;/span>Java&lt;span>语言控制的咖啡机煮制的免费咖啡。这是一个特殊设计的全透明咖啡机。当您按下按钮时，咖啡豆从玻璃管输送到研磨器。磨制后的咖啡粉由另一个玻璃管送到煮制机。沸腾的水滴入咖啡粉中，一杯醇香四溢的咖啡传送到您的手中…由此可见JAVA和咖啡有着不解之缘。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>&lt;span>&lt;span>&lt;img data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" title="1711065214.jpg" class="" data-ratio="1.174731182795699" data-w="372" data-type="jpeg" width="286px" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;/p>&lt;section class="">&lt;section>&lt;section>&lt;section class="">&lt;/section>&lt;/section>&lt;section style="text-align: center">&lt;section class="">&lt;section class="">第二个版本&lt;br>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;span>&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span>&lt;span>最初这个为TV机顶盒所设计的语言在公司内部一直称为&lt;span>Green&lt;/span>项目。“我们的新语言需要一个名字。” 简姆斯&lt;span>.&lt;/span>古斯林一直在考虑这个问题。 有一天，简姆斯古斯林注意到自己办公室外一棵茂密的橡树&lt;span>Oak&lt;/span>，这是一种在硅谷很常见的树。所以他将这个新语言命名为&lt;span>Oak&lt;/span>。但&lt;span>Oak&lt;/span>是另外一个注册公司的名字。这个名字不可能再用了。如果通过正式程序来注册产品的名称将即费时又费钱。简姆斯古斯林决定通过市场部门，请来了一个命名顾问，召开命名征集会。当时，因为没有一个合适的名字，他们不得不延后这个语言的面世。&lt;span>在命名征集会上，大家提出了很多名字。最后按大家的评选次序，将十几个名字排列成表，上报给商标律师。排在第一位的是Silk（丝绸）。尽管大家都喜欢这个名字，但遭到简姆斯古斯林的坚决反对而作罢。排在第二和第三的都没有通过律师这一关。简姆斯古斯林最喜欢的就是排在第三位的&lt;/span>Lyric&lt;span>（抒情诗）。只有排在第四位的名字、得到了所有人的认可和律师的通过。这个名字就是&lt;/span>Java&lt;span>。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>&lt;span>&lt;img data-src="https://pangyd.com/uploads/2017/11/74c10f869f038762.jpg" title="1711063382.jpg" class="" data-ratio="0.815" data-w="400" data-type="jpeg" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;/p>&lt;section class="">&lt;section>&lt;section>&lt;section class="">&lt;/section>&lt;/section>&lt;section style="text-align: center">&lt;section class="">&lt;section class="">&lt;span>第三个版本&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;br>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span>&lt;span>&lt;span>&lt;/span>还有一种说法是马克&amp;nbsp;奥颇门一家咖啡店与同事品尝咖啡时得到灵感的。Java是印度尼西亚爪哇岛的英文名称，因盛产咖啡而闻名。国外的许多咖啡店用Java来命名或宣传，以彰显其咖啡的品质。&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp; &amp;nbsp; &amp;nbsp; Java语言中的许多库类名称，多与咖啡有关。JavaBeans（咖啡豆）、NetBeans（网络豆）以及ObjectBeans&amp;nbsp;（对象豆）等等。从此一个即好听又好记、具有强大的生命力的编程语言Java诞生了。&lt;/span>&lt;/p></description></item><item><title>Java小技巧，从运行、控制到框架</title><link>https://pangyd.com/post/157-java/</link><pubDate>Mon, 06 Nov 2017 18:19:27 +0800</pubDate><guid>https://pangyd.com/post/157-java/</guid><description>&lt;p style="text-align: center">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-size="657|493">&lt;/p>&lt;p>&lt;span>1. JVM相关&lt;/span>&lt;/p>&lt;p>&lt;span>JVM作为java运行的基础，很难相信对于JVM一点都不了解的人可以把java语言吃得很透。我在面试有超过3年Java经验的开发者的时候， JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题，但是可以佐证java开发能力的高低。&lt;/span>&lt;/p>&lt;p>&lt;span>在JVM这个大类中，我认为需要掌握的知识有：&lt;/span>&lt;/p>&lt;p>&lt;span>JVM内存模型和结构&lt;/span>&lt;/p>&lt;p>&lt;span>GC原理，性能调优&lt;/span>&lt;/p>&lt;p>&lt;span>调优：Thread Dump， 分析内存结构&lt;/span>&lt;/p>&lt;p>&lt;span>class 二进制字节码结构， class loader 体系 ， class加载过程 ， 实例创建过程&lt;/span>&lt;/p>&lt;p>&lt;span>方法执行过程&lt;/span>&lt;/p>&lt;p>&lt;span>Java各个大版本更新提供的新特性(需要简单了解)&lt;/span>&lt;/p>&lt;p>&lt;span>2. Java的运行（基础必备）&lt;/span>&lt;/p>&lt;p>&lt;span>这个知识点是最最基本的java开发者需要掌握的，初学java，第一个肯定是教你如何在命令行中执行java程序，但是很多人一旦把java学完了，IDE用上了，就把这个都忘了。为什么强调要知道这个呢，知道了java最纯粹的启动方式之后，你才能在启动出问题的时候，去分析当时启动的目录多少，执行命名如何，参数如何，是否有缺失等。 这样有利于你真正开发中去解决那些奇奇怪怪的可能和环境相关的问题。&lt;/span>&lt;/p>&lt;p>&lt;span>在这里需要掌握的知识有：&lt;/span>&lt;/p>&lt;p>&lt;span>javac 编译java文件为 class 文件&lt;/span>&lt;/p>&lt;p>&lt;span>java 命令的使用， 带package的java类如何在命令行中启动&lt;/span>&lt;/p>&lt;p>&lt;span>java程序涉及到的各个路径(classpath， java。library。path， java运行的主目录等)&lt;/span>&lt;/p>&lt;p>&lt;span>3. 数据类型&lt;/span>&lt;/p>&lt;p>&lt;span>这条没有什么好多说的，无非就是Java中的基本类型和对象类型的掌握。可以再了解一些JDK如何自动转换方面的知识，包括装箱拆箱等，还要注意避免装箱之后的类型相等的判断&lt;/span>&lt;/p>&lt;p>&lt;span>主要知识点：&lt;/span>&lt;/p>&lt;p>&lt;span>基本类型： int， long， float， double， boolean ， 。。。&lt;/span>&lt;/p>&lt;p>&lt;span>对应的对象类型： Integer 等类型到基本类型的转换， 装箱和拆箱&lt;/span>&lt;/p>&lt;p>&lt;span>Object类型： equals， hashcode&lt;/span>&lt;/p>&lt;p>&lt;span>String 类型的特点&lt;/span>&lt;/p>&lt;p>&lt;span>4. 对象和实例，对象的创建&lt;/span>&lt;/p>&lt;p>&lt;span>在这方面，开发者需要了解class和instance的概念以及之间的差别， 这是java面向对象特性的一个基础。主要知识点有：&lt;/span>&lt;/p>&lt;p>&lt;span>Class和 Instance 的概念&lt;/span>&lt;/p>&lt;p>&lt;span>Instance 创建的过程：&lt;/span>&lt;/p></description></item><item><title>Java项目实战经验—程序员成长的钥匙</title><link>https://pangyd.com/post/156-java/</link><pubDate>Sun, 05 Nov 2017 19:49:28 +0800</pubDate><guid>https://pangyd.com/post/156-java/</guid><description>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>Java就是用来做项目的！Java的主要应用领域就是企业级的项目开发！要想从事企业级的项目开发，你必须掌握如下要点：&lt;/p>&lt;p>1、掌握项目开发的基本步骤&lt;/p>&lt;p>2、具备极强的面向对象的分析与设计技巧&lt;/p>&lt;p>3、掌握用例驱动、以架构为核心的主流开发方法&lt;/p>&lt;p>没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧，别人告诉你要实现什么，你就用代码堆砌来实现别人的要求！你必须学会从整个项目的角度去思考！你必须学会假如你是项目经理，你该如何思考！你必须学会假如你是架构师，你该如何思考！你必须掌握针对某个特定问题领域的分析方法！&lt;/p>&lt;p>关于基础知识：你可以看看这些名词或知识点，看是否能说出个一二三四来。&lt;/p>&lt;p>JavaSE&lt;/p>&lt;p>----基本语法、数据类型、操作符等：int、long、Integer、Long、if、else、for、while&lt;/p>&lt;p>----面向对象：class（类）、Object（对象）、instance（实例）、state（状态）、behavior（行为）、field、method、new、可见性（访问控制）、attribute、property、package、import、static variable、class variable、instance variable、heap、method area、stack、GC（垃圾回收）、override、overload、对象转型(casting)、多态、this、super&lt;/p>&lt;p>----异常处理：理解编译期错误和运行期错误的区别、Exception、RuntimeException、checked exception、unchecked exception、try、catch、finally、throw new XXXException、throws XXXException、异常处理的基本原则&lt;/p>&lt;p>----数组与集合：数组的定义和使用方法、Collection、List、Set、Map、ArrayList、HashSet、HashMap、Iterator、equals、hashCode、Comparable、Comparator&lt;/p>&lt;p>----常用类：String、intern、常量池、StringBuffer、java.util.Date、SimpleDateFormat、Regex（正则表达式）&lt;/p>&lt;p>----反射机制：Class、Method、Field、invoke、newInstance、BeanUtils（apache-commons）、PropertyUtils（apache-commons）&lt;/p>&lt;p>----输入输出流：InputStream、OutputStream、Reader、Writer、Adapter设计模式与原始流类、Decorator设计模式与包装流类、对象序列化和反序列化&lt;/p>&lt;p>----多线程：Thread、Runnable、sleep、wait、notify、synchronized、lock&lt;/p>&lt;p>Servlet和JSP&lt;/p>&lt;p>----HttpServlet、doGet、doPost、HttpServletRequest、HttpServletResponse、request.getParameter()、request.setAttribute()、request.getAttribute()、request.getSession()、ServletContext、Filter、web.xml、tomcat、forward与redirect、http协议的无状态性、cookie、JSP Scope Object、、&lt;/p>&lt;p>HTML与JavaScript&lt;/p>&lt;p>----你需要能够理解常见的网页标签、理解在网页中引入JavaScript的方法、以及JavaScript的基本语法与使用方法&lt;/p>&lt;p>以上，就是你进一步学习Java所必备的基本知识。特别是一些个专业术语和名词，看到这些名词，如果你像看到亲爹一样亲切，那么说明你对Java的基础知识就很熟悉了。&lt;/p>&lt;p>接下来是SSH：&lt;/p>&lt;p>对于初学者来说，这三大框架被赋予了太多神秘的色彩，似乎它们是重中之重的知识！但是对于拥有多年Java开发经验的专业技术人员来说，对于那些Java牛人来说，却对这三大框架不太感冒！难道它们不重要吗？&lt;/p>&lt;p>现在很多企业都在用这三大框架，所以很多企业也把掌握这三大框架作为招聘的必备条件。不可否认的是，也有很多大型企业没有用这三大框架，这些企业经过多年发展，自身已经有一定的技术积累，也形成了自己独特的技术框架体系。这三大框架既可以说很重要，也可以说不重要。&lt;/p>&lt;p>说重要的原因在于：这三大框架对JavaEE开发中所存在的普遍的问题，提供了优美的解决方案，它们蕴含了这个行业中最NB的开发人员的努力和想法，所以，学习这三大框架，你就可以窥探到这些处于技术巅峰的牛人们究竟对一个问题是怎么想的，通过一种什么样的设计思路去解决问题的。所以，对于你来说，你没有太多项目开发的经验，经验是什么？经验就是你知道可能会遇到哪些问题，针对哪个问题可以有哪些解决方法，在某个情景下，哪种解决方法是较好的，哪种方法不太好等等！如果你没做过什么项目，你根本就不会去意识到你可能会遇到哪些问题，而这些问题往往又是非常关键的！解决得不好，会影响到你的程序的稳定性、可扩展性等等！三大框架就给初学者提供了了解你以后可能会遇到哪些问题，以及针对这些问题的解决方案！&lt;/p>&lt;p>当你了解了这三大框架为什么是重要的，那么你也就能理解，为什么这三大框架也可以说是不重要的。如果你曾经开发过很多项目，你碰到了各种各样的问题，凭着你的技术功底，逐个击破了这些问题，在这些人眼里，三大框架（是不是还有N个框架？呵呵）都是浮云！&lt;/p>&lt;p>你属于哪一种人呢？如果你没有太多项目开发经验，那么三大框架对于你来说就是非常重要的！而且，由此你也知道了该怎么去学这三大框架。对于三大框架的学习而言，着力点在于给你展示问题，并触发你自己主动的思考，我们鼓励你提出自己的想法，也许你的想法很白痴，但那毕竟是你自己的想法，如果你不知道牛人的想法，那你怎么知道自己的想法是很白痴的呢？在这种思想的碰撞过程中，你就会逐渐提高自己！所以，三大框架学完之后，你不应该只是看到一大堆配置文件，你不应该只是看到了一些Action，一些Service，一些映射文件，你不应该只知道session.save/update/delete，你不应该只是知道struts2中有一堆interceptor，你不应该只是看到一堆jar包……&lt;/p>&lt;p>如果你只是知道拷贝一堆jar包，定义一系列配置文件之后，SSH三大框架就能够运行起来了，也可以给你干活了，那么，很悲哀的是，你仍然没有掌握三大框架的精粹！请你回答以下问题：&lt;/p>&lt;p>Struts2：&lt;/p>&lt;p>为什么每次请求都要创建一个Action对象？&lt;/p>&lt;p>ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题？&lt;/p>&lt;p>为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求？&lt;/p>&lt;p>请你给我谈谈ValueStack？&lt;/p>&lt;p>Struts2是如何实现MVC设计模式的？&lt;/p>&lt;p>Spring：&lt;/p>&lt;p>你为什么要用Spring？&lt;/p>&lt;p>请你聊一聊IOC/DI？&lt;/p>&lt;p>什么是声明式的事务管理？为什么要使用声明式的事务管理？Spring如何实现声明式的事务管理？&lt;/p>&lt;p>把spring和hibernate集成，定义事务管理特性的时候，为何要将除了添加、删除、更新操作之外的方法，即主要执行查询任务的方法定义为read-only？&lt;/p>&lt;p>Hibernate：&lt;/p>&lt;p>请你谈谈你对OR映射的理解？&lt;/p>&lt;p>很多人说Hibernate不适合大项目，性能有问题，你是如何理解的？&lt;/p>&lt;p>Hibernate为什么一定要定义一个数据库标识？&lt;/p>&lt;p>为什么Hibernate建议你的实体类实现hashCode和equals方法？&lt;/p>&lt;p>谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识？&lt;/p>&lt;p>谈谈你对Hibernate关联映射与数据库外键之间关系的认识？&lt;/p>&lt;p>调用session.save()方法，hibernate一定会发出insert语句吗？谈谈你的理解&lt;/p>&lt;p>调用session.update()方法，hibernate一定会发出update语句吗？谈谈你的理解&lt;/p>&lt;p>请你聊一下以下名词、概念或用法：lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size&lt;/p>&lt;p>配置了lazy=”true”一定会实现懒加载吗？&lt;/p>&lt;p>请你谈谈Hibernate中的“N 1”问题&lt;/p>&lt;p>请你谈谈Hibernate有哪些最佳实践？&lt;/p>&lt;p>以上并非SSH中全部重点的问题，但它们能考察你能否灵活运用SSH框架！如果你能深刻理解这些问题，再配以合适的实战项目训练，你也会逐渐成为牛人！&lt;/p>&lt;p>最后是项目开发能力：&lt;/p>&lt;p>不管你是学Java还是别的技术，你的根本目的在于给客户创造价值！否则，你下大力气学习的东西，随着技术的进步和更新，很快就会过时！所以，技术的核心在于用技术创造有价值的成果！也就是说，客户需要什么，你就要用技术把客户需要的东西给他造出来！一个公司之所以要用各种福利条件极力挽留你，是因为你能够给公司带来极高的利益！那么，你有什么可以给公司利用的呢？公司最看重你的哪方面的能力呢？&lt;/p></description></item><item><title>35年编程史沉淀下来的8条宝贵经验</title><link>https://pangyd.com/post/149-358/</link><pubDate>Sun, 29 Oct 2017 19:39:10 +0800</pubDate><guid>https://pangyd.com/post/149-358/</guid><description>&lt;p>1&amp;nbsp;&lt;span>时刻提醒自己：学习&lt;/span>&lt;/p>&lt;p>学习某件事的第一步是承认你不知道。这听起来很正常，但经验丰富的程序员还记得要真正让自己承认这一点需要花多长时间。很多计算机科学专业的学生毕业的时候，都有一种很傲慢的态度，就是“我知道最好的”，但其实这只是一种虚张声势，他们不知道从哪里来的自信，就好像他们什么都知道，并且需要向每一位新同事强烈的证明这一点。换句话说:你所谓的“我知道我在做什么！”这种态度会妨碍你学习新的东西。&lt;/p>&lt;p>2. 不要试图证明自己是正确的&lt;/p>&lt;p>要想成为优秀的人，你必须学会吃一堑长一智。但是千万小心，经验也可能教会我们重复一些不良行为，甚至也教会我们养成一些不好的习惯。我们都遇到过有8年经验的程序员。对于他们来说，同样的经历，重复了8次。为了避免这种综合症，看看你做的每一种事情，然后问自己:“我怎样才能让它变得更好?”&lt;/p>&lt;p>新手(以及很多经验丰富的开发人员)会看着他们自己写的代码，欣赏它的奇妙。他们编写测试来证明他们写的代码是可以运行的，而不是试图让它运行失败。真正优秀的程序员会积极地寻找他们的错误在哪里，因为他们知道最终用户会发现这些遗漏的bug。&lt;/p>&lt;p>&lt;span style="text-align: center">3. “代码可以运行了”这个目标不是终点，而是起点&lt;/span>&lt;/p>&lt;p>是的，你的第一步总是想写出质量很高的代码，而且代码上面都写满了注释。但是一般的程序员在这一点上就退出，然后继续下一件事。&lt;/p>&lt;p>但是一旦“完成”就停止了这种思想就像是拍一张快照，然后期待它是一件艺术品一样。伟大的程序员都知道第一次迭代只是一次迭代。它运行起来了,恭喜你!但你的工作还有很多。现在,使它变的更好。&lt;/p>&lt;p>其实这个过程就是在定义“更好”的含义。让它变得更快能有什么价值吗?可重用更高有什么好处吗?更可靠吗?答案随着每个应用程序的不同而不同，但是过程都是一样的。&lt;/p>&lt;p>4. 写三次代码&lt;/p>&lt;p>好的程序员目标是写出可以运行的软件就可以了。伟大的程序员写出来的软件目标是运行得非常好。通过一次编写这种情况几乎不可能发生。最好的软件通常被写三次:&lt;/p>&lt;p>首先，编写软件以向你自己(或客户)证明解决方案是可行的。其他人可能没有意识到这只是一个概念验证，但你确实这么做了。&lt;/p>&lt;p>第二次可以让它正常地运行。&lt;/p>&lt;p>第三次你能够让它平稳的运行。&lt;/p>&lt;p>当你看到最优秀的开发人员的工作时，这种级别的工作可能并不明显。他们所做的一切看起来都很出色，但你没有看到的是，即使是开发界的大腕儿，也可能在向其他人展示他们的软件之前就已经抛弃了第一个和第二个版本。抛弃之前的代码并开始编写另一个版本是一种强大的方式，可以将“更好地”融入到您的个人工作流程中。&lt;/p>&lt;p>如果没有其他情况，通过“写三次代码”可以告诉你解决问题的方法有多少种。而且它可以防止你陷入停滞不前的状态。&lt;/p>&lt;p>5. 阅读大量的代码&lt;/p>&lt;p>你可能希望我能够引导这个建议，实际上，这也是提高编程技能的最常见和最有价值的建议。阅读他人代码的原因也很重要，只是不是很明显而已。&lt;/p>&lt;p>当阅读其他人的代码时，你会看到其他人是如何解决编程问题的。但不要把它当成是文学作品，而是把它当成一种教训和一种挑战。想要变得更好，问问自己：&lt;/p>&lt;p>那块代码我该怎么写呢?既然你已经看到了别人的解决方案，那你会有什么思路呢?&lt;/p>&lt;p>我学到了什么？我如何将这种技术应用到我过去编写的代码中？（“我从来没有想过可以使用递归下降处理那块的逻辑”）。&lt;/p>&lt;p>我如何改进这段代码?如果这是一个开源项目，你对自己的解决方案更有信心，那就去做吧！&lt;/p>&lt;p>以作者的风格编写代码。练习这个可以帮助你进入作者的思维，这可以提高你的同情心。&lt;/p>&lt;p>不要只是漫不经心地思考这些步骤。写下你自己的答案，无论是在个人日志、博客、审查代码的过程中，还是与其他开发人员交流的论坛中。就像向朋友解释问题可以帮助你解决问题一样，记录和分享你的分析可以帮助你理解为什么你会以一种特定的方式对别人的代码做出反应。这是我之前提到的自省的一部分，帮助你冷静地判断你自己的优点和缺点。&lt;/p>&lt;p>警告:在不需要成为一名优秀程序员的情况下，很容易阅读大量的代码，就像一个想要成为作家的人可以在不提高自己散文的情况下阅读伟大的文学作品一样。很多开发人员都在寻找开源或其他软件来“找到答案”，而且很可能是复制和粘贴代码来解决类似的问题。这样做实际上会让你成为一个更糟糕的程序员，因为你盲目地接受别人的智慧而不去审视它。(另外，它可能比夏季野餐还要麻烦，但因为你没有花时间去理解它，你永远不会意识到你就像是大自然的搬运工一样，只是在做体力劳动。)&lt;/p>&lt;p>&lt;span style="text-align: center">6. 不要把编写代码仅仅看作是任务&lt;/span>&lt;/p>&lt;p>从事个人编程项目有很多优势。首先，它为你提供了一种学习工具以及学习技术的方法，而这些工具和技术在你当前的工作中是用不到的，但是这将使你在下一份工作中更有市场。无论你是为开源项目做贡献，还是为当地社区组织做公益工作，你都能获得技术技能和自信。(此外，你的个人项目向潜在雇主证明，你是一个从不停止学习的人。)&lt;/p>&lt;p>编写代码的另一个好处是它强迫你自己去解决问题。你不能把这些难啃的问题留给别人，所以它会让你过早地寻求帮助。&lt;/p>&lt;p>专业提示:不要只选择那些你永远不会失败的个人项目。你需要失败!但是你可能不想在工作中失败，或者给你限定期限时你也不想失败。&lt;/p>&lt;p>7.尽一切可能做到与其他开发人员面对面的工作&lt;/p>&lt;p>倾听别人的意见是很有帮助的。这可能意味着结对编程，或者参加黑客马拉松，或者加入一个编程用户组(比如Vermont Coders Connection)。当你为一个开源项目做贡献时，要关注一下你从用户和其他开发者得到的反馈意见。你在他们的批评中看到了什么共同点?&lt;/p>&lt;p>这样做你可能会很幸运地认识了一位可以完全信任的导师，无路是编码技术还是职业决策，你都可以完全信任他。所以不要浪费这些机会。&lt;/p>&lt;p>8. 你是在学习技术,而不是在学如何使用工具&lt;/p>&lt;p>编程语言、工具和方法这些都只是一时的。这就是为什么需要你在这么多的语言和框架中尽可能多的获得经验。重点关注编程基础，因为基础永远不会改变;更关注体系结构而不是如何编程。如果你觉得做某件事只有一种正确的方式，那可能是时候进行现实核查了。条条框框的限制会妨碍你学习新事物的能力，也会使你很难适应变化。&lt;/p>&lt;p>我可以继续前进，但自我提升的关键原则是知道何时停止。&lt;/p>&lt;p style="text-align: center">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" max-width="600">&lt;/p>&lt;div>&lt;br>&lt;/div></description></item><item><title>有一个程序员男朋友是怎样的体验？</title><link>https://pangyd.com/post/141/</link><pubDate>Sat, 21 Oct 2017 20:53:09 +0800</pubDate><guid>https://pangyd.com/post/141/</guid><description>&lt;p>高中毕业我们两个人在一起，现在他在上班，我在读研。大学时期他学的是计算机科学技术，毕业后顺利成为了一名程序猿。现在网络上对程序员这个职业议论纷纷。&lt;/p>&lt;p>他现在的工作职位是中级前端工程师，我经常吐槽他名字听上去很高大上，但实际还不是一个程序员。&lt;/p>&lt;p>作为资深的程序员女友，来聊聊有一个程序员男友的体验。&lt;/p>&lt;p>生活日常&lt;/p>&lt;p>程序员不是只会修电脑的生物，他们在生活中有很多技能。男朋友是程序员后基本自己的电脑出问题都不用再担心，电脑清灰、重装系统，他可以承包一切电子产品的障碍维修工作。大学的时候我们寝室所有女生电脑出问题，我都第一时间先给男朋友打电话报修，虽然他一再强调自己不是修理工，但是每次都修的自得其乐。&lt;/p>&lt;p>感觉有一个技术大牛陪在身边，简直无所不能。&lt;/p>&lt;p>男朋友高中理科读上来，毕业后也算是标准的工科男。很多人觉得工科男智商高情商低。因为他们不善于交际，每天都只是和一些数字符号代码打交道。&lt;/p>&lt;p>这一点我深有感触。关于情商方面，他好像永远不懂“浪漫”两个字的含义。在一起这么多年从来没有送过花花草草给我！每逢过节日都需要我提前提醒他“嗯纪念日快到了！生日快到了！情人节快到了！”最近开始送我口红，都是我在网上选好款式和色号直接把链接甩给他。有时候抱怨一点都没有惊喜感，他反倒安慰这才是实在的过日子。&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>有时候聊天给他抱怨为什么不学着别的男生给自己女朋友制造惊喜，比如送送花啥的。然后他竟然去百度！！百度！！搜索男人为什么要送花给女人。我当时也是被他这个点萌到不行，突然间又觉得他很可爱。&lt;/p>&lt;p>再看下面 ️&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>连求婚这种事都要提前告诉我的吗！我真的是又爱又恨，能不能有点惊喜了。在我看来这种人生大事肯定男生要好好准备，然后制造一个浪漫的求婚计划，而不是直接告诉我，感觉不接受都不行了，有一种被胁迫扯证的感觉。&lt;/p>&lt;p>很多人说程序员的性格就是闷骚，看着内向不爱说话，实际心里可有货了。虽然我男朋友不太懂浪漫，但是在生活上还是给予了我足够的照顾，有时候细心到惊讶我的程度。&lt;/p>&lt;p>都说恋爱中的女人智商为零。&lt;/p>&lt;p>那我们两个人刚好互补呀，他智商高情商低，我情商高智商低。&lt;/p>&lt;p>在生活中他幽默、可爱，偶尔犯二，和他在一起永远不觉得无聊。&lt;/p>&lt;p>优点爆表&lt;/p>&lt;p>生活中我是一个急性子，而且性格多变。但刚好他超级有耐心。可能是因为工作性质原因，经常听到他说“客户改需求了，客户又改需求了噼里啪啦的，换作我早就不干了。每次看他对待客户都是一副客户虐我千百遍，我待客户如初恋的感觉。&lt;/p>&lt;p>对待善变的客户都如此有耐心，所以在他看来，我善变的性格也属于正常范围了。&lt;/p>&lt;p>责任心也是一大特点，对于自己编程过程中出现的bug，一副不改好不睡觉的态度，所以有时候在电脑面前一坐就是凌晨，下班回家只是换个地方加班。他说没有责任心的程序员写出来的代码都是问题。&lt;/p>&lt;p>他们善于学习，上进。只要有空就会专研技术方面的知识、整理笔记。虽然我男朋友在上班了，但是依然坚持每天看书学英语。有时候在他面前我感觉自己这个研究生特别惭愧，英语还没他好呢。他学习能力也是超强，总是能很快自学成功，果然智商高的生物惹不起。&lt;/p>&lt;p>迷恋电子产品，跟他在一起后我的电子产品更新换代的速度加快了，每次看他吐槽一个产品，过段时间就买回来了（真不知道是啥心态）。以前觉得自己买化妆品挺贵，但是了解他的键盘、电竞椅价格后，好像觉得我这点也不算啥了。&lt;/p>&lt;p>程序员这个职业，都不会太穷。（你们懂的）&lt;/p>&lt;p>他们不会有太多的社交去维系，每天下班就是宅。身边除了男生就是男生，这一点是其他职业比不了的。所以当程序员的女朋友可以放宽心，你不用花精力去窥探男朋友身边的人，毕竟十个程序员，七个单身狗，两个搞基友，只有一个有女朋友！&lt;/p>&lt;p>坚实后盾&lt;/p>&lt;p>对于程序员来说虽然加班是家常便饭，虽然有写不完的代码改不完的bug，但是每次只要我需要他，他就会放下手上的事第一时间出现。&lt;/p>&lt;p>所以不是说所有的程序员都木讷、不体贴，至少我身边这位不是。&lt;/p>&lt;p>他知道我不敢一个人在家呆太晚，所以每次都会尽快回家陪我，他知道我喜欢吃的东西，每次帮我买零食回家样样都是我的最爱，他比我还了解自己。&lt;/p>&lt;p>从不和我吵架，有时候我在气头上他自己就去写代码，过一会我自己气消了就像啥也没发生。&lt;/p>&lt;p>他虽然喜欢玩游戏、看直播，但是只要我不想，就会陪我一起追韩剧，看电影，任我在旁边怒吼好帅好帅啊他就冷冷地冒句：你身边这位才最帅。&lt;/p>&lt;p>生活上学习上有任何困难，第一时间找男朋友，好像没有他解决不了的事情，就像我人生导师一样。&lt;/p>&lt;p>程序员之间的冷幽默也是外人理解不了的，他们之间存在的鄙视链就相对简单了：&lt;/p>&lt;p>女朋友漂亮的程序员——女朋友不漂亮的程序员——有女朋友的程序员——单身程序员。&lt;/p>&lt;p>每次我吐槽他职业的时候他就安慰我说：找程序员做老公就对了，因为他们只会找bug，不会找小三。&lt;/p>&lt;p>有时候被他蠢萌的样子给融化，外人都觉得程序员很闷，其实并不都是这样。他们还是冷幽默、体贴、善解人意、聪明。我觉得现在外行对这个职业误会挺深的，并不是所有程序员都是戴个眼镜，穿着格子衬衫，背着书包，只会修电脑打游戏。&lt;/p>&lt;p>你想要的，都会尽力给你。面包和爱情，他们一样也不少。&lt;/p>&lt;p>我很谢谢我这位呆萌的程序员男朋友，这么多年爱我如初。事业上，生活里我们相互扶持包容，风雨兼程。&lt;/p>&lt;p>其实程序员男朋友也没啥特别的，但是对于我来说他就是独一无二的。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>本文链接:https://buluo.qq.com/p/detail.html?bid=11314&amp;amp;pid=8931774-1508579587&amp;amp;from=share_copylink&lt;/p></description></item><item><title>Java程序员面试时需要注意的几点</title><link>https://pangyd.com/post/138-java/</link><pubDate>Tue, 17 Oct 2017 21:03:12 +0800</pubDate><guid>https://pangyd.com/post/138-java/</guid><description>&lt;p>给自己写一份非常专业的简历&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>如果你想增加自己的入选机会，那最好还是花点钱制作一份专业的简历。相较于你将来可能得到的巨大收获，这真的只是一个小小的投资。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>研究面试公司&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>如果你对自己所要面试的公司了如指掌，甚至对官网上的一些博客或视频能够侃侃而谈，相信一定能更能给面试官留下深刻印象，当然，在这过程中也要注意，意见的发表要把握尺度，自信而不自傲！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>永远不要撒谎&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>最糟糕的就是在面试的时候撒谎。知之为知之，不知为不知，如果你确实不知道，千万不要自作聪明来编造问题的答案。相反，你应该诚实的说，你不知道或者你并不是百分百的肯定，但是你愿意尝试一下，然后再讲讲自己的想法。讲完后也可以问面试官正确答案是什么，以显示你对此非常感兴趣。&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;p>一般来讲，面试官问的问题大都都是他们知道的问题如果你滥竽充数抱着侥幸心理，一旦被发现，面试官马上会质疑你的人品。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>学会解决算法问题&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>这是每一个开发人员都应该具备的重要技能，而且真要掌握起来也并非那么难。&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;p>在很多面试中，都会有这样的问题，要求你在白板或者电脑上解决软件编程问题，但是许多程序员，即使是那些非常优秀的程序员，都会一下子大脑一片空白，完全理不出思路来。如果你能花时间学会如何解决这种类型的面试问题，那么下次再碰到这种场景，就不会这么紧张了。我们会紧张其实和怯场无关，主要是因为我们不熟悉这些问题，也没有自信能解决这种问题。在这方面建立起自信之后，你就再也不会紧张了。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>活力洋溢地回答问题&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>只用一个字或者一句话，照本宣科平平无奇地回答问题，或许在技术上是正确的，但是你忘了应该借此机会好好展示自己的激情——这才是一个开发人员能带给团队的最大正能量。&lt;/p></description></item><item><title>【概念】每个程序员都应该知道的基础数论</title><link>https://pangyd.com/post/137/</link><pubDate>Mon, 16 Oct 2017 20:05:21 +0800</pubDate><guid>https://pangyd.com/post/137/</guid><description>&lt;p>这篇文章讨论了数论中每个程序员都应该知道的几个重要概念。本文的内容既不是对数论的入门介绍，也不是针对数论中任何特定算法的讨论，而只是想要做为数论的一篇参考。如果读者想要获取关于数论的更多细节，文中也提供了一些外部的参考文献(大多数来自于 Wikipedia 和 Wolfram )。&lt;/p>&lt;p>每个程序员都应该知道的基础数论&lt;/p>&lt;p>0. 皮亚诺公理&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>整个算术规则都是建立在 5 个基本公理基础之上的，这 5 个基本公理被称为皮亚诺公理。皮亚诺公理定义了自然数所具有的特性，具体如下：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>0是自然数;&lt;/p>&lt;p>每个自然数都有一个后续自然数;&lt;/p>&lt;p>0不是任何自然数的后续自然数;&lt;/p>&lt;p>不同自然数的后续自然数不同;&lt;/p>&lt;p>如果集合S包含了数字0，并且包含S中每一个数字的后续自然数，那么集合S就包含了所有的自然数。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>上述第5个公理也被称为“数学归纳法的基础”。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>通常，除了我们想要证明其他算术定理的情况，我们很少直接使用上述公理。但作为算术的基石，这些公理是值得我们去了解的。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1. 算术基本定理和除法运算法则&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>正如这个定理的名称所言，算术基本定理是数论中所有概念的核心。算术基本定理含义如下：任何一个大于1的整数都可以以某种特定的方式写成质数的乘积的形式(这种特定方式取决于乘积中质数的顺序)。例如，18 = 2 * 9, 1755 = 33 *5 * 13. 这个定理在几乎所有的数论运算法则中都扮演着十分重要的角色，例如求一个数的质数因子、最大公约数、除数的和等等。想要证明这个定理其实很简单，实际上它是欧几里得第一个定理的一个推论(下面小节会讨论到)。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>除法运算法则含义是说：给定两个整数a，b(b不等于0)，那么存在两个整数q和r使得下面的等式成立：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>a = bq + r， 0 &amp;lt;= r &amp;lt; b&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>通常我们把q称为商，而把r称为余数。如果r = 0，那么我就说b整除a，并且表示为：b | a.&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2. 欧几里得定理&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>数学中两个重要定理，被称为“欧几里德的第一定理(或欧几里德的引理)”和“欧几里德的第二定理(通常简称为”欧几里德定理“)，内容如下：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>第一定理：p|ab =&amp;gt; p|a or p|b。该定理的直接结论就是算术基本定理。&lt;/p>&lt;p>&lt;br>&lt;/p></description></item><item><title>服务端 I/O 性能大比拼：Node、PHP、Java 和 Go</title><link>https://pangyd.com/post/134-i-o-nodephpjava-go/</link><pubDate>Sat, 14 Oct 2017 19:47:46 +0800</pubDate><guid>https://pangyd.com/post/134-i-o-nodephpjava-go/</guid><description>&lt;p>理解应用程序的输入/输出（I/O）模型，意味着其在计划处理负载与残酷的实际使用场景之间的差异。若应用程序比较小，也没有服务于很高的负载，也许它影响甚微。但随着应用程序的负载逐渐上涨，采用错误的I/O模型有可能会让你到处踩坑，伤痕累累。&lt;/p>&lt;p>正如大部分存在多种解决途径的场景一样，重点不在于哪一种途径更好，而是在于理解如何进行权衡。让我们来参观下I/O的景观，看下可以从中窃取点什么。&lt;/p>&lt;p>&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="1" data-w="1280" data-type="jpeg" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>在这篇文章，我们将会结合Apache分别比较Node，Java，Go，和PHP，讨论这些不同的语言如何对他们的I/O进行建模，各个模型的优点和缺点，并得出一些初步基准的结论。如果关心你下一个Web应用的I/O性能，那你就找对文章了。&lt;/p>&lt;h2>I/O基础知识：快速回顾&lt;/h2>&lt;p>为了理解与I/O密切相关的因素，必须先来回顾在操作系统底层的概念。虽然不会直接处理这些概念的大部分，但通过应用程序的运行时环境你一直在间接地处理他们。而关键在于细节。&lt;/p>&lt;h3>系统调用&lt;/h3>&lt;p>首先，我们有系统调用，它可以描述成这样：&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>你的程序（在“用户区域”，正如他们所说的）必须让操作系统内核在它自身执行I/O操作。&lt;/p>&lt;/li>&lt;li>&lt;p>“系统调用”（syscall）意味着你的程序要求内核做某事。不同的操作系统，实现系统调用的细节有所不同，但基本的概念是一样的。这将会有一些特定的指令，把控制权从你的程序转交到内核（类似函数调用但有一些专门用于处理这种场景的特殊sauce）。通常来说，系统调用是阻塞的，意味着你的程序需要等待内核返回到你的代码。&lt;/p>&lt;/li>&lt;li>&lt;p>内核在我们所说的物理设备（硬盘、网卡等）上执行底层的I/O操作，并回复给系统调用。在现实世界中，内核可能需要做很多事情才能完成你的请求，包括等待设备准备就绪，更新它的内部状态等，但作为一名应用程序开发人员，你可以不用关心这些。以下是内核的工作情况。&lt;/p>&lt;/li>&lt;/ul>&lt;p>&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="1" data-w="1280" data-type="jpeg" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;h3>阻塞调用与非阻塞调用&lt;/h3>&lt;p>好了，我刚刚在上面说系统调用是阻塞的，通常来说这是对的。然而，有些调用被分类为“非阻塞”，意味着内核接收了你的请求后，把它放进了队列或者缓冲的某个地方，然后立即返回而并没有等待实际的I/O调用。所以它只是“阻塞”了一段非常短的时间，短到只是把你的请求入列而已。&lt;/p>&lt;p>这里有一些有助于解释清楚的（Linux系统调用）例子：&lt;code>-read()&lt;/code>是阻塞调用——你传给它一个文件句柄和一个存放所读到数据的缓冲，然后此调用会在当数据好后返回。注意这种方式有着优雅和简单的优点。&lt;code>-epoll_create()&lt;/code>，&lt;code>epoll_ctl()&lt;/code>，和&lt;code>epoll_wait()&lt;/code>这些调用分别是，让你创建一组用于侦听的句柄，从该组添加/删除句柄，和然后直到有活动时才阻塞。这使得你可以通过一个线程有效地控制一系列I/O操作。如果需要这些功能，这非常棒，但也正如你所看到的，使用起来当然也相当复杂。&lt;/p>&lt;p>理解这里分时差异的数量级是很重要的。如果一个CPU内核运行在3GHz，在没有优化的情况下，它每秒执行30亿次循环（或者每纳秒3次循环）。非阻塞系统调用可能需要10纳秒这样数量级的周期才能完成——或者“相对较少的纳秒”。对于正在通过网络接收信息的阻塞调用可能需要更多的时间——例如200毫秒（0.2秒）。例如，假设非阻塞调用消耗了20纳秒，那么阻塞调用消耗了200,000,000纳秒。对于阻塞调用，你的程序多等待了1000万倍的时间。&lt;/p>&lt;p>&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="1" data-w="1280" data-type="jpeg" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>内核提供了阻塞I/O（“从网络连接中读取并把数据给我”）和非阻塞I/O（“当这些网络连接有新数据时就告诉我”）这两种方法。而使用何种机制，对应调用过程的阻塞时间明显长度不同。&lt;/p>&lt;h3>调度&lt;/h3>&lt;p>接下来第三件关键的事情是，当有大量线程或进程开始阻塞时怎么办。&lt;/p>&lt;p>出于我们的目的，线程和进程之间没有太大的区别。实际上，最显而易见的执行相关的区别是，线程共享相同的内存，而每个进程则拥有他们独自的内存空间，使得分离的进程往往占据了大量的内存。但当我们讨论调度时，它最终可归结为一个事件清单（线程和进程类似），其中每个事件需要在有效的CPU内核上获得一片执行时间。如果你有300个线程正在运行并且运行在8核上，那么你得通过每个内核运行一段很短的时间然后切换到下一个线程的方式，把这些时间划分开来以便每个线程都能获得它的分时。这是通过“上下文切换”来实现的，使得CPU可以从正在运行的某个线程/进程切换到下一个。&lt;/p>&lt;p>这些上下文切换有一定的成本——它们消耗了一些时间。在快的时候，可能少于100纳秒，但是根据实现的细节，处理器速度/架构，CPU缓存等，消耗1000纳秒甚至更长的时间也并不罕见。&lt;/p>&lt;p>线程（或者进程）越多，上下文切换就越多。当我们谈论成千上万的线程，并且每一次切换需要数百纳秒时，速度将会变得非常慢。&lt;/p>&lt;p>然而，非阻塞调用本质上是告诉内核“当你有一些新的数据或者这些连接中的任意一个有事件时才调用我”。这些非阻塞调用设计于高效地处理大量的I/O负载，以及减少上下文切换。&lt;/p>&lt;p>到目前为止你还在看这篇文章吗？因为现在来到了有趣的部分：让我们来看下一些流利的语言如何使用这些工具，并就在易用性和性能之间的权衡作出一些结论……以及其他有趣的点评。&lt;/p>&lt;p>请注意，虽然在这篇文章中展示的示例是琐碎的（并且是不完整的，只是显示了相关部分的代码），但数据库访问，外部缓存系统（memcache等全部）和需要I/O的任何东西，都以执行某些背后的I/O操作而结束，这些和展示的示例一样有着同样的影响。同样地，对于I/O被描述为“阻塞”（PHP，Java）这样的情节，HTTP请求与响应的读取与写入本身是阻塞的调用：再一次，更多隐藏在系统中的I/O及其伴随的性能问题需要考虑。&lt;/p>&lt;p>为项目选择编程语言要考虑的因素有很多。当你只考虑性能时，要考虑的因素甚至有更多。但是，如果你关注的是程序主要受限于I/O，如果I/O性能对于你的项目至关重要，那这些都是你需要了解的。“保持简单”的方法：PHP。&lt;/p>&lt;p>回到90年代的时候，很多人穿着匡威鞋，用Perl写着CGI脚本。随后出现了PHP，很多人喜欢使用它，它使得制作动态网页更为容易。&lt;/p>&lt;p>PHP使用的模型相当简单。虽然有一些变化，但基本上PHP服务器看起来像：&lt;/p>&lt;p>HTTP请求来自用户的浏览器，并且访问了你的Apache网站服务器。Apache为每个请求创建一个单独的进程，通过一些优化来重用它们，以便最大程度地减少其需要执行的次数（创建进程相对来说较慢）。Apache调用PHP并告诉它在磁盘上运行相应的&lt;code>.php&lt;/code>文件。PHP代码执行并做一些阻塞的I/O调用。若在PHP中调用了&lt;code>file_get_contents()&lt;/code>，那在背后它会触发&lt;code>read()&lt;/code>系统调用并等待结果返回。&lt;/p>&lt;p>当然，实际的代码只是简单地嵌在你的页面中，并且操作是阻塞的：&lt;/p>&lt;p>&lt;img data-s="300,640" data-type="png" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="0.45230263157894735" data-w="608" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>关于它如何与系统集成，就像这样：&lt;/p>&lt;p>&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="1" data-w="1280" data-type="jpeg" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>相当简单：一个请求，一个进程。I/O是阻塞的。优点是什么呢？简单，可行。那缺点是什么呢？同时与20,000个客户端连接，你的服务器就挂了。由于内核提供的用于处理大容量I/O（epoll等）的工具没有被使用，所以这种方法不能很好地扩展。更糟糕的是，为每个请求运行一个单独的过程往往会使用大量的系统资源，尤其是内存，这通常是在这样的场景中遇到的第一件事情。&lt;/p>&lt;p>注意：Ruby使用的方法与PHP非常相似，在广泛而普遍的方式下，我们可以将其视为是相同的。&lt;/p>&lt;h2>多线程的方式：Java&lt;/h2>&lt;p>所以就在你买了你的第一个域名的时候，Java来了，并且在一个句子之后随便说一句“dot com”是很酷的。而Java具有语言内置的多线程（特别是在创建时），这一点非常棒。&lt;/p>&lt;p>大多数Java网站服务器通过为每个进来的请求启动一个新的执行线程，然后在该线程中最终调用作为应用程序开发人员的你所编写的函数。&lt;/p>&lt;p>在Java的Servlet中执行I/O操作，往往看起来像是这样：&lt;/p>&lt;p>&lt;img data-s="300,640" data-type="png" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="0.3900804289544236" data-w="746" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>由于我们上面的&lt;code>doGet&lt;/code>方法对应于一个请求并且在自己的线程中运行，而不是每次请求都对应需要有自己专属内存的单独进程，所以我们会有一个单独的线程。这样会有一些不错的优点，例如可以在线程之间共享状态、共享缓存的数据等，因为它们可以相互访问各自的内存，但是它如何与调度进行交互的影响，仍然与前面PHP例子中所做的内容几乎一模一样。每个请求都会产生一个新的线程，而在这个线程中的各种I/O操作会一直阻塞，直到这个请求被完全处理为止。为了最小化创建和销毁它们的成本，线程会被汇集在一起，但是依然，有成千上万个连接就意味着成千上万个线程，这对于调度器是不利的。&lt;/p></description></item><item><title>Kotlin 将超越 Java 成为 Android 开发的第一语言？</title><link>https://pangyd.com/post/133-kotlin-java-android/</link><pubDate>Sat, 14 Oct 2017 00:08:50 +0800</pubDate><guid>https://pangyd.com/post/133-kotlin-java-android/</guid><description>&lt;p>Realm 公司提供了一款备受移动开发者欢迎的实时数据库，在调查了大约十万名活跃的开发者后，Realm 发现在今年 5 月份谷歌 I/O 大会之前用 Java 编写的 Android 应用中有 20% 正在用 Kotlin 进行重写。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>根据调查数据，Realm 表示到 2018 年底，在 Android 开发领域，Kotlin 将超越 Java，成为开发 Android 应用的第一语言。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>该公司于周二在官网上公布了其调查结果，它的惯例是每季度发布一次调查结果。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>￼&lt;/p>&lt;p>当然，这些数据不是特别适用于广泛的 Java 开发者群体，甲骨文最近估计这个群体有 1200 万人。不过数据表明，Android 生态系统确实处于迅速变化之中。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>Kotlin 是一门面向 Java 虚拟机(JVM)、Android、JavaScript 和 Native 的开源语言，它于 2011 年由 JetBrains 推出，去年发布 1.0 版本，今年谷歌宣布它成为 Android 领域官方支持的开发语言。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>JetBrains 表示，Kotlin 比 Java 更简洁，所需编写的代码行大概比 Java 少 40%。此外，类型安全方面 Kotlin 也比 Java 好，并支持函数式编程。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>Realm 的数据显示，2016年9月，Kotlin 占 Android 开发的 5.1％，而 Java 的占 94.9％。一年之后，这个比例变成 Kotlin 升至 14.3％，而 Java 则降为 85.7％。这个变化相当大。&lt;/p></description></item><item><title>编程语言 10 月排行榜：Java/C/C++ 固守前三，Swift/GO持续下降，惨！</title><link>https://pangyd.com/post/131-10-java-c-c-swift-go/</link><pubDate>Wed, 11 Oct 2017 20:02:20 +0800</pubDate><guid>https://pangyd.com/post/131-10-java-c-c-swift-go/</guid><description>&lt;section class="" powered-by="xiumi.us">&lt;section class="">&lt;section class="">&lt;section class="" powered-by="xiumi.us">&lt;section class="">&lt;section class="">&lt;p>&lt;span>近期，TIOBE公布了2017年10月编程语言指数排行榜：&lt;/span>&lt;/p>&lt;p>&lt;span>Java、C、C++依旧&lt;/span>&lt;span>排名前三，三巨头地位持续15年来一直不变。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>排名第四和第五的是&lt;/span>C# 和 Python 。&lt;/span>&lt;/p>&lt;p>&lt;span>而Swift、Objective-C、Visual Basic、Go处于持续下降的趋势。&lt;/span>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;/p>&lt;p>&lt;p>&lt;/p>&lt;/p>&lt;section class="" powered-by="xiumi.us" style="text-align: start">&lt;section class="">&lt;section class="">&lt;p>&lt;br>&lt;/p>&lt;p>&lt;strong>&lt;span>&amp;nbsp;2017 年 10&amp;nbsp;月 Top 20 语言&lt;/span>&lt;/strong>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;img class="" data-ratio="0.8067940552016986" data-s="300,640" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-type="png" data-w="942" width="auto" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>看到这个排行榜，不少养码人对于C#的排名表示欣慰。&lt;/p>&lt;p>&lt;strong>&lt;span>养码人A：&lt;/span>&lt;/strong>&lt;br>我大C#必将一统天下&lt;img class="" data-ratio="1" data-src="https://pangyd.com/uploads/2017/10/b7c4a161038a4b1b.png" data-w="20" width="20px" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;strong>&lt;span>养码人B：&lt;/span>&lt;/strong>&lt;/p>&lt;p>C#这么靠前，生命力不错啊。&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-type="png" class="" data-ratio="0.5769230769230769" data-w="52" src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;strong>养码人C：&lt;/strong>&lt;/span>&lt;/p>&lt;p>貌似目前很多手游都用C#&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-type="png" class="" data-ratio="0.825531914893617" data-w="235" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p>再说回Swift和Go。&lt;strong>在今年年初，Swift 语言的 TIOBE 指数最高达到 2.3%，排在&lt;span>第 10 位&lt;/span>。不过 Swift 目前降到&lt;span>第 16 位&lt;/span>，并且其热度每月都在下降。&lt;/strong>&lt;/p></description></item><item><title>删雇主网站源码判刑五年！！</title><link>https://pangyd.com/post/127/</link><pubDate>Sat, 07 Oct 2017 19:13:56 +0800</pubDate><guid>https://pangyd.com/post/127/</guid><description>&lt;p>据新华社报道，软件工程师徐某离职后因公司未能如期结清工资，便利用其在所设计的网站中安插的后门文件将网站源代码全部删除。&lt;/p>&lt;p>公诉机关北京市丰台区人民检察机关指控，2016 年 4 月 27 日 9 时许，徐某利用其预先设置在北京某眼镜公司购物网站中的后门文件，对该网站的源代码执行删除操作，造成该网站无法正常运行。经鉴定，造成直接经济损失 26．5 万元。&lt;/p>&lt;p>庭审现场，徐某当庭认罪并向被害单位道歉。经调解，其家属代为赔偿被害单位经济损失 5 万元，并已实际履行。公司法定代表人张某代表公司对徐某表示谅解，并请求法院对徐某从轻处罚。记者 20 日从北京市丰台区人民法院获悉，最终徐某破坏计算机信息系统罪成立，获刑五年。&lt;/p>&lt;p>&lt;img src="https://pangyd.com/uploads/2017/10/7fa219b8a2dd5efb.jpg" alt="76e2070be9db2669.jpg">&lt;br>&lt;/p>&lt;p>@浮生若梦：不给清工资这事就这么算了？&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>@TTapple：都谅解了，还判五年&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>@码哥：不给人结工资，为什么自己的劳动成果不能删？&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>@永远的雨林：维护自己权益的手段有些极端&lt;/p>&lt;p>￼&lt;/p>&lt;p>来自：程序员头条&lt;/p></description></item><item><title>Java面试常被问到的题目+解答</title><link>https://pangyd.com/post/125-java/</link><pubDate>Thu, 05 Oct 2017 21:24:02 +0800</pubDate><guid>https://pangyd.com/post/125-java/</guid><description>&lt;p class="">&lt;span>摘要：&lt;/span>&amp;nbsp;第一，anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? 不行,对于匿名内部类,看到的一句话说的很到位: new &amp;lt;类或接口&amp;gt; &amp;lt;类的主体&amp;gt; 这种形式的new语句声明一个新的匿名类，他对一个给定的类进行扩展，或实现一个给定的接口。&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第一，anonymousinnerclass(匿名内部类)是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)?&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>不行,对于匿名内部类,看到的一句话说的很到位:&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>new &amp;lt;类或接口&amp;gt; &amp;lt;类的主体&amp;gt;&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>这种形式的new语句声明一个新的匿名类，他对一个给定的类进行扩展，或实现一个给定的接口。他还创建那个类的一个新实例，并把他作为语句的结果而返回。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>这就是匿名类的实质,它本身就是一个类的继承或一个接口的实现,所以继承其它类或借口是无意义的.在eclipse中冶证实了我的想法.无论是继承其它类还是实现其它借口都显示Syntax error on token。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第二，staticnestedclass和innerclass的不同，说得越多越好(面试题有的很笼统)。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>static nested class 指静态嵌套类,或称嵌套类,是C++中常用的说法,inner class指内部类,是JAVA中的说法。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>内部类是一个类内部类的统称,具体分为四种：成员类,静态成员类，局部类，匿名类。其中匿名类是局部类的特殊情况。对于成员类和静态成员类都存在于类的顶层代码中。相当于类的静态方法和非静态方法的关系。区别在于成员类依赖于类实例而静态成员类不依赖。所以前者只能访问实例方法和成员而后者只能访问静态方法和成员。它们都用于创建一个只和当前类有关。和其它类无关的依赖类.是否静态取决于是否依赖类的实例。局部类相当于局部变量。存在于类的局部代码中。相当于在main()中随意定义和使用类。唯一的不同是它只能使用final型的局部变量。这和垃圾回收机制有关。即局部变量会在代码块结束后被回收。而对象不一定。所以对象只能使用final的局部变量。同样，局部类存在的局部代码块也可以有静态和非静态的差别。局部类罪常见的应用就是匿名类。匿名类就是无名子的局部类。常在SWING设计中的添加监听中出现。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>static nested class相当于inner class中的静态成员类。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第三，&amp;amp;和&amp;amp;&amp;amp;的区别。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>这个问得很少。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&amp;amp;和^,&amp;lt;&amp;lt;,&amp;lt;&amp;lt;&amp;lt;,|同属于位运算符,其中&amp;amp;是按位与,例如,1&amp;amp;1=1，1&amp;amp;0=0，&amp;amp;&amp;amp;是逻辑运算符,处理真假值，例如,true&amp;amp;&amp;amp;true=true。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>如果你想学习Java可以来这个群，首先是二二零，中间是142，最后是906，里面可以学习和交流，也有资料可以下载。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第四，hashmap和hashtable的区别。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>常问。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>hashmap可以看做是hashtable的替代者，HashMap的Value和Key都可为NULL，而HashTable不可以，同时，HashTable是线程同步的，而HashMap不是.HashTable用Iterator遍历，HashMap用Enumeration遍历。HashTable中hash数组默认大小是11，增加的方式是 old*2+1。HashMap中hash数组的默认大小是16，而且一定是2的指数。计算index的方法不同，HashTable直接利用hashcode()得出，HashMap对hashcode重新计算得出。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第五，collection和collections的区别。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>你千万别说一个是单数一个是复数。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>collection是结合类的上级接口，子接口有List和Set等，Collections是java.util下的一个工具类，提供一些列静态方法对集合搜索排序线程同步化等。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第六，什么时候用assert。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>api级的技术人员有可能会问这个。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>在调试和优化中使用，用于判断逻辑表达式真假,若为假，终止程序并返回异常.assert比if的优点在于可以选择是否开启assert检查，也就是说assert产生的测试代码可以在正式发布时候选择忽略，这带来极大便利，默认assert检查是关闭的。此外，Junit相比assert来说，有着相似但更强大的测试能力。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第七，gc是什么?为什么要有gc?&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>基础。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>GC 即 garbage collection(垃圾收集)，是JAVA用于回收内存的一种方式，主要的实现方法有引用计数，标记回收，复制清除等，GC可以避免内存泄露和堆栈溢出，有效提高内存的利用效率，同时将程序员从繁琐的内存管理中释放出来。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;br>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>第八，string s=new string("xyz");创建了几个stringobject?&lt;/span>&lt;/span>&lt;/span>&lt;/p></description></item><item><title>10种编程语言写Hello World，你会几个？</title><link>https://pangyd.com/post/124-10hello-world/</link><pubDate>Wed, 04 Oct 2017 19:58:19 +0800</pubDate><guid>https://pangyd.com/post/124-10hello-world/</guid><description>&lt;p>Hello World是我们进入编程的第一句运行的语言了，至少对于我是这样的，今天小编我收集了19种&lt;a href="https://pangyd.com/" target="_blank">编程语言&lt;/a>写的&lt;a href="https://pangyd.com/" target="_blank">Hello World&lt;/a>,你能看懂几个？&lt;/p>&lt;p>&lt;span id="article-img-0" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>1、C&lt;/p>&lt;p>&lt;span id="article-img-1" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>2、&lt;a href="https://www.yidianzixun.com/channel/w/java" target="_blank">Java&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-2" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>3、C++&lt;/p>&lt;p>&lt;span id="article-img-3" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>4、&lt;a href="https://www.yidianzixun.com/channel/w/php" target="_blank">PHP&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-4" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>5、Basic&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>6、C#&lt;/p>&lt;p>&lt;span id="article-img-5" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>7、&lt;a href="https://www.yidianzixun.com/channel/w/python" target="_blank">Python&lt;/a>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>8、&lt;a href="https://www.yidianzixun.com/channel/w/objective-c" target="_blank">Objective-C&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-6" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>9、&lt;a href="https://www.yidianzixun.com/channel/w/javascript" target="_blank">JavaScript&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-7" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>10、汇编语言 x86&lt;/p>&lt;p>&lt;span id="article-img-8" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>&lt;span id="article-img-9" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>&lt;span id="article-img-10" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>&lt;ol class=" list-paddingleft-2" style="text-align: justify">&lt;/ol>&lt;/p>&lt;p style="text-align: start">当然，编程语言远不止于此，大家学习的一定要记得脚踏实地，不要想着速成，&lt;a target="_self" href="https://pangyd.com/">编程&lt;/a>行业没有速成，只有代码量，希望大家能够铭记这一点，不要走错路。你最喜欢哪门编程语言呢，留言说说你的想法吧，最后我说一句：C语言是世界上最好的语言。&lt;/p></description></item><item><title>一张图读懂程序员们的心酸</title><link>https://pangyd.com/post/123/</link><pubDate>Wed, 04 Oct 2017 19:55:38 +0800</pubDate><guid>https://pangyd.com/post/123/</guid><description>&lt;img src="https://pangyd.com/uploads/2017/10/64ba89bfccdfe979.jpg" alt="mmexport1507118095586.jpg"></description></item><item><title>国庆你们加班吗？程序员：看天意</title><link>https://pangyd.com/post/120/</link><pubDate>Sun, 01 Oct 2017 20:32:49 +0800</pubDate><guid>https://pangyd.com/post/120/</guid><description>&lt;p>最近流行这么一张图&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>你的专业vs别人眼中的你的专业&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>没有女程序员吗？&lt;/p>&lt;p>&lt;span>有！不过可能是这样的&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>为什么都说程序员不是在加班，就是在加班的路上？&lt;/p>&lt;p>&lt;span>因为&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>额，这么剑拔弩张吗？&lt;/p>&lt;p>&lt;span>对&lt;/span>&lt;/p>&lt;p>这是为什么呢&lt;/p>&lt;p>&lt;span>因为&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>那...那你为什么要做程序员呢？钱多吗？&lt;/p>&lt;p>&lt;span>你觉得多吗？&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>你为什么还选择在这里做名程序员呢？&lt;/p>&lt;p>&lt;span>我们坚定信念，致力成为未来互联网 领域里的连接器。&lt;/span>&lt;/p>&lt;p>最后问一句，国庆你们加班吗？&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;span>看天意&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p>&lt;p>&lt;span>请关爱我们的程序员因为他们...&lt;/span>&lt;/p>&lt;p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/p></description></item><item><title>程序员编程生涯中常会犯的7个错误</title><link>https://pangyd.com/post/119-7/</link><pubDate>Sat, 30 Sep 2017 19:16:43 +0800</pubDate><guid>https://pangyd.com/post/119-7/</guid><description>&lt;p>&lt;span>时间久了，我发现很多程序员总是犯着相同的错误，前仆后继，却毫不自知。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>下面就是程序员在他们的软件开发生涯中最常犯的7个错误。&lt;/span>&lt;/p>&lt;h2>&lt;strong>&lt;span>&lt;br>&lt;/span>&lt;/strong>&lt;/h2>&lt;h2>&lt;strong>&lt;span>▼没有明确的目标&lt;/span>&lt;/strong>&lt;span>&lt;br>&lt;/span>&lt;/h2>&lt;p>&lt;strong>&lt;span>&lt;br>&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>心中没有终点目标，那就只会随波逐流。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>如果你想在软件开发的职业生涯上获得成功，那么你需要有一个明确的目标。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>仅仅只是对遥远的未来有一个模糊的想法是不够的。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>相反，你应该有坚实的目标——在某个时间段内的首要目的——明确定义的目标。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我认识许多程序员和所谓的专业人士庸庸碌碌地在同一个岗位上干了几十年，是的，你没听错，就是几十年！&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这是一场悲剧，但如果没有目标，这就是你人生的默认选择。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>请引以为戒，否则下一个悲剧就会是你。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>那么，我们能做些什么呢？&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>从今天开始，从现在开始，花一些时间，好好想想你的编程生涯，并决定自己的近期目标。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我的意思是，明确&lt;span>当前的首要目标&lt;/span>。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>一旦达到这个目标之后，再制定一个新的目标，但是现在，请好好想想，你的编程生涯需要实现什么目的？&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;h2>&lt;span>你可以记下来，放到每天都能看到的位置，来提醒自己不断地朝着目标前进。&lt;/span>&lt;/h2>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;h2>&lt;strong>&lt;span>▼不投资于非技术和“软技能”&lt;/span>&lt;/strong>&lt;/h2>&lt;p>&lt;strong>&lt;span>&lt;br>&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>我认识很多程序员其实真的很擅长于写代码。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我也认识很多程序员在算法上确实远远优于我。他们理解和思考复杂架构的水平，是我所望尘莫及的。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>但你猜怎么着？&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>在我的软件开发职业生涯中，我超越了他们，不仅包括职位职务，还有工资，工作效率，性能等等。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我说出来不是为了炫耀，只是想要说明软技能对我们的编程生涯有多重要，而不仅仅是那些大多数程序员重点关注的技术技能。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>作为一个软件开发人员，你肯定知道，你的工作并不仅仅是编写代码。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>还有其他许多必要的重点技能。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我们得时常与人打交道，所以人际交往能力是必须的。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>紧张的时间期限，快速的变化则需要稳定的心理，能够全神贯注，并懂得自我激励。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>在一个不断变化的环境中，在一个充斥了各种繁多和意外的环境中，我们要学会如何优先安排，并尽可能地富有成效。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>此外我们也不能忽略健康以及经济因素，如果忽略它们的话也同样会导致失败甚至是毁灭。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>相关方面的内容还有很多，我就不一一赘述了，感兴趣的话，可以阅读《Soft Skills: The Software Developer’s Manual》 做深入的了解。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>总而言之，不管你做的是哪方面的工作，软技能几乎总是比硬技能、技术技能更重要——所以一定要好好学习这方面的知识。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;h2>&lt;strong>&lt;span>▼不参与社区&lt;/span>&lt;/strong>&lt;/h2>&lt;p>&lt;strong>&lt;span>&lt;br>&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>我做的其中一件让我的编程生涯受益无穷的事就是，参与社区。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这不但让我有了归属感，不再感觉孤单，还能帮助我提高技能，敢于设定更高的目标。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>所以，我强烈建议你加入到编程社区中。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>众人拾柴火焰高，参与社区，是一种积极的成长方式。&lt;/span>&lt;/p></description></item><item><title>Java 和 JavaScript 的关系！</title><link>https://pangyd.com/post/118-java-javascript/</link><pubDate>Fri, 29 Sep 2017 20:28:20 +0800</pubDate><guid>https://pangyd.com/post/118-java-javascript/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>58的姚总曾出现这么个尴尬事&lt;/span>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" class="" data-ratio="2.2" data-w="440" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>强行装逼失败&lt;img data-src="https://pangyd.com/uploads/2017/09/1d9ea9ee6040df52.png" data-ratio="1" data-w="20" _width="20px" src="https://pangyd.com/uploads/2017/09/1d9ea9ee6040df52.png" class="" data-fail="0">&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>&amp;nbsp;这 JavaScript 和 Java 有啥区别&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>据说还有很多人不知道&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>于是，猿妹找了一堆形象生动的解答&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>来给大家科普一下两者区别！！&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>答案有这样的&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>↓↓↓&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" class="" data-ratio="0.8317152103559871" data-w="309" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;span>这样的&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>↓↓↓&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" class="" data-ratio="0.4451754385964912" data-w="912" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" class="" data-ratio="0.62" data-w="600" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p style="text-align: center">最形象当属这样的&lt;/p></description></item><item><title>为什么Java程序员薪资一直居高不下？</title><link>https://pangyd.com/post/117-java/</link><pubDate>Thu, 28 Sep 2017 21:05:35 +0800</pubDate><guid>https://pangyd.com/post/117-java/</guid><description>&lt;p>众所周知，目前互联网行业是众多行业中薪资待遇最好的，包括程序员、运营、新媒体和这个行业周边的商务、销售等人员的工资，都是其他行业所不能比拟的。本文就为大家分析一下Java程序员薪资居高不下的原因。&lt;div>&lt;br>&lt;/div>&lt;div>程序员问科比：你为什么这么成功?&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>科比：你知道洛杉矶凌晨4点的样子吗?&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>程序员：不知道，不过我知道凌晨4点的北京，一般那时候我还没睡，怎么了?&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>科比：没，没什么&amp;hellip;&amp;hellip;&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>上面的段子说明了程序员加班的程度，有的人看到这一点就明了了。但这不是唯一的原因。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>曾经看过一个等式：热门+门槛高=高工资，那么我们就从门槛开始分析原因。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>1. Java程序员的门槛相对比较高&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>首先要计算机技术或是相关专业的大学生，原因有二，一是，Java对从业人员素质有一点要求，计算机相关行业会了解最基本的互联网的相关知识，以及简单的语言基础；二是，从事这一行业，招聘公司对学历有要求，最起码要是专科以上的。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>当然，也不排除有非计算机专业的从事Java行业的人，但是万事开头难，很多人抱着很大的希望去学习，随着遇到的困难越来越多，慢慢的也就放弃了，因此有一部分人都倒在了入门的路上。所以干这一行的人相对其他行业还是少。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>2. Java行业市场需求存在巨大的缺口&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>这几年中国在移动互联网这块发展非常迅猛，各种创业公司、小团队如雨后春笋般冒出来，对Java开发的需要变大。但存在人才发展跟不上市场的需求的现状，相对应的给优秀Java人才开出的薪资待遇随之水涨船高。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>3. 程序员的确很辛苦，需要不断学习、进步&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>辛苦分劳力和脑力两种，劳力工作不难，每天重复着体力活；但脑力活就不一样了，程序员一辈子都在学习、在挑战，因为这是一个不进步就out的行业。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>随着互联网的发展，很多企业随着业务发展要求服务器程序更稳定，更可靠。如：京东，淘宝等大型人网站均采用Java框架进行开发。银行券商等机构均采用Java作为开发语言。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>对于在职的Java从业人员来讲，不断的努力吸收新的知识，跟上互联网进步的节奏是很重要的。&lt;/div>&lt;/p></description></item><item><title>啪啪啪！敲代码时你喜欢听什么音乐？下面这些歌单推荐给你</title><link>https://pangyd.com/post/112/</link><pubDate>Fri, 22 Sep 2017 20:38:02 +0800</pubDate><guid>https://pangyd.com/post/112/</guid><description>&lt;section class="">&lt;section class="">&lt;section class="">&lt;p>凌晨4点的北上广深，是他们最为熟悉的光景，啃着粗糙的盒饭，穿着格子衬衫，依然保持初恋般真。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>他们日日夜夜坚守在成功的背后，扮演默默无闻的幕后英雄。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>他们的名字是，IT人。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;p>更多的时候，不光是电脑和键盘陪着我们度过一天，耳机和音乐也成了IT人生活中必不可少的一部分，上班和下班的路上，心情失落时，失眠时，甚至是工作时都可能会听音乐，让音乐为我们疗伤，让精神得以放松。甚至有&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;p>20年写下1一亿行代码的阿里云神级程序猿为你推荐的歌单&amp;gt;&amp;gt;（https://bbs.aliyun.com/read/288999.html）&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="" style="text-align: center">&lt;img class="" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-ratio="0.3583333" data-w="600" data-type="jpeg" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;p>&lt;br>&lt;/p>&lt;p>其实在工作时要尽量选择那些技能让我们深信愉悦，激发创造力和想象力但又不会使我们分心的音乐。有人说，适合这种情景的音乐有摇摆乐，爵士乐和蓝调音乐。还有轻音乐，比如班得瑞和神秘园的曲子，非常轻缓，沁人心脾。还有一种就是外文歌曲，歌词完全听不懂那种。甚至还有像这样的专门为程序员提供音乐的网站：&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;p>&lt;br>&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>musicforprogramming.net/&lt;/p>&lt;/li>&lt;li>&lt;p>https://www.getworkdonemusic.com/&lt;/p>&lt;/li>&lt;/ul>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="" style="text-align: center">&lt;img class="" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-ratio="0.7857143" data-w="280" data-type="jpeg" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;p>&lt;br>&lt;/p>&lt;p>为了高效的工作要时刻的保持身心的预约，听歌是一个不错的选择，&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>比如：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>T姐还在的时候，很多歌都不错，&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>例如&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>ghost love score&lt;/p>&lt;p>ever dream&lt;/p>&lt;p>nemo等等&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>后来&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>A姐来了有一些也不错，例如&lt;/p>&lt;p>bye bye beautiful等等&lt;/p>&lt;p>还有贝斯手marco唱的&lt;/p>&lt;p>while your lips are still red&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>等等，还有一些没词的曲子evanescence的也不错&lt;/p>&lt;p>产品改需求时就听powerwolf的&lt;/p>&lt;p>we drink your blood&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="" style="text-align: center">&lt;img class="" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-ratio="1.11" data-w="400" data-type="jpeg" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section class="">&lt;p>&lt;br>&lt;/p></description></item><item><title>程序猿幽默你是学不来的！</title><link>https://pangyd.com/post/108/</link><pubDate>Wed, 20 Sep 2017 20:47:51 +0800</pubDate><guid>https://pangyd.com/post/108/</guid><description>&lt;p>1、程序员找不女朋友的原因&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>程序员问禅师：“大师,我身体健康,思想端正,各方面都不错，为何就是找不到女朋友呢?”&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>禅师浅笑,答：“原因很简单，不过若想我告诉你，你需先写一段java代码。”&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>青年略一沉吟，写完了。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>“再写一段C#” 写完了，&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>“再写一段php” 写完了，&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>“再写一段js”，写完了，&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>“这就是原因” 。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2、技术宅男如何把妹？&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1.自制系统盘内置马儿随时知道MM在做什么，计划任务定期搞崩系统从而保持用户粘性；&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2.给MM推荐自制APP，随时知道mm位置给她惊喜；&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3.经过一段时间你就积累了大量数据，做一下数据挖掘就知道她的一切喜好习惯；&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4.将该应用免费开放给更多宅男，于是有了海量数据。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>——这就是云把妹。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3、程序员如何制造就业机会&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>一老板坐飞机,旁边一刚毕业程序员拿着杂志看,一边看一边念叨:云计算要火?&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>老板听了,回去问VP:什么是云计算?&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>VP回去告诉总监:我们可能要做云计算;&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>总监回去告诉经理:公司要做云计算,马上招人.&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>经理面试,有一个就是前几天那个拿杂志的毕业生,&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>毕业生说,没想到云计算真的要火?&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>——所以机会还是给有准备的人。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4、世界上最没用的几句话&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1、警察：不要跑！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2、国足：必胜！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3、老师：同学们不要睡了！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4、病人：医生，您轻点儿！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>5、父母：孩子，不要闹了 ！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>6、罪犯：我是冤枉啊！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>7、女人：不要嘛！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>8、男人：我发誓！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>9、程序员：这个不能实现！&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>5、程序员找不到对象&lt;/p>&lt;p>&lt;br>&lt;/p></description></item><item><title>404-各种网页状态返回码含义！</title><link>https://pangyd.com/post/107-404/</link><pubDate>Tue, 19 Sep 2017 21:02:11 +0800</pubDate><guid>https://pangyd.com/post/107-404/</guid><description>&lt;p>&lt;span>我们在访问一个网页的时候经常会看到400、404、500这样的错误页面，有时候脑子里会一闪而过，为什么页面上会出现这些数字，它们是什么意思呢？&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;h2>&lt;span>&lt;strong>&lt;span>不同的错误页面其实代表不同的含义，今天和大家说说这几个页面的一些情况&lt;/span>&lt;/strong>&lt;span>&lt;strong>&lt;span>。&lt;/span>&lt;/strong>&lt;strong>&lt;span>像&lt;/span>&lt;/strong>&lt;span>400、404、500这样的数字被称为&lt;/span>&lt;span>&lt;strong>&lt;span>状态码。&amp;nbsp;&lt;/span>&lt;/strong>&lt;/span>&lt;/span>&lt;/span>&lt;/h2>&lt;p>&lt;span>&lt;span>&lt;span>&lt;strong>&lt;span>&lt;br>&lt;/span>&lt;/strong>&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;h2 style="text-align: center">&lt;strong>&lt;span>&lt;span>HTTP状态码（图一）&lt;/span>&lt;/span>&lt;/strong>&lt;span>&lt;br>&lt;/span>&lt;/h2>&lt;p style="text-align: center">&lt;img data-ratio="1" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-type="jpeg" data-w="640" title="图5：笑出腹肌的程序猿搞笑趣图" _width="auto" class="" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p>&lt;span>&lt;strong>&lt;span>注释：&lt;/span>&lt;/strong>&lt;/span>&lt;/p>&lt;blockquote>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>301&lt;/span>&lt;/strong>&lt;span>—永久移动。被请求的资源已被永久移动位置；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>302&lt;/span>&lt;/strong>&lt;span>—请求的资源现在临时从不同的 URI 响应请求；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>305&lt;/span>&lt;/strong>&lt;span>—使用代理。被请求的资源必须通过指定的代理才能被访问；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>307&lt;/span>&lt;/strong>&lt;span>—临时跳转。被请求的资源在临时从不同的URL响应请求；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>400&lt;/span>&lt;/strong>&lt;span>—错误请求；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>402&lt;/span>&lt;/strong>&lt;span>—需要付款。该状态码是为了将来可能的需求而预留的，用于一些数字货币或者是微支付；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>403&lt;/span>&lt;/strong>&lt;span>—禁止访问。服务器已经理解请求，但是拒绝执行它；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>404&lt;/span>&lt;/strong>&lt;span>—找不到对象。请求失败，资源不存在；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>406&lt;/span>&lt;/strong>&lt;span>—不可接受的。请求的资源的内容特性无法满足请求头中的条件，因而无法生成响应实体；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;/ul>&lt;/blockquote>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;span>&lt;strong>&lt;span>HTTP状态码（图二）&lt;/span>&lt;/strong>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-ratio="1" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-type="jpeg" data-w="640" title="图6：笑出腹肌的程序猿搞笑趣图" _width="auto" class="" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p>&lt;span>&lt;strong>&lt;span>注释：&lt;/span>&lt;/strong>&lt;/span>&lt;/p>&lt;blockquote>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>408&lt;/span>&lt;/strong>&lt;span>—请求超时；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>409&lt;/span>&lt;/strong>&lt;span>—冲突。由于和被请求的资源的当前状态之间存在冲突，请求无法完成；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>410&lt;/span>&lt;/strong>&lt;span>—遗失的。被请求的资源在服务器上已经不再可用，而且没有任何已知的转发地址；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>413&lt;/span>&lt;/strong>&lt;span>—响应实体太大。服务器拒绝处理当前请求，请求超过服务器所能处理和允许的最大值。&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>417&lt;/span>&lt;/strong>&lt;span>—期望失败。在请求头 Expect 中指定的预期内容无法被服务器满足；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>418&lt;/span>&lt;/strong>&lt;span>—我是一个茶壶。超文本咖啡罐控制协议，但是并没有被实际的HTTP服务器实现；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>420&lt;/span>&lt;/strong>&lt;span>—方法失效。&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>422&lt;/span>&lt;/strong>&lt;span>—不可处理的实体。请求格式正确，但是由于含有语义错误，无法响应；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>&lt;strong>&lt;span>500&lt;/span>&lt;/strong>&lt;span>—服务器内部错误。服务器遇到了一个未曾预料的状况，导致了它无法完成对请求的处理；&lt;/span>&lt;/span>&lt;/p>&lt;/li>&lt;/ul>&lt;/blockquote>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>404 是我们比较常见的错误页面，来看看有哪些有趣的设计~&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="png" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" class="" data-ratio="0.9108695652173913" data-w="460" _width="61%" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" class="" data-ratio="0.7275" data-w="400" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0">&lt;/p></description></item><item><title>30 年编码经验浓缩的 10 条最佳实践</title><link>https://pangyd.com/post/106-30-10/</link><pubDate>Mon, 18 Sep 2017 18:19:21 +0800</pubDate><guid>https://pangyd.com/post/106-30-10/</guid><description>&lt;p>&lt;span>&lt;span>是什么使得代码更好?&lt;/span>&lt;/span>&lt;/p>&lt;p>良好的代码更易于阅读、理解、调试和修改，最重要的是它的缺陷也更少。显然，编写良好的代码需要更多的时间，但是从长远来看，它也具有更多的价值，因为这降低了维护的成本，而且具有更好的可重用性。&lt;/p>&lt;p>事实上，我们可以将好的代码等同为可重用的代码，这也是本篇文章罗列的许多技巧背后的驱动原则。作为一个要实现特定功能的开发者，代码可以实现你的短期目标，但如果没有其他人希望重用它(包括未来的自己)，这些代码一定会缺失某些东西。无论它是太复杂，还是太具体，在不同情况下都有很大可能会出错，或者不被其他开发者信任。&lt;/p>&lt;p>我发现，只要尝试坚持将下面的最佳实践应用于你编写的所有代码(包括你的实验和原型)，无论你现在的经验水平如何，都会编写出更好的代码。&lt;/p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" title="30年编程经验浓缩的10条最佳实践" alt="30年编程经验浓缩的10条最佳实践">&lt;br>&lt;p>&lt;span>&lt;span>1&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>遵循单一职责原则&lt;/span>&lt;/span>&lt;/p>&lt;p>函数是程序员的工具中最重要的抽象形式。它们能更多地被重复使用，你需要编写的代码就越少，代码也因此变得更可靠。较小的函数遵循单一职责原则更有可能被重复使用。&lt;/p>&lt;p>&lt;span>&lt;span>2&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>尽量减少共享状态&lt;/span>&lt;/span>&lt;/p>&lt;p>你应该尽量减少函数之间的隐式共享状态，无论它是文件作用域的变量还是对象的成员字段，这有利于明确要求把值作为参数。当能明确地显示函数需要什么才可以产生所需的结果时，代码会变得更容易理解和重用。&lt;/p>&lt;p>对此的一个推论是，在一个对象中，相对于成员变量，你更应该优先选择静态的无状态变量 (static stateless variables)。&lt;/p>&lt;p>&lt;span>&lt;span>3&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>将“副作用”局部化&lt;/span>&lt;/span>&lt;/p>&lt;p>理想的副作用(例如：打印到控制台、日志记录、更改全局状态、文件系统操作等)应该被放置到单独的模块中，而不是散布在整个代码里面。函数中的一些“副作用”功能往往违反了单一职责原则。&lt;/p>&lt;p>&lt;span>&lt;span>4&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>优先使用不变的对象&lt;/span>&lt;/span>&lt;/p>&lt;p>如果一个对象的状态在其构造函数中仅被设置一次，并且从不再次更改，则调试会变得更加容易，因为只要构造正确就能保持有效。这也是降低软件项目复杂性的最简单方法之一。&lt;/p>&lt;p>&lt;span>&lt;span>5&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>接口高于类&lt;/span>&lt;/span>&lt;/p>&lt;p>接收接口的函数(或 C++ 中的模板参数和概念)比在类上运行的函数更具可重用性。&lt;/p>&lt;p>&lt;span>&lt;span>6&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>对模块应用良好的原则&lt;/span>&lt;/span>&lt;/p>&lt;p>寻找机会将软件项目分解成更小的模块(例如库和应用程序)，以促进模块级别的重用。对于模块，应该遵循的一些关键原则是：&lt;/p>&lt;p>尽可能减少依赖&lt;/p>&lt;p>每个项目应该有一个明确的职责&lt;/p>&lt;p>不要重复自身&lt;/p>&lt;p>你应该努力使你的项目保持小巧和明确。&lt;/p>&lt;p>&lt;span>&lt;span>7&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>避免继承&lt;/span>&lt;/span>&lt;/p>&lt;p>在面向对象编程中，继承 —— 特别是和虚拟函数结合使用时，在可重用性方面往往是一条死胡同。我很少有成功的使用或编写重载类的库的经历。&lt;/p>&lt;p>&lt;span>&lt;span>8&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>将测试作为设计和开发的一部分&lt;/span>&lt;/span>&lt;/p>&lt;p>我不是测试驱动开发的坚定分子，但开始编码时先编写测试代码会使得代码十分自然地遵循许多指导原则。这也有助于尽早发现错误。不过要注意避免编写无用的测试，良好的编码实践意味着更高级别的测试(例如单元测试中的集成测试或特征测试)在揭示缺陷方面更有效。&lt;/p>&lt;p>&lt;span>&lt;span>9&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>优先使用标准的库&lt;/span>&lt;/span>&lt;/p>&lt;p>我经常看到更好版本的 std::vector 或 std::string，但这几乎总是浪费时间和精力。一个明显的事实是 —— 你正在为一个新的地方引入 bug，其他开发者也不太可能重用你的代码，因为没有被广泛理解、支持和测试。&lt;/p>&lt;p>&lt;span>&lt;span>10&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>避免编写新的代码&lt;/span>&lt;/span>&lt;/p>&lt;p>这是每个程序员都应遵循的最重要的教诲：最好的代码就是还没写的代码。你写的代码越多，你将遇到的问题就越多，查找和修复错误就越困难。&lt;/p>&lt;p>在写一行代码之前先问一问自己，有没有一个工具、函数或者库已经实现了你所需要的功能?你真的需要自己实现这个功能，而不是调用一个已经存在的功能吗?&lt;/p>&lt;p>&lt;span>&lt;span>写在最后的话&lt;/span>&lt;/span>&lt;/p>&lt;p>我发现编程是一门与学习艺术或运动非常相似的技能，你通过刻意的练习和从别人的经验中&lt;a target="_self" href="https://pangyd.com/">学习&lt;/a>会得到更好的结果。不断提升你产出的代码质量有助于你成为更优秀的&lt;a target="_self" href="https://pangyd.com/">程序员&lt;/a>。&lt;/p></description></item><item><title>java和JavaScript究竟是什么关系？</title><link>https://pangyd.com/post/105-javajavascript/</link><pubDate>Sun, 17 Sep 2017 21:27:42 +0800</pubDate><guid>https://pangyd.com/post/105-javajavascript/</guid><description>&lt;p>&lt;span>犹记得刚刚接触Java的时候，有一天突然看见了JavaScript，第一反应就是：这是什么?跟Java这么像，莫非它俩之间有什么不可告人的关系?&lt;/span>&lt;/p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" title="【java和javascript究竟是什么关系？】" alt="【java和javascript究竟是什么关系？】">&lt;br>&lt;p>这就得从他们诞生时开始说起：&lt;/p>&lt;p>1994年的时候，网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器，&lt;a target="_self" href="https://pangyd.com/">轰动一时&lt;/a>。但是，这个版本的浏览器只能用来浏览，不具备与访问者互动的能力。因此，网景公司急需一种网页脚本语言，使得浏览器可以与网页互动。1995年Sun公司将Oak语言改名为Java，正式向市场推出，并且打出了“一次编写，到处运行(Write once，run anywhere)”的宣传口号。网景公司非常看好Java，决定与Sun公司结成联盟。仅一个月后，网景公司做出决定，未来的网页脚本语言，必须看上去与Java足够相似，但是比Java简单。程序员Brendan Eich被指定为这种“简化版Java语言”的设计师。&lt;/p>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;p>但是Brendan Eich对Java丝毫没有兴趣，用了10天时间就设计出了JavaScript。总体的设计思路是：(1)借鉴C语言的基本语法;(2)借鉴Java语言的数据类型和内存管理;(3)借鉴Scheme语言，将函数提升到“第一等公民”(first class)的地位;(4)借鉴Self语言，使用基于原型(prototype)的继承机制。也就是说，Java Script在设计时所参考的对象不包括 Java，而包括了像 Self 和 Scheme 这样的语言，它实际上是函数式编程和面向对象编程两种语言风格的混合产物。并且javascript最初的名字并不是javascript，而是LiveScript，名字中的“Java”是经过SUN Microsystems公司授权的。&lt;/p>&lt;p>简单说java和JavaScript是两个不同的语言。&lt;/p>&lt;p>1 语言特点：&lt;/p>&lt;p>1.1 弱类型：&lt;/p>&lt;p>JavaScript在变量声明的时候并不严格区分数据类型，(var 变量名)，不像java那样严格(类型：变量名)。也就说，Javascript面前一切平等，在他眼里大家都是人，而在java就有所不同，男人、女人、什么的……&lt;/p>&lt;p>基于这个特性，javascript在很多时候会都可以写的比java简洁，比如函数的声明等。&lt;/p>&lt;p>1.2 动态语言：&lt;/p>&lt;p>java在定义了一个数组的长度以后就不能再改变了，但是javascript却可以。并且java一个数组只能放同一种类型，但javascript可以在一个数组内加不同数据类型的数据。可以说Java比较死心眼，javascript则比较灵活。&lt;/p>&lt;p>1.3 脚本语言:&lt;/p>&lt;p>Java等后台语言都是编译后执行的，但是javascript却是边编译边执行。&lt;/p>&lt;p>2 数据类型&lt;/p>&lt;p>2.1 基础数据类型：&lt;/p>&lt;p>Java有八大数据类型：byte,short,intlong,float,double,char,Boolean。感觉javascript把上面的整理成了三种原始类型：number,string,boolean。另外还有两个特殊的原始类型是：null和undefined。&lt;/p>&lt;p>2.2 变量&lt;/p>&lt;p>Java：数据类型 变量名=值;&lt;/p>&lt;p>Javascript：var 变量名=值;数组&lt;/p>&lt;p>Java：&lt;/p>&lt;p>类型[] 数组名=new 类型[数量];&lt;/p>&lt;p>类型[] 数组名=new 类型[]{元素1，元素2…};&lt;/p>&lt;p>Javascript：&lt;/p>&lt;p>var 数组名=[];&lt;/p>&lt;p>var 数组名=new Array();&lt;/p>&lt;p>3 函数：&lt;/p>&lt;p>Java：返回值&lt;a target="_self" href="https://pangyd.com/">类型&lt;/a> 函数名(类型 参数1，类型 参数2…){}&lt;/p>&lt;p>Javascript：function 函数名(参数1，参数2…){}&lt;/p>&lt;p>两者用途&lt;/p>&lt;p>java广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和&lt;a target="_self" href="https://pangyd.com/">互联网&lt;/a>等。&lt;/p></description></item><item><title>为什么程序员掌握改变世界的技术，却不能成为改变世界的人？</title><link>https://pangyd.com/post/102/</link><pubDate>Thu, 14 Sep 2017 20:24:17 +0800</pubDate><guid>https://pangyd.com/post/102/</guid><description>&lt;p>在当下的社会，一个高科技产品，必定搭载牛逼的程序才能实现各种功能！就比如我们手机上的APP，都是这些程序员开发出来的。但是问题来了：为什么程序员所掌握的技术那么牛，但是真正成为如马云的IT巨头却很少嗯？&lt;/p>&lt;p>正如我经常听到的程序员的通用别称：码农！就是形容代码搬运工！就如“农民工”，为什么会造房子，但是却造不出能够如“东方明珠”般宏伟的建筑！那么有人会说，造房子是需要用到地皮的，但是程序员写代码做程序是不受任何“客观因素”限制的！为什么他们就没有成功的作品呢？（有，但是少，或者不为人知）&lt;/p>&lt;p>我记得我之前跟一个程序员客户交流过，我问他你之前在大学时有没有帮别人写代码赚外快，他说有，我问他现在还会偶尔接私活赚外快吗？他说不会，为什么？他说：因为在接私活赚外快的时候，客户老是根据自己的喜好随意修改各种前期敲定的设计方案，而且根本听不进去程序员的意见。但是现在在大公司开发产品，公司很少参与设计，只是讲明白功能需求，怎么开发和怎么设计页面都是由自己的团队完成！我就问他：是不是公司这样的方式让你感觉很有成就感和受到了极大的尊重？他说，差不多就是那个意思！&lt;/p>&lt;p>就这个软件工程师反馈的信息来看，其实每个程序员或者每个人都会有这样的想法！每个人都极其需要得到尊重，极其需要自己的价值被提现，但是如果每个人都这样按照自己认为对的方向去努力去操作的话，就会很“自大”！每个技术型人才都会认为自己是专业的，自己的意见是最值得参考的，但是，就是因为有这样的想法，而导致程序员空有改变世界的能力，却连自己都改变不了！&lt;/p>&lt;p>决定一个APP产品的好坏不是看这个app是用了多少代码实现了多少功能，而是要看这个app（软件）实现的各种功能是不是真的满足了用户的诉求，和是不是页面和交换方式和使用体验让客户满意！当这个产品很优秀了以后，还需要完美的推广营销方案，把产品推给广大用户！这同时也说明了一点，会造房子不行，得会造成别人需要的房子！这也就是“产品经理”的作用的重要性！如马云，就是“早期的产品经理”！&lt;/p>&lt;p>程序员常有，而优秀的“产品经理不常有”！&lt;/p>&lt;p>此文没有任何贬低程序员的意思，希望大家不要误会！我尊重每一位在一线默默付出的每一个人，我也是一名基层默默付出的人，我只是感觉每个基层的付出者应该懂得更多！&lt;/p></description></item><item><title>【励志】写给立志做码农的大学生</title><link>https://pangyd.com/post/100/</link><pubDate>Tue, 12 Sep 2017 19:30:31 +0800</pubDate><guid>https://pangyd.com/post/100/</guid><description>&lt;p>确定方向&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>选择比努力更重要。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 关于方向的选择其实越早确定越好，生活中我们要面临无数个选择，前几天看的一个黑客相关的美剧中有句台词说的不错：&lt;/p>&lt;p>life is binary.&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 生活就是二进制，一个个0101组成的。每一次抉择，选了就是1，不选就是0。另外也有一句话说：“人一生要面临很多选择，但是真正能决定你命运的只有几个”。没错其实就是这样。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 如果你是计算机专业的学生，那么到底是考研还是就业就是首先要面临的问题。本文是面向确定了毕业要工作的大学生的，所以关于这个抉择，不再赘述。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 就业的话，本文标题是码农，实际是指所有计算机相关的技术工种。包括开发、测试、运维等。&lt;/p>&lt;p>很多选择本身并没有对错或优劣，只有适合不适合。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 不要滥用勤能补拙，这个词语一度被很多人奉为圭臬，但同时成了枷锁。我相信这个词，但是要考虑现状，要考虑投资回报率。你在自己并不擅长或不感兴趣的领域深耕了四年，最后不一定能获得多少成绩。当然如果你能在毕业后继续深耕几年或许是可以的，但是我希望每一位大学生在毕业的时候都能有一份好的工作，并且如果你并不喜欢某一领域的话，那么我相信你一定不会坚持下去。所以我们一定要找到适合自己的方向！&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 那么如何发现自己对什么感兴趣呢？我也不知道很好的办法，我只知道一个朴素的方法——尝试。趁着年轻，就要多尝试。千万不要大三了都还不知道自己兴趣在哪，想做什么，适合什么。所以大一大二努力去碰钉子吧。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>算法还是开发？&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 数据结构和算法很重要，无论是面试还是工作，无论你从事哪方面的技术。不过算法虽然重要，但并不适合每个人都花费大学全部的精力去钻研。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 相信很多学校都有ACM竞赛相关的社团或组织。很不幸，我们学校没有，我大一的时候也花了很多精力刷题，但是硬件条件不太允许，氛围太缺乏。如果你觉得自己能够在ACM比赛中游刃有余，那么恭喜你，你可以一心一意搞算法。如果你觉得自己在这个过程中十分吃力，挫败感频生，那么也不要气馁，或许有另一条路是属于你的。选择开发，有算法功底深厚是很棒的事，但是仅仅只有算法同样是不够的，计算机海洋还有很多未知等着你探索。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 算法岗包括数据挖掘、机器学习之类的（怎么样，高大上吧，反正我不懂）。要说明的是想做算法的同学最好选择读研继续深造，因为大企业在算法岗的招聘上对本科生是很不友好的。还是要申明一句，你做开发也不能忽视算法和数据结构，起码面试还是经常考的！记住一句：&lt;/p>&lt;p>算法功底好的人，运气都不会差。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 对于本科生而言做开发还是相对容易的一条道路，不过开发的技术路线也是不胜枚举：前端、后台（PHP后台、Java后台等等）、移动端（安卓和iOS）、游戏开发、数据库（比如做DBA）……。这里我肯定不会去推荐你去学哪一种，我没有能力也不适合。只有你自己才能发现自己的兴趣以及好奇心之所在。&lt;/p>&lt;p>我能做的只是在浩如烟海的技术观点中，帮一个个本科生排疑解惑。&lt;/p>&lt;p>认识技术&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 关于技术，很多本科生都存在诸多误区。初学者总喜欢追随牛逼的技术，实在过于盲目，找准自己的定位最重要。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>误区1： 图形化的东西比非图形化东西更牛逼&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 多见于初学者，尤其是计算机专业新生（我大一的时候就是）。当时学校教了点C语言，一直都是控制台程序，面对黑窗口，我就各种百度看看怎么弄出图形化的东西，那时候才知道GUI这个缩写是啥意思（当初知道这个缩写的全称还小激动了一下下，果然我还是太年轻了），然后知道了WIN32、MFC这些名词。确实只能说是知道名词。当时对着视频教程做了计算器，就是用VC++拖拖控件，视频里的人敲一句代码，我就敲一句。后面虽然弄出来了，但是感觉自己什么都不懂，只是依样画葫芦。这时我才意识到，还有很多基础没有打牢。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 八卦一下，现在桌面客户端的开发工作并不多，所以大家谨慎选择这一技术方向。桌面端GUI技术一度火爆（MFC、Qt、WinForm、WPF、Swing……），但如今早已是互联网及移动互联网时代，所以大家真的要慎重选择。不过还是可以学习一下的，至少能加深你对编程语言以及设计模式的理解。&lt;/p></description></item><item><title>江北腾飞的水城</title><link>https://pangyd.com/post/95/</link><pubDate>Thu, 07 Sep 2017 20:19:12 +0800</pubDate><guid>https://pangyd.com/post/95/</guid><description>&lt;p style="text-align: left">&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 腾飞的江北水城&lt;/p>&lt;p>&amp;nbsp; “人人都说,沂蒙四个好地方。”沂蒙三小调的歌词唱出了临沂人的骄傲和自豪。故称琅琊的临沂,市委领的英名的带领下。从贫穷落后走向了富裕.美丽.和谐。依托丰富的水资源，建成了气势宏大的滨河大道，让临沂从商城变成了让人惊叹的大&lt;a target="_self" href="https://pangyd.com/">美文&lt;/a>明城市。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp;作为革命老区的临沂，在历史战争中涌现出无数英雄，沂蒙人用清清的沂河水哺育了无数的英雄豪杰，让不屈的沂蒙人变得更加坚强，更加无私，旧有沂蒙六姐妹，用沂蒙精神记载了不朽的历史；今有不甘落后的沂蒙人，向应党的号召，改革开放之路，唱着春天的故事，改革富起来。富起来的沂蒙人发挥自己的聪明才智，充分利用现有的丰富的水资源，建成贯通南北的滨河大道，让名不见经传的地级市变成了全国文明.卫生城市。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp;在水上大做&lt;a target="_blank" href="https://pangyd.com/">文章&lt;/a>的临沂，建成了与日照沙滩相媲美的阳光沙滩，闲暇的人们在享受着愉快的幸福生活；风景独秀的滨河风景让我们留连忘返，喜欢垂钓的在风景如画的岸边尽显风采；爱好游泳的在碧波荡漾，波光如镜的水中自由的游动，热恋中的青年在忘情的说笑；天真无邪的孩子在岸边的游戏场中尽情的玩耍；打球的，下棋的，散步的……富裕起来的沂蒙人正沿着幸福的生活中，他们在享受着党的温暖，正走在小康的幸福大道上。生长于斯得人民能不热爱这方热土吗？&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp;从2002年到现在,沂蒙老区处处高楼林立，路路畅通。正在崛起的南坊新区，座座高楼拔地而起，街道宽敞，绿化一流，风景秀丽。大美临沂。让世人惊叹。我高声的赞美现代化的临沂，我热爱腾飞的江北水城，我要努力刻苦学习，用知识武装自己的头脑，将要用所学的知识把临沂建设得更富裕，更美丽，更和谐。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p>&lt;p style="text-align: center">作者:李洋&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: right">&lt;b>纯手打不宜 希望能尊重原创&lt;/b>&lt;/p>&lt;p style="text-align: right">&lt;b>如转载请注明以下文字 否为侵权&lt;br>作者博客：&lt;a target="_blank" href="https://pangyd.com/">pangyd.com&lt;/a>&lt;br>作者博客接受文章来稿：详情点击&lt;/b>&lt;/p></description></item><item><title>个人失败的网站运营经历，三年一分钱没赚到</title><link>https://pangyd.com/post/93/</link><pubDate>Tue, 05 Sep 2017 18:10:27 +0800</pubDate><guid>https://pangyd.com/post/93/</guid><description>&lt;p style="text-align: justify">如果是三年前的自己，根本就不会想过三年后会是这个样子——运营三年一分钱都没有赚到。服务器成本、域名成本等硬性成本全部都是自讨腰包。其他人工推广维护根本就无法计算。&lt;/p>&lt;p style="text-align: justify">今天，三年前的续费即将过去到期，开始思考着自己是该继续续费还是放弃。&lt;/p>&lt;p style="text-align: justify">叹屌丝逆袭多么的艰难。一开始想的是多么的美好。“建立一个内容丰富的网站，有图片、文字、聊天、交友。运营一段时间内流量上来了就挂谷歌adsense赚取点费用维持服务器成本。后期通过这个网站盈利，想着日赚XXX的美梦。”但是没有想过结局跟网上吹的那种日赚XXX是多么的天壤之别。&lt;/p>&lt;p style="text-align: center">&lt;img alt="个人失败的网站运营经历，三年一分钱没赚到 好文分享" title="个人失败的网站运营经历，三年一分钱没赚到 好文分享" src="https://pangyd.com/uploads/2017/09/d5731b7a2fec55d4.jpg" width="590" height="417">&lt;/p>&lt;p style="text-align: center">（博文配图，图片与作者本文无关）&lt;/p>&lt;p style="text-align: justify">&lt;strong>第一年：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">挂&lt;a href="https://lusongsong.com/info/post/310.html" target="_blank">adsense&lt;/a>，半年多了还不到100人民币，点击单价越来越低而且要多低就有多低，基本上等于免费挂谷歌的广告。虽然网站流量每天在1K,PV在2K左右，但对于盈利仍旧是无计可施。&lt;a href="https://baidu.com" target="_blank" class="keywordlink">百度&lt;/a>收录有谷歌收录访客有流量但是根本就赚不到钱。看到这样的情况，满腔热情有点被泼冷水的感觉，但是还是坚持，心里想着是网站挂着又没事。&lt;/p>&lt;p style="text-align: justify">&lt;strong>第二年：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">很悲催，谷歌adsense不给任何理由就把我的网站域名给封了。之后我想过去挂百度联盟的广告，很可惜，没有备案网站是放不了百度的联盟广告的。还有其他的联盟比如阿里妈妈，根本就不用去挂的。网站每天没有几千几万流量，挂几十年收入都是0!剩下的其他一些杂乱的广告联盟商，不想去浪费时间，看到他们的广告感觉很低俗、如果网站上面挂了那样的广告给人的感觉就是一个s情h站!都是些卖w哥、壮阳、或者luo聊、同城交友(那种)、游戏弹窗，挂马的广告。如果放这样的广告到自己的网站上，只能是饮鸩止渴。很悲催的，服务器费用仍旧是自己掏腰包。而且已经一种不管他的状态。&lt;/p>&lt;p style="text-align: justify">&lt;strong>第三年：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">很多人都说如果一个网站已经运营了超过2年还是不盈利，那么这个网站可以关闭了。现在想起来，觉得确实是的，2年的时间，已经不是新站了。但是仍旧不是盈利状态，只能说明运营不善。第三年里面很心灰意懒，不想去给网站加什么内容，只是定期备份，检查网站是否可以正常使用是否可以正常运行。访问流量还是那样差，每天才2K IP左右。雪上加霜的是在2012年六七月份的时候，百度k站了，流量直线下降90%。后来虽然收录上回升了一半，有1万多。但是每天来自百度的流量始终都是0，切切实实始终都是0。没有流量，更别提盈利，让自己更觉得心灰意懒。&lt;/p>&lt;p style="text-align: justify">&lt;strong>第四年：今年现在2013。&lt;/strong>&lt;/p>&lt;p style="text-align: justify">静下心来思考，开始反思。想到了自己为什么要做这个网站，觉得有点可笑，一开始想着通过运营网站赚钱，结果却是一直都是自掏腰包赔本。自己该继续运营下去还是直接放弃?不由得想到了网站的最终结果：收点小钱而已，不用自己掏腰包去垫付服务器的成本费和域名的注册费。&lt;/p>&lt;p style="text-align: justify">&lt;strong>自己该继续坚持下去吗?&lt;/strong>&lt;/p>&lt;p style="text-align: justify">跟别人交流了很多次，把网站给了很多人看。&lt;/p>&lt;p style="text-align: justify">很多人打开一瞪眼就说网站太丑了，一个图片都没有，一个动画都没有，不想继续访问下去，想直接关闭。有的人说访问速度太慢了。其实是因为我网站没有beian，只能放在国外，虽然已经算是最快的服务器了，但是访问速度还是很慢。没有办法，自己网站一直都是不盈利不赚钱，哪有那么多钱去升级服务器买好的服务器?也给了一些SEO人士看，都说出来的是网站没有外链，很少。基本上没有在外面宣传推广过一样。因为自己没有那么多精力去推广，只能三天打鱼两天晒网。&lt;/p>&lt;p style="text-align: justify">网站运营的第四年，也许自己已经明白了这个网站为什么一直都是这么没有起色，没有流量也没有收益。看到很多域名注册不到1年的网站流量、收录都异常火爆、权重非常高，让自己觉得奇怪，自己一开始认定的域名越老越权重高，而自己的网站已经运营了三四年了，百度权重还是0、谷歌pr也从原先的2降到了0。&lt;/p>&lt;p style="text-align: justify">回想自己这三年来的付出，经常熬夜通宵达旦的修改网站程序源码，基本上已经把网站源码改得地覆天翻。经常为了调节一个细小的代码优化而废寝忘食、甚至一整天坐在电脑前一动不动，没时间上厕所没时间吃饭睡觉洗漱。等于就是在自己做一个PHP CMS系统。但是网站做好之后就坐等搜索引擎收录，靠天吃饭一样，搜索引擎那天心情不好自己就一个字都别想了。发现很多网站他们的程序根本从来都不改动一下，直接CMS下载来加内容，域名也注册不到1、2年，但是流量收录PR权重非常高、人气非常火爆。对比之下，自己显得多么相形见绌，开始深刻的怀疑一开始自己信定的域名越老人气越旺的谬论。&lt;/p>&lt;p style="text-align: justify">打开自己的网站，发现网站界面确实是那么的丑陋，因为自己不会PS不会图片处理，也不会仿站，所以网站界面一直都是那么的丑陋，以前给别人看自己的网站，也许这是大部分写代码的人的不足之处，不会设计界面，不会美工。&lt;/p>&lt;p style="text-align: justify">&lt;strong>思考、总结了很多，明白了自己失败的所在：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">一网站界面太丑陋，不会美工设计、logo都是非常难看的。&lt;/p>&lt;p style="text-align: justify">二从来没有推广宣传过只是坐等搜索引擎收录，靠天吃饭。&lt;/p>&lt;p style="text-align: justify">三网站服务器太差，舍不得升级好一点的。死做站，只会改程序而其他的根本就从不顾及。&lt;/p>&lt;p style="text-align: justify">四从来没主动去寻找过广告商，日IP 2K其实挂一个其他的广告就可以满足服务器费用了，但是没有去寻找也丢失了盈利的欲望。&lt;/p>&lt;p style="text-align: justify">网站已运营三年，败在了方向上。很少推广……唯一做得最多的就是程序，死改、死改!完全的倾向与技术性。死改程序死改程序，死读书一样。&lt;/p>&lt;p style="text-align: justify">&lt;strong>但是我该继续下去吗?&lt;/strong>&lt;/p>&lt;p style="text-align: justify">很多科学的统计，中国的个人站长至少80%都是不盈利，任何费用都是自己出，其他人工的维护、推广宣传人力精力更不包含在内。另外10%是勉强可以赚得点服务器费用和域名费用。只有剩下10%不到的才收入大于支出，但是剩余不一定抵得上他的其他付出——时间精力人力推广。&lt;/p>&lt;p style="text-align: justify">同时也想到了自己网站，主题主题、发展模式要被复制太容易了。个人站长真的力量太薄弱，有什么变动，就立即会夭折。一切都是迷路。感言：个人建站小打小闹还可以但是真的想通过建个网站来运营就逆袭，只能是想的太离谱。&lt;/p>&lt;p style="text-align: justify">本文作者：&lt;a href="https://www.im286.com/thread-11086188-1-1.html" target="_blank" rel="nofollow">foho&lt;/a>&lt;/p>&lt;p style="text-align: right">来源：&lt;a target="_self" href="https://pangyd.com/">庞玉栋博客&lt;/a> 欢迎分享&lt;/p></description></item><item><title>回望过去 展望未来-----李洋</title><link>https://pangyd.com/post/90/</link><pubDate>Sun, 03 Sep 2017 11:12:25 +0800</pubDate><guid>https://pangyd.com/post/90/</guid><description>&lt;p>经过了一个学年的我，没有太多的收获，只是一步一个脚印跟着老师向前走，没有太多的想法；经过一个暑期的放纵，发现自己落后，跟不上他们的节奏，整个暑假不知道干什么的，顿时迷失了方向，不知道何去何从；新学期伊始，顿时感觉到了压力，是从自己内心发出来的，也萌生了许多的想法。&lt;/p>&lt;p>去年的考试失利，不知道如何去面对，如何去表达；内心一直存在着种种疑惑，是实力问题还是有其他的原因······与本科失之交臂，从此踏上高职的征程。曾经父亲对我说过：“你不论去哪里上学，我都亲自送你”。结果来到了这里，我也没有太多的顾虑，不论高职还是本科，只要好好干，在哪里不一样。来到这里生活已经有一个年头了，按照老师讲授的课程，认认真真的学习，稳扎稳打，一步一个脚印，最终取得了不错的成绩，没有太多的压力。大学就是自我安排，自我控制，自我发展的过程，那时的我就是这样认为。没有自主学习的习惯，没有拓宽自己的知识面，没有阅读大量的书籍······导致了大量的时间白白的浪费，回想起来是真的感到可惜，是一个错误的选择。&lt;/p>&lt;p>新学期，新气象，新打算。俗话说：“世上无难事只怕有心人。”我这次要做好充足的准备，迎接新学期，努力在这一个学年里，有点小突破，有点小成就。大二我也不能松懈，把各个专业学好、学精、学透，为以后的发展打下夯实的基础。“车到山前必有路，柳暗花明又一村”，没有扎实的基础，用人单位怎么用你，给你一个项目，能否胜任？大学生是最廉价的劳动力；可以就业，而我毅然选择读书，只有读书能增长见识，提高自身能力，实现自我价值更近一步。这一年我需要做的事情有以下几点：学好专业知识，提高自身技能；加强词汇量的积累，多做阅读理解；数学深入探究，增强逻辑思维；增加阅读量，涉猎群书；这是我这个周期需要落实的。&lt;/p>&lt;p>1．&lt;span class="Apple-tab-span">	&lt;/span>学会进行时间的管理，对自己的行程合理的规划。&lt;/p>&lt;p>2．&lt;span class="Apple-tab-span">	&lt;/span>情绪的合理的控制，处理好人与人之间的关系。&lt;/p>&lt;p>3．&lt;span class="Apple-tab-span">	&lt;/span>改正自己的缺点，发挥自己的长项。&lt;/p>&lt;p>4．&lt;span class="Apple-tab-span">	&lt;/span>学业方面进行深入的研究和探索。&lt;/p>&lt;p>5．&lt;span class="Apple-tab-span">	&lt;/span>每天给自己充电。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp;我对我自己的现状不是很满意，要去克服，通过以后的努力，来成就辉煌的明天。&lt;/p>&lt;p style="text-align: right">&lt;b>纯手打不宜 &amp;nbsp; 希望能尊重原创&lt;/b>&lt;/p>&lt;p style="text-align: right">&lt;b>如转载请注明以下文字 否为侵权&lt;/b>&lt;/p>&lt;p style="text-align: right">&lt;b>文章博客：&lt;a target="_self" href="https://pangyd.com/">pangyd.com&lt;/a>&lt;/b>&lt;/p>&lt;p style="text-align: right">&lt;b>联系QQ：2633759084&lt;/b>&lt;/p></description></item><item><title>MMA你听说过吗？</title><link>https://pangyd.com/post/87-mma/</link><pubDate>Sat, 02 Sep 2017 17:43:18 +0800</pubDate><guid>https://pangyd.com/post/87-mma/</guid><description>&lt;p style="text-align: left">&lt;b>&lt;img src="https://pangyd.com/uploads/2017/09/bddbdb1b1b3bf05e.png" alt="0DE392FA28041152B3F1B8C64294CD97.png">&lt;/b>&lt;/p>&lt;p style="text-align: left">MMA？MMA是什么？目前，这三个字母大多数人表示听都没有听过，今天有幸请来了一MMA运动员史祚政，来谈一下MMA是什么？&lt;/p>&lt;p style="text-align: left">史祚政，国家职业资格私人健身教练，散打运动员，2015年任山东大学综合技击散打部部长，MMA综合搏击运动员（职业战绩19战14胜5负），国家级MMA教练员，“中国MMA第一人，中国综合搏击不败之王，林海飞豹”敖海林亲授弟子。目前，其受教人数达几百人以上……&lt;/p>&lt;p style="text-align: left">&amp;nbsp; &amp;nbsp; MMA是Mixed Martial Arts的简称，中文名称综合搏击，是集各种技击运动为一体的综合，包括散打，泰拳，柔术，摔跤，跆拳道等，我觉得形容MMA呢，就是一场有少许规则的街头格斗，既能站立打击也能进入地面，古代的打擂台和这个类型就很像，最初呢，叫做无规则格斗，也叫做无限制格斗，顾名思义，肯定是被认为比较狠的一种运动，这种运动还没发展多少年，更何况搏击是一个小众化的项目，所以没听说过很正常。&lt;/p>&lt;p style="text-align: left">&amp;nbsp; 这项运动对于防身来说效果怎么样？&lt;/p>&lt;p style="text-align: left">我觉得对于防身来说肯定是特别有用的，毕竟这项运动包括的竞技项目有很多，前面说过，我站着可以给你打，摔倒了，即使你把我摔倒了，我也有可能赢了你，因为这项运动有很多可以扭转局面的技术，例如一些关节技。&lt;/p>&lt;p style="text-align: left">&lt;br>&lt;/p>&lt;p style="text-align: left">这项运动的发展肯定会越来越好，目前，中国也培养出来了很多MMA出色的运动冠军，例如敖海林，张铁泉，李景亮，宁广友，杨建平等人，现在李景亮更是成为了一个明星选手，在ufc上（MMA顶级赛事）展现出男神本色。他们也为中国MMA的发展做了很多的贡献&lt;/p>&lt;p style="text-align: left">在此呢，我也希望更多的人来了解这项运动，支持这项运动……&lt;/p>&lt;p style="text-align: left">&lt;br>&lt;/p>&lt;p style="text-align: left">&lt;b>&lt;br>&lt;/b>&lt;/p>&lt;p>&lt;/p></description></item><item><title>每个程序员半小时内必须解决的5个编程问题</title><link>https://pangyd.com/post/85-5/</link><pubDate>Fri, 01 Sep 2017 20:41:03 +0800</pubDate><guid>https://pangyd.com/post/85-5/</guid><description>&lt;p>&lt;span>每次我发布&lt;/span>&lt;span>软件工程师&lt;/span>&lt;span>的岗位工作要求，各种求职申请就会纷至沓来，接踵而至。但每每让我困惑的是，似乎总有那么几位应聘者完全不明白所谓“编程”的意思。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;img class="" title="5-problems-programmer-1-hour" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" width="720" height="475" data-ratio="0.6597222222222222" data-w="720" data-type="jpeg" src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpg" data-fail="0" style="text-align: center">&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong>&lt;span>当然，他们另有想法。&lt;/span>&lt;/strong>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>而我认为，如果你应聘的是“Web前端开发”岗位，那么你只懂jQuery也可以胜任，那么，“软件工程师”是不是就意味着会HTML、JavaScript和CSS这些必备技能就行了呢？&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>（我觉得那些聊起XML、JSON、XSLT、SOAP、HTTP、REST、SSL和200多个首字母缩写词来头头是道，但却不会区分整型和浮点型数据类型的家伙很有意思。呵呵）&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong>&lt;span>&lt;br>&lt;/span>&lt;/strong>&lt;/span>&lt;/p>&lt;h2>&lt;span>&lt;strong>&lt;span>你真的会写代码吗？&lt;/span>&lt;/strong>&lt;/span>&lt;/h2>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>对于应聘&lt;/span>&lt;span>程序员&lt;/span>&lt;span>的求职人员，我，作为用人单位，首先希望的是你会写代码。我指的是真正的代码：我给你一个问题，你使用任何你觉得舒适的编程语言给出它的解决方案。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;h2>&lt;span>&lt;strong>&lt;span>你真的能做到这一点吗？&lt;/span>&lt;/strong>&lt;/span>&lt;/h2>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>策略：如果你不能在半小时以内解决以下5个问题，那么你首先要做的是重新审视自己。的确，或许你各方面的工作都干的不错，但是我依然觉得你现在还不配“软件工程师（或程序员，计算机科学专家，甚至是“开发人员”）”这个头衔。不要自欺欺人，先花点时间来调整你的重点吧。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;h2>&lt;span>&lt;strong>&lt;span>5个问题&lt;/span>&lt;/strong>&lt;/span>&lt;/h2>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;strong>&lt;span>问题1&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>使用for循环、while循环和递归写出3个函数来计算给定数列的总和。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;strong>&lt;span>问题2&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>编写一个交错合并列表元素的函数。例如：给定的两个列表为[a，B，C]和[1，2，3]，函数返回[a，1，B，2，C，3]。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;strong>&lt;span>问题3&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>编写一个计算前100位斐波那契数的函数。根据定义，斐波那契序列的前两位数字是0和1，随后的每个数字是前两个数字的和。例如，前10位斐波那契数为：0，1，1，2，3，5，8，13，21，34。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;strong>&lt;span>问题4&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如，给定[50，2，1,9]，最大数字为95021。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>Ps：&lt;/span>&lt;span>点击这里&lt;/span>&lt;span>，阅读我的解决方案。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;strong>&lt;span>问题5&lt;/span>&lt;/strong>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>编写一个在1，2，…，9（顺序不能变）数字之间插入+或-或什么都不插入，使得计算结果总是100的程序，并输出所有的可能性。例如：1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>如果你能力超群，上面这些问题对你而言只是小菜一碟，0.5小时之内解决完全绰绰有余的话，请将我的慷慨陈词当作是在放屁。&lt;/span>&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;span>来自：码农网&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>链接：www.codeceo.com/article/5-problems-programmer-1-hour.html&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>英文原文：https://blog.svpino.com/2015/05/07/five-programming-problems-every-software-engineer-should-be-able-to-solve-in-less-than-1-hour&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>翻译作者：码农网 – 小峰&lt;/span>&lt;/p>&lt;/li>&lt;/ul></description></item><item><title>如何掌握所有的程序语言</title><link>https://pangyd.com/post/84/</link><pubDate>Thu, 31 Aug 2017 19:57:47 +0800</pubDate><guid>https://pangyd.com/post/84/</guid><description>&lt;p>对的，我这里要讲的不是如何掌握一种程序语言，而是所有的……&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>很多编程初学者至今还在给我写信请教，问我该学习什么程序语言，怎么学习。由于我知道如何掌握“所有”的程序语言，总是感觉这种该学“一种”什么语言的问题比较低级，所以一直没来得及回复他们 :P 可是逐渐的，我发现原来不只是小白们有这个问题，就连美国大公司的很多资深工程师，其实也没搞明白。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>今天我有动力了，想来统一回答一下这个搁置已久的“初级问题”。类似的话题貌似曾经写过，然而现在我想把它重新写一遍。因为在跟很多人交流之后，我对自己头脑中的（未转化为语言的）想法，有了更精准的表达。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>如果你存在以下的种种困惑，那么这篇文章也许会对你有所帮助：&lt;/p>&lt;p>你是编程初学者，不知道该选择什么程序语言来入门。&lt;/p>&lt;p>你是资深的程序员或者团队领导，对新出现的种种语言感到困惑，不知道该“投资”哪种语言。&lt;/p>&lt;p>你的团队为使用哪种程序语言争论不休，发生各种宗教斗争。&lt;/p>&lt;p>你追逐潮流采用了某种时髦的语言，结果两个月之后发现深陷泥潭，痛苦不堪……&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>虽然我已经不再过问这些世事，然而无可置疑的现实是，程序语言仍然是很重要的话题，这个情况短时间内不会改变。程序员的岗位往往会要求熟悉某些语言，甚至某些奇葩的公司要求你“深入理解 OOP 或者 FP 设计模式”。对于在职的程序员，程序语言至今仍然是可以争得面红耳赤的宗教话题。它的宗教性之强，以至于我在批评和调侃某些语言（比如 Go 语言）的时候，有些人会本能地以为我是另外一种语言（比如 Java）的粉丝。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>显然我不可能是任何一种语言的粉丝，我甚至不是 Yin 语言的粉丝 ;) 对于任何从没见过的语言，我都是直接拿起来就用，而不需要经过学习的过程。看了这篇文章，也许你会明白我为什么可以达到这个效果。理解了这里面的东西，每个程序员都应该可以做到这一点。嗯，但愿吧。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>重视语言特性，而不是语言&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>很多人在乎自己或者别人是否“会”某种语言，对“发明”了某种语言的人倍加崇拜，为各种语言的孰优孰劣争得面红耳赤。这些问题对于我来说都是不存在的。虽然我写文章批评过不少语言的缺陷，在实际工作中我却很少跟人争论这些。如果有其它人在我身边争论，我甚至会戴上耳机，都懒得听他们说什么 ;) 为什么呢？我发现归根结底的原因，是因为我重视的是“语言特性”，而不是整个的“语言”。我能用任何语言写出不错的代码，就算再糟糕的语言也差不了多少。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>任何一种“语言”，都是各种“语言特性”的组合。打个比方吧，一个程序语言就像一台电脑。它的牌子可能叫“联想”，或者“IBM”，或者“Dell”，或者“苹果”。那么，你可以说苹果一定比 IBM 好吗？你不能。你得看看它里面装的是什么型号的处理器，有多少个核，主频多少，有多少 L1 cache，L2 cache……，有多少内存和硬盘，显示器分辨率有多大，显卡是什么 GPU，网卡速度，等等各种“配置”。有时候你还得看各个组件之间的兼容性。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>这些配置对应到程序语言里面，就是所谓“语言特性”。举一些语言特性的例子：&lt;/p>&lt;p>变量定义&lt;/p>&lt;p>算术运算&lt;/p>&lt;p>for 循环语句，while 循环语句&lt;/p>&lt;p>函数定义，函数调用&lt;/p>&lt;p>递归&lt;/p>&lt;p>静态类型系统&lt;/p>&lt;p>类型推导&lt;/p>&lt;p>lambda 函数&lt;/p>&lt;p>面向对象&lt;/p>&lt;p>垃圾回收&lt;/p>&lt;p>指针算术&lt;/p>&lt;p>goto 语句&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>这些语言特性，就像你在选择一台电脑的时候，看它里面是什么配置。选电脑的时候，没有人会说 Dell 一定是最好的，他们只会说这个型号里面装的是 Intel 的 i7 处理器，这个比 i5 的好，DDR3 的内存 比 DDR2 的快这么多，SSD 比磁盘快很多，ATI 的显卡是垃圾…… 如此等等。&lt;/p></description></item><item><title>那些程序员谈论的新技术我竟从没听说过！</title><link>https://pangyd.com/post/82/</link><pubDate>Tue, 29 Aug 2017 20:57:14 +0800</pubDate><guid>https://pangyd.com/post/82/</guid><description>&lt;p>过去的几个月里发生的几件事情，让给政府做软件开发的人感受到压力的陡增，从奥巴马的医保网站饱受诟病到美国退伍军人事务部官方网站的预约系统从1985年起就没有更新过，这些事情让我回忆起曾经作为政府程序员的经历，以及这段经历如何变成一种一直督促我努力工作的思想动力。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>我曾在某个政府部门维护过一个写于1990年代的老系统。当一个新的系统启动开发来替代部分的老系统功能时，很多的程序员对开发新系统的工作产生的严重的抵制心里。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>起初，我并不知道为什么他们会有这么大的反感。对这个系统维护一段时间之后，我才慢慢明白，有些程序员是专门维护系统，时间长达15年之久。当被邀请开发新系统时，他们对新事物和新技术都感到心里没底。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>￼&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>这让我警醒：这种事情也会很容易发生在我的职业生涯中。我可能会安逸的干着某一种工作，安逸的年年维护着某个系统。当这个系统长岁数时，我对它也变的更有价值，我的角色会最终变成专职维护它。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>我的余生也就整天执行相同的任务，直到退休。而当有一天，当这个系统不再被人需要时，我会发现外面的世界已经日新月异，我需要从头学起。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>这可不是我希望的生活轨迹；我作为程序员喜欢的方式是学习新思路来解决新问题，而不是安于现状。我们程序员很容易迷住某一项技术而将全部精力都放在上面，对于其它的毫不关心。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>虽然这样可以让你在某一个领域成为专家，但你却得不到探索其它领域获得的更多好处。当意识到这种目光狭窄会扼杀我的进取心后，我开始避免让所有鸡蛋都放到一个篮子里，我开始走出自己职业仕途中的安逸环境。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>学习新技术&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>你一直在用PHP编程吗？尝试一下使用Rails或ASP.NET。也许尝试一种新的语言或框架会让你感到受挫和沮丧，但探索的趣味也就在这里。至少，你应该看看同一种功能用其它语言是如何实现的。如何你只会用锤子，那你眼里所有的东西看起来都像钉子。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>￼&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>不惧怕老代码&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>虽然上面我举例的那个老代码的例子有些极致，但我并不认为所有的老代码都应该立刻替换掉、删掉。在如今的软件中，有很多稳固的、良好设计的程序代码，它们对那些只会使用集成开发组件的现代程序员来说是很好的学习教材。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>如果你的公司里有老项目、老代码需要你去维护，研究一&lt;/p>&lt;p>下！你会吃惊于从中学到那么多的编程知识以及公司的业务规则。还会发现一些当前正在研究的问题，其实几年以前就有人已经解决了。&lt;/p>&lt;p>￼&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>了解你的敌人&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>程序员很容易对某种语言或框架产生宗教式的虔诚。如果你发现自己曾经痛恨或鄙视某种技术(参看Jeff Atwood的一篇经典文章)，也许你应该强迫自己去研究一下它们。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>最不济，至少你能证明讨厌它们是有理由的。最好的情况是，你会从它们中学到很多东西。不要让你的偏见阻挡了你的探索道路。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>￼&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>不要太贪心&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>程序员很容易被各种层出不穷的新平台、新语言、新工具、新类库吓倒。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>你很容易产生一种恐惧心理，感觉自己已经落后——那些程序员谈论的技术我怎么从来没有听说过？当你发现一种新技术看起来很有用或很有趣时，做个笔记，几周或几月后在回来看看它，如果人们还在谈论它，那么，你就应该进一步研究它。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>事实上很多热门新技术都是昙花一现，你完全可以忽略它，不要让它们浪费了你的大脑。&lt;/p>&lt;p>￼&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>学无止境&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>程序员都有着一种天生的好奇心，这种好奇心引导着我们的编程生涯。写几行代码，装载到计算机里，让它按照你的思路工作，这是非常有趣的事情。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>但随着开发的东西越来越多，我们变的越来越忙，这种好奇心会慢慢的减退。我们应该时不时的用一些新思路挑战自己，让自己的思想保持锋锐和专注，提醒自己为什么当初选择码农这条道路。&lt;/p></description></item><item><title>在BAT工作和创业公司工作有什么不同的体验？</title><link>https://pangyd.com/post/79-bat/</link><pubDate>Sat, 26 Aug 2017 21:57:37 +0800</pubDate><guid>https://pangyd.com/post/79-bat/</guid><description>&lt;p>这个问题的答案会因为发问人的不同而不同。别人永远无法回答“你应该去哪里”这个问题。更有意义的方法是，分别去看在BAT和创业公司里，你会得到什么、不得不接受什么，在此基础上，做出最符合自己现状且最能实现未来期许的选择。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>如果在BAT级别的公司工作，体验如何？&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>在这样的公司工作，你能收获：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1、公司品牌为个人品牌做背书。同时，由此会获得很多资源和人脉。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2、更大更全面的行业格局和视野。小而美的事情多由创业公司完成。而战略格局之类的事，则是大公司在做。在BAT对于建立行业视野和格局有很大帮助。很多时候，先了解大背景，再切入小事情，效率和方向都会更对。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3、和很多精英接触并学习。尽管随着人员扩张而精英比例减少，但是，精英仍然很多。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4、专业的工作方法。尽管互联网整体专业性弱于金融业或外企，但是BAT的专业性在互联网行业基本最强，创业公司没有精力顾及专业这件事。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>5、充足的学习成长空间。这一点是相对创业公司而言的。没有生存压力的BAT有能力招纳新人并给予三个月到半年的学习期。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>6、了解多条业务发展，有更全局的判断和更充分的信息储备。小公司一般就一条业务，但是大公司的业务线很多。观察越多，业务逻辑就越全面、行业知识也越深厚。很多时候，信息的充足度会影响决定的正确性。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>7、BAT的员工量级都在几万人。去观察公司如何凭借统一流程有效管理这么多员工，也是一件很有意思的事情。能够提升个人的管理水平。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>在BAT工作，你不得不接受：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1、个体竞争激烈，出头不易。这是对平均水平同学的泛指，对于格外优秀的人才，在哪都发光。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2、办公室政治。有人的地方就有江湖，越大的公司，政治斗争越激烈。无穷尽的扯皮，开会，斗争，都是再正常不过的。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3、细到蛋疼的分工。每件事都需要很多很多个团队配合完成，盖因分工细。分工细是社会进步的表现，但是从具体项目而言，却是降低效率的原因。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4、漫长复杂的流程。没办法，要规模化管理几万人，必须要有安全的流程。同时由于分工细，流程中也要涉及太多不同的角色，所以流程漫长得不得了。这是个正常现象。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>5、没有话语权的弱势地位。除非你特别出色，对公司特别重要，不然，就基本不会有议价的话语权。除非在团队里有资格对自己的老板议价，同时老板在更大的体系里也有和公司议价的能力，不然，只能一边抱怨，一边忍受。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>很多人从BAT出逃，就是因为忍受不了这些“不得不”条款。那么，在一个小的创业公司工作，是不是就天高云阔、万物和谐，恰好能够规避这些？并不尽然。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>先看看在创业公司，你能够收获什么。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1、更有诱惑力的实现“财务自由”的未来。很多人进创业公司，看中的恰恰是“可能上市”这个结果。一旦成功，可获得的财务收益将是在BAT大公司打工十几、几十年的总和。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2、更全面的实践机会。不同于大公司，创业公司没有细致分工，也没有严格流程。由于分工模糊，凡是个人能力所及的都可尝试，学习的广度增加;由于没有流程限制，效率高，可快速试错。实践出真知，一个员工在创业公司一年实践所学，将是在BAT的3倍以上。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3、和精英更近距离的接触。不同于BAT的严格级别限制，在创业公司的扁平化结构中，普通员工也能与创始人们频繁接触。优秀创业公司创始人，在BAT也会是总监及以上。接触精英的机会增加，受益匪浅。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4、更大的成就感。由于创业公司品牌弱、用户少，日常工作对业务的促进显著可见，个人成就感增加。在BAT，很多时候是无法了解自己的工作到底为业务带来什么样的价值。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>但是，想要快速融入创业公司，并跟着公司一起高速发展，却也要面对很多无法规避的阵痛。记住一句话：在创业公司，为生存而发展大于一切。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1、工作重，压力大，易焦虑。创业公司通常都面临着巨大的行业竞争压力，跑不快则死。这种公司压力折射到员工身上，就是繁重的工作任务、习以为常的加班时间，和弥漫全公司的焦虑感。因此，在创业公司工作，需要有极强的抗压能力和适应性，管理情绪，做好自我调节。同时，要接受“没有自己的生活”这个状态。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2、无流程带来的混乱，无管理带来的反弹。在享受无流程的高效率的同时，也要忍受由此引发的混乱;在享受扁平化快速行动的同时，也要忍受公司管理制度不足带来的各种不满。对于创业公司来说，发展大于一切，流程、管理方法、专业的工作方法等，会影响发展效率。同时，在精力有限的情况下，管理层确实也无法顾及这些相对“务虚”的事项。这些混乱和反弹，需要个体自我消化。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3、只有最基本的福利保障。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4、干活全靠自己。在BAT还有团队干活?到了创业公司，很长一段时间，你都得习惯自己动手丰衣足食。小到每个错别字，大到每个战略方向，都要赤膊上阵自己来。同时，由于公司小，资源少，行业内话语权弱，谈合作基本靠刷脸。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>只要是选择，就一定会有“好”和“不好”，世上从无完美选择。无论是选择什么样的工作环境，在做决定前，都有以下原则可以遵循：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1、尽可能获得足够信息。信息越多，决策风险越低。既可以主动收集线上信息，也可以多做面对面沟通。有时候非正式沟通，更易获得有小细节。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2、明确自己的长远目标。以目标为导向，倒推实现路径，选择最match实现路径的决定。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3、了解决策成本，预估决策收益。评估自己是否可以承担成本，多大可能获得收益。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>4、评估选择后的发展空间。使前路更广阔的选择，一般来说优于减少未来可能性的选择。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>5、记住一点，职场上，不要幻想温情。无论是哪个选择，其结果成否都要靠你的实力说话。与感情无关。鲜事，传播TMT大事件&lt;/p>&lt;p>来源：网站分析公会&lt;/p></description></item><item><title>搞 Java 的程序员，年薪 40W 需要什么水平？</title><link>https://pangyd.com/post/76-java-40w/</link><pubDate>Wed, 23 Aug 2017 15:20:47 +0800</pubDate><guid>https://pangyd.com/post/76-java-40w/</guid><description>&lt;p style="text-align: center">&lt;span>前几天在网上看到这么一个问题， 搞Java的程序员年薪40w 是个什么水平？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>一下勾起了我的&lt;span>兴趣，今天就来简单分析下，到底是什么水平。&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;p style="text-align: center">那么我们先来搞清楚"JAVA"是谁家姑娘？&lt;/p>&lt;p style="text-align: center">&lt;img class="__bg_gif " data-ratio="0.845" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.gif" data-type="gif" data-w="200" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.gif" data-order="1" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;span>......&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>不不不，方向搞错了。。&lt;/span>&lt;/p>&lt;p style="text-align: center">那么我们先来搞清楚，年薪40W，这个是税前还是税后。&lt;br>•阿里薪资结构：一般是12+1+3=16薪&lt;br>•年底的奖金为0-6个月薪资，90%人可拿到3个月&lt;br>&lt;img class="" data-ratio="0.47" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpeg" data-type="jpeg" data-w="600" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpeg" data-fail="0">&lt;br>&lt;span>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;/span>&lt;br>&lt;span>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;/span>&lt;br>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;br>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;br>&lt;span>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;/span>&lt;br>&lt;span>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;/span>&lt;br>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;br>&lt;strong>&lt;img class="" data-ratio="1.6153846153846154" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-type="png" data-w="13" width="8px" _width="8px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.png" data-fail="0">&lt;/strong>&lt;/p></description></item><item><title>我见过的最糟糕的代码</title><link>https://pangyd.com/post/75/</link><pubDate>Wed, 23 Aug 2017 14:19:01 +0800</pubDate><guid>https://pangyd.com/post/75/</guid><description>&lt;p>&lt;span>多数的客户项目，在任务完成之后都会很快从记忆里消退，但有些你一辈子都不会忘记。今天这篇文章，我要说的就属于后者。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这事发生在很多年前，在一个相当大的公司里，公司名我就不说了。那个软件有一大堆程序，是一个商业系统的核心模块，由一个、单独的小伙维护着，这个家伙不久前被炒了。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>像这样的事情其实都很正常，一些公司通常会发现他们的一些关键性技术自始至终都保存在一个人的头脑里，当有事情发生时，就像现在这个人，你通常会经历一阵痛苦阶段去阅读他留下的东西，之后生活慢慢趋于正常。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这次有点不一样。&lt;/span>&lt;/p>&lt;p>&lt;img class="" data-ratio="0.6222910216718266" data-s="300,640" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="png" data-w="646" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这个程序出了点问题，公司派了一个去修复这个问题，等他回来后发现精神有点反常，不是哭就是笑，嘴里嘟囔着什么“&lt;span>匹萨调用汉堡，并且传入了包子&lt;/span>”。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>程序员的代码里通常体现着自己对幽默的理解，以及对‘工作保密’这个词的认识。我们都听说过一些难以置信的故事，比如说公司辞退了某个搞技术的家伙后，结果被告知如不在 48 小时内向某个海外账户打入多少钱，会计软件将会自动删除所有客户记录。像这种的小伎俩相对而言还好处理 —— 假设这些传说的故事大多数都是真的，我还是很难相信，我从来没有在现实生活中遇到过这种事情。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这个家伙留下来的软件里没有任何的逻辑炸弹或下流的阴谋，编译很正常，除了有一个 bug 外，一切都工作的很好。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>但是，你需要想像一下：程序中的所有函数、变量名都是以食物命名的。&lt;span>匹萨，西红柿，泡菜，各种味道的奶酪，水果，蔬菜，酒&lt;/span>，等等，一篇一篇，全是这样。里面唯一能让你马上知道意义的地方，只有 ‘main’ 函数名和 C 标准类库的调用。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>就这样，我接手了这个费力不讨好的烂摊子，努力把程序恢复到一个可维护的状态。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>说实话，这是一个极好的加密形式，只有拿到密钥你才能让这些“代码沙拉“变得有意义。一点一点的，我把这些函数名和变量名改成具有意义的命名，开始很麻烦，之后慢慢的变得容易些。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>把已知的函数和源代码进行恢复，要比对未知的代码进行反向解析容易的多，因为首先你要分清代码里哪些是程序，哪些是数据，而放在我前面的这些程序，显然都是明文，所有这活儿并不是不可能完成，或者说是格外的困难，只是这活儿太乏味太无趣了。一旦你发现了某个变量可能应该给个什么样有意义的名字，余下的就是查找和替换。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;img class="" data-ratio="0.6424501424501424" data-s="300,640" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="702" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>另外一个问题是，代码写的太烂，事实上，这意大利面条式的代码，比这些毫无意义的符号更让人困惑，等我把函数名和变量名都改回有意义的名称后，我开始把一大堆的代码重写，让它们易于理解、效率更高。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我始终没有弄明白他是否还有一套没有加密混淆过的代码，他可以使用一些‘混淆’脚本通过替换的方法把原始变量名混淆成这样。我很难相信，一个人会在最初时就把代码写成这样，因为这对他自己也是一个巨大的挑战，这里肯定有一些高超的技术。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>当然，如果你的脑子里还在想：你不能因为我的变量名没有什么意义就把我开除了(或应该招我回来改程序)，那你是在妄想，不管这个家伙的用意是什么，他的做法十分的错误(我很难想象他的前任老板还会推荐他)，不管怎样，这事儿让我乐了好几周。&lt;/span>&lt;/p></description></item><item><title>三十五年经验分享：程序员进阶八法</title><link>https://pangyd.com/post/73/</link><pubDate>Mon, 21 Aug 2017 19:44:14 +0800</pubDate><guid>https://pangyd.com/post/73/</guid><description>&lt;p>&lt;span>这八法十分可靠，可提高你写代码的技能，你可要收藏好了。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>时间到了，提高你的编程技能，认真+严肃，走起！&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>如果你的目标仅仅是提高自己，那么很容易实现，但是如果你的目标是成为一个伟大的程序员，那么这就不简单了。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>很多人都愿意说，我想变得更好，但是更好是什么却很模糊，而且人们也不知道该怎么样去做。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>我在这里分享八法来帮助你顺利提高你的编程技能。这些小智慧来自三十年深耕该领域，许多都令你再熟悉不过了，你可能早就认知了它们。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="">&lt;section>&lt;span>&lt;/span>&lt;span>&lt;span>&lt;/span>&lt;span>&lt;/span>&lt;/span>&lt;/section>&lt;section>&lt;section class="">&lt;section>&lt;span>1.要记得，你并非无所不知&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>在你前进的路上，有一只巨大的拦路虎，它的名字叫做“我无所不知”。那些计算机学科毕业的大学生们以及有经验的程序员都好犯这样的毛病。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>实际上，这是一个陷阱，掉进去就很难爬上来。但是，你仍然要克服它。只有机器人才愿意认为自己无所不知，但是人类的特点是，能够认识到自己的不足，然后去学习新知。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>所以，你要明白，想要成为一个更好的程序员，第一步就是意识到自己总有新物要学，保持谦逊的态度，这才是学习的一贯正途。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="">&lt;section>&lt;span>&lt;/span>&lt;span>&lt;span>&lt;/span>&lt;span>&lt;/span>&lt;/span>&lt;/section>&lt;section>&lt;section class="">&lt;section>&lt;span>2.停止去证明你有多正确吧&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>从经验中学习会令你伟大，而不仅仅是还凑合。但是要注意了，经验也会使我们不断重复错误的行为导致养成不好的习惯。如果你是有8年经验的程序员，你也有可能连着8年都在重复同样的错误。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>克服这一谬感的方法就是，时刻检视自己，并不断地发问：在这一点上，我是否还能做得更好一些。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>举个有趣儿的例子，一个经验丰富的软件开发者，他写出了令自己也艳羡不已的代码，于是他觉得这个代码简直太完美了，他不断写文章去证明自己有多么的正确，代码功能多么优秀。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>氮素呢？人们从来没有见到他去找一切办法来佐证自己的代码是错误的。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>其实呀，真正优秀的程序员，他们都喜欢去证反，就是去证明自己有多么的错误，因为他们知道，长久来看，用户一定会发现软件的问题和失误，而他们希望自己首先发现这些问题，而不是等待别人去发现。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>呐，你看到优秀和平庸之间的差距了吗？&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="">&lt;section>&lt;span>&lt;/span>&lt;span>&lt;span>&lt;/span>&lt;span>&lt;/span>&lt;/span>&lt;/section>&lt;section>&lt;section class="">&lt;section>&lt;span>3.代码没有死亡，它始终活着&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>没错，你第一步总是要写出高质量的代码来满足用户的特殊需求，但是优秀和平庸的区别体现在哪里？&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>如果你只是匆匆忙忙地进入下一个任务中，那么你不可避免地成为了穷忙族。一段代码写出来以后，它并没有死亡，它始终活着。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>这说明什么？你写出代码并不意味着你的工作结束了，相反，一切都才刚刚开始，你不需要火急火燎地赶往下一个站点。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>停止，仅仅意味着阶段性的展示和赏析，但是伟大的程序员对一件事情心知肚明，那就是万事都可以更好，产品运行了，这很棒，但是你的工作没有结束，要依靠迭代让产品变得好上加好。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>如何让产品变得更好？我们依据不同的应用，会提出不同的问题，比如，更快是不是对产品价值的增值？更容易记录是不是呢？更容易重复使用呢？更可靠呢？&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>这些问题虽然不同，但是程序猿对产品不懈追求的动机是一致的。你懂了吗？你不断思考如何让产品变得更好，这一点是不变的，但是你的方法是提出一些与众不同的、内容不一的问题。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="">&lt;section>&lt;span>&lt;/span>&lt;span>&lt;span>&lt;/span>&lt;span>&lt;/span>&lt;/span>&lt;/section>&lt;section>&lt;section class="">&lt;section>&lt;span>4.写三次吧&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>好的程序员认为写出的软件能运行就好了，伟大的程序员认为软件要运行得极其完美。但这很少在第一次就成功，最好的软件通常要写三次。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>首先，你写软件是为了向自己或者用户证明问题是可以解决的。其他人或许意识不到这是一个概念生成的时期，但是你自己很清楚。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p>&lt;p>&lt;span>然后，你让软件生效。最后，你让它正确地运行。&lt;/span>&lt;/p>&lt;p>&lt;br data-filtered="filtered">&lt;/p></description></item><item><title>那些程序员谈论的新技术我竟从没听说过！</title><link>https://pangyd.com/post/72/</link><pubDate>Mon, 21 Aug 2017 19:41:15 +0800</pubDate><guid>https://pangyd.com/post/72/</guid><description>&lt;p>&lt;span>过去的几个月里发生的几件事情，让给政府做软件开发的人感受到压力的陡增，从奥巴马的医保网站饱受诟病到美国退伍军人事务部官方网站的预约系统从1985年起就没有更新过，这些事情让我回忆起曾经作为政府程序员的经历，以及这段经历如何变成一种一直督促我努力工作的思想动力。&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>我曾在某个政府部门维护过一个写于1990年代的老系统。当一个新的系统启动开发来替代部分的老系统功能时，很多的程序员对开发新系统的工作产生的严重的抵制心里。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>起初，我并不知道为什么他们会有这么大的反感。对这个系统维护一段时间之后，我才慢慢明白，有些程序员是专门维护系统，时间长达15年之久。当被邀请开发新系统时，他们对&lt;span>&lt;strong>新事物和新技术都感到心里没底&lt;/strong>。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;img class="__bg_gif " data-ratio="0.476" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="gif" data-w="500" width="100%" _width="670px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-order="1" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>&lt;strong>&lt;span>这让我警醒：&lt;/span>&lt;/strong>&lt;span>这种事情也会很容易发生在我的职业生涯中。我可能会安逸的干着某一种工作，安逸的年年维护着某个系统。当这个系统长岁数时，我对它也变的更有价值，我的角色会最终变成专职维护它。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>我的余生也就整天执行相同的任务，直到退休。而当有一天，当这个系统不再被人需要时，我会发现外面的世界已经日新月异，我需要从头学起。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这可不是我希望的生活轨迹；我作为程序员喜欢的方式是学习新思路来解决新问题，而不是安于现状。&lt;/span>&lt;span>我们程序员很容易迷住某一项技术而将全部精力都放在上面，对于其它的毫不关心。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>虽然这样可以让你在某一个领域成为专家，但你却得不到探索其它领域获得的更多好处。当意识到这种目光狭窄会扼杀我的进取心后，我开始避免让所有鸡蛋都放到一个篮子里，我开始走出自己职业仕途中的安逸环境。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="" style="text-align: center">&lt;section>&lt;section>&lt;section>&lt;section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section>&lt;strong>&lt;span>学习新技术&lt;/span>&lt;/strong>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;section>&lt;section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>你一直在用PHP编程吗？尝试一下使用Rails或ASP.NET。也许尝试一种新的语言或框架会让你感到受挫和沮丧，但探索的趣味也就在这里。至少，你应该看看同一种功能用其它语言是如何实现的。如何你只会用锤子，那你眼里所有的东西看起来都像钉子。&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;img class="__bg_gif " data-ratio="0.562" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="gif" data-w="500" width="100%" _width="670px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-order="2" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="" style="text-align: center">&lt;section>&lt;section>&lt;section>&lt;section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section>&lt;strong>&lt;span>不惧怕老代码&lt;/span>&lt;/strong>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;section>&lt;section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>虽然上面我举例的那个老代码的例子有些极致，但我并不认为所有的老代码都应该立刻替换掉、删掉。在如今的软件中，有很多稳固的、良好设计的程序代码，它们对那些只会使用集成开发组件的现代程序员来说是很好的学习教材。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>如果你的公司里有老项目、老代码需要你去维护，研究一&lt;/span>&lt;/p>&lt;p>&lt;span>下！你会吃惊于从中学到那么多的编程知识以及公司的业务规则。还会发现一些当前正在研究的问题，其实几年以前就有人已经解决了。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;img class="__bg_gif " data-ratio="0.496" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="gif" data-w="500" width="100%" _width="670px" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-order="3" data-fail="0">&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="" style="text-align: center">&lt;section>&lt;section>&lt;section>&lt;section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;section class="">&lt;section class="">&lt;section>&lt;strong>&lt;span>了解你的敌人&lt;/span>&lt;/strong>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;section>&lt;section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;/section>&lt;section>&lt;/section>&lt;/section>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>程序员很容易对某种语言或框架产生宗教式的虔诚。如果你发现自己曾经痛恨或鄙视某种技术(参看Jeff Atwood的一篇经典文章)，也许你应该强迫自己去研究一下它们。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>最不济，至少你能证明讨厌它们是有理由的。最好的情况是，你会从它们中学到很多东西。不要让你的偏见阻挡了你的探索道路。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;img class="__bg_gif " data-ratio="0.482" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="gif" data-w="500" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-order="4" data-fail="0">&lt;/p></description></item><item><title>转载自【Java编程精选】Java Web架构知识整理——记一次阿里面试经历</title><link>https://pangyd.com/post/49-javajava-web/</link><pubDate>Thu, 10 Aug 2017 20:47:53 +0800</pubDate><guid>https://pangyd.com/post/49-javajava-web/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;p>“你学习一门技术的最佳时机是三年前，其次是现在。”这话从来很灵验。经过这次面试，觉得需要整理下Java Web相关的资料，以便自己提高或者更快适应可能面临的新的工作。&lt;/p>&lt;p>首先谈谈Java Web需要掌握哪些东西。这里是一些知识点的搜集，暂不做详细说明，欢迎各位博友补充指正。&lt;/p>&lt;h2>&lt;strong>1.底层&lt;/strong>&lt;/h2>&lt;p>&lt;strong>&lt;br>&lt;/strong>&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;span>Java语言相关的就不说了，首先是JVM的结构和工作原理。比较重要的是Java内存模型，各种GC算法，Classloader的加载原理等。个人对底层的一些东西还算比较了解，所以不过多纠结，实际上程序编译链接过程以及二进制文件的处理还是很值得研究的。&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>JVM监控及调优。作为一个开发人员并不一定需要非常熟悉JVM调优的方法，但如果具备JVM监控及调优的能力，将让你对程序运行状况了如指掌，对于问题定位也会敏感得多。&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>Java多线程。对于线程安全的理解，以及如何在自己的程序中避免多线程造成的不一致问题等。&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p>&lt;span>I/O。Java中常常提到的是BIO/NIO，即阻塞型I/O与非阻塞型I/O，其实并不难理解，结合Linux中的同步I/O和异步I/O的实现原理，基本都是相通的，每种I/O方式解决的问题，又存在什么问题，为什么使用epoll。&lt;/span>&lt;/p>&lt;/li>&lt;/ul>&lt;h2>&lt;strong>&lt;br>&lt;/strong>&lt;/h2>&lt;h2>&lt;strong>2.Servlet&lt;/strong>&lt;/h2>&lt;p>&lt;br>&lt;/p>&lt;p>Servlet是运行于服务端的java程序，一般实现自己的Java服务端应用都从HttpServlet类继承，然后实现自己的init | doGet | doPost | service方法。Servlet的生命周期从其加载开始，首先执行一次初始化，调用init方法，之后便可运行自身的服务，当生命周期结束时，调用destroy方法回收资源，结束服务。&lt;/p>&lt;p>仅了解原理当然是不够的，还要实战能力，在IDE中写写简单的代码谁都会，然而真正让一个程序能够运行起来也还需要点其他的东西，这里我指的是Servlet的容器。servlet的容器有很多，常用的以Tomcat为例，安装好Tomcat后，在开发时必须包含进Tomcat的lib。IDE确实惯坏了好多人，目录如何组织，程序如何编译、如何部署这些问题都被IDE屏蔽掉了，如果要对整体有比较透彻的了解，建议一切从命令行动手。&lt;/p>&lt;p>具体可参考：《Servlet与JSP核心编程》。&lt;/p>&lt;h2>&lt;strong>3.框架&lt;/strong>&lt;/h2>&lt;p>&lt;br>&lt;/p>&lt;p>Java Web开发的用到的框架之多简直令人发指，而且因为版本的更新换代导致的问题也是层出不穷。然而这也是Web技术不断演化的结果，要么选择接受，要么引领节奏。&lt;/p>&lt;h3>Spring&lt;/h3>&lt;p>Spring是一个强大而又“轻量级”的Java开发框架，之所以打引号是因为感觉并不是那么轻量。Spring的主要目的在于简化Java应用开发，以配置方式代替硬编码方式的编程，模块解耦，其架构如下图所示。包括了数据访问、远程通信、AOP、核心容器等部分。&lt;/p>&lt;p>&lt;img class="" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" width="740" height="540" data-ratio="0.7297297297297297" data-w="740" data-type="png" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;strong>&amp;nbsp;Figure 1 Spring体系架构&lt;/strong>&lt;/p>&lt;p>Spring的核心主要有三点：&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;em>&lt;strong>IoC&lt;/strong>&lt;/em>：反转控制。&lt;/p>&lt;/li>&lt;/ul>&lt;p>反转控制就是指将控制权由类内部抽离到容器，由容器类的实例化及动作进行配置管理。&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;strong>&lt;em>Dependency-injection&lt;/em>&lt;/strong>：依赖注入&lt;/p>&lt;/li>&lt;/ul>&lt;p>对象的依赖关系由负责协调系统中各个对象的第三方组件在创建对象时设定。对象不自行创建或管理它们的依赖关系，依赖关系被自动注入到需要它们的对象中。通过参数和配置能够体会出“注入”这个词在这里有多形象。依赖注入的最大好处就是松耦合。不需要再类内部去和特定的类进行绑定，而是将一些依赖关系以参数的形式注入到类内部。&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;em>&lt;strong>Aspect Oriented Programming&lt;/strong>&lt;/em>：面向切向编程&lt;/p>&lt;/li>&lt;/ul>&lt;p>在软件开发中，分布于应用中多处的功能被称为横切关注点。这些横切关注点往往和业务逻辑是相分离的，将这些横切关注点与业务逻辑相分离正式AOP要解决的。AOP编程能够让遍布在应用各处的功能分离出来形成可重用的组件。是高内聚低耦合的又一个体现，将通用实现模块与核心业务模块相分离。&lt;/p>&lt;p>具体参考：《Spring In Action》&lt;/p>&lt;h2>&lt;strong>Hibernate&lt;/strong>&lt;/h2>&lt;p>&lt;br>&lt;/p>&lt;p>数据持久化框架其实也有很多，需要掌握的不仅是Hibernate，只是因为Hibernate在以前的企业级应用中用的比较多而已，另外MyBatis也占有相当重要的份额。Hibernate是一个全自动的持久化框架，并不是那么方便，所以很多开发者更倾向于使用MyBatis，淘宝就是这样。&lt;/p>&lt;p>Hibernate的工作流程：首先通过configuration对象读取配置文件；解析映射信息，创建StandardSessionFactory；调用openSession打开session；创建事务transaction，之后进行持久化操作；完成后提交事务，关闭session，关闭sessionFactory。&lt;/p>&lt;p>&lt;img class="" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" width="571" height="601" data-ratio="1.052539404553415" data-w="571" data-type="png" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;strong>&amp;nbsp;Figuer 2 Hibernate工作流程&lt;/strong>&lt;/p>&lt;p>要理解ORM的理念：ORM意为对象关系映射。是一种为了解决程序的面向对象模型与数据库关系模型互不匹配问题的技术。&lt;/p>&lt;p>hibernate中比较重要的是对象的4种状态转换及条件。分别是transient瞬时态、persistent持久态、detached游离态和移除态，状态转换如下：&lt;/p>&lt;p>&lt;img class="" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" width="860" height="514" data-ratio="0.5976744186046512" data-w="860" data-type="png" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;strong>&amp;nbsp;Figure 3 Hibernate对象状态转换图&lt;/strong>&lt;/p>&lt;h2>&lt;strong>Struts 2&lt;/strong>&lt;/h2>&lt;p>&lt;br>&lt;/p></description></item><item><title>转载自【 Java编程精选】一位程序员工作10年总结了这些忠告</title><link>https://pangyd.com/post/48-java10/</link><pubDate>Thu, 10 Aug 2017 19:46:59 +0800</pubDate><guid>https://pangyd.com/post/48-java10/</guid><description>&lt;p>展望未来，总结过去10年的程序员生涯，给程序员小弟弟小妹妹们的一些总结性忠告。&lt;/p>&lt;p>&lt;strong style="text-align: center">&lt;/strong>&lt;/p>&lt;p>&lt;span>1、自己的户口档案、养老保险、医疗保险、住房公积金一定要保管好。&lt;/span>&lt;/p>&lt;p>由 于程序员行业每年跳槽一次，我不隐瞒大家，我至少换过5个以上的单位，这期间跳来跳去，甚至是城市都换过3个。还好户口没丢掉，其他都已经是乱了，好几个 城市里，都有交过三金，甚至是一个程序的2个区里交的都有，那些东西，10年后，会变得很重要。你买房子若有公积金，可以取出来，贷款利率也会比较低一 些，有孩子了，还需要上学，生病了还需要医疗保险。&lt;/p>&lt;p>&lt;span>2、读&amp;gt;写代码&amp;gt;读&amp;gt;写代码（日复一日）&lt;/span>&lt;/p>&lt;p>关于如何高效学习编程我要给出的第一条建议是在阅读代码和编写代码之间循环往复。阅读代码（书籍，博客文章，开源代码）将帮助你查看解决方案，了解最佳做法，并大致了解语言或系统。但是在你这样做之后，你需要自己实际去写代码。可以是任何东西。可以是小的编码练习或业余项目，但确保你能将之付诸于实践，并用某种方式使用你学到的东西。如果你不这样做，那么你会发现自己面对编辑器会无所适从无从下手。&lt;/p>&lt;p>&lt;span>所有事情所花费的时间总是比你预期的要长&lt;/span>&lt;/p>&lt;p>特别是在编程中，即使一切进展顺利，我们也很难对功能所需的时间做出正确的预算。并且，开发软件时碰到各种意想不到的问题是非常常见的。一个简单的合并操作会导致一系列小bug，一次框架升级意味着一些函数必须改变或者一些API不按照你想象的那样工作。&lt;/p>&lt;blockquote>&lt;p>Hofstadter Law（ 霍夫施塔特定律）其实道出了真谛：做事所花费的时间总是比你预期的要长，即使你在预期中已经考虑了 Hofstadter Law（ 霍夫施塔特定律）。&lt;/p>&lt;/blockquote>&lt;p>&lt;span>先了解现有的代码&lt;/span>&lt;/p>&lt;p>大多数的编码都需要以某种方式改变现有的代码。即使是新功能，也需要适应现有的程序。所以，在你加进去新的内容前，首先需要了解当前的解决方案。否则，你一不小心就很有可能会打破现有的功能。这意味着，阅读代码和编写代码都是必要的技能。这也是为什么看似微小的变化仍可能需要很长时间才能解决的原因之一，因为你首先必须了解上下文。&lt;/p>&lt;p>&lt;span>成为开发者社区的一员&lt;/span>&lt;/p>&lt;p>当我还在大学的时候，我总是懒得参加各种社团和俱乐部活动。当我找到我的第一份开发工作时，最不乐意做的也是和其他开发者闲聊闲逛。&lt;/p>&lt;p>但是我错了。&lt;br>&lt;/p>&lt;p>同行聚会和进入开发群是很有趣的事情，是结识开发者伙伴的好地方。如果你想在这个行业里做到最好，就尽量不要消极被动。与坐在你旁边的人交谈，提供你的帮助，分享你的经验。每个人都喜欢谈论自己的经历，更何况你也许会遇到很多潜在的雇主。&lt;/p>&lt;p>在那里你会碰到许多需要教练的初学者团体，你可以指导新手，给他们提供练手的机会，甚至赞助活动。&lt;/p>&lt;p>当然，要学习别人的开发技巧并且勇于实践，要热情地欢迎不同意见的人讲话，勇敢地听取他们的意见。&lt;/p>&lt;p>&lt;span>编程并不是一件什么神秘的东西&lt;/span>&lt;/p>&lt;p>编程跟其他东西一样，是一门技术。跟语言学习一样，有需要掌握的语法和词汇；跟数学一样，有解决特定类型问题的流程方法；像各种工艺和艺术创作一样，有技术、工具以及人们经年累月发展起来的最佳实践方案，专门解决各种不同类型的任务，你可以自由的使用、修改或弃之不用。&lt;/p>&lt;p>但是编程也不是每个人都可以学好学懂学会的，曾经面试过从培训班出来的新人，一问三不知，最基本的知识点都模糊不清，一问他以前的专业职业，原来是高中没毕业，去了工厂做工人，觉得太辛苦，后来看到培训机构说没基础也可以学习编程，就把挣的钱全送给了培训机构去学习编程。结果呢？很清楚，他选择了不适合他的道路，注定没有出路。&lt;/p>&lt;p>虽然编程不神秘，但是它和美术、音乐、艺术、销售、设计等一样，也分人，也不是每个人都能学会都能干的。&lt;/p>&lt;p>&lt;span>这是一场马拉松，不是百米赛跑&lt;/span>&lt;/p>&lt;p>这三个月对我来说绝对不容易。这三个月，我每周都要辛苦六天用于找工作和学**。不过我还是把自己照顾得很好。&lt;/p>&lt;p>有的时候，我会和朋友一起学。有的时候，我会找个咖啡馆自己一个人学，或者去 Hack Reactor 提供的休息室学。每周我还会和教练报告我的进度。&lt;/p>&lt;p>在这个过程中很容易耗尽热情。那么就吃好，睡好，继续学。&lt;/p>&lt;p>而且会很容易感到孤单。和一群学友们在一起会好一点。&lt;/p>&lt;p>建议：要有长期作战的心理准备，照顾好自己的身体。&lt;/p>&lt;p>&lt;span>开发效率&lt;/span>&lt;/p>&lt;p>开发效率可以用这些方式提升：&lt;/p>&lt;p>1 . 构建公用工具类，方便大家使用&lt;/p>&lt;p>2 . 使用开源的一些包，例如 ORM 思想的数据库等&lt;/p>&lt;p>3 . 可以很快的找到问题。开发中，找 bug 的时间，往往是很多的。我用的方法有3个： 使用 try catch； 拦截所有 crash 到我指定的地方；超多的 Log，Log 有统一的控制开关。&lt;/p>&lt;p>4 . 借力：数据上报用灯塔，崩溃上报用 bugly，公司 KM 上很多经验，拿过来用&lt;/p></description></item><item><title>基本上写完人事管理系统的感受</title><link>https://pangyd.com/post/46/</link><pubDate>Wed, 09 Aug 2017 21:01:53 +0800</pubDate><guid>https://pangyd.com/post/46/</guid><description>&lt;p>总共写了6天 &amp;nbsp;一个字累 但是坚持了下来 为了下个学期的Java web &amp;nbsp;&lt;/p>&lt;p>知识点总结：&lt;/p>&lt;p>Statement：用于执行静态sql语句 并返回它所生成的结果（定义成私有变量）&lt;/p>&lt;p>ResultSet ：结果集类&lt;/p>&lt;p>Connection：链接类&amp;nbsp;&lt;/p>&lt;p>"jdbc:mysql://localhost:3306/db_hrms"：数据库链接地址字符串 前面定义为字符型&lt;/p>&lt;p>characterEncoding=GBK:防止乱码&lt;/p>&lt;p>Class.forName("com.mysql.jdbc.Driver");：连接驱动字符串&lt;/p>&lt;p>{&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; conn=(Connection) DriverManager.getConnection(strurl, username, password); ：conn用于连接数据库 分别为地址 用户名 密码&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DriverManager.getConnection： 启动器管理类的连接方法&lt;/p>&lt;p>}try方法&lt;/p>&lt;p>commit():该方法用于修改传入的结果 放进数据库&lt;/p>&lt;p>insert into Person() values(）; insert：插入 &amp;nbsp;into: 进入中 Person() 表 &amp;nbsp;values 数据 ：字面意思&lt;/p>&lt;p>update Person set * 修改 person表中的 设置 后面跟 表中字符加修改字符&lt;/p>&lt;p>delete from Person where PersonID 删除&lt;/p></description></item><item><title>“努力一暑假开学当学霸” 学生的暑假是怎样被“玩”坏的？</title><link>https://pangyd.com/post/34/</link><pubDate>Sat, 05 Aug 2017 17:11:15 +0800</pubDate><guid>https://pangyd.com/post/34/</guid><description>&lt;p class="" style="text-align: justify">（原标题：“努力一暑假开学当学霸” 学生的暑假是怎样被“玩”坏的？）&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p style="text-align: center">&lt;img data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" class="" data-ratio="0.7269230769230769" data-w="260" data-type="jpeg" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;br>“游”大于“学”，出境游学成了旅游项目一个昂贵的“变体”。现在旅行团加个“游学”的名头就能售价暴涨，但实际上只是普通旅游。&lt;br>&lt;br>&lt;/p>&lt;/li>&lt;/ul>&lt;p>暑假本应是孩子们“狂欢”的时候，但现在却被各种培训班淹没，甚至有培训班打出“努力一暑假，开学当学霸” 的口号，孩子不能放松，家长也并不轻松，有些培训班要求家长必须陪读以便每天回家能辅导孩子复习。&lt;br>　　与此相对的，有些家长选择把孩子送出国去游学，可游学也并不是一件省心的事儿，日前有媒体爆出，有不少旅行社就打出游学的幌子而只是出国一趟只游不学而已。&lt;br>　　很多家长是报着不能让孩子输在起跑线上的心态将孩子们的暑假安排得满满当当，家长也应换个角度想想，如果是自己小时候的暑假，又可会愿意被这么安排？孩子们的暑假，究竟该怎么过？&lt;/p>&lt;p style="text-align: center">&lt;strong>才上幼儿园 孩子的作业已经做不完&lt;/strong>&lt;/p>&lt;p>嘟嘟今年5岁半，在妈妈嘴里就是“马上就要进入幼小衔接的关键时期”，嘟嘟妈这个暑假给孩子报的班，排满了七八两个月。打开嘟嘟妈的手机，日历上赤橙黄绿青蓝紫一片彩虹色，用不同颜色标记的培训班竟然多达9个。&lt;br>　　看到那张让人眼花缭乱的日程表，有被吓到的感觉，但是嘟嘟妈非常肯定地表示：“我们孩子报得不算多的。”&lt;br>　　据了解，虽然很多培训班是短期的，日程有错开，不过，5岁半的嘟嘟最忙的一天，从上午到晚上排了4个班——早上是美术课，接着钢琴课，下午是一对一游泳课，晚上是英语班。&lt;br>　　这么紧凑的日子，嘟嘟需要两代人接送。白天是爷爷送，晚上等妈妈下班了就妈妈送。但作为医生，嘟嘟妈有时候还会轮到夜班，再加上各种学习和出差，她自己的日程表会叠加一倍的量，“精力顾不过来”。&lt;br>　　才幼儿园的嘟嘟已经要应付一大堆培训班作业了。英语班，暑期是集中训练15天，每天都要上课。英语课的课后作业，是培训机构自己开发的App程序，每周要完成 90个选择题，这些作业还是收费的，一元3个选择题。虽然作业很繁重，但嘟嘟妈承认做作业比单纯听课效果要好。&lt;br>　　但相比花样繁多的培训班，上课的内容还真是有点“水”。&lt;br>　　嘟嘟的妈妈说，一个《渔夫和金鱼》 的故事，被 3个培训班的老师用来教学。&lt;br>　　英语课上，这个故事是用英文讲的，回家以后要在App上做选择题：渔夫的妻子提了什么要求？选项还特别长。&lt;br>　　儿童剧班里，老师也表演了《渔夫和金鱼》的故事。&lt;br>　　到了乐高夏令营里，又是《渔夫和金鱼》。老师讲完故事，让孩子们用乐高玩具搭出故事场景。&lt;br>　　渔夫和金鱼也是够累的。&lt;br>　　可是，即便如此，也没有阻挡这位80后妈妈给孩子报班。说到为什么要给孩子上儿童剧班，嘟妈妈表示，“我自己感觉开会发言、上台做报告的口才很重要，现在已经很流行戏剧课啦。”她说，朋友的孩子报了据说是冯小刚投资的一个全英文戏剧教学，一次课要 300多元，“这么贵的班，照样被抢完。”&lt;br>　　暑假这两个月，这七七八八的培训班，一共花了嘟妈妈 10000多元，但她表示，她给孩子报的班都不是很贵。&lt;/p>&lt;p style="text-align: center">&lt;strong>“努力一暑假 开学当学霸”&lt;/strong>&lt;/p>&lt;p>辰辰该上三年级了。二年级期末考试，他的数学只得了92分，这让陈明敏挺不满意，“班里有两个学生考了满分，半数学生都在95分以上”。她有些自责，怪自己没早点给孩子报数学辅导班，而暑假正是“弯道超车”的最佳时刻。&lt;br>　　她关注了一个很火的数学辅导班，网站上打出令家长们“心潮澎湃”的口号——“努力一暑假 开学当学霸”。每天上两个半小时，连续上20天为一期，中间只有一天休息，同时老师提出一个硬性要求——家长必须陪读，以便每天回家辅导孩子复习。&lt;br>　　陈明敏的工作挺忙，但她还是咬了咬牙点头答应了。她盘算着只有每天午休自己时间稍微宽松些，决定给孩子报个中午班。&lt;br>　　每天上午 11点半，盛夏日头最毒的时候，她就会打仗似的冲出办公楼开车回家接孩子，并赶在12点前准时坐进教室。在班里，她是最认真的“学生”，老师在前面讲，她在下面记录，每次笔记都密密麻麻记好几页，“比自己上学时可认真多了，不能因为我影响儿子学习啊”。&lt;br>　　除了每天两小时数学课，陈明敏还给儿子报了英语课和游泳课。英语课是周二和周五晚上，每次各1个小时；周末下午是游泳课。&lt;br>　　这样一来，辰辰似乎比没放假时更忙了。他的暑期时间安排表排得满满当当：每天上午必须要完成数学和英语作业；中午上数学课；晚上除了上课，就是复习巩固数学和英语的学习情况。&lt;/p>&lt;p style="text-align: center">&lt;strong>出境游学成了旅游项目昂贵的“变体”&lt;/strong>&lt;/p>&lt;p>李元的儿子只是小学五年级学生，但他班上90%的同学都已经去过不少国家游学。之前李元认为孩子岁数小，不放心让他单独出门，这回看起来等不得了。“假期一结束，孩子们就会在一起讨论谁去的国家好玩，没去游学的同学无形之中被隔离在外，不但在同学面前没有谈资，还有可能被同学瞧不起。”李元说，今年一定要给他儿子报个出国游学项目。&lt;br>　　山东济南的公务员韩春去年给女儿报名参加一个海外游学项目。本来全家人对游学充满了期待，想早早做好准备。&lt;br>　　直到出发前 3天，旅行社才告诉韩春一家集合地点和应带物品，相关信息与游学关联性不大，倒是和平时出国旅行没什么两样。“出去后就发现不对劲。不少学习、交流环节都因为这个那个原因取消，反倒增加了一堆购物环节，就在各个大小商店之间游荡。 学 没游成，光去购物了。”这一次，前后报名费就花去 6万多元，几乎相当于他半年的收入。&lt;/p>&lt;p style="text-align: center">&lt;strong>不要用金钱堆砌孩子的暑假&lt;/strong>&lt;/p>&lt;p>城市里的孩子暑假期间在各类培训班、特长班中忙得不亦乐乎，在培训班里被强化着扼杀想象力、创造力。以提高分数为目标的应试训练，让教育成为了一种“烧钱游戏”。&lt;br>　　“烧钱式教育”背后的家长们，在这场游戏中最终都难以获胜，也不会有最后的赢家。教育是一场长跑，起跑线上的竞争决定不了最后的输赢，什么时候做什么事情，必须符合天性，符合教育规律。&lt;/p>&lt;p>起跑线上的竞争违背教育规律，是典型的拔苗助长，对孩子的长远发展而言，可能也是弊大于利。可怕的是，家长不如此，便不心安。家长之间的互相攀比，互相较劲给孩子报了多少培训班、特长班，再加上校外培训机构的刺激、诱导，被裹在这股洪流之中，人们很容易失去理性，如果不节制，别说3万元，30万也可能撑不起一个暑假。&lt;/p>&lt;p>　　其实，在多位中小学教师和教育专家看来，放假期间，家长给孩子更多的亲子陪伴，比上一些课外班要重要得多。在这期间，家长应是孩子的向导和伙伴，比如可以引导孩子做自己的暑假计划，规定每天的作息、学习时间和休息娱乐时间，并要求孩子严格遵守，培养其规划时间的能力和责任心。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: right">据新华社&lt;br>&lt;/p>&lt;p style="text-align: right">(原标题：“努力一暑假开学当学霸” 学生的暑假是怎样被“玩”坏的？)&lt;/p></description></item><item><title>让你的能力，配得上你的愿望</title><link>https://pangyd.com/post/31/</link><pubDate>Fri, 04 Aug 2017 21:16:02 +0800</pubDate><guid>https://pangyd.com/post/31/</guid><description>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="png" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" class="" data-ratio="0.6636971046770601" data-w="449" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p>&lt;section data-author="Wxeditor">&lt;article class="" data-author="Wxeditor">&lt;section style="text-align: center">&lt;section>&lt;br>&lt;/section>&lt;section>&lt;p>1&lt;/p>&lt;/section>&lt;/section>&lt;/article>&lt;/section>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>重温《肖申克的救赎》，里面有句话让我铭记于心：“有些鸟注定是不会被关在笼子里的，因为它们的每一片羽毛都闪耀着自由的光辉。”&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>我从小就特别羡慕有独到见解，能够在众人面前出口成章又侃侃而谈的人。小学时的我是班级中的“大舌头”，于我而言，语言表达就好似一座巍峨的高山，让人望而却步。每每都快要“咬舌自尽”了，平翘舌音也还是会说错。仍记得，我当时的一个习惯动作就是，只要老师说“我找同学朗诵一下这段课文”，我就会迅速弯下腰，将头藏到书本后面，唯恐老师叫我起来读课文。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>好好的一篇《春天来了》，被我读成了《村天来了》，引得同学们捧腹大笑。我的脸涨得如充满气的皮球，恨不得能够有一种魔法，可以把刚才难堪的场景统统抹掉。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>我曾在梦中因不会表达而被人误解，委屈得哭醒。我是多么想能够在大家面前侃侃而谈，收获认可与掌声呀。一心寻求改变的我，开始每天做一些简单的语言练习，坚持了很久。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>因为我的画画得很好，为班级制作黑板报，设计班旗、班徽让我“火”了一把，很多老师和同学来我们班参观。于是，我们的班主任让我站在讲台上讲一讲我的设计创意，在掌声的鼓励下我说出了这些设计的联想。我站在讲台上，看到他们崇拜与喜爱的目光，竟不自觉地讲了许久。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>&lt;span>&lt;strong>我们每个人身上都有无限的独特的潜能&lt;/strong>&lt;/span>，如某种才华、技艺、让人开心或者投入的本领等等，&lt;span>&lt;strong>它们就好像是生活道路上赐予我们的礼物，等待着我们努力去探寻。&lt;/strong>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;section data-author="Wxeditor">&lt;article class="" data-author="Wxeditor">&lt;section style="text-align: center">&lt;section>&lt;img class="" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-ratio="0.5083333333333333" data-w="600" src="https://pangyd.com/uploads/2017/08/44d5041f007d30a9.png">&lt;/section>&lt;section>&lt;p>2&lt;/p>&lt;/section>&lt;/section>&lt;/article>&lt;/section>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>大学我如愿考入了北京，开学不久就加入了演讲与口才社。说来也巧，正赶上“北京市志远杯高校联合演讲大赛”，怀着对演讲的喜爱，我精心准备了一篇演讲稿，并在初赛200多名选手中，脱颖而出，晋级总决赛。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>两周后的总决赛上，我人生中第一次面对数百人演讲。我的演讲《用右手撑起一片晴空》，讲述了我自幼失去左臂，却通过努力获得省速滑冠军的故事。当我说到结尾时，现场响起了当天最热烈的掌声。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>当得知自己获得“2011年北京市志远杯高校联合演讲大赛冠军”时，眼含热泪的我仿佛看到了语言高山后面的大海。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>那一次的比赛，让我发现原来演讲可以影响很多人，甚至能够改变很多人。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;strong style="text-align: justify">&lt;span>　　&lt;/span>&lt;/strong>为了我小小的&lt;/span>&lt;span>“英雄梦想”，我一有空就在无人的大教室里练习演讲。有一次，一位即将在这个教室上课的理学院的教授听到了我演讲中的一段话，便盛情邀请我在课前为200多位同学即兴演讲，从大家的笑容中我知道效果还算不错。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="png" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" class="img_loading" data-ratio="0.580046403712297" data-w="431" src="https://pangyd.com/uploads/2017/08/44d5041f007d30a9.png">&lt;/p></description></item><item><title>刷机教程</title><link>https://pangyd.com/post/29/</link><pubDate>Wed, 02 Aug 2017 19:30:46 +0800</pubDate><guid>https://pangyd.com/post/29/</guid><description>&lt;div>随着手机行业不断发展，越来越多人追求完美，而刷机正好可以弥补——但系很多人对于刷机却一无所知，那就让我来带你装13&lt;br>&lt;br>刷机方法主要有【软刷】【卡刷】【线刷】&lt;br>&lt;br>下面让我一一介绍各种方法&lt;br>&lt;br>&lt;img src="file:///C:\Users\庞玉栋\AppData\Local\Temp\S~LW`Y7C8DV}Q91QC%Q`6HH.png">小白建议【软刷】，因为这个确实安全性最高&lt;br>可以用【刷机精灵】&lt;br>刷机固然有风险有可能变砖,但几率不大，其原因有以下几点：&lt;br>1、电量不足&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;，刷机时要注意的事项之一就是手机电量，那是因为手机刷机过程中就像电脑系统重装突然断电了。&lt;br>&lt;br>2、刷机包没选对&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;，很多时候刷机都是由于刷机的问题引起的，刷机包本身有问题，导致刷机过程中手机直接变砖的可能性很大，所以刷机包要去正规的资源站找，而且还测试过的比较安全。【建议奇兔刷机https://m.rom.7to.cn/】&lt;br>&lt;br>3、刷机前要ROOT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;，有些手机要刷机一些底包等，这些都是特别的一些机型，特别的版本手机刷机需要这个，一般手机不要那么麻烦的。&lt;br>&lt;/div></description></item><item><title>程序员之间的十八层鄙视网络</title><link>https://pangyd.com/post/27/</link><pubDate>Tue, 01 Aug 2017 20:59:15 +0800</pubDate><guid>https://pangyd.com/post/27/</guid><description>&lt;p>&lt;span>有人的地方就有江湖。程序员，是一个知识、智商、都异于常规行业的群体。自傲，清高，闷骚，也属于这个群体鲜明标签。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>程序员有时候很自我，这样就给自己一个盲目的优越感。特别在与其他程序员对比的时候，他总能找到在一两个地方优于你的地方，所以，程序员之间的鄙视网络，在程序员这个职位诞生之日起，就慢慢的形成了。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>时至今日，这张鄙视网络已经相当的庞大。互联网的江湖中，有好事者开始归纳这张网，现在我们就来看看这张日益巨大的鄙视网。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;img class="" data-height="336" data-ratio="0.56" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="600" data-width="600" title="图0：程序员之间的十八层鄙视网络" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;img class="" data-height="337" data-ratio="0.5616666666666666" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="600" data-width="600" title="图1：程序员之间的十八层鄙视网络" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p>&lt;p>&lt;img class="img_loading" data-height="338" data-ratio="0.5633333333333334" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="600" data-width="600" title="图2：程序员之间的十八层鄙视网络" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/44d5041f007d30a9.png">&lt;/p>&lt;p>&lt;img class="img_loading" data-height="337" data-ratio="0.5616666666666666" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="600" data-width="600" title="图3：程序员之间的十八层鄙视网络" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/44d5041f007d30a9.png">&lt;/p>&lt;p>&lt;img class="img_loading" data-ratio="0.45666666666666667" data-s="300,640" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="600" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/44d5041f007d30a9.png">&lt;/p>&lt;p>&lt;img class="img_loading" data-height="353" data-ratio="0.5883333333333334" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="600" data-width="600" title="图5：程序员之间的十八层鄙视网络" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/44d5041f007d30a9.png">&lt;/p>&lt;p>&lt;img class="img_loading" data-height="665" data-ratio="1.1083333333333334" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="600" data-width="600" title="图6：程序员之间的十八层鄙视网络" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/44d5041f007d30a9.png">&lt;/p>&lt;p>&lt;img class="" data-height="692" data-ratio="1.2673992673992673" data-src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-type="jpeg" data-w="546" data-width="546" title="图7：程序员之间的十八层鄙视网络" width="auto" _width="auto" src="https://pangyd.com/uploads/2017/08/74c10f869f038762.jpg" data-fail="0">&lt;/p></description></item><item><title>转载自【数据猿】从硬件到软件，人工智能如何驱动文娱行业变革？</title><link>https://pangyd.com/post/25/</link><pubDate>Mon, 31 Jul 2017 15:36:32 +0800</pubDate><guid>https://pangyd.com/post/25/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: justify">&lt;span>7月28日，“达观数据开放日”首站上海站的活动在上海浦东软件园爱酷空间举行。本次活动围绕“人工智能助力文娱行业智能运营”的主题，喜马拉雅FM副总裁李海波、创业邦趋势学院院长张雷、梨视频副总裁徐戌雄和达观数据COO冯佳妮等出席了本次活动，从人工智能与文娱行业的内容运营的结合点切入，对整个行业的发展趋势以及与人工智能的结合进行了深入的探讨。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>在“开放日”的演讲环节中，嘉宾们从音频、媒体和短视频这三个不同的角度切入，分享了各自领域的运营经验。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>喜马拉雅FM总裁李海波首先介绍了喜马拉雅在人工智能方面所进行的努力。早在2015年4月，喜马拉雅FM就宣布与科大讯飞达成合作，二者联合推出语音开放平台，直接对接漫步者等各类硬件研发和生产企业，还将围绕互联网与移动互联网、车联网、智能硬件等诸多领域展开全面合作。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>当时，科大讯飞与喜马拉雅FM都已各自研发了一些产品，如：科大讯飞的小柔、小智智能语音机器人，喜马拉雅FM的听书宝，与“童话大王”郑渊洁合作的舒克故事机等。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>而在上个月，喜马拉雅FM刚刚正式发布了国内第一款全内容AI音箱“小雅”，并基于此提供一套基于语音交互的场景解决方案，这意味着巨头齐集的国内人工智能领域迎来了首个内容型选手。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>对于这款人工智能音响，李海波的逻辑是这样的：目前所有的智能音响到今天为止都在智能两个字上做文章，试图去控制电视，做遥控，去开窗帘，帮你调空调的温度，让机器人扫地。但小雅音响的核心是以内容为出发，打通和优化用户体验。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>值得注意的是，喜马拉雅FM推出的这款人工智能音响并没有与之前合作过的科大讯飞联合推出，而是和小米音响一样使用了猎户星空提供的语义分析服务。对于这一点，李海波则表示，小雅拥有内容方面的优势。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>创业邦趋势学院院长张雷则从前沿科技媒体的角度提出了对人工智能未来发展的预期。站在第三波人工智能浪潮的基础上，张雷对整个行业的前沿发展趋势进行了总结。“人工智能发展有三大要素，一个是算法，一个是数据，还有一个是计算。”有了算法和数据，又能有一个稳定、高效满足海量数据吞吐的计算解决方案，人工智能的快速发展是必然的趋势。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>从文娱行业的角度来说，张雷认为未来将是多业态、多渠道共生的局面。对用户进行个性化的推荐建模，并为其推送个性化的精准IP将成为发展的趋势，多类型的定制化产品提供将成为主流。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>梨视频副总裁徐戌雄站在短视频平台的角度探讨了视频行业运营的思路：“短视频作为新兴的传递方式，其成功的一大关键在于能够提供适合现代用户的浏览节奏的内容。梨视频主打资讯短视频的概念，迅速得到了大量关注。”&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>徐戌雄从多个角度探讨了梨视频在短视频行业的整个布局策略，包括通过聚集个人拍客和机构拍客，全方位把握全球范围内的资讯热点，并确保视频质量；也包括应用人工智能技术，通过配置个性化推荐系统等功能，打造智能的用户理解和内容推送机制。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>达观数据COO冯佳妮以直播为切入点，分享了达观数据作为文本技术服务商，为文娱行业客户提供人工智能服务的实际案例。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>“通过接入人工智能服务，用户的内容点击率可以上升足足3倍，搜索无结果率下降可达90%，对用户体验和用户转化率都会有巨大提升。”冯佳妮介绍的实打实的案例和指标提升给大家带来非常直观的感受。从数据上可以明显地看到，个性化推荐对于文娱行业精准运营的提升效果是传统方法所完全无法比拟的。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>作为国内领先的人工智能企业，达观数据在文字自动化处理领域拥有深厚的技术积累，达观的个性化推荐、垂直搜索引擎以及文本挖掘等服务受到广大企业认可，在娱乐、传媒、电商、金融、科技等行业得到广泛应用。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>随着人工智能技术的快速发展，越来越多传统行业也开始享受到了人工智能带来的红利。在文化娱乐行业也是如此，只有不断升级技术，琢磨产品，才能跟得上时代发展的步伐。&lt;/span>&lt;/p></description></item><item><title>【分享】口才比文采重要，训练口才的16种绝技</title><link>https://pangyd.com/post/23-16/</link><pubDate>Sun, 30 Jul 2017 20:25:46 +0800</pubDate><guid>https://pangyd.com/post/23-16/</guid><description>&lt;p>&lt;b>&lt;i> 1、朗读朗诵。&lt;/i>&lt;/b>&lt;br>自己读书，大声地读出来。每天坚持朗读一些文章，既练习口齿清晰伶俐，又积累一些知识量信息量，更重要的是对身体大有裨益，清喉扩胸，纳天地之气，成浩然之身！大家多读一些积极向上的文章，特别是《世界上最伟大的推销员》，我们强烈建议大家能够读熟背透。每天坚持朗读半小时以上，坚持两年三年，你不是大师也成大师！&lt;br>&lt;p>镇。 &lt;/p>&lt;div>&lt;b>&lt;i> 2、对着镜子训练。&lt;/i>&lt;/b>&lt;br>&lt;p>建议你在自己的起居室中或是办公室某一墙面安装一大镜子，每天在朗读过程中，去对着镜子训练，训练自己的眼神，训练自己的表情，训练自己的肢体语言，这样效果更好。&lt;/p>&lt;div>&lt;b>&lt;i> 3、自我录音摄像。&lt;/i>&lt;/b>&lt;br>&lt;p>如果条件允许，我建议您每隔一周时间，把自己的声音和演讲过程拍摄下来，这样反复观摩，反复研究哪儿我卡壳了，哪儿手势没到位，哪儿表情不自然，天长日久，你的口才自然进步神速。看一次自己的摄像比上台十次二十次效果都好。&lt;/p>&lt;div>&lt;i> &lt;b>4、尝试躺下来朗读。&lt;/b>&lt;/i>&lt;br>&lt;p>如果你想练就一流的运气技巧，一流的共鸣技巧，我教你一个非常简单的方法，就是：躺下来大声读书！当我们躺下来时，必然就是腹式呼吸，而腹式呼吸是最好的练声练气方法。每天睡觉之前，躺在床上大声地朗读十分钟，每天醒来之前，先躺在床上唱一段歌，再起来。坚持一至两个月，你会觉得自己呼吸流畅了，声音洪亮了，音质动听了，更有穿透力了，更有磁性了！&lt;/p>&lt;div>&lt;b>&lt;i> 5、速读训练。&lt;/i>&lt;/b>&lt;br>这种训练目的，是在于锻炼人口齿伶俐，语音准确，吐字清晰。&lt;br>&lt;br>&lt;p>方法：找来一篇演讲辞或一篇文辞优美的散文。先拿来字典、词典把文章中不认识或弄不懂的字、词查出来，搞清楚，弄明白，然后开始朗读。一般开始朗读的时候速度较慢，逐次加快，一次比一次读得快，最后达到你所能达到的最快速度。读的过程中不要有停顿，发音要准确，吐字要清晰，要尽量达到发声完整。因为如果你不把每个字音都完整地发出来，那么，如果速度加快以后，就会让人听不清楚你在说些什么，快也就失去了快的意义。我们的快必须建立在吐字清楚、发音干净利落的基础上。我们都听过体育节目的解说专家宋世雄的解说，他的解说就很有“快”的功夫。宋世雄解说的“快”，是快而不乱，每个字，每个音都发得十分清楚、准确，没有含混不清的地方。我们希望达到的快也就是他的那种快，吐字清晰，发音准确，而不是为了快而快。&lt;/p>&lt;div>&lt;i>&lt;b> 6、即兴朗读。&lt;/b>&lt;/i>&lt;br>&lt;p>平时空闲时，你可以随便拿一张报纸，任意翻到一段，然后尽量一气呵成的读下去。而且，在朗读过程中，能够注意一下，上半句看稿子，下半句离开稿子看前面（假设前面有听众）。长期以往，你发现自己记忆力加强许多，快速理解力和即兴构思能力也在加强。&lt;/p>&lt;p>&lt;i>&lt;b>7、背诵法。&lt;/b>&lt;/i>&lt;/p>&lt;p>背诵，并不仅仅要求你把某篇演讲辞、散文背下来就算完成了任务，我们要求的背诵，一是要“背”，二还要求“诵”。这种训练的目的有两个：一是培养记忆能力，二是培养口头表达能力。尝试去背诵一些文章，一篇一篇地去完成。天长日久，那些文章字句自然就转化为自己的词语了，练到一定时间就能张口就来口出华章。所谓：熟读唐诗三百首，不会吟诗也会吟！&lt;/p>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;div>&lt;i>&lt;b>8、复述法&lt;/b>&lt;/i>。&lt;br>&lt;p>复述法简单地说，就是把别人的话重复地叙述一遍。可以找一位伙伴一起训练。首先，请对方随便讲一个话题，或是一个故事。自己先注意倾听。然后再向对方复述一遍。这种练习在于锻炼语言的连贯性及现场即兴构思能力，和语言组织能力。如果能面对众人复述就更好了，它还可以锻炼你的胆量，克服紧张心理。 &lt;/p>&lt;div>&lt;i>&lt;b> 9、模仿法。&lt;/b>&lt;/i>&lt;br>&lt;p>我们每个人从小就会模仿，模仿大人做事，模仿大人说话。其实模仿的过程也是一个学习的过程。我们小时候学说话是向爸爸、妈妈及周围的人学习，向周围的人模仿。那么我们练口才也可以利用模仿法，向这方面有专长的人模仿。这样天长日久，我们的口语表达能力就能得到提高。&lt;/p>&lt;div>&lt;i>&lt;b> 10、描述法。&lt;/b>&lt;/i>&lt;br>&lt;p>小的时候我们都学过看图说话，描述法就类似于这种看图说话，只是我们要看的不仅仅是书本上的图，还有生活中的一些景、事、物、人，而且要求也比看图说话高一些。简单地说，描述法也就是把你看到的景、事、物、人用描述性的语言表达出来。描述法可以说是比以上的几种训练法更进一步。这里没有现成的演讲辞、散文、诗歌等做你的练习材料，而要求你自己去组织语言进行描述。所以描述法训练的主要目的就在于训练同学们的语言组织能力和语言的条理性。在描述时，要能够抓住特点进行描述。语言要清楚，明白，要有一定的文采。一定要用描述性的语言，尽量生动些，活泼些。这可以训练我们积累优美词语的应用能力。&lt;/p>&lt;p>&lt;b>&lt;i>11、角色扮演法。&lt;/i>&lt;/b>&lt;/p>&lt;p>在我们的培训过程中，经常让学员进行角色扮演，组织角色语言去演讲，叫“情境模拟训练法”，比如扮演律师，扮演市长答记者问，扮演领导开动员会，扮演新郎新娘即兴发言等等，还可以选择小品中的角色扮演，直接让学员去演小品，去扮演作品中出现的不同的人物，当然这个扮演主要是在语言上的扮演。这种训练的目的，在于培养人的语言的适应性、个性，以及适当的表情、动作。&lt;/p>&lt;div>&lt;b>&lt;i> 12、讲故事法。&lt;/i>&lt;/b>&lt;br>&lt;p>我们的口才培训，要求学员能够讲100个以上的故事，不同时候要能够讲不同的故事，而且现场就能想出符合场合的故事。这就要求我们积累大量的素材。同时还要讲得动听，讲得精彩，熟能生巧，讲多了口才就来了！&lt;/p>&lt;div>&lt;b>&lt;i> 13、积累知识，多翻翻字典、成语词典。&lt;/i>&lt;/b>&lt;br>建议各位办公桌上和家里都放一本《新华字典》和《现代汉语成语词典》，有空就翻翻，不认识的字多看看，认识的字也再看细些，你会发现中国的文字博大精深，坚持下去，你的词汇量会越来越多，你的口才自然越来越棒！&lt;br>&lt;/div>&lt;/div>&lt;div> &lt;b>&lt;i>14、对口才产生兴趣。&lt;/i>&lt;/b>&lt;br>&lt;p>兴趣是最好的老师。当你的焦点在口才训练上时，你必然就会关注平时生活工作中的口才技巧。兴趣在哪里，焦点到哪里；焦点到哪里，学问到哪里！这种方法进步更快。即使看电视，也在注意台词的优美，交际的仪态，幽默的笑眼，必然进步神快！&lt;/p>&lt;p>&lt;b>&lt;i>15、写日记。&lt;/i>&lt;/b>&lt;/p>&lt;p>写日记是最好的自我沟通的方法，每天写上一千来字，既整理自己的思路，反省当日之进步与不足，梳理自己的情绪，释放一些不快，又可以学会遣词造句，天长日久，手能写之，口必能言之。&lt;/p>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;div>&lt;i>&lt;b> 16、多找机会上台。&lt;/b>&lt;/i>&lt;br>很多同学认为生活中缺少锻炼的舞台，没有公众场合发言的机会。其实，这是一种误区，我们平时生活工作中，公众演讲的机会太多了，只是我们没有发现，没有这个意识去参与。&lt;br>&lt;br>&lt;p>如果你想突破口才瓶颈，你一定要多找机会讲话。每次开会，必定坐第一排，必定要举手发表一下自己的观点；有机会就给自己的员工、小组成员开开会；有机会还可以开开家庭会议，把家庭打造在学习口才的舞台；现在每逢节假日，路演比较流行，那一有机会你就上台去参与，不要管那么多，你只是在锻炼自己而已！放下自己，放下一切时，你发现学习口才就这么简单！&lt;/p>&lt;div>&lt;p style="text-align: center">&lt;b> 学习口才最“吊诡”的地方在于：很多人知道、明白、了解、懂得，但是仍然开不了口，无法去表达！&lt;br>&lt;p style="text-align: center">&lt;b>——因为，“知识”不等于能力！能力，一定是训练出来的！&lt;/b>&lt;/p>&lt;p style="text-align: center">&lt;b>&lt;img src="https://pangyd.com/uploads/2017/07/e107e0c578f56a27.jpeg" alt="1501417580706.jpeg">&lt;/b>&lt;/p>&lt;/b>&lt;/p>&lt;/div>&lt;/div>&lt;/p></description></item><item><title>转载自【Yidu】《如何搭建一个茉莉机器人》</title><link>https://pangyd.com/post/22-yidu/</link><pubDate>Sun, 30 Jul 2017 20:19:39 +0800</pubDate><guid>https://pangyd.com/post/22-yidu/</guid><description>&lt;div>&lt;p>&lt;img src="https://pangyd.com/uploads/2017/07/870b74962f409833.jpeg" alt="1501417331353.jpeg">&lt;br>&lt;/p>&lt;p>源码简介:茉莉QQ机器人采用Smart&amp;nbsp;QQ接口，程序由PHP+MySQL开发，机器人在运行期间可以累积在线天数哦，但是您不能在机器人运行期间用电脑登录QQ，不然会把机器人挤下线，但是手机QQ可以登录，互不干扰。&lt;/p>&lt;br>好了话不多说，我们开始吧&lt;br>&lt;br>首先呢你要有空间，随便找个空间&lt;br>建议用这个空间&lt;a target="_self" href="https://yidc.vu4.pw/ ">https://yidc.vu4.pw/&amp;nbsp;&lt;/a>，注册送一块钱，然后往下滑有个一元主机，用那个就行&lt;br>然后下载茉莉机器人的源码，源码下载地址:&lt;a target="_self" href="https://pan.baidu.com/s/1eS3VlCI">https://pan.baidu.com/s/1eS3VlCI&lt;/a>&lt;br>&lt;br>教程开始:首先在我给你的那个网站开空间，ftp账号密码必须都记住，最好弄一样的，后面方便操作！&lt;br>&lt;br>开好空间以后点击管理，然后有个面板控制，点进去&lt;br>然后上边有个在线文件，把我给你的源码上传&lt;br>&lt;br>上传完成之后解压到web的文件夹，密码不用填&lt;br>&lt;br>那个控制面板有个域名绑定&lt;br>&lt;br>然后点进去域名，按照步骤安装，数据库的账号用户名密码就是刚才的ftp账号密码。&lt;br>&lt;br>之后一个你自己的机器人网站就搭建好&lt;br>&lt;br>&lt;img src="https://pangyd.com/uploads/2017/07/3566cd8e25e67f7b.jpeg" alt="1501417332673.jpeg">&lt;br>&lt;/div></description></item><item><title>清除QQ资料教程</title><link>https://pangyd.com/post/14-qq/</link><pubDate>Mon, 24 Jul 2017 17:36:30 +0800</pubDate><guid>https://pangyd.com/post/14-qq/</guid><description>&lt;p style="text-align: center">&lt;/p>&lt;p>今天看到名片不够简洁强迫症作祟，上网查了下教程没有一个能行，然后又想到很久很久以前老年机可以改性别啥的，回到家找到了老年机却坏了，最后我想到用java模拟器能模拟老版机，废话不多说让我们进入正题&lt;/p>&lt;p>需要材料:联网电脑一台(安卓4.4-5.0的可以去网上下载安卓版java模拟器用我这个qq.jar也是能使用的)&lt;/p>&lt;div>&lt;br>&lt;/div>1.下载所需文件mnq.zip到电脑桌面&lt;br>2.解压mnq.zip 里面有个java.zip(java模拟器)和qq.jar。&lt;br>3.打开java.zip解压出的文件夹，找到KEmulator.exe&lt;br>4.打开KEmulator.exe&lt;br>5.点软件菜单栏的那个文件-载入jar&lt;br>6.在搜索栏输入桌面，然后下拉找到解压出来的qq.jar并打开&lt;br>7.童年回忆出现了，[这里全程用模拟键盘操作哦]第一次进来要设置qq号和密码，点软件菜单栏&amp;nbsp;视图-模拟键盘&lt;br>8.输入好qq密码即可登录&lt;br>9.菜单-我的资料-个人资料&lt;br>10.往下翻，找到年龄，出生日期那些东西，全部选-即可，点击修改，提示修改成功&lt;br>&lt;p>11.打开qq查看资料，可以看到资料啥都没了，是不是很棒棒啊&lt;img src="https://pangyd.com/uploads/2017/07/7057549439f9fb6f.gif" alt="[耶]">&lt;/p>&lt;p>&lt;/p>&lt;p style="text-align: center">&lt;img src="https://pangyd.com/uploads/2017/07/e3d0f352de14b86f.png" alt="捕获.PNG">&lt;br>&lt;/p>&lt;br>&lt;p style="text-align: center">分割线&lt;/p>&lt;p style="text-align: center">----------------------------------------------------------------------------————————————————————————————————————————————————————————————————————————————————————————————&lt;/p>&lt;p style="text-align: center">下载资料：&lt;a target="_self" href="https://pangyd.com/index/download/show/id/7.html">点击下载&lt;/a>&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;/p></description></item><item><title>什么叫真正的用户体验</title><link>https://pangyd.com/post/12/</link><pubDate>Sun, 02 Apr 2017 16:22:25 +0800</pubDate><guid>https://pangyd.com/post/12/</guid><description>&lt;p style="text-align: center">&lt;img src="https://pangyd.com/uploads/2017/06/0bcd4237e4bca96c.jpg" alt="f3bb78a307a3ca077ebd0da63816d57d.jpg">&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>什么叫真正的用户体验？很多人把这个词挂在嘴边，却鲜有人真正研究过。对于我们的用户，扪心自问，我们是否真正地站在用户的角度思考过?&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>我们认真思考过用户从接到包裹到使用产品中的每一个环节都会做什么吗？用户的需求是什么？除了满足用户的需求之外还能为用户提供什么？下面来告诉大家什么是真正的用户体验。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>用户体验是一种纯主观的感受，是在用户接触产品或服务的整个过程中形成的综合体验。好的用户体验一定要注重细节，并且贯穿于每一个细节，这种细节一定要一让用户能够感知到，并且这种感知要超出用户的预期，给用户带来惊喜。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>举个简单的例子，我们平时在上网的时候，无论是看微博、刷论坛还是购物等，总免不了来回翻页。于是有人就设计了一种全新的浏览方式—“瀑布流”，网页的页面会随着用户的下拉不断地刷新出新的内容，这样一来，用户就无须频繁地翻页，紧紧滑动鼠标的滚轮就可以不断看到新的内容，这便是网页制作者在用户体验方面的改进，给使用者的感觉就很方便、很舒服。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>所以当打开一个网站时，用户体验度时非常重要的，它直接决定着用户在网站停留时间的长短，停留时间越长，产生交易的可能性就越大。提醒大家在建设网站时，一定要站在用户的角度去做好每一步，做到真正替用户思考！&lt;/p></description></item><item><title>本站上线啦(二)</title><link>https://pangyd.com/post/2/</link><pubDate>Sat, 31 Dec 2016 10:43:38 +0800</pubDate><guid>https://pangyd.com/post/2/</guid><description>&lt;p>看到这个标题有人就说了，你一个小博客，上线就上线了，还“本站上线啦(二)”。在这里我想解释一下，由于内心的极度迫不及待，急于让博客上线，上一篇“本站上线了！”其实没有写完，只写了一部分，还有很多东西没有分享出来。&lt;/p>
&lt;p>其实现在上线的博客并不是我心里想的博客上线之后的样子，当前的博客功能还有很多地方不完善，大多都是功能上的，后台的居多，前台主要是一些细节和用户体验上的不足。比如分页，要做到无限加载，现在只做到了普通分页。&lt;/p>
&lt;p>在本站的首页会看到三个块儿，其中一个是“工匠精神”，精益求精，注重细节，追求完美和极致，不惜花费时间精力，孜孜不倦，反复改进产品，把 99% 提高到 99.99%。&lt;/p>
&lt;p>其实每个人都有一颗追求完美的心，只是追求的程度不同，所以达到的结果也大不相同。但是，每个人对自己的产品或者自己用的产品，肯定会无比的上心。就好比女人出门化妆一样，不能有一点瑕疵。&lt;/p>
&lt;p>搭建博客之初我满怀工匠精神准备将本站做到自己满意才会上线的，可是后来我发现，做到自己满意很难。一个功能或者一个页面在没有做出来之前，你在心里会给自己画个杠杠，想着做成什么什么样就满意了，当这个功能真做出来，你又会发现新的不满意的地方。&lt;/p>
&lt;p>其实追求完美也是需要过程的，万事从无到有，从小到大，从粗糙简陋到极致完美，都需要经历或长或短的过程。庞大如 BAT，他们的系统也是一步步升级迭代出来的，并不是开发出来就是现在这个样子，而是经过无数用户反馈、无数次迭代才成型的。&lt;/p>
&lt;p>经过这些思考，我决定，博客完成基本功能就上线。之后的小细节、新功能都一步步地改善，迭代升级。所以，大家就看到博客现在的样子。&lt;/p>
&lt;p>当然了，博客最主要的还是内容。没有内容做为支撑，再好的用户体验也没用。所以，之后我会发布自己遇到的各种坑，以及爬坑过程，以及好的东西、我认为有用的东西，给大家分享。多多指教！！！&lt;/p></description></item><item><title>本站上线了！</title><link>https://pangyd.com/post/1/</link><pubDate>Thu, 29 Dec 2016 13:49:08 +0800</pubDate><guid>https://pangyd.com/post/1/</guid><description>&lt;p>今年(2016年)年初就打算做一个个人博客了，在年初时候想着才年初，今年还有很长时间，所以就没有着急，一直拖着，这一拖就是半年。&lt;/p>
&lt;p>在五六月分的时候，想着这都半年过去了，博客的事情该提上日程了。于是，我查了想要的域名，看了看服务器，发现阿里云的服务器还是挺贵的。然后说，先做程序(PHP程序猿一只，打算自己开发 CMS)，想着做程序还是要花不少时间的，就这样又拖了两三个月。&lt;/p>
&lt;p>直到九月份中下旬的时候，突然觉得，这再不开工就没时间了呀，因为白天要上班，只能晚上和周末时候有时间来做这个。终于在那一天，就是那一天，我上午选了域名，下午就买了服务器。&lt;/p>
&lt;p>买了域名服务器，域名备案，之后我几乎每天晚上加班两小时攻城(写程序)。到现在，终于告一段落了。&lt;/p>
&lt;p>有时候，做一件事情最开始时候就不能拖延，开始拖延，后面就更拖延，到最后不能在计划的时间内完成。&lt;/p>
&lt;p>总之，不管经历了什么，遇到了什么问题，现在，&lt;strong>本站上线了&lt;/strong>。在开发过程中也遇到了之前没想到的各种小问题，不能说历经磨难，也算小有坎坷。至于开发过程用遇到的各种问题，在之后的文章里再做分享。之后本站的 CMS 也会做分享，希望各位大神多多指教！&lt;/p></description></item></channel></rss>