java基础面试题

  • java基础

  1. java八大基本数据类型

  1. 数字型:byte,short,int,long,float,double
  2. 字符型:char
  3. 布尔类型:boolean
  1. java三大特性

  1. 封装:使用private关键字,让对象私有,防止无关的程序去使用
  2. 继承:继承某个类,让子类可以使用父类的属性和方法
  3. 多态:同一个行为,不同的子类具有不同的表达形式
  1. 重载和重写的区别

  1. 重载:发生在同一个类里面,函数名必须相同,参数类型,参数个数,参数顺序,返回值,修饰符可以不同
  2. 重写:发生在父子类里面,函数名,参数,返回值必须相同,访问修饰符必须大于等于父类,异常要小于等与父类,如果父类方法是private则不能够重写
  1. public,protected,(default),private修饰符的作用范围

  1. Public:都可以使用
  2. Protected:只有同类,同包子类,非同包子类才可以使用
  3. Defalut:同类,同包子类可以使用
  4. Private:只有同类才可以使用

5.==和equals的区别

  1. ==: 基础类型比较的值,引用类型比较的是地址值。
  2. equals: 没有重写比较地址值是否相等,重写比较的内容是否相对。比如String类重写equals,源码首先比较是否都是String对象,然后再向下比较。

6.hashcode()值相同,equals就一定为true

不一定,因为 "重地"和"通话"的hashcode值就相同,但是equals()就为false。但是equals()为true,那么hashcode一定相同。

7.为什么重写equals(),就要重写hashcode()?

保证同一对象,如果不重写hashcode,可能会出现equals比较一样,但是hashcode不一样的情况。

8.&和&&的区别

&&: 如果一边为假,就不比较另一边。又叫短路运算符。

&: 不论一边是真是假,都会比较另一边。如果表达式两边不是Boolean类型时候,表示按位运算。

9.String、StringBuffer、StringBuilder的区别

String: 适用于少量字符串。创建之后不可更改,对String的修改会生成新的String对象。

StringBuilder: 适用于大量字符串,线程不安全,性能更快。单线程使用

StringBuffer: 适用于大量字符串,线程安全。多线程使用,用synchronized关键字修饰。

10.String rap = new String(“ctrl”);创建了几个对象?

一个或两个,如果常量池存在,那就在堆创建一个实例对象,否则常量池也需要创建一个。

11.什么是反射

在运行过程中,对于任何一个类都能获取它的属性和方法,任何一个对象都能调用其方法,动态获取信息和动态调用,就是反射。

12.浅拷贝和深拷贝的区别

浅拷贝: 基础数据类型复制值,引用类型复制引用地址,修改一个对象的值,另一个对象也随之改变。

深拷贝: 基础数据类型复制值,引用类型在新的内存空间复制值,新老对象不共享内存,修改一个值,不影响另一个。

深拷贝相对浅拷贝速度慢,开销大。

13.构造器能被重写吗

不能,可以被重载。

14.并发和并行

并发: 宏观上看是一个处理器"同时"处理多个任务(实际上多个任务轮流使用时间片)。微观上是同一时间只有一个任务在执行。(一个人同时吃两个苹果)

并行: 多个处理器同时处理多个任务。(两个人同时吃两个苹果)

15.抽象类和接口的区别

  1. 抽象类只能单继承,接口可以实现多个。
  2. 抽象类有构造方法,接口没有构造方法。
  3. 抽象类可以有实例变量,接口中没有实例变量,有常量。
  4. 抽象类可以包含非抽象方法,接口在java7之前所有方法都是抽象的,java8之后可以包含非抽象方法。
  5. 抽象类中方法可以是任意修饰符,接口中java8之前都是public,java9支持private。
  1. Error和Exception有什么区别
  1. Error:程序无法处理,比较严重的问题,程序会立即崩溃,jvm停止运行。
  2. Exception:程序本身可以处理,可以向上抛出或者是捕获,编译时异常和运行时异常

17.如果try{} 里有一个 return 语句,那么finally{} 里的代码会不会被执行,什么时候被执行,在 return 前还是后?

会执行,在return之前执行,如果finally有return那么try的return就会失效。

  1. final关键字有哪些用法

  1. 修饰类:该类不能被继承
  2. 修饰方法:方法不能被重写
  3. 修饰变量:声明时给定初始值,只能读不能修改
  1. jdk1.8的新特性

  1. Lambda表达式
  2. 方法引用
  3. 函数式接口
  4. 接口允许定义非抽象方法,使用default关键字
  5. 时间日期类改进
  1. 重定向和转发的区别

  1. 重定向发送两次请求,转发发送一次请求
  2. 重定向地址栏会变化,转发地址栏不会变化
  3. 重定向是浏览器跳转,转发是服务器跳转
  4. 重定向可以跳转任意网址,转发只能跳转当前项目
  5. 重定向会有数据丢失,转发不会数据丢失

20,Get和post请求的区别 delete,put

  1. Get相对不安全,数据放在url中(请求行),post放在body中,相对安全
  2. Get传送的数据量小,post传送的数据量大
  3. Get效率比post高,是from的默认提交方法

21.cookie和session的区别

  1. 存储位置不同:cookie放在客户端电脑,session放在服务器端内存的一个对象
  2. 存储容量不同:cookie <=4KB,一个站点最多保存20个cookie,session是没有上限的,但是性能考虑不要放太多,而且要设置session删除机制
  3. 存储数据类型不同:cookie只能存储ASCll字符串,session可以存储任何类型的数据
  4. 隐私策略不同:cookie放在本地,别人可以解析,进行cookie欺骗,session放在服务器,不存在敏感信息泄露
  5. 有效期不同:可以设置cookie的过期时间,session依赖于jsessionID的cookie,默认时间为-1,只需要关闭窗口就会失效
  1. java中的数据结构

数组,链表,哈希表,栈,堆,队列,树,图

  1. 什么是跨域?跨域的三要素

  1. 跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制
  2. 协议、域名、端口
  3. 注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域
  1. Tomcat三个默认端口及其作用

  1. 8005:负责监听关闭tomcat的请求
  2. 8009:接受其他服务器的请求
  3. 8080:用于监听浏览器发送的请求
  1. throw和throws的区别

  1. Throw:声明异常
  2. Throws:抛出异常

26,实例化对象有哪几种方式

  1. New
  2. Clone
  3. 反射
  4. 先序列化在反序列化

27,JAVA中什么类不能被实例化

 

抽象类:abstract关键字修饰的类

  1. 序列化和反序列化

  1. 序列化: 把对象转为字节序列的过程,在传递和保存对象时,保证了对象的完整性和可传递性,便于在网络传输和保存在本地文件中。
  2. 反序列化: 把字节序列转为对象的过程,通过字节流的状态和信息描述,来重建对象。
  1. 序列化的优点

将对象转为字节流存储到硬盘上,当JVM噶了的话,字节流还会在硬盘上等待,等待下一次JVM的启动,把序列化的对象,通过反序列化为原来的对象,减少储存空间和方便网络传输(因为是二进制)

30,什么是单点登录

单点登录:同一账号在多系统中,只登录一次,就可以访问其他系统,多系统,统一登陆。

  1. 实现单点登录的方式

① Cookie: 用cookie为媒介,存放用户凭证。登录上父应用,返回一个加密的cookie,访问子应用的时候,会对cookie解密校验,通过就可以登录。不安全和不能跨域免登。

② 分布式session实现: 用户第一次登录,会把用户信息记录下来,写入session,再次登录查看session是否含有对应信息。session系统不共享,使用缓存等方式来解决。

③重定向: 父应用提供一个GET方式的登录接口A,用户通过子应用重定向连接的方式访问这个接口,如果用户还没有登录,则返回一个登录页面,用户输入账号密码进行登录,如果用户已经登录了,则生成加密的token,并且重定向到子应用提供的验证token的接口B,通过解密和校验之后,子应用登录当前用户,虽然解决了安全和跨域,但是没前两种简单

42.泛型是什么?有什么好处?

本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

好处:

①类型安全

②消除强制类型转换

③提高性能

④提高代码的复用性

43.值传递和引用传递

值传递: 函数调用时会把实际参数,复制一份到函数中,函数中对参数进行操作,并不会影响参数实际的值。

引用传递: 将实际参数的地址值传递到函数中,函数对参数进行操作,会影响到实际参数的值。

注意: java中不存在引用传递(即使传的是对象,那也只是传递了对象的引用地址的副本,也属于值传递)。

                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值