??xml version="1.0" encoding="utf-8" standalone="yes"?>
“如果能时光倒流Q回到过去,作ؓ(f)一个开发h员,你可以告诉自己在职业生(dng)初期应该M本, 你会(x)选择哪本书呢Q我希望q个书单列表内容丰富Q可以涵盖很多东ѝ?#8221;
推荐敎ͼ(x)1684
“优秀的编E实늚癄全书Q?a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; ">代码大全》注重个人技术,其中所有东西加hQ?是我们本能所说的“~写整洁的代?#8221;。这本书?0在谈论代码布局?#8221; —— Joel Spolsky
对于新手来说Q这本书中的观念有点高阶了。到你准备阅L书时Q你应该已经知道q实践过书中99%的观c(din)?#8211; esac
Steve McConnell的原作《代码大全?W??是公认的关于~程的最?jng)_跉|南之一Q?在过ȝ十多q间Q本书一直在帮助开发h员编写更好的软g?/p>
现在Q作者将q本l典著作全新演绎Q融入了最前沿的实跉|术,加入了上百个崭新的代码示例, 充分展示了Y件构建的艺术性和U学性?McConnell汇集了来自研I机构、学术界以及(qing)业界日常实践的主要知识, 把最高效的技术和最重要的原理交l融?x)?f)q本既清晰又实用的指南?/p>
无论(zhn)的l验水^如何Q也不管(zhn)在怎样的开发环境中工作Q也无论目是大是小Q?本书都将Ȁ发?zhn)的思维q帮助?zhn)构徏高品质的代码?/p>
?a target="_blank" rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; ">代码大全Q第2版)(j))》做了全面的更新Q增加了很多与时p的内容,包括Ҏ(gu)语言、新的开发过E与Ҏ(gu)论的讨论{等?/p>
推荐敎ͼ(x)1504
对于那些已经学习(fn)q编E机制的E序员来_(d)q是一本卓的书?或许他们q是在校生,但对要自己做什么,q感觉不是很安全?/p>
像草图和架构之间的差别。虽然你在学校课堂上学到的是dQ你也可以画的很漂亮Q?但如果你觉得你不太知道从哪儿下手Q如果某你独自画一个P2P的音乐交换网l图Q那q本书就适合你了?#8212;— Joel
《程序员修炼之道:从小工到专家》内容简介:(x)《程序员修炼之道》由一pd独立的部分组成, 늛的主题从个h责Q、职业发展,知道用于使代码保持灵zRƈ且易于改~和复用的各U架构技术, 利用许多富有׃性的奇闻轶事、有思想性的例子?qing)有的cLQ?全面阐释了Y件开发的许多不同斚w的最?jng)_践和重大陷阱?/p>
无论你是初学者,是有l验的程序员Q还是Y仉目经理,《程序员修炼之道:从小工到专家》都适合你阅诅R?/p>
推荐敎ͼ(x)916
׃言Q这本书目前为止Ҏ(gu)影响醉倒的一本编E书?/p>
《代码大全》、《重构》和《设计模式》这些经怹?x)教l你高效的工作习(fn)惯和交易l节?其他像《h仉》、《计机~程心理学》和《h月神话》这些书?x)深入Y件开发的心理层面?其他书籍则处理算法。这些书都有自己所属的位置?/p>
然而《计机E序的构造和解释》与q些不同?q是一本会(x)启发你的书,它会(x)燃v你编写出色程序的热情Q?它还教?x)你认识q欣赏美Q?它会(x)让你有种敬畏Q让你难以抑制地渴望学习(fn)更多的东ѝ?/p>
其他书或怼(x)让你成ؓ(f)一位更的程序员Q但此书一定会(x)让你成ؓ(f)一名程序员?/p>
同时Q你会(x)学到其他东西Q函数式~程Q第三章Q、惰性计、元~程、虚拟机、解释器和编译器?/p>
一些h认ؓ(f)此书不适合新手?个h认ؓ(f)Q虽然我q不完全认同要有一些编E经验才能读此书Q但我还是一定推荐给初学者?毕竟q本书是写给著名?.001Q是ȝ理工学院的入门编E课E?此书或许需要多做努力(其你在做练?fn)的时候,你也应当如此Q,但这个h(hun)是对得vq本书的?/p>
推荐敎ͼ(x)774
q本书简z易读,?x)教l你三g事:(x)C ~程语言Q如何像E序员一h考;底层计算模型?Q这对理?#8220;底层”非常重要Q?#8212;— Nathan
《CE序设计语言?W?版新?讲述深入出Q配合典型例证,通俗易懂Q实用性强Q?适合作ؓ(f)大专院校计算Z业或非计机专业的C语言教材Q也可以作ؓ(f)从事计算机相兌Yg开发的技术h员的参考书?/p>
《CE序设计语言?W?版新?原著即ؓ(f)C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著?一本介lC语言的权威经典著作?我们现在见到的大量论qC语言E序设计的教材和专著均以此书本?原著W?版中介绍的C语言成ؓ(f)后来q泛使用的C语言版本——标准C的基?/p>
Z熟知?#8220;hello,world”E序是由本书首ơ引入的Q现在,q一E序已经成ؓ(f)所有程序设计语a入门的第一课?/p>
推荐敎ͼ(x)671
《代码大全》教你如何正编E; 《h月神话》教你如何正管理; 《设计模式》教你如何正设?#8230;…
在我看来Q代码只是一个工Pq_N?开发Y件的主要部分是创建新法或重新实现现有算法?其他部分则像重新l装乐高砖块或创?#8220;理”层?/p>
我依然梦惌L(fng)工作Q我的大部分旉Q?gt;50%Q是在写法Q其?#8220;理”l节则留l其他h…… —— Ran Biron
推荐敎ͼ(x)617
《重?改善既有代码的设计》清晰地揭示了重构的q程Q解释了重构的原理和最?jng)_跉|式, q给Z何时以及(qing)何地应该开始挖掘代码以求改善?书中l出?0多个可行的重构,每个重构都介l了一U经q验证的代码变换手法的动机和技术?/p>
《重?改善既有代码的设计》提出的重构准则帮助你一ơ一步C改你的代码,从而减了开发过E中的风险?/p>
《重?改善既有代码的设计》适合软g开发h员、项目管理h员等阅读Q?也可作ؓ(f)高等院校计算机及(qing)相关专业师生的参考读物?/p>
我想我不得不推荐《重构》:(x)改进现有代码的设计?#8212;— Martin
我必L认,我最喜欢的编E语录是q本书:(x)M一个傻瓜都能写机能理解的E序Q?而优U的程序员却能写出别h能读得懂的程序?#8212;— Martin Fowler
推荐敎ͼ(x)617
?995q出版以来,本书一直名列Amazon和各大书店销售榜前列?q?0q后Q本书仍是Addison-Wesley公司2003q最畅销的图书之一?中文版销售?万册?/p>
我而言Q我认ؓ(f)四h帮编著的《设计模式》是一本极为有用的书?虽然此书q不像其他徏议一h?#8220;?#8221;~程Q但它强调封装诸如模式一cȝ优秀~程技术, 因而鼓励其他h提出新模式和反模式(antipatternsQ,q运用于~程对话中?#8212;— Chris Jester-Young
推荐敎ͼ(x)588
在Y仉域,很少能有像《h月神话》一样具有深q媄(jing)响力q且畅销不衰的著作?/p>
Brooks博士Zh们管理复杂项目提供了最h察力的见解?既有很多发hq的观点,又有大量软g工程的实c(din)?本书内容来自Brooks博士在IBM公司System/360家族和OS/360中的目理l验?/p>
该书英文原版一l面世,卛_起业内h士的强烈反响Q后又译为d、法、日、俄中等多种语言Q全球销量数百万册?立了其在行业内的经典地位?/p>
推荐敎ͼ(x)542
《计机E序设计艺术》系列著作对计算机领域生了p的媄(jing)响?q一pd堪称一Ҏ(gu)大的工程Q自1962q开始编写,计划出版7P目前已经出版?南?/p>
《美国科学家》杂志曾这套书与爱因斯坦的《相对论》等书ƈ列称?0世纪最重要?2本物理学著作?目前Knuth正将毕生_֊投入到这部史诗性著作的撰写中?/p>
q是高dU_注心血写的一本书?#8212;— Peter Coulton
推荐敎ͼ(x)462
我很奇怪,居然没h提到龙书。(或许已有推荐Q我没有看到Q?我从没忘q此书的W一版封面?此书让我知道了编译器是多么地奇l妙? DB
推荐敎ͼ(x)445
强大的写作阵宏V?/p>
本书的品设计应用神l生物学、认知科学,以及(qing)学习(fn)理论Q这使得q本书能够将q些知识深深地印在你的脑里Q?不容易被遗忘?/p>
本书的编写方式采用引导式教学Q不直接告诉你该怎么做,而是利用故事当作引子Q带领读者思考ƈ惛_法解决问题?解决问题的过E中又会(x)产生一些新的问题,再l思考、l解决问题,q样可以加深体会(x)?/p>
作者以大量的生zd故事当背景,例如W?章是鸭子Q第2章是气象站,W?章是咖啡店, 书中搭配大量的插?几乎每一都有图)Q所以阅读v来生动有,不会(x)感觉到昏昏欲睡?/p>
作者还利用歪歪斜斜的手写字体,增加“现场?#8221;?_ֿ设计许多爆笑的对白,让学?fn)过E不?x)太枯燥?q有模式告白节目Q将设计模式拟h化成节目来宾Q畅谈其内在的一切?每一章都有数目不{的验题?每章最后有一要Ҏ(gu)理,q也是精华所在,我都是利用这一做复习(fn)?/p>
我知道四人帮的《设计模式》是一本标准书Q但倒不如先看看q部大部_(d)此书更ؓ(f)易?一旦你了解了解了基本原则,可以ȝ四h帮的那本圣经了? Calanus
推荐敎ͼ(x)437
如果下昂真正深入阅读Q我推荐道格拉斯·侯世达(Douglas HofstadterQ的《哥德尔、艾舍尔、巴赫书》?他极为深入研I了E序员每日都要面对的问题Q递归、验证、证明和布尔代数?q是一本很的读物,隑ֺ不大Q偶?dng)有挑战Q一旦你要鏖战到底,是非常值得的?– Jonik
推荐敎ͼ(x)329
l节之中自有天地Q整z成卓代?/p>
管p糕的代码也能运行,但如果代码不整洁Q会(x)使整个开发团队惔xP 写得不好的代码每q都要耗费难以计数的时间和资源?然而这U情况ƈ非无法避免?/p>
著名软g专家RoberfC.Marlin在《代码整z之道》中Z呈现Z革命性的视野?Martin携同ObjectMetltor公司的同事,从他们有xz代码的最x捷实践中提炼Y件技艺的价DQ?以飨读者,让你成ؓ(f)更优U的程序员——只要你着手研诅R代码整z之道》?/p>
阅读《代码整z之道》需要你做些什么呢Q你阅M?#8212;—大量代码?《代码整z之道》促使你思考代码中何谓正确Q何谓错误?更重要的是,《代码整z之道》将促你重新评估自q专业价DQ以?qing)对自己技艺的承诺?/p>
从《代码整z之道》中可以学到Q?/p>
虽然《代码整z之道》和《代码大全》有很多共同之处Q但它有更ؓ(f)z更为实际的清晰例子?– Craig P. Motlin
推荐敎ͼ(x)297
在我职业生(dng)早期QScott Meyer的《Effective C++》和后箋的《More Effective C++》都Ҏ(gu)的编E能力有着直接影响?正如当时的一位朋友所_(d)q些书羃短你培养~程技能的q程Q而其他h可能要花Ҏ(gu)q?/p>
dҎ(gu)影响最大的一本书是《大教堂与市集》,该书教会(x)我很有关开源开发过E如何运作,和如何处理我代码中的Bug?– John Channing
推荐敎ͼ(x)282
多年以来Q当E序员们推选出最心爱的计机图书Ӟ《编E珠玑》L位列前列?正如自然界里珍珠l沙对牡蛎的砺Q计机U学大师Jon Bentley以其独有的洞察力和创造力Q?从磨砺程序员的实际问题中凝结Z篇不朽的编E?#8220;珠玑”Q?成ؓ(f)世界计算机界名刊《ACM通讯》历史上最受欢q的专栏Q?最l结集ؓ(f)两部不朽的计机U学l典名著Q媄(jing)响和Ȁq一代又一代程序员和计机U学工作者?/p>
本书为第一P主要讨论计算机科学中最本质的问题:(x)如何正确选择和高效地实现法?/p>
管我不得不愧地承认,书中一半的东西我都没有理解Q但我真的推荐《编E珠玑》,书中有些令h惊奇的东ѝ?– Matt Warren
本书是《重构》和《重构与模式》之后探讨修改代码技术的又一里程式的著作, 而且从涵盖面和深度上都超q了前两部经典?书中不仅讲述面向对象语言QJava、C#和C++Q代码,也有专章讨论Cq样的过E式语言?/p>
作者将理解、测试和修改代码的原理、技术和最新工P自动化重构工兗单元测试框架、仿对象、集成测试框架等Q, 与解依赖技术和大量开发和设计优秀代码的原则、最?jng)_늛l合Q许多内定w常深入,而且常常发前人所未发?/p>
书中处处体现Z者独到的z察力,以及(qing)多年开发和指导软g目所U篏的丰富经验和深厚功力?通过q部集大成之作,你不仅能掌握最尖的修改代码技术,q可以大大提高对代码和Y件开发的领?zhn)力?/p>
我认为没有Q何一本书能向q本书一样媄(jing)响了我的~程观点?它明地告诉你如何处理其他h的代码,含蓄地教?x)你避免哪些Q以?qing)?f)什么要避免Q? Wolfbyte
同意。很多开发h员讨论用q净的石板来~写软g?但我惛_乎所有开发h员的某些时候是在吃其他开发h员的狗食?#8211; Bernard Dy
q是一本讲q计机工作原理的书?/p>
不过Q你千万不要因ؓ(f)“工作原理”之类的字眼就武断地认为,它是晦ӆ而难懂的?作者用丰富的想象和清晰的笔墨将看似J杂的理论阐q得通俗易懂Q你丝毫不会(x)感到枯燥和生?更重要的是,你会(x)因此而获得对计算机工作原理较深刻的理解?q种理解不是抽象层面上的Q而是h一定深度的Q这U深度甚至不逊于“甉|工程?#8221;?#8220;E序?#8221;的理解?/p>
不管你是计算机高手,q是对这个神奇的机器充满敬畏之心的菜鸟, 都不妨翻阅一下《编?隐匿在计机软硬件背后的语言》,Md师的l典作品Q必然会(x)有收莗?/p>
我推荐Charles Petzold的《编码》?在这个充满工具和IDE的年代,很多复杂度已l从E序员那“抽取”CQ这本书一本开g作?– hemil
Ҏ(gu)影响最大的那本书是 Robert Pirsig 的《禅与摩托Rl修艺术》?不管你做什么事QL要力求完,d了解你手中的工具和Q务,更ؓ(f)重要的是Q?要有乐趣Q因为如果你做事有乐,一切将自发引向更好的结果)(j)?– akr
Demarco ?Lister 表明QY件开发中的首要问题是人,q技术?他们的答案ƈ不简单,只是令h难以|信的成功?W二版新增加了八章内宏V?– Eduardo Molteni
q是一本访谈笔录,记录了当今最具个人魅力的15位Y件先q~程生(dng)?包括DonaldKnuth、Jamie Zawinski、Joshua Bloch、Ken Thompson{在内的业界传奇人物Qؓ(f)我们讲述?他们是怎么学习(fn)~程的,在编E过E中发现了什么以?qing)他们对未来的看法?q对诸如应该如何设计软g{长久以来一直困扰很多程序员的问题谈了自q观点?/p>
一本非常有影响力的书,可以从中学到一些业界顶Uh士的l验Q了解他们如何思考ƈ工作?– Jahanzeb Farooq
虽然q本书可能有点偏题,但不你信不信,q本书曾在计机U学专业评的阅d表之上?一个优U的角色模型,一本有兛_奇心的优U书籍?– mike511
此书W二版教你如何编写漂亮ƈ高效的代码,虽然q是一本Java书,但其中有很多跨语a的理c(din)?– Marcio Aguiar
很奇怪,q没人推?Martin Fowler 的《企业应用架构模式? levi rosol
q两本是LISP的英文书Q尚无中文版?国东北大学|站上也有电(sh)子版?/p>
本书是基于众多商务案例,讲述如何创徏更好的、高客户忠诚度的软g产品和基于Y件的高科技产品的书?本书列D了很多真实可信的实际例子Q说明目前在软g产品和基于Y件的高科技产品中,普遍存在着“隄”的问题?/p>
作者认为,“隄”问题是由q些产品中存在着的高?#8220;认知摩擦”引v的, 而生这个问题的Ҏ(gu)在于C软g开发过E中Ơ缺了一个ؓ(f)用户利益着想的前期“交互设计”阶段?“隄”的品不仅损害了用户的利益,最l也导致企业的p|?/p>
本书通过一些生动的实例Q让Z服地讲述了由作者倡导?#8220;目标导向”交互设计Ҏ(gu)在解?#8220;隄”问题斚w的有效性, 证实了只有改变现有观念,才能有效地在开发过E中引入交互设计Q将产品的设计引向成功?/p>
本书虽然是一本面向商务h员而编写的书,但也适合于所有参与Y件品和Z软g的高U技产品开发的专业人士Q?以及(qing)兛_软g行业和高U技行业现状与发展的人士阅读?/p>
他还有另一本中文版著作Q《About Face 3 交互设计_N?/p>
如果你不是程序员Q阅L书可能会(x)很有,但如果你已经是个E序员,可能?x)有点乏呟?/p>
It is useful regardless operating system you use. – J.F. Sebastian
不管你用什么操作系l,q本书都很有用?– J.F. Sebastian
45个习(fn)惯,分ؓ(f)7个方面:(x)工作态度、学?fn)、Y件交付、反馈、编码、调试和协作?/p>
每一个具体的?fn)惯里,一开始提Z个谬论,然后展开分析Q之后有正队性地提出正确的做法,q设w处地地讲出了正做法给你个人的“切n感受”Q最后列出几条注意事,帮助你修正自q做法Q?#8220;q的艺?#8221;Q?/p>
前面已经提到的很多书都启发了我,q媄(jing)响了我,但这本书每位E序员都应该诅R?它向我展CZ单元试和TDD的重要性,q让我很快上手?– Curro
我不兛_你的代码有多好或优雅?如果你没有测试,你或许就如同没有~写代码?q本书得到的推荐数应该更高些?Z讨论~写用户喜欢的YӞ或既设计q健壮的高效代码Q但如果你的软g有一堆bugQ谈论那些东西毫无意义?#8211; Adam Gent
可用性设计是Web设计中最重要也是隑ֺ最大的一Q务?《点x金-访客至上的网设计秘W(原书W二版)(j)》作者根据多q从业的l验Q剖析用L(fng)心理Q?在用户用的模式、ؓ(f)扫描q行设计、导航设计、主布局、可用性测试等斚w提出了许多独特的观点Q?q给Z大量单、易行的可用性设计的?/p>
本书短小_Q语aL诙谐Q书中穿插大量色彩丰富的屏幕截图、趣味丛生的卡通插图以?qing)包含大量信息的图表Q?使枯燥的设计原理变得qxqh?/p>
本书适合从事Web设计和W(xu)eb开发的技术h员阅读,特别适合为如何留住访问者而苦恼的|站/|页设计人员阅读?q是一本关于Web设计原则而不是Web设计技术的书?/p>
本书作者是Web设计专家Q具有丰富的实践l验?他用q默的语aZ揭示Web设计中重要但却容易被忽视的问题,只需几个时Q?你便能对照书中讲授的设计原则扑ֈ|站设计的症l所在,令你的网站焕然一新?/p>
取决于你所q求的目标?我喜Ƣ《代码大全》是因纯~程Q《点x金》是一本有关UI设计的卓书c?– Justin Standard
1. CI中的controller都应当小写。刚开始ؓ(f)了区分单词,把第二个单词大写了,l果是不认default_controller。事实证明这是错误的。放到l(f)inux下面׃灵了Q应该全部小写,如果你大写了QCI?x)认是libraries里面的东ѝ不怎样都应该全部小写,臛_可以避免linux下区分大写的问题?/span>
2. 分页的问题。CI的官方论坛下提供了一些源代码Q怎样写分函数我׃多说了,可以直接看高手的。关键是传递页面参数的时候,不要忘了修改segment。一开始怎么传都不对Q后来才惌v来我的网址已经是localhost/codeigniter/aaa/bbb/3/10了,q样segment也要相应改变。分参数在W几?后,他就是uri->segment(?。如果是搜烦(ch)之后的分,那么$config['total_rows']׃是count_all了,而是加入where之后的query的记录数。想h倒是有一个问题还没解冻I是在你点search之后Q一般需要用JS把网址转换成CI固有的模式,但是怎样使这个js生成的网址包含到site_url中,我没有解冻I只能手工了(仔细xq是挺简单的呵呵Q自己造网址不用site_urlQ?/span>
3. MVC模式我已l比较适应了。将面都放在view中,控制语句攑֜controller中,而函数放在model中。刚开始有很多人和我一h要在view或者control中加一些语句,只能_(d)不行Q也不规范。最好的办法是写成helperQ如果是数据库的二次调用的话Q可以用inner join合ƈ?/span>
4. htaccess的问题。很多h肯定和我一P一开始接触的时候就是感兴趣怎样可以Lindex.php。虽然网上已l泛滥了Q但是我再写一ơ吧。其实就两个工作Q第一Q在根目录写一?htaccess的文档,W二Q开启apache中的rewrite模块?/span>
1Qhtaccess的写法很多。这是基于你对CI各层目录的安排决定的。我的安排:(x)除了application中的内容外。将其他所有东西放在根目录下的www目录下,其中囄攑֜www/images/下,flash攑֜www/flash/下,xml攑֜www/xml下,js攑֜www/js下。。。。M全堆在www里面。所有views在title下面加上<base href="<?=base_url()?>" />q句话,pȝp识别你的根目录了Q所有链接改成site_url()可以保证\径不?x)出错了。于是,我的htaccess是这L(fng)Q?/span>
RewriteEngine on
RewriteCond $1 !^(index\.php|www|uploadfiles|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L] [L]
W一行是rewrite打开Q第二行是不rewrite的例外,包括index.php本nQwww目录QuploadfilesQ这个参?Q,q有robots搜烦(ch)Q第三行自然是index.php隐藏的rewrite规则了,卛_下的|址׃原来都是localhost/codeigniter/index.php/aaa/bbb的模式,现在可以Lindex.php了。而www下的|址不涉?qing)index.phpQ用不到q个规则Q所以要排除?/span>
2Q首先找到apache下面的http.confQ\径是apache的conf目录下。找到这一行:(x)LoadModule rewrite_module modules/mod_rewrite.soQ将前面?LQ也是说开启这个module。另外需要找到rewrite的目录行Q将AllowOverride讄为AllQ其实就是roadmodule下面的那个directory.
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
3Q在CI的config目录下的config.php中,?config['index_page'] = "index.php"改ؓ(f)$config['index_page'] = “”,q样大功告成啦Q!不用输入index.php也可以访问了。其实更关键的是你的各个目录的\径安排?/span>
5.FCKEditor的问题。应该说我在应用的时候没有遇CQ何麻?ch),除了上传时候的路径让我一好找。我觉得讄成根目录下的/uploadfiles是不错的选择Q当然别忘了在htaccess中把uploadfiles也放在不rewrite的队伍中。因为我现在的习(fn)惯是所有的文g~码都设|成utf-8Q所以网上经常说的ؕ码的现象没有遇到?/span>
基本上就是这些基本的问题了,我做的其实就是简单的企业|站Q没有高U应用,所以也没有遇到更复杂的问题。等考完GT可以试做一个更复杂的网站,和AJAXl合后再写一些心得。下ơ要再做q样的CMSQ后台直接搞定,省了不少旉。而且对于我这L(fng)PHP烂h来说QCI帮我解决了很多安全问题,同时也提高了效率?/span>
有点q度兴奋了,写得乱,我自己都不愿意回q头ȝl检查了Q具体问题可以再联系我,只要我能解答。最后上传一个验证码的helper吧,版权归CI论坛上的同学所有,我只是{一下,Z写一下用法。。?/span>
1Q首先在controller中引用getcode_helper.phpQ?$this->load->helper('getcode');
建立一个function比如
2Q验证码囄链接地址Q?lt;img id="codeimage" src="<?=site_url('controller路径/createcode')?>
3Q表单提交时验证函数Q?/p>
在与许多客户的接触中Q我发现有必要徏立一套SOA的基本原则。下面的部分介lSOA中应有的基本原则。这些ƈ非绝对真理,它们更像一个用于SOA相关讨论的参考框架。你?x)发玎ͼ?x)前四衍生自Don Box提出的四原则,管随着旉的流逝,q四原则的描述可能已经有了些变化?br/> 相关厂商内容
1. 明确边界:服务被调用时Q与实现其功能相关的内容都应被传递过来。对服务的所有访问都应该通过公共接口q行。调用服务时Q非隐含的假设是必须的。“服务与消息紧密联系Q因为参数进出服务的唯一方式是通过消息q行的”?span style="LINE-HEIGHT: 21px; COLOR: rgb(0,0,255)">作ؓ(f)通用的模式,服务调用不应依赖于共享的上下文,而应被作为无状态的模块。契U描qC服务的功能性与非功能性的能力和特点,理着服务提供的接口?span style="LINE-HEIGHT: 21px; COLOR: rgb(0,0,255)">服务调用是一个具有业务逻辑效果的行为,可能有大量的资源开销Qƈ且导致一pd不同于本地方法调用和q程q程调用的错误。服务的调用l非q程q程调用?/span>
服务的用和提供应该可能地单,因此与服务间的交互没必要被隐藏得太多。在SOA中,服务发送和接收的消息、服务契U以?qing)服务本w都应当是最好的构g。这意味着Q例如,被用到的~程模型和工兯应该提供一个APIQ这个API?x)帮助服务的~程人员了解上述概念。ȝ来说Q?span style="LINE-HEIGHT: 21px; COLOR: rgb(0,0,255)">一个明的接口?x)封装服务的内在实现Q而服务通过该接口发布自q功能Q与服务交互是一个具体的行ؓ(f)Q它依赖于服务用者和提供者之间消息的传递?br/>
2. ׃n契约和架构,而不是类:Z一份服务描qͼ一份契U)(j)Q服务用者和服务提供者都可以获得使用或提供服务的全部所需。根据松耦合原则Q服务提供者不能依靠服务用者来重用那些依赖于用者环境的代码。毕竟,服务使用者可能用不同的开发环境和q行环境。这条原则给SOA体系中所能交换的数据加上了严格的限制?span style="LINE-HEIGHT: 21px; COLOR: rgb(0,0,255)">理想的情冉|Q数据以W合一U或多种模式的XML文档形式被交换,因ؓ(f)q种方式可应用于M你能惛_的编E环境?/span>因此Q因条原则在ZDCOM和基于RMI的环境中是不可能被遵守的Q所以这两种环境基本上无法成为SOA的可用选项?br/>
3. {略驱动:Z与服务交互,必须满以下两组不同的要求:(x)
引领U技为?zhn)讲解配?codeigniterQcodeigniter 基本配置信息?application/config/config.php 文gQ本文详l讲解每一个基本配|选项Q从而快速掌?codeigniter q行开发?/span>
(zhn)网站的|址Qcodeigniter ?x)根据这个网址来生成链接、表单地址{?/span>
codeigniter 根目录下?index.php 文g名,codeigniter ?x)用它来生成链接地址。如果用隐?index.php ?URLQ将其设|ؓ(f)I字W串Q?config['index_page'] = ""?/span>
codeigniter 生成 URL 使用的格式,讄为“AUTO”自动探。如果链接不能正常工作,可以试以下|(x)
PATH_INFO、QUERY_STRING、REQUEST_URI、ORIG_PATH_INFO?/span>
codeigniter 产生链接时用的 URL 后缀Q如果要实现伪静态,可以讄 $config['url_suffix'] = ".html"?/span>
codeigniter E序默认使用的语a
codeigniter E序默认使用的字W集
是否启用钩子Q钩子功能得?zhn)可以在不修改pȝ核心文g的基上来改变或增加系l的核心q行功能?/span>
讄扩展 codeigniter cd时用的cd前缀
讄 codeigniter URL 中允怋用的字符Q这是一个正则表辑ּ。当讉K者试图访问的 codeigniter URL 包含其它字符Ӟ?x)得C个警告。应该尽量限?codeigniter URL 使用的字W来提高安全性,可以有效的过滤注入攻凅R如果设|ؓ(f)I,允许使用所有字W,强烈不要q么做?/span>
codeigniter URL 默认使用分段?URLQ此选项也允?codeigniter 开启查询字W串形式 URL。?zhn)可以使用查询字符串来传递要讉K的控制器和函数。例如:(x) index.php?c=controller&m=method。codeigniter 默认使用分段?URLQ查询字W串?URL 很多Ҏ(gu)不被支持?/span>
codeigniter 查询字W串中此选项对应的值当?codeigniter 控制器的名字?/span>
codeigniter 查询字W串中此选项对应的值当?codeigniter 控制器方法的名字
启用错误日志Q设|记录哪些类型的错误?/span>
0 = 关闭错误日志记录
1 = 记录错误信息
2 = 记录调试信息
3 = 记录通知信息
4 = 记录所有信?/span>
如果(zhn)不想用默认的错误日志记录目录配置Qsystem/logs/Q,可以讄完整的服务器目录?/span>
codeigniter 错误日志旉格式
如果(zhn)不想用默认的~存目录Qsystem/cache/Q来存储~存Q可以设|完整的服务器目?/span>
codeigniter 使用的密?/span>
是否对输入数据(GET、POSTQ自动过滤跨脚本d
启用Gzip压羃辑ֈ最快的面加蝲速度
讄旉格式Q?local"?GMT"
如果(zhn)想要用短标记Q但 PHP 服务器不支持Qcodeigniter 可以通过重写短标记来支持q一功能?/span>
如果讉K者通过代理服务器来讉K(zhn)的|站Q?zhn)必须讄代理服务?IP 列表Q以识别问者真正的 IP
EL表达?wbr/>
1、EL?wbr/>
1Q语法结?/font>
${expression}
2Q[]?q算W?/font>
EL 提供.和[]两种q算W来存取数据?/font>
当要存取的属性名UC包含一些特D字W,??{ƈ非字母或数字的符P׃定要使用 []?/font>
例如Q?/font>
${user.My-Name}应当改ؓ(f)${user["My-Name"] }
如果要动态取值时Q就可以用[]来做Q?无法做到动态取倹{例如:(x)
${sessionScope.user[data]}中data 是一个变?/font>
3Q变?/font>
EL存取变量数据的方法很单,例如Q?{username}。它的意思是取出某一范围中名UCؓ(f)
username的变量?/font>
因ؓ(f)我们q没有指定哪一个范围的usernameQ所以它?x)依序从Page、Request、Session?/font>
Application范围查找?/font>
假如途中扑ֈusernameQ就直接回传Q不再l找下去Q但是假如全部的范围都没有找到时Q?/font>
回传null?/font>
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP面中复杂的JAVA代码.
2--EL表达式可操作帔R 变量 和隐式对? 最常用?隐式对象?{param}?{paramValues}.
${param}表示q回h参数中单个字W串的? ${paramValues}表示q回h参数的一l?/font>
?pageScope表示面范围的变?requestScope表示h对象的变? sessionScope表示?x)?/font>
范围内的变量.applicationScope表示应用范围的变?
3 --<%@ page isELIgnored="true"%> 表示是否用EL语言,TRUE表示止.FALSE表示不禁
?JSP2.0中默认的启用EL语言.
4-- EL语言可显C?逻辑表达式如${true and false}l果是false 关系表达式如${5>6} l?/font>
果是false 术表达式如 ${5+5} l果?0
5--EL中的变量搜烦(ch)范围?page request session application 点运符(.)?[ ]"都是
表示获取变量的?区别是[ ]可以昄非词cȝ变量
2、EL隐含对象
1)与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下四个QpageScope、requestScope、sessionScope ?/font>
applicationScopeQ?/font>
它们基本上就和JSP的pageContext、request、session和application一P
在EL中,q四个隐含对象只能用来取得范围属性|即getAttribute(String name)Q却不能取得
其他相关信息?/font>
例如Q我们要取得session中储存一个属性username的|可以利用下列Ҏ(gu)Q?/font>
session.getAttribute("username") 取得username的|
在EL中则使用下列Ҏ(gu)
${sessionScope.username}
2)与输入有关的隐含对象
与输入有关的隐含对象有两个:(x)param和paramValuesQ它们是EL中比较特别的隐含对象?/font>
例如我们要取得用L(fng)h参数Ӟ可以利用下列Ҏ(gu)Q?/font>
request.getParameter(String name)
request.getParameterValues(String name)
在EL中则可以使用param和paramValues两者来取得数据?/font>
${param.name}
${paramValues.name}
3.其他隐含对象
1)cookie
JSTLq没有提供设定cookie的动作,
例:(x)要取得cookie中有一个设定名UCؓ(f)userCountry的|可以使用${cookie.userCountry} ?/font>
取得它?/font>
2)header和headerValues
header 储存用户览器和服务端用来沟通的数据
例:(x)要取得用h览器的版本,可以使用${header["User-Agent"]}?/font>
另外在鲜机?x)下Q有可能同一标头名称拥有不同的|此时必须改ؓ(f)使用headerValues 来取?/font>
q些倹{?/font>
3)initParam
initParam取得讑֮web站点的环境参?Context)
例:(x)一般的Ҏ(gu)String userid = (String)application.getInitParameter("userid");
可以使用 ${initParam.userid}来取得名UCؓ(f)userid
4)pageContext
pageContext取得其他有关用户要求或页面的详细信息?/font>
${pageContext.request.queryString} 取得h的参数字W串
${pageContext.request.requestURL} 取得h的URLQ但不包括请求之参数字符?/font>
${pageContext.request.contextPath} 服务的web application 的名U?/font>
${pageContext.request.method} 取得HTTP 的方?GET、POST)
${pageContext.request.protocol} 取得使用的协?HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新?/font>
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得L端的服务信息
4) 条g标签>
1.术q算W有五个Q?????或div?或mod
2.关系q算W有六个Q?=或eq?=或ne?lt;或lt?gt;或gt?lt;=或le?gt;=或ge
3.逻辑q算W有三个Q?amp;&或and、||或or?或not
4.其它q算W有三个QEmptyq算W、条件运符?)q算W?/font>
例:(x)${empty param.name}?{A?B:C}?{A*(B+C)}
5) EL函数(functions)
语法Qns:function( arg1, arg2, arg3 ? argN)
其中ns为前|名U?prefix)Q它必须和taglib 指o(h)的前|名UC|?/font>
6) 补充Q?/font>
<%@ taglib prefix="c" http://java.sun.com/jstl/core_rt">http://java.sun.com/jstl/core_rt
FOREACH:
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
…?/font>
</c:forEach>
OUT:
<c:out value="/${logininfo.username}"/>
c:out>value 中的内容输出到当前位|,q里也就是把logininfo 对象?/font>
username属性D出到面当前位置?/font>
${……}是JSP2.0 中的Expression LanguageQELQ的语法。它定义了一个表辑ּQ?/font>
其中的表辑ּ可以是一个常量(如上Q,也可以是一个具体的表达语句Q如forEach循环体中
的情况)(j)。典型案例如下:(x)
? ${logininfo.username}
q表明引用logininfo 对象的username 属性。我们可以通过?”操作符?/font>
用对象的属性,也可以用“[]”引用对象属性,?{logininfo[username]}
?{logininfo.username}辑ֈ了同L(fng)效果?/font>
“[]”引用方式的意义在于Q如果属性名中出CҎ(gu)字符Q如?”或者?”,
此时必M用“[]”获取属性g避免语法上的冲突Q系l开发时应尽量避?/font>
q一现象的出玎ͼ(j)?/font>
与之{同的JSP Script大致如下Q?/font>
LoginInfo logininfo =
(LoginInfo)session.getAttribute(“logininfo?;
String username = logininfo.getUsername();
可以看到QEL大大节省了编码量?/font>
q里引出的另外一个问题就是,EL 从哪里扑ֈl(f)ogininfo 对象Q对?/font>
${logininfo.username}q样的表辑ּ而言Q首先会(x)从当前页面中L之前?/font>
否定义了变量logininfoQ如果没有找到则依次到Request、Session?/font>
Application 范围内寻找,直到扑ֈ为止。如果直到最后依然没有找到匹配的
变量Q则q回null.
如果我们需要指定变量的L范围Q可以在EL表达式中指定搜寻范围Q?/font>
${pageScope.logininfo.username}
${requestScope.logininfo.username}
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
在Spring 中,所有逻辑处理单元q回的结果数据,都将作ؓ(f)Attribute 被放
|到HttpServletRequest 对象中返回(具体实现可参见Spring 源码?/font>
org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributesҎ(gu)的实C码)(j)Q也是说Spring
MVC 中,l果数据对象默认都是requestScope。因此,在Spring MVC 中,
以下dҎ(gu)应慎用:(x)
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
? ${1Q?}
l果辑ּ计算l果Q即整数??/font>
? ${i>1}
如果变量值i>1的话Q将q回boolcdtrue。与上例比较Q可以发现EL?x)?/font>
动根据表辑ּ计算l果q回不同的数据类型?/font>
表达式的写法与java代码中的表达式编写方式大致相同?/font>
IF / CHOOSE:
<c:if test="${var.index % 2 == 0}">
*
</c:if>
判定条g一般ؓ(f)一个EL表达式?/font>
<c:if>q没有提供else子句Q用的时候可能有些不便,此时我们可以通过<c:choose>
tag来达到类似的目的Q?/font>
<c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
!
</c:otherwise>
</c:choose>
cMJava 中的switch 语句Q?lt;c:choose>提供了复杂判定条件下的简化处理手法。其
?lt;c:when>子句cMcase子句Q可以出现多ơ。上面的代码Q在奇数行时输出?”号Q?/font>
而偶数行时输出?”?/font>
l验Q?、如果EL表达式无法解析:(x)?<%@ page isELIgnored="false" %>
一?nbsp; JSTL
1、ELq算W?gt;;
2)var指定变量Qƈ把ELq算l果赋值给该变量gؓ(f)true/falseQ?/font>
3Qscope:指定 var变量的范_(d)
6、P代标{?/font>
语法Q?lt;c:forEach items=“collection?var=“name?varStatus=“status?begin=“int?/font>
end=”int?step=“int?>
//循环?/font>
</c:forEach>
说明:1)items:是集合,用EL表达式;
2)var:变量名,存放items
3)varStatus: 昄循环状态的变量
①index:?开?
②count:元素位置,?开?
③first:如果是第一个元素则昄true;
④last:如果是最后一个元素则昄true;
4)begin:循环的初始?整型)Q?/font>
5)end: 循环l束 ;
6)step:步长,循环间隔的数|
7?lt;c:otherwise>标签
例:(x)
如果user.wealthy值trueQ则昄user.wealthy is true.
<c:choose>
<c:when test="">
user.generous is true.
</c:when>
<c:when test="">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose>
说明Q只有当条guser.generousq回值是trueӞ才显Cuser.generous is true.
只有当条件user.stingyq回值是trueӞ才显Cuser.stingy is true.
其它所有的情况Q即user.generous和user.stingy的值都不ؓ(f)trueQ全部显Cuser.generous and
user.stingy are false.
׃JSTL没有形如if (){…} else {…}的条件语句,所以这UŞ式的语句只能?lt;c:choose>?/font>
<c:when>?lt;c:otherwise>标签共同来完成了?/font>
8、c:forTokens>标签
说明Q?nbsp;
items q行循环的项???/font>
delims 分割W???/font>
begin 开始条??0
end l束条g ?集合中的最后一个项?/font>
step 步长 ?1
var 代表当前目的变量名 ??/font>
varStatus 昄循环状态的变量 ??/font>
例子:
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
q个标签的用相当于java.util.StringTokenizercR在q里字W串a:b:c:d以:(x)分开循环四次Q?/font>
token是@环到当前分割到的字符丌Ӏ?/font>
9?lt;c:redirect>标签
说明Q标{ְh重新定向到另外一个页面,它有以下属?属??q?是否必须 ~省?/font>
url url地址 ??/font>
context /后跟本地web应用E序的名??当前应用E序
例子Q?/font>
<c:redirect /'>http://www.yourname.com/login.jsp"/
请求重新定向到
("
10?lt;c:param>标签
说明Q?lt;c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性属 ??q?是否
必须 ~省?/font>
name 在request参数中设|的变量???/font>
value 在request参数中设|的变量???/font>
例子Q?/font>
<c:redirect url="login.jsp">
<c:param name="id" value="888"/>
</c:redirect>
参?88以id为名字传递到l(f)ogin.jsp面Q相当于login.jsp?id=888
11?lt;fmt:>格式化标{?/font>
说明Q需要导?nbsp; <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt
1Q格式化日期<fmt:formatDate value=“?pattern=“yyyy-MM-dd HH:mm:ss?>
Value:通过EL表达式或<%new Date() %> 取的日期|
Pattern:输出的日期格式;
2) 格式化数?lt;fmt:formatNumber
value="${n}" pattern="###,###.##" />
1.你可以打开一个窗口然后点击,工具—文件夹选项—查看—显C所有文件夹
选择所要文Ӟ右键属性,“隐藏”前面的勑֎掉就可以?br/> q有另外一U方法,是在开?E序-附g-命o(h)提示W下用dir -a 查看可以看见隐藏的文gQ?br/> 然后你再用Attrib -s -h -r “\径和文g名”其?s 表示减去pȝ属?-h 表示减去隐藏属?-r 表示减去只读属性?br/> 另外你如果愿意的话还可以为文件加上以上的属??号变?号就可以了?/font>
2.选择“工具→文g多w项→查看→昄所有文件和文g夹”,点确定。本来应该就把隐藏的文g昄出来的,但是隐藏的文件ƈ没有昄出来Q重复上ơ操作发现“查看”中“隐藏文件和文g夹”一栏中它自动又跳ؓ(f)“不昄隐藏文g和文件夹”这让我很苦|因ؓ(f)我因此找不到我所有已l设|ؓ(f)隐藏的文件…?/font>
解决Ҏ(gu)有三Q?br/> a.
q行regeditQ找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]Q将CheckedValue的值改?
b.
下面的内容复制到记事本Q保存ؓ(f)reg的注册表信息文gQ然后双d入:(x)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30500"
"Type"="radio"
"CheckedValue"=dword:00000001
c.
如果操作后还是无法显C隐藏文Ӟ可以复制下列内容到记事本中,另存Z个reg文gQ然后双击运行即可?/font>
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\NOHIDDEN]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30501"
"Type"="radio"
"CheckedValue"=dword:00000002
"ValueName"="Hidden"
"DefaultValue"=dword:00000002
"HKeyRoot"=dword:80000001
"HelpID"="shell.hlp#51104"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30500"
"Type"="radio"
"CheckedValue"=dword:00000001
"ValueName"="Hidden"
"DefaultValue"=dword:00000002
"HKeyRoot"=dword:80000001
"HelpID"="shell.hlp#51105"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden]
"Type"="checkbox"
"Text"="@shell32.dll,-30508"
"WarningIfNotDefault"="@shell32.dll,-28964"
"HKeyRoot"=dword:80000001
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"ValueName"="ShowSuperHidden"
"CheckedValue"=dword:00000000
"UncheckedValue"=dword:00000001
"DefaultValue"=dword:00000000
"HelpID"="shell.hlp#51103"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden\Policy]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden\Policy\DontShowSuperHidden]
@=""
说明Q?br/> 选项 CheckedValue 的值改?0 然后再将pȝ属性设|成不显C隐藏文Ӟq样Q你隐藏的文件就d隐藏了,即昄全部文gQ你隐藏的文件也不会(x)昄的。不仅如此,?sh)脑里面所有隐藏文件将全部不被昄。如果需要显C,只要选项 CheckedValue 的值改?1 Q再系l属性设|成昄全部文g卛_?/font>
3.问题Q?br/> 我用的是Windows2000pȝ,我把"文g多w项"中的"查看"设ؓ(f)"不显C隐藏的文g和文件夹"??sh)脑上隐藏的文g反而能看见,设ؓ(f)"昄所有文件和文g??q些文g反而隐藏了,q是怎么回事?
解决Q?br/> 在运行中输入regedit,打开注册表编辑器.定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\NOHIDORSYS,CheckedValue讄?Q再定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL,CheckedValue讄?卛_?/font>