java 特种兵笔记:论道

时间:2014-11-20 01:28:35   收藏:0   阅读:373

感悟:

  1. 变通:让标准变成价值,给你一种思想和标准,你可以有不同的使用,不能死扣定理,我们需要解决问题!
  2. 看书:分两类,一类根据知识点进行罗列,而且结构清晰,可以看完一章有选择进行总结(不是笔记,总结是带有自己理解的),一类是零乱但是重要,需要边看边划出重要点(重要点是你还未遇到的坑或者知识点),然后看完一章进行总结。
  3. 千万不要坚定地认为什么方式快,什么方式慢,一定要讲究场景。(存在即合理)
  4. 一切在于场景与需求,十分需要,但也可以在某些情况下放弃。(性能,优化)
  5. 变化都是使用简单的基础知识加以变通的结果,这种变化是十分多的(万变不离其宗)
  6. 算法<-->生活,一一对应,如查找和排序想想学校里面排队,找人是怎么做的,把能想到的不同的手段联系到相应的方法(所有的算法来自于生活,而且没有生活那么复杂,即使是多线程技术也能在生活中找到活生生的例子)
  7. 算法:无论多么复杂,总能在实际生活中找到逻辑背景。在这种前提下,只要深度挖掘业务背景,就可以在基础算法之上进行灵活扩展。
  8. 思维横向扩展,思维发散扩展。
  9. 无论去做基础程序还是去做优化,都需要深知它的细节,才能做到心中有数。
  10. 重复制造:在了解了底层后我们需要提升知识面,知道哪些是别人提供的,哪些是需要我们自己写的。(java第三方包及工具类:我们应当知道有许多别人写的工具包可以直接拿来使用,以及如何寻找这些工具包,基础知识可以帮助我们快速学习新的工具包,以及掌握它的本质)
  11. 源码:主要目的是看懂意思和知道它的坑。
  12. java:希望将一些复杂的逻辑细节封装在工具中,能让代码尽量干净,整洁,容易维护。代码不干净在许多地方出现大量不干净的代码需要修改则要到许多地方修改,很多时候我们不知道去哪里修改,这些代码会让我们不停在技术和业务之间切换,没法专心做好业务细节,更没法深度挖掘业务。技术本身是在业务驱动下才能发挥作用的,而人在业务驱动下去学习技术能得到最佳实践。
  13. 第三方包:大公司使用的工具包正确性和性能是经过很多公司验证的,如果有问题大家都会知道。注重功底的基础上也需要大量的学习,铺开知识面,才能有选择,但:深知内在细节是我们量化选择的条件。
  14. 冗余:不是所有的工具包都能完全满足需求,这个工具包满足一部分需求,那个工具包满足一部分需求,而将这些工具包组合起来比自己写一个还蛮烦,还会有一大堆冗余,此时可以考虑扩展了。
  15. 个性化问题:每个场景都会有一些变化,开源的工具包是提供一些通用的处理,同时提供一种Java封装思想,许多代码也值得我们去参考,因此当遇上个性化问题时,并非没提供就不写了,需要深知所设计领域的业务和个性化,,这样才能对业务做出一个很爽的架构体系。

技术:
  1. 算法的基础是建立在数字的基础之上,只有数字才能真正完成计算和对比操作(如对象的hashCode()方法)。
  2. 其实数据库也离不开这些原理,大多数数据库的索引都会用换汤不换药的B+树(当然也有使用Hash算法),此思想是平衡二叉树的一种扩展。sql—》查找和排序算法
  3. 操作符:不同的运算有多种实现方式,越接近底层越快(| & ^)
  4. 为提升整体工作效率和节约资源,能提前做的事情就提前做(编译时优化)
  5. 懂得站在他人地角度和场景看待事物的不同侧面,加以推导,结合别人的意见和建议,就有机会知道真相。(如果我是语言的作者,我会如何设计?再结合提供验证,本质,文档,共同引导我们知道真相)
  6. 编译阶段能确定的内容只能来自于常量池,new出来的对象是运行时决定的。(intern()运行步骤流程,和equals()效率对比,intern()将对象保存在常量池中,使得==更快速,而不用equal()比较节约时间,原来new出来的对象和比较的对象不是同一个,所以不能用==比较,需要使用intern()将对象存入常量池,比较就可以用==,类比Integer int a = 10; Integer int b =10; a = b;a和b同为对象,但保存在常量池中就可以用==比较内存地址比equals()更快)
  7. String扩容的条件,与StringBuilder的区别,+操作符的优化。
  8. 知道什么时候会自动拆装箱,它简化了代码,但是并不是让我们一无所知。(通过源码学习)(如何调节拆装箱参数,如何避免自己写的代码频繁拆装箱)

道:
  1. 古人云:心有灵犀一点通,深深地了解技术以及它的内在。学习基础的武功,再学习任何武学都很快,内在修为将会决定你在技术这条道路上能走多远。
  2. 知其然并知其所以然:由知识引导思维,由思维引导答案,由结果印证理论,不断迭代的过程。在这个过程中对问题的认识会越来越清晰,自然在见解上越来越有道理,同时也会对自己所在的领域充满信心。
  3. 很多技术源自生活。
  4. Bug:正所谓我们不怕犯错误,怕的是不知道什么是错,更怕的是我们一直坚信正确的事竟然是错的。
  5. 测试:测试场景是不能作为真理来指导开发的,最多只能指导同样的场景下的开发(测试可以帮助我们去理解本质,以及知道本质后它是一个印证的过程)。
  6. 本质:知道了内在,知道了常规算法,知道了生活中对应的方法,我们发现它并不是那么难,关键是你是否愿意去看它的本质。
  7. 过于看中技术本身,过分仰望技术本身,学海无涯,你需要放下才能找到新的方向。
  8. 静心:功底并非天高,任何人只要静心都能行。
  9. 总结:学习后一定要落实于根本,回顾与总结,什么都想要去学习,结果学了就丢了,没有自己知识的凝固,没有自己的总结和笔记。(总结应该包含自己的理解和感受,应当能阐述学习和理解过程中的痛苦)
  10. 不是每天都要去总结(浪费时间,要不就是小总结),如果非常忙没必要(如果看到一篇比较好的文章,可以先初步看看内容,把它记录下来,写到总结中表示想要去学习的内容,等闲暇之余总结或许更好)
  11. 总结技术:技术领域你可以总结思路,总结所学所用,总结遇到的问题,总结为什么,总结解决问题的手段和方法,分析问题和定位问题的思路,总结在解决问题时所用的知识,总结技术点上是否还有相关的方案,以及对比相关知识的优缺点。
  12. 总结业务:业务上总结自己最近最近做过什么,那些是大事还是小事,自己所做的事情和几个月前比提高没有,效率上提升没有,时间安排如何,如果加班太多能否不加班,自己的工作效率是否可以进一步提升,以及如何提升,通过技术完成某些自动化还是基于时间管理来更合理地安排自己,未来几个月准备或希望去做什么样的事情,是否有能力去参与更重要的职责。
  13. 工作与学习:工作本身就是一种学习,更偏重于实践,基于工作学习一个新知识更快一些,大多在使用层面,当遇上一些稀奇古怪的问题,就要去看看内在的原理,此时去看看源码。这样碎片化的学习方式其实也是积土成山的过程,达到一定程度自然是量变引起质变,此时去翻看牛人秘籍知识知识梳理的过程。
  14. 立足当下:需要立足于当下业务,尽自己所能去挖掘,通过业务细化驱动技术的发展,尽我们所能广泛联系知识,整个学习是一个迭代的过程,功底是逐步提升的。
  15. 自信:学会相信自己,有信心去面对困难。(拥有面对逆境的心态和战胜困难的决心)
  16. 面对别人提出质疑:第一反应是看你的内心世界是否足够强大。也许在这个时候我们可以看看别人是如何修身养性的,别人能做到,我们同样能够做到。
  17. 问题:代码有问题,我们就看原因,不论是不是自己的问题都要告诉真正的原因。有问题没关系,我们不怕犯错误,而是怕错了不改,反反复复犯同样的错误,可能还是同样低级的错误。如果反反复复有人提出同样的问题,而且绝大多数不是自己的问题,可以以文档的形式呈现出来,代码不是我们写的,使用者通常不知道所有的细节。
  18. 乱搞:结果就是东西越多,问题就越多,做一件事情来解决问题,但是带来了更多的问题。
  19. 冷静面对事情的真相:客观面对我们所面临的事情,加上业务本身的熟悉程度,技术功底的配合,冷静思考,量化的判断,全局性影响的分析,逐步突破层层技术和业务难关,可以很酷解决绝大部分问题。
  20. 经验:只要是代码,肯定就会存在Bug,只有看到这类问题的本质,才能在遇到类似问题时去定位判断,而不是直接使用前人总结出来的经验解决问题。随着技术的发展,经验也会变得不靠谱。(经验可以用来借鉴和参考,但经验不能用来当饭吃,同时别人告诉你的是他的经验,也同样是一种参考和借鉴,我们要学会去看问题本质的方法和习惯)
  21. 框架:前一件东西还没掌握,新的又来了:需要方法,需要功底,懂得它的根本和发展的方向和模式,基本就知道它要做什么了,也基本知道会怎么做了,自己也可以实现,知识没有必要而已。开源软件常见的参数不会太多,当你知道它的根本:通过命令和文档查询时非常快速的,学习的代价不应该太大。
  22. 坑:我们应当”站在别人的肩膀上看问题,不仅仅是要沿用前人写好的东西,更需要看到他们所遇到的那些坑“。新一代的程序员不必都经历上一代程序员所经历的同样的坑,那样只是延续,而没有任何发展。新一代程序员即使要经历坑,也是经历一些更新的坑,去挖掘更新的东西,而不是走老路。

学习方法:
       每个人在不同的阶段应当有不同的学习方法,不能一概而论:多看,多练,多思考,多练习,多总结。

原文:http://blog.csdn.net/coslay/article/details/41291229

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!