10.23:学相伴实战中的面试题

文章讨论了数据库表设计过程,包括参考产品模型字段、遵循范式原则,以及在实际开发中对范式可能的突破。讲解了MySQL中int和bigint的区别,timestamp与日期类型的功能,以及pojo、bo、vo在数据传输中的角色。还介绍了编程注解在Spring框架中的作用和Git分支与标签的区别。
摘要由CSDN通过智能技术生成

你是如何设计数据库表的?

1、参考产品经理提供模块的 数据模型字段 文档设计数据库表【甬矽字段表文档】。
2、数据库表的 三大范式,但是实际开发中还是会打破三大范式的。
语言表达:早期并没参与数据库表的设计,都是产品经理或者技术leader进行设计,后续也参与过数据库表的设计【项目二期或者其他项目】,大部分情况下产品经理提供 产品模型字段文档 进行设计【大部分的字段提供】我们开始设计表,根据 三大范式 进行设计,最后还是会围绕着业务进行调整数据库表。

你说一下什么是三大范式?

第一范式:这个字段不能再被拆分成多个字段。
第二范式:满足第一范式的前提下,非主键字段必须依赖于全部主键而不是部分主键【学生表中,学生姓名、学生年龄、学生性别都依赖于学生ID(主键)】。
第三范式:满足第二范式的前提下,非主键字段只依赖于主键而不依赖其他非主键字段【学生姓名、学生年龄、学生性别之间不存在传递性依赖:根据学生姓名可以推出学生年纪这样的关系】。

你的表后续增加业务字段该怎么办?

语言表达:会编写对于sql脚本,在测试环境进行执行,对应修改测试环境的数据库。
其他公司情况:1技术leader在交流群里通知,自己增加数据库字段。

你说MySQL中的int和bigint的区别是什么?

个人感觉:bigint的范围比int大,这是我的第一感觉。
是的,bigint表示的整数范围更大【-9千万亿到9千万亿】也更占用存储空间,一般用于较大的ID自增主键等,int【-21亿到21亿】。

你说一下MySQL中timestamp类型和其他日期类型的区别?为什么用timestamp?

date:年-月-日【使用3个字节的存储空间,并支持的日期范围为’1000-01-01’到’9999-12-31’】。
time:时-分-秒【它使用3个字节的存储空间,并支持的时间范围为’-838:59:59’到’838:59:59’】。
datetime:年-月-日-小时-分钟-秒【8个字节的存储空间,并支持的日期范围为’1000-01-01 00:00:00’到’9999-12-31 23:59:59’】。
tiemstamp:年-月-日-小时-分钟-秒【4个字节的存储空间,并支持的日期范围为’1970-01-01 00:00:01’到’2038-01-19 03:14:07’】。与其他日期类型不同的是,TIMESTAMP类型存储的值表示自1970年1月1日以来的秒数,被称为UNIX时间戳。另外需要注意的是,TIMESTAMP类型有时区的概念,存储的值会根据当前时区转换为对应的时间
timestamp的用处
1、效率高:TIMESTAMP类型只需要使用4个字节的存储空间,可以节省存储空间。
2、会自动更新:TIMESTAMP类型可以使用特定的属性(如DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP)来自动更新时间戳。这在记录创建和最后修改时间等场景中非常方便。
3、有时间范围:尽管TIMESTAMP类型的日期范围较短(到2038年),但对于大多数应用来说,这个范围已经足够了。

你说一下pojo、bo、vo分别的用途是什么?

do/pojo:数据表对应的JavaBean。
vo:前段给后端的数据。【比如:用户账号、用户密码、验证码、token】。
bo:后端给前段的数据。【比如:所有用户的信息、分页信息】。
dto:DataTransObj 项目组和项目组之间的进行交流的bo。

你说一下如下注解的作用?

@RestController:@controller+@responsebody返回,代表是异步方法【直接JSON格式结果返回到客户端】。
@Controller:返回视图页面。

@Target({ ElementType.METHOD, ElementType.TYPE}):指定注解可以应用的元素类型
ElementType.TYPE:可以用于类、接口和枚举类型。
ElementType.FIELD:可以用于字段(包括枚举常量)。
ElementType.METHOD:可以用于方法。
ElementType.PARAMETER:可以用于方法的参数。
ElementType.CONSTRUCTOR:可以用于构造函数。
ElementType.LOCAL_VARIABLE:可以用于局部变量。
ElementType.ANNOTATION_TYPE:可以用于注解类型。
ElementType.PACKAGE:可以用于包。
ElementType.TYPE_PARAMETER:可以用于类型参数声明(Java 8新增)。
ElementType.TYPE_USE:可以用于使用类型的任何语句中(Java 8新增)。
@Retention():指定注解的生命周期
RetentionPolicy.SOURCE:注解只在源代码中存在,编译时会被忽略。
RetentionPolicy.CLASS:注解在编译时被保留,但不会被加载进JVM运行时环境中。
RetentionPolicy.RUNTIME:注解在运行时被保留,可以通过反射机制获取注解信息

@Documented:生成对应的Javadoc文档。

@Component:标注一个类为Springr容器的Bean【表示这个类加入到Spring容器管理中了】

@Slf4j:是lombok提供的一个注解,不用new日志对象了,直接使用log.info(“进行打印”);
info: 一般处理业务逻辑的时候使用,就跟system.err打印一样,用于说明此处是干什么的。slf4j使用的时候是可以动态的传参的,使用占位符 {} 。后边一次加参数,会挨个对应进去。
debug: 一般放于程序的某个关键点的地方,用于打印一个变量值或者一个方法返回的信息之类的信息
error: 用户程序报错,必须解决的时候使用此级别打印日志。

@RestControllerAdvice捕获整个应用程序中抛出的异常,并对它们进行处理。这样可以实现在整个应用程序范围内统一处理异常的目标。是@ControllerAdvice和@ResponseBody注解的组合,异常处理方法的返回值将返回JSON格式的响应体,用于直接返回给客户端。
要使用@RestControllerAdvice注解,只需在类上添加该注解。这个类应包含一个或多个带有@ExceptionHandler注解的方法,用于处理不同类型的异常

@Autowired:Spring提供的注解,对该Bean进行DI注入实例化。可以让Spring容器自动在应用上下文中查找匹配Bean,并将其注入到目标对象中。默认按类型查找,匹配不到按名称查找。当一个接口有多个实现的时候需要配合 @Quality(实现类小驼峰名称指定)
在这里插入图片描述
除了上面的@Qualifier注解之外,还能使用**@Primary**优先 注解解决上面的问题。
在这里插入图片描述
@Value: Spring提供的注解,用于将外部配置文件中的属性值注入到Spring Boot应用程序中。它可以用于将属性值注入到类的字段、构造函数或方法参数中,并且支持自动类型转换。
在这里插入图片描述
在这里插入图片描述
@Bean:用于将对象存入Spring的ioc容器中,同@Controller、@Service、@Component、@Configuration、@Repository等几个注解是一样的,都是负责将对象存入容器当中。只不过方式不同,他们是用在上面的,然后将当前类通过无参构造函数创建对象然后放入容器,而@Bean是用在方法上,将当前方法的返回值对象放到容器当中!可以理解为前者是由spring自动创建对象,而@Bean创建对象是交给我们自己来控制。

git tag和git branches区别?

查知乎上说,tag就像里程碑标志的一个点,branch是一个新的征程的一条线;tag 是静态的,而branch要往前走;稳定版本备份用tag,新功能开发多人用branch,开发完之后再merge到master上。tag是一个只读的branch。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值