重学Java(一):与《Java编程思想》的不解之缘
说起来非常惭愧,我在 2008 年的时候就接触了 Java,但一直到现在(2018 年 10 月 10 日),基础知识依然非常薄弱。用一句话自嘲就是:十年 IT 老兵,Java 菜鸡一枚。
于是,我想,不如静下心来,重新读一遍那些经典的 Java 技术书,并且没读完一章就输出一篇原创技术文章。从哪一本开始呢?想了一想,还是从《Java 编程思想》开始吧!毕竟这本书赢得了全球程序员的广泛赞誉,从 Java 的基础语法到最高级特性,都能指导我们 Java 程序员轻松掌握。
记得刚上大学那会,就买了一本影印版的《Java 编程思想》,但由于初学 Java,对编程极度缺乏信心,导致看这本书有一种看天书的感觉。后来,去苏州参加工作的时候把它作为最宝贵的纪念品带了过去。
2014 年回洛阳的时候它送给了一位关系不错的同事,权当是分别的礼物吧。2016 年的时候,我又重新买了一本,希望自己能够夯实一下基础。但事与愿违,它被我束之高阁了——又两年过去了,我重新捧起它,总觉得有一种负罪感。
读一本书,最好能从它的前言开始。那么我们就来看看 Bruce Eckel 在前言里都说了些什么吧。
01、Java 的核心目的是“为程序员减少复杂性”。
James Gosling 创建 Java 语言的初衷是:“减少开发健壮代码所需的时间和困难”。尽管这个目标导致 Java 的运行效率偏慢,但与用 C++ 开发相同的程序相比,Java 只需要一半甚至更少的时间。
作为程序员,这是我们希望看到的。少敲代码省下来的那一部分时间,可以约个妹子去看场电影,放松一下,对吧?况且,Java 一直在更新,性能也不断地被优化。
记得上大学那会,我们专业只有两个班,一个班学 Java,一个班级学 C++。结果大学毕业后,C++ 的同学几乎都转了行,有些同学反馈说因为 C++ 的指针太飘忽不定了,难学难懂难掌握(C++ 表示不服,怎么能这样莫名其妙地泼脏水呢)。
02、并发编程确实很难。
Bruce Eckel 吐露心声说自己也曾深陷“并发”泥潭,但经过“数月的努力,还是走了出来”。所以,各位,千万不要丧失驾驭并发编程的信心啊,尽管并发编程是真的难。
并发是什么呢?通常情况下,并发是指“系统能够同时并行处理很多请求”。我们来看一下并发常用的一些指标。
1)响应时间(Response Time):系统从接收请求到做出回应所花费的时间。
2)吞吐量(Throughput):单位时间内处理的请求数量。最明显的例子就是高速通道上的 ETC 和普通车道,显然 ETC 的吞吐量更大,因为不需要在进站的时候从窗口取卡,在出站的时候还卡缴费。
3)并发用户数:同时承载正常使用系统功能的用户数量。
如何提升系统的并发能力呢?
1)提升单机硬件配置。比如说增加 CPU 核数(从 2 个到 4 个,从 4 个到 8 个),升级网卡到万兆,升级硬盘为 SSD(固态硬盘,比普通硬盘读写更快、质量更轻、能耗更低、体积更小),扩充系统内存(从 64G 到 128G)。
2)改善单机架构配置。比如使用内存读写而不是每次都读写数据库。
3)增加服务器数量。单机性能总是有极限的,但服务器集群数量可以很庞大。
好了,本篇文章到此就要结束了。我从《Java 编程思想》的前言里读到了以上这些内容,你呢?
PS:这篇文章写于 2018 年 10 月 10 日,现在读起来感觉当时写得太烂了,但很适合作为《重学Java》系列文章的第一篇(毕竟开局嘛)。
重学Java(一):与《Java编程思想》的不解之缘的更多相关文章
- JAVA面向接口的编程思想与具体实现
面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的. 问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...
- Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...
- java的代理(编程思想)
代理 第三种关系被称为代理,java并没有提供对它的直接支持.这是继承和组合之间的中庸之道,因为我们将一个对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承 ...
- java的继承(编程思想)
继承语法: extends 初始化基类: 由于现在设计基类和导出类两个类,而不是一个类,所以要试着想像导出类锁产生的结果对象,会有些困惑.从外部看来,它就像是一个与基类具有相同接口的新类,或许还会有一 ...
- java的初始化(编程思想)
6.成员初始化 java尽量保证:所有变量在使用前都能得到恰当的初始化.对于方法的局部变量,java以编译错误的形式来贯彻这种保证. 如果类的成员变量时基本类型,那么没有初始化给默认值 在类里定义一个 ...
- Java(Android)编程思想笔记01:多态性的理解
1. 多态的定义: 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式. (发送消息就是函数调用) 2. 多态的理解 多态是面向对象的重要特性,简 ...
- Java(Android)编程思想笔记03:在Android开发中使用MVP模式
1. MVP模式简介: MVC模式相信大家肯定是比较熟悉的:M-Model-模型.V-View-视图.C-Controller-控制器. MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M- ...
- 重学C++ (十一) OOP面向对象编程(2)
转换与继承 本节主要须要区分的是: 基类和派生类的转换: 引用(指针)的转换和对象的转换. 1.每一个派生类对象包括一个基类部分.因此.能够像使用基类对象一样在派生类对象上执行操作. 基于这一点,能够 ...
- 重学 Java 设计模式:实战抽象工厂模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
随机推荐
- 《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?
Java虚拟机是如何加载Java类的? 这个问题也就是面试常问到的Java类加载机制.在年初面试百战之后,菜鸟喜鹊也是能把这流程倒背如流啊!但是,也只是字面上的背诵,根本就是像上学时背书考试一样. ...
- Git原理入门简析
为了获得更好的阅读体验,建议访问原地址:传送门 前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的 ...
- wordpress修改登录密码
wordpress忘记密码更改 网上搜到的方法: 1.后台邮件重置: 2,phpmyadmin登录数据库,执行mysql语句或者在wp_users表中重置密码: 3,利用php文件重置. 这是提供一种 ...
- Mysql5.6对时间的处理精度问题
在业务处理需要使用new Date()来更新时间类型的字段时,数据库会对时间类型进行四舍五入处理,如果new Date()的更新时间与原时间间隔太短,数据库进行四舍五入之后,认为值没有变化,从而不更新 ...
- DRF (Django REST framework) 中的视图扩展类
2. 五个扩展类 1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法 ...
- LoRaWAN_stack移植笔记(七)_数据包的接收发送
以下的代码适用于LoRa sx1276点对点的通讯,纯粹的考虑在非发射模式下即为接收模式 配置sx1276的射频参数,并且切换到接收模式 //bandwidth [0:125 1:250 2:500] ...
- 基于 Vue+Mint-ui 的 Mobile-h5 的项目说明
Vue作为前端三大框架之一,其已经悄然成为主流,学会用vue相关技术来开发项目会相当轻松. 对于还没学习或者还没用过vue的初学者,基础知识这里不作详解,推荐先去相关官网,学习一下vue相关的基础知识 ...
- Sqoop数据迁移工具的使用
文章作者:foochane 原文链接:https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDF ...
- redis数据结构、持久化、缓存淘汰策略
Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题.redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放 ...
- Immutable Object模式 - 多线程
Immutable Object模式 - 多线程 前言 在多线程编程中,我们常会碰到修改一个对象的值,如果在不加锁的情况下 ,就会出现值不一致的问题,那么有没有一种方式可以不通过加锁的方式也可以保证数 ...