Java基础面试总结

Get和Post的区别
1.Get是从服务器获取数据,Post是向服务器传送数据
2.Get的大小2Kb,Post没有限制
3.Get安全性低,Post安全性高
4.上传文件使用Post

重载和重写
1.重载是在同一个类中,具有相同的方法名,但参数的类型和个数不同
2.重写是子类继承父类,具有相同的参数和返回值类型,但是方法体不同

String、StringBuffer、StringBuilder的区别
1.String 字符串常量 不可变 字符串拼接是是两个不同的空间
2.StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加
3.StringBuilder 字符串变量 可变 非线程安全 字符串拼接直接在字符串后追加
执行效率:StringBuilder>StringBuffer>String
(String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,
StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方法,
在原来的基础上进行追加,所以性能比String要高,
又因为StringBuffer 是线程安全的而StringBuilder是线程非安全的,
所以StringBuilder的效率高于StringBuffer.)
对于大数据量的字符串拼接,采用StringBuffer、StringBuilder

HashTable和HashMap的区别
Map是一个以键值对存储的接口。Map下有两个具体的实现,分别是HashMap和HashTable
HashMap是线程不安全的 允许空的键和值 HashMap的效率要高
HashTable是线程安全的 不允许空的键和值 HashTable的效率要低

九大隐式对象
输入\输出对象:request、response、out
作用域通信对象:session、application、pageContext
Servlet对象:page、config
错误对象:exception

Forword和Redirect
Forword是请求转发 是请求的延续 共享request的数据 地址栏不变
Redirect是重定向 是新的请求 不共享request的数据 地址栏改变

JSP九大隐式对象的四个作用域的大小和作用范围
从大到小:application>session>request>page
application是全局作用范围 整个应用程序共享 生命周期:从应用程序开启到结束
session是会话作用域 用户第一次请求会产生一个新的会话,然后服务器就可以记住这个会话状态了
request是请求作用域 客户端的一次请求
page是 一个JSP页面

List、Set、Collection、Collections
List和Set都是接口,都继承接口Collection,List是有序可重复的集合,Set是无序不可重复的集合
Collections是以一个封装了很多集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化
List接口实现类有ArrayList、LinkedList、Vector
(ArrayList和Vector是基于数组实现的,所以查询的时候速度快,
而在进行增加和删除的时候速度较慢LinkedList是基于链式存储结构,
所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。
又因为Vector是线程安全的,所以他和ArrayList相比而言,查询效率要低。)

Java的基本数据类型
数据类型 大小
byte(字节) 1(8位)
shot(短整型) 2(16位)
int(整型) 4(32位)
long(长整型) 8(64位)
float(浮点型) 4(32位)
double(双精度) 8(64位)
char(字符型) 2(16位)
boolean(布尔型) 1位

冒泡排序:
public class MP{

public static void main(String[] args){
int a[] = new int[]{1,2,4,6,3,5,7,8,9,0};
int i,j;
for(i=0;i<a.length()-1;i++){
for(j=0;j<a.length()-i-1;j++){
if(a[j]<a[j+1]){
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for(i=0;i<a.length();i++)
System.out.println(a[i]);

}

}

时间类型转换
public class SJ{

public static void fun(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
String newDate;
try{
newDate = sdf.formar(new SimpleDateFormat("yyyyMMdd").parse("20190920"));
System.out.println(newDate);
}catch(ParseException e){
e.printStackTrace();
}
}
public static void main(String[] args){
fun();
}
}

阶乘
public class JC{
public static void fun(int num){
if(num<0){
System.out.pritln("请输入一个大于零的数字");
return -1;
}else if(num==0||num==1){
return 1;
}else{
return fun(num-1)*num;
}
}
public static void main(String[] args){
System.out.println(fun(10));
}
}

OSI七层模型 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层

JVM内存结构
Java虚拟机 内存结分别为堆和栈,
堆里面存放的是对象实例也就是new出来的对象
栈里面存放的是基本数据类型以及引用数据类型的地址
对于所谓的常量是存储在方法区的常量池里面

内存泄漏和内存溢出
内存泄漏就是应用程序在申请内存后,无法释放已经申请的内存空间。一次内存泄漏危害可以忽略,但如果任其发展可能会形成内存溢出。
内存溢出就是当应用程序申请内存时,没有足够的内存空间供其使用。

单例
单例就是该类只能返回一个实例
特点:1.私有化的构造函数 2.私有的静态的全局变量 3.公有的静态方法
分为饿汉式、懒汉式和双层锁式
一种是饿汉式,就是在类初始化的时候,创建对象,这种方式是线程安全的,在程序运行期间就这一个对象。
另一种是懒汉式,懒汉式是在第一次使用时才创建对象,但是如果在多线程环境中要考虑线程安全问题。
饿汉式:
public class Singleton1 {
private Singleton1() {};
private static Singleton1 single = new Singleton1();
public static Singleton1 getInstance() {
return single;
}
}

懒汉式:
public class Singleton2 {
private Singleton2() {}
private static Singleton2 single=null;
public static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}
线程安全:
public class Singleton3 {
private Singleton3() {}
private static Singleton3 single ;
public static Singleton3 getInstance() {
if(null == single){
synchronized(single ){
if(null == single){
single = new Singleton3();
}
}
}
return single;
}
}
通过双重判断来保证单列设计模式在多线程中的安全性,
并且它在性能方面提高了很多。
synchronized在方法上加锁 (同步锁)
synchronized在代码块内部加锁 (同步代码块)
synchronized(同步锁)
使用synchronized如何解决线程安全的问题?
1.synchronized在方法上加锁
2.synchronized在代码块内部加锁
1.懒汉 2.饿汉 3.双重判断

Switch默认接受的几种数据类型
byte、short、int、char

修饰符的作用范围:

private default protected public
同一个类中 可以 可以 可以 可以
同一个包的类中 可以 可以 可以
不同包的子类中 可以 可以
不同包的类中 可以

抽象类与接口的区别
1.一个类只能进行单继承,但可以实现多个接口
2.有抽象方法的类是抽象类,抽象类中不一定有抽象方法
接口中所有的方法的默认修饰符是public abstract,接口里的成员变量默认修饰符是public static final

报错的状态码
301永久重定向
302临时重定向
304服务端未改变
403访问无权限
200正常
404路径
500内部错误

上一篇:单例设计模式


下一篇:LeetCode-Single Number II