Java技术杂谈

要是一个牛B的面试试仅凭JDK里面的东西大概就可以考察出一个Java程序员的功底。

记得以前笔试的时候一道题目是[String str=”a”+”b”+”c”,会创建几个对象];当时毫不犹豫的写了4个。一道题目就看出了我的水平在哪个层次上。

笔试题很多被固化,面试刚毕业的学生可以,所以毕业的时候搞几个题海战术基本找工作是没有问题的。如果工作几年后还在拿这个题目面试你是不是太有失水准。记得笔试题里总有说用StringBuilder的,这样效率高,导致这个类泛滥。很多地方都是没有必要。

以前说数学好的和一些底子好的同学后劲更足,当时还不信,说学计算机组成原理有什么用,学数据库原理有什么用?后来我信了,我突然明白培训机构出来的学生有天生的弊端。他们看起来面试很容易通过,只不过似懂非懂的强记而已,根基不好,房子能建多高?

为什么Java的培训机构这么多,而很少有说几个月速成C++的。Java是一门相当容易入门的语言,基本上简单的应用从业务上不太会写出大毛病的代码,只是代码本身狗屎一点。所以几个月突击一下当个码农基本没问题。C++很多应用都是游戏,各种引擎,各种算法,对于速度的要求非常高。语言层面C++也比Java也难掌握的多,光内存那一块就让你够呛。Java程序员可能根本不关心内存的问题,如果开发中内存(其实是性能)已经是你重点关心的问题,恭喜你,你的级别可能有那么高了。算法?Java里有算法吗?当然如果把算法泛化肯定是有的,如果狭义的从语言角度优化来讲Java根本没什么算法。JDK封装的排序也够你用的,况且工作中还很少用到。很多程序员说我会个增删改查基本够用了,确实很多场景都是这样的。我好像一直在做这个工作,真衰~~~

有多少Java程序员用到位移运算?看到与或非门?说实话很少看到,上次看到这样的写法[if(a & 0x00010000==0x00010000)]还觉得TMD的真变态,干嘛不直接等于。如果看到这个就更郁闷了[a<<5>>(5+18) ],尼玛直接右移会死啊。真实的业务场景这些运算其实很少用到,至少Java Web层很少用到。所以这一块Java程序员知之甚少,而这里更多的是与底层打交道。比如位移运算本身是对二进制操作。我突然想到面试题有一道是a=2,怎么用最快的效率让它等于8,本来这道题目是考位移。出这样的题目可能就是C出身的。因为Java场景下用位移确实很少,而且Java对于性能也没有苛刻到那个地步。Java的很多性能问题也不在语言层面。花时间去优化语言性能还不如花时间去看一下逻辑有没有问题。当然一个好的程序员总能写出高质量的代码。而菜鸟总是写出屎一样的代码。

对于杂家还是专家,其实这样的讨论一直在进行。上次还在网上看到一篇帖子还在说这个问题。其实我觉得跟领域有关系。比如说互联网方面的可能技术会杂一点。而游戏开发还有嵌入式开发技术相对单一(主要是语言,其实也不单一)。所以互联网方面程序员往往会是一专多杂的情况。比如说Java程序员可能会写一些简单的JS和页面布局,写一些不太复杂的SQL。甚至还会一些其他的脚本语言。一门语言学的稍微专业一点,其他语言入门都不是什么问题。只是写出来的代码体现不出那门语言的特性。看懂别人的代码还是不成问题的。

但是这并不代表在这几个领域都要精通,也是不可能的(主要是看到哪个层次)。所以一专多能是大多数人的选择。比如说Java也不是把Java本身学好就够了。不过要学的深还是够呛的。如果是Java程序员如果再去花太多时间学前端就有点本末倒置了。毕竟这两者的分工还是比较明确的。Java程序员可能学一些对技术本身(主要是内功)有提升方面的,比如说把基础打牢,大学学的计算机组成原理,操作系统,甚至是数据结构都可以提升自己的内功。这样各层之间打通之后很多东西自然理顺了。这样很多技术就是透明的,对于后期的提升应该有比较大的帮助。

猜你喜欢

转载自yuzhipengchen-163-com.iteye.com/blog/1629670
今日推荐