如何学好Java基础如何从新手开始
1、我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多。编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑)。但同时自己心里明白,自己其实没有什么水平,自己这3、4年以来学懂的东西就那么多,其他人几个月就可以学会,自己的竞争力在哪里?这种矛盾的心理,困扰了我非常长的时间,非常的苦恼!总有一种报国无门无处发力的感觉。

2、这个时期,热衷了使用各种框架,各种api,常以今天学习了某个api,组件,框架的使用就觉得自己学到了东西,设计模式也看过不止一次,但都没有啥感觉。一方面很努力学习,一方面又觉得不踏实,因为例如这个api我知道而你不知道,但我告诉你之后你就知道了,那我比你的优势在哪里呢?苦恼*2

3、学习源代码的时候,特别有意思,你会强烈感觉到一个词:举一反三!触类旁通!学习api使用的时候,如果你只知道使用不知道原理,很难举一反三,感觉的是死记硬背。但学习了原理之后,知识成体系后,很容易举一反三,学的越多就容易,还是以hashmap为例,我举一个hashmap反三个点。

4、学习了hashmap之后,你很自然就会去了解其他的map,如TreeMap,LinkedHashmap(超级有用),HashTable,ConcurrentSkipListMap(算法思路很有意思),ConcurrentHashMap等,你会知道set就是用map做的,都不需要学。到了这步,map相关就可以暂告一段落。

5、在学习中,我发现思想上的东西是最重要的,你理解了思想,一下子就豁然开朗了,在也不需要死记硬背了。如学习CAS的时候,大家都知道这是一种指令级的免锁实现。看代码的时候,我一度疑惑为什么会有个while死循环

6、后来从思想上理解,才知道乐观锁的概念,就是很乐观,假设你不会出错,但你要是出错了我就重试有办法给你修复,对应的就是悲观锁,就是很悲观,觉得不锁就会出错,如synchronize关键字和reentrantlock。这体现了2种不同截然不同的管理思想。这种思想经常体现在多个系统集成的设计,有些时候如果你用悲观的思想设计,实现起来很麻烦或者无法实现,但如果你用乐观的思想,减少出错条件,然后出错了能解决,代价就会小很多。

7、说了这么多,我想说的就是,j2ee的基础知识就是你做项目中代码背后的东西。提高自己水平的方法很简单,就是把大部分时间去了解实现原理,了解思想,让自己的知识串起来,形成体系。j2ee的知识特别多,学得人想哭,千万不要一开始把时间花在各种框架、组件的使用上,在我看来那是本末倒置。简单来说:先修内功再练招式。

8、我觉得重要的、工作会用得到的知识就是一个请求从前台到后台处理的过程需要用到的东西,最少包括以下点:js,html,css,ajax,ajax跨域,跨站脚本,web缓存,web优化,nginx,apache作用,鉴权方式,cookie,session,servlet,filter,基本数据结构,线程池,线程并发,缓存,io等等,知识点非常多。如你前台用jq,你应该了解他的选择器和ajax是如何实现的(其实去了解就会发现不复杂)而不是只是会用。后台你用springmvc,你要了解他是如何工作,每一个配置是做什么

9、以下这些问题要自己去解决map有哪些,特点和使用场景?(只知道hashmap,hashtable是不够的。。。)哪些方面会影响hashmap的性能?线程安全的map有哪些,concurrenthashmap是如何实现线程安全的(jdk1.8大不同)?锁有哪几种?公平锁,读写锁等如何实现?synchronize能加在哪些地方?什么区别?死锁的形成条件?现在很少死锁了,很少问原子数据对象的原理?reentrantlock相关知识,condition如何使用?(很重要的知识点,强烈推荐阅读ArrayBlockingQueue源码,教科书般)volatile的相关知识(内存屏障,重排)ThreadLocal原理和使用?(超级有用的知识点,工作中使用很多,让代码漂亮很多,后面专门开贴写)多个线程同步等待?(CountDownLatch,CyclicBarrier,Semaphore信号量很多语言都有,实际上使用不是很多,线程池就可以实现大部分等待功能)线程池?(种类,重要的方法,这个一般是使用层面,简单)动态代理?反射?内省?(考察知识面)session相关知识?和cookie关系?分布式session实现原理?cookie相关知识?有哪些属性?(有些属性很有用,只是我们很少留意而已!)nginx,apache 实际项目能做哪些?(鉴权,转发,缓存,反向代理等)和tomcat什么关系?最少了解ajax跨域原因?解决方式?(重点知识,做SE避免不了的问题。这里很多知识点。)jsonp原理?后台需要改动吗?(jsonp虽然现在落伍了,但还是会问问)web优化知识点?(常规知识点)前台缓存相关?(200cache,304,ajax缓存,如何实现缓存)