-
java基础
-
java八大基本数据类型
- 数字型:byte,short,int,long,float,double
- 字符型:char
- 布尔类型:boolean
-
java三大特性
- 封装:使用private关键字,让对象私有,防止无关的程序去使用
- 继承:继承某个类,让子类可以使用父类的属性和方法
- 多态:同一个行为,不同的子类具有不同的表达形式
-
重载和重写的区别
- 重载:发生在同一个类里面,函数名必须相同,参数类型,参数个数,参数顺序,返回值,修饰符可以不同
- 重写:发生在父子类里面,函数名,参数,返回值必须相同,访问修饰符必须大于等于父类,异常要小于等与父类,如果父类方法是private则不能够重写
-
public,protected,(default),private修饰符的作用范围
- Public:都可以使用
- Protected:只有同类,同包子类,非同包子类才可以使用
- Defalut:同类,同包子类可以使用
- Private:只有同类才可以使用
5.==和equals的区别
- ==: 基础类型比较的值,引用类型比较的是地址值。
- 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.抽象类和接口的区别
- 抽象类只能单继承,接口可以实现多个。
- 抽象类有构造方法,接口没有构造方法。
- 抽象类可以有实例变量,接口中没有实例变量,有常量。
- 抽象类可以包含非抽象方法,接口在java7之前所有方法都是抽象的,java8之后可以包含非抽象方法。
- 抽象类中方法可以是任意修饰符,接口中java8之前都是public,java9支持private。
- Error和Exception有什么区别
- Error:程序无法处理,比较严重的问题,程序会立即崩溃,jvm停止运行。
- Exception:程序本身可以处理,可以向上抛出或者是捕获,编译时异常和运行时异常
17.如果try{} 里有一个 return 语句,那么finally{} 里的代码会不会被执行,什么时候被执行,在 return 前还是后?
会执行,在return之前执行,如果finally有return那么try的return就会失效。
-
final关键字有哪些用法
- 修饰类:该类不能被继承
- 修饰方法:方法不能被重写
- 修饰变量:声明时给定初始值,只能读不能修改
-
jdk1.8的新特性
- Lambda表达式
- 方法引用
- 函数式接口
- 接口允许定义非抽象方法,使用default关键字
- 时间日期类改进
-
重定向和转发的区别
- 重定向发送两次请求,转发发送一次请求
- 重定向地址栏会变化,转发地址栏不会变化
- 重定向是浏览器跳转,转发是服务器跳转
- 重定向可以跳转任意网址,转发只能跳转当前项目
- 重定向会有数据丢失,转发不会数据丢失
20,Get和post请求的区别 delete,put
- Get相对不安全,数据放在url中(请求行),post放在body中,相对安全
- Get传送的数据量小,post传送的数据量大
- Get效率比post高,是from的默认提交方法
21.cookie和session的区别
- 存储位置不同:cookie放在客户端电脑,session放在服务器端内存的一个对象
- 存储容量不同:cookie <=4KB,一个站点最多保存20个cookie,session是没有上限的,但是性能考虑不要放太多,而且要设置session删除机制
- 存储数据类型不同:cookie只能存储ASCll字符串,session可以存储任何类型的数据
- 隐私策略不同:cookie放在本地,别人可以解析,进行cookie欺骗,session放在服务器,不存在敏感信息泄露
- 有效期不同:可以设置cookie的过期时间,session依赖于jsessionID的cookie,默认时间为-1,只需要关闭窗口就会失效
-
java中的数据结构
数组,链表,哈希表,栈,堆,队列,树,图
-
什么是跨域?跨域的三要素
- 跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制
- 协议、域名、端口
- 注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域
-
Tomcat三个默认端口及其作用
- 8005:负责监听关闭tomcat的请求
- 8009:接受其他服务器的请求
- 8080:用于监听浏览器发送的请求
-
throw和throws的区别
- Throw:声明异常
- Throws:抛出异常
26,实例化对象有哪几种方式
- New
- Clone
- 反射
- 先序列化在反序列化
27,JAVA中什么类不能被实例化
抽象类:abstract关键字修饰的类
-
序列化和反序列化
- 序列化: 把对象转为字节序列的过程,在传递和保存对象时,保证了对象的完整性和可传递性,便于在网络传输和保存在本地文件中。
- 反序列化: 把字节序列转为对象的过程,通过字节流的状态和信息描述,来重建对象。
-
序列化的优点
将对象转为字节流存储到硬盘上,当JVM噶了的话,字节流还会在硬盘上等待,等待下一次JVM的启动,把序列化的对象,通过反序列化为原来的对象,减少储存空间和方便网络传输(因为是二进制)
30,什么是单点登录
单点登录:同一账号在多系统中,只登录一次,就可以访问其他系统,多系统,统一登陆。
-
实现单点登录的方式
① Cookie: 用cookie为媒介,存放用户凭证。登录上父应用,返回一个加密的cookie,访问子应用的时候,会对cookie解密校验,通过就可以登录。不安全和不能跨域免登。
② 分布式session实现: 用户第一次登录,会把用户信息记录下来,写入session,再次登录查看session是否含有对应信息。session系统不共享,使用缓存等方式来解决。
③重定向: 父应用提供一个GET方式的登录接口A,用户通过子应用重定向连接的方式访问这个接口,如果用户还没有登录,则返回一个登录页面,用户输入账号密码进行登录,如果用户已经登录了,则生成加密的token,并且重定向到子应用提供的验证token的接口B,通过解密和校验之后,子应用登录当前用户,虽然解决了安全和跨域,但是没前两种简单
42.泛型是什么?有什么好处?
本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
好处:
①类型安全
②消除强制类型转换
③提高性能
④提高代码的复用性
43.值传递和引用传递
值传递: 函数调用时会把实际参数,复制一份到函数中,函数中对参数进行操作,并不会影响参数实际的值。
引用传递: 将实际参数的地址值传递到函数中,函数对参数进行操作,会影响到实际参数的值。
注意: java中不存在引用传递(即使传的是对象,那也只是传递了对象的引用地址的副本,也属于值传递)。