<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>HTTP on 庞玉栋个人博客</title><link>https://pangyd.com/tags/http/</link><description>Recent content in HTTP on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 11 Dec 2019 10:20:27 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/http/index.xml" rel="self" type="application/rss+xml"/><item><title>Java两种方法实现简单爬虫</title><link>https://pangyd.com/post/229-java/</link><pubDate>Thu, 28 Nov 2019 16:21:04 +0800</pubDate><guid>https://pangyd.com/post/229-java/</guid><description>&lt;p>第一种：利用HttpClient和Jsoup爬取网站数据&lt;/p>&lt;p>&lt;/p>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package com.company;
&lt;p>import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;&lt;/p>
&lt;p>public class Main {&lt;/p>
&lt;pre>&lt;code>public static void main (String[] args) throws Exception {
 // 创建默认的客户端实例
 CloseableHttpClient httpClient = HttpClients.createDefault();

 // 创建get请求实例
 HttpGet httpget = new HttpGet(&amp;quot;/&amp;quot;);

 System.out.println(&amp;quot;executing request &amp;quot; + httpget.getURI());
 String content = &amp;quot;&amp;quot;;

 try {
 // 客户端执行get请求返回响应
 CloseableHttpResponse response = httpClient.execute(httpget);

 // 服务器响应状态行
 System.out.println(response.getStatusLine().toString());

 Header[] heads = response.getAllHeaders();
 HttpEntity entity = response.getEntity();

 if (entity != null) {
 content += EntityUtils.toString(entity, &amp;quot;utf-8&amp;quot;);
 EntityUtils.consume(entity);// 关闭内容流
 }

 System.out.println(content);
 System.out.println(response.getHeaders(&amp;quot;Content-Type&amp;quot;));
 // 打印所有响应头

 for(Header h:heads){
 System.out.println(h.getName()+&amp;quot;:&amp;quot;+h.getValue());
 }
 } finally {
 httpClient.close();
 }
}
&lt;/code>&lt;/pre>
&lt;p>}&lt;/p></description></item><item><title>人生苦短,我用python “Life is short. You need Python.”</title><link>https://pangyd.com/post/207-python-life-is-short-you-need-python/</link><pubDate>Fri, 09 Nov 2018 08:22:51 +0800</pubDate><guid>https://pangyd.com/post/207-python-life-is-short-you-need-python/</guid><description>&lt;p>&lt;img src="https://pangyd.com/uploads/2018/09/f0c1d12340235ebb.jpg" alt="index.jpg">&lt;/p>&lt;p>&lt;span>&lt;span>Python 在约 40 年前出现，现在已经有数以千计基于这项技术的网站和软件项目。Python 因其独有的特点从众多开发语言中脱颖而出，深受世界各地的开发者喜爱。&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>正文共：4565 字&amp;nbsp;&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;span>预计阅读时间：12 分钟&lt;/span>&lt;/p>&lt;p>人生苦短， 我用 Python ，不知道从什么时候开始，这句话开始流行。&lt;/p>&lt;p>&lt;img 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" alt="640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1" border="0">&lt;/p>&lt;p>人们可能会说， 2017 年是 Python 辉煌的一年。毕竟在这一年中，Python 的增长速度令人惊艳。&lt;/p>&lt;p>&lt;img 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" alt="640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1" border="0">&lt;/p>&lt;p style="text-align: center">&lt;span>主要编程语言的增长趋势，图片来自 Stack Overflow&lt;/span>&lt;/p>&lt;p>在GitHub 2017年度报告中，Python 超越 Java 成第二受欢迎语言。在 ranked.com 的排名中，Python 是 2017 年最受欢迎人工智能编程语言（第二是 C++，R 并未上榜）。&lt;/p>&lt;p>根据 Stack Overflow 流量统计，2017 年 6 月，Python 第一次成为高收入国家 Stack Overflow 访问量最大的标签。&lt;/p>&lt;p>&lt;img class="img_loading" 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" alt="640?wx_fmt=jpeg" border="0">&lt;/p>&lt;p>在 TIOBE 2018 年 4 月编程语言排行榜前 20 名中，Python 已跃居到第四位，前三分别为为 Java ，C、C++。&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>如何从命令提示符运行Java程序</title><link>https://pangyd.com/post/193-java/</link><pubDate>Sat, 28 Jul 2018 13:51:21 +0800</pubDate><guid>https://pangyd.com/post/193-java/</guid><description>&lt;div class="left" data-reactid=".0.1.0">&lt;div data-reactid=".0.1.0.0">&lt;div class="post" data-reactid=".0.1.0.0.0">&lt;div class="post-main clearfix" data-reactid=".0.1.0.0.0.1">&lt;div class="content-wrapper" id="post_content_wrapper" data-reactid=".0.1.0.0.0.1.1">&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>Java是最常用的编程语言之一。 它也是一个IDE密集型编程语言，与Eclipse紧密集成。 如果您刚开始学习Java，下面是帮助您从命令提示符开始运行Java应用程序（在Windows中）的基本指南。&lt;/p>&lt;p>&lt;span>安装Java开发工具包（JDK）&lt;/span>&lt;/p>&lt;p>在您的计算机上运行Java程序之前，您需要安装一个Java编译器。它附带了Java开发工具包或JDK。它是Java在任何平台上开发的基本工具。JDK与Java运行时环境(或JRE)不一样，如果您在您的机器上使用过Java应用程序，您已经安装了它。&lt;/p>&lt;p>1．从Oracle的网站上下载JDK。确保不要下载到服务器版本的JRE。&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．确保您获取了开发工具包的Windows版本。&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>3.正常运行安装程序。&lt;/p>&lt;p>&lt;span>从命令提示符运行Java程序&lt;/span>&lt;/p>&lt;p>1.使用记事本或其他文本编辑器创建一个如下所示的简单Java程序。 请确保以扩展名“.java”而不是“.txt”保存文件。&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.从开始菜单打开命令提示符。 您也可以按Win R，然后在运行字段中输入cmd.exe。&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>3.使用cd命令将工作目录更改为包含Java程序的目录。 我保存在我的“脚本”文件夹中，但是您可以将您的文件保存在系统中的任何位置。&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．在您的计算机上定位到Java开发工具包(JDK)版本的路径。如果你运行64位Windows，那通常是在“C：\ Program Files \ Java”中。&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>5.使用“set”命令设置JDK的路径，如下所示：&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>您可能需要更改目录路径以反映当前版本的Java。确保您使用的是Java开发工具包(JDK)目录，并指向“bin”文件夹。Java运行时环境(JRE)文件夹也包含一个“bin”文件夹，但不包含Java编译器。如果在编译过程中出现错误，请确保使用正确的目录路径。&lt;/p>&lt;p>6.使用javac命令编译Java程序，如下所示：&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>7.你应该看到什么都没有发生。 但是，如果您使用dir命令，则会在您的目录中以“.class”扩展名结尾注意到一个新文件。 这表示程序已经编译完成。&lt;/p></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学习笔记--SSH框架整合(struts2、spring4、hibernate5)</title><link>https://pangyd.com/post/175-java-ssh-struts2spring4hibernate5/</link><pubDate>Sun, 19 Nov 2017 19:53:27 +0800</pubDate><guid>https://pangyd.com/post/175-java-ssh-struts2spring4hibernate5/</guid><description>&lt;p style="text-align: center">&lt;span>&lt;span>&lt;strong>一、SSH三大框架的概述&lt;/strong>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>　&lt;/span>&lt;span>　&lt;/span>&lt;span>&lt;span>ssh为 struts+spring+hibernate的一个&lt;span>&lt;span>集成框架&lt;/span>&lt;/span>，是目前较流行的一种Web应用程序开源框架。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>　 &amp;nbsp;集成SSH框架的系统从职责上分为四层：&lt;span>&lt;span>&lt;span>表示层&lt;/span>&lt;/span>、&lt;span>&lt;span>业务逻辑层&lt;/span>&lt;/span>、&lt;span>数据持久层&lt;/span>和&lt;span>域模块层（实体层）&lt;/span>&lt;/span>，以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>&lt;span>struts2：&lt;/span>&lt;/span>　　&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>　　　&lt;span>　&lt;span>1、什么是struts2：&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>　　　　　　&lt;span>Struts2是一个基于MVC设计模式的Web应用框架，它本质上相当于一个servlet，在MVC设计模式中，Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品，是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心，采用拦截器的机制来处理用户的请求，这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开，所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化，但是相对于WebWork，Struts 2的变化很小。&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>　　　　&lt;span>2、struts2框架的运行结构：&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>&lt;span>&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&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" alt="">&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;p>&lt;span>&lt;span>　　　　&lt;span>解析：&lt;/span>&lt;/span>&lt;/span>&lt;span>客户端发送请求(HttpServletRequest)到服务器，服务器接收到请求就先进入web.xml配置文件看看有没有配置过滤器，发现有struts2的过滤器，然后就找到struts.xml配置文件，struts.xml配置文件里有定义一个action，然后就去找到类名叫IndexAction这个类(此action类必须是继承ActionSupport接口)，并且实现了execute()方法，返回一个字符串为"success"给struts.xml配置文件，struts.xml配置文件的action会默认调用IndexAction类的execute()方法，result接收到了返回的字符串，然后查找结果字符串对应的(Result），result就会调用你指定的jsp页面将结果呈现，最后响应回给客户端。&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;span>　&lt;span>spring：&lt;/span>&lt;/span>&lt;/span>&lt;/span>&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;span>1、什么是spring?&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>&lt;span>&lt;span>　　　　　&lt;span>　Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;span>&lt;span>&lt;span>&lt;span>&lt;span>&lt;span>&lt;span>　&lt;/span>　　　　　　&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;div class="para">　　　　　　　　&lt;span>&lt;span>轻量&lt;/span>——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外，Spring是非侵入式的：典型地，Spring应用中的对象不依赖于Spring的特定类。&lt;/span>&amp;nbsp;&lt;/div>&lt;div class="para">&lt;span>　　　　　　　　&lt;span>控制反转&lt;/span>——Spring通过一种称作控制反转（IoC）的技术促进了松耦合。当应用了IoC，一个对象依赖的其它对象会通过被动的方式传递进来，而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖，而是容器在对象初始化时不等对象请求就主动将依赖传递给它。&lt;/span>&lt;/div>&lt;div class="para">&lt;span>　　　　　　　&lt;span>&lt;span>　面向切面&lt;/span>&lt;/span>——Spring提供了&lt;span>面向切面编程&lt;/span>的丰富支持，允许通过分离应用的业务逻辑与系统级服务（例如审计（auditing）和事务（transaction）管理）进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责（甚至是意识）其它的系统级关注点，例如日志或事务支持。&lt;/span>&lt;/div>&lt;div class="para">&lt;span>　　　　　　　　&lt;span>容器&lt;/span>——Spring包含并管理应用对象的配置和生命周期，在这个意义上它是一种容器，你可以配置你的每个bean如何被创建——基于一个可配置原型（prototype），你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而，Spring不应该被混同于传统的重量级的EJB容器，它们经常是庞大与笨重的，难以使用。&lt;/span>&lt;/div>&lt;div class="para">&lt;span>　　　　　　　　&lt;span>框架&lt;/span>——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中，应用对象被声明式地组合，典型地是在一个XML文件里。Spring也提供了很多基础功能（事务管理、持久化框架集成等等），将应用逻辑的开发留给了你。&lt;/span>&lt;/div>&lt;p>&amp;nbsp;&lt;/p>&lt;p>&lt;span>&lt;span>　　&lt;span>　　2、spring的流程图：&lt;/span>&lt;/span>&lt;/span>&lt;span>&lt;span>　&lt;/span>　&lt;/span>&lt;span>&lt;span>　　&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&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" alt="">&lt;/span>&lt;/span>&lt;/p>&lt;p>　　　&lt;span>　解析：&lt;/span>&lt;span>&lt;span>上图是在struts结构图的基础上加入了spring流程图，在web.xml配置文件中加入了spring的监听器，在struts.xml配置文件中添加“&lt;/span>&lt;span>&amp;lt;constant name="struts.objectFactory" value="spring" /&amp;gt;&lt;/span>&lt;span>”是告知Struts2运行时使用Spring来创建对象，spring在其中主要做的就是注入实例，将所有需要类的实例都由spring管理。&lt;/span>&lt;/span>&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;p>&lt;span>　　&lt;span>&lt;span>hibernate：&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>　　　&lt;/span>&lt;span>1、什么是hibernate？&lt;/span>&lt;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;span>&lt;span>　　　&lt;/span>&lt;span>　Hibernate是一个开放源代码的对象关系映射框架，它对JDBC进行了非常轻量级的对象封装，它将POJO与数据库表建立映射关系，是一个全自动的orm框架，hibernate可以自动生成SQL语句，自动执行，使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合，既可以在Java的客户端程序使用，也可以在Servlet/JSP的Web应用中使用，最具革命意义的是，Hibernate可以在应用EJB的J2EE架构中取代CMP，完成数据持久化的重任。&lt;/span>&lt;/span>&lt;/span>&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/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>15张脑图看懂 Python 编程核心知识体系</title><link>https://pangyd.com/post/154-15-python/</link><pubDate>Sat, 04 Nov 2017 22:27:14 +0800</pubDate><guid>https://pangyd.com/post/154-15-python/</guid><description>&lt;p>首先，按顺序依次展示了以下内容的一系列思维导图：基础知识，数据类型（数字，字符串，列表，元组，字典，集合），条件&amp;amp;循环，文件对象，错误&amp;amp;异常，函数，模块，面向对象编程；&lt;/p>&lt;p>接着，结合这些思维导图主要参考的资料，分享一下我的学习体验，一方面可供初学者参考，另一方面，也便于大家结合思维导图深入学习、理解、思考；&lt;/p>&lt;p>最后，提供几篇文章链接，方便希望从 Python 2.x 迁移到 3.x 的朋友理解。&lt;/p>&lt;p>编程是这样一件美妙的事情，如果你没有开始，你不知道会错过一种多么棒的体验。Just try it~和大家共勉！&lt;/p>&lt;p>注意事项：&lt;/p>&lt;p>思维导图：&lt;/p>&lt;p>默认阅读顺序：从右左，顺时针方向。&lt;/p>&lt;p>思维导图软件：XMind&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" data-size="1000|896">&lt;/p>&lt;p>14 张思维导图基础知识&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" data-size="1000|603">&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" data-size="1000|695">&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" data-size="640|421">&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" data-size="640|856">&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" data-size="1000|734">&lt;/p>&lt;p>列表 &amp;amp; 元组&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" data-size="640|286">&lt;/p>&lt;p>字典 &amp;amp; 集合&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" data-size="640|376">&lt;/p>&lt;p>条件 &amp;amp; 循环&lt;/p></description></item><item><title>java多线程高级教程，这些你都懂了吗？</title><link>https://pangyd.com/post/153-java/</link><pubDate>Thu, 02 Nov 2017 23:21:04 +0800</pubDate><guid>https://pangyd.com/post/153-java/</guid><description>&lt;p>一、countdownLatch和cyclicbarrier（这两个做多线程控制很好用，工作中会经常用到）&lt;/p>&lt;p>countdownLatch：主线程阻塞，当多个线程countdown到0，主线程执行；&lt;/p>&lt;p>cyclicbarrier：多个线程等待，当都处于等待状态了一起执行（类似于赛跑机制）&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" img_width="641" img_height="517" alt="java多线程高级教程，这些你都懂了吗？" inline="0">&lt;/p>&lt;p class="pgc-img-caption" style="text-align: center">countdownLatch&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" img_width="677" img_height="385" alt="java多线程高级教程，这些你都懂了吗？" inline="0">&lt;/p>&lt;p class="pgc-img-caption" style="text-align: center">cyclicbarrier&lt;br>&lt;/p>&lt;p>二、volatile和threadlocal&lt;/p>&lt;p>这两个也要很好掌握，不仅常用，而且面试时候也经常问到！&lt;/p>&lt;p>volatile:使属性可见性。有个属性是共享属性，这个关键字会在每个线程内开一块内存，每次子线程都会从主线程拿最新的属性放到内存中。但是有个问题，他只是拿最新的，比如：计数器，每个线程都执行+1操作。一个线程+1，另外两个同时读取这个属性，那么不会加2次，而是只加一次，这就是valatile不能保证原子性的原因。&lt;/p>&lt;p>threadlocal：用于做方法外的全局属性。这个跟volatile刚好相反，使全局变量独立，每个线程里都有一份独立副本。&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" img_width="770" img_height="261" alt="java多线程高级教程，这些你都懂了吗？" inline="0">&lt;/p>&lt;p>这是hibernate的源码，如果当前线程没有session就openSession放到ThreadLocalMap中，每个线程的session都是独立的不会相互受影响。&lt;/p>&lt;p>三、AtomicInteger：支持原子性计数器。&lt;/p>&lt;p>之前说volatile不能作为计数器，那么多线程计数器要用atomic类的AtomicInteger&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" img_width="977" img_height="576" alt="java多线程高级教程，这些你都懂了吗？" inline="0">&lt;/p>&lt;p>四、并发类容器&lt;br>&lt;/p>&lt;p>ConCurrentHashMap、CopyAndWriteArrayList、CopyAndWriteArraySet。&lt;/p>&lt;p>ConCurrentHashMap（底层分成16个hashtable来保证并发）读支持高并发读，写和删除时候只支持16个线程，所以一般也要上锁； copyandwrite支持高并发读，写的话要加锁（原理是，写的时候赋值一个容器，写好了把指针指向新容器并且删除原容器）&lt;/p>&lt;p>map、list、set都有并发类容器。面试时候经常会问hashmap和ConCurrentHashMap区别。这个demo我就不写了，用法和我们平时用的集合都一样，只是他们不会造成线程不安全。&lt;/p>&lt;p>五、并发类队列&lt;/p>&lt;p>阻塞的意思是，当达到队列最大容量或者为空，线程还往里加东西或取东西会被阻塞；有界意思，可以设置队列大小。&lt;/p>&lt;p>（非阻塞队列）ConcurrentLinkedQueue无阻塞无界限队列（高并发性能最好，peek取出不删除，poll取出删除），&lt;/p>&lt;p>（阻塞队列）ArrayBlockingQueue阻塞有界队列，LinkBlockingQueue阻塞无界队列（生产者消费者首选，take方法会阻塞，poll方法没有就返回null）。&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" img_width="966" img_height="741" alt="java多线程高级教程，这些你都懂了吗？" inline="0">&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" img_width="812" img_height="153" alt="java多线程高级教程，这些你都懂了吗？" inline="0">&lt;/p>&lt;p>也就是说线程池也是用并发队列作为线程的容器。我们自定义时候也只需要重现实例化ThreadPoolExcutor，设置我们自己需要的参数即可。&lt;br>&lt;/p>&lt;p>六、分布式锁&lt;br>&lt;/p>&lt;p>这个其实已经不属于java代码范畴，但是我上一篇讲基础的时候，一些兄弟说我说的太简单，另一些又说太难，所以我加了一个分布式锁，希望能满足更多人需求。&lt;/p>&lt;p>分布式锁，主要用在分布式集群上，既然是分布式，那就有多个jvm，即使你代码写出花来也不能控制。所以只有一个办法就是借助第三方工具。比如memcache、redis、zk&lt;/p>&lt;p>1. 首先明确一点，有人可能会问是否可以考虑采用ReentrantLock来实现，但是实际上去实现的时候是有问题的，ReentrantLock的lock和unlock要求必须是在同一线程进行，而分布式应用中，lock和unlock是两次不相关的请求，因此肯定不是同一线程，因此导致无法使用ReentrantLock。&lt;/p>&lt;p>2. 基于数据库表做乐观锁，用于分布式锁。&lt;/p>&lt;p>3. 使用memcached的add()方法，用于分布式锁。&lt;/p></description></item><item><title>Java数据结构与算法</title><link>https://pangyd.com/post/151-java/</link><pubDate>Tue, 31 Oct 2017 18:25:34 +0800</pubDate><guid>https://pangyd.com/post/151-java/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;div class="userinfo" data-reactid=".1jh8s1a0g74.1.0.0.0.1.1.0">&lt;span class="username" data-reactid=".1jh8s1a0g74.1.0.0.0.1.1.0.0">Cany&lt;/span>&lt;span class="male" data-reactid=".1jh8s1a0g74.1.0.0.0.1.1.0.1">&lt;/span>&lt;span data-reactid=".1jh8s1a0g74.1.0.0.0.1.1.0.2">&lt;span class="honour admin" data-reactid=".1jh8s1a0g74.1.0.0.0.1.1.0.2.$admin">大酋长&lt;/span>&lt;/span>&lt;/div>&lt;div class="content rich" data-reactid=".1jh8s1a0g74.1.0.0.0.1.1.1">&lt;p>&lt;span>刚学习数据结构与算法时，就被告知&lt;span>&amp;nbsp;“程序=算法+数据结构”&lt;/span>，而这段话来自于对点计算机科学家Niklaus Wirth在1976年出版的一本书的书名，后来这句话也成为计算机工作者之间流传的一句名言，小编也用惨痛的经历告诉大家这也是一个很重要的知识点。&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&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/10/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="1.0909090909090908" data-w="110" 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;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>首先来说说什么是数据结构，直接上图&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&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/10/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="0.59613196814562" data-w="879" 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>&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;/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;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/10/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="0.8" data-w="1280" width="328px" 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程序员面试失败的5大原因</title><link>https://pangyd.com/post/147-java5/</link><pubDate>Fri, 27 Oct 2017 19:31:56 +0800</pubDate><guid>https://pangyd.com/post/147-java5/</guid><description>&lt;p style="text-align: center">&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="0.6118721461187214" data-w="438" 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;h2>&lt;span>&lt;span>&lt;span>＃1 说得太少&lt;/span>&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>所以，仅仅只用两三句话来回答不但不能显示出你对这个专业的兴趣，还会让整个面试过程显得非常无聊。如果你不能很好地说明你的经验、成就和技能可以给企业带来的价值，那么你的竞争力毫无疑问就高不起来。所以，你需要对一些最常见的开放式问答作充分的准备，学会推销自己。&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;br>&lt;img class="" data-ratio="1.443298969072165" data-s="300,640" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-type="jpeg" data-w="194" 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>&lt;h2>&lt;span>&lt;span>＃2 说得太多&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>解释也是一门艺术，关键是确定重点，如果需要的话再深入到细节。当聊到业务的时候，就应该从业务的角度看问题，不要涉及任何技术术语。学会用简洁明了的方式解释问题。如果你能时刻把握主旨，那么这一点也不是问题。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="0.583864118895966" data-w="471" 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;/p>&lt;h2>&lt;span>&lt;span>＃3回答不出一些必知的基本技术问题&lt;/span>&lt;/span>&lt;/h2>&lt;p>&lt;span>面试不是技术竞赛，不是看谁答对的问题多，但是有一些“必须知道”的核心Java和Web基础知识，你不能不知。例如，对于Java开发人员&lt;/span>&lt;/p>&lt;p>&lt;span>1）不知道“==”和equals之间的区别。&lt;/span>&lt;/p>&lt;p>&lt;span>2）不知道equals和hashCode方法被隐式调用时的约定。&lt;/span>&lt;/p>&lt;p>&lt;span>3）不知道OO的概念和设计原则。&lt;/span>&lt;/p>&lt;p>&lt;span>4）不能很好地处理多线程。&lt;/span>&lt;/p>&lt;p>&lt;span>5）不知道如何在HTTP客户端与服务器端之间保持状态。&lt;/span>&lt;/p>&lt;p>&lt;span>6）不能解释曾投入精力过的应用程序的高层体系结构。&lt;/span>&lt;/p>&lt;p>&lt;span>7）不知道SQL。&lt;/span>&lt;/p>&lt;p>&lt;span>…&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="0.968" data-w="125" 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;/p>&lt;h2>&lt;span>&lt;span>＃4既写不好简单的代码，又回答不出如何解决棘手的问题&lt;/span>&lt;/span>&lt;/h2>&lt;p>&lt;span>作为一个开发人员，你应该根据自己的经验水平，来针对给定的问题和情况编写代码。特别是如果碰到一个比较棘手的问题，那么即使你还没有解决方案，也应该将你的思路讲给面试官听。当然这在面试时会让人特别紧张，尤其是在还有时间限制的情况下，但是你也必须保持冷静，至少应该说明你将如何试着去解决问题的方法。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;h2>&lt;span>&lt;span>＃5糟糕的礼仪和态度&lt;/span>&lt;/span>&lt;/h2>&lt;p>&lt;span>迟到，不适宜的着装，抖手抖脚，没有眼神接触，过于紧张，没有提问，显示不出对这份职业的兴趣，“我什么都知道”的高傲态度，贬低你的现在和以前的雇主，遇到技术问题时烦躁不安或者垂头丧气，为自己找理由而不是虚心接受错误，与面试官发生争执，不好的肢体语言，随波逐流而没有自己的看法，过于呆板，撒谎，嗓门太大，无法成为良好的倾听者，等等。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;img data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" class="" data-ratio="0.5866336633663366" data-w="404" 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;/p></description></item><item><title>Java数据结构与算法</title><link>https://pangyd.com/post/146-java/</link><pubDate>Thu, 26 Oct 2017 22:56:35 +0800</pubDate><guid>https://pangyd.com/post/146-java/</guid><description>&lt;p>&lt;span>刚学习数据结构与算法时，就被告知&lt;span>&amp;nbsp;“程序=算法+数据结构”&lt;/span>，而这段话来自于对点计算机科学家Niklaus Wirth在1976年出版的一本书的书名，后来这句话也成为计算机工作者之间流传的一句名言，小编也用惨痛的经历告诉大家这也是一个很重要的知识点。&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&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/10/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="1.0909090909090908" data-w="110" 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;/span>&lt;/span>&lt;/p>&lt;p>&lt;span>首先来说说什么是数据结构，直接上图&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&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/10/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="0.59613196814562" data-w="879" 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>&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;/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;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/10/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="0.8" data-w="1280" width="328px" 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>说到数据结构算法的用处，当你用着java容器类很爽的时候，你有没有想过，怎么ArrayList像一个无限扩充的数组，也好像一个链表。好用吗？当然好用这就是数据结构的用处，只不过你在不知不觉中使用了。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>用于现实世界的存储，我们使用的工具和建模。每种数据结构有自己的优点和缺点，想想如果Google的数据用的是数组的存储，我们还能方便地查询到所需要的数据吗。&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p></description></item><item><title>Java打飞机小游戏（附完整源码)</title><link>https://pangyd.com/post/144-java/</link><pubDate>Tue, 24 Oct 2017 22:56:12 +0800</pubDate><guid>https://pangyd.com/post/144-java/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;p style="text-align: justify">&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 style="text-align: justify">写在前面&lt;/p>&lt;p style="text-align: justify">技术源于分享，所以今天抽空把自己之前用java做过的&lt;a href="https://www.yidianzixun.com/channel/w/%E5%B0%8F%E6%B8%B8%E6%88%8F" target="_blank">小游戏&lt;/a>整理贴出来给大家参考学习。java确实不适合写桌面应用，这里只是通过这个游戏让大家理解&lt;a href="https://www.yidianzixun.com/channel/w/oop" target="_blank">oop&lt;/a>面向对象编程的过程，纯属娱乐。代码写的很简单，也很容易理解，并且注释写的很清楚了，还有问题，自己私下去补课学习。&lt;/p>&lt;p style="text-align: justify">完整代码&lt;/p>&lt;h2 style="text-align: justify">敌飞机&lt;/h2>&lt;p style="text-align: justify">&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;h2 style="text-align: justify">分数奖励&lt;/h2>&lt;p style="text-align: justify">&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;h2 style="text-align: justify">蜜蜂&lt;/h2>&lt;p style="text-align: justify">&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;h2 style="text-align: justify">子弹类：是飞行物体&lt;/h2>&lt;p style="text-align: justify">&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;h2 style="text-align: justify">敌人的分数&lt;/h2>&lt;p style="text-align: justify">&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;h2 style="text-align: justify">飞行物(敌机，蜜蜂，子弹，英雄机)&lt;/h2>&lt;p style="text-align: justify">&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;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;h2 style="text-align: justify">英雄机&lt;/h2>&lt;p style="text-align: justify">&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;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;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;h2 style="text-align: justify">游戏启动主类&lt;/h2>&lt;p style="text-align: justify">&lt;span id="article-img-11" 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;span id="article-img-12" 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;span id="article-img-13" 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;span id="article-img-14" 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;span id="article-img-15" 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;span id="article-img-16" 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;span id="article-img-17" 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;span id="article-img-18" 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;span id="article-img-19" 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></description></item><item><title>Java集合面试问题和答案</title><link>https://pangyd.com/post/140-java/</link><pubDate>Fri, 20 Oct 2017 20:19:28 +0800</pubDate><guid>https://pangyd.com/post/140-java/</guid><description>&lt;p style="text-align: justify">&lt;span>1.Java集合框架是什么？说出一些集合框架的优点？&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img class="" data-ratio="0.41541353383458646" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpeg" data-type="jpeg" data-w="532" height="221" width="532" 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: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>2.&lt;/span>&lt;span>集合框架中的泛型有什么优点？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img class="" data-ratio="0.3899782135076253" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpeg" data-type="jpeg" data-w="459" height="179" width="459" 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: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>3.Java集合框架的基础接口有哪些？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img class="" data-ratio="0.6123348017621145" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpeg" data-type="jpeg" data-w="454" height="278" width="454" 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: justify">&lt;span>　&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>4.为何Collection不从Cloneable和Serializable接口继承？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img class="" data-ratio="0.6563876651982379" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpeg" data-type="jpeg" data-w="454" height="298" width="454" 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: justify">&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>5.为何Map接口不继承Collection接口？&lt;/span>&lt;/p>&lt;p style="text-align: center">&lt;img class="" data-ratio="0.3356009070294785" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpeg" data-type="jpeg" data-w="441" height="148" width="441" 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;img class="" data-ratio="0.4796875" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpeg" data-type="jpeg" data-w="640" height="378" width="787" 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知识点归纳-J2EE 、 Web 部分</title><link>https://pangyd.com/post/129-java-j2ee-web/</link><pubDate>Mon, 09 Oct 2017 22:07:37 +0800</pubDate><guid>https://pangyd.com/post/129-java-j2ee-web/</guid><description>&lt;p>J2EE（Java2 Enterprise Edition） 刚出现时一般会用于开发企业内部的应用系统，特别是web应用，所以渐渐，有些人就会把J2EE和web模式画上了等号。但是其实 J2EE 里面并不仅仅是web，可以看到很多其中的规范都是通用的，目的是为了高效开发出健壮的服务企业业务模式的应用系统。J2EE中也是可以没有web界面的应用，而现在面向大众用户开发的网站往往也会使用到很多的J2EE的技术，所以J2EE和web开发的概念都是融合在了一起了。&lt;/p>&lt;p>笔者在JAVA开发刚入行的时候，也是做了不少web相关的项目，之后渐渐地web使用比较少了，现在web开发的技术日新月异，不过一些基础知识还是类似，所以也把这部分内容稍作整理，以期望可以给大家一些经验。&lt;/p>&lt;p>这次主要涉及到的两大块内容: Web相关的， J2EE相关的技术&lt;/p>&lt;p>Web部分:&lt;/p>&lt;p>脱离开各种语言，纯粹和 web相关的就是这些: HTML，CSS，JavaScript。哪怕你不用Java开发，用C#、PHP或者Python，这些内容都是通用，这里主要偏重一些基础知识。&lt;/p>&lt;p>HTTP协议，HTTPS协议&lt;/p>&lt;p>我觉得做Web开发，HTTP是基础中的基础。在一开始的时候，开发者可能对于这个内容了解不是非常深入，只是有个初步的概念，这个没有问题，可以先从了解，简单使用开始。 不过一旦有了一些web开发经验之后，你就需要把这块内容深入理解吃透。只知道简单概念，没有深入了解，可能并不会影响你开始上手做web开发，但是一旦涉及到一些性能调优、系统架构等工作，就需要你对HTTP有一个深入的了解，才能把工作做好。&lt;/p>&lt;p>对于HTTP请求， 我主要会关注以下内容:&lt;/p>&lt;p>&amp;nbsp;HTTP请求的模式: request/response&lt;/p>&lt;p>HTTP请求的方法：GET， POST， PUT，DELETE 等等&lt;/p>&lt;p>协议的具体格式: head + body&lt;/p>&lt;p>协议的各类返回码:1XX，2XX，3XX，4XX，5XX&lt;/p>&lt;p>Header中一些主要属性的含义和使用场景&lt;/p>&lt;p>HTTPS协议&lt;/p>&lt;p>Cookie的基本原理和使用场景&lt;/p>&lt;p>HTML， CSS&lt;/p>&lt;p>这是WEB开发的一个基础，如果公司有专门的前端开发人员，可能你就不需要做这块相关的内容。可能只需要准备一些服务，可以提供一些数据就行。不过要是公司没有专门的前端人员，那就需要你自己写简单的页面和简单的布局了。这种情况下，还是对HTML和CSS必须有个简单的了解才行。&lt;/p>&lt;p>HTML简单了解的话需要知道页面的结构，具体各个表单，标签的使用方法，CSS需要知道一些基本的选择器的编写和使用。但这也只能满足一些简单页面的要求。如果有更加复杂页面的开发需求，那对CSS+DIV的使用需要有更加深入的了解了，具体内容因为自己对这方面涉及不多，也不多说了，大家可以再找其他的参考资料。&lt;/p>&lt;p>JavaScript：&lt;/p>&lt;p>前端开发的语言，唯一的语言，就是JS。并且从中衍生出一个很优秀的框架jQuery。现在前端基本上只要有一点复杂度的，都会使用这两种技术。并且以jquery为基础，还有一些其他前台框架，提供了各种动态效果，还有表格，表单等一些常用的处理。近两年，AngularJS框架又开始火热起来，这个框架在前端实现了MVC的架构，给前端的开发带来了革命性的影响(但是不意味着所有的前端开发都应该要用这个)。这些都是很值得好好看一下。即便不是专攻前端开发的，但是对于这几个技术点，能够先了解一下基本情况，基本的原理，对于web开发来说，还是大有好处的。&lt;/p>&lt;p>Webservice&lt;/p>&lt;p>在现在的企业应用开发中，Webservice已经是个必备的工具了。在各个企业中，经过一段时间积累，会有很多不同种类的应用，这些应用可能都会使用不同的语言开发，并且需要相互之间的通讯。通讯的首选就是Webservice。前后台的交互，服务之间的交互，或者不同语言之间的交互，都可以使用Webservice这个技术。&lt;/p>&lt;p>Webservice的实现方式多种多样，两者共同点是大家都是以HTTP协议为基础的，都可以跨域，跨语言进行访问。&lt;/p>&lt;p>用的比较多的，一个是SOAP协议的方式。这是比较传统的webservice 的实现，这个协议比较重量级，发布者会将webservice以wsdl形式发布，调用者通过wsdl可以直接生成实体类等。对于调用者来说，“调用”这个步骤会更容易处理一些。不过SOAP形式也存在着消息量大，传输效率低等缺陷。SOAP协议本身的可选项比较多，比较复杂，各个属性设置略有差异会导致服务通讯的失败，需要在调试中需要花费更多的时间。&lt;/p>&lt;p>现在更加流行的是使用RESTFUL的Webservice。这种技术是简化了URL，或者说对URL做了一定格式的限定，同时配合上HTTP的各种method，包括有GET，POST，DELTE，PUT 等，来实现整体service的各种功能。一般传输的内容都是json格式的字符串。Restful的Webservice的优点在于这是一种更加轻量级的使用方式，传输效率更高，接口约定更加清晰，双方调试也会更加便利一些。缺点在于，json格式太灵活，所以双方都需要自行处理json中的各个参数。对于接口实体类的处理需要更多的逻辑和代码。&lt;/p>&lt;p>J2EE部分&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>JDBC(可以在J2SE中使用)&lt;/p>&lt;p>JDBC用于java和数据库交互。它是Java面向接口编程的一个典型实例：开发者使用JDBC的API进行开发，但是底层可以针对不同的数据库使用不同的JDBC驱动(由各个数据库供应商提供)。JDBC被归为了J2EE的规范中，但是在一般的java程序中也可以使用，而且也是几乎都会被直接或者间接使用（除非不用数据库）。这从侧面也说明了，其实J2EE企业开发和web开发并不是同一个概念，而是相互融合的。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>JDBC是Java中最原始，最纯粹，效率最高的访问数据库的方式，我们熟知的hibernate、 Mybatis等ORM框架都是在JDBC基础上做的封装。了解JDBC对于以后和数据库更好打交道会有着很大的用处。哪怕是一个java开发新手，你需要去学习Hibernate、Mybatis等框架，你也需要先学习JDBC作为这些的基础。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>对于JDBC的具体怎么实现，这个真不需要了解到那么深入。我推荐大家学习JDBC至少需要掌握以下内容：&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>1.JDBC的原理: JDBC为接口，可以有不同的驱动driver类&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>2.JDBC中的一些基本概念: connection， statement， resultset 等&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>3.JDBC使用的基本流程&lt;/p>&lt;p>&lt;br>&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/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>Java Web 网站技术架构演化和总结</title><link>https://pangyd.com/post/103-java-web/</link><pubDate>Fri, 15 Sep 2017 20:00:42 +0800</pubDate><guid>https://pangyd.com/post/103-java-web/</guid><description>&lt;p style="text-align: justify">&lt;b>[&lt;a target="_self" href="https://pangyd.com/">分享&lt;/a>]&lt;/b>工作也有几多年了，无论是身边遇到的还是耳间闻到的，多多少少也积攒了自己的一些经验和思考，当然，博主并没有太多接触高大上的分布式架构实践，相对比较零碎，随时补充。&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>开始的开始，就是各种框架一搭，然后扔到Tomcat容器中跑就是了，这时候我们的文件，数据库，应用都在一个服务器上。&lt;/span>&lt;/p>&lt;p>&lt;img class="" data-ratio="0.84375" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpeg" data-type="jpeg" data-w="640" height="562" width="666" 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 style="text-align: justify">&lt;span>随着系统的的上线，用户量也会逐步上升，很明显一台服务器已经满足不了系统的负载，这时候，我们就要在服务器还没有超载的时候，提前做好准备。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>由于我们是单体架构，优化架构在短时间内是不现实的，增加机器是一个不错的选择。这时候，我们可能要把应用和数据库服务单独部署，如果有条件也可以把文件服务器单独部署。&lt;/span>&lt;/p>&lt;p>&lt;img class="" data-ratio="0.870020964360587" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpeg" data-type="jpeg" data-w="477" height="415" width="477" 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;img class="" data-ratio="0.4378531073446328" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpeg" data-type="jpeg" data-w="354" height="155" width="354" 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: justify">&lt;span>为了提升服务处理能力，我们在Tomcat容器前加一个代理服务器，我一般使用Nginx，当然你如果更熟悉apache也未尝不可。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>用户的请求发送给反向代理，然后反向代理把请求转发到后端的服务器。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>严格意义上来说，Nginx是属于web服务器，一般处理静态html、css、js请求，而Tomcat属于web容器，专门处理JSP请求，当然Tomcat也是支持html的，只是效果没Nginx好而已。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>反向代理的优势，如下：&lt;/span>&lt;/p>&lt;ul class=" list-paddingleft-2">&lt;li>&lt;p style="text-align: justify">&lt;span>隐藏真实后端服务&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>负载均衡集群&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>高可用集群&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>缓存静态内容实现动静分离&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>安全限流&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>静态文件压缩&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>解决多个服务跨域问题&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>合并静态请求(HTTP/2.0后已经被弱化)&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>防火墙&lt;/span>&lt;/p>&lt;/li>&lt;li>&lt;p style="text-align: justify">&lt;span>SSL以及http2&lt;/span>&lt;/p>&lt;/li>&lt;/ul>&lt;h1>&lt;span>动静分离&lt;/span>&lt;/h1>&lt;p>&lt;img class="" data-ratio="0.6956521739130435" data-src="https://pangyd.com/uploads/2017/09/74c10f869f038762.jpeg" data-type="jpeg" data-w="529" height="368" width="529" 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编程精选】给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)</title><link>https://pangyd.com/post/24-javajava-java-j2ee-and-web/</link><pubDate>Mon, 31 Jul 2017 15:33:12 +0800</pubDate><guid>https://pangyd.com/post/24-javajava-java-j2ee-and-web/</guid><description>&lt;p>&lt;span>J2EE（Java2 Enterprise Edition） 刚出现时一般会用于开发企业内部的应用系统，特别是web应用，所以渐渐，有些人就会把J2EE和web模式画上了等号。但是其实 J2EE 里面并不仅仅是web，可以看到很多其中的规范都是通用的，目的是为了高效开发出健壮的服务企业业务模式的应用系统。J2EE中也是可以没有web界面的应用，而现在面向大众用户开发的网站往往也会使用到很多的J2EE的技术，所以J2EE和web开发的概念都是融合在了一起了。&lt;/span>&lt;br>&lt;/p>&lt;p>　　我本人在JAVA开发刚入行的时候，也是做了不少web相关的项目，之后渐渐地web使用比较少了，现在web开发的技术日新月异，不过一些基础知识还是类似，所以也把这部分内容稍作整理，以期望可以给大家一些经验。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>这次主要涉及到的两大块内容: Web相关的， J2EE相关的技术&lt;/span>&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;p>&lt;span>Web部分:&lt;/span>&lt;/p>&lt;p>　　脱离开各种语言，纯粹和 web相关的就是这些: HTML，CSS，JavaScript。哪怕你不用Java开发，用C#、PHP或者Python，这些内容都是通用，这里主要偏重一些基础知识。&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;strong>HTTP协议，HTTPS协议&lt;/strong>&lt;/p>&lt;/li>&lt;/ul>&lt;p>　　我觉得做Web开发，HTTP是基础中的基础。在一开始的时候，开发者可能对于这个内容了解不是非常深入，只是有个初步的概念，这个没有问题，可以先从了解，简单使用开始。 不过一旦有了一些web开发经验之后，你就需要把这块内容深入理解吃透。只知道简单概念，没有深入了解，可能并不会影响你开始上手做web开发，但是一旦涉及到一些性能调优、系统架构等工作，就需要你对HTTP有一个深入的了解，才能把工作做好。&lt;/p>&lt;p>　　对于HTTP请求， 我主要会关注以下内容:&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTTP请求的模式: request/response&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTTP请求的方法：GET， POST， PUT，DELETE 等等&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 协议的具体格式: head + body&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 协议的各类返回码:1XX，2XX，3XX，4XX，5XX&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Header中一些主要属性的含义和使用场景&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HTTPS协议&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cookie的基本原理和使用场景&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;strong>HTML， CSS&lt;/strong>&lt;/p>&lt;/li>&lt;/ul>&lt;p>　　这是WEB开发的一个基础，如果公司有专门的前端开发人员，可能你就不需要做这块相关的内容。可能只需要准备一些服务，可以提供一些数据就行。不过要是公司没有专门的前端人员，那就需要你自己写简单的页面和简单的布局了。这种情况下，还是对HTML和CSS必须有个简单的了解才行。&lt;/p>&lt;p>　　HTML简单了解的话需要知道页面的结构，具体各个表单，标签的使用方法，CSS需要知道一些基本的选择器的编写和使用。但这也只能满足一些简单页面的要求。如果有更加复杂页面的开发需求，那对CSS+DIV的使用需要有更加深入的了解了，具体内容因为自己对这方面涉及不多，也不多说了，大家可以再找其他的参考资料。&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;strong>JavaScript：&lt;/strong>&lt;/p>&lt;/li>&lt;/ul>&lt;p>　　前端开发的语言，唯一的语言，就是JS。并且从中衍生出一个很优秀的框架jQuery。现在前端基本上只要有一点复杂度的，都会使用这两种技术。并且以jquery为基础，还有一些其他前台框架，提供了各种动态效果，还有表格，表单等一些常用的处理。近两年，AngularJS框架又开始火热起来，这个框架在前端实现了MVC的架构，给前端的开发带来了革命性的影响(但是不意味着所有的前端开发都应该要用这个)。这些都是很值得好好看一下。即便不是专攻前端开发的，但是对于这几个技术点，能够先了解一下基本情况，基本的原理，对于web开发来说，还是大有好处的。&lt;/p>&lt;p>　　因为自己对这个涉猎也不深入，所以也就不更多罗列了，以免误人子弟了。&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;ul class="list-paddingleft-2">&lt;li>&lt;p>&lt;strong>Webservice&lt;/strong>&lt;/p>&lt;/li>&lt;/ul>&lt;p>　　在现在的企业应用开发中，Webservice已经是个必备的工具了。在各个企业中，经过一段时间积累，会有很多不同种类的应用，这些应用可能都会使用不同的语言开发，并且需要相互之间的通讯。通讯的首选就是Webservice。前后台的交互，服务之间的交互，或者不同语言之间的交互，都可以使用Webservice这个技术。&lt;/p>&lt;p>　　Webservice的实现方式多种多样，两者共同点是大家都是以HTTP协议为基础的，都可以跨域，跨语言进行访问。&lt;/p>&lt;p>　　用的比较多的，一个是SOAP协议的方式。这是比较传统的webservice 的实现，这个协议比较重量级，发布者会将webservice以wsdl形式发布，调用者通过wsdl可以直接生成实体类等。对于调用者来说，“调用”这个步骤会更容易处理一些。不过SOAP形式也存在着消息量大，传输效率低等缺陷。SOAP协议本身的可选项比较多，比较复杂，各个属性设置略有差异会导致服务通讯的失败，需要在调试中需要花费更多的时间。&lt;/p>&lt;p>　　现在更加流行的是使用RESTFUL的Webservice。这种技术是简化了URL，或者说对URL做了一定格式的限定，同时配合上HTTP的各种method，包括有GET，POST，DELTE，PUT 等，来实现整体service的各种功能。一般传输的内容都是json格式的字符串。Restful的Webservice的优点在于这是一种更加轻量级的使用方式，传输效率更高，接口约定更加清晰，双方调试也会更加便利一些。缺点在于，json格式太灵活，所以双方都需要自行处理json中的各个参数。对于接口实体类的处理需要更多的逻辑和代码。&lt;/p></description></item><item><title>JavaEE (my eclipse10 以及 tomcat6配置教程)</title><link>https://pangyd.com/post/16-javaee-my-eclipse10-tomcat6/</link><pubDate>Sat, 29 Jul 2017 10:56:56 +0800</pubDate><guid>https://pangyd.com/post/16-javaee-my-eclipse10-tomcat6/</guid><description>&lt;p style="text-align: center">&lt;b>&lt;i>所需工具:&lt;/i>&lt;/b>&lt;/p>&lt;p style="text-align: center">(建议使用迅雷下载)&lt;/p>&lt;p style="text-align: center">配置好的Java环境：&lt;a target="_self" href="https://pangyd.com/post/15-java/">点击浏览&lt;/a>&lt;/p>&lt;p style="text-align: center">My Eclipse破解版：&lt;a target="_self" href="https://pangyd.com/zl/Myeclipse10.7.1+破解文件.zip">点击下载&lt;/a>&amp;nbsp;（下载完成后 按照压缩包里面的教程下载和安装My eclipse 自测成功！）&lt;/p>&lt;p style="text-align: center">tomcat6.0:&lt;a target="_self" href="https://pangyd.com/zl/apache-tomcat-6.0.20.zip">点击下载&lt;/a>&lt;/p>&lt;p style="text-align: center">&lt;b>&lt;i>tomcat在My Eclipse下的环境配置：&lt;/i>&lt;/b>&lt;/p>&lt;p style="text-align: center">1.首先将下载好的压缩包解压 解压到c盘的根目录下&lt;/p>&lt;ol class="exp-conent-orderlist">&lt;li class="exp-content-list list-item-10">&lt;div class="content-list-text">&lt;ol class="exp-conent-orderlist">&lt;li class="exp-content-list list-item-10">&lt;div class="content-list-text">&lt;p style="text-align: center">2.接下来开始配置环境变量，&lt;/p>&lt;p style="text-align: center">3.然后新建三个系统变量：&lt;/p>&lt;p style="text-align: center">TOMCAT_HOME=C:\apache-tomcat-6.0.20&lt;/p>&lt;p style="text-align: center">CATALINA_HOME=C:\apache-tomcat-6.0.20&lt;/p>&lt;p style="text-align: center">CATALINA_BASE=C:\apache-tomcat-6.0.20&lt;/p>&lt;/div>&lt;/li>&lt;li class="exp-content-list list-item-10">&lt;p style="text-align: center">如图（变量值为39改成20）&lt;/p>&lt;/li>&lt;li class="exp-content-list list-item-10">&lt;ol class="exp-conent-orderlist">&lt;li class="exp-content-list list-item-10">&lt;div class="content-list-media">&lt;p style="text-align: center">&lt;a class="exp-image-wraper" href="https://jingyan.baidu.com/album/86f4a73e5be03237d65269ef.html?picindex=17" target="_self">&lt;br>&lt;/a>&lt;a class="exp-image-wraper" href="https://jingyan.baidu.com/album/86f4a73e5be03237d65269ef.html?picindex=18" target="_self">&lt;br>&lt;/a>&lt;a class="exp-image-wraper" href="https://jingyan.baidu.com/album/86f4a73e5be03237d65269ef.html?picindex=19" target="_self">&lt;/a>&lt;/p>&lt;ol class="exp-conent-orderlist">&lt;li class="exp-content-list list-item-11" style="text-align: center">&lt;/li>&lt;/ol>&lt;p style="text-align: center">&lt;a class="exp-image-wraper" href="https://jingyan.baidu.com/album/86f4a73e5be03237d65269ef.html?picindex=20" target="_self">&lt;br>&lt;/a>&lt;a class="exp-image-wraper" href="https://jingyan.baidu.com/album/86f4a73e5be03237d65269ef.html?picindex=21" target="_self">&lt;/a>&lt;a class="exp-image-wraper" href="https://jingyan.baidu.com/album/86f4a73e5be03237d65269ef.html?picindex=21" target="_self">&lt;/a>&lt;/p>&lt;p>&lt;/p>&lt;/div>&lt;/li>&lt;/ol>&lt;/li>&lt;li class="exp-content-list list-item-10">&lt;ol class="exp-conent-orderlist">&lt;li class="exp-content-list list-item-11">&lt;div class="content-list-text">&lt;p style="text-align: center">4.在CLASSPALL中的最后添加;%TOMCAT_HOME%\lib\servlet-api.jar;&lt;/p>&lt;p style="text-align: center">5.在PAth中最前添加;%CATALINA_HOME%\bin;&lt;/p>&lt;p style="text-align: center">&amp;nbsp;注意：前后顺序不影响&lt;/p>&lt;/div>&lt;/li>&lt;li class="exp-content-list list-item-11">&lt;ol class="exp-conent-orderlist">&lt;li class="exp-content-list list-item-12">&lt;div class="content-list-text">&lt;p style="text-align: center">至此，配置工作完成！打开bin文件夹，双击startup.bat&lt;/p>&lt;p style="text-align: center">它会自动打开如下控制台界面。&lt;/p>&lt;p style="text-align: center">不要关闭控制台界面，打开浏览器，输入http://localhost:8080&amp;nbsp;&lt;/p>&lt;p style="text-align: center">出现Tomcat的网页，证明安装并配置成功！&lt;/p>&lt;p style="text-align: center">最后关闭控制台，关闭控制台即关闭Tomcat服务&lt;/p>&lt;/div>&lt;/li>&lt;li class="exp-content-list list-item-12">&lt;p style="text-align: center">&lt;b>&lt;i>接下来配置在my eclipse中配置tomcat6&lt;/i>&lt;/b>&lt;/p>&lt;/li>&lt;li class="exp-content-list list-item-12">&lt;p style="text-align: center">&lt;b>&lt;i>首先确保你已经成功的安装 了myeclipse10和tomcat&lt;/i>&lt;/b>&lt;/p></description></item></channel></rss>