Java-10
底部含网盘分享资料
面向过程(Procedural Programming)确实侧重于通过一系列函数或过程来组织代码,并强调设计算法和步骤来解决问题。
面向对象(Object-Oriented Programming, OOP)的核心思想是将数据(属性)和行为(方法)封装在一起,形成对象。
类的构建是面向对象编程中的一个重要概念,但它不是解决问题的“基本”程序设计技术。面向过程编程中,不使用类也能解决问题。因此,将类的构建描述为“基本程序设计技术”是不准确的,这个说法是不正确的。
面向过程编程本身并不直接提供重用代码的优势。代码重用更多是通过模块化编程(虽然与面向过程相关,但并非其本质特征)和函数库来实现的。相比之下,面向对象编程通过继承和多态等机制提供了更强的代码重用能力。
Thread类的sleep方法实际上是以毫秒(milliseconds)为单位来指定休眠时间的。例如,Thread.sleep(1000)
会让当前线程休眠1000毫秒(即1秒)。
当线程在休眠期间被中断时,sleep方法会抛出InterruptedException。
InterruptedException是一个继承自Exception的必检异常,调用可能会抛出该异常的方法时,必须在代码中显式地处理(即捕获或声明抛出)这个异常。
sleep方法可以放在try-catch块之外:这个说法在技术上不是错误的,但从实际编程实践来看,因为sleep方法会抛出InterruptedException,所以通常建议将其放在try-catch块中处理异常,以避免程序在异常发生时崩溃。然而,这个说法并没有直接断言sleep方法“不能”放在try-catch块之外,只是从最佳实践的角度,我们通常会放在try-catch块中。但从语法角度讲,不放在try-catch块中也是允许的,只要你声明抛出这个异常(如果该方法本身允许抛出异常)。
在面向对象编程中,一个方法可以在多个类中实现,这些类可能存在继承关系。
子类可以重写父类中定义的方法,这是多态性的一种体现。
在动态绑定中,是对象的实际类型(而不是引用变量的声明类型)决定了运行时调用哪个方法,而不是编译时。
在继承链中,一个方法可以在多个类中实现,但每个类只能有一个具体实现,这句话的意思是:
- 可以在多个类中实现:在面向对象编程中,一个方法(或称为成员函数)可以在继承链的不同类中有不同的实现。例如,一个基类(父类)中定义了一个方法,它的子类可以根据自己的需要重写(override)这个方法,提供不同的实现。
- 每个类只能有一个具体实现:对于任何一个给定的类来说,它只能有一个该方法的具体实现。这意味着在一个类中,你不能有两个同名的方法实现。如果一个类继承自另一个类,并且想要改变某个方法的行为,它必须重写这个方法,而不是添加一个新的实现。重写的方法会覆盖父类中的方法,使得在多态调用时,会根据对象的实际类型来决定调用哪个具体实现。
FileReader
和FileWriter
是节点流(也称为低级流),它们直接与文件系统进行交互以读取或写入数据。处理流(如BufferedReader
和BufferedWriter
)则是对节点流进行封装,提供额外的功能,如缓冲。
readLine()
方法确实有返回类型,它返回一个String
,表示读取到的一行数据。如果已到达文件末尾,则返回null
。
unique
约束确保索引列的值是唯一的,但它并不指定索引是聚簇索引还是非聚簇索引。unique
索引可以是聚簇索引,也可以是非聚簇索引,这取决于数据库的实现和索引创建时的选项。
聚簇索引会根据索引键的值来组织数据,如果索引键(即聚簇索引所基于的列)经常变化,那么维护聚簇索引的成本会很高,因为每次更新都可能需要移动数据行,这会降低性能。
COUNT(column_name)返回的是指定列中非NULL值的数目。如果列中包含NULL值,这些值将不会被计入总数。
COUNT(1)与COUNT(*)在功能上是等价的,都返回表中的总记录数,而不是指定列的值。此外,它们都不受列值是否为NULL的影响。
在操作系统中,进程状态通常包括以下几种:
- 就绪(Ready):进程已具备执行条件,等待被调度器选中执行。
- 阻塞(Blocked):进程因等待某一事件(如I/O操作或获取资源)而暂停执行。
- 结束(Terminated):进程执行完成或被强制终止。
- 运行(Running):进程正在CPU上执行。
银行家算法是一种避免死锁的算法,它用于动态分配资源,以确保系统不会进入不安全状态。在银行家算法中,系统状态被分为“安全状态”和“不安全状态”。
- 安全状态:是指系统能够找到一个资源分配序列,使得每个进程都能最终完成其任务,而不会与其他进程发生死锁。
- 不安全状态:是指系统无法找到一个资源分配序列,使得所有进程都能完成其任务,存在发生死锁的风险。
SMTP协议负责将邮件从客户端发送到服务器上,以便进一步传输。而POP3(Post Office Protocol-Version 3)即邮局协议3,是一种用于接收电子邮件的协议。当用户在电子邮件客户端上检查新邮件时,客户端会使用POP3协议从服务器上下载新邮件。
即,发送邮件使用SMTP协议,接收邮件使用POP3协议
GET请求确实有长度限制,但这个限制并不是由HTTP协议本身规定的,而是由特定的浏览器和服务器实现的。不同的浏览器和服务器对GET请求的长度限制可能不同。例如,IE浏览器对URL的最大限制为2083个字符,而Firefox浏览器则可能允许更长的URL。因此,虽然GET请求有长度限制,但这个限制的具体值取决于浏览器和服务器的实现。在一般情况下,可以认为GET请求的长度是受限的。
GET请求的参数虽然通常使用ASCII字符进行编码,但并非仅限于ASCII字符。现代浏览器和服务器通常支持UTF-8等更广泛的字符编码,允许在GET请求中使用非ASCII字符。
由于GET请求的参数包含在URL中,因此用户可以将包含GET请求参数的完整URL添加为书签。这样,当用户再次访问该书签时,浏览器会发送与原始请求相同的GET请求。
GET请求实际上是可以被缓存的。由于GET请求通常用于获取数据而不改变服务器状态,因此它是幂等的。这意味着多次相同的GET请求应该返回相同的结果。因此,浏览器和中间代理服务器通常会缓存GET请求的响应,以减少对服务器的重复请求并提高性能。
折半查找法(也称为二分查找法)是一种高效的查找算法,适用于已排序的序列。它通过反复将序列分成两半来缩小查找范围,直到找到目标元素或确定目标元素不存在。
给定序列:{1, 3, 5, 7, 12, 17, 31, 45, 63, 76, 79, 95}
我们要查找的元素是 45。
折半查找步骤:
- 初始范围:整个序列 {1, 3, 5, 7, 12, 17, 31, 45, 63, 76, 79, 95}
-
- 中间元素:31
- 比较 31 和 45,45 大于 31,所以目标在右半部分。
- 右半部分:{45, 63, 76, 79, 95}
-
- 中间元素:76
- 比较 76 和 45,45 小于 76,所以目标在左半部分。
- 左半部分:{45, 63}
-
- 中间元素:63
- 比较 63 和 45,45 小于 63,所以目标在左半部分。
- 左半部分:{45}
-
- 中间元素:45
- 比较 45 和 45,相等,找到目标。
比较的元素顺序:
- 31
- 76
- 63
- 45
Prim算法
Prim算法的时间复杂度取决于所使用的数据结构。如果使用邻接矩阵来存储图中的边,那么Prim算法的时间复杂度是O(n^2)。但如果使用邻接表和最小堆(通常通过优先队列实现)等数据结构,Prim算法的时间复杂度可以降低到O(ElogV),其中E是边数,V是顶点数。
Prim算法的核心思想是每次从未处理的顶点中选择一个与当前生成树连接权重最小的顶点加入生成树,这个过程与图中的边数没有直接关系,而是与顶点数有关(因为每次选择都是基于顶点的)。然而,在实际实现中,边的数量会影响算法的运行时间,特别是当使用邻接表等数据结构时。但从根本上说,Prim算法的设计并不依赖于边的数量,而是依赖于顶点的数量和它们之间的连接权重。因此,在更广泛的意义上,可以认为Prim算法与网中的边数“相对无关”,因为它主要关注的是顶点之间的连接关系。
Prim算法更适合于求解稠密图(即边数较多的图)的最小生成树。对于稀疏图(即边数较少的图),Kruskal算法通常更为高效。这是因为Kruskal算法基于边的权重进行排序和选择,而Prim算法则可能需要在每次迭代中遍历所有未处理的顶点来找到最小权重的边。
Prim算法虽然可以看作是一种逐步构建最小生成树的过程,但它并不完全符合动态规划的定义。动态规划通常涉及将问题分解为子问题,并存储子问题的解以避免重复计算。而Prim算法则更多地依赖于贪心策略(即每次选择当前最优的边)和图的遍历(如使用邻接矩阵或邻接表进行查找)。因此,将Prim算法归类为动态规划是不准确的。
现有一个容量为50的背包,有5个体积分别为20、12、11、10、9,价值分别为24、14、12、10、7的物品,按照每次可放入物品单位体积价值最大的贪心策略,背包放入物品集合的最大价值为( )。
A 50
B 53
C 57
D 60
贪心策略是每次选择单位体积价值最大的物品放入背包。
首先,我们计算每个物品的单位体积价值:
- 物品1:体积20,价值24,单位体积价值2420=1.22024=1.2
- 物品2:体积12,价值14,单位体积价值1412≈1.1671214≈1.167
- 物品3:体积11,价值12,单位体积价值1211≈1.0911112≈1.091
- 物品4:体积10,价值10,单位体积价值1010=1.01010=1.0
- 物品5:体积9,价值7,单位体积价值79≈0.77897≈0.778
按照单位体积价值从大到小排序:
- 物品1:单位体积价值 1.2
- 物品2:单位体积价值 1.167
- 物品3:单位体积价值 1.091
- 物品4:单位体积价值 1.0
- 物品5:单位体积价值 0.778
现在,我们按照这个顺序尝试将物品放入背包:
- 放入物品1:体积20,价值24
-
- 剩余容量:50 - 20 = 30
- 放入物品2:体积12,价值14
-
- 剩余容量:30 - 12 = 18
- 放入物品3:体积11,价值12
-
- 剩余容量:18 - 11 = 7
- 放入物品4:体积10,价值10
-
- 剩余容量:7 - 10 = -3(无法放入,因为剩余容量不足)
- 放入物品5:体积9,价值7
-
- 剩余容量:7 - 9 = -2(无法放入,因为剩余容量不足)
因此,我们只能放入物品1、物品2和物品3,总价值为: 24+14+12=5024+14+12=50
所以,背包放入物品集合的最大价值为 50。答案是 A。
P问题和NP问题
- P问题:指的是那些可以在多项式时间内被确定型图灵机所解决的问题。
- NP问题:则是指那些可以在多项式时间内被非确定型图灵机解决,或者在确定性图灵机上通过多项式时间的验证来确认解的正确性的问题。
通过网盘分享的文件:数据结构
链接: https://pan.baidu.com/s/18zMu-3MVzt1zJl3oR_xDjA?pwd=twp4 提取码: twp4
通过网盘分享的文件:java新特性
链接: https://pan.baidu.com/s/1lqYNQGev64c0_SiacbL7Uw?pwd=a727 提取码: a727
通过网盘分享的文件:资料-2020版数据结构与算法
链接: https://pan.baidu.com/s/1TETtbXUmVdoQfXo94I8Fiw?pwd=mk9u 提取码: mk9u
通过网盘分享的文件:高数
链接: https://pan.baidu.com/s/1VUv4tmier3p3bysUAMKjeQ?pwd=r882 提取码: r882
通过网盘分享的文件:VMware workstation v16.2.2.exe等2个文件.zip
链接: https://pan.baidu.com/s/1d-mGhibGFxpf7gZk160azw?pwd=yueb 提取码: yueb
通过网盘分享的文件:SpringSecurityOAuth2.0.pdf
链接: https://pan.baidu.com/s/1zdeM-gZSiPYJv6mwvH_A6w?pwd=34cf 提取码: 34cf
通过网盘分享的文件:SpringSecurity.pdf
链接: https://pan.baidu.com/s/1zvH_p5fp8ZdfX69blTDddA?pwd=cf9a 提取码: cf9a
通过网盘分享的文件:100题面试题资料.pdf
链接: https://pan.baidu.com/s/1zuTgoE4YAmGexomJzfjj6g?pwd=f5q7 提取码: f5q7