经典面试题

1.finally和final的区别

finally,用于异常处理,通常会构成try,catch,finally的结构,无论是否抛出异常,finally都会执行。

finall关键词可以修饰类,方法和变量。

修饰类,类不可以被继承。修饰方法,方法不能被重写(覆盖)。修饰变量的时候,变量一旦赋值就不可更改,并且要初始化,在声明或者构造方法时。

2.sql注入

前提已知用户名,

操作,在后台进行拼接sql

SELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1';

本质在于:and的优先级高于or的优先级, username = 'admin' AND password = ''(falese)

继续执行,username = 'admin' AND password = '' (false)OR '1'='1'(true),即false or true

最终结果,true,完成sql注入

如何避免sql注入

使用?作为占位符,原因是,将用户的输入作为纯数据处理

3.128陷阱

 4.经典面试题128陷阱

package com.qcby.Demo;

public class Demo1 {
	public static void main(String[] args) {
		Integer a=100;
		Integer b=100;
		Integer c=200;
		Integer d=200;
		System.out.println(a==b);
		System.out.println(c==d);

	}

}

为什么一个是true,一个为false?

首先,明确==比较的是什么,在基本类型中,为值;在引用类型中,为内存地址。

其次,Integer.class中,有范围的限定-128~127

如果不在这个范围之内,则创建新的内存空间,如下代码

总结,a与b在范围之内,指向同一块内存空间

c和d不在范围之内,new开辟新的空间,不指向同一块内存空间

5.小测试题

package com.qcby.Demo;

public class Demo1 {
	
	public static void main(String[] args) {
		
		        int a=10;
		        int b = 10;
		        Integer a1 = 10;
		        Integer b1 = 10;		       
				Integer a2 = new Integer( 10);
		        Integer b2 = new Integer( 10);
		        System.out.println(a == b);  // T 基本数据类型的对比 ==比较值是否相同
		        System.out.println(a1 == b1); // T 128陷阱
		        System.out.println(a2 == b2); // F new会开辟新内存
		        System.out.println(a1 == a);  // T 包装类和基本数据类型对比时,包装类需要拆箱 ==比较值是否相同
		        System.out.println(a1.equals(a)); // T 包装类和基本数据类型对比时,包装类需要拆箱 equals方法的底层还是==
		        System.out.println(a1 == a2);  //F开辟新地
		        System.out.println(a == a2);  // T 自动拆箱
		

	}

}

注意最后一个Integer与int比较,Integer自动拆箱,变为int类型,之后进行值比较

equals的底层实现为==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值