Java编程学习书籍推荐:初学者到进阶的必读指南
想要自学Java编程,有什么书籍推荐么?
自学Java需要哪些学习书籍?下面我们一一展示。
这是一本非常棒的书。
当然,在推荐之前,你可以在B站搜索一下名字,然后观看学习视频。
我们学校名师高琪教授的Java300课程对于刚入门的初学者来说非常好。
开始就适合了!
1.《Java编程标准》适合初学者和中级用户。
简介:本书作者有:Java之父JamesGosling的书推荐给初学者,对基础知识有很好的解释。
2.《Java编程思维》适合初学者和中级。
简介:豆瓣给出9.1分,受到全球程序员的广泛好评。
有人说这本书不适合初学者,但编者认为,作者对读者现有的知识和经验要求不高,只需要了解一门基本的编程语言即可。
作者通过通俗易懂、小而直接的例子来解释每一个模糊抽象的概念,需要时间去深入研究。
3.《Java核心技能:第一卷基础》适合:初级和中级水平
简介:这是一本官方机构书籍,所以拥有一本总是一个好主意。
本书内容全面、通俗易懂。
它可以用作字典,正是您开始学习所需的。
4.《Java数据结构与算法》适合初级、中级和高级。
简介:这本书基本售空,可见其受欢迎程度。
作者主要使用Java语言来描述常用的数据结构,值得一读。
5.《Java与模式》适合中高级水平。
简介:难得一见的中国人写的优秀Java书籍。
这是一本实用教材,主要讲解设计原理和最常见的设计模式。
本书出现较早,是初、中、高级学生的必读书籍之一。
6.《SCJP学习指南》适合初学者和中级学习者。
简介:官方考试必备书籍,对于测试你的Java学习非常有用。
本书特别适合学生阅读。
如果你完全理解了这本书,那么你在面试中遇到Java问题就没有问题了。
一些工作多年的工程师会遇到一些自己无法解决的问题。
学习过程中补充编程视频是必不可少的。
有需要的请点个赞吧!
1.《重构:改进现有代码的设计》适合:中级、高级
简介:清晰暴露重构过程,讲解重构原理和最佳实践,说明深入挖掘代码的必要性它告诉您何时何地进行改进。
大师的杰作让我们明白软件不是一蹴而就的,而是一步步完善的。
2.《XML入门经典》适合初学者、中级和高级水平。
简介:很多人认为没有必要购买XML书籍,但无论如何我还是推荐阅读这本书作为参考,它将帮助您了解XML的各个方面。
会的。
里面的很多东西至今仍在使用。
3.《JQuery基础教程》适合初学者、中级和高级。
简介:从现在开始,学习jQuery就是基础了。
否则,你的应用中将会遇到许多奇怪的问题。
未来不知为何。
就我个人而言,我认为jQuery已经成为当前的JavaScript标准库,拥有大量的插件,大大简化了前端操作。
4.《JavaScript权威指南》适合初学者、中级和高级用户。
简介:一本从新的角度和层面介绍JavaScript的参考书。
市场缺口。
是学习js必备的参考书之一。
5.“如何清洁代码”适合中级和高级水平。
简介:教您如何有效地使用干净的代码。
在软件工程中,理想的编码是由多人编写的代码看起来就像是由一个人编写的。
最后,想要学习Java编程,就得努力学习!祝你成功!
leetcode题库java基础题?
为什么Java在很多leetcode题上都比C++快?C++有非常多的隐藏代码,所以效率还是C的。
另外,对于纯算术题,Java也很快。
部分计算的代码少了,JIT构建后会生成更多的代码,和C没什么区别。
LintCode/LeetCode训练问答-基础知识1.找到二叉树中值最大的节点并返回:
给定如下二叉树:
返回值为3的节点。
简要分析:运用重复的思想;注意判断是否为空;
2.Singleton
单例是最常见的设计模式之一。
如果一个类仅存在并且在任何给定时间至少定义了一个实例,我们将这种设计模式称为单例。
例如,对于classMouse(不是动物小鼠),我们必须将其设计为单一模式。
你的任务是设计一个特定类的getInstance方法,这样你每次调用getInstance都可以获得相同的实例。
示例:
在Java中:
Aa=A.getInstance();
Ab=A.getInstance();
a必须等于b。
挑战:
如果同步调用getInstance,你的程序能正确执行吗?
注意:实现单例有两点需要注意:①将构造函数设为私有,不允许外界通过构造函数创建对象②使用公共常量方法暴露给外界返回单例实例
参考:单例模式的几种写法比较:
3.对整数进行排序
给定一个整数数组,按升序对它们进行排序,使用选择排序、冒泡排序、插入排序或任何O(n2)排序算法。
示例:
对于数组[3,2,1,4,5],排序后为:[1,2,3,4,5]。
答案(Java版):
选择排序:
冒泡排序:
答案分析:
对于每种语言的应用程序,请参考维基百科:
**4。
斐波那契数列**
求斐波那契数列中的数字N。
所谓斐波那契数列是指:
前两个数字是0和1。
数字i是数字i1和数字i-2的和。
斐波那契数列的前十个数字是:
0,1,1,2,3,5,8,13,21,34...
答案:
注意事项:
1.n从1开始,而不是0
2。
一般情况下,我们会考虑用重复的方式来实现,但这一次代价很大:
3扩展:青蛙跳到梯子顶,放砖块
参考:
一个问题javaleetcode关于循环逻辑,请老师讲解例如:数组的数字有5组,即大小为5。
它的物品代码是01234
如果你的J是jlength-1,即J4,那么j的值为0123,这意味着你永远无法获得最后一个物品。
publicintlengthOfLongestSubstring(Strings){
if(s.length()==0)return0;
哈希映射字符更多,Integermap=newHashMapCharacter,Integer();
intmax=0;
for(inti=0,j=0;is.length();++i){
if(map.containsKey(s.charAt(i))){
j=Math.max(j,map.get(s.charAt(i))+1);
map.put(s.charAt(i),i);
max=Math.max(max,i-j+1);
}
returnmax;
}
我花了7天终于通关LeetCode:连续十七个数组,真的不容易大家好,我是第三个儿童难以解决问题的人。
接下来,我们就开始矩阵类算法的解题之旅吧!
数组
数组基本上是我们刚学会写“HelloWorld”后不久最熟悉的数据结构,接下来就是“阳慧三角”之类的练习。
数组结构
上图是一个字符数组的例子。
由于内存空间是连续的,因此可以直接通过下标获取对应的元素。
但是删除就麻烦一点了,相当于删除了一个元素就填了洞,剩下的洞必须用其他元素来填补。
删除元素
在Java中,存储多维数组基本上都是一维主数组。
我们都知道Java中的“=”用在基本数据类型中,是值传递,用在引用数据类型中,是引用传递。
这一部分可以展开成一篇文章:
正如你所看到的,当newArray改变时,数组也会改变。
为什么?
在Java中,数组是引用数组类型。
Array和newArray是存储在栈上的引用,指向实际存储在堆上的数组对象。
所以改变newArray实际上改变了newArray指向的数组。
数组引用传递
这是我们回答问题时应该注意的。
必须在循环中逐个复制数组。
主题:704.二分查找()
难度:简单
描述:
假设n个元素已排序(按升序排列)order)整数数组数字和目标值Target编写一个函数,查找数字中的目标,如果目标值存在则返回下标,否则返回-1。
示例问题
思路:
二分查找可以说我们都很熟悉了。
因为数组是有序的,所以定义了三个指针,low、high、middle,每次都和middle指针指向的number[mid]元素进行比较,
二分查找
但是这段代码还有一个问题,它在哪里呢?intmid=(left+right)/2;
这个位置可能会导致内存溢出,因为left和right的值很大所以应该写成intmid=left+((right-left)1);
修改以下代码如下:
时间复杂度:O(logn)
主题:35寻找插入位置()
难度:简单
描述:
给定一个排序数组和一个目标值,在数组中找到目标值并返回其索引。
如果数组中不存在目标值,则返回将顺序插入的位置。
请使用时间复杂度为O(logn)的算法。
示例题
思路:
二分查找比较简单,但是要写正确还是需要花点功夫的。
做基本相同的合并问题。
这个问题基本是一样的。
可能的插入位置有四种:
二叉树插入位置
代码如下:
时间复杂度:O(logn)
问题:34.查找排序数组中元素的第一个和最后一个位置()
难度:中等
描述:
给定一个数组按整数数组编号升序排序,以及目标值有针对性。
查找数组中指定的目标值的开始位置和结束位置。
如果数组中不存在目标值,则返回[-1,-1]。
高级:
示例问题
思路:
假设时间复杂度为O(logn),矩阵为命令,你知道,是时候搜索二进制了。
但是这个问题有点不同,需要找到边界。
我们应该做什么?
这提供了二分搜索来查找边界。
这道题的思路是什么?
我们使用二分查找分别查找左界和右界。
一般二分查找:
注意,这里的返回条件是nums[mid]==target,但是搜索边界时不能这样,因为我们无法确定它的中点,不是我们的边界。
以求左界为例,当条件为target=nums[mid]时,则向左移动。
寻找正确的边界是类似的。
代码如下:
时间复杂度:O(logn)
主题:27.RemoveElement()
难度:简单
说明:
给定数组的个数和val的值,您需要删除所有值等于val的元素并返回新的长度之后的数组移动。
不要为数组使用额外空间,您应该只使用O(1)额外空间并修改输入矩阵。
项目的顺序可以更改。
您无需考虑数组中超出新长度的现有元素。
解释:
为什么返回值是整数,但输出答案是数组?
请注意,输入数组是通过'传递的引用’”,表示函数中对输入矩阵所做的修改对调用者可见。
你可以想象一下内部流程:
思路
“暴力解决”
没有什么可以说暴力解法,和上一题类似,找到要删除的元素,将其后面的所有元素前移一位。
暴力解法
这里有两点需要注意:
代码如下:
时间复杂度:O(n?
“双指针法””
双指针方法是数组和链表问题中常用的一种方法。
如何使用双指针方法解决这个问题?
当没有找到目标时,选择两个指针,一前一后,当没有找到目标时,前后一起移动发现目标,停止后,前端继续移动,导致前面指示的值被设置为距离中指示的值。
这样,双指针就完成了双循环用单循环完成的工作。
双指针方法
代码如下:
时间复杂度:O(n)。
主题:27.RemoveElement()
难度:简单
说明:
我给你有序的数组编号,请删除重复元素到位,使每个元素只出现一次,并返回删除后数组的新长度。
不要为数组使用额外空间,您必须就地修改输入矩阵,并使用O(1)额外空间来完成此操作。
解释:
为什么返回值是整数,但输出答案是数组?
请注意,输入数组是通过'传递的引用’”,这意味着函数中对输入矩阵所做的修改对调用者是可见的。
你可以想象内部流程如下:
示例问题
想法
虽然不是回过头来,快速创建一个基本对称的来统一一下
直接上代码:
时间复杂度:O(n
主题:283移零()
难度:简单
说明:
通过查看对于数组的数字,编写一个函数,将所有零移动到数组末尾,同时保持非零元素的相对顺序。
「示例:」
「解释」:
思路
继续按照上一题的思路。
零移动
代码如下:
时间复杂度:O(n)。
主题:977.有序矩阵平方()
难度:简单
说明:
我给你一个按钮,让你点击“非”按“降序”排序的整数数组返回由“每个数字的平方”组成的新数组,该数组也需要按“非降序”排序。
示例问题
想法
“激进排序方法”
当你看这个问题时,哪种方法最简单?
首先找到数字方阵,然后对新数组进行排序。
写代码也很容易:
时间复杂度:遍历的时间复杂度是O(n),快速排序的时间复杂度是O(nlogn),所以时间复杂度为O(n+nlogn)。
思路
“双指针方法”
我们连续写了几个双指针。
这道题可以用双指针来实现吗?
让我们来分解一下。
这个矩阵是在平方之前排序的,所以它一定是两边绝对值最大的数。
所以我们可以选择两个光标,一个指向最左边,一个指向最右边,比较两个方块的大小,将较大的方块放入结果数组中,然后移动光标。
对有序矩阵进行平方
代码如下:
时间复杂度:O(n)。
题目:1.两数之和()
难度:简单
描述:给定一个整数数组的数字和一个整数目标值,请找到两个数数组中和为目标值的两个整数,然后返回它们的矩阵下标。
您可以假设每个条目仅对应一个答案。
但是,数组中的相同元素不能在答案中重复出现。
您可以按任何顺序返回答案。
示例问题
想法:
“暴力解决方案”
让我们从每个人都应该知道的最简单的暴力解决方案开始:冒泡排序,类似情节两个级别。
两级循环
代码写起来也很简单:
时间复杂度:看到这个双层循环就知道时间复杂度了是o(n?)。
“辅助哈希方法”
O(n?)时间复杂度有点过高。
这道题的重点是判断两项之和。
我们可以使用哈希数组来存储元素,这样遍历一次就足够了,例如,如果target和9就是当前元素2,我们只需要判断集合中是否存在元素7即可。
时间复杂度:哈希查询和值检索的时间复杂度为O(1),因此总体时间复杂度为O(1)。
主题:15.三个数字的和()
难度:简单
描述:
给你一个包含n的整数判断矩阵数中是否存在a、b、c三个元素,使得a+b+c=0?请找出和为0的三个数字,并且不要在图形上重复。
注意:答案不能包含重复的三元组。
示例问题
思路:
“哈希方法”
完成两个数之和后,我们首先想到的about是哈希方法。
两级循环,获取a和b,然后将c设置为0-(a+b)。
但是这里还有一个问题,答案不能包含三个重复。
所以,我们仍然需要找到一种方法来删除哈希中的重复元素。
可以添加一个约束,第三个数的索引大于第二个数再存储。
时间复杂度:双循环,O(n?)。
虽然我是这样写的,但是说实话,很难写出没有问题的代码。
我们写了很多双指针,是否可以使用双指针呢?
《双指针法》
先对数组排序,再遍历数组。
然后取出当前节点后面的left、right指针,判断left、right指针的值是否为0-nums[i],然后分别向左、向右移动。
如何删除重复项?
当条件满足时,检查左光标的值是否等于上一个位置的值,右光标的值是否等于下一个位置的值。
双指针方法
代码如下:
时间复杂度:O(n?)
标题:18.四Numbersand()
难度:简单
描述:
给定一个包含整数n和目标值的数字数组,判断是否有四个元素a和b并且c和d是数字,因此它们是一个值a+b+c+d等于目标吗?找出所有满足条件且不重复的四边形。
注意:答案中不允许重复绝句。
示例问题
思路:
我们延续三个数字之和的思想,在三个数字之和之外再添加一层循环。
时间复杂度:O(n?)
主题:209.Subarray()的最小长度
难度:中
说明:
给定一个包含n个正整数的数组和一个正整数目标。
求矩阵在满足其最小长度和目标的数组中连续sub[numsl,numsl+1,...,numsr-1,numsr],并返回其长度。
如果没有匹配的子数组,则返回0
示例问题
想法
这个问题是一个经典的滑动窗口问题[4]。
image-20210801164436322
代码如下:
时间复杂度:O(n)即使循环内部有循环,其start和end离散地移动n次,因此时间复杂度为O(n)。
主题:219.ThereAreDuplicatesII()
难度:简单
描述:
给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums[i]=nums[j],且i和j之差的绝对值至多为k。
示例问题
想法:
我们在上面提出了滑动窗口问题,然后我们将解决另一个问题,该问题也可以使用滑动窗。
这个问题的滑动窗口略有不同。
前一个问题窗口是活动的,它是一个长度为k的固定滑动窗口。
他回来了。
如果有新元素进入窗口,则必须删除标头元素以保持窗口的长度。
固定窗口
代码如下:
时间复杂度:O(n)。
题目:1052.愤怒的书店老板()
难度:中
说明:
今天,书店老板计划开店为顾客提供试用。
时长分钟。
每分钟都有一些顾客(顾客[i])进入图书馆,他们都会在那分钟结束时离开。
在某个时候,书店老板生气了。
如果书店老板在第一分钟生气,则angry[i]=1,否则angry[i]=0。
当书店老板生气的时候,顾客在那一刻会不满意,但如果他们不生气,他们就会满意。
图书馆主人知道一个秘术,可以抑制他的情绪,让他在X分钟内不生气,但他只能使用一次。
请返回您在该工作日能够满意的最大客户数量。
“示例:”
思路:
这道题是一道固定窗口题。
总体思路是用不生气的部分作为固定窗口,将顾客分为三部分,最后求三部分之和最大。
固定窗口
时间复杂度:O(n)。
空间复杂度:O(1)。
题目:面试题3.数组中出现频繁出现的数字()
难度:复杂
描述:
求数组中的数字数组重复的数字。
长度为n的数字数组中的所有数字都在0n-1范围内。
数组中有些数字重复,但没有我知道有多少个数字重复,也不知道每个数字重复多少次。
请找出数组中任意重复的数字。
“示例1:”
思路:
“哈希方法”
这种寻找重复数字的问题,我们的大脑首先我想到的是使用散列来存储项目,然后比较它们。
代码实现也很简单:
时间复杂度:O(n)。
空间复杂度:O(n)
但是今天小说的主人公不是他,而是“现场替换法”
我们注意到,一个状态中的所有数字都在0n-1范围内,因此在这方面,我们可以将元素放置在与其值相对应的低位置。
比如[2]=1,我们把它放到下标位置1。
遍历完后,元素发现它应该在的洞已经被占据了它的孪生兄弟,他知道自己是多余的。
就地替换
代码如下:
时间复杂度:O(n)。
空间复杂度:O(1)
主题:41.缺失的第一个正数()
难度:复杂
说明:
给定一组未排序的整数,请找到其中未出现的最小正整数。
请实现一个时间复杂度为O(n)且仅使用固定级别额外空间的解决方案。
示例问题
想法
“辅助矩阵”
这个问题有一个非常聪明的解决方案![1]
可以输入一个辅助数组,从1开始,将原数组对应的元素存放在对应的位置。
如果原数组number[0]=1,则该元素必须存放在辅助数组number[1]中。
然后遍历辅助数组,发现的第一个陷阱就是第一个缺失的正数。
辅助矩阵
代码如下:
时间复杂度:O(n)。
空间复杂度:O(n)。
“现场替换法”
我们采用现场替换法来解决上述问题,降低空间复杂度。
我们也能解决这个问题吗?
内联替换不能修改数组的长度,我们当然不能将i存储在nums[i]中。
就地替换
代码实现如下:
时间复杂度:O(n)。
空间复杂度:O(1)。
主题:54.SpiralArray()
难度:中
描述:
给你一个数组,其中包含m个行n列,请按“顺时针螺旋顺序”返回数组中的所有元素。
例1:
例2
思路
这道题比较容易思考,就是前四,正确,它跨越了趋势底部和左侧矩阵顺时针排列。
顺时针遍历数组
但这道题的问题在于细节。
有两种类型。
一是完成遍历圆,上下左右移动。
遍历是左闭右开[的条件。
我们采用第二种方法:每遍历一条边,就移动对应的位置。
遍历是左闭包和右闭包的条件。
还有一个值得注意的细节是,遍历过程中可能会出现上下|左右,一对边界相互交叉。
这意味着此时所有元素都已经传递完毕。
如果没有时间中断,就会重复遍历。
代码如下:
时间复杂度:O(mn),其中m和n分别是输入矩阵的行数和列数。
主题:59.螺旋矩阵II()
难度:中
描述:
给定一个正整数n,创建一个nxn方阵包含从1到n2的所有元素,元素按顺时针顺序螺旋排列。
示例
思路
和上面的问题基本一样,我们直接套用即可。
符号如下:
时间复杂度:O(n?)
剑代表Offer29。
顺时针打印矩阵是一个类似的问题。
我写了一首歌来总结:
Java书籍推荐有哪些
对于初学者来说,阅读只是学习的一部分,很重要的一部分就是实践。
你必须多编码,多编码,多编码。
下面给大家推荐几本我个人认为还不错的书。
书永远读不完,但知识可以是你自己的。
最好的解决方案是选择适合您的书单。
有些书是需要看的,因为当时有项目需要用到这个技术,比如云计算、大数据相关的书。
简单的Java学习者可以忽略这方面的书籍,特此提醒大家。
ThePragmaticProgrammer:FromJourneymantoMaster
作者:[US]AndrewHunt、DavidThomas
简介:
《程序员之道》之所以在全球范围内广泛传播,并被一代代开发者奉为指南,是因为它可以创造真正的价值。
:或者写出更好的软件,或者探索编程的本质,所有的收获都不依赖于特定的语言、框架、方法。
“将底层知识放在代码中它所属的地方;为其他高级指令保存注释。
”
——引自第二章实用方法
2.“如何清理代码”(66%推荐)CleanCode:AHandbookofAgileSoftwareCraftsmanship
作者:[US]RobertC.Martin
内容简介:
干净的代码质量更加可靠,也为后期的维护和升级打下了良好的基础。
作为编程领域的佼佼者,本书作者提供了一系列有效的干净代码操作实践,并辅以来自实际项目的正反面例子。
只要遵循这些规则,就可以编写出干净的代码,从而有效提高代码质量。
“我们都看了一眼自己造成的混乱,并决定把它扔掉,继续新的一天。
我们都见过我们蹩脚的代码工作并得出结论,最好不强大。
我们都说有一天我们必须把它清理干净。
当然,在那些日子里,我们从未听说过勒布朗的规则:后来等于永远。
”
——引自第1章1.2糟糕的代码
3.《CodeComplete》(建议42%)CodeComplete
作者:【美国人】SteveMcConnell
内容简介:
这本书被广泛认为是十多年来最好的编程指南。
始终帮助开发人员编写更好的软件。
这也是一本完整的软件构建手册,涵盖了软件构建过程中的所有细节。
它从软件质量和编程思想等方面讨论了软件构建中的各种问题,详细讨论了紧跟潮流的新技术、高层观点和通用概念。
还包含丰富、典型的程序示例。
“有效管理(需求)变更是实现高质量的关键。
”
——引自第20章软件质量概述
p>4。《重构》(建议35%)
重构:改进现有代码的设计
作者:[美国人]MartinFowler
内容简介:
本书清晰地揭示了重构的过程,并解释了重构的原理和实践,以及何时何地应该开始深入挖掘代码以进行改进。
本书提供了60多种可行的重构,每一种都介绍了经过验证的代码转换技术的动机和技术。
本书提出的重构指南将帮助开发人员一步步修改代码,从而降低开发过程中的风险。
“20年来,《重构》一直是我办公桌上的必备书籍,每次重读,依然有感悟。
对我来说,它的意义在于“重构”不仅仅是指导代码重构,更重要的是让人们从一开始就知道什么是好代码,尽量写出没有“坏味道”的代码。
马丁·福勒对本书的重构反映了近年来的编辑过程。
看来现有的设计总有改进的空间。
”——韩磊,《代码清洁》译者
HeadFirstDesignPatterns
:[美国]EricFreeman、BertBates、KathySierra、ElisabethFreeman
内容简介:
本书向您展示了强大的、优雅的、可重用的、灵活的设计模式,并利用认知科学和学习理论的最新研究成果来创建一个多元的设计模式。
以专为大脑工作方式设计的视觉丰富的形式提供感官学习体验,而不是让您入睡的乏味文本输入方法
“为接口编程,而不是为实现编程。
”
——引自第11页影印版
6.《人月神话》(推荐27.9%)TheMythicalMan-Month:EssaysonSoftwareEngineering
作者:[美国人]FrederickP.BrooksJr
内容简介:
本书内容来源于作者Brooks在IBM担任System/360计算机系列及其庞大的软件系统OS/360项目经理的实践经验。
在本书中,布鲁克斯为人们管理复杂项目提供了最有见地的见解。
其中有许多发人深省的观点和大量的软件工程实践,为每一个复杂项目的管理者给出了自己的见解。
“简单明了来自于概念的完整性。
每个部分必须体现相同的原理、原理和一致的妥协机制。
语法上,每个部分应该使用相同的技术;语义上应该具有相同的相似性,因此易于使用使用性实际上需要设计的一致性和概念的完整性”
——引自“团队的本质”章节
7.节目《员工职业素养》(推荐27.9%)TheCleanCoder:ACodeofConductforProfessionalProgrammers
作者:[US]RobertC.Martin
内容简介:
本书是编程大师Bob叔叔40多年编程生涯的经历,阐述了成为一名真正专业的程序员需要哪些态度、原则和行动。
他以自己和身边同事所走过的弯路和错误为榜样,意在为后人引路,帮助他们在事业上更上一层楼。
“软件行业的快速变化意味着软件开发者必须坚持广泛学习,才能不落伍。
”
——引自第一章专业精神
8.“修改代码的艺术”(推荐26.4%)有效地使用旧代码
作者:[US]MichaelFeathers
内容简介:
世界级计算机专家MichaelC.Feathers的经典之作,软件开发大师RobertC.Martin撰写序言,推荐作为权威指南修改遗留代码。
它深入分析了修改遗留代码的各种方法和策略,并在理解遗留代码、编码和测试、重构、添加功能等方面给出了很多实用的建议。
这是所有程序开发人员的必读之作。
“封装是个好东西,但不要对测试人员这么说,他们不这么认为。
过大的类往往会隐藏太多的东西。
”
——引用自第20章开始处理主要类别
9。“设计模式”(建议25%)
DesignPatterns
作者:[美国]ErichGamma、RichardHelm、RalphJohnson、JohnVlissides
内容简介:
四位顶尖设计师在面向对象软件体验设计方面积累了丰富的经验,并提出了一系列简洁的设计方案。
以及常见设计问题的清晰解决方案。
这23种设计模式使设计人员能够创建更加灵活、美观且可重用的设计,而无需自己寻找解决方案。
“将系统分解为对象集合时需要考虑很多因素:封装性、粒度、依赖关系、灵活性、性能、演进、重用等。
它们都会影响系统的分解,并且这些因素通常仍然相互冲突”
——引自第1.5章组织目录
10。《程序员面试代码(第6版)》(推荐22%)
破解编码面试
作者:【US】GayleLaakmannMcDowell
内容介绍:
本书环环相扣,对程序员面试的各个方面都进行了全面详细的介绍,程序员应该如何应对面试才能脱颖而出在面试。
内容主要涉及面试流程分析、面试官幕后决策及可能提出的问题、面试前准备、面试结果分析结果处理,以及189来自微软、苹果、谷歌等多家知名公司的编程面试题和详细解答。
第6版修改了上一版部分题的解答,增加了各章节的介绍性内容,增加了更多的算法策略,并增加了所有题的提示信息。
“我不是招聘人员,我是软件工程师。
所以我知道当场想出一个很棒的算法,然后在白板上写出完美的代码是什么感觉。
作为一名应聘者和面试官,我都经历过这个过程。
”
——引自前言
以上是为大家推荐的一些不错的编程书籍和资料。
您可以搜索并阅读它们。
你不可能掌握所有这些,但丰富你的知识并没有错!
毕竟,书籍是死的,而视频是灵活的。
阅读时,不要忘记与视频一起编码和练习项目!毕竟以后找工作,不是看你能记住多少知识点,而是看你的实践经验和能不能开发自己的项目!
在这里,我想推荐一下我们的Java基础教程。
我不能保证它有多好,但我们会尽力提供指导:
I希望这个答案对您有帮助!