<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; 读书笔记</title>
	<atom:link href="https://www.phppan.com/tag/%e8%af%bb%e4%b9%a6%e7%ac%94%e8%ae%b0/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 04 Apr 2026 01:19:58 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>《你的灯亮着吗？》读书笔记</title>
		<link>https://www.phppan.com/2013/12/your-lights-on/</link>
		<comments>https://www.phppan.com/2013/12/your-lights-on/#comments</comments>
		<pubDate>Sun, 15 Dec 2013 03:16:10 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[你的灯亮着吗]]></category>
		<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1878</guid>
		<description><![CDATA[1、当遇到一个问题时，先不要急着去解决问题，而是问下自己 问题是什么？为谁解决问题？谁有问题？ 确切的说是需要 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>1、当遇到一个问题时，先不要急着去解决问题，而是问下自己 问题是什么？为谁解决问题？谁有问题？ 确切的说是需要寻找问题的本质，更全面的考虑问题<br />
2、问题其实是人期望的东西和你体验的东西之间的差别，简单点说与预期不符。<br />
3、不要过早的下结论，但是也不要忽略你的第一印象<br />
4、当解决一个问题的时候，可能会带来一个新的问题，从而子子孙孙无穷尽也。<br />
5、问题最难处理的却是意识到问题的存在，这里的关键是思考，思考之后才会能发现问题。<br />
6、一旦我们把一个东西当作一个问题，我们通常会给它“变形”<br />
7、当你在寻找问题定义的道路上疲倦地游荡时，不要忘记随时都回头看看，看看你是不是已经迷路了。<br />
8、注意你说话的上下文，有些信息是你知道，而别人不知道的，所以，当说一件事情的时候需要确保信息对等，如果信息不对等，请在你的表述中将这些信息带上。<br />
9、一旦你用文字表述一个问题，请仔细推敲这些文字，以使这种表述在每个人的头脑中都是同一个意思。<br />
10、当别人能够很好地解决自己的问题的时候，千万不要越俎代庖。这时不是看问题了，而是解决问题，一线的问题让一线的人解决吧。<br />
11、如果某人能够解决这个问题，但是他本人却并不会遇到这一问题时，那么你们首先要做的就是让他也感受到这个问题。<br />
12、当指责别人没有解决问题时，试试换过来指责你自己-即使只有一秒钟。<br />
13、你的灯亮着吗？<br />
14、问题的根源常常在你自己身上。<br />
15、问题从哪儿来？找到问题的根源。<br />
16、在这个世界上有两种人，一种人做事，另一处人给别人找事做。这个世界上也可能有另外两种人，一种人做事，一种人享受荣誉。<br />
17、看看我们现在处理的难题，那些你看起来不可能解决的问题只需要再多花一点时间就能解决。当你解决了这个问题时，回过头来看看，觉得也许没有想象中的那么困难，行百里者半于九十<br />
18、追求什么，就能够学到什么<br />
19、不管看上去如何，人们很少知道他们想要什么，直到你给了他们想要的东西。<br />
20、最终的分析表明，并没有多少人真的希望他们的问题被解决。<br />
21、开始之前，想想我是否真的想要一个解决方法？<br />
22、解决问题不要太快，快往往代表着仓促，仓促往往会容易出错。<br />
23、过去的已经过去，现在的还在现在，将来的永远是将来。忘掉过去，把握现在，相信将来！<br />
24、首先，对自己要真诚。对自己要真诚，在这里的意思是，在你靠近一个解决方案、甚至一个定义之前，你必须考虑道德的问题，然后再开始降低你的敏感度。这种考虑永远都不会是浪费你的时间，因为解决问题永远都不会是一个道德上中立的行为――不管它是多么的吸引它的从业者们。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2013/12/your-lights-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《驱动力》读后总结 &#8211; 是什么驱动了你</title>
		<link>https://www.phppan.com/2012/12/drive/</link>
		<comments>https://www.phppan.com/2012/12/drive/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 23:12:31 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[读书总结]]></category>
		<category><![CDATA[读书笔记]]></category>
		<category><![CDATA[马斯洛需求层次理论]]></category>
		<category><![CDATA[驱动力]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1761</guid>
		<description><![CDATA[一本讲述人的书，它会告诉你：是什么驱动了你。作为企业，其核心是经济绩效，而经济绩效依赖于人的绩效，这本书也讲述 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>一本讲述人的书，它会告诉你：是什么驱动了你。作为企业，其核心是经济绩效，而经济绩效依赖于人的绩效，这本书也讲述了怎样可以提高人的绩效，特别是当一些常规手段失效时。在读书过程中反思，现在是什么在驱动自己？自己的动机在哪？这本书有什么内容可以应用到工作中？  有所收获，却也觉得书中所言不能全部信之。</p>
<p>书中介绍人的行为的驱动力有三种：</p>
<ul>
<li>第一种驱动力是生物驱动力，如饿了要吃饭，渴了要喝水，这是1.0时代，生物冲动；</li>
<li>第二种驱动力是外在动机，做出特定行为后外部会带来奖励或惩罚，这是2.0时代，寻求奖励，避免惩罚。</li>
<li>第三种驱动力是内在动机，是我们想要主导我们的生活、延展我们的能力，让生活更有意义的深层欲望。人类的天性决定了他们会寻求对自己命运的掌控权，希望自己引导自己</li>
</ul>
<p>书中作者提出的自我决定理论认为人类有三种内在需求：</p>
<ul>
<li>能力的需求（competence）</li>
<li>自主性的需求（autonomy）</li>
<li>归属的需求（relatedness）</li>
</ul>
<p>看到这些需求，这些驱动力的描述，不得不想起老马的<a href="http://baike.baidu.com/view/295140.htm" target="_blank">基本需求层次理论</a>。该理论将需求分为五种，像阶梯一样从低到高，按层次逐级递升，分别为：生理上的需求，安全上的需求，情感和归属的需求，尊重的需求，自我实现的需求。作者提出的自我决定理论，三个内在需求也是对应老马的理论中的三个层面的，是此理论范围太大，还是？</p>
<p>现在的我们更多的时候是处于第一驱动力或第二驱动力之中，为了生活奔波，这仅仅是因为需要养家糊口。第一驱动力是根本点，其对应到　马斯洛需求层次理论　是最底层的生理上的需求，为了活着。而第二驱动力是从第一驱动力而来，一些内容依赖于第一驱动力。比如奖励和惩罚，其最终的落脚点往往是第一驱动力的一些要素。</p>
<p>作者提到的驱动力3.0，在胡萝卜大棒失效的时代如何提高绩效、焕发热情的三大要素：自主、专精和目的。</p>
<p>驱动力3.0的三大要素</p>
<ul>
<li>自主：我做什么，我决定。这个时代我们并不需要更好的管理，而需要自我管理</li>
<li>专精：把想做的事情做得越来越好。专业是一种痛苦，在通往专精的路上，没有鲜花，没有七色彩虹，在你不想做的时候还得继续做，并且这是一条渐近线。</li>
<li>目的：超越自身的渴望。它是驱动力3.0的内容，驱动力3.0不拒绝利润，但是它强调目的最大化。我们老板常说：我们是在实现自己的梦想，现在只是在实现梦想的过程中顺便赚点钱。忽然想到，现在越来越多的人去创业，他们为了什么？梦想  OR 成功后的经济自由 OR 吃肉自由 OR 自由吃肉？</li>
</ul>
<p>当我们还在为最底层的需求努力时，更上面的需求都是空的，但是如何现在给你高于平均水平的薪酬的同时，再给你更多的自主权，让你一展所长。此时是否有一种士为知己者死的感觉，嗯，要的就是这个。</p>
<p>但是从批判的角度去看上面的这句话：这里的平均水平是什么水平？一展所长是展示什么？自主权能有多自主？是否我们需要把这个平均水平提高，让自己处于更高的水平，此时这样的水平才有些意思，那如何做呢？如作者所说，让你更加的专精。作者提了5点建议：</p>
<ul>
<li>刻意练习的目标是提高成绩。这里更多的是要有目标，即不要太泛，广度是需要的，但是作为程序员来说，深度会更重要些，我们需要找到你专精的目标。</li>
<li>重复、重复、再重复。我很相信1万小时理论：任何人如果想要在某一领域变得十分出色，都需要经过至少1万个小时的练习，才能够达到一个比较高的水平。</li>
<li>想方设法获得批评性意见。知道自己的问题在哪，知道自己改进的方向在哪，才能更好的进步。</li>
<li>关注自己的弱项。我们喜欢做我们擅长的事情，因为我们可以游刃有余，但是对于一个优秀的人来说，关注自己的弱项，在弱项上努力，使之不会成为严重短板。</li>
<li>为身心俱疲做好准备。努力向专精看齐，在这条辛苦的路上，总会有一天你会身心疲惫，也许你会想着放弃，也许你会坚持，向左走，向右走，不同的结果。</li>
</ul>
<p>一个伟大的人，就是一句话，这也应用于一个公司，一个伟大的公司，就是一句话。你的那句话是什么？“为中华之崛起而读书”？“修身齐家治国平天下”？今天的我比昨天更优秀吗？反思，反省。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2012/12/drive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《程序员的思维修炼》读书笔记</title>
		<link>https://www.phppan.com/2012/10/pragmatic-thinking-and-learing/</link>
		<comments>https://www.phppan.com/2012/10/pragmatic-thinking-and-learing/#comments</comments>
		<pubDate>Sun, 21 Oct 2012 22:51:36 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[杂谈]]></category>
		<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1740</guid>
		<description><![CDATA[买《程序员的思维修炼-开发认知潜能的九堂课》这本书有一段时间了，到今天才看完，薄薄的一本书，值得细细品味。很久 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>买《程序员的思维修炼-开发认知潜能的九堂课》这本书有一段时间了，到今天才看完，薄薄的一本书，值得细细品味。很久没有写读书笔记了，本书中建议读完一本书后就应该写一篇总结或至少认真写个评论，阅读更多的书，就会有更多的东西可以写。<br />
这是一本包含了认知科学、神经学、学习和行为理论，以程序员更能理解的形式介绍了人类大脑的工作机制，并研究如何克服这个系统的局限来提高自己学习和思考的技能。<br />
其中一些观点印象深刻。</p>
<p>最开始是关于技能获取领域的德雷福斯模型（Drefus model）。此模型是一个针对每项技能的的评估体系，它能表示你处于某个特定技能领域中的某个水平阶段。如PHP开发新手、linux专家等。它分为五个等级：新手、高级新手、胜任者、精通者、专家。新手依赖于规则，规则可以让他们开始工作。他们拥有对此领域极少的技能或根本没有技能。新手非常在乎最后的结果，希望自己做的东西能取得明显的效果，当一个功能做出来后，就会有非常大的成功感，会觉得自己是人才。但是由于他们经验的缺失，不知道如何应对出现的错误，此时可能会不知所措。<br />
与新手相比，高级新手已经有一些经验，能够根据一些总体的原则，尝试着解决问题，但是他们没有一个对此领域的全局的理解，并且也不会想去了解，无法站在一个更高的高度去理解现在看到的内容。<br />
胜任者在团队中往往发挥着领导作用，能够独立的解决问题，有时也可以指导新手处理问题。他们往往具有良好的主动性，他们的工作依赖于自己以往的经验，开始学会寻找新的问题的解决方案，如寻求专家的帮助、google等。但是他们缺少对于自身错误的反思和纠错能力。<br />
精通者更多的表现在能时常反思，时常纠错。他们有足够的经验，知道下一步会发生什么，知道如何应对即将发生的事。这个阶段的程序员往往能正确应用设计模式。<br />
专家根据直觉工作，不需要太多理由。他们总在寻找更好的方法和方式，他们有丰富的经验，他们擅长布道。<br />
在现实中，大多数人都是高级新手，他们不知道自己不知道。<br />
我们需要勇于承担责任，保持实践以维持专家技能（如果你是一个leader，也不要脱离开发第一线），多考虑情境，培养更多的直觉。</p>
<p>我们的大脑的配置是双CPU，单主机总线设计。1号CPU负责线性、逻辑思维和语言处理，处理速度较慢，我们称之为L模式；2号CPU不做任何语言处理，当你“思考”时，它会去搜索和匹配，异步返回结果，我们称之为R模式。R型对直觉、问题解决和创造性非常重要。<br />
基于R的不可预测性，我们需要建立外部存储设备，如记事本、PDA等等，当有想法时记录下来，每个人都有好点子，但只有少数人会努力付诸实际先去，只有更少的人将这些好点子成功实现。<br />
如果想成为专家，需要更多的启动你的R型CPU，作家中流传一句话：酒醉写作、酒醒修改，程序员中的结对编程模型都是L和R型充分利用的例子。利用图像、晨写技术、写博客、散步等方式可以让你大脑中的R型自由展示。 </p>
<p>程序有BUG，而我们的大脑也会有许多出错的地方，这些错误会影响我们的思维。书的作者介绍了4大类问题：认知偏见、时代影响、人性倾向和硬件故障。<br />
我们常见的认知偏见有思维定势、基本归因错误、自私的偏见、需要定论、认可上的偏见、曝光效应、霍桑效应、虚假记忆、符号约简谬论等。<br />
我们渴望知道结果，从而我们总是努力消除不确定性，但过早的下结论会减少我们的选择。因此我们需要顶住压力，推迟下结论的时间。我们的记忆并不靠谱，甚至会有虚假记忆，用笔或类似的方式记录下你需要记忆的信息，我们需要一些东西来确保你的记忆不会与事实想去甚远。<br />
偏见会随着时间改变，我们都是时代的产物，在不同的时代之间存在着我们常说的代沟。除了时代的影响，我们的个性会影响我们的价值观和看法。性格和技能水平不同，其奖励的方式也应该不同。尊重不同人的不同性格，不要试图改变别人的性格以适应自己。</p>
<p>技术本身并不重要，持续学习才是最重要的。教育字面的意思却是“被引出”。建立SMART任务实现你的目标。我们需要记住：时间是无法创造和销毁的。时间只能分配。教是最好的学。</p>
<p>放松以集中注意力，我们开发外部信息处理系统，以浸泡、分类和发展想法。<br />
优化当前情境，减少情境切换，因为平均需要20分钟才能返回到原来的工作状态，从而不要时不时的检查邮件，避免分心，定制单任务界面。</p>
<p>认识你自己，认识当前时刻，认识你所处的情境。从现在开始改变，虽然开始很难，困难很多，甚至反复，坚持。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2012/10/pragmatic-thinking-and-learing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>构建可扩展的WEB站点读书笔记</title>
		<link>https://www.phppan.com/2011/04/building-scalable-web-sites/</link>
		<comments>https://www.phppan.com/2011/04/building-scalable-web-sites/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 01:05:44 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[程序相关]]></category>
		<category><![CDATA[WEB]]></category>
		<category><![CDATA[可扩展]]></category>
		<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1350</guid>
		<description><![CDATA[关键字 WEB、可扩展、架构体系结构、开发、测试、数据、优化、负载均衡、监控、规划 第1章 绪论 WEB站点包 [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">关键字</h2>
<p style="text-indent: 2em;">WEB、可扩展、架构体系结构、开发、测试、数据、优化、负载均衡、监控、规划</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第1章 绪论</h2>
<p style="text-indent: 2em;">WEB站点包含的是页面数据，而WEB应用程序则是由具备分离交付机制的数据组成的。 一个WEB应用至少包括硬件和软件。 好的应用体系结构的关键在于开始的规划。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第2章 WEB应用程序体系结构</h2>
<p style="text-indent: 2em;">系统架构分层，一如OSI的七层，各司其职，确保每层都能很好的完成自己的职责。 每个层的功能都只建立在同层或较低层所提供的功能之上。 层内通常都是自我完备，自制的。层与层的交互通过接口实现， 但是会产生一些问题，层与层之间的交互会增加额外的消耗，并且分层会给调试带来困难。</p>
<p style="text-indent: 2em;">作者认为WEB应用分为展现层（CSS），标记层（html），页面逻辑层，业务逻辑层，持久化层。 如果采用多语言编程，就会被分层。此时，关键问题是如何在层间进行有效的交互。 分层将导致分工的出现，分工将使技术方向更加明确。</p>
<p style="text-indent: 2em;">由于小系统到大系统的一个步骤是将展现层分离出来，这需要三步：</p>
<ol>
<li>将逻辑代码从标记代码中分离出来</li>
<li>将标记代码划分成一个文件对应一个页面</li>
<li>切换到模板系统</li>
</ol>
<p style="text-indent: 2em;">页面逻辑和业务逻辑的分离最为简易的方法是函数分组。</p>
<p style="text-indent: 2em;">** 忘记那些微不足道的性能调整，在97%的情况下，不成熟的优化是罪恶之源** WEB应用包括硬件和软件。硬件需要考虑经费、操作系统、软件、空间、容灾、容量规划、冗余、网络&#8230;&#8230;</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第3章 开发环境</h2>
<p style="text-indent: 2em;">三条不成文的规则，它能帮助你避开从小规模应用程序迁移到大型应用程序时常常遇到的问题。</p>
<ol>
<li>使用源码控制 版本控制，版本控制软件</li>
<li>使用单步创建 开发环境、筹备环境和生产环境分离。每次版本发布都需要经过开发，提交和测试，部署三个环节。 对于配置文件，可以以文件合并，覆盖变量的方式使用开发环境、生产环境的db配置等分离。 对于发布操作，建议统一出口，由专人管理或者由专人兼职管理</li>
<li>跟踪程序缺陷 问题跟踪系统，跟踪缺陷、特性、操作、支持请求。</li>
</ol>
<p style="text-indent: 2em;">在项目不同的阶段建议更新副本，我理解的是建立项目的基线。</p>
<p style="text-indent: 2em;">编码规范：对同一小组的人而言，对一种编码风格达成共识，远比找到完美的风格更重要。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第4章 国际化、本地化和Unicode</h2>
<p style="text-indent: 2em;">国际化(i18n)是为应用程序添加输入、处理、输出国际文本的能力。 本地化(L10n)是为特定地址提供定制的应用程序的过程。</p>
<p style="text-indent: 2em;">统一编码字符集.国际化是WEB应用本地化的先决条件。除了我们在程序中经常见到的多语言外， 本地化还包括语言、地区、时区、日期和时间格式、数字显示、货币的其它设定等。 本地化一般包括三种方法：</p>
<ol>
<li>字符串替换 如gettext的类库</li>
<li>多个模板集合</li>
<li>多个前端</li>
</ol>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第5章 数据一致性和安全性</h2>
<p style="text-indent: 2em;">数据完整性是工程应用程序成功的关键。可行的数据完整性策略基于一个基本的原则：应用程序的内部数据是有用的。 换句话说，引入的数据在边界处被过滤，以过滤后的结果存储。个人想法：在应用程序内部的各层之间也应该基于这样一个前提条件， 在把数据引入到当前层之前需要对数据进行处理。</p>
<p style="text-indent: 2em;">对于数据是否转义，作者建议坚持使用一种方式即可，不能混合使用。 过滤和安全可以在各层实现，在数据库层，对于特定用户的权限要区分，只需要读权限的，就只给读权限，秉承权限最小化原则。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第6章 电子邮件</h2>
<p style="text-indent: 2em;">通过为用户提供额外的获取及发布数据的途径，可以拓展Web应用程序的可用性。 电子邮件是异步的，能够实现交互，可以为应用程序拓展异步操作。 可以使用现有技术在应用程序中实现电子邮件机制，不需要重复发明轮子。这是程序员的美德之一：懒惰。</p>
<p style="text-indent: 2em;">电子邮件的方案一般包括两种：</p>
<ol>
<li>将邮件直接传给应用程序</li>
<li>把邮件传输到本地的POP或IMAP 收件箱，然后应用程序周期性的读取收件箱中的邮件并处理。 这里就产生了一个需求：邮件解析。关注附件，注意字符集编码，过滤不相关内容，识别用户。</li>
</ol>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第7章 远程服务</h2>
<p style="text-indent: 2em;">本章涉及WEB应用程序中在两个或多个组件之间交换数据的协议、格式和策略的问题。 远程服务小组的首要规则就是不能依赖服务。第二条：服务可能会失败。</p>
<p style="text-indent: 2em;">套接字： 所有使用TCP或UDP发送的数据都使用了socket连接。当我们执行socket的I/O操作时，都需要在每一步明确的检查失败。 HTTP: 基于XML-RPC、SOAP和REST的服务全部都用HTTP进行基本的传输。HTTP作为高层协议的传输层是相当理想的。 HTTP是无状态、无连接的协议，基于连接-请求-断开连接的语义。在HTTP请求中使用Authorization标头，从而触发http协议的认证功能。 在PHP中可以使用fscokopne函数构造http请求。</p>
<p style="text-indent: 2em;">远程服务冗余性：系统组件链中的任一组件都可能出现故障，对于故障的不同的情况需要使用不同的表述来说明。 面向用户的组件，往往倾向于使用专门的软件或硬件负载平衡器来处理在线故障转移。</p>
<p style="text-indent: 2em;">当一个系统中的异构组件之间交换数据时，需要定义两个元素。首先需要媒介和协议，然后是交换数据所需要的元素，就是数据格式 XML的解析有两种主流方式：SAX和DOM](). XML和HTTP都很好，但并不是银弹。有时轻型协议和格式对于特定的问题是更好的解决方案。 在使用XML交换数据时需要考虑内存使用、网络速度、解析速度、写入速度等。 如果没有合适的，自己构建一个协议吧，但是要记住：要避免做任何复杂和费时的事情，努力把工作建立在他人的现有工作成果之上。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第8章 瓶颈</h2>
<p style="text-indent: 2em;">本章讨论了在瓶颈产生前和它们已经影响到系统时，找出和修改体系结构中瓶颈的技术。 所谓的瓶颈就是程序中耗时最多的部分。瓶颈可能从CPU、I/O、网络I/O、内存、数据库等方面着手查找原因 其中磁盘速度是I/O的主要限制因素。 一般来说，WEB应用程序都会有缓存，包括文件缓存，内存缓存等等，有的应用有一层甚至几层的缓存。 有些数据适宜使用缓存，这种一般是读多写少。 在做数据库设计时可以有一定的冗余，到一定规模后，逆范式必不可少。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第9章 扩展WEB应用程序</h2>
<p style="text-indent: 2em;">可扩展的系统有三个简单特性：</p>
<ul>
<li>系统能够容纳使用率的增加</li>
<li>系统能够容纳数据集的增加</li>
<li>系统可维护</li>
</ul>
<p style="text-indent: 2em;">可扩展性与语言无关，与特定的技术无关，与XML无关，并且页面逻辑和业务逻辑的分享对于可扩展性来说也不是必需的。</p>
<p style="text-indent: 2em;">扩展硬件平台，可以垂直扩展，但其最终会爱到限制，成果较高。可以水平扩展，以不断添加更多硬件的方式实现，以常规机器为主。 然而水平扩展会带来维护成本和管理成本的增加。</p>
<p style="text-indent: 2em;">冗余：机器都会发生故障，唯一保证故障状态下正常服务的办法就是有多个硬件备份。 所有备份的各类可能是冷备份、热备份和完全热备份。其中完全热备份最为推荐。 扩展PHP：PHP和HTTP一样，是无状态的。PHP将数据集的增长的责任下放到了存储层，这样就能随心所欲地进行扩展。</p>
<p style="text-indent: 2em;">负载平衡：</p>
<ul>
<li>DNS负载均衡 这是最简单的方法，它是在DNS区域(zone)中为应用程序的域创建不止“一条”记录。 优点：简单，易实现； 缺点：向池中添加和移除机器比较缓慢，无法实现精确控制，不能定制均衡方式</li>
<li>硬件方式的负载均衡 优点：添加和移除机器生效快，能很好的处理故障问题，自动检测自动分流；缺点：价格较贵，可配置性较差</li>
<li>软件方式的负载均衡 通过运行在常规机器上的服务软件来完成负载均衡。应该配置两个或多个进行冗余。</li>
</ul>
<p style="text-indent: 2em;">第四层的负载均衡的形式是使用循环(round robin)算法,并且其高度算法也包含定制的度量值。 第七层的负载平衡器检测包括第七层的消息，检查HTTP请求自身。 对于特定应用领域的大型程序，可能需要把应用的服务划分成一个或者多个透明的集群。 有点类似于树结构。</p>
<p style="text-indent: 2em;">作者在论述Mysql扩展这部分非常精彩，值得多看。包括对Mysql的结构和各个存储引擎的介绍。一些关键点都讲出来了。 Mysql复制有三种方式：</p>
<ol>
<li>三主从复制</li>
<li>从主从复制扩展出来的树状复制</li>
<li>主主复制 对于自增ID的处理比较麻烦，可以考虑将一个表只放在一个库，也可以去掉自增ID. 它有一个不足之处：任何时候都不存在一份“真实的”数据副本。</li>
</ol>
<p style="text-indent: 2em;">复制虽然提供了冗余，提供了扩展，但是它会存在复制失败，复制延迟的情况。当复制延迟时，可以使用同步复制或降低负载，或者自己实现某种技术。 在一定的上下文中可以考虑使用分区扩展。 联合是横向扩展在数据为领域的等价物。</p>
<p style="text-indent: 2em;">存储扩展：考虑合适的文件系统，协议，使用RAID.</p>
<p style="text-indent: 2em;">要为给定的组件提高 性能，可以在它的前端添加一个缓存，以减少请求数。如HTTP协议等都有类似缓存的功能。 缓存可以缓存数据，缓存HTTP请求。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第10章 统计数据、监测与警告</h2>
<p style="text-indent: 2em;">数据来源：服务器日志文件分析、负载平衡器 监控应用程序、监控网络带宽，监控Mysql，监控其它软件，将所有的信息收集后，进行汇总，分析，按照需求定制数据的展示。</p>
<p style="text-indent: 2em;">检查包括资源级别监测，阈值检查，低位检查。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">第11章 APIs</h2>
<p style="text-indent: 2em;">数据订阅源：RSS、RDF、Atom等。</p>
<h1 style="font-weight: normal; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.4em; color: #006ea3; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-bottom: 10px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #aaaaaa;">读后感</h1>
<p style="text-indent: 2em;">总体来说，这是一本务实的书，或者说这是一本讲术的书。 在一定的时间维度里，这本书有较大的阅读价值。</p>
<p style="text-indent: 2em;">读完此书后，它对我的作用如下：</p>
<ol>
<li>理顺了整个WEB应用的开发流程</li>
<li>介绍了一些工具和完善了我的知识体系结构</li>
<li>让我认清了在项目管理和日常中一些工作的意义</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2011/04/building-scalable-web-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python核心编程读书笔记：第4章，Python对象</title>
		<link>https://www.phppan.com/2010/08/core-python-programming-2-chapter4-object/</link>
		<comments>https://www.phppan.com/2010/08/core-python-programming-2-chapter4-object/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 14:44:11 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[程序相关]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=937</guid>
		<description><![CDATA[第四章学习笔记 【4.1 python对象】 1、Python使用对象模型来存储数据。构造任何类型的值都是一个 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>第四章学习笔记<br />
<strong>【4.1 python对象】</strong><br />
1、Python使用对象模型来存储数据。构造任何类型的值都是一个对象。<br />
2、所有的python对象都拥有三个特性：身份，类型和值；这三个特性在对象创建的进修就被赋值了，除了值以外，其它两个都是只读的。但是某些类的类型也是可以改变的。<br />
3、Python使用句点(.)标记法来访问属性</p>
<p><strong>【4.3 其他内建类型】</strong><br />
1、通过调用type()函数你能够得到特定对象的类型信息<br />
2、当使用Python扩展的切片语法时，就会创建切片对象<br />
3、省略对象用于扩展切片语法中，起记号作用<br />
4、xrange()函数是range()的兄弟版本，用于需要节省内存使用或range()无法完成的超大数据集场合</p>
<p><strong>【4.5 标准类型操作符】</strong><br />
1、Python中多个比较操作可以在同一行进行，求值顺序为从左到右</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff4500;">3</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">4</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">7</span> 与 <span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">7</span><span style="color: black;">&#41;</span>相同</pre></td></tr></table></div>

<p>这说明其本质上是多个隐式的and连接起来的多个表达式</p>
<p>2、比较操作是针对对象的值进行的。<br />
3、foo1 = foo2 = 4.3   创建一个4.3的数字对象，然后将这个对象的引用赋值给foo1和foo2，foo1和foo2指向同一个对象<br />
4、Python是通过传递引用来处理对象<br />
5、Python提供了is 和is not 操作符来测试两个变量是否指向同一个对象 如： a is b 等价于 id(a) == id(b)<br />
6、整型和字符串对象是不可变对象，所以Python会很高效的缓存它们，但是在没有任何引用指向它时，这个字符串所占的空间会被回收</p>
<p><strong>【4.6 标准类型内建函数】</strong><br />
1、type()接受一个对象作为参数，并返回它的类型，它的返回值是一个类型对象<br />
2、cmp()用于比较两个对象obj1和obj2。如果是用户自定义对象，cmp()会调用访类的特殊方法__cmp__()。<br />
3、str()和repr()和反引号操作符(&#8220;)可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。<br />
    repr()和&#8220;做提完全一样的事情，它们返回一个对象的“官方”的字符串，绝大多数情况下可以eval()重新得到该对象，而str()致力于生成一个对象的可读性好的字符串表示 。<br />
4、Python不支持方法或函数重载<br />
5、布尔比较总是返回True或False<br />
6、所有的内建类型都是类，在这基础上，所有的所谓内建转换函数都成了工厂函数，虽然它们看上去有点像函数，实质上他们是类。当调用它们时，实际上是生成了该类型的一个实例，就像工厂生产货物一样。</p>
<p><strong>【4.8 标准类型的分类】</strong><br />
1、字符串是一个自我包含的文字类型<br />
2、以存储模型为标准的类型分类，标量/原子类型（数值，字符串）和容器类型(列表，元组、字典)<br />
3、以更新模型为标准的类型分类，可变类型（列表、字典）和不可变类型（数字，字符串，元组）<br />
4、以访问模型为标准的类型分类，直接访问（数字），顺序访问（字符串，列表，元组）和映射访问（字典）</p>
<p><strong>【4.9 不支持的类型】</strong><br />
1、Python的整型实现等同于C语言的长整型<br />
2、Python的浮点类型实际上是C语言的双精度浮点类型 </p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2010/08/core-python-programming-2-chapter4-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python核心编程读书笔记：第二章，快速入门</title>
		<link>https://www.phppan.com/2010/08/core-python-programming-1-chapter2/</link>
		<comments>https://www.phppan.com/2010/08/core-python-programming-1-chapter2/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 00:59:20 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[程序相关]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[读书笔记]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=881</guid>
		<description><![CDATA[第二章学习笔记 【2.1 使用print输出】 print调用str()函数显示对象 print默认在输出的内 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>第二章学习笔记<br />
<strong>【2.1 使用print输出】</strong><br />
print调用str()函数显示对象<br />
print默认在输出的内容后面添加回车，如果不想输出回车，在输出内容后面添加逗号，如果要输出多个内容，使用逗号连接，不过如果带逗号的print语句会在输出的元素之间自动添加一个空格<br />
print与字符串格式操作符（%）结合使用，可实现字符串操作功能（这一点和C语言的printf()函数非常相似）</p>
<p><strong>【2.2 程序输入和raw_input()内建函数】</strong><br />
raw_input读取标准输入，并将读取到的数据赋值给指定的变量，如:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #dc143c;">user</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'please input name'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #dc143c;">user</span>
<span style="color: #008000;">help</span><span style="color: black;">&#40;</span><span style="color: #008000;">raw_input</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Help on built-in function raw_input in module __builtin__:</p>
<p>raw_input(&#8230;)<br />
    raw_input([prompt]) -> string<br />
raw_input从标准输入读取一个字符串并自动删除串尾的换行字符</p>
<p><strong>【2.3 注释】</strong><br />
单行注释： Python使用#符号标示注释，从#开始，直到一行结束的内容都是注释<br />
多行注释：使用三个单引号或双引号<br />
文档注释：<br />
函数内部的第一行开始的字符串为 DocStrings<br />
DocStrings 一般为多行<br />
DocString 为三引号扩起来的多行字符串<br />
第一行为概述<br />
第二行为空行<br />
第三行开始是详细描述<br />
DocStrings 的存在证明了函数也是对象<br />
函数的 __doc__ 属性为该 DocStrings<br />
例如 print printTest.__doc__ 为打印 printTest 函数的 DocStrings<br />
如下所示代码：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
u<span style="color: #483d8b;">&quot;&quot;&quot;文档注释 文档字符串&quot;&quot;&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
__author__ <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;phppan&quot;</span>
__date__ <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;$2010-8-1 17:54:58$&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> printTest<span style="color: black;">&#40;</span><span style="color: #dc143c;">string</span><span style="color: black;">&#41;</span>:
    u<span style="color: #483d8b;">'''
        printTest 函数注释 文档字符串
        注释第二行
    '''</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #dc143c;">string</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;__main__&quot;</span>:
&nbsp;
    printTest<span style="color: black;">&#40;</span><span style="color: #483d8b;">'hello world'</span><span style="color: black;">&#41;</span>
    printTest<span style="color: black;">&#40;</span>__doc__<span style="color: black;">&#41;</span>  <span style="color: #808080; font-style: italic;">#单行注释</span>
    <span style="color: #483d8b;">'''
多行注释
    '''</span>
    printTest<span style="color: black;">&#40;</span>printTest.__doc__<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> __date__
    <span style="color: #ff7700;font-weight:bold;">print</span> __author__</pre></td></tr></table></div>

<p>中文注释问题：<br />
Python里有两种字符串，一种是Unicode字符串，一种是一般的字符串。<br />
Python里字符串的encode函数负责将unicode字符串转化为另外一种Unicode编码形式。<br />
decode函数负责将一般的字符串进行解码，结果为unicode编码。还有一点是unicode（）负责将一般的字符串解码为指定格式的unicode字符串。<br />
如果字符串是这样定义：s=&#8217;中文&#8217;<br />
如果是在utf8的文件中，该字符串就是utf8编码，如果是在gb2312的文件中，则其编码为gb2312。<br />
如果字符串是这样定义：s=u&#8217;中文&#8217;<br />
则该字符串的编码就被指定为unicode了，即python的内部编码<br />
isinstance(s, unicode) #用来判断是否为unicode</p>
<p>print会对输出的文本做自动的编码转换， print转换的目的编码和环境变量有关，Windows XP是转换为gbk的。可以使用用locale模块的getdefaultlocale方法获得当前环境的编码。而print在输出时会把字符串自动转换为这种编码。</p>
<p><strong>【2.4 操作符】</strong><br />
对于一些数据类型，有些操作符是被重载了的，比如字符串和列表<br />
对于不等于操作符，python支持两种 != 和 <>，建议使用 !=<br />
合理使用括号，增强代码的可读性</p>
<p><strong>【2.5 变量和赋值】</strong><br />
类C语言<br />
以字母开头，可以是数字、字母或下划线<br />
大小写敏感<br />
不需要预先声明变量的类型，变量的类型和值在赋值那一刻被初始化<br />
不支持自增1和自减1操作符</p>
<p><strong>【2.6 数字】</strong><br />
Python支持5种数字类型：有符号整形、长整型、布尔、浮点和复数<br />
其中长整型类似于java中的BigInteger类型，它仅受限于用户计算机的虚拟内存总数<br />
decimal类型需要先导入decimal模块才可以使用</p>
<p><strong>【2.7 字符串】</strong><br />
Python中字符串被定义为引号之间的字符集合。Python支持成对的单引号、双引号和三引号<br />
使用索引操作符（{[]）和切片操作符（[:]）可以得到子串<br />
字符串有其我有的索引规则：第一个字符的索引是0(和C语言类似)，最后一个字符的索引是-1<br />
加号（+）用于字符串连接运算 星号（*）用于字符串重复</p>
<p><strong>【2.8 列表和元组】</strong><br />
从0开始索引，可以存储不同类型的对象<br />
列表元素使用中括号（[]）包裹，元素的个数和元素的值都可以改变<br />
元组元素使用小括号（()）包裹，不可以更改，可以看成是只读的列表</p>
<p><strong>【2.9 字典】</strong><br />
字典是Python中的映射数据类型，工作原理类似于Hash表，可以将其作为PHP的数组使用<br />
字典由键值对构成，几乎所有对象都可以用作键，不过一般使用数字或字符串</p>
<p><strong>【2.10 代码块及缩进对齐】</strong><br />
Python通过缩进对齐表达代码逻辑</p>
<p><strong>【2.11 if语句】</strong><br />
if expression:<br />
    if_suite<br />
elif expression2:<br />
    elif_suite<br />
else:<br />
    else_suite</p>
<p><strong>【2.12 while循环】</strong><br />
while expresion:<br />
    while_suite</p>
<p><strong>【2.13 for循环和range()内建函数】</strong><br />
for循环与传统的for循环不同，更像是PHP中的foreach</p>
<p>for eachNum in range(3):<br />
    print eachNum</p>
<p><strong>【2.14 列表解析】</strong><br />
[x ** 2 for x in range(4)]<br />
[x ** 2 for x in range(4) if x ** 2 > 1]</p>
<p><strong>【2.15 文件和内建函数file(),open()】</strong><br />
handle = open(filenaem, mode = &#8216;r&#8217;)  返回一个文件句柄</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">    filename <span style="color: #66cc66;">=</span> <span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Enter file name:'</span><span style="color: black;">&#41;</span>
    fobj <span style="color: #66cc66;">=</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>filename<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> eachLine <span style="color: #ff7700;font-weight:bold;">in</span> fobj:
        <span style="color: #ff7700;font-weight:bold;">print</span> eachLine<span style="color: #66cc66;">,</span>
    fobj.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p><strong>【2.16 错误和异常】</strong><br />
将代码“封装”在try-except语句当中，就可以增加错误检测及异常处理</p>
<p><strong>【2.17 函数】</strong><br />
一个函数的语法由def关键字及紧随其后的函数名，再加上该函数所需要的参数组成<br />
def function_name([arguments]):<br />
    &#8220;optional documentation string&#8221;<br />
    function_suite</p>
<p>函数的参数可以有一个默认值</p>
<p><strong>【2.18 类】</strong><br />
类是面向对象核心，它扮演相关数据及逻辑容器的角色。<br />
定义类：<br />
class ClassName(base_class[es]):<br />
    &#8220;optional documentation string&#8221;<br />
    static_memeber_declarations<br />
    method_declarations</p>
<p>所有名字开始和结束都有两个下划线的方法都是特殊方法<br />
self是类实例自身的引用<br />
当一个类的实例被创建时，__init__()就会被自动调用</p>
<p><strong>【2.19 模块】</strong><br />
模块是一种组织形式，它将彼此有关系的python代码组织到一个个独立文件当中。模块可以包含可执行代码、函数和类，或者这些东西的组合。<br />
导入模块：import module_name<br />
访问模块函数或模块变量：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">    <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'hello'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #dc143c;">sys</span>.<span style="color: #dc143c;">platform</span></pre></td></tr></table></div>

<p><strong>【2.20 实用函数】</strong><br />
dir([obj])  显示对象的属性，如果没有提供参数，则显示全局变量的名字<br />
help([obj]) 以一种整齐美观的形式，，显示对象的文档字符串，如果没有提供任何参数，则会进入交互帮助<br />
int(obj)  将一个对象转化成整形<br />
len(obj)  返回对象的长度<br />
open(fn, mode) 以mode方式打开一个文件名为fn的文件<br />
range([start,]stop[,step]) 返回一个整形列表，起始值为start,结束值为stop -1,start默认值为0，step默认值为1<br />
str(obj)    将一个对象转换为字符串<br />
type(obj)   返回对象的类型（返回值本身是一个type对象）</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2010/08/core-python-programming-1-chapter2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
