`
田智伟
  • 浏览: 204045 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java入门

 
阅读更多

        昨天面试被人BS,虽然心中有无限怨念,不过本屌丝本着做好自己让暴风雨来的更猛烈一些的理想(好吧,我承认有点凌乱了),如今java的正式发行版已经到了1.7,不得不承认我们很多代码的编写还停留在1.4及以前时代,面试官面试中还问到了我有没有使用HahsTable,我果断说没有使用,对方就开始不屑了,其实我的全局变量都在使用ConcurrentHashMap 

       你很容易遇到一个你跟他说hadoop,他跟你讲java基础,你跟他讲框架他跟你讲IO,你跟他讲IO他跟你讲变态的人,为了让自己的更健壮,我决定认认真真复习一遍基础。

今天就从java入门开始,第一讲《java编程思想》(第四版),不得不说很多东西老人说得很有道理“温故而知新”,平时写代码考虑最多的是实现功能,优雅不优雅考虑的倒是不多,看看基础,倒是有心思回顾以前的一些设计,就像并发陷阱都知道,其实写代码的时候却很少注意,也许是功能搞定了,才回去考虑,继承跟组合关系也是一样,多态的使用,action中get和post的选择。就拿get和post方法来说,其实就设计初衷而言get方法本身是不建议对后端有变更的,比如增删改就不建议通过get方法来处理,为什么?约定,你也许看见约定就觉得有点像英语老师回答你为什么老外要这么讲一样,可是代码就是这样必要的约定可以成为一种交流沟通的途径,可是很多时候不得不说我在除了文件上传下载,很多时候这两个都在混用,估计很多专业的人看见我这么搞,估计就像我当年看见有人在java代码属性命名中使用大量的下线一样不舒服。

今天拿着《java编程思想》(中文哦)从第一页看起,这本书除了翻译本身看着有点费劲以外沉下心,还是有些不少收获的诚如他名字所言,也许你已经api高手了,不过像我一样的也不在少数,api一堆,用的好的却不见得,用的明白的大多也都停留在api的汉语翻译上边了,底层思想可能还是有些欠缺啊。

 

好了,该扯扯书的内容了,一开始还是老外的套路,有点八股,对书中的涉及到的内容作一些基本介绍,前几版的区别,外加一堆感谢,不过没有优先感谢国家是有点不对了。总之都是跟知识关系不大的东西,也算是老外式的开胃菜了。

 

“万物皆对象”这个算是一种宣传,当然了对于开发人员来说也就意味着一种约定,一种思维方式的约定,不得不说自己写的很多代码还是很有结构编程的影子,很多时候类名就只是个标记,我关心的只是内部的方法,如果你觉得没问题,那么就说明你跟我还是一个级别,OOP(面向对象)本身就是要你从一个大局去考虑,然后逐步细分,而要是一上来就从加减法开始,那就注定你最后得代码要沦为被人唾弃的对象了。尤其是在你真正领略到了多态的精髓的时候你就明白了,接口个人的感觉就是更像是一种契约,上层应用只要拿到契约就OK了,本着诚信原则,底层承诺兑现契约,当然是惊喜还是失望就不保证了,至少每一条都会有的。

谈到继承跟组合,个人感觉跟倾向于组合,首先能保证安全性(前提是你明白这里需要注意安全性),能够做到良好的封装,个人推荐多使用组合关系少使用继承关系,除非有很强的父子关系,或者有写其他需求。

 

非面向对象编程的编译器产生的函数调用会引起所谓的“前期绑定”,即编译器将产生对一个具体函数的调用,而运行时将这个调用解析到将要被执行的代码的绝对地址,OOP程序知道运行时才能确定代码的地址,所以就有了“后期绑定”,也就是执行代码的地址知道运行的时候才能确定。java中为了实现“后期绑定”,在编译期使用一段代码通过对象中存储的信息来计算方法体的地址

 

0
8
分享到:
评论
5 楼 田智伟 2012-09-22  
wuliaolll 写道
田智伟 写道
wuliaolll 写道
其实问api问不出什么所以然,对照着文档一看就了然。可掌握思想是要一定功底的,可现在往往有很多人认为自己做过几个项目,熟悉几个api就很牛了。

前天面试一个号称N年经验而且还是带项目的人,好吧,既然这么牛,就问问他项目整体把握,框架搭建等等,说半天没有说出什么实质的东西,问他项目中用到了哪些设计模式,一个都答不出来……让我深深地怀疑他的基础,果不其然,问几个java多线程基础就答不出来了;他还说项目中全是用spring,又问他什么是ioc,什么是aop,答不出来……问他ajax如何用spring mvc返回json,他答out.write()……

其实说到底也还是out.write(),只不过在写之前通过比较规整的方式先把对象转成了json对象,完事再把json作为string输出,要是不是很复杂的json,直接输出感觉效率上可能还快一些



倒不是你说的侧重点,这事谁都懂,但如果你是用一个框架,既然说自己对框架很熟,一起起码的提高开发效率的特性得懂吧。用框架现成的东西最主要是带来开发上的效率,同时对后期代码的维护有利,一堆的out.write,你觉得后期要修改一些字段容易吗?这个还是用框架现在的东西容易些吧,开发有时不能完全看程序的运行效率,要从代码维护、开发效率、运行效率上来个折中。

这个回复功能真心蛋疼,也不知道他们怎么搞成这个样子,占空间,还麻烦~,你说的跟我的想法也不谋而合,之前又一次公司分享,有些团队了项目结构,经常会把dao层的DO对象在c层通过copy搞成VO对象,个人感觉不少人的工作可能还是停留在,用什么,抄什么的方式上面,就说spring,很多人往往不是说某一块精通,可能很多时候还是停留在用到了,找现成代码抄一抄的层面上面,更说不上实现原理的精通了。好抄代码而不求甚解。做经理的估计就更不好说了,之前有面试过好几次,虽然我水平一般般,不过还是有点像一个笑话说得那样“今天面试了一个java的,我问了三个问题,对方问了我一个问题,直接说不来了”。有时候面试双方都有些放不开,倒是有时候有点辞不达意,双方都没理解对方要问什么,又一次有人问我了解“collection”不?我就蒙了,你说的是“jdbc的connection?”,“不是”,“那我就不知道了”,回头一想“难道人家想问我的是集合类?”,最后有想象,不会这么低级别吧?不过能问我“hashtable”的人问这个一点都不稀奇,但是很能说明问题的就是,面试双方辞不达意很正常,我觉得好的面试应该是坐下来慢慢聊的。
4 楼 wuliaolll 2012-09-20  
田智伟 写道
wuliaolll 写道
其实问api问不出什么所以然,对照着文档一看就了然。可掌握思想是要一定功底的,可现在往往有很多人认为自己做过几个项目,熟悉几个api就很牛了。

前天面试一个号称N年经验而且还是带项目的人,好吧,既然这么牛,就问问他项目整体把握,框架搭建等等,说半天没有说出什么实质的东西,问他项目中用到了哪些设计模式,一个都答不出来……让我深深地怀疑他的基础,果不其然,问几个java多线程基础就答不出来了;他还说项目中全是用spring,又问他什么是ioc,什么是aop,答不出来……问他ajax如何用spring mvc返回json,他答out.write()……

其实说到底也还是out.write(),只不过在写之前通过比较规整的方式先把对象转成了json对象,完事再把json作为string输出,要是不是很复杂的json,直接输出感觉效率上可能还快一些



倒不是你说的侧重点,这事谁都懂,但如果你是用一个框架,既然说自己对框架很熟,一起起码的提高开发效率的特性得懂吧。用框架现成的东西最主要是带来开发上的效率,同时对后期代码的维护有利,一堆的out.write,你觉得后期要修改一些字段容易吗?这个还是用框架现在的东西容易些吧,开发有时不能完全看程序的运行效率,要从代码维护、开发效率、运行效率上来个折中。
3 楼 田智伟 2012-09-18  
wuliaolll 写道
其实问api问不出什么所以然,对照着文档一看就了然。可掌握思想是要一定功底的,可现在往往有很多人认为自己做过几个项目,熟悉几个api就很牛了。

前天面试一个号称N年经验而且还是带项目的人,好吧,既然这么牛,就问问他项目整体把握,框架搭建等等,说半天没有说出什么实质的东西,问他项目中用到了哪些设计模式,一个都答不出来……让我深深地怀疑他的基础,果不其然,问几个java多线程基础就答不出来了;他还说项目中全是用spring,又问他什么是ioc,什么是aop,答不出来……问他ajax如何用spring mvc返回json,他答out.write()……

其实说到底也还是out.write(),只不过在写之前通过比较规整的方式先把对象转成了json对象,完事再把json作为string输出,要是不是很复杂的json,直接输出感觉效率上可能还快一些
2 楼 wuliaolll 2012-08-24  
其实问api问不出什么所以然,对照着文档一看就了然。可掌握思想是要一定功底的,可现在往往有很多人认为自己做过几个项目,熟悉几个api就很牛了。

前天面试一个号称N年经验而且还是带项目的人,好吧,既然这么牛,就问问他项目整体把握,框架搭建等等,说半天没有说出什么实质的东西,问他项目中用到了哪些设计模式,一个都答不出来……让我深深地怀疑他的基础,果不其然,问几个java多线程基础就答不出来了;他还说项目中全是用spring,又问他什么是ioc,什么是aop,答不出来……问他ajax如何用spring mvc返回json,他答out.write()……
1 楼 kyan54 2012-08-24  
哥跟你差不多,来关注你哈~~

相关推荐

Global site tag (gtag.js) - Google Analytics