我的总结,一家之言,如有不同意见,你他妈有种说说!
1.自学能力。能根据现有的问题去利用百度和谷歌查出想要的答案,查不到记得变化关键词
2.英语阅读能力。很多技术都是老美他们发明的,想学习这些技术,最好的方式是直接去官方网站找教程。那些csdn上的中文教程可以参考,但是经常会带你绕一大圈,可能是少什么jar包,或者是缺什么环境,又或者是代码写的乱七八糟,不好维护。
3.好奇心。希望多接触些技术,并且对自己长期使用的技术,要有一股冲动想要去了解原理,不满足于表面的使用。比如想深入了解hibernate,简单,去看他的代码。看不懂?没事,找个dbutils这种项目,去看看orm底层如何实现,看看他们是如何管理sql生成,看看他们是如何控制并发连接数据库,然后尝试自己添加声明试事务处理。这时,你学到的不仅是这个框架本身,还掌握了并发,反射,自定义注解,动态代理,设计模式等。了解了原理,学习了技术,何乐而不为?
4.数据结构和算法。很多人说做Java,不需要数据结构和算法的知识,这其实是误区。不了解算法,你就不会分析每个操作的快慢,当有海量数据处理的时候,你想优化都无从下手。不了解数据结构你就没办法区分什么时候用arraylist,什么时候用linkedlist,什么时候用stack,什么时候用queue。用linkedlist增删快么?不太准确,实际上他删除并不快,时间复杂度为o(n)。用arraylist添加慢么?也不太准确,利用平摊分析,他的时间复杂度可以达到常量级别。当你有一大批基本类型的数据要排序的时候,你会调用arrays.sort,但你知道他底层是调用的快排么?如果你不对自己的数据提前做随机打乱的处理,你知道快排可能会产生内存溢出的问题么?
5.底层知识的掌握。掌握一定的虚拟机知识,可以让你在出现内存溢出的时候针对性处理问题。你需要知道栈内存溢出很可能是由于你某个方法中进行了递归调用而忘了结束才导致的,你需要知道outofmemoryerror可能并不一定是堆内存产生对象太多而出现的,也可能是方法区加载了太多类文件而出现的。
6.勤写博客。多写博客可以梳理你凌乱的知识点。将解决的一道难题记录上去,以后你就不需要为这个问题东查西找,只需要看看自己的博客,马上就能得到答案