2022年Java应届生面试之基础知识题

1、java有哪些数据类型

分为基本数据类型和引用数据类型。
基本数据类型:数值型(byte、short、int、long、float、double)字符型(char)布尔型(boolean)。
引用数据类型:除了基本数据类型其他都属于引用类型,包括类、数组、接口等。

2float num= 3.4

这个一般出现在选择题
因为3.4是双精度度,将双精度型(double)赋值给浮点型(float)属于向下转型,可能造成精度损失,所以要进行强转换
正确的写法:float num= 3.4F;double f = 35.118;不会报错

3、字符串拼接的方式以及效率

使用+直接拼接,String是final对象,不会被修改,每次使用+ 进行拼接都是新创建的对象,而不是改变原来的对象,效率低,线程安全
使用StringBuffer可变字符串,StringBuffer方法使用了synchronized 关键字进行修饰。效率高,线程安全
使用StringBuilder可变字符串,效率最高,但线程不安全。

4finalfinally和finalize的区别

final是可以修饰类,方法和变量,被final修饰的类是不可以继承,被final修饰的方法是不能重写。
被final修饰的变量是不能够修改,引用的内容可以更改。
final修饰的方法能被重载
finally用于try-catch代码块中,无论是否发生异常,最后都执行。作用是释放资源。
finalize是Object类的方法,在对象被垃圾回收之前调用,一般用于资源的释放。

5==和equal有什么区别?

如果引用类型,==比较的是两个对象的内存地址值是否完全相等。如果是基本类型,比较的是基本类型的数值是否相等。
如果没有重写的话,equal默认按照
进行比较,如果重写了equal方法,则按照对应的比较规则进行比较。
equal:默认情况下,比较内存地址值是否相等。

6ArrayArrayList的区别

一个是数组一个是集合
Array长度在定义之后就不运行改变,而ArrayList是长度可变的。可以自动扩容。
Array只能存储数据类型相同的数据,ArrayList可以存储不同类型的数据。
ArrayList提供了更多操作数据的方法。

7&&&的区别

& 具有按位和、逻辑与两个功能。
&& 作为逻辑与,具有短路的特点。当面前表达式为false时,就不会进行后面表达式的判断。可以使用用来避免空指针异常

8、简述JDK8的新特性

1、可以使用lambda表达式,减少代码冗余
2、stream流,用于解决已有的集合,数组类库的弊端,简化其操作有:foreach(循环) 映射、过滤、cancat合并等功能。

9、这是我个人了解steam流?

stream流常用的方法:forEach循环遍历、count()统计个数、filter()条件过滤、limit()取前面n个元素;skip()跳过n个元素
map映射加工,concat()合并stream流

10、面向对象------简述面向对象的特性

1、封装:建议成员变量私有,然后提供公有的getter、setter方法来获取取值、赋值。封装的核心是合理隐藏,合理暴露
可以提供安全性、实现代码组件化。
2、继承:一种子类到父类的关系,可以提高代码的复用性,相同的代码可以写到父类,子类功能更加强大,不仅得到父类的功能还有自己的功能
3、多态:同一个类型对象,执行相同的行为。在不同的状态下,表现出不同的特征。多态可以降低类之间的耦合度。

即一个引用变量到底会指向哪一个类的实例对象,该引用变量发出的方法调用到底是哪一个类中实现方法,必须由程序运行期间才能决定,程序运行时才能确定具体的类,所有不用修改程序的代码。就可以让引用变量绑定在各种不	同的类实现上,从而导致引用调用的具体方法也随之改变。不修改程序的代码也可以改变程序在运行中绑定不同的
具体实现,多态必备:继承,重写,父类的引用指向子类对象
11、类和对象有什么区别

类是一个抽象的概念,是具有相同特征是事物的描述,是对象的模板。
对象是类的实例,对象是一个个具体的存在

12、列举Object类的方法

equal(Object obj) :判断其他对象是否与当前对象相等
toString(): 打印当前对象字符串表示。
wait(): 使当前线程等待,等待其他线程唤醒,会释放锁。
notify()、notifyAll(): 随机唤醒一个、全部线程。
hashCode() :返回当前对象的hashCode值。
finalize(): 当垃圾回收机制要回收对象前调用。
clone():创建并返回对象的一个副本。

13、方法重载	和  方法重写  的区别

方法重载是在同一个类中具有不同参数列表的同名方法 (无关返回值)。
方法重写是:子类中具有与父类相同的参数列表的同名方法,会覆盖父类原有的方法。

14、接口和抽象类的区别

接口中只能定义public static/ˈstætɪk/ final修饰的常量。 抽象类中可以定义普通变量。
接口没有构造器 抽象类中构造器
接口可以多实现 抽象类只能单继承
接口在JDK1.8之前只能定义public abstract修饰方法,jdk1.8以后可以定义默认的方法静态方法。
jdk1.9开始可以定义私有方法,抽象类中的方法没有限制
接口中不能含有静态代码块以及静态方法
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

Java接口的作用

通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。(人、猴子。都会跑)
通过接口可以指明多个类需要实现的方法。
通过接口可以了解对象的交互界面,而不需了解对象所对应的类。

15、什么时候使用接口,什么时候应该使用抽象类

如果知道某个类应该成为基类,那么第一选择应该是它成为一个接口。
只有在 必须要有方法定义和成员变量的时候,才应该选择抽象 类
在接口和抽象类的选择上,必须遵守一个原则:行为模型应该总是通过接口而不是抽象类来定义。通过抽象类来建立的行为模型会出问题的
如果有一个抽象类Moblie,有两个继承他的类Moblie和Moblie2,分别有自己的功能1、2.如果出现既有功能1又有功能2的新产品需求。
由于JAVA不允许多继承就会出现问题,而如果是接口的话只要同时实现两个接口即可。

16、内部类有什么用,有哪些分类?

内部类有更好的封装性,有更多的权限符,封装性可以得到更多的控制。
静态内部类:有static修饰,属于类本身,只加载一次。类可以定义的成员 静态内部类都可以定义。可以访问外部静态变量和方法。通过new 外部类,静态内部类构造器来创建对象
成员内部类: 属于外部类的每个对象,随对象一起加载,不可以定义静态成员和方法。可以访问外部类所有的内容。

17、什么是线程安全问题?

当多个线程同时进行操作同一个共享变量时,可能产生线程安全。解决方法:使用内部synchronized锁。可以使用同步代码块。
如果是实例方法就可以使用this作为锁对象,
如果是静态方法就可以使用.class为锁对象

18、为什么会有包装类?

java是几乎纯洁的面向对象的编程语言,为了编程方便还是引用了基本数据类型,但是为了能够将这些基础数据类型当做
对象来处理,所有java为每一个基本数据类型都引入了对应保证类型。
Integer变量必须实例化后才能使用,而int变量则不需要。
Integer默认值是null,int的默认值是0.

19、抽象类与普通类的区别?

抽象类不能创建实例对象,允许有abstract方法

20String str="i"String str=new String("i")一样吗?

不一样,因为内存分配不一样,String str="i 方式,JVM会将其分配到常量池中。而String str=new String(“i”) 则分配到堆内存中。

21、内存结构

栈内存:用于存储局部变量,当数据使用完,所占的空间会自动释放。
堆内存:数组和对象,通过new 建立的实例都存放在堆内存中。
方法区:静态成员,构造函数,常量池,
线程池本地方法区:
window系统占用寄存器

22、成员变量和局部变量的区别

1、作用域:
成员变量针对整个类有效。
局部变量只有在某个范围内有效。(方法体、语句体内)
2、存储位置:
成员变量随着对象的创建而存在,随着对象的消失而消失。存储在堆内存中。
局部变量在方法调用,或者语句被执行的时候,存储在栈内存中,方法调用完,就自动释放
3、初始值:
成员变量有默认值。
局部变量没有默认值,使用前必须赋值。

23、 在Java中,为什么基本类型不能做为HashMap的键值,而只能是引用类型,把引用类型做为HashMap的健值,需要注意哪些地方

在Java中是使用泛型来约束HashMap中的key和value的,即HashMap<K,V>;
而泛型在Java的规定中必须是对象Object类型的,也就是说HashMap<K,V>可以理解为 HashMap<Object,Object>
很显然 ,基础数据类型不行。因此不能作为键值。只能是引用类型。
虽然在HashMap是可以这样添加数据:map.put(1,“ljh”),但实际上,是将键值 1 进行了自动装箱操作,变为Integer类型

24Java中,如果ManagerEmployee的子类,那么 Pair <manager>Pair<Employee> 的子类吗?
不是,两种没有任何关联

Pair是单独的类,只不过用不同类型的参数(泛型)进行了相对于的实例化而已,

25、MVCC解决的问题是什么?

MVCC是一种用来解决读写冲突的 无锁并发控制。也就是为事务分配单项增长的时间戳,为每个修改保存版本,版本与事务时间戳管理,
读操作只读 该事务开始前的数据库快照。
1、在并发读写数据库时,可以做到读操作时不会阻塞写操作,
写操作时也不用阻塞读操作,提供数据库并发读写的性能
2、解决脏读、幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题

26、ACID是靠什么来保证的

ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

1、原子性是由undolog日志来保证,它记录需要回滚的日志信息,事务回滚是撤销已经折行成功的SQL
2、一致性是由其他三大特性来保证的,程序代码号保证业务上的一致性
3、隔离性使用MVCC来保证
4、持久性是由redolog来保证,mysql修改数据时会在redolog中记录一份日志数据,就算数据没有保存成功,只有日志保存成功,数据仍然不会丢失

26、抽象(abstract)方法是否可同时是静态(static),是否可同时是本地方法(native),是否可同时被synchronized修饰

抽象方法是需要子类重写的,而静态的方法,是无法被重写的,因此二者矛盾
本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,因此二者矛盾
synchronized和方法的实现细节有关,抽象方法不涉及实现细节,矛盾

27、静态变量和实例变量的区别

静态变量是被static修饰符修饰的变量,也称为类变量,不属于类的任何变量,一个类不管创建多少个对象。
静态变量在内存中仅有一个拷贝;
实例变量必须依存某个实例,需要创建某个实例对象然后通过对象才能访问到它
静态变量可以实现让多个对象共享

两者共同点:都有默认值,而在类的方法任何地方都能调用。

28,泛型是什么?

泛型是一种标签,不确定的类型。
用户使用的时候才确定类型。
在JDK1.5出现的新特性,用于解决安全问题,是一种类型安全机制。
1、将运行时期可能出现的异常转移到编译期
2、提高安全性
3、避免了强制类型转换的麻烦

29,JS中用new创建对象与不用new创建对象区别

当用new的时候,函数内部的this是一个新的对象,如果不用new,
19 也就是把它当成一个普通的函数执行,它的this是window。

30.jsp的内置对象有哪些?

request response out session application config page

31,深拷贝和浅拷贝

深拷贝:即会拷贝基本数据类型的值,也会针对实例对象的引用地址所指向的对象进行复制。
深拷贝出来的对象,内部的属性指向的不是同一个对象
浅拷贝:只会拷贝基本数据类型的值,以及实例对象的引用地址

32、什么是JSP

jsp代表JavaServer Pages:它主要用于开发动态网页,文件的扩展名为.jsp。JSP技术允许快速开发并易于维护
所述信息丰富的动态网页。JSP网页基于HTML,XML或者其他文档类型。他们还需兼容Web服务器和servlet容器。
才能运行。

33、什么是HTML

HTML代表超文本标记语言。它是用于开发网页的标记语言,有助于构建网页结构。通常用于网页设计

34、JSP和HTML的区别

1、运行机制不同:HTML是运行在客户端,是一种标记语言,由浏览器解释执行;
jsp运行在服务器端,需要在web容器提供运行环境
2、用途不同:HTML侧重于静态数据展示,jsp侧重于和服务器交互。主要用动态网页开发。
3、jsp是一个特殊的HTML,相当于在HTML嵌入了JAVA代码

35、forward(转发)和rediect(重定向)

转发是request对象调用。重定向是response对象调用
1、数据共享
forward:转发页面和转发到页面可以共享request里面的数据
redirect:不能共享
2、地址栏显示
forward:原来的地址栏
redirect:新的地址栏
3、转发过程:客户浏览器发送http请求----------》web服务器接收请求-----------------》调用内部的一个方法,在容器内部完成请求处理
和转发-------------------》将目标资源发送给客户;
转发的路径必须是同一个web容器下的url。其不能转向到其他的web路径上去。
中间传递的是自己的容器内的request。在客户浏览器路径栏显示还是第一次访问的路径。
客户是感觉不到服务器做了转发的,转发行为是浏览器只做了一次请求
重定向过程:客户浏览器发送http请求----------》web服务器接收请求(发送302状态码响应和对应新的localtion给客户端浏览器
-----------------》客户端浏览器发现是302响应,则自动再发生一个新的http请求,请求URL(这是新的localtion地址)
-----------------》服务器根据此请求寻找资源并发送给客户。
在localtion可以定向到任意URL,既然是浏览器重新发送出的请求(这就没有request的概念了)
客户可察觉地址的变化,重定向行为在浏览器上做了至少两次访问请求的

36、事务是指是程序中一系列严密的逻辑操作

,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。

40、创建Servlet三种方式?

1、实现javax.servlet.Servlet接口,
2、javax.servlet.GenericServlet抽象类,重写service();
3、继承javax.servlet.http.HttpServlet 抽象类,重写都doGet()、doPost()

41.truefalsenull都不是关键字
gotoconst、是保留的关键字
42、算术右移

算术右移使用符号位来填最充高位在Java中使用>>表示使用算术右移
逻辑右移
逻辑右移使用0来填充最高位在Java中使用>>>来表示逻辑右移

43.String转换为intint ints =  Integer.parseInt(str);
int 转换为StringString str = String.valueOf(int);
44、字符串截取

String abc = str.substring(str.length() - 3, str.length());

45、创建数组的方式

int[] array = {1,2,3,4,5,6};
int[] array1 = new int[]{1,2,3,4,5};
将数组转换为字符串:
String string = Arrays.toString(array);
46、判断List、map是否为空:isEmpty()

47、①、如果finally中也有return,则会直接返回并终止程序,函数栈中的return不会被完成!;
②、如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中的try中的return的内容返回并终止程序;
48、关于int可以,别的不可以

short s = 22;
s+=11;
50、在Java中,char类型占2个字节,而且Java默认采用Unicode编码,一Unicode码是16位。
所以一个Unicode码占两个字节,Java中无论汉字还是英文字母都是用Unicode编码表示,
所以,在Java中,char类型变量是可以存储一个中文汉字。

51、字符串转化为数组
String str = “admfgiqpner t0bi34"
char[] chars = str.toCharArray();
Arrays.sort(chars);
for(int i=0;i < chars.length; i++){
sout(chars[i])
}
55、形参
local Variable 为局部变量,形参和局部变量一样都只有在方法内才会发生
作用,也只能在方法中使用,不会在方法外可见;

56.介绍一下值传递和引用传递

57Filter(过滤器)和 interceptor(拦截器)

Filter(过滤器)在web.xml中配置,依赖于servlet容器
interceptor(拦截器)需要在SpringMVC中配置,依赖于框架
Filter的执行顺序在interceptor之前,
两者本质区别:
拦截器(interceptor)是基于Java反射机制
过滤器(Filter)是基于函数回调
从灵活性上说拦截器功能更加强大,Filter能做的事情,都能做,而且可以在请求前后执行,比较灵活。
Filter主要是针对URL地址做一个编码的事情,过滤掉没有用的参数,安全效验等。
如果涉及具体细节建议使用interceptor。
WEB service

58、什么是JavaBean

JavaBean是一种Java类。而且是一种特殊的、可重用的类。(实体类)
JavaBean的编码规范
提供一个公有的无参构造器
需要被序列化、实现java.io.Serializable接口
该类所有属性私有化
提供访问属性的“getter” 和“setter”方法
该类是一个公有类,并且用package语句声明属性某个包

59Web Services

Web Services 可使应用程序 成为Web 应用程序
Web Services 通过Web进行发布、查找和使用
Web Services 能使得运行在不同机器上的不同应用 无须借助附加的、专门的第三方软件或者硬件
就可以相互交互数据和集成。
Web Services 规范实施的应用之间,无论它们所使用的语言、平台或者内部协议是什么,都可以相互交互数据

60.JDBC常用的类

DriverManager:驱动管理功能,注册驱动,获取数据库连接对象
Connection接口:连接对象,执行SQL对象Statement、和PreparedStatement对象
Statement接口:sql语句执行对象,用于将sql语句发送给数据库服务器
PreparedStatement(Statement子接口):sql语句执行对象

61、request.getParameter()和request.getAttribute()

getParameter 是用来接受用post个get方法传递过来的参数的.String username=request.getParameter(“username”);

getAttribute 必须先setAttribute.
String username=request.getParameter(“username”);
request.setAttribute(“username”,username);
String username=(String)request.getAttribute(“username”);
都是存在web容器内部
一般可以用getParameter()得到页面参数“字符串”
getAttribute可以得到页面传来的对象----------------------常用于servlet页面传递参数给jsp

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值