java学习的二三事--给cims新人

来源:互联网 发布:游戏交易平台源码 编辑:程序博客网 时间:2024/06/06 11:58

最近有师弟师妹询问java学习路线相关的问题,就在这里作一个稍具体的回复,同时也正好对自己近来的一些经历、教训和感悟进行一个总结,希望对师弟师妹有所帮助,也希望自己能够不忘初心继续前行。

先多嘴几条学习建议:

  • 1.如果对于一块新的知识完全没有概念,那么可以先看教学视频(网上搜或者淘宝买,注意要挑选新的、内容全的),视频的好处是通俗易懂,有老师指点可以很快形成条理,明确重点,很适合新手;但是它的缺点是比较花时间,同时很多细节无法覆盖。因此建议在视频入门之后还是要看文档或者书籍来巩固一下,在有一定基础后直接看文档。

  • 2.一定要做好笔记,不要迷恋你的好记性,那只是个传说。不管是看书还是视频还是刷题,都建议作好笔记,笔记不单只是记录,还应该是自己的小结,我习惯在看视频的时候放轻松地看,在每一讲结束的时候按照自己的理解总结整个视频的笔记,笔记中可以自己画一些图或者写一些感悟(我还在数据结构与算法的笔记中写过日记,呵呵)。笔记可以帮助你理解更加深刻,同时复习的时候很快速。

  • 3.定期整理笔记,建议写到自己的博客或者github中,不仅便于管理也可以在面试的时候展示自己的沉淀。

  • 4.做好打持久战的心理准备。其实如果真的要从事java开发,你需要学习的不仅仅是java语言和框架而已,这会有一个很庞大的学习体系,而且每一块都有足够的内容和满满的坑等着你。我接触过一个工作4年的牛人师兄,小到一个全角标点,大到集团中间件Ali-Tomcat和Pandora底层的类加载器委托的bug,都能给你分分钟找出来并提出解决方案,看各种源码跟看小说似的,真是佩服得五体投地。

  • 5.多接触一些新的技术,单纯自顾自学习很容易过时的,最至少得知道现在都流行啥了是个啥玩意儿。

  • 6.遇到学习路线或者技术上面的问题善于解决问题,借助知乎、csdn、iteye、stackoverflow等等都可以。

  • 7.不要太钻牛角尖,在一些太细节的地方耗费太多精力,毕竟时间也不是那么多(如果你也是处女座那么你当我没说过……)。

  • 8.珍惜在校时光,大四初来201的场景还历历在目却马上要数着指头过浙里剩下的日子,你会后悔一些事也会错过一些人,但终归当下的一切就是最好的安排,感恩,祝福!

好了,废话结束进入正题。

java开发知识点

下面是根据我的学习和找工作经历以及阿里的《java新人入门指南》作出的一些整理,大家可以参考和补充:

java基础知识(基本需要全面掌握)

  • 基础语法/面向对象(类型初始化、多态、抽象、封装、泛型、反射、序列化)
  • 集合类(List、Map、Set……)
  • 基本文件读写操作(IO)
  • 网络编程基础知识(Socket)
  • 线程基础知识(Thread、同步、Threadlocal、Wait、Notify,Sleep……)
  • 异常处理
  • JDBC相关

参考资料:

  • 视频
  • 《Thing In Java》:有点厚有点深我们一起慢慢看
  • 《Java核心技术(卷1):基础知识(原书第9版)》

java进阶知识:

  • 并发编程(J.U.C):Atomic、Lock、BlockQueue、ThreadPool、FutureTask
  • 网络编程:BIO、NIO、IO模型:阻塞、非阻塞、多路复用、同步、异步
  • 文件编程进阶:Memory Mapped File,FileChannel、sendfile
  • JVM相关:classloader、内存管理、垃圾回收
  • java常见命令:jstack、jmap、jstat……

并发和jvm在面试的时候问到很多,需要做好准备

参考资料:

  • 《Java核心技术(卷2):高级特性(原书第9版)》
  • 《深入理解java虚拟机—周志明》: 看了好几遍,对于理解内存机制和应付面试很有用
  • 《Java并发编程实战》:企业中必用,打算后期看

java web编程基础(这是基础,应该掌握)

  • Http协议基础知识:协议、GET/POST、Header、Http Cache、跨域……
  • Cookie、Session原理及区别
  • Servlet工作原理
  • Tomcat基础知识

参考资料:视频

java web进阶:web框架(先用再原理)

  • MVC设计模型
  • Spring 框架:IOC、AOP、注解、配置文件、Beanfactory、spring jdbc
  • Spring MVC:Controller、Request Mapping、ResponseBody、请求接收处理流程
  • mybatis基础:与spring jdbc配合、配置文件、语法、执行流程

参考资料:

  • 视频
  • 《spring技术内幕》、《Spring In Action》:spring很重要,无论使用什么框架都离不开spring的粘合,晚看不如早看,反正早晚都需要深入理解spring技术内幕的。

数据库知识:

  • 主流数据库oracle、mysql,实验室多用oracle,企业多用mysql,建议掌握mysql会用oracle。
  • mysql进阶:mysql索引、优化、引擎、B+树

参考资料:

  • 视频
  • MySQL官方指南
  • 《高性能MySQL》

前端:html5+css3+jquery+Ajax+bootstrap

前端知识相对比较简单,而且所见即所得,学习起来比较快乐,可以直接跟着文档来学。实验室经常使用的前端框架是Edojs,需要维护的话用一下Edojs。

参考资料:

  • 视频
  • https://www.w3cschool.cn/

开发基本工具:

  • maven:项目管理工具,实验室没用,企业中会用到

  • 参考资料:《Maven权威指南》

  • git:版本管理工具,逐渐替代svn,先学git有空在再学svn

  • 参考资料:廖雪峰的博客

  • svn:版本管理工具

  • 参考资料:svn学习网站

  • IDEA:intellij idea非常好用的一款IDE,对maven、git等的集成度非常好而且美观,比eclispe好用很多。

  • Eclipse:实验室用的IDE,建议使用IDEA。

计算机基础知识:

计算机网络:笔试面试必问
参考资料:《计算机网络》、《图解TCP/IP》,牛客网刷题

操作系统原理:笔试面试必问
参考资料:《计算机操作系统—汤小丹》,牛客网刷题

数据结构与算法:笔试面试的重头戏

数据结构与算法是最重要的计算机基础课,基本所有公司都会考。首先需要学习数组、链表、栈、链表、二叉树、树、堆、B树、散列、排序、动态规划等数据结构和算法,找一本《数据结构与算法分析—Java语言描述》或者类似的书就行,啃完之后就是刷题做练习了,去牛客网刷《剑指offer》,多刷几遍,然后有精力再去刷LeetCode,可以按照题型来刷,也可以按照难度来刷随你便。由于我开始刷题比较晚,而且LeetCode上的题目已经上千了实在信心不足,所以总共刷了差不多200多道题目,之后就靠笔试刷题了。在刷题的时候还是建议能够做笔记,虽然牛客网的OJ有记录答案的功能,但是还是建议能对每道题作一个笔记,将自己的思路—代码—时间/空间复杂度等记录好,这样在第二遍刷题或者复习的时候就非常快速,粗略算来,我的数据结构与算法这块的笔记有差不多15万字,虽然后期没怎么刷题了,但是靠复习还是能够保持一定手感,在我的csdn上面也有部分刷题的笔记,需要的可以看看。

参考资料:

  • 《数据结构与算法分析—Java语言描述》
  • 《剑指offer》
  • 牛客网

Linux操作系统:

  • 常用命令:mv、cd、mkdir、cp、cat、more、scp、pwd、ls、grep、find、sed、awk、df、du……
  • linux问题排查命令:top、vmstat、sar、ps、iostat、mpstat、free、netstat、lsof
  • 文件结构、shell 脚本

参考资料:《鸟哥的Linux私房菜》

设计模式:

在面试的时候有时会问到设计模式相关问题,我感觉了解常见的几种设计模式原理并会举例就好了:

  • 单例模式
  • 简单工厂模式
  • 工厂方法模式
  • 代理模式
  • 策略模式
  • 装饰者模式
  • 适配器模式

每种模式找两篇文章看明白就好了。

企业级中间件:

  • Dubbo:https://github.com/alibaba/dubbo
  • Notify
  • Tair
  • Zookeeper
  • ……

有兴趣可以关注阿里巴巴&天池中间件大赛:
https://tianchi.aliyun.com/programming/information.htm?raceId=231600

实验室或者学习环境中很少用到,但在大型互联网中中间件的应用必不可少,中间件很多,如果学有余力可以学习几个中间件,在面试中可以加分,但是注意不要了解皮毛就去夸夸其谈,得不偿失。建议学习Notify/Dubbo/Tair/Zookeeper ,从:使用场景–>原理–>实现机制–>问题等方面去描述,同时同类中间件之间的区别和优劣势以及选择标准也需要了解。

学习路线:

快速上手版学习路线:

鉴于可能项目紧急,需要新人快速上手,那么可以参考下面实验室项目快速上手学习路线:

  • ①java基础视频(图形组件、事件、多线程、sqlserver、项目可以先放放)
  • ②html+css+js+jquery+ajax(先上手会写再夯实)
  • ③oracle(会用toad、会写sql)
  • ④servlet(java web的基础)
  • ⑤jsp+Edojs(先上手会写再夯实)
  • ⑥Struts2+hibernate+spring(视频+自己搭个网站框架整个流程就大概通了)
  • ⑦项目在tomcat部署调试和运行

扎实版学习路线:

如果不想从入门到放弃还是建议从基础开始慢慢学,前期花点时间还是值得的,刚开始多找找感觉,不要急于求进度。大致按照下图中的阶段来(阶段一和阶段二顺序无所谓),除了图中的知识点之外,上文提到的计算机基础等知识与图中的阶段没有强依赖关系,可以穿插着学习。
这里写图片描述

新人学习可以推荐的一些网站和书籍:

• https://github.com/:github 是一个非常著名的代码托管网站,任何一个人都可以可以免费地在上面建立公开的代码仓库,许多著名的框架或者工具、包括很多阿里巴巴开源出来的框架,都在上 面进行了托管。

• http://stackoverflow.com/:StackOverflow 是一个由 Joel Spolsky 创办的编程问答网站,只要你英文有一定的基础,很多编程中遇到的问题都可以在StackOverflow 上找到。

• http://news.ycombinator.org/:news.yc 是一个由风投公司 Y Combinator 的创始人 Paul Graham 创建的网站,大家会把一些网站的链接提交到这个网站上去,然后进行评论,从这里可以了解到一些业界动态。

• http://www.reddit.com/r/programming:/r/programming 是 reddit 下面的一个和编程的相关的一个节点,功能和 news.yc 基本相同。

• http://coolshell.cn/:酷壳,一个叫做 陈皓的人搞的一个博客,经常会发布一些不错的文章,很多时候都是前面的三个网站的内容,但是作者自己也会加上一些观点。

• http://www.aqee.net/:外刊 IT 评论,很多都是 stackoverflow,news.yc 或者 /r/programming 上翻译过来的文章,想直接看中文的可以上这个网站看。

• http://blog.jobbole.com/: 伯乐在线,感觉和外刊 IT 评论类似。

• http://www.infoq.com/cn/:InfoQ, 业界的一些动态,一些文章,质量还不错。

• http://www.programmer.com.cn/: 《程序员》杂志上的一些文章

• http://www.blogjava.net/killme2008/: 原淘宝工程师庄晓丹的博客,最近的内容多和 Clojure 相关。

• http://book.douban.com/subject/3558788/: 卓有成效的程序员,将的是技术人员的效率问题,如何在开发的过程中提升效率。

• http://book.douban.com/subject/4848587/: 分布式 Java 应用,淘宝的林昊写的一本书,推荐新人在有一定基础后阅读这本书。

• http://book.douban.com/subject/1152111/: 程序员修炼之道,长期被列为程序员的必读之书,对于想要知道如何成为一个优秀的程序员的人肯定会有帮助。

• http://book.douban.com/subject/4163938/: 前面的 StackOverflow 的创始人 Joel Spolsky 写的一本书,是一本关于软件技术、人才、创业和企业管理的随想文集。

• http://book.douban.com/subject/6021440/: 前面的 news.yc 的创办者 Paul Graham 写的书,主要介绍优秀程序员的爱好和动机,有助于了解计算机编程的本质、互联网行业的规则,还会帮助了解我们这个时代。

• http://book.douban.com/subject/4923179/: 关于程序员职业规划的一本书,对于不知道要如何发展的新人或许有点帮助。

• http://book.douban.com/subject/1467587/:Unix 编程艺术,介绍 Unix 系统领域中的设计和开发哲学,思想文化体系,原则以及经验。

• http://static.icybear.net/[CN]Programmer%20competency%20matrix.htm 程序员能力矩阵模型,还是挺有意思的。