一、基础
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 并发编程:Java 线程池的介绍与使用
栗筝i
栗筝i 的 Java 技术栈 # Java 基础 栗筝i 的 Java 技术栈 Java基础 Java 并发 Java 线程池
大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第024篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同
2.Jmeter安装配置,核心目录详情,组件和作用域
XXX-17
Jmeter jmeter 软件测试 接口测试
一、Jmeter安装配置以及核心目录详情Jmeter基于java语言来开发,java需要jdk环境。1.安装jdk并且配置jdk的环境变量。2.jmeter只需要解压就可以使用了。3.在D:\apache-jmeter-5.5\bin目录下双击jmeter.bat文件就可以启动使用了backups:自动备份的目录bin:启动文件、配置文件(jmeter.bat是启动问题,jmeter.propti
前端入门:JavaScript基础介绍
虞锦雯
一、JavaScript介绍Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协
Java基础一
十一路客
java 开发语言
哔哩哔哩Java开发工程师面试该如()何准备?-知乎一.JavaOOP面试题(1)什么是B/S架构?什么是C/S架构Java都有那些开发平台?B/S(Browser/Server),浏览器/服务器程序C/S(Client/Server),客户端/服务端,桌面应用程序1、C/S和B/S各有优势,C/S在图形的表现能力上以及运行的速度上肯定是强于B/S模式的,不过缺点就是他需要运行专门的客户端,而且更
自定义布隆过滤器解决缓存穿透
暗金烂狗
缓存
什么是缓存穿透以及常见解决方案缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库,导致数据库压力提高,造成宕机。缓存穿透就是指用户访问那些在数据库和Redis中都不存在的数据,例如我们知道id采用自增策略,那么就不可能出现负数id,而如果不法分子使用负数id进行查询,那么这些请求都会穿过Redis直接向数据库发送请求,从而导致数据库压力骤增,导致数
Web开发详解
你可以自己看
前端
要做Web开发,就好像你在厨房里要做一顿丰盛的晚餐,从准备食材到最后上桌,整个过程得协调得当。Web开发的流程有前端、后端、数据库、API,以及其他的工具和技术来共同组成。别担心,听起来复杂,但我会给你讲得生动有趣,让你感受到Web开发的美妙。1.前端开发(Web开发的颜值担当)前端就是用户能直接看到和互动的部分,给人的第一印象尤为重要,简直就是网站的“面子工程”。1.1HTML-构建页面骨架HT
文件大小自动转换工具类
小卡车555
java
根据传入的文件大小,自动转换为B、KB、MB、GB、TBimportjava.text.DecimalFormat;publicclassFileSizeUtil{/***文件单位*/privatestaticfinalString[]units=newString[]{"B","KB","MB","GB","TB"};/***文件大小自动转换*@paramsize*@return*/public
【Java实战】使用自定义注解实现参数校验详解
.猫的树
【Java实战】系列 java 自定义注解 参数校验
文章目录前言一、Java注解简介二、启用注解校验1.启用注解2.注解@Valid和@Validated2.1@Valid级联校验2.2@Validated高级使用三、自定义注解1.统一异常处理2.编写注解2.1自定义校验2.2多参数校验2.3列表校验总结前言由于实际开发中遇到大量相同的条件参数验证,不想写重复代码及让代码看起来更加优雅简洁,所以决定使用自定义注解进行参数校验一、Java注解简介Ja
java常用校验注解
Bee.F
java java
1、值校验@NotNull注解被注解的元素必须不为空,一般用于数值类型的参数校验。@NotNull(message="用户编号不能为空")privateIntegeruserId;@NotBlank注解验证注解的元素值不为空(不为null、去除首位空格后长度为0),并且类型为String。@NotBlank(message="用户名称不能为空")privateStringuserName;@Not
PostgreSQL 与 MySQL:如何为你的项目选择合适的数据库?
陌北v1
数据库 postgresql mysql
在现代应用开发中,选择合适的数据库是影响项目成败的关键决策之一。PostgreSQL和MySQL是两种广泛使用的开源数据库,每种数据库都有其独特的优势和适用场景。本文将深入对比这两者的核心特性,帮助开发者理解在何种情况下现在适合的数据库。1.架构与标准支持PostgreSQL:被称为“最先进的开源数据库”,高度遵循SQL标准,支持更复杂的查询、子查询、窗口函数、递归查询等功能。提供全面的ACID(
Spring Cloud Alibaba的Java CRM客户关系管理系统源码
微服务技术分享
java CRM客户关系管理系统源码
ERP(EnterpriseResourcePlanning,企业资源计划)软件是一种集成的管理平台,它将企业的所有业务流程,包括采购、销售、库存、财务等,整合到一个统一的系统中。这种整合不仅提高了工作效率,还增强了数据的准确性和实时性。在当今快速发展的商业环境中,ERP软件已经成为企业不可或缺的工具。本文将详细介绍ERP软件的主要模块及其功能,帮助读者更好地理解ERP软件如何助力企业实现信息化管
JavaScript创建Object对象的方法
流落的小鬼
javascript 前端
JavaScript创建Object对象的方法1、使用new操作符后跟Object构造函数varobj=newObject()person.name='AAA'person.age=192、对象字面量varobj={name:'BBB',age:20}3、与newObject相同varobj={}person.name="CCC"person.age=21
JavaScript两个数组的交集 II
流落的小鬼
刷题记录:JavaScript两个数组的交集II给你两个整数数组nums1和nums2,请你以数组形式返回两数组的交集。输入:nums1=[1,2,2,1],nums2=[2,2]输出:[2,2]varintersect=function(nums1,nums2){varresult=[];vari=0,j=0;nums1.sort((a,b)=>a-b);nums2.sort((a,b)=>a-
[附源码]SSM计算机毕业设计游戏账号交易平台JAVA
计算机程序源码
java 游戏 mysql
项目运行环境配置:Jdk1.8+Tomcat7.0+Mysql+HBuilderX(Webstorm也行)+Eclispe(IntelliJIDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:SSM+mybatis+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.ID
月度总结 | 2022年03月 | 考研与就业的抉择 | 确定未来走大数据开发路线
「已注销」
个人总结 hadoop
一、时间线梳理3月3日,寻找到同专业的就业伙伴3月5日,着手准备Java八股文,决定先走Java后端路线3月8月,申请到了校图书馆的考研专座,决定暂时放弃就业,先准备考研,买了数学和408的资料书3月9日-3月13日,因疫情原因,宿舍区暂封,这段时间在准备考研,发现内容特别多3月13日-3月19日,大部分时间在刷Hadoop、Zookeeper、Kafka的视频,同时在准备实习的项目3月20日,退
Eclipse如何给main方法传值
马斯洛金字塔下的小灵猴儿
JAVA工程师相关 eclipse main方法传参
importjava.util.Arrays;/***这是一个测试类,用来研究main方法的传值问题*@authorHHB*/publicclassTest{/***这是类的主方法,可以用来接受用户的输入,并将输入数据保存到一个String类型的数组里*@paramargs*/publicstaticvoidmain(String[]args){System.out.println(Arrays.
为什么需要DDos高防服务器呢?
666IDCaaa
ddos 服务器 网络
在当今信息化快速发展的时代,网络安全问题显得尤为重要。DDoS攻击是一种耗尽系统资源的攻击方式,可以导致正常服务请求无法得到响应。这种攻击不仅影响用户体验,还可能导致企业声誉受损、经济损失以及客户流失等严重后果。因此,选择有效的DDoS高防服务对于保护网络安全至关重要。DDoS高防服务可以通过云端清洗集群、数据库监控牵引系统等技术进行有效的削弱。这些技术能够识别并过滤恶意流量,确保正常用户能够顺利
String存储原理
程序员阿鹏
Java面试八股文 java jvm 开发语言 eclipse intellij-idea 后端
1.是什么在Java中,String是一种特殊的类,它是不可变的并且存储在堆内存中。为了理解String的存储原理,我们需要分解几个关键概念:不可变性、堆内存、字符串常量池和垃圾回收机制。下面我将详细解释这些概念并举例说明。不可变性(Immutability)String类在Java中是不可变的,这意味着一旦创建了String对象,它的值就不能被修改。任何对String进行的修改操作,实际上都是创
JAVA常用校验注解
小卡车555
java
引入依赖org.springframeworkspring-boot-starter-validation2.6.13相关注解及使用说明注解描述@AssertFalse所注解的元素必须是Boolean类型,且值为false@AssertTrue所注解的元素必须是Boolean类型,且值为true@DecimalMin验证Number和String对象是否大于等于指定的值,支持小数@DecimalM
mysql查询慢排查_mysql慢查询排查优化
weixin_39970855
mysql查询慢排查
即时分析:showfullpercesslist;开启慢查询日志,分析日志记录:long_query_time=1log-slow-queries=/data/3306/slow.loglog_queries_not_using_indexes分割日志发送至邮箱加explain查看语句的具体执行方式,并定位在哪些字段加上索引,查看条件字段的唯一值selectcount(distinctcolumn
HBase(一)——HBase介绍
weixin_30595035
大数据 数据库 数据结构与算法
HBase介绍1、关系型数据库与非关系型数据库(1)关系型数据库关系型数据库最典型的数据机构是表,由二维表及其之间的联系所组成的一个数据组织优点:1、易于维护:都是使用表结构,格式一致2、使用方便:SQL语言通用,可用于复杂查询3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询缺点:1、读写性能比较差,尤其是海量数据的高效率读写2、固定的表结构,灵活度稍欠3、高并发读写需求,传统关
java 线程池 队列封装_java线程池(线程池组---分离任务队列和线程池)
爱打怪的小魔女
java 线程池 队列封装
线程池本质上所使用的逻辑模型仍然是我们熟悉的“生产者/消费者”模型。生产消费外部线程(生产者)--->任务消费者和生产者共享一个数据结构(缓存任务)PriorityQueue;生产者将任务添加到队列中,消费者从队列中取出数据;队列和线程池(线程池内部维护一个线程数组),完全耦合在一起,当任务特别多,队列就不断的膨胀,增多,拥堵;就向车子过洞子另外一头走不掉,我靠,长龙(世界最长堵车世界纪录在天朝2
基于springboot+vue的“考研资讯平台”程序设计实现【毕业论文,源码】
一枚务实的码农
毕业设计 毕设 考研 spring boot 毕业论文 系统源码
摘要随着现在网络的快速发展,网络的应用在各行各业当中它很快融入到了许多学校的眼球之中,他们利用网络来做这个电商的服务,随之就产生了“考研资讯平台”,这样就让学生考研资讯平台更加方便简单。对于本考研资讯平台的设计来说,它主要是采用java技术。在整个系统的设计当中它是应用mysql数据库来完成的,具体根据网上考研资讯平台的现状来进行开发的,具体根据学生需求实现网上考研资讯平台网络化的管理,各类信息有
在 Spring Boot 项目中连接 IBM AS/400 数据库——详细案例教程
箬敏伊儿
数据库 AS/400 spring boot 数据库 后端 database java
文章目录1.添加`jt400`依赖2.下载`jt400`驱动包依赖下载手动下载下载地址:手动下载JAR的步骤:3.配置application.properties或application.yml(1)`application.properties`(2)`application.yml`4.数据源配置类(可选)5.创建`JDBC`访问层6.测试连接7.启动项目总结在SpringBoot项目中连接I
String方法(JDK9)
凯哥学堂
声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。String方法(JDK9)构造器:String#String()无参数构造器,默认给的是一个””空字符串String#String(java.lang.String)给你一个char数组,它就帮你进行ABCD输出GBK中文简体+繁体字符集GB2312中文简体字
如果面试官问你CAS,你还这么答,可能就要回去等通知了
爱玛士
程序员 面试 Java java 面试 开发语言 程序员 架构
前言大家好,我是JAVA高级开发之路,一个总在为粉丝解决面试题的程序员。最近有几个粉丝说在面试面试中遇到了CAS的问题,连着几次面试都没有让面试官满意,区区CAS底层源码,怎能难倒咱们这届程序员们呢?都支棱起来,跟我一起来搞定CAS底层源码。什么是CASCAS的全称是Compare-And-Swap,它是CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原
HBase介绍
mingyu1016
数据库
概述HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是GoogleBigtable的开源实现,它利用HadoopHDFS作为其文件存储系统,利用HadoopMapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。HBase的表结构HBase以表的形式存储数据。表有行和列组成。列划分为
科普文:软件架构数据库系列之【MySQL的sql_mode参数】
-无-为-
软件架构 业务场景 MySQL 数据库 mysql sql sql_mode
概叙科普文:软件架构数据库系列之【MySQL解析器和优化器】-CSDN博客科普文:软件架构数据库系列之【MySQL查询优化器中的优化策略optimizer_switch】-CSDN博客科普文:软件架构数据库系列之【MySQL执行计划Extra梳理】-CSDN博客科普文:软件架构数据库系列之【MySQL控制查询优化器Hints】-CSDN博客从MySQL的解析器、优化器、执行计划、Hints、到最后
2024年最新Python面试简历模板,Python下载中国数据库大会(DTCC2024)PPT全集(3),字节跳动面试难吗
2401_84123188
2024年程序员学习 python 面试 数据库
收集整理了一份《2024年最新Python全套学习资料》免费送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来如果你需要这些资料,可以添加V无偿获取:hxbc188(备注666)正文frombs4im
Android MVVM 架构应用实现(2)
渊Y
程序员 android 架构
Repository类:实现BmobRepository类,作为HomeViewModel的数据提供方。BmobRepository类中有一个挂起函数getAllRecommendLibrary(libraryRecommendData:MutableLiveData)用来获取云数据库中的数据,函数的参数是LiveData,在获取数据后,利用setValue通知View展示数据。classBmob
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><