Java 很难学, 遇到很多问题, 刚学的小伙伴多多少少还是有一些抱怨的, 但是这都不是事, 只要下定决心, 我们就一定可以! 下面小编来分享一下学习 Java 的一些难题.
一, 面向对象的历史演变
搞清楚面向对象的历史演变, Java 的每个特性都是基于面向对象产生的. Java 就是面向对象而生的, Java 就是一种思想. 你们人手不是有一本启蒙书籍叫 think in Java 麽?
国外书籍用的是 think, 国内的书籍都是深入理解 / 学习 / 深入浅出 / 30 天掌握 / 教程 XXXX 字眼的书籍. 脑袋没毛病吧, 随便一本书平均下来都有 500 页, 各种深入理解, 掌握过后. 你的年龄也到该入土的时候了.
不是流行大数据麽? Hadoop 是因为一篇论文诞生的, 论文的作者是 google 公司的员工. 但是 Hadoop 的诞生要比 google 公司来得快. 在这点只能说 Java 干得漂亮, 要不然你们要想体会这种黑科技至少需要 5 年以上.
有时候真的很羡慕国内写代码的人, 这些小学没毕业的人居然可以拿到国外那些至少要初中毕业才能拿到的工资. 而国外那些高中毕业的人只能去帮 Java 写些源代码义务劳动.
二, 面向对象
在 Java 的类库里面有很多的骨架实现. 设计模式的出现要比 Java 早很多年. 设计模式的思想的作者或鼻祖是缘于一个砖匠, 搬砖的砖.
你们应该很庆幸设计模式就只有 20 几种, 终归到底是源于 Java 的特性也就这么几个. 国外做过研究人能同时记住的东西是 7±2. 很巧的是 Java 的特性也就 7±2. 但是 7±2 也就最多组成 20 几种设计模式.
好了问题来了, 你能记住几个 Java 特性 (Java 特性最多也就是 9 个哦), 如果你能全部记住, 那么问题升华了, 你精通多少种设计模式. 如果你们背的话, 我能从 1 背到 10 亿.
三, 多线程
多线程只能说太难了, Java 在多线程的上很落后的. Volatile 关键字反反复复更新了几次背后原理实现, 对于伪共享的实现也是在 1.8 才加入的.
多线程, 伪共享, 锁机制, 同步机制, 重锁机制. 这些在 15 年前是高级课题, 也是为什么很多 Java 书籍都把多线程放在最后一章节. 也是 15 年前存在的东西.
看到没有, 就算是人家把 Java 开源你们在技术上也会落后 15 年, 因为 JDK 现在才到 1.8. 为什么是 15 年前, 因为 15 年前摩尔定律不再适用了, intel 的老板跪在地上说, 如果 CPU 超过 4.0G 我公司要倒闭了. 所以多核的时代来临了.
回过头来为什么说多线程难, 学习多线程, 你要搞清楚同步, 异步, 管程 (什么是管程, 就是 Java 文件代码上加了 synchronized 关键字后, 变成 class 文件后. synchronized 关键字变成了 Java 虚拟机的 Moniters 命令的中文翻译), 锁机制, 阻塞, 以及线程的几种状态.
什么顺序一致性, 原子性, 有锁, 无锁. 安全性, 读写同步 / 读不用同步, 写同步. 多核, compareAndSet,getAndSet, 伪共享, 高速缓存, Volatile 关键字, 系统总线, 等等等等.
多线程机制虽然多, 但是这不是思想的重要性. 再我看来最重要的就是为什么 10 年就有 AtomicInteger 为什么现在只在原来的基础上跟新了一个 LongAdder, 为什么这两个类都是同一个老头写的而不是年轻人.
为什么这两个类都引用了 sun.misc.Unsafe 这个非公开类. 为什么是不安全的. 现在发现多线程是有多难了吧, 没有发现这段话比上面那段面向对象的字数都多了一倍麽.
来源: http://www.jianshu.com/p/a3a616346196