java面试题大汇总,java面试笔试题大汇总
如何解决写爬虫IP受阻的问题?立即使用。
面向对象的特征有哪些方面?
所谓封装,就是把客观事物封装成抽象类,类只能让可信的类或对象操作自己的数据和方法,隐藏不可信的。封装是面向对象的特征之一,是对象和类概念的主要特征。(推荐学习:java常见问题)
继承意味着子类获得父类的属性和方法。如果狗是一种动物,也可以说它继承了动物的特性,或者说狗是动物的一个子类。
多态是指一个方法只能有一个名字,但可以有多种形式,即程序中可以定义多个同名的方法,用‘一个接口,多个方法’来描述。它可以被方法的参数和类型引用。
五个原则:单一责任原则SRP开闭原则OCP替换原则LSP依赖原则DIP接口分离原则ISP
成员变量和局部变量的区别
* A:在类中的位置不同
*成员变量:在类中的方法之外
*局部变量:在方法定义中或在方法声明上。
* B:在内存中的位置不同
*成员变量:在堆内存中(成员变量属于对象,对象进入堆内存)
*局部变量:栈内内存(局部变量属于方法,方法是栈内内存)
* C:生命周期不同
*成员变量:随着对象的创建而存在,随着对象的消失而消失。
*局部变量:随着方法的调用而存在,随着方法的调用而消失。
* D:初始化值不同
*成员变量:具有默认的初始化值。
*局部变量:没有默认的初始化值,必须定义并赋值后才能使用。
静态变量和成员变量的区别
*静态变量也称为类变量,成员变量也称为对象变量。
* A:所属不同
*静态变量属于类,所以也叫类变量。
*成员变量属于对象,所以也叫实例变量(对象变量)。
* B:内存中位置不同
*静态变量存储在方法区的静态区。
*成员变量存储在堆内存中。
* C:内存出现时间不同
*静态变量随着类的加载而加载,随着类的消失而消失。
*成员变量随着对象的创建而存在,随着对象的消失而消失。
* D:调用不同
*静态变量可以通过类名或对象调用。
*成员变量只能由对象名调用。
this和super的区别和应用
* A:this和super都代表什么
* this:表示当前对象的引用。谁打电话给我,我就代表谁。
* super:代表当前对象的父类的引用
* B:this和super的使用区别
* a:调用成员变量
*这个。成员变量调用这个类的成员变量,或者父类的成员变量。
*超级。成员变量调用父类的成员变量。
* b:调用构造函数。
*这个(.)调用这个类的构造函数。
*超级(.)调用父类的构造函数。
* c:调用成员方法
*这个。成员方法调用这个类的成员方法,或者父类的方法。
*超级。成员方法调用父类的成员方法。
排序都有哪几种方法?请列举
排序方式有:插入排序(直接插入排序、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(直接选择排序、堆排序)、归并排序、分布排序(盒排序、基数排序)。
快速排序的伪代码。
String, StringBuffer StringBuilder的区别。
字符串的长度是不可变的;
StringBuffer的长度可变。如果经常对字符串中的内容进行操作,尤其是需要修改内容的时候,那么就使用StringBuffer。如果最终需要一个字符串,那么使用StringBuffer的toString()方法;线程安全;
StringBuilder从JDK 5开始,在StringBuffer中增加了一个单线程使用的等价类。通常,应该首选StringBuilder类,因为它支持所有相同的操作,但是它更快,因为它不执行同步。
Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?
回答:方法的覆盖和重载是Java多态性的不同表现。
重写是父类和子类之间多态性的一种表现,重载是一个类中多态性的一种表现。如果在子类中定义的方法与其父类具有相同的名称和参数,我们说该方法是重写的。
当一个子类的对象使用这个方法时,它将调用子类中的定义。对它来说,父类中的定义是“屏蔽”的。如果在一个类中定义了多个同名的方法,它们可能会有不同的参数号或不同的参数类型,这就是所谓的方法重载。重载的方法可以改变返回值的类型。
final, finally的区别?
A: final:修饰语(关键字);如果一个类被声明为final,就意味着它不能派生新的子类,不能作为父类继承,所以一个类不能同时声明为abstract和final;将变量或方法声明为final可以保证它们在使用中不会被更改;声明为final的变量在声明时必须赋予一个初始值,但在以后的引用中只能读取,不能修改;声明为final的方法只能使用,不能重载。
Finally: finally块用于在异常处理期间执行任何清除操作;如果抛出异常,将执行匹配的catch子句,然后控制将进入finally块(如果有)。
常见的几个运行异常。
Java.lang.nullpointerexception(空指针异常)
Java . lang . classnotfoundexception(指定的类不存在)
Java.lang.arithmeticexception(数学运算异常)
Java . lang . arrayindexoutofboundsexception(数组下标越界异常)
IOException(输入输出异常)
数组操作的两个常见问题:越界和空指针
* A:案例演示
* a:arrayindexoutofboundsexception:数组索引越界。
*原因:您访问了一个不存在的索引。
* b:NullPointerException:空指针是一个异常。
*原因:数组不再指向堆内存。您还可以使用数组名来访问元素。
* int[] arr={1,2,3 };
* arr=null
* system . out . println(arr[0]);JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
答:Java通过面向对象的方法处理异常,对各种异常进行分类,并提供良好的接口。
在Java中,每个异常都是一个对象,它是Throwable类或其他子类的实例。当方法中出现异常时,会引发异常对象,该对象包含异常信息。调用该对象的方法可以捕捉异常并处理它。
Java中的异常处理是通过五个关键词实现的:try、catch、throw、throws和finally。通常,try用于执行程序。如果出现异常,系统将抛出异常。这个时候你可以通过它的类型来捕捉它,或者最后它会被默认的处理器处理。
使用try指定一个程序来阻止所有“异常”。在try程序之后,应该立即包含一个catch子句来指定要捕获的“异常”的类型。
Throw语句用于显式抛出“异常”。
Throws用于表示成员函数可能抛出的各种“异常”。
最后,执行一段代码,以确保无论一段代码发生什么‘异常’。
您可以在成员函数调用之外编写一个try语句,并在成员函数内部编写另一个try语句来保护其他代码。每当遇到try语句时,“exception”的帧就被放在堆栈上,直到所有try语句完成。
如果下一级try语句不处理某种“异常”,堆栈将被扩展,直到有一个try语句处理这种“异常”。
服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?
答:HTML的form元素有一个method属性,用来指定如何提交表单。它的值可以是get或post。
我们的定制Servlet通常会覆盖doGet()或doPost()方法中的一个或两个。如果是GET请求,会调用doGet()方法,如果是POST请求,会调用doPost()方法。那为什么呢?
我们的自定义Servlet通常继承自HttpServlet,后者继承自GenericServlet并重写service()方法,该方法在Servlet接口中定义。
HttpServlet重写的service()方法会先获取用户请求的方法,然后根据请求的方法调用doGet()、doPost()、doPut()、doDelete()等方法。如果在自定义Servlet中重写这些方法,那么重写后的(自定义)方法显然会被调用,这显然是模板方法模式的一个应用(如果不了解,请参考0755-7995)
当然,service()方法也可以在自定义Servlet中直接被覆盖,所以不管请求是哪种方式,都可以用自己的代码处理,更适合不区分请求方法的场景。
抽象类和接口的区别?
它是接口抽象类的变体,接口中的所有方法都是抽象的。抽象类是声明方法存在而不实现它的类。
接口可以继承更多,抽象类不行。
定义接口方法,不能实现,而抽象类可以实现一些方法。
接口的基本数据类型是静态的,但抽象图像不是。
内存泄露和内存溢出?
内存泄漏:是指应用程序在申请内存后无法释放申请的内存空间。内存泄漏一次的危害可以忽略不计,但是如果放任不管,就会导致内存溢出。
例如,在读取一个文件后,应该及时关闭流并释放数据库连接。
内存溢出:这意味着当一个应用程序申请内存时,没有最后的内存空间供其使用。
例如,在项目中,我们导入大量数据,并批量提交。
什么是线程同步?
1.线程同步的目的是当多个线程请求一个有问题的资源时,保护资源不被破坏。
2.线程同步是通过锁来实现的。每个对象只有一个锁,并且这个锁与一个特定的对象相关联。一旦线程获得对象锁,其他访问该对象的线程就不能再访问该对象的其他异步方法。
3.对于静态同步方法,锁是针对这个类的,锁对象是这个类的类对象。静态和非静态方法的锁互不干扰。一个线程获取锁,当它在一个同步方法中访问另一个对象的同步方法时,它获取这两个对象的锁。
4.对于同步来说,关键是始终意识到要同步哪个对象。
5.在编写线程安全类时,需要始终对多个线程竞争访问资源的逻辑和安全性做出正确的判断,分析“原子”操作,确保原子操作过程中其他线程无法访问竞争的资源。
6.当多个线程等待对象锁时,没有获得锁的线程将被阻塞。
7.死锁是由线程等待对方锁定造成的,实际中发生的概率很小。如果我让你写一个死锁程序,可能不行,呵呵。但是,一旦程序陷入僵局,程序就会死亡。
对多线程的理解?
不同的人在做的同样的事情是多线程。
在食堂用餐,一个人玩是单线程,开n个窗口n个人同时玩是多线程。
线程的基本概念,线程的基本状态以及状态之间的关系:
线程是指在程序执行过程中,能够执行程序代码的执行单元。每个程序至少有一个线程,就是程序本身。Java中的线程有四种状态:运行、就绪、挂起和结束。
有那些集合?
列表功能:元素按顺序排列,元素可以重复
Map特性:存储元素的键值对,没有放置顺序。
集合特性:没有元素的摆放顺序,元素不能重复(注意:虽然没有元素的摆放顺序,但是元素在集合中的位置是由元素的HashCode决定的,它的位置实际上是固定的)
List接口有三个实现类:LinkedList、ArrayList和Vector。
LinkedList:底层基于链表实现,链表内存分散。每个元素存储自己的内存地址以及下一个元素的地址。添加和删除链表很快,但是搜索很慢。
ArrayList和Vector的区别:ArrayList是非线程安全高效的;Vector是基于线程安全的,效率很低。
Set接口有两个实现类:HashSet(底层由HashMap实现)和LinkedHashSet。
SortedSet接口有一个实现类:TreeSet(底层用平衡二叉树实现)
查询接口有一个实现类:LinkList。
地图兴趣
HashMap是非线程安全的,高效的,支持null;HashTable是线程安全的,效率低,不支持null。
SortedMap有一个实现类:TreeMap。
其实最重要的是list是用来处理序列的,而set是用来处理集合的。Map存储键值对。
文件读写的基本类:
reader类和FileWriter类分别从Reader类和Writer类继承。FileReader类用于读取文件,File Writer类用于将数据写入文件。在使用这两个类之前,需要调用它们的构造函数来创建相应的对象,然后调用相应的read()或write()方法。以上是java常见面试问题的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。