面试:被问到一个问题,一定要把你知道的所有相关知识都说出来,记得有条理,把答题时间延长。那么相应时间内hr问的问题就会少些,通过概率大。另一方面,面试时间越长,胜券也大。

目录

一、java基础

1.switch和多重if的区别?

2.switch支持的类型?

3.while与do-while的区别?

4.break与continue的区别?

5.实例变量(属性、成员变量)与局部变量的区别

6.数组的默认值

7.冒泡排序与选择排序

8.this,static,super 、extends关键字

9.分别说明方法重载和方法重写的特点

10.静态变量使用什么修饰,与非静态变量使用上有什么区别?

11.构造方法的写法?

12.实例变量与静态变量的区别?

13.Java支持多继承码?

14.抽象类与接口区别:

15.Math类、Math.ceil()、Math.floor()、Math.round()

16.StringBuffer和StringBuilder的区别?

17.throw与throws的区别

18.try-catch块中存在return语句,是否还执行finally块? 如果执行,说出执行顺序

19.说出Collection与Collections的区别?

20.ArrayList和Vector的区别?

21.HashMap和Hashtable的区别?

22.三种遍历ArrayList的方式是什么,有什么区别?

23.构造代码块与构造方法执行顺序

24.多线程:调用start方法和run方法的区别?

25.线程调度的方法?

26.TCP与UDP协议的区别?

27.获取Class对象的三种方式?

28.元注解与注解中的属性要求:

二、javaweb

1.JavaScript(!=,==,!==,===的用法和区别)

2. post请求与get 请求区别(三方面)?

3.转发与重定向的区别(三方面)?

4.servlet生命周期关键方法(四步)和作用?

5.介绍/什么是cookie

6.介绍/什么是session

7.使cookie失效/使session失效

8.HttpServletRequest,session,servletContext有什么相同点,作用域有什么区别?

9.cookie与session的(三种)区别与联系?

10.什么是MVC?分别指的是什么?有什么作用?

11.jsp内置对象(了解)与四大域对象的优先级(重要)

12.隐式对象与四大作用域优先级(重要)


一、java基础

1.switch和多重if的区别?

1.多重if用于处理某个值处于某个连续的区间的情况
2.switch通常用于处理等值的情况

2.switch支持的类型?

switch中支持的类型为byte,short,int,char,String(JDK7+),枚举共6种,不支持浮点型与long

3.while与do-while的区别?

1.while是先判断后执行 如果条件不成立 一次都不执行
2.do-while 先执行 后判断 不管条件是否成立 至少执行一次。

4.break与continue的区别?

1.break用于 switch结构循环结构
2.continue用于循环结构中
作用(循环结构中):
break语句终止某个循环,程序跳转到循环块外的下一条语句
continue跳出本次循环,进入下一次循环
双重循环亦如此

5.实例变量(属性、成员变量)与局部变量的区别

 局部变量成员变量
定义位置方法或方法内的结构当中类的内部,方法的外部
默认值无默认值有默认值(与数组相同)
使用范围从定义行到包含其结构结束本类有效
命名冲突不允许重名可与局部变量重名,局部变量优先

6.数组的默认值

数组属于引用数据类型,其元素都有默认值(引用数据类型都有默认值)

整数:0 byte、short、int、long

小数:0.0 float 、double

字符:\u0000 char

布尔:false boolean

其他:null String等

7.冒泡排序与选择排序

public class Test1 {
	public static void main(String[] args) {
		// 冒泡排序 比较规则 两两相比(两个相邻的数进行比较) 条件成立 互换位置
		int [] nums = {1,55,12,78,98,120,45};
		// 外层循环控制比较的轮数  轮数永远是 长度 -1 
		// 内层循环控制每一轮比较的次数 最多的一次 长度-1 -i 
		for(int i = 0 ; i < nums.length -1 ; i++) {
			for (int j = 0; j < nums.length -1 - i; j++) {
				if(nums[j] < nums[j+1]) {
					int temp = nums[j];
					nums[j] = nums[j+1];
					nums[j+1] = temp;
				}
			}
		}			
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + "\t");
		}			
	}
}
public class Test2 {
	public static void main(String[] args) {
		// 选择排序和冒泡排序 比较的次数是一样 
		// 唯独区别在与 冒泡是立即调换位置 而选择是当一轮比较完了以后 再调换位置 
		// 外层循环是比较是数A  内层循环是 比较的 数 B
		int [] nums = {1,55,12,78,98,120,45};
		for (int i = 0; i < nums.length -1; i++) {
			int minIndex = i; // 定义一个最小数的下标  假设从 i开始 依次与后边的数进行比较
			for (int j = i + 1; j < nums.length; j++) {
				if(nums[minIndex] > nums[j]) {
					minIndex = j;
				}
			}	
			if(minIndex != i) {
				int temp = nums[i];
				nums[i] = nums[minIndex];
				nums[minIndex] = temp;
			}
		}	
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + "\t");
		}
	}
}

8.this,static,super 、extends关键字

  • this关键字:
    1. 访问属性,直接使用this.属性即可
    2. 访问方法,直接使用this.方法即可
    3. 访问构造方法,this(形参列表)即可。 必须在构造方法的第一句,并且只能有一个。
  • static关键字:
    1. 修饰属性,不依托于对象而存在,在内存中只有一份拷贝,将被所有的对象共享。类名.属性
    2. 修饰方法,不需要创建对象即可访问,在内存中只有一份拷贝。
    3. 修饰代码块,在加载类的时候执行,多个代码块按照顺序执行,并且只执行一次。哪怕创建 多个对象也是执行一次,因为类只被加载一次。
  • super关键字:可访问的与this同
    1. 父类的属性,直接super.访问,访问规则结合访问修饰符权限
    2. 父类的方法,直接super.访问,访问规则结合访问修饰符权限
    3. 父类的构造方法,super(形参列表)。必须在构造方法的第一句,并且只能有一个。
  • extends关键字可继承
    1. public修饰的属性和方法
    2. protected修饰的属性和方法
      1. 修饰的方法在不同包子类的情况下,只能继承,不能直接访问
    3. 默认修饰的属性和方法,要求父子类在同包
  •  extends不能继承的内容:
    1. private修饰的属性和方法
    2. 构造方法
    3. 默认修饰的属性和方法,但是父子类在不同包

9.分别说明方法重载和方法重写的特点

  • 重载
    • 同一个类中
    • 方法名称相同
    • 参数列表不同(个数、类型、顺序)
    • 跟返回值和访问修饰符无关
  • 重写
    • 存在于父子类中
    • 方法名称相同
    • 参数列表相同
    • 返回值相同或者是其子类
    • 访问权限不能严于父类
    • 不能抛出比父类更多的异常
    • 扩展:
      • 父类的静态方法 子类可以继承,但是不能重写(即使写成与父类一模一样的静态方法,虽然可以正常运行,编译器不会报错,但此时不是重写)
      • 父类的普通方法 不能被子类重写为静态方法
      • 父类的静态方法 子类不能定义同名的非静态方法

10.静态变量使用什么修饰,与非静态变量使用上有什么区别?

  • 使用static修饰
  • 静态变量在本类中可以直接访问或通过类名+.访问
  • 静态变量在非本类在必须通过类名+.访问
  • 非静态变量在本类或非本类静态方法中都必须先创建对象,然后通过对象访问
  • 非静态变量在本类普通方法中可直接访问,比如常写的getter与setter方法

11.构造方法的写法?

  • 访问修饰符 + 类名 
  • (了解)
  • public 
    public就不用解释了
    private 
    当构造方法修饰符为private级别时,只能在当前类内访问,此类不能被继承,也不能被其他类创建对象。                                可以对比其他几种修饰符的作用:abstract修饰的类,不允许被实例化,这点和private修饰构造方法相同,但abstract修饰的类可以被继承,拥有子类,可以创建子类的实例;final类禁止被继承,这点和private修饰构造方法相同,但是final类可以用new创建实例对象。 
  • protected 
    如果构造函数是protected,那么该类可以继承,可以在被包内其他类中创建实例,但是无法在包外或者子类以外的地方产生实例.

12.实例变量与静态变量的区别?

  • 实例变量每创建一个对象,在内存中就有一份拷贝,多个对象之间互不影响。
  • 静态变量在内存中只有一份拷贝,被多个对象共享,节省内存空间

13.Java支持多继承码?

  • 不支持,一个类只能有一个直接父类,但是可以通过接口继承多个接口的方式,实现类似多继承的效果,在能够满足需求的前提下,尽量使用接口

14.抽象类与接口区别:

  • a:抽象类可以有普通属性,接口只有静态常量
  • b:抽象类可以有构造方法,接口不能有构造方法
  • c:抽象类可以有普通方法和静态方法,接口从JDK8开始才支持使用default关键字声明方法和静态方法
  • d:抽象类是extends继承,接口是implement实现
  • e:只能继承一个类,可以实现多个接口,接口可以继承多个接口
  • f:抽象类中抽象方法必须使用abstract修饰,接口默认都是public abstract修饰的

15.Math类、Math.ceil()、Math.floor()、Math.round()

  • Math.ceil() 向上取整
  • Math.floor() 向下取整
  • Math.round() 四舍五入

16.StringBuffer和StringBuilder的区别?

  • 前者是线程安全的,效率低,先有的,since JDK1.0
  • 后者是非线程安全的,效率高,后有的,since JDK1.5

17.throw与throws的区别

throwthrows
生成并抛出异常声明方法内抛出了异常
位于方法体内部,可作为单独语句使用必须跟在方法参数列表后面,不能单独使用
抛出一个异常对象,且只能是一个声明抛出异常类型,可以跟多个异常

18.try-catch块中存在return语句,是否还执行finally块? 如果执行,说出执行顺序

详细链接:https://blog.csdn.net/zitian246/article/details/107966022 

try语句在返回前,将其他所有的操作执行完(未考虑try出现异常的情况,出现异常时执行catch,规则与其相同),保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:

  • 情况一:如果finally中有return语句,则会将try中的return语句"覆盖"掉(异常在返回值之前除外,此时不执行try中的return语句),直接执行finally中的return语句,得到返回值,这样便无法的得到try之前保留好的返回值
  • 情况二:如果finally中没有return语句,也没有改变要返回的值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值
  • 情况三如果finally中没有return语句,但是改变了要返回的值,这里优点类似于引用传递和值传递的区别,分以下两种情况:
    •  a)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值
    •  b)如果return的数据类型是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的值就是在finally中改变后的该属性的值。

补充:出现异常捕获时,执行catch语句,其规则与try中相同。

任何执行try 或者catch中的return语句之前,都会先执行finally语句

19.说出Collection与Collections的区别?

      Collection是一个单例集合的根接口,Collections是操作集合对象的工具类

20.ArrayList和Vector的区别?

相同点:

  • ArrayList与Vector底层都是使用了Object数组实现的。

不同点:

  • Vector是JDK1.0就有的,ArrayList是JDK1.2才有的

  • Vector无参构造直接给数组长度赋值为10,而ArrayList是第一次添加内容的时候才给数组长度赋值为10

  • Vector扩容是原来的2倍,ArrayList是原来的1.5倍

  • Vector是线程安全的,ArrayList是线程不安全的

21.HashMap和Hashtable的区别?

  • 此类提供与Hashtable相同的实现,但是是线程安全的,默认容量是11,扩容是两倍+1,键和值都不允许为null,无序的
  •   HashMap JDK1.2 ,默认容量16, 扩容2倍, 线程不安全

     Hashtable JDK1.0, 默认容量11, 扩容2倍 + 1 线程安全

22.三种遍历ArrayList的方式是什么,有什么区别

  • 普通for循环 基于下标遍历 可以做一些基于下标的操作
  • 增强for循环 不能操作下标 效率高 底层实现还是迭代器
  • 迭代器 不能操作下标 效率高

23.构造代码块与构造方法执行顺序

  • 静态代码块初始化
  • 给对象的实例变量(非“常量”)分配内存空间,默认初始化成员变量
  • 成员变量声明时的初始化
  • 初始化块初始化(又称为构造代码块或非静态代码块 )
  • 构造方法初始化

24.多线程:调用start方法和run方法的区别?

  • 调用start方法 会开启一个新的线程
  • 不能调用run方法 因为不会开启新的线程

 线程五状态:创建--》就绪--》运行--》阻塞--》死亡,由阻塞也可变为运行

25.线程调度的方法?

    sleep 休眠      join 插入

    yield 礼让       stop 中断

    start 开始

26.TCP与UDP协议的区别?

TCP特征:

1. TCP协议是完全依赖IO流的,面向连接的!!!
  1. 数据传输没有大小限制

  2. 因为面向连接,所以数据安全

  3. 因为面向连接,所以速度较慢

  4. TCP协议严格区别客户端和服务器

UDP协议下的socket:

1. 是按照数据包的方式来处理数据,面向无连接。
  1. 每一个数据包有大小限制,要求在64KB以内!

  2. 因为面向无连接,所有传输数据不安全,不稳定

  3. 因为面向无连接,所有传输速度贼快

  4. UDP不区分客户端和服务器,只有发送端和接收端

27.获取Class对象的三种方式?

//获取Class对象方式1:new对象
Date data = new Date();
System.out.println(data.getClass());

//获取Class对象方式2:类名+.class
System.out.println(Date.class);

//获取Class对象方式3:反射(推荐使用)
 Class<?> dateClass = Class.forName("java.util.Date");

28.元注解与注解中的属性要求:

  • @Target 表示注解可以声明的位置,默认不写表示在任何位置都可以使用。TYPE,METHOD,FIELD,CONSTRUCTOR,LOCAL_VARIABLE,PARAMETER

  • @Retention 表示注解的生命周期

    • CLASS表示在二进制文件中生效

    • RUNTIME表示在程序运行时生效

    • SOURCE表示在Java源代码中生效

    • 生命周期长度 SOURCE < CLASS < RUNTIME

  • Documented 被此注解修饰的注解表示在doc文档注释中保留此注释

  • Inherited 表示被此注解修饰的注解可以被子类保留

要求:

  1. 注解中不能写方法,也没有抽象方法 书写格式:Type name();

  2. 注解中的属性支持的数据类型

8中基本类型、String、枚举、Class和其对应的数组 共(8+3)*2 = 22种

  1. 注解中的属性名为value并且只有一个属性的时候可以直接写值。数组的话直接大括号,大括号内写值

  2. 注解中可以写枚举类

二、javaweb

1.JavaScript(!=,==,!==,===的用法和区别)

<span style="color:#34495e">	var num = 1;
	var str = '1';
	var test = 1;
 
	document.write(test == num); //true 相同类型 相同值    (等于,只比较值,类型不同的,会先转换)
	document.write(test === num);//true 相同类型 相同值	(绝对等于,即比较类型,又比较值)
	document.write(test !== num);//false test与num类型相同,其值也相同, 非运算肯定是false
 
 
	document.write(num == str);  //true  把str转换为数字,检查其是否相等。
	document.write(num != str);  //false  == 的 非运算
	document.write(num === str); //false  类型不同,直接返回false
	document.write(num !== str); //true   num 与 str类型不同 意味着其两者不等 非运算自然是true。
 
//== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。
 
</span>

2. post请求与get 请求区别(三方面)?

  • url:get请求数据放在url后面;post请求数据放在请求体中,不会在地址栏显示
  • 数据大小:请求参数大小有限制;post请求参数大小无限制
  • 安全:get请求 明文不安全;post 请求安全

3.转发与重定向的区别(三方面)?

  • url:
    • 转发不发生变化址栏,一次请求;
    • 重定向地址栏发生变化,两次请求
  • 发生位置
    • 转发:服务器行为(客户端不知情),还是原来的请求
    • 重定向:客户端收到重定向url,重新发起请求  2次
  • 数据携带
    • 转发:数据不丢失(request.setAttribute)以键值对形式存储在request作用域中。key为String类型,value为Object类型
    • 重定向:两次请求,数据丢失
  • 访问权限(了解):
    • 转发:web应用内部资源
    • 重定向:任何资源,包括外部项目,百度等

4.servlet生命周期关键方法(四步)和作用?

  • 构造方法:实例化
  • init()   初始化 初始化资源
  • service()  接收用户请求   返回响应数据
  • destroy()  销毁时调用  释放的资源 

5.介绍/什么是cookie

    cookie是存储在客户端的一小块信息,以键值对(key,value)的形式存储,value是String类型(与session不同)

    cookie由服务器产生,响应时通过header向浏览器传递,浏览器保存,如果设置了时间,浏览器到期自动删除。

    一旦保存了某个cookie,那么在以后每次访问web服务器时,都应在http请求头中将这个cookie回传给web服务器。

6.介绍/什么是session

   session就是会话,服务器为客户端建立的一个session对象,用于存储信息,存储也是键值对,value是Object类型,可存储任何信息。

   再顺便解释一下:会话,一个浏览器访问同一个应用,多个窗口共享一个会话,若浏览器关闭,则会话结束(浏览器删除session,但服务器的session有默认存储时间,不一定会删除,下次连接,无法识别浏览器,会创建新的session)。如果用户长时间不操作,超过设置的最大存活时间(默认30min),session自动失效。

补充:(首次使用到session时,服务器会自动创建session,并创建cookie存储sessionId发送回客户端 )

7.使cookie失效/使session失效

  • cookie:在服务端创建新的同名cookie覆盖或者设置setMaxAge(0)发送给客户端,客户端收到响应age为0,立即删除
  • session:获取当前session,setMaxInActiveInterval(0) 或者调用invalidate()(推荐这种,注销登录时用的比较多)

8.HttpServletRequest,session,servletContext有什么相同点,作用域有什么区别?

   相同点:都可以用来存储数据

  • HttpServletRequest在一次请求中有效
  • session当前一个用户会话数据有效,会话关闭,数据销毁
  • ServletContext代表当前javaweb在tomcat中的应用,当tomcat(或web服务器)启动时创建,服务器关闭时失效

9.cookie与session的(三种)区别与联系?

  • 存储位置:cookie存储在客户端(由服务器生成),session存储在服务器
  • 安全:cookie不安全, session安全,用户无法获取
  • 数据大小:cookie不能存储超过4kb数据
  • session是基于cookie实现,服务器产生的session,会将JsessionID以cookie形式发送给客户端,客户端每次请求携带JsessionID,服务器才能识别当前会话,否则会创建新的id,再次传给客户端。

10.什么是MVC?分别指的是什么?有什么作用?

    mvc是一种软件设计模式,

    m 指的是model模型---数据---javabean

    v  view视图---jsp html等

    c   controller控制器---- Servlet    :作用1.控制界面跳转 2.提供数据

    作用:解耦,将数据和界面分离,附带可重用性与可维护性等特点

11.jsp内置对象(了解)与四大域对象的优先级(重要)

常用的有6个,pageContext,request、session,application、out、response

(内置对象是用在java代码块中的)

四大域对象优先级:重要

  • pageContext(javax.servlet.jsp.PageContext) 当前jsp页面有效,一旦跳转则失效

  • request (javax.servlet.http.HttpServletRequest) 一次请求有效

  • session (javax.servlet.http.HttpSession) 一次会话有效

  • application (javax.servlet.ServletContext) 整个web应用有效(服务器重启或关闭失效)

12.隐式对象与四大作用域优先级(重要)

 隐式对象用于el表达式中

四大作用域优先级:pageScope  requestScope   sessionScope   applicationScope

    pageContext.setAttribute("code",100); 
    request.setAttribute("code",200);
    session.setAttribute("code",300);
    application.setAttribute("code","400");

pageScope- code:${pageScope.code}<br>
requestScope- code:${requestScope.code}<br>
sessionScope- code:${sessionScope.code}<br>
applicationScope- code:${applicationScope.code}<br>

三、框架相关

1.mybatis中${}和#{}的区别?

https://blog.csdn.net/kaixuansui/article/details/88637311

posted on 2020-08-05 21:24  zitian246  阅读(96)  评论(0编辑  收藏  举报