静态方法可以用类名.方法名来调用
compareTo是Comparable接口中的方法
简单题: 请简述final、finalize和finally的区别
final是一个可以修饰变量、方法和类的修饰符。如果用来修饰变量,则该变量的值在初始化后不能被改变。
finalize是对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时间调用finalize没有保证。
finally是一个与try和catch一起用于异常处理的关键字。finally快一定会被执行,无论在try快中是否有异常发生。
简述java语言的线程池以及为什么要使用线程池?请任意列举两个常用的线程池
为了要提高服务器性能,假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池。
线程池是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。
常用线程池:
Executors.newCachedThreadPool:必要时创建新线程,空闲线程停留60秒
Executors.newFixedThreadPool:固定容量的线程池
Executors.newSingleThreadPool:只有一个线程的线程池
Executors.newScheduledThreadPool:用于预定指定的线程池
请简述抽象类和接口的区别?以及何时用抽象类,何时用接口
区别:
抽象类可以有构造函数,接口不可以有构造函数
抽象类中可以有普通成员变量,接口中没有普通成员变量,只能有常量
抽象类中的方法可以被static修饰,接口中的方法不可以被static修饰—> jdk 1.8 可以接口可以有static修饰的方法
抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法–> jdk 1.8 接口中的方法还有default和static修饰的方法
一个类只能继承一个抽象类,接口可以被多实现,即一个类只能继承一个类,可以实现多个接口
何时使用
接口主要用于模块与模块之间的调用。主要用接口来实现多继承**,因为java不支持类的多继承,只能用接口**
抽象类主要用于当做基础类使用,即基类。如果想拥有一些方法,并且这些方法有默认实现,那么使用抽象类
抽象类和接口
①抽象类定义:
在面向对象的概念中,世间万物通过类来描绘的,但如果一个类中没有包含足够的信息来描绘一个具体的事物对
象,这样的类就是抽象类。
②抽象类使用场景:
无法完整描述一个事物的类。
抽象类有一个特征,其抽象方法,必须在子类重写(子类非抽象类),所以,当我们父类的方法,必须要子类重写实现时,而且子类又想继承父类的其他方法时,用抽象类。
编程题
鸡鸭分类
s = input()
#最少的交换次数,让C和D各分在一边
n = len(s)
num_c = 0
num_d = 0
for i in range(n):
if s[i] == "C":
num_c += 1
else:
num_d += 1
#记录个数较少的字符
num = "C"
if num_c > num_d:
num = "D"
#记录较小的字符所在的位置
index = []
for i in range(n):
if s[i] == num:
index.append(i)
#将个数较少的字符放到左边和右边的交换次数
#取小的那一个
num_left = 0
for i in range(len(index)):
num_left += index[i] - i
num_right = 0
for i in range(len(index)-1,-1,-1):
num_right += n-1-(len(index)-1-i) - index[i]
print(min(num_left,num_right))
比特币最佳买卖时间
price=list(map(int,input().split(' ')))
unhold=0
hold=-price[0]
for i in range(len(price)):
unhold=max(unhold,hold+price[i])
hold=max(-price[i],hold)
print(unhold)
吃零食
def calculate_min(input11, input12):
total = 0
for i in range(len(input11)):
total += input11[i]
min_val = (total + input12 ) // input12
while True:
nums = 0
for i in range(len(input11)):
nums += (input11[i] + min_val - 1) // min_val
if nums <= input12:
break
else:
min_val += 1
return min_val
收获
1、有return的需要放到函数里面
2、//是会向下取整、/取得是浮点数、(a+b-1)//b可以实现向上取整
从用户输入获取数据
input11 = list(map(int, input().split(’ ‘)))
input11 = list(map(str, input().split(’ ')))
input12 = int(input())
调用函数计算结果
result = calculate_min(input11, input12)
print(result)