一次性定时任务
6-一次性定时任务主要内容:1.主页前端开发(列表组件抽象)2.批量插入数据功能开发+经验分享3.定时任务注解4.测试及优化批量导入功能(涉及性能优化+并发偏程知识)
开发主页直接 list 列表组件实现
模拟 1000 万个用户, 再去查询
导入数据导入数据的方式
用可视化界面:适合一次性导入、数据量可控
写程序:for 循环,但是尽量分批进行(可以用接口来控制)。保证可控、幂等,注意线上环境和测试环境是有区别的
执行 SQL 语句:适用于小数据量
编写一次性任务for 循环插入数据的特点:
频繁建立和释放数据库连接(用批量查询解决)
for 循环是绝对线性的(可以并发提速)
注意:并发时不要用到非并发类的集合
获取核心线程数
1private static final int AVAILABLE_PROCESSORS = Runtime.getRuntime().availableProcessors() - 1;
建立执行器(线程池):
1private ExecutorService executorService = new ThreadPoolExecutor(AV ...
项目部署上线(用户中心示例)
项目部署上线-用户中心示例多环境参考文章:https://blog.csdn.net/weixin_41701290/article/details/120173283
本地开发:localhost(127.0.0.1)
多环境:指同一套项目代码在不同的阶段需要根据实际情况来调整配置并且部署到不同的机器上。
为什么需要?
每个环境互不影响
区分不同的阶段:开发 / 测试 / 生产
对项目进行优化:
本地日志级别
精简依赖,节省项目体积
项目的环境 / 参数可以调整,比如 JVM 参数
针对不同环境做不同的事情。
多环境分类:
本地环境(自己的电脑)localhost
开发环境(远程开发)大家连同一台机器,为了大家开发方便
测试环境(测试)开发 / 测试 / 产品,单元测试 / 性能测试 / 功能测试 / 系统集成测试,独立的数据库、独立的服务器
预发布环境(体验服):和正式环境一致,正式数据库,更严谨,查出更多问题
正式环境(线上,公开对外访问的项目):尽量不要改动,保证上线前的代码是 “完美” ...
使用 Git 上传项目
上传项目到GitHub
全局绑定账户
123# 绑定用户git config --global user.name " "git config --global user.email ""
2.进到本地项目目录
123git initgit add .git coommit - m "第一次上传"
已将本地仓库建立好
3.关联 GitHub 仓库 (示例宠物医院管理系统仓库地址)
1234# 关联 GitHub 仓库地址git remote add origin git@github.com:xxxx.git# 上传本地代码 使用 origin 来指定上传的分支git push -u origin master
git remote add origin git@github.com:lubenchu/PetHospitalManagementSystem.git 报错解 ...
索引失效的几种情况
索引失效的几种情况
条件有 ‘or’。如果想使用 ‘or’ ,又想索引有效,只能将 ‘or’ 条件中的每个列都加上索引。
复合索引未使用左列字段。如果不使用前列,后续列也将无法使用。
like 以 % 开头。
需要类型转换。比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引。
where 中索引列有运算。
where 中索引列使用了函数。
如果 mysql 觉得全表查询更快时(数据少)
数据库基础
数据库相关基础一、 触发器的作用触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库的操作从而不允许未经许可的更新和变化。可以联级运算。如:某表上的触发器包含对另一张表的数据操作,二该操作又会导致该表的触发器被触发。
二、 什么是存储过程?用什么来调用?存储过程:是事先经过编译并存储在数据库中的一段 SQL 语句的集合。
调用:
(1)可以用一个命令对象来调用存储过程
(2)可供外部程序调用,如JAVA程序
三、 存储过程的的优缺点优点:
(1) 执行率高:存储过程是预编译过的,执行率高
(2) 较少网络流量:存储过程的代码存在数据库中,调用时值需要传递存储过程的名称和参数即可,因此降低了网络传输的数据量
(3) 安全性高:执行存储过程需要有一定权限的用户
(4) 重复使用:存储过程可以重复使用,从而减少数据库开发人员的工作量
缺点:
(1) 可移植性差
(2) 更改比较繁琐:更改参数,更改GetValue()调用
四、 存储过程与函数的区别
存储过程
函数
用于在数据库中完成特定的操作 ...
如何实现乐观锁和悲观锁?
如何实现乐观锁和悲观锁?
数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制
123//核心SQL,主要靠for updateselect status from t_goods where id=1 for update;复制代码
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。实现方式:乐一般会使用版本号机制或CAS算法实现。
123//核心SQLupdate table set x=x+1, version=version+1 where id=#{id} and version=#{version};复制代码
两种锁的使用场景
从上面对两种锁的介绍,我 ...
使用PreparedStatement防止SQL注入
使用PreparedStatement防止SQL注入使用Statement对象执行静态SQL语句,如果执行了特殊构造的语句,会导致SQL注入,出现安全漏洞。
使用PreparedStatement对象能够防止 SQL 注入。
PreparedStatement对象是预编译的SQL语句的对象,继承自Statement。
什么是预编译的SQL语句?
静态SQL语句
1String sql = "select * from user where username = '" + username + "' and password = ' " + password + "'";
改为预编译的SQL语句:
1String sql = "select * from user where username = ? and password = ? ";
编写SQL语句时,不使用字符串进行拼接,而是使用问号?占位符代替变量。
使用JDBC的步骤有所变化:
注册驱动
获取连接对象 ...
SQL 注入
SQL 注入静态 SQL 语句是使用字符串拼接起来的。如:
123String username = "行小观";String password = "1234";String sql = "select * from user where username = '" + username + "' and password = '" + password + "'";
我们将变量代入后的效果是:
1select * from user where username = '行小观' and password = '1234'
这样执行是没问题的。
但是现在情况变了:
12String username = "行小观";String password = "1' or '1' = '1";
我们将变量代入后的效果是:
1sel ...
SQL 语句
MyBatis 中,SQL 语句 # 和 $ 的区别动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。
在动态 SQL 解析阶段,#{} 会有两种不同的表现:
都可以获取对象中的属性值,[name] 和 #[name] 相同
#会把传入的参数使用引号包起来参数值 ? : ‘name’
1SELECT * FROM user WHERE name = ? AND password = ?
优点是 # 可以防止 SQL 注入。解析时,先把 # 的地方变成占位符 ? ,再设置参数值。SQL 语句:
1SELECT * FROM user WHERE name = #{name} AND password = #{password}
#{} 在动态解析时,会解析成一个参数标记符。如下:
1SELECT * FROM user WHERE name ...
SQL mysql 面试题
mysql 面试题数据库基础知识为什么要使用数据库
数据保存在内存
优点: 存取速度快
缺点: 数据不能永久保存
数据保存在文件
优点: 数据永久保存
缺点:1、速度比内存操作慢,频繁的IO操作。2、查询数据不方便
数据保存在数据库
数据永久保存
使用SQL语句,查询方便效率高。
管理数据方便
什么是SQL?
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。
1作用:用于存取数据、查询、更新和管理关系数据库系统。
什么是MySQL?
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。
MySql, Oracle,Sql Service的区别
Sql Service只能在Wi ...