什么是SQL注入?
sql注入是一种安全漏洞,攻击者向程序中插入恶意的代码,而程序没有对sql语句进行正确的验证,导致攻击者修改了原有的sql查询,从而获取,修改数据库的信息。
解决方法:
- 在java中使用PreparedStatement
- 对用户的输入进行验证和过滤
- 使用orm框架,这些工具会自动处理输入的安全性
接口和抽象类的区别
共同点:
- 接口和抽象类都不能被实例化,接口是用来被实现的,抽象类是被用来继承的
- 接口和抽象类都可以有抽象方法,抽象方法没有方法体
区别:
- 接口用于对类的行为进行约束,而抽象类主要解决代码复用的问题
- 接口是多继承,抽象类是单继承
- 接口中的成员变量是由public final static 修饰,而抽象类不限
- java8之前,接口的默认方法是public abstract,8之后允许有默认的方法以及static方法,而抽象类的抽象方法不可以有private,final,static等关键字,因为和重写相违背
jdk动态代理和cglib动态代理的区别
jdk动态代理是基于接口的,要求代理类一定是有定义的接口的
cglib动态代理基于ASM字节码生成工具,他是通过继承的方式生成目标类的代理类
深拷贝和浅拷贝
浅拷贝:浅拷贝会在堆上创建一个新的对象,如果说原对象的内部属性是引用类型的话,那么浅拷贝会复制这个引用类型,也就是说,拷贝对象和原对象共用一个内部对象。
深拷贝:深拷贝会完整的复制整个对象,包括内部对象。
补充:引用拷贝就是将两个不同的引用指向堆中同一个对象。

