因为离家太远,所以最近准备离京回老家成都找份工作,平衡一下家庭与事业。因此在各大招聘网站上广撒网的投递了简历,鉴于自己的工作经验还是比较自信满满的,然后就是坐等面试。这几天陆陆续续的来及几个HR的简单电话面试,但是都不够专业,所以简单的聊天就可以让对方信服。但是就在昨晚的一次技术负责人的电话面试中,给我深深的上了一课。
对方是一家做银行中间件的公司,主要是给银行提供一些软件服务,因此对于技术的要求比较精比较高。昨晚上他们公司的技术负责人直接打来电话进行面试,刚开始直接问了我最近一个项目主要负责哪些技术事项,一看对方是想了解一下本人的工作经验吧,然后我就把近期的工作情况大体讲了一遍,从J2EE的整体搭建到改版以及通信业务socket乃至netty的框架运用等都讲了一通,个人觉得自信满满的。对方也说了一句还可以,然后就说问个问题,而就是这个问题把我打住了,也让我更加认识到:技术行业永远没有终点,更需要不断的夯实基础,才能走到巅峰。
这个问题就是:请你讲一下hashcode的工作原理。
当时由于电话面试,自己还听错了,听成了什么msnQ?然后我说你问的是不是消息队列啊?对方也就没有在进行下去了,然后说让我等HR的通知吧。放下电话那一刻我沉思了,应该说当时是疑惑,到底什么技术这个牛逼我还没听过,于是乎,我给他发了一条短信,内容是:对不起,刚才可能没听清楚,您能再说一下刚才提到的技术吗?答:hashcode。
对的,就是hashcode,而知道结果的同时我不淡定了,因为我知道即使当时挺清楚了也回答不上来,因为自己平时根本就几乎没用到hashcode,虽然看起来是那么的眼熟,但知其然却不知其所以然。
然后马上百度了一下:hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 详细了解请 参考public inthashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。
哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。可以这样简单理解,hashCode方法实际上返回的就是对象存储位置的映像。
这只一个基本原理吧,但就是这个过程也说明了一点:基础不牢。昨晚也陆续整理了一下近几年的工作情况,这几年的确学到了很多新知识新东西:
1.从java入门开始到现在,学习了J2EE的框架,spring+hibernate+setvlet,到现在的自己独立搭建了一个J2EE游戏数据处理中心。
2.通信方面,socket熟练运用以及netty4的运用,自己也用netty4搭建了我们所有的游戏框架。
3.数据库方面,熟练的运用了mysql,能够独立熟练的运用数据库建立整个游戏的数据表。
4.linux方面,所有的游戏socket以及j2ee都能运用tomcat以及niginx部署,同时运维着十几台服务器。
可以说以上都是这几年的经验所积累下来的吧,虽然实际经验是有,但是也能看到问题,就是着眼于大的架构却没有看到小的基础。在这里面基础是不够牢固的。例如:
1.设计模式并不熟练,只会运用一些常用的。
2.数据结构与算法也很薄弱,只会运用一些简单的结构与算法,并没有系统学习。
3.线程池,虽然会用,但却用的还是不够精,并没有深入了解整个线程池的机制。
4.netty以及spring框架只是出于会用的层面,这都是开源的,目前还没有对源码进行全面的解读,从底层去了解其运作模式。
5.linux也是出于最基本的用法,sell命令只会用一些常用的,最主要的内核原理以及文件系统都没有取深入了解过,只是一种能用的层面。
再高的金字塔,如果根基不稳总有一天会倒塌下来的。所以,及时有点成绩也不是炫耀的时刻而是应该进一步的学习。技术这行业没终点,只有一个不断往高处走的游标,你只有先夯实基础,不断的学习,才能让这个游标指向的更远更高。所以本人针对上面的不足也会制定了相关的学习计划。下一篇博客会详细制定一个提高计划。