java后端工程师进修ing(研一版‖day49)

目录

今日总结

详细内容

java随征录

​编辑Maven依赖版本冲突问题

代码生成器生成基本代码架构

整体架构介绍

生成接口文档

科研随探录

八股随笔录

代码随想录


今日总结

  • java随征录------Maven依赖版本冲突问题,代码生成器生成基本代码架构,生成接口文档
  • 科研随探录------
  • 八股随笔录------Redis面试篇(3/7)
  • 代码随想录------

详细内容

java随征录

Maven依赖版本冲突问题

项目依赖A和C,但是A依赖B的1.0,C依赖B的2.0。对于这种版本冲突问题,有一下两种办法

  1. 使用exclusions排除依赖版本

  2. 使用dependencyMangement锁定版本号,通常在父工程对依赖的版本统一管理。

代码生成器生成基本代码架构

java 复制代码
public class ContentCodeGenerator {

	// TODO 修改服务名以及数据表名
	private static final String SERVICE_NAME = "content";

	//数据库账号
	private static final String DATA_SOURCE_USER_NAME  = "root";
	//数据库密码
	private static final String DATA_SOURCE_PASSWORD  = "mysql";
	//生成的表
	private static final String[] TABLE_NAMES = new String[]{
//			"mq_message",
//			"mq_message_history"
			"course_base",
			"course_market",
			"course_teacher",
			"course_category",
			"teachplan",
			"teachplan_media",
			"course_publish",
			"course_publish_pre"

	};

	// TODO 默认生成entity,需要生成DTO修改此变量
	// 一般情况下要先生成 DTO类 然后修改此参数再生成 PO 类。
	private static final Boolean IS_DTO = false;

	public static void main(String[] args) {
		// 代码生成器
		AutoGenerator mpg = new AutoGenerator();
		// 选择 freemarker 引擎,默认 Velocity
		mpg.setTemplateEngine(new FreemarkerTemplateEngine());
		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		gc.setFileOverride(true);
		//生成路径
		gc.setOutputDir(System.getProperty("user.dir") + "/xuecheng-plus-generator/src/main/java");
		gc.setAuthor("itcast");
		gc.setOpen(false);
		gc.setSwagger2(false);
		gc.setServiceName("%sService");
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);

		if (IS_DTO) {
			gc.setSwagger2(true);
			gc.setEntityName("%sDTO");
		}
		mpg.setGlobalConfig(gc);

		// 数据库配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setDbType(DbType.MYSQL);
		dsc.setUrl("jdbc:mysql://192.168.101.65:3306/xcqdd_" + SERVICE_NAME
				+ "?serverTimezone=UTC&useUnicode=true&useSSL=false&characterEncoding=utf8");
//		dsc.setDriverName("com.mysql.jdbc.Driver");
		dsc.setDriverName("com.mysql.cj.jdbc.Driver");
		dsc.setUsername(DATA_SOURCE_USER_NAME);
		dsc.setPassword(DATA_SOURCE_PASSWORD);
		mpg.setDataSource(dsc);

		// 包配置
		PackageConfig pc = new PackageConfig();
		pc.setModuleName(SERVICE_NAME);
		pc.setParent("com.xuecheng");

		pc.setServiceImpl("service.impl");
		pc.setXml("mapper");
		pc.setEntity("model.po");
		mpg.setPackageInfo(pc);


		// 设置模板
		TemplateConfig tc = new TemplateConfig();
		mpg.setTemplate(tc);

		// 策略配置
		StrategyConfig strategy = new StrategyConfig();
		strategy.setNaming(NamingStrategy.underline_to_camel);
		strategy.setColumnNaming(NamingStrategy.underline_to_camel);
		strategy.setEntityLombokModel(true);
		strategy.setRestControllerStyle(true);
		strategy.setInclude(TABLE_NAMES);
		strategy.setControllerMappingHyphenStyle(true);
		strategy.setTablePrefix(pc.getModuleName() + "_");
		// Boolean类型字段是否移除is前缀处理
		strategy.setEntityBooleanColumnRemoveIsPrefix(true);
		strategy.setRestControllerStyle(true);

		// 自动填充字段配置
		strategy.setTableFillList(Arrays.asList(
				new TableFill("create_date", FieldFill.INSERT),
				new TableFill("change_date", FieldFill.INSERT_UPDATE),
				new TableFill("modify_date", FieldFill.UPDATE)
		));
		mpg.setStrategy(strategy);

		mpg.execute();
	}

}

整体架构介绍

  1. api包中用于定义接口类,用于接受客户端发送的请求。

  2. dto包用于定义数据传输对象。将请求体中的数据封装成对象,用来发送数据对象。

  3. po包用于定义数据库实例类对象。里面封装好了各个数据库中需要的对象属性。

  4. vo包用于定义视图层传输的对象。专为前端展示设计的定制化数据结构。

生成接口文档

在前后端分离开发中通常由后端程序员设计接口,完成后需要编写接口文档,最后将文档交给前端工程师,前端工程师参考文档进行开发。本项目通过Swagger生成接口在线文档。

科研随探录

八股随笔录

  • Redis怎么实现的io多路复用?

因为redis是跑在单线程中的,所有的操作都是按照顺序性执行的,但是由于io操作在一半情况下不能直接返回,这会导致某一文件io操作堵塞导致整个进程无法进行。为了让单线程的服务端应用同时处理多个客户端的事件,Redis采用了IO多路复用机制。I/O 多路复用其实是使用一个线程来检查多个 Socket 的就绪状态,在单个线程中通过记录跟踪每一个 socket。

  • Redis有哪2种持久化方式?分别的优缺点是什么?

Redis的读写操作都是在内存中,所以Redis性能才会高,但是当redis重启后,内存中的数据就会丢失,为了保证内存中的数据不会丢失,redis实现了数据持久化的机制,这个机制会把数据存储到磁盘。

  1. AOF日志:每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里

redis提供了三种写回硬盘的策略,如下

  1. RDB快照:将某一时刻的内存数据,以二进制的方式写入磁盘

因为 AOF 日志记录的是操作命令,不是实际的数据,所以用 AOF 方法做故障恢复时,需要全量把日志都执行一遍,一旦 AOF 日志非常多,势必会造成 Redis 的恢复操作缓慢。为了解决这个问题,redis增加了RDB快照。

RDB 快照就是记录某一个瞬间的内存数据,记录的是实际数据,而 AOF 文件记录的是命令操作的日志,而不是实际的数据。

  • AOF和RDB的优缺点。

AOF:

优点:提供更高的数据安全性,支持多种同步策略

缺点:记录每一个写操作,消耗更多的磁盘空间。频繁的io操作对redis的写入性能造成一定影响。

RDB:

优点:以快照的形式保存数据,文件体积小,备份和恢复的速度快。由于是定期快照,RDB文件通常比AOF文件小得多。

缺点: RDB方式在两次快照之间,如果Redis服务器发生故障,这段时间的数据将会丢失。并且,如果在RDB创建快照到恢复期间有写操作,恢复后的数据可能与故障前的数据不完全一致

代码随想录

相关推荐
稻草猫.4 小时前
Java线程安全:volatile与wait/notify详解
java·后端·idea
枫叶丹44 小时前
【Qt开发】输入类控件(二)-> QTextEdit
开发语言·qt
无敌最俊朗@5 小时前
MQTT 关键特性详解
java·前端·物联网
JAVA学习通5 小时前
微服务项目->在线oj系统(Java-Spring)----[前端]
java·开发语言·前端
拾贰_C5 小时前
【SpringBoot】前后端联动实现条件查询操作
java·spring boot·后端
hrrrrb6 小时前
【Python】文件处理(二)
开发语言·python
先知后行。7 小时前
QT实现计算器
开发语言·qt
掘根7 小时前
【Qt】常用控件3——显示类控件
开发语言·数据库·qt
GUIQU.7 小时前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt