一、基础
1、表的三范式:
第一范式:列属性不可再分(例如 用户表中常有姓名和电话,如果直接用了一个字段叫 ‘用户信息’,里面存 姓名加电话,这种就不符合一范式,因为属性里还可以再分;再比如收货地址应该单独分‘省市区’,而不是放在一起;又比如班级和学院应该单独分开而不是放同一个字段;等等这些例子)
第二范式:满足了 一范式,并且表中是联合主键,则其他非主键字段需依赖于联合主键而不能只依赖于主键中的某一个字段,即不能出现部分函数依赖(比如表中 课程&学号 共同确定成绩是 ok的,但表里还有 ‘课程学分’ 字段,它其实只需要 ‘课程’ 自己就可以确定,不需要 ‘学号’,这个就不满足 二范式了)(注:如果没有联合主键,二范式就没问题了)
第三范式:满足了 二范式,并且表中非主键字段都得直接依赖主键,而不能是间接,即不能出现 传递依赖(例如表中 ‘学号’ 来确定 ‘班级’是 ok的,但是如果表里还有 ‘班级地址’,它是通过 学号确定班级,班级再确定 班级地址的,这样产生了传递依赖,就不满足 三范式了 )
2、mysql 语法顺序 & 执行顺序:
SELECT
FROM
LEFT JOIN ON
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
范例:
SELECT user.name
FROM user
LEFT JOIN order ON user.id = order.uid
WHERE order.price > 100
GROUP BY user.name
HAVING count(1) > 4
ORDER BY user.name
LIMIT 0,10
整个语句顺序:
FROM(将最近的两张表,进行笛卡尔积)---VT1
ON(将VT1按照它的条件进行过滤,对笛卡尔积进行筛选)---VT2
LEFT JOIN(以左表为基准,对筛选后的笛卡尔积记录处理)---VT3
WHERE(过滤VT3中的记录)--VT4...VTn
GROUP BY(对VT4的记录进行分组)---VT5
HAVING(对VT5中的记录进行过滤)---VT6
SELECT(对VT6中的记录,选取指定的列)--VT7
DISTINCT(如果还有这个字段,则会进行去重)--VT8
ORDER BY(对VT8的记录进行排序)--游标
LIMIT(对排序之后的值进行分页)
注意:如果 JOIN了多个表,那么重复 ON 和 JOIN步骤
WHERE 后面条件的顺序:
mysql 是从左到右
oracle 是从右到左
3、mysql 体系架构
Connectors:客户端连接
Management Serveices & Utilities:管理服务和工具
Connection Pool:连接池,重用客户端连接
SQL Interface:SQL 接口,接收 SQL命令
Parser:解析器,解析 SQL语句并进行 词法 & 语法分析,最后构造成 解析树
Optimizer:优化器,对解析好的 SQL语句进行优化,解析树转换为 查询计划(经过 选取 - 投影 - 联接 )
Cache和Buffer:查询缓存,对 SQL语句进行 hash作为 key,查询结果为 value
Storage Engines:存储引擎接口,给上层服务 调用(它是基于表的,就是表可以单独设置 引擎类型,而不是数据库的)
File System:文件系统,最终数据都是存储到 硬盘文件里
4、mysql 执行流程
服务器通过用户名/密码或者SSL证书进行认证,认证后验证操作权限
查询缓存,如有则返回,没有则进行后面的解析、优化、执行
mysql解析器根据查询sql 经过词法分析、语法分析构造解析树,并按照语法规则验证语句正确性(关键字或者顺序等),然后预处理器进一步校验(表名、字段名等正确性)
查询优化器找到最优执行计划把解析树转化为查询计划(经过选取、投影、联接)
执行计划调用查询执行引擎,查询引擎通过API接口查询数据
查到数据,返回,并存入缓存
5、mysql 存储引擎
InnoDB(5.5.8 之后默认)
MyISAM
6、文件
1、参数文件:
windows:my.ini
linux:my.cnf
2、数据文件:(SHOW VARIABLES LIKE ‘%datadir%’)
InnoDB:.frm 表定义文件、.ibd 独立表空间文件、.ibdata 共享表空间文件
MyISAM:.frm 表定义文件、.myd 数据文件、.myi 索引文件
3、日志文件:
错误 err log:记录错误信息,参数 log_error配置的路径
二进制 binlog:记录了 DDL & DML 的语句,可用来恢复数据,配置 log_bin才能开启,mysql Server层负责而不是存储引擎负责,用来恢复/复制/审查,查看要借助工具 mysqlbinlog,InnoDB的事务未提交前二进制日志写到 binlog_cache_size大小的缓存中,提交后直接就写入二进制文件
事务日志 redo & undo:redo log用于 事务提交和回滚,存储引擎负责,ib_logfile0/ib_logfile1,每个文件默认 8M,写完1再2再1循环,undo放 .ibdata 文件
通用日志 general query log:CRUD 都记录,默认不开启,参数 general_log_file配置的路径
慢查询 slow query log:记录执行超过设定时间 long_query_time的 SQL,配置 slow_query_log=ON 开启,修改 log_output参数为 TABLE,则输出到mysql库下 slow_log表
中继日志:主从复制时, 从机 slave 会用到
7、存储结构
(1)无索引:遍历双向链表,找到对应的页,再从页中遍历单向链表找到数据
(2)有索引:二分查找找到对应的页,若是 辅助索引,则先找到索引对应的主键,用主键去 主键索引 拿数据,若是 主键索引 就直接拿数据
存储机制:日志文件是用 顺序IO 存储,数据文件采用 随机IO存储
8、数据类型
http://c.biancheng.net/view/7175.html
https://www.cnblogs.com/hzcya1995/p/13309479.html
注:数值中字段长度和类型取值范围无关,字段长度只是指明可能显示的最大长度,数据小于指定长度则用空格填充,大于指定长度如果没超过取值范围也是可以正常使用的。
9、常用内置函数
https://blog.csdn.net/hellokandy/article/details/82964077
二、索引
1、简介:索引是一种数据结构,为了加快数据库 查询效率而产生,它是基于 存储引擎的,不同引擎实现索引方式不同,它也占用空间
2、InnoDB & MyISAM 的索引:都是基于 B+Tree实现(B+Tree只有叶子节点存数据, BTree是叶子和非叶子都存数据)
3、分类-存储维度:
聚集索引:按照唯一标识构造B+树,叶子存放行数据(如没主键,则用 唯一索引作为 聚集索引,如还没唯一索引,则 mysql 生成一个隐式的主键),innodb的唯一标识用聚簇索引因为它数据放在一起,但普通索引因为需要先通过普通索引找到叶子节点中的 聚簇索引key,再回表查数据因此它是非聚簇索引。
非聚集索引:叶子存放 数据地址,再通过 数据地址去拿真正的行数据,MyIsam就是非聚簇索引因为需要先通过索引再用 数据地址去找数据
4、分类-使用维度:
主键索引:非空,唯一
唯一索引:可空,唯一
普通索引:可空,不唯一
组合索引:多个列组成
全文索引:MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引
5、最左前缀原则:索引匹配根据建立的顺序,从左到右匹配,一旦断层/范围查询后面就用不到索引,组合索引中使用(参考 https://www.cnblogs.com/ljl150/p/12934071.html)
组合索引 (name,age,sex)
where name='' and age='' and sex='' --可全部用到索引
where name='' and sex='' and age='' --可全部用到索引(因为优化器会调整顺序)
where name='' and sex='' --只有 name用到索引
where age='' and sex='' --没有用到索引
where name='' and address='' and age='' --只有 name用到索引
where name='' and age != '' and sex='' --只有 name用到索引,但如果建立的是 (name,sex,age)那么 sex也能用,因为优化器会优化
存储在 B+Tree里是 (1,1,1),(1,1,2),(1,2,1),(1,2,2),(2,1,1),它是先按第一个排序如 1到2,然后在第一个排好的基础上再对第二个排序
6、索引覆盖 & 回表 & ICP下推:
索引覆盖:查询的列都包含在 索引中(此时 extra中显示是 Using Index )
回表查询:先用 非主键索引拿到 主键索引的值,再通过 主键索引 查其他列的数据,多少条记录就回表几次
索引下推ICP:某些被索引的列,由原来的 MysqlServer 层判断下推到 引擎层去判断,然后再返回 Server层,加快效率,因为 Server和引擎交互次数也是费时间的(5.6开始有的,Extra的值为Using index condition );比如 (name,age)的组合索引在 5.6之前是先用 name去存储引擎查到数据然后返回给 server层进行数据过滤,但 5.6开始就是利用 name,age两个值都放到存储引擎查询数据再返回 server层。
7、索引失效:
不符合 最左原则
索引上用了范围查询/不等号/判空/计算(如 age=age+1)
like 时 % 号在前面
索引字符串没加 引号
索引用了 or
8、创建原则:
(1)需要索引:
主键自动是 索引
频繁查询的字段应该建 索引
多表 关联,关联字段应该建 索引
排序字段可有索引(因为索引用了 B+Tree,B+Tree是有顺序的)
统计或者分组的字段该有索引
(2)不需要索引
表记录少(因为索引也占用空间)
经常要 增删改
重复性较高的字段
查询字段使用 频率不高
9、索引原理:
(1)排好序的数据结构,不用全表扫描
(2)局部性原理 & 磁盘预读:磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,以 页为单位一般为4k或8k。
(3)选用 B+Tree:叶子节点才存数据,非叶子不存数据
三、执行计划 Explain
1、简介:查看 select 执行计划,分析执行过程(测试这个时记得数据库保持一定量的数据,如果只有一两条有时候优化器反而直接用全表扫描更快,会导致现象不是预期的)
2、参数:(参考 https://segmentfault.com/a/1190000008131735)
id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符
select_type: SELECT 查询的类型(1、SIMPLE 表示此查询不包含 UNION 查询或子查询,2、 PRIMARY 表示此查询是最外层的查询,3、 SUBQUERY 子查询中的第一个 SELECT,4、 DEPENDENT SUBQUERY 子查询依赖于外层查询的结果 )
table: 查询的表
partitions: 匹配的分区
type: join 类型(ALL < index < range ~ index_merge < ref < eq_ref < const < system
)
possible_keys: 此次查询中可能选用的索引
key: 此次查询中确切使用到的索引.
ref: 哪个字段或常数与 key 一起被使用
rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
filtered: 表示此查询条件所过滤的数据的百分比
extra: 额外的信息
3、show profiles
四、事务 & MVCC
1、事务基础可看:https://blog.csdn.net/qq_20475615/article/details/93713519
2、redo Log :InnoDB引擎中的重做日志,采用了 预写日志 的策略,数据写到 buffer pool之后,也把 redo日志写到 redolog Buffer(记录索引页、数据页、undolog页),事务提交后,再写到 redo日志文件 (可通过配置修改事务提交和 redo日志落盘机制),成功写入 redo日志,则认为 事务提交成功 ,如果宕机可通过该日志恢复保证数据可靠性。存储引擎负责,ib_logfile0/ib_logfile1,写完1再2再1循环 ,因为日志是 顺序IO 存储 ,数据文件采用 随机IO存储,所以 redo log 比较快。等到 buffer pool中的数据落盘之后,则会清除 redolog日志 。
3、undo Log:存储在共享表空间 .ibada文件 中的回滚段中,每次事务更新都会新增一条事务 undo日志记录,里面有回滚指针记录上一条id值,可用来做回滚。
4、InnoDB 之 MVCC(依赖于 undolog 和 read view)
快照读:普通查询,不加锁,读的是历史版本,在 undolog中。
当前读:增删改,加 写锁,读的是最新版本。
一致性非锁定读:通过 MVCC,如果读的行在 删改,不需要等锁释放,而是直接去 undo读最新可见快照,也就是历史版本。
一致性锁定读:某些情况需要对读加锁保证一致性,可通过 for update加写锁 或者 lock in share mode加读锁。
适用: 两种隔离级别,read_commited 时快照都是最新一份快照,而 repeatbale read则是读第一次查时的那一份。
实现: 它是通过在每行记录后面增加两个隐藏列来进行版本控制(其实还多一个 row_id表示行唯一标识,不过事务我们用到另外两个字段而已),存了两个版本号;新增或者更新时就把事务号作为 当前版本号,删除或更新的旧记录的事务号就作为 删除版本号。如果恢复数据,是需要根据 undolog 一条条往回找,因为每行记录只记录了上一行的历史事务号,即 事务链表。
5、事务实现原理分析
原子性:undolog,undolog用于回滚
持久性:redolog + force log at commit,redolog 用于恢复、force log at commit保证事务提交后 redolog已落盘。
隔离性:MVCC + 锁
一致性:依赖 原子+持久+隔离 来完成
redolog & undolog关联: undolog其实一开始也是在 redolog 里存了一份。一般 commit事务后redolog会刷盘,redolog每秒也会刷盘,如果在 commit前 redolog已经刷盘(即 redologl里的undolog刷盘),那么奔溃重启后就可以去 redolog里找对应的 undolog来回滚数据;但是 commit前如果 redolog还没刷盘,那重启后就只能去存在 .ibdata里找历史的 undolog日志;最后是 commit后的情况,redolog完成即使奔溃后面重启直接 redolog重做新记录即可,不需要恢复数据。
Innodb 中,即使查询语句,其实也是放在一个事务中。
五、锁
1、分类-粒度:
表锁:对整个表加锁,开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
行锁:对一行数据加锁,开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
元数据锁 MDL:对表做 增删改查时加 MDL读锁,即不能修改表结构;对 表结构做变更加 MDL写锁,即不能增删改
2、表锁分类-功能:(看锁状态:show status like 'table%'; )
意向共享/IS锁:lock table read
意向排他/IX锁:lock table write
3、行锁分类-功能:(看锁状态:show status like 'innodb_row_lock%'; )
共享/S/读锁:lock in share mode,加了之后其他事务能加 共享锁 但不能加 排他锁,但只读是正常的
排他/X/写锁:for update,加了之后其他事务 共享锁 和 排他锁 都不能加,但只读是正常的 (DML会自动加上 排他锁 )
4、行锁分类-范围:
Record Lock记录锁:锁一条记录,使用主键/唯一索引 锁定时产生
Gap Lock间隙锁 :如果用到锁的地方用了 非唯一索引,则会锁定前后记录之间的范围(比如 (id,age) ->(1,3),(3,6),(8,10),如果我 where 用了 age=6,则会把 id 1~8 且 age 3~10 的记录锁住,这里必须是 id 和 age 同时落在范围才算,当然如果是 前后没有记录,则是锁 无穷小/大);或者 唯一索引使用了范围条件,则会锁定范围条件内的数据(比如 主键 where id>1 and id < 5,锁定了范围 1~5之后,插入 id 为 3 或 4 的记录都需要等待)
Next-Key 临键锁:记录+间隙锁,它只有在事务隔离级别为 可重复读 生效(左开右闭)
注:间隙锁是在 可重复度 级别下才会有的
5、死锁:多个事务各自拿了部分资源,都等待对方释放锁
6、InnoDB 锁原理:对索引项加锁,如果一个索引都命不中,则升级为 表锁
7、两阶段锁:同个事务中只能一直加锁,直到最后事务提交或回滚解锁,而不能在事务中边加锁边解锁
8、加锁类型:https://mp.weixin.qq.com/s/qgC3G7tWZfblxSrALKmWgQ
行锁对 索引 加锁,如果执行锁的语句,where 后没有一个用到索引,在 RR级别下则会升级为 表锁
六、性能优化
使用自增主键,不要用 uuid(uuid是散列存储,可能造成原有的页分裂)
合理创建索引
可以合理反规范化
select 少用 * ,count(*),where 里不用 1=1
创建组合索引,用 exists 而不是 in
七、主从复制 & 读写分离
1、主从可看:https://blog.csdn.net/qq_20475615/article/details/98887912
2、读写分离:
八、分库分表
1、mycat:
2、sharding JDBC:https://blog.csdn.net/qq_20475615/article/details/99693224
九、备份
十、参数配置
十一、扩展
1、InnoDB
(1)data page & index page:数据脏页 &索引页,增删改时 缓存的数据和磁盘数据不一致,所以它是脏页
(2)insert buffer page:插入缓冲页
(3)adaptive hash index:自适应 hash,对访问频率高的 热点页建立 哈希索引,提高查询效率
(4)lock info:锁信息,行/表锁信息
(5)data dictionary:数据字典,元数据信息如表结构、数据库/表名、表字段、视图、索引、存储过程、触发器等
(6)redo log buffer:重做日志缓存,
(7)double write:双写,对 缓冲池中的数据进行落盘的时候,数据写到 共享表空间 和 独立表空间 两份,防止写入磁盘奔溃时可以找回。
(8)check point:检查点
(9)局部性原理
(10)查看表结构数据
SELECT
TABLE_NAME as '表名',
COLUMN_NAME as '字段名',
COLUMN_TYPE as '数据类型',
DATA_TYPE as '数据类型',
(case when CHARACTER_MAXIMUM_LENGTH is not null then CHARACTER_MAXIMUM_LENGTH when NUMERIC_PRECISION is not null then NUMERIC_PRECISION else '' end) as '长度',
CHARACTER_MAXIMUM_LENGTH,
NUMERIC_PRECISION,
(case when COLUMN_KEY = 'PRI' then '主键' else '' end) as '主键/外键',
IS_NULLABLE as '是否为空',
COLUMN_COMMENT as '备注'
FROM
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = ''
SELECT TABLE_NAME,GROUP_CONCAT(COLUMN_COMMENT SEPARATOR ",") FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'ny_dev' group by TABLE_NAME
2、索引为什么不是 哈希表 或者是 其他树?
(1)哈希表:memory中有哈希索引,innodb有自适应哈希
a、哈希冲突可能导致数据散列不均匀,产生很多线性查询导致效率不高
b、范围查询效率不高
c、存储时需要加载所有哈希表到内存,内存耗费大
(2)BST:二叉搜索树
a、如果是递增时,就会变成链表
(3)AVL:二叉平衡树
a、插入的时候需要旋转树,性能较差
(4)Red/Black Tree:红黑树
a、每个节点只能存一个数据,数据多就导致树太深
(5)BTree:B树
a、每个节点能存储多个数据(Innodb每次读取 16K的数据)
3、log buffer刷盘设置
2、逻辑优先级
(1)and 比 or优先级高:如下 select * from user u where u.id = '' or u.id='' and u.type=3,即使前后两个记录都不满足 type=3,但是只有后面的记录会被过滤,因为先执行了后者的 and
你可能感兴趣的:(SSM,mysql,java,sql,数据库)
Java前端基础—HTML
缺少动力的火车
前端基础集合 前端 java html
Java前端基础—HTML目录Java前端基础—HTML1.简介2.基础语法2.1HTML页面固定结构2.2标题标签2.3段落标签2.4换行标签2.5水平线标签2.6文本标签2.7图片标签2.8音频标签2.9视频标签2.10链接标签2.11列表标签2.12表格标签2.13表单标签2.14语义标签1.简介1.网页组成:文字,图片,音频,视频,超链接。2.代码如何转换成网页:依靠的是浏览器的渲染和解析
svm python 模型绘图_1SVM处理数据并绘图
张炜大师傅
svm python 模型绘图
爬虫Python基础、数据分析扩展包Numpy、pandas、matplotlib,Python读取MySQL数据,Python爬虫及Scrapy框架,无监督机器学习算法聚类分析等,以及案例:互联网金融行业客户价值分析等。机器学习机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有
【设计模式】观察者模式 在java中的应用
CC大煊
Java基础 java 观察者模式 开发语言
文章目录引言观察者模式的定义观察者模式的应用场景观察者模式的基本概念主题(Subject)和观察者(Observer)的关系观察者模式的优缺点优点缺点Java中的观察者模式实现Java内置的观察者模式`java.util.Observer`接口`java.util.Observable`类示例代码自定义实现观察者模式自定义接口和类具体代码示例使用`java.util.Observer`和`java
【软件设计】常用设计模式--观察者模式
秦哈哈
软件设计 设计模式 观察者模式
软件设计模式(四)观察者模式一、观察者模式(ObserverPattern)1.概念2.模式结构3.UML类图4.实现方式C#示例步骤1:定义观察者接口步骤2:定义主题接口步骤3:实现具体主题步骤4:实现具体观察者步骤5:使用观察者模式Java示例步骤1:定义观察者接口步骤2:定义主题接口步骤3:实现具体主题步骤4:实现具体观察者步骤5:使用观察者模式5.优点6.缺点7.应用场景二、观察者模式的变
NIO 和 Netty 在 Spring Boot 中的集成与使用
阿乾之铭
java 网络 开发语言
Netty到底是个啥,有啥子作用1.Netty的本质:对NIO的封装NIO的原生问题:Java的NIO提供了非阻塞I/O和多路复用机制,但其使用较为复杂(如Selector、Channel、Buffer的配置和管理)。开发者需要自己处理线程模型、资源管理、协议解析等底层细节,代码冗长且容易出错。Netty的改进:Netty对NIO进行了高级封装,提供了更加易用的API和灵活的抽象层,例如:Chan
Mysql数据库索引
阿乾之铭
MySQL Spring Data JPA 数据库 mysql
SpringDataJPA建立索引所使用的语法@Entity@Table(name="user",indexes={@Index(name="idx_user_username",columnList="username"),@Index(name="idx_user_email_status",columnList="email,status")},uniqueConstraints={@Uni
Lombok 在 IntelliJ IDEA 中的使用步骤
阿乾之铭
intellij-idea java ide
Lombok是一个非常流行的Java库,它通过注解简化Java类的开发,特别是在处理POJO(PlainOldJavaObjects)类时,如生成getter、setter、toString等常用方法。Lombok在减少样板代码(boilerplatecode)方面非常有用。在IntelliJIDEA中使用Lombok插件,可以极大简化开发过程。1.安装Lombok插件要在IntelliJIDEA
MySQL中的嵌套查询
阿乾之铭
MySQL 数据库 sql mysql
1.嵌套查询的定义嵌套查询指在一个查询语句的某个部分嵌入一个子查询。嵌套查询的执行过程遵循“先子查询、后外层查询”的逻辑。首先,子查询执行并返回一个结果集,可能是一个值、一行或多行数据。接着,外层查询使用子查询的结果继续对数据进行筛选或处理。通过这种方式,嵌套查询可以处理更复杂的逻辑,如多层条件过滤、数据对比等。子查询:首先执行,返回符合条件的结果。外层查询:利用子查询返回的结果进行筛选或其他逻辑
Spring Boot 集成 RabbitMQ
一叶飘零_sweeeet
MQ Springboot 果酱紫 java-rabbitmq spring boot rabbitmq
在现代分布式系统中,消息队列扮演着至关重要的角色。它能够实现系统间的异步通信、解耦组件以及提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的开源消息中间件,具有强大的功能和灵活的配置。而SpringBoot则是一种流行的Java开发框架,能够快速构建应用程序。本文将详细介绍如何在SpringBoot项目中集成RabbitMQ,包括安装和配置RabbitMQ、在SpringBoot中使用
链表(双向环形链表)Java版
爱学Java
Java数据结构与算法 链表 java 数据结构
双向环形链表(一个哨兵)双向环形链表介绍双向环形链表的特点应用场景代码实现双向环形链表介绍双向环形链表是双向链表的一种特殊形式,其特点是链表的头节点和尾节点相互连接,形成一个环。相较于普通双向链表,环形结构使得链表可以在任意节点上循环遍历,非常适合某些场景,例如实现循环队列、游戏中的回合逻辑等。双向环形链表的特点1,环形结构:头节点的prev指向尾节点,尾节点的next指向头节点。2,双向性:每个
基于 Android 的个人健康管理 APP 设计与实现
赵谨言
论文 毕业设计 经验分享
标题:基于Android的个人健康管理APP设计与实现内容:1.摘要本文介绍了一款基于Android的个人健康管理APP的设计与实现。首先,文章介绍了该APP的背景和目的,即帮助用户更好地管理个人健康。接着,文章详细描述了该APP的设计和实现过程,包括需求分析、系统设计、数据库设计、界面设计和功能实现等方面。然后,文章介绍了该APP的测试和优化过程,包括功能测试、性能测试和用户体验测试等方面。最后
深圳云盟智慧科技公司智慧停车管理系统GetVideo存在SQL注入漏洞
缘梦未来
漏洞复现 科技 安全 web安全
免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本文信息时,必须严格遵循适用的法律法规及服务协议,自行承担一切风险与责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。0x0
手写完整文本文件压缩与解压程序(哈夫曼、java)
努力的小南
java 开发语言
一、前言:上一篇文章手写了一个简单的文本文件压缩与解压CSDN,主要目的是阐明原理,并没有为实际的应用做准备。如果你想做出一个可视化程序并且能转发给你的朋友使用,请看以下内容。由于在文章CSDN中已经阐明了利用哈夫曼树进行文本文件压缩的原理,在此就不再赘述,当然在程序中对某些方法有所修改,后续的实现当中会进行展示。二、需要解决的关键问题:(1)哈夫曼树无法在两个程序中使用(2)页面搭建使用了单选按
数据结构—栈与队列【顺序存储、链式存储、卡特兰数、优先级队列】
多多钟意你吖
阶段一:数据结构 数据结构 java 算法
个人网站:路遥叶子版权:本文由【路遥叶子】原创、在CSDN首发、需要转载请联系博主如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦想寻找共同成长的小伙伴,请点击【Java全栈开发社区】目录第三章:栈与队列(一)栈、队列和线性表有什么区别?(二)栈一、什么是栈?栈又有什么特性?二、栈都有那些术语操作?三、对于四个元素ABCD它们的出栈的序列有多少种呢?四、卡特兰数五、栈的抽象数据类型
【Java网络编程】IP网络协议与TCP、UDP网络传输层协议
xiaoli8748_软件开发
网络通信 网络 网络协议 java
1.1、IP协议当应用层的数据被封装后,想要将数据在网络上传输,数据究竟要被发往何处,又该如何精准的在网络上定位目标机器,此时起到关键作用的就是“IP协议”。IP协议的作用在于把各种数据包准确无误的传递给目标方,其中两个重要的条件是IP地址和MAC地址。其中IP地址就是所有主机在网络通信中的唯一标识,但由于IP地址是稀有资源,不可能每个主机都拥有一个IP地址,因此路由器里面会记录我们主机的MAC地
HTTPS keytool工具使用(高频)
笑锝没心没肺
Linux #网络安全 https 网络协议 http
keytool是Java平台的一个密钥和证书管理工具,它用于管理JavaKeystore(JKS)文件,这些文件用于存储密钥和证书。以下是keytool命令的一些常用选项及其详解:基本语法keytool[options]选项列表生成密钥库-genkeypair:生成密钥对。-alias:密钥库条目的别名。-keyalg:密钥算法,例如RSA或EC。-keysize:密钥大小(位数)。-validi
33.Java读写锁(认识读写锁、读写锁案例、锁降级、锁的演变)
我命由我12345
Java - 基础入门 java 开发语言 java-ee intellij-idea intellij idea spring boot 后端
一、锁概述1、悲观锁每个人进行操作时都进行上锁解锁,能解决并发问题,但不支持并发操作,只能逐个进行操作,效率低2、乐观锁通过版本号进行控制,谁先提交就先修改版本号,其他人因为版本号不相同就不能进行提交3、表锁对整个表加锁,不会发生死锁4、行锁对表中的单独一行加锁,会发生死锁5、读锁共享锁,可以有多个人读,会发生死锁6、写锁独占锁,只能有一个人写,会发生死锁二、读写锁1、基本介绍对共享资源有读和写的
Python操作MongoDB看这一篇就够了
Python3.7
Python进阶 python
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python3下MongoDB的存储操作。1.准备工作在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库。2.连接MongoDB连接MongoDB
【Java用法】Java设计模式之(三)原型模式(Prototype Pattern)
No8g攻城狮
Java设计模式 设计模式 java 后端
目录一、原型模式简介1.1、原型模式简介1.2、原型模式角色1.3、原型模式优缺点1.4、原型模式使用场景1.5、浅拷贝与深拷贝二、原型模式实现2.1代码客户端2.2浅拷贝代码2.3深拷贝代码三、原码分析一、原型模式简介1.1、原型模式简介原型模式使用原型实例指定创建对象的种类,并且通过拷贝原型对象创建新的对象。Prototype模式提供了一个通过已存在对象进行新对象创建的接口(clone),cl
Spring Boot 框架整体启动流程详解
阿提说说
Spring Boot 3.x 精讲 java spring spring boot 3
基于SpringBoot版本:3.1Java:17SpringBoot的入口即为xxApplication类的main方法:@SpringBootApplicationpublicclassSpringBootDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringBootDemoApplicat
java 流水线模式_流水线设计模式实现
珠玉琳琅
java 流水线模式
这是关于管道实现的设计问题。以下是我的天真实施。流水线设计模式实现接口在管道的各个步骤/阶段:在流水线的步骤/阶段的publicinterfaceStep{publicUexecute(Tinput);}具体实现:publicclassStepOneimplementsStep{@OverridepublicIntegerexecute(Integerinput){returninput+100;
springboot毕设 会议室管理系统 程序+论文
奉玄学姐_毕设
spring boot 课程设计 后端
本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和企业规模的日益扩大,会议室作为企业日常运营中不可或缺的沟通与合作场所,其管理效率直接影响到企业的运作效率和团队协作质量。传统的人工管理方式存在诸多弊端,如会议室预约冲突、设备借用不便、会议签到混乱等问题,不仅浪费了大量时间和人力资源,还可能导致会议延期或
全网最详细Gradio教程系列5——Gradio Client: javascript
龙焰智能
Gradio全解教程 javascript gradio client playcode.co npm cdn node.js
全网最详细Gradio教程系列5——GradioClient:javascript前言本篇摘要5.GradioClient的三种使用方式5.2使用GradioJavaScriptClient5.2.1安装1.npm方式:node.js2.CDN方式3.在线运行环境:PLAYCODE5.2.2连接到Gradio程序1.通过URL或SpaceID连接2.辅助:duplicate()和hf_token5
信息流广告预估技术在美团外卖的实践 思维导图-java架构
用心去追梦
java 架构 开发语言
创建一个关于“信息流广告预估技术在美团外卖的实践”的思维导图,并且专注于Java架构下的实现,可以按照以下结构来组织内容。这个思维导图将涵盖从数据收集、特征工程、模型选择与训练、系统架构设计到性能优化和效果评估的关键领域。思维导图结构1.项目背景美团外卖平台简介用户群体与市场定位信息流广告的意义提升用户体验增加广告收益2.用户及上下文数据收集数据来源用户行为(点击、浏览、下单等)广告主提供的创意素
基于多模态信息抽取的菜品知识图谱构建 思维导图-java架构
用心去追梦
java 架构 开发语言
构建一个基于多模态信息抽取的菜品知识图谱,特别是在Java架构下的实现,可以按照以下结构来组织思维导图的内容。这个思维导图将帮助理解从数据获取、处理到知识图谱构建的关键步骤,并且涵盖技术选型和系统设计。思维导图结构1.项目背景知识图谱的意义提升搜索体验推荐系统优化菜品知识图谱的目标食材关联菜系分类健康饮食建议2.多模态数据收集文本数据源美食博客和论坛配方网站图像数据源社交媒体图片餐厅菜单照片视频数
分布式因果推断在美团履约平台的探索与实践 思维导图-java架构
用心去追梦
java 架构 开发语言
为了创建一个关于“分布式因果推断在美团履约平台的探索与实践”的思维导图,并且专注于Java架构下的实现,我们可以将这个主题分解为几个关键领域。这包括:项目背景、因果推断的基本概念、数据收集与预处理、分布式系统设计、算法选择与实现、性能优化策略、以及效果评估与迭代。以下是这个主题的思维导图结构建议:思维导图结构1.项目背景美团履约平台简介平台业务流程(如外卖配送、闪购等)履约效率的重要性分布式因果推
大前端|如何突破动态化容器的天花板? 思维导图-java架构
用心去追梦
前端 java 架构
突破动态化容器的天花板是现代Web开发和移动应用开发中一个重要的挑战,尤其是在大前端(包括Web端和移动端)领域。动态化容器允许内容在不同设备、屏幕尺寸和网络条件下自适应地显示。为了帮助理解如何克服这一挑战,我们可以构建一个思维导图,该思维导图从Java架构师的角度出发,涵盖了关键技术点和策略。突破动态化容器的天花板│├───概述│├───定义与重要性││└───动态化容器的意义及其对用户体验的影
美团大规模 KV 存储挑战与架构实践 思维导图-java架构
用心去追梦
架构 java 开发语言
美团作为一家大型互联网公司,其业务系统面临着处理海量数据和高并发访问的需求。特别是对于KV(键值)存储系统来说,它需要支持快速读写、高效的数据检索以及良好的可扩展性。以下是一个关于美团大规模KV存储挑战与架构实践的思维导图结构,旨在展示如何应对这些挑战并实现高性能的KV存储系统。美团大规模KV存储挑战与架构实践│├───挑战│├───高并发读写││└───大量用户同时进行订单创建、查询等操作。│├
spring boot源码解析之SpringApplication启动流程
crayon-shin-chan
# spring-boot surprise spring java spring boot linux python
1.启动入口我们一般的启动SpringBoot应用方式为:@SpringBootApplicationpublicclassMyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(MyApplication.class,args);}}这里使用静态方法启动,传入参数为启动类、命令行参数实际此处使用的是以下方法:p
复杂查询导致clickhouse宕机
null.equals()
数据库
背景最近在研究clickhouse,发现了不少坑,有些坑是官方的无法解决,有些是配置的问题。配置问题及优化的问题就需要我们不断的调整配置以及优化sql。优化sql最主要是理解clickhouse是如何查询的,我们才能找到瓶颈点,找到优化方法。问题在8G内存4核CPU的机器上,单节点的默认配置的clickhouse,保存数据8000W+,一个复杂的多表关联的查询,每次查询到98%的时候,clickh
Nginx负载均衡
510888780
nginx 应用服务器
Nginx负载均衡一些基础知识:
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比
RedHat 6.4 安装 rabbitmq
bylijinnan
erlang rabbitmq redhat
在 linux 下安装软件就是折腾,首先是测试机不能上外网要找运维开通,开通后发现测试机的 yum 不能使用于是又要配置 yum 源,最后安装 rabbitmq 时也尝试了两种方法最后才安装成功
机器版本:
[root@redhat1 rabbitmq]# lsb_release
LSB Version: :base-4.0-amd64:base-4.0-noarch:core
FilenameUtils工具类
eksliang
FilenameUtils common-io
转载请出自出处:http://eksliang.iteye.com/blog/2217081 一、概述
这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开发中对文件的操作,几乎都可以在这个框架里面找到。 非常的好用。
xml文件解析SAX
不懂事的小屁孩
xml
xml文件解析:xml文件解析有四种方式,
1.DOM生成和解析XML文档(SAX是基于事件流的解析)
2.SAX生成和解析XML文档(基于XML文档树结构的解析)
3.DOM4J生成和解析XML文档
4.JDOM生成和解析XML
本文章用第一种方法进行解析,使用android常用的DefaultHandler
import org.xml.sax.Attributes;
通过定时任务执行mysql的定期删除和新建分区,此处是按日分区
酷的飞上天空
mysql
使用python脚本作为命令脚本,linux的定时任务来每天定时执行
#!/usr/bin/python
# -*- coding: utf8 -*-
import pymysql
import datetime
import calendar
#要分区的表
table_name = 'my_table'
#连接数据库的信息
host,user,passwd,db =
如何搭建数据湖架构?听听专家的意见
蓝儿唯美
架构
Edo Interactive在几年前遇到一个大问题:公司使用交易数据来帮助零售商和餐馆进行个性化促销,但其数据仓库没有足够时间去处理所有的信用卡和借记卡交易数据
“我们要花费27小时来处理每日的数据量,”Edo主管基础设施和信息系统的高级副总裁Tim Garnto说道:“所以在2013年,我们放弃了现有的基于PostgreSQL的关系型数据库系统,使用了Hadoop集群作为公司的数
spring学习——控制反转与依赖注入
a-john
spring
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
用spool+unixshell生成文本文件的方法
aijuans
xshell
例如我们把scott.dept表生成文本文件的语句写成dept.sql,内容如下:
set pages 50000;
set lines 200;
set trims on;
set heading off;
spool /oracle_backup/log/test/dept.lst;
select deptno||','||dname||','||loc
1、基础--名词解析(OOA/OOD/OOP)
asia007
学习基础知识
OOA:Object-Oriented Analysis(面向对象分析方法)
是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)
浅谈java转成json编码格式技术
百合不是茶
json编码 java转成json编码
json编码;是一个轻量级的数据存储和传输的语言
在java中需要引入json相关的包,引包方式在工程的lib下就可以了
JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非
常适合于服务器与 JavaScript 之间的数据的交
web.xml之Spring配置(基于Spring+Struts+Ibatis)
bijian1013
java web.xml SSI spring配置
指定Spring配置文件位置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-dao-bean.xml,/WEB-INF/spring-resources.xml,
/WEB-INF/
Installing SonarQube(Fail to download libraries from server)
sunjing
Install Sonar
1. Download and unzip the SonarQube distribution
2. Starting the Web Server
The default port is "9000" and the context path is "/". These values can be changed in &l
【MongoDB学习笔记十一】Mongo副本集基本的增删查
bit1129
mongodb
一、创建复本集
假设mongod,mongo已经配置在系统路径变量上,启动三个命令行窗口,分别执行如下命令:
mongod --port 27017 --dbpath data1 --replSet rs0
mongod --port 27018 --dbpath data2 --replSet rs0
mongod --port 27019 -
Anychart图表系列二之执行Flash和HTML5渲染
白糖_
Flash
今天介绍Anychart的Flash和HTML5渲染功能
HTML5
Anychart从6.0第一个版本起,已经逐渐开始支持各种图的HTML5渲染效果了,也就是说即使你没有安装Flash插件,只要浏览器支持HTML5,也能看到Anychart的图形(不过这些是需要做一些配置的)。
这里要提醒下大家,Anychart6.0版本对HTML5的支持还不算很成熟,目前还处于
Laravel版本更新异常4.2.8-> 4.2.9 Declaration of ... CompilerEngine ... should be compa
bozch
laravel
昨天在为了把laravel升级到最新的版本,突然之间就出现了如下错误:
ErrorException thrown with message "Declaration of Illuminate\View\Engines\CompilerEngine::handleViewException() should be compatible with Illuminate\View\Eng
编程之美-NIM游戏分析-石头总数为奇数时如何保证先动手者必胜
bylijinnan
编程之美
import java.util.Arrays;
import java.util.Random;
public class Nim {
/**编程之美 NIM游戏分析
问题:
有N块石头和两个玩家A和B,玩家A先将石头随机分成若干堆,然后按照BABA...的顺序不断轮流取石头,
能将剩下的石头一次取光的玩家获胜,每次取石头时,每个玩家只能从若干堆石头中任选一堆,
lunce创建索引及简单查询
chengxuyuancsdn
查询 创建索引 lunce
import java.io.File;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Docume
[IT与投资]坚持独立自主的研究核心技术
comsci
it
和别人合作开发某项产品....如果互相之间的技术水平不同,那么这种合作很难进行,一般都会成为强者控制弱者的方法和手段.....
所以弱者,在遇到技术难题的时候,最好不要一开始就去寻求强者的帮助,因为在我们这颗星球上,生物都有一种控制其
flashback transaction闪回事务查询
daizj
oracle sql 闪回事务
闪回事务查询有别于闪回查询的特点有以下3个:
(1)其正常工作不但需要利用撤销数据,还需要事先启用最小补充日志。
(2)返回的结果不是以前的“旧”数据,而是能够将当前数据修改为以前的样子的撤销SQL(Undo SQL)语句。
(3)集中地在名为flashback_transaction_query表上查询,而不是在各个表上通过“as of”或“vers
Java I/O之FilenameFilter类列举出指定路径下某个扩展名的文件
游其是你
FilenameFilter
这是一个FilenameFilter类用法的例子,实现的列举出“c:\\folder“路径下所有以“.jpg”扩展名的文件。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
C语言学习五函数,函数的前置声明以及如何在软件开发中合理的设计函数来解决实际问题
dcj3sjt126com
c
# include <stdio.h>
int f(void) //括号中的void表示该函数不能接受数据,int表示返回的类型为int类型
{
return 10; //向主调函数返回10
}
void g(void) //函数名前面的void表示该函数没有返回值
{
//return 10; //error 与第8行行首的void相矛盾
}
in
今天在测试环境使用yum安装,遇到一个问题: Error: Cannot retrieve metalink for repository: epel. Pl
dcj3sjt126com
centos
今天在测试环境使用yum安装,遇到一个问题:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
处理很简单,修改文件“/etc/yum.repos.d/epel.repo”, 将baseurl的注释取消, mirrorlist注释掉。即可。
&n
单例模式
shuizhaosi888
单例模式
单例模式 懒汉式
public class RunMain {
/**
* 私有构造
*/
private RunMain() {
}
/**
* 内部类,用于占位,只有
*/
private static class SingletonRunMain {
priv
Spring Security(09)——Filter
234390216
Spring Security
Filter
目录
1.1 Filter顺序
1.2 添加Filter到FilterChain
1.3 DelegatingFilterProxy
1.4 FilterChainProxy
1.5
公司项目NODEJS实践0.1
逐行分析JS源代码
mongodb nginx ubuntu nodejs
一、前言
前端如何独立用nodeJs实现一个简单的注册、登录功能,是不是只用nodejs+sql就可以了?其实是可以实现,但离实际应用还有距离,那要怎么做才是实际可用的。
网上有很多nod
java.lang.Math
liuhaibo_ljf
java Math lang
System.out.println(Math.PI);
System.out.println(Math.abs(1.2));
System.out.println(Math.abs(1.2));
System.out.println(Math.abs(1));
System.out.println(Math.abs(111111111));
System.out.println(Mat
linux下时间同步
nonobaba
ntp
今天在linux下做hbase集群的时候,发现hmaster启动成功了,但是用hbase命令进入shell的时候报了一个错误 PleaseHoldException: Master is initializing,查看了日志,大致意思是说master和slave时间不同步,没办法,只好找一种手动同步一下,后来发现一共部署了10来台机器,手动同步偏差又比较大,所以还是从网上找现成的解决方
ZooKeeper3.4.6的集群部署
roadrunners
zookeeper 集群 部署
ZooKeeper是Apache的一个开源项目,在分布式服务中应用比较广泛。它主要用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步、集群管理、配置文件管理、同步锁、队列等。这里主要讲集群中ZooKeeper的部署。
1、准备工作
我们准备3台机器做ZooKeeper集群,分别在3台机器上创建ZooKeeper需要的目录。
数据存储目录
Java高效读取大文件
tomcat_oracle
java
读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法: Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path)); 这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致
微信支付api返回的xml转换为Map的方法
xu3508620
xml map 微信api
举例如下:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><