-
true、false、null不是Java关键字,但严格来说,true、false是boolean常量;
-
内部类理解成类的成员,成员有4种访问权限: private、protected、public以及默认的访问权限;
-
java中采用GB2312或GBK编码方式时,一个中文字符占2个字节,而char是2个字节,所以
char foo='中'
是对的; -
BeanFactory是所有Spring Bean的容器根接口,其给IoC容器提供了一套完整的规范。FactoryBean是 一种创建Bean的方式,是对Bean的一种扩展;
-
织入是将增强添加对目标类具体连接点上的过程。AOP像一台织布机,将目标类、增强或引介通过AOP这台织布机天衣无缝地编织到一起。根据不同的实现技术,AOP有三种织入的方式:
a、编译期织入,这要求使用特殊的Java编译器;
b、类装载期织入,这要求使用特殊的类装载器;
c、动态代理织入,在运行期为目标类添加增强生成子类的方式;
Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。
-
Spring容器创建Bean对象的方法有三种方式,分别是:用构造器来实例化,使用静态工厂方法实例化和使用实例工厂方法实例化。
-
@Autowired是Spring提供的注解,@Resource是JDK提供的注解。它们的区别是,@Autowired只能按类型注入,@Resource默认按名称注入,也支持按类型注入。
1.@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的
2.@Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入,也可以通过byType方式注入。
3.@Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错 -
JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。Spring AOP默认采用这种方式,在接口的代理实例中织入代码。
-
CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。当目标对象不存在接口时,Spring AOP就会采用这种方式,在子类实例中织入代码。
-
类变量在不设置初始值时,会进行默认值赋值,而局部方法中声明的变量则必须进行初始化,他不会进行默认值赋值。
-
#{}匹配的是一个占位符,相当于JDBC中的一个?,会对一些敏感的字符进行过滤,编译过后会对传递的值加上双引号,因此可以防止SQL注入问题。
${}匹配的是真实传递的值,传递过后,会与sql语句进行字符串拼接。 ${}会与其他sql进行字符串拼接,不能预防sql注入问题。 -
static块和方法不能出现this和super,实例对象也可以调用静态方法。
-
synchrozied关键字称作同步,主要用来给方法、代码块加锁,被加锁的代码段,同一时间内多线程同时访问同一对象的加锁方法/代码块时,只能有一个线程执行能执行方法/代码块中的代码,其余线程必须等待当前线程执行完以后才执行该方法/代码块;
volatile关键字1.保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改)。2.禁止了指令重排序;
Lock接口提供了与synchronized关键字类似的同步功能,但需要在使用时手动获取锁和释放锁;transient关键字 简单地说,就是让某些被修饰的成员属性变量不被序列化;
volatile关键字和transient关键字不能用来处理线程安全。 -
SpringBoot使用@Value注解读取yaml文件中配置信息
-
MySQL中Having子句(Having子句需要和GROUP BY子句结合,才能使用),先分组,再筛选。
-
堆一定是完全二叉树,堆中节点的值都大于等于(或小于等于)其子节点的值,堆中如果节点的值都大于等于其子节点的值,称为大顶堆,如果都小于等于其子节点的值,称为小顶堆。
-
DoS攻击是拒绝服务攻击,目的: 耗尽被攻击对象的资源,使其无法提供正常的服务;
-
DDoS攻击。又叫分布式拒绝服务攻击。攻击者将多台受控制的计算机联合起来向目标计算机发起DOS攻击,它是一种大规模协作的攻击方式。