学点Java里的编程思想(r12笔记第65天)

   按照自己之前的计划,我觉得得看看关于开发的东西了,因为我对于并发,锁的认知总是有一个局限性,自己也在地铁上做了些功课。有了这个想法,再有拿起书的勇气,那就是一个开始了。

   每个圈子都有自己喜爱的图书,就如同Oracle圈子对于Tom的《Oracle编程艺术》,MySQL圈子对于《高性能MySQL》,Java圈子也有自己的,在我的印象中,应该就是《Java编程思想》了。

  
程序员其实还是容易偏执,在我们的生活中这种例子屡见不鲜,比如php是世界上最好的语言,几方竟然能大很长时间的口水战。程序员也有数据库行业类似DB-Engines的排行榜,是开发语言排行榜,Java语言如同数据库界Oracle的地位,也常年占据榜首位置,相对而言,语言之前的竞争更加激烈和白热化,优势和差距都不是很大。

Java程序员的圣经

     我的家里有个书架,已经很久没怎么读过书了,已经快摆满了杂物。书桌上有一本2007年的第四版的《Java编程思想》,书龄到现在已经10年了,但是看着里面的技术点滴,还是很有意思的,但是也存在太多的遗憾。

   每每到这个时候,我才会发现很多东西似曾相识,但是自己却没有记下笔记,没有了笔记,也就没有了当时学习的轨迹,也就意味着很多内容我需要重新再看一遍,再感悟一遍。所以我越发觉得学习笔记是个好东西,得坚持。

    我总是能够从书里找到一些共鸣的地方,比如Bruce这样说道:Java的设计者曾经说过,设计这门语言的灵感来自c++.尽管如此,学习Java,基本上不用参考c++,我也是这样做的。

   
对于一些技术的学习,比如泛型,就很有必要和c++进行比较。了解c++模板的某些方面,有助于理解泛型的基础,这就如同学习MySQL的的锁机制和Oracle的联系起来,虽然不同,但是可以加深理解。同时,重要的一点是,你可以了解很多技术的局限是什么,以及为什么会有这些限制,最终的目的就是帮你理解,只有了解了边界,才能成为程序高手。只有知道了某个技术不能做到什么,才能更好的做到所能做的。这一点上来说,也是工程师的几个阶段:从思考能做什么到思考不能做什么。

   
《Java编程思想》我目前喜欢的是第21章并发和第18章
I/O系统,因为这些方面和数据库的关联更大一些,也是我学习的一个突破口,而对于数据库中,高并发设计一直以来也是我们所关注的,而有时候难免会有瓶颈的认知存在。最近做了些功课,发现困扰自己,觉得不错的网络资料,里面的很多观点在书里都有系统的讲解,所以就是这本书了。而I/O系统方面,对于缓冲器的实现和持久化我更感兴趣,这些希望能够从再次的苦旅中找到一些共鸣和借鉴的地方。所以我的一个基本观点是从开发的角度来理解一些问题的原理,会更加水到渠成。

几种技术的比较

 
我在毕业的时候,做开发类工作,最开始接触的就是Java Swing相关的技术,当时使用的还是Spring Rich
Client的框架,接触了各种项目之后,发现框架真是层出不穷,没过多久就能听到一些新鲜的技术框架等等,而同时工作中大家对编程技巧尤其注意,总是会尽可能的用到设计模式方面的东西,而一个产品中总是会有若干的模块,也参与了不少模块的开发测试工作,到了亚信的时候,全部的模块都得熟悉,印象最深的一次,我连操作都没弄熟,下午就要给客户验收测试,当时自己学习的压力可想而知。而到了后来的工作中,我发现架构真是一门很精深的艺术,里面总是会有很多设计的原则和理念,这一点上不得不佩服很多老外的技术沉淀,从这个层面,我能够加深很多地方的理解,会把一个事情从一个更加全面的角度来考虑,得到一些更为细致的影响范围和风险评估。

   这样一个基本的感受,对于我来说,还是存在着一些困惑,这些到底有什么样的关系。有时候自己都理不清楚,直到一次看架构类的书籍,看到了下面的对应关系,才豁然开朗。

这也是我上面描述的几种技术场景的一个关系图,这样一来,你在学习的时候也会有的放矢,而不是蒙着头逮什么学什么。

时间: 2024-11-01 05:52:04

学点Java里的编程思想(r12笔记第65天)的相关文章

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a关系和has-a关系的区别),也有深入的涉及RTTI和JVM底层反编译知识.   1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意

全方位讲解Java的面向对象编程思想_java

什么是面向对象?Object 对象,Oriendted 以-为导向的, Programming 程序设计 面向对象就是使用对象进行程序设计,简写成OOP. SP和OOP对比 面向对象的三大原则      封装  继承   多态 对象 对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为: 对象其实就是"数据"和"函数"的封装体,其中: 数据表示自身的状态,也称作"属性"或"成员数据": 函数表示自身的功

Java编程思想学习笔记——一切都是对象

前言 Java是基于C++的,但Java是一种更加纯粹的面向对象程序设计语言. C++和Java都是混合/杂合型语言.杂合型语言允许多种编程风格. 用引用操纵对象 每种编程语言都有自己操纵内存中元素的方式. 直接操纵元素 用某种基于特殊语法的间接表示(C和C++里的指针) 用引用操纵对象(Java) 在Java中,一切都被视为对象.操纵的标识符实际上是对象的一个引用. 类比为遥控器(引用)来操纵电视机(对象) 只要把握这个遥控器,就能保持与电视机的连接 改变频道或减小音量,实际操纵的是遥控器(引

大话深入浅出Effective Java核心实战编程思想之猴王的把戏

不知道大家还记不记得在<西游记>里的莲花洞夺宝的故事,就是猴王巧夺宝物,收复金银角大王那 一章.到底这个故事给了我们什么启示呢?这故事又和Effective Java有什么联系?还是延续上篇文章的 风格吧,看代码,读故事. 1import static org.junit.Assert.*; 2import org.junit.Test; 3 4 5public class TestClone { 6 7 @Test 8 public void testClone(){ 9 // 西天取经的路

Java编程思想学习笔记——类型信息

前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定我们在编译时已经知道了所有的类型. (2)另一种是反射机制,它允许我们在运行时发现和使用类的信息. 为什么需要RTTI 以使用了多态的类层次结构的例子举例: 如上图,泛型是基类Shape,而派生出来的具体类有Circle,Square和Triangle. 这是一个类层次结构图,基类位于顶部,而派生类

Java编程思想学习笔记——枚举类型

前言 关键字enum可以将一组具名的值有限集合创建一种为新的类型,而这些具名的值可以作为常规的程序组件使用. 正文 基本enum特性 调用enum的values()方法可以遍历enum实例,values()方法返回enum实例数组,且数组中元素保持在enum声明时的顺序. public class TestEnum { public static void main(String[] args) { Fruit[] values = Fruit.values(); for (Fruit frui

Java编程思想学习笔记——初始化与清理

初始化 构造器保证初始化 构造器采用与类相同的名称. 默认构造器(default constructor):不接受任何参数的构造器,也叫无参构造器. 构造器也能带有形式参数,就能在初始化对象时提供实际参数. class Foo{ Foo(){ System.out.println("Foo's no-arg Constructor Foo()"); } Foo(int i){ System.out.println("Foo's arg Constructor Foo (&qu

Java编程思想学习笔记——注解

前言 在Android开发的过程中,我们为了减少重复代码的编写,会使用类似ButterKnife,AndroidAnnotations 这类依赖注解库.代码示例如下: //不使用 Button btn = (Button)findViewById(R.id.btn); //使用ButterKnife @Bind(R.id.btn) Button btn; //使用AndroidAnnotations @ViewById(R.id.btn) Button btn; 可以看出通过注解,我们能大量减少

Java编程思想学习笔记——接口

1.抽象类和抽象方法 抽象方法:不完整的,仅有声明而没有方法体. abstract void f(); 抽象类:包含抽象方法的类.(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的.) 1.用抽象类直接创建对象是不安全的,因为这个抽象类是不完整的.编译器通过这种方式保证了 抽象类的纯粹性. public abstract class Person { public abstract void eat(); public abstract void pee(); public abstrac