选择题
关于A,我常认为Java中的变量必须初始化而直接判错就不看下面的了
但是其实光int a是没问题的,只要你不使用a这个值就行,使用的话则必须初始化
至于D,错的太离谱了short是短整型,不能加小数点
引入JSTL核心标签库中必须含有core
@Resource是javaee中的注解
这个就类似于第一题的 int a,Java中的对象需要初始化
可以看到,只有D的参数列表不同,因此是重载,而至于返回值类型,可以相同也可以不同
// 抽象类
abstract class Shape {
private String color;
public Shape(String color) {
this.color = color;
}
// 抽象方法,子类必须实现
public abstract double area();
public String getColor() {
return color;
}
}
// 具体的子类
class Circle extends Shape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
}
public class AbstractClassExample {
public static void main(String[] args) {
Circle circle = new Circle("Red", 5.0);
System.out.println("Color: " + circle.getColor());
System.out.println("Area: " + circle.area());
}
}
// 普通类
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
public class NormalClassExample {
public static void main(String[] args) {
Person person = new Person("Alice", 25);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
问答题
1、ArrayList和linkedList的区别?
Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。
Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据, (因为删除数据以后, 需要把后面所有的数据前移)
缺点: 数组初始化必须指定初始化的长度, 否则报错
例如:
int[] a = new int[4];//推介使用int[] 这种方式初始化
int c[] = {23,43,56,78};//长度:4,索引范围:[0,3]
List—是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。
List有两个重要的实现类:ArrayList和LinkedList
ArrayList: 可以看作是能够自动增长容量的数组
ArrayList的toArray方法返回一个数组
ArrayList的asList方法返回一个列表
ArrayList底层的实现是Array, 数组扩容实现
LinkList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于
ArrayList.当然,这些对比都是指数据量很大或者操作很频繁。
1.默认情况下,比如调用ArrayList和LinkedList的add(e)方法,都是插入在最后,如果这种操作比较多,那么就用LinkedList,因为不涉及到扩容。
2.如果调用ArrayList和LinkedList的add(index, e)方法比较多,就要具体考虑了,因为ArrayList可能会扩容,LinkedList需要遍历链表,这两种到底哪种更快,是没有结论的,得具体情况具体分析。
3.还有,如果是插入场景比较少,但经常需要查询的话,查询分两种,第一种就是普通遍历,也就是经常需要对List中的元素进行遍历,那么这两种是区别不大的,遍历链表和遍历数组的区别,第二种就是经常需要按指定下标获取List中的元素,如果这种情况如果比较多,那么就用ArrayList
2、列出5个常用的linux命令?并解释命令的作用?
3.简述Exception和RuntimeException的区别,在项目开发中为什么大部分都继承RuntimeException?
exception和runtimeexception的区别分析
异常的超级父类是throwable,实现的2个子类是error和exception,error是错误类,这里不做分析。
Exception下面有众多子类,就是众多异常。Exception异常主要分为两个类型,一个是runtimeException和它的子类,还有一种就是除此之外的异常类。
先分析runtimeexception以及它的子类,这个类型的异常的特点是不必在方法中声明,调用者不需要知道异常的可能存在,也不必去处理异常。原因是这个类型的异常并不是由程序的功能不完善或者程序本身造成的异常,而是由程序员在调用程序时由于自己的操作而导致的异常的发生,比如:数组角标越界异常。程序员在运行完程序后,得知异常的提示,可以马上通过正确的调用去改正它。
除了runtimeexception以及它的子类以外的异常类,都需要在方法中声明,这类异常都是由于程序本身功能的不完善,需要提醒调用者可能会出现的异常,这样的异常怎么去处理会在异常的运行过程的分析中提到。
开发中的异常都是不受检查的异常因此继承runtimeexception
5、sleep和wait的区别
都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩.;
基本差别
sleep是Thread类的方法,wait是Object类中定义的方法
sleep()方法可以在任何地方使用
wait()方法只能在synchronized方法或synchronized块中使用
本质区别
Thread.sleep智慧让出CPU,不会导致锁行为的改变
Object.wait不仅让出CPU,还会释放已经占有的同步资源锁
1
sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.。对于运行的主动权是由我的流程来控制.
wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!“,也是 thisOBJ.wait(),这里的暂停是阻塞,thisOBJ就好比一个监督我的人站在我旁边,本来该线 程应该执行1后执行2,再执行3,而在2处被那个对象喊暂停,那么我就会一直等在这里而不执行3,但正个流程并没有结束,我一直想去煮饭,但还没被允许, 直到那个对象在某个地方说"通知暂停的线程启动!”,也就是thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处 继续执行.
2
sleep()可以将一个线程睡眠,参数可以指定一个时间。
wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
wait有两种形式wait()和wait(milliseconds).
3
sleep和wait的具体区别有:
1,这两个方法来自不同的类分别是Thread(自控)和Object(他控)
2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常(终端异常)
7.Springmvc和springboot的区别
1、含义不同
springboot:SpringBoot是一个自动化配置的工具。
springmvc:SpringMVC是一个web框架。
2、配置不同
springboot:SpringBoot采用约定大于配置的方式,通过其自动配置功能自动处理配置,同时内置服务器,打开就可以直接用。
springmvc:此框架需要大量配置,例如 DispatcherServlet 配置和 View Resolver 配置。需要手动配置xml文件,同时需要配置Tomcat服务器。
3、依赖项不同
springboot:springboot具有启动器的概念,一旦将其添加到类路径中,它将带来开发Web应用程序所需的所有依赖项。
springmvc:需要单独指定每个依赖项才能运行功能。
4、开发时间不同
springboot:Spring Boot有助于减少开发时间,因为所有与依赖关系相关的任务都会得到处理。
springmvc:与Spring Boot相比,开发所需的时间更多,因为开发人员需要花时间添加所需的依赖项。
5、生产力不同
springboot:由于开发时间更短,生产力提高。
springmvc:生产力降低,因为需要了解依赖性附加组件。
6、实现JAR打包功能的方式不同
springboot:Spring Boot 允许嵌入式服务器以独立的方式运行该功能。
springmvc:Spring MVC需要大量手动配置才能实现JAR打包的功能。
7、是否提供批处理功能
springboot:它提供强大的批处理。
springmvc:它不提供强大的批处理。
8、作用不同
springboot:Spring Boot也允许构建不同类型的应用程序。
springmvc:Spring MVC仅用于开发动态网页和RESTful网络服务。
9、社区和文档支持不同
Spring MVC的社区和文档比Spring boot要好得多。
10、是否需要部署描述符
springboot:不需要部署描述符。
springmvc:需要部署描述符。
8.Docker常用命令有哪些?