2019/11/8 XXX 1家公司面试

1注解中的元注解有哪些?

在JDK 1.5中提供了4个标准的用来对注解类型进行注解的注解类,,
分别是:Target(位置) Retention(保存的时间) Documented(生成的文档有注解) Inherited(子类可以继承) 来对我们自定义的注解类型进行注解,
@Target:使用位置
Target注解的作用是:描述注解的使用范围(即:被修饰的注解可以用在什么地方
Target注解用来说明那些被它所注解的注解类可修饰的对象范围:注解可以用于修饰 packages、types(类、接口、枚举、注解类)、类成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数),在定义注解类时使用了@Target 能够更加清晰的知道它能够被用来修饰哪些对象,它的取值范围定义在ElementType 枚举中。

public enum ElementType {
 
    TYPE, // 类、接口、枚举类
 
    FIELD, // 成员变量(包括:枚举常量)
 
    METHOD, // 成员方法
 
    PARAMETER, // 方法参数
 
    CONSTRUCTOR, // 构造方法
 
    LOCAL_VARIABLE, // 局部变量
 
    ANNOTATION_TYPE, // 注解类
 
    PACKAGE, // 可用于修饰:包
 
    TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
 
    TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
 
}

@Retention:保留到何时
Reteniton注解的作用是:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到何时) 。
Reteniton注解用来限定那些被它所注解的注解类在注解到其他类上以后,可被保留到何时,一共有三种策略,定义在RetentionPolicy枚举中。

public enum RetentionPolicy {
 
    SOURCE,    // 源文件保留
    CLASS,       // 编译期保留,默认值
    RUNTIME   // 运行期保留,可通过反射去获取注解信息
}

@Documented:描述在自定义接口上时生产文档时会有注解
Documented注解的作用是:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。
为了验证Documented注解的作用到底是什么,我们创建一个带有 @Documented 的自定义注解类。

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
 
@Documented
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface MyDocumentedtAnnotation {
 
	public String value() default "这是@Documented注解为文档添加的注释";
}
@MyDocumentedtAnnotation
public class MyDocumentedTest {
 
	@Override
	@MyDocumentedtAnnotation
	public String toString() {
		return this.toString();
	}
}

在这里插入图片描述
在这里插入图片描述
@Inherited:子类继承了父类则会自带这个注解
Inherited注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。
接下来我们使用代码来进行测试,首先创建一个被@Inherited修饰的注解类MyInheritedAnnotation。

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyInheritedAnnotation {
 
	public String name() default "pengjunlee";
}
@MyInheritedAnnotation(name="parent")
public class Parent {
 
}
``

```c
public class Child extends Parent{
 
	public static void main(String[] args) {
		Class<Child> child=Child.class;
		MyInheritedAnnotation annotation = child.getAnnotation(MyInheritedAnnotation.class);
		System.out.println(annotation.name());
	}
}

结果:

parent

2一对多(Collection)和多对一(Association)?

一对多:
在这里插入图片描述
现在我们再来看一看Mybatis的Mapper该如何编写一对多?很简单,就是在resultMap标签中配置标签,用来存储查询到的文章列表,注意posts代表的是用户实体的文章List集合:
在这里插入图片描述
这样Sql查询到的内容就映射到User用户实体中的属性中啦,这就是一对多的查询

多对一
多个帖子对应一个用户
在这里插入图片描述
在这里插入图片描述

3springBoot的实现原理?

@SpringBootApplication注解为组合注解:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
主要组合了:
 

在这里插入图片描述
@EnableAutoConfiguration 中的@Import注解导入的配置功能

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {

}

5索引?

https://www.cnblogs.com/luyucheng/p/6289714.html
普通索引
唯一索引
主键索引
组合索引
全文索引

1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert、update和delete。因为更新表时,不仅要保存数据,还要保存一下索引文件。
2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。
索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

6说下集合?

collection
set 、list
hashSet treeSet ;Arraylist linkedList
set :无序不重复的元素
hashSet:内部hash算法
treeSet :做排序的
list :有序可重复的元素
ArrayList:数组类型的集合,查询元素比较快 10
LinkedList:双向链表类型集合,添加和删除元素比较快

7RabbitMq哪几种消费模式?你们的消费失败怎么处理的?

简单模式、工作模式、订阅模式、路由模式、主题模式
消费失败则是加入死信队列,后台启动线程,重新消费

9Redis你们存的什么数据?可以存那些数据?

存的字典

10Dubbo的原理,还有ZooKeeper?

dubbo是远程调用的解决方案,底层是tcp连接的 支持的协议有 dubbo。http、hession、等等
zookeeper注册中心,zab协议来实现的,支持集群内部有心跳机制和选举机制,zookeeper宕机了,服务还是能用,有本地缓存。

发布了33 篇原创文章 · 获赞 1 · 访问量 992

猜你喜欢

转载自blog.csdn.net/weixin_44734394/article/details/103008047