一、Java编程哪些书值得推荐?
书籍是人类进步的阶梯,在互联网不算发达的十年前(特指09年之前),学编程是要靠各种编程相关的书滴,大部分时间都必须沉迷于图书馆才能学好。现如今不同了,在线教育满天飞的今天,如果你想学习编程打开App或者访问相应的网站就行了。今非昔比。可为什么还要读书呢?答曰:读书可以让我们深化思想,很快地建立自己的知识脉络,形成独立的判断。
回到正题,现阶段如果学习Java编程,应该读哪些书呢?
01入行
我记得刚学Java时,师兄们都推荐《Java编程思想》,都说书的内容还不错。可当时的我并没有看完,读的过程感觉怪怪的,不知道是翻译的问题还是知识点本身就太晦涩了。自己知识欠缺,不能太深刻体会作者的用心良苦。
所以,2020年入行的你,我就不推荐这本书了。想看的话,可以找找电子版。
02Java编程的逻辑
去年,忘记在那个社区闲逛的时候,看到了这本书。试读一下,感觉作者的思路很符合从零开始学习Java编程,强烈推荐。老马说编程:《Java编程的逻辑》-博客文章列表,肺腑之作,很是敬佩。这本书有电子版,但是作为支持,我还是收藏了这一本的纸质版。
向左,向右
Java编程的逻辑马老师从Java的编程基础:基本数据类型/顺序/分支/循环/范型与容器/文件IO,到Java的高并发/反射/动态代理,再到Java8开始支持的函数式编程。老马维持了一贯通俗易懂的写作风格,也展示了其深厚的功力。把一件事弄明白可能很容易,但将它简单明了地解释给旁人就需要更高的内力了。
这本书看完,配合练习一些代码,你就成为一名合格的Javaer了。
03向左,向右
向左进入移动App开发领域,向右后端开发。向左:精彩的App美轮美奂。向右,一片漆黑。可当年的我毅然决然地选择了向右。看到这里,安卓的兄弟们可以关闭这篇文章了。后面的内容很可能就和大家没有啥交集了,难过脸>..<
04Servlet
学习JavaWeb,Servlet算一道门槛。开启潘多拉魔盒后各种妖魔鬼怪都会出来(多线程,并发)。接下来要去学习的内容都和它脱不开关系(比如Tomcat)。Java处理HTTPWEB请求是离不开Servlet的(现在其实可以了),但现阶段大部分的后端API依然是构建在Servlet之上的,特别是以SpringBoot构建起来的Java后端帝国。
学习到这里,应该看什么书呢?前端面试时,那句拷问灵魂的面试题:当你从浏览器输入一个地址之后,发生了什么?作为JavaWeb程序的开发者,回答这个问题是需要从更深的角度来回答才能合格的。这个问题回答的深度,不夸张的说能直接决定你的薪水。回答好这个问题,学好Servlet才能开启上帝之眼。
推荐读什么:死磕《JavaServletSpecification》,看源码。再试着写几个JSP页面配合Servlet感受下即可。
JavaWeb领域书太杂,现在都2020年了,真的没必要入手。一本都不要买!!!如果想看下提升自己能力的书,可以慢慢研究下Java并发编程了,毕竟所有面向Web编程都绕不开并发这个问题。
05JDBC
JDBC这一趴单独成文吧,还没想好怎么写,但JDBC学完就可以连接传统关系型数据库了,所以提前学习好MySQL吧。
高性能MySQL(第3版)
到这里Java程序已经可以正常处理HTTP请求,处理过程中借助JDBC来操作MySQL数据库保存各种状态。系统的架构就已经成型了,就像下面这样。
Model2-MVC
向右,学完Servlet和JDBC后,就是一个Java后端程序员了。但学到这里的你会有点沮丧,因为发现干什么都很麻烦。没事,我们继续。。
随着分工的精细化,前后端分离已经成为业内共识,后端的Java程序哥哥不需要再写基于后端模版渲染的页面了。
06SpringBoot
直接学习SpringBoot吧,尽早接触生产级框架,重塑上一阶段的自信心。如果推荐那一本书,《xxinAction》系列吧,张卫滨老师翻译的这本很值得购买。
Spring实战第5版(异步图书出品)
当然,官网的文档一定不要错过:SpringBootReferenceDocumentation。
07进阶
SpringBoot一时半会是学不完的,一个一个的知识点学下去吧。
写得一手好API,不等于写得一手好代码
代码结构混乱,没有发展性思维
程序性能不高,找不到原因
08设计模式
学习完设计模式,代码写得更易扩展。找寻一种编程匠艺的感觉吧,这里推荐之前看过的一本设计模式的书籍:秦老师的《设计模式之禅》,现在第二版了。极具趣味,容易理解,但讲解又极为严谨和透彻,也是Java领域从业大拿执笔。
09性能
提高程序的性能,有很多种办法,先学习别人的经验吧。推荐《OptimizingJava》,加入O'Reilly会员可以正常观看,国内没有出版。
《Java性能权威指南》也非常不错,可以用来慢慢修炼内功吧。
看到这里,基本上已经和大部分Java程序员拉开距离了。跟着周志明老师,可以深入浅出的剖析JVM。深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)。
另外,周老师也在极客时间开公开课了,强烈推荐。
10、其他技能
字符串处理,莫过于正则。有一本泰斗级别的书推荐,日志文本处理者身边常备工具书。
二、计算机语言java中得List
相信每个人从小到大都听过集合这个词语!只要是都上过学的小可爱都会听到“集合”这个可怕又熟悉的口号。从小学到高中,基本每天早上都会听到一个口号“集合”当你听到这可怕的口号时候证明你一天的时光正式开始了!
不管是生活中还是在学习中、工作中基本都能听到“集合”这个小朋友。
其实在计算机世界中也会有集合这个概念,而且这个概念还挺流行的。java中的集合分为四类:
第一个是List列表,第二个是Queue队列,第三个是Set集合,第四个是Map映射。
今天所要介绍的List。
List接口存储的数据必须有序的,不唯一(可重复)。啥叫有序和无序呢?唯一与不唯一又有啥区别呢?所谓的有序就是List下标是有序的,感觉说和没说没啥区别!但注意“下标这个词语”,读后感(https://www.yuananren.com)我们大家都做过早操和排过队,有第一排,第二排,第一列,第二列这种类似的区分。而List下标类似于这样子,第一个是0,第二个是1,以此来递增上去,这就是有序的。
那唯一和不唯一呢?这个更好理解了。唯一性就是独一无二的存在,不唯一意指:意义上是一样的存在,可能出现两个相同的东西。这就是唯一性与不唯一性。
List接口表示有序的集合,序列,提供了索引index,可以通过index对集合进行增删改查。
那集合如何实现呢?相当于如果你把一大群学生如何让他们听从你的安排呢?如果是你是小学生班主任的话,你的鞭子相当于一个ArrayList实现类,你用这个鞭子实现学生排成一排!
Listlist=newArrayList();
list.add("小明");
list.add("大明");
list.add("老杨");
System.out.println(list.toString());
结果:[小明,大明,老杨]。
ArrayList是List接口的实现类,底层数据结构是数组的可变有序列表。
ArrayList是一个包装类,内部封装了一个数组Object[]elementData,默认容量是10个空间,当使用add()方法时,它第一件事是确认容量够不够,如不够,则按照newCapacity=oldCapacity+oldCapacity/2的规则拓容。
如果你想自己手动拓容的时候,可适当使用ensureCapacity(minCapacity)和trimToSize来提供拓容性能和节省拓容空年间。
ArrayList是线程不安全的可变数组版本。在多线程环境下使用要注意。
我们可通过Collections.synchronizedList(newArrayList(…));操作得到一个线程安全的ArrayList。
ArrayList中的迭代器在List集合结果变化后,我们调用迭代器中的方法时会快速抛出ConcurrentModificationException异常通知程序,以免造成损失。
Listlist=newVector();
Vector()也是List的实现类,底层数结构也是数组的可变有序列表,但它是线程安全的。因为大部分方法都加了“synchronized”关键字以保证线程环境下的线程安全问题。但有时候我们还是选择ArrayList这个实现类多一点,因为ArrayList效率要比Vector高。
LinkedList是List接口的实现类,底层数据结构是链表。LinkedList线程不安全,它和ArrayList一样,但它的查询效率低。
何为链表?你可以想象成为双头蛇,它类似于双头蛇!
结语:List属于集合,和它一样是集合的还有三个。Set,Map,Queue。
List有几个实现类:
ArrayList实现类,底层数据结构使数组结构,查询速度快,增删改慢。
LinkList实现类,底层使用链表结构,增删快,查询慢。
Vector实现类:线程安全,线程同步。效率比ArrayList低。