讲次 主题 要旨
1 Java的未来 Java能干什么、不能干什么,一开始就要搞清楚。这对于成为一个纯种的Java程序猿至关重要。
2 构建Java运行环境 Java运行在服务器,服务器都是Linux系统,对于真正程序猿而言,Windows只是用来打游戏的。
3 搭建Java开发环境 开发时可以用Windows,听说互联网公司用的都是Mac,IDE很重要,但一定要明白其本质的原理。
4 Java代码及文档规范 什么叫团队合作?就是你写的别人看的懂,别人写的你看的懂。代码写成一坨~~长得再帅也没用!
5 初步理解JVM Java的根本是JVM,Java语言比C语言快还是慢主要取决于JVM,Java的一切特性也应该从JVM谈起。
6 变量和赋值运算 "基础"到不能再"基础"的主题,没学过的同学必须认真,学过的同学也不能绕行。
7 基本数据类型 同样还是非常"基础"的主题,但在我脑海中见到"基础"两字就会替换成"重要"。
8 数值运算 不单单是加减乘除那么简单,Java常常会出其不意,再牛的程序猿也可能在阴沟里翻船。
9 关系和逻辑运算 关系和逻辑运算——计算机所特有的运算,是区分计算机和计算器的重要指标之一。
10 分支结构(if-else) "如果~~~就~~~否则~~~"程序猿最好习惯这样的表述方式,这是面试时回答问题的最佳句式之一。
11 分支结构(switch-case) 如果有人告诉你一件事情有两种做法,你一定要问他什么情况下用什么,否则就选学一种。
12 循环结构(while、do-while) 为什么要先学"while"再学"for"?因为历史上先有了"while",再有了"for"。
13 循环结构(for) C语言创造的经典的"for"结构,Java语言继承之,虽然很简单,但要保证在各种情况下都不出错也不是那么容易。
14 算法基础 "算法"+"数据结构"="程序",无论再有多少方便的API,掌握一些基本的算法还是非常必要的!
15 数组的建立、初始化和访问 数组—最简单也是最常用的数据结构,几乎所有编程语言都会涉及到!
16 数组的遍历、复制和排序 这些都是针对数组的最基本操作,看起来简单,但也会经常出问题!
17 算法实践 据统计,世界顶级的程序猿也会写二分法出bug,通过实践正确看待算法,做一个有理想的程序猿。
18 方法的定义 子程序、函数、方法,它们都是一回事,它们的发明对于软件行业的贡献大的没边!
19 递归调用 "递归"乃是"虎狼之药",有些时候必须"吃",有些时候千万不能乱"吃"!
20 结构化程序设计实践 "面向过程的结构化程序设计"思想的地位举足轻重!即便是在"一切都是对象"的今天。
21 从结构化到面向对象 想理解面向对象是怎么"来"的,必须先理解面向过程的结构化设计是怎么"没"的。
22 类、对象、引用 记得我的老师曾经用"汽车"来比喻"对象",但我当时仅仅理解了什么是汽车,并不理解什么什么是对象~~
23 对象创建原理 对象是如何创建的?不仅仅要知道生活中的类比,还要知道内存中究竟发生了什么。
24 方法调用原理 有人说,对象有自己的属性还有自己的方法,这句话讲错了!想知道为什么吗?
25 方法的重载 从生活中来,到设计中去。我们在日常生活中习以为常的事物总会蕴藏着深刻的设计哲理。
26 构造方法 和JavaScript比,Java语言的构造方法不能真正的称其为真正的构造方法,充其量是个初始化方法。
27 继承和泛化 到底是先有子类还是先有父类?这个问题千万不能回去问你的父亲,一定要自己搞清楚!
28 继承中的构造方法 就算试题再变态,我们也要默念:一切设计都是为了程序猿工作的方便,而不是为了考试更好出题。
29 继承中的重写 同样一个编程动作,有的时候是"优雅",有的时候是"灾难",这就是编程中的哲学。
30 访问控制 public就是大家都能用,private就是只能自己用,这么说太稚嫩了,要理解其更深刻的含义。
31 static和final 语法现象讲明白不算什么,关键要讲清楚一个语法点"为什么设计?"和"在什么地方用?"
32 抽象类 "类"为什么会"抽象",有的时候去看一个概念的演变过程是理解它的最佳捷径。
33 接口 interface — 是面向对象设计的精髓,好多听起来很玄的设计模式和看起来高大上的技术名词都以它为基础。
34 抽象类和接口的区别 很多开发了几年的程序猿还没有真正搞清楚抽象类和接口的区别,所以说:入门师傅很重要,虽然都是基础,让江南七怪和黄药师教是不一样的!
35 内部类 先要理解,我们为什么要把一个类为什么要放到另外一个类的内部,然后才是具体的语法~~
36 匿名内部类 受累于一切都是对象的承诺,在函数式编程风起云涌的时代,Java只能靠匿名内部类来将就对付。
37 面向对象程序设计实践 面向对象和核心在于"重用",而不是"用看待现实生活的眼光来看待程序",后者太不实际了。
38 应该如何学习API 三个境界:第一、知道它什么时候用;第二、知道它有什么不足;第三、感受到设计者当时的心境。
39 Object Object——所有类的祖师爷,它泛化出了Java所有类都具备的通用功能(不懂"泛化"的重学1~38)
40 String String的方法很多,不一定要都记住,但要学习它的设计思路;同时还要理解Java不变类的优化技巧
41 StringBuilder String不可变,StringBuilder可变,Java就是这么神奇——大猫走大洞,小猫走小洞。
42 包装类 说了一切是对象,又绕不过基本类型,弄出了包装类,又因为太麻烦弄出一个"自动装拆",哎~~
43 Date 刚推出不久,就被宣布大多数方法"建议不使用",但和时间毫秒数的转换还是蛮有用的。
44 Calendar 据说这个是一个典型的"过渡设计",但确是一个不错的"简单工厂模式"的范例。
45 DateFormat 一个类表示日期,一个类用于日历计算,还有一个类用来格式化输出日期,Java就是不差类!
46 异常处理机制 真正的可用程序,有一多半的代码是用来处理异常情况。所以学好"异常"比学好"正常"重要多了!
47 异常处理机制 List和Map是最根本的两种集合,然后才是集合框架,一上来就学Collection违背"Java历史学习观"!
48 List高级应用 Java的为List提供了不算设计巧妙的API,很有借鉴的意义;同时理解List的两种标准实现:ArrayList和LinkedList也很重要。
49 Queue和Deque Java中有但没有栈(Stack),确搞出一个Deque,一会当队列用,一会当栈用,真的很刺激!
50 Comparable和Comparator "回调模式"这个没有归入到23中设计模式中的模式在此处集中体现,调用一个方法时可以传递数据也可以传递一段代码,或者说代码也是数据。
51 泛型在集合中的应用 不管是真的还是假的,Java好歹还算有了泛型,比其他语言晚了好多年,居然当时还是"新特性"。
52 兰姆达表达式 兰姆达表达式开启了Java函数式编程的新时代;Java总是先抛弃其他语言的特征,然后再慢慢加上。
53 Map基础应用 Map是应用度最高的数据结构,很多互联网大数据的热门技术都以它为基础。
54 Map应用实例 一些看起来算法比较麻烦的例子,如果恰当的选用Map作为数据结构,一切都会变得简单,这就是为什么牛人说"程序=算法+数据结构"。
55 HashMap基本原理和性能优化 连什么是"装载因子"都不知道,就敢用HashMap,这是不好的,是要出问题的!
56 Collection框架 Collection疏理了先前的集合体系,比较有学习亮点的是Iterator,集中了迭代器和工厂方法两个模式
57 File 名字虽然叫File,但既能表示文件,又能表示目录;而且仅仅只能表示,不能对文件进行访问。
58 File应用实例 File的API没什么好练的,但是基于它的一些案例是复习递归和学习"回调模式"的一个很好的机会。
59 RandomAccessFile "随机访问文件"—— Java文件访问的利器,唯一一个用动宾结构来命名的类名。
60 FIS和FOS Java文件访问有两种方式:一种是随机访问,一种是流式访问,使用前一定要选择好。
61 InputStream和OutputStream 两个抽象类,是所有"流"类型的父类,隐含了重要的设计模式:装饰器模式、模板方法模式等。
62 BIS和BOS 两个典型的"处理流",用于实现"缓冲"的功能,从此之后你会发现有太多需要缓冲的地方。
63 字符编码 在互联网中川流不息的海量数据中,文本数据占据绝大多数,理解这些数据先从编码开始。
64 ISR和OSW 两个非常重要的"处理流",把字节编码成字符,把字符解码成字节,是Java文本数据访问的基础。
65 Reader和Writer 字节流、字符流不是同等的概念,字符的本质也是字节;背概念没有用,关键是理解设计师的初衷。
66 BR和PW 两个经常使用的字符处理流:BufferedReader和PrintWriter,虽然不是一对儿,但胜似一对儿。
67 对象序列化 把牛变成罐头,然后再它把变回牛,看起来简单,但也有很多细节,比如牛脖子上的铃铛怎么办?
68 进程和线程 一边吃饭,一边写代码,一边听歌,一边写代码~~这些老套的例子告诉我们人和计算机都是多任务系统。
69 线程的创建 "Java的线程有两种创建方式Thread和Runnable…..."讲这句话的人一定要讲清楚这两种方式的由来和在实际中的选取。
70 线程的控制 "线程是正在运行着的程序",很多人被这个神奇的说法搞糊涂了,弄清楚线程和程序的区别是控制好线程的关键。
71 ThreadLocal 线程本地还是线程单例?这个类的名字很晦涩,也不好理解,其实按照其功能定义写出一个类似的东西,就什么都了解了。
72 线程同步synchronized 锁——意味着线程安全,同时也意味着效率的低下,甚至闹不好还会"死锁",synchronized——和这个单词的拼写一样,掌握好不是那么容易。
73 线程池技术 理解的线程池就理解了一切"XXX池",另外还将引出一位超级牛人——并发运算大师:Doug Lea和他的同步包。
74 线程同步包 接下来就怀着敬畏的心情学习Doug Lea的同步包,他可曾经是JCP(Java Community Process)执行委员的成员之一。
75 TCP通信:Socket Socket——翻译成"套接字"比英文本意还难理解,但它是网络编程的基础,是编写服务端应用程序的必由之路。
76 TCP通信:C-S通信模型 永恒不变的C-S——互联网时代"C"是浏览器,移动互联网时代,"C"是智能手机,物联网时代"C"可能是一只老母鸡~
77 Class 一个叫做"Class"的类,如果不是中英文混写,很容易蒙圈,Class封装了类的信息,对装载到内存中的类进行访问和编程。
78 Method、Field、Construtor 反射意味着程序的动态性,实例化什么类,调用什么方法,甚至类长什么样,都可以根据实际的情况或用户的输入动态决定。
79 Java反射机制——动态代理 想要明白什么是"动态代理",先要搞清楚什么是"代理","代理模式 + 反射机制"就是传说中的"动态代理"。
80 接下来的Java应该怎么学 "达内才高"欢迎你!