问题描述: 在一个大小为n的数组中,其中有一个数出现的次数超过n/2,求出这个数。...这题看似很简单,但是找到最优解不容易,一般情况我们首先想到最笨的方法,每选一个数,遍历一次数组,复杂度O(N^2),或者先排序再找那个数,复杂度一般为O(NlgN),或者用hash,时间复杂度O(N),...所以这些都不是最优解,我们先分析一下这个题目,设该数出现的次数为x,则x满足,n/2+1n;所以我们可以想到如果该数和其余的数全部相抵消的话,至少还剩1个,我们从前往后遍历,设key为第一个数...,key出现的次数为ntime,初始化为1,代表key出现了一次,从前往后,如果某个数不等于key,则他俩抵消,key的出现次数减一,如果等于key,则key的出现次数加1,如果key的出现次数变成了0...#include #include using namespace std; /*在大小为n的数组中寻找次数超过n/2的数*/ int find_data(vector
,那么两次出现的数异或后结果为0;如果一个数只出现一次,那么异或后结果为该数本身。...JZ39 数组中出现次数超过一半的数字 传送门 题目详情 代码1(暴力) int MoreThanHalfNum_Solution(vector& numbers) {...这样做的原因是,如果某个元素出现的次数超过数组长度的一半,那么它与其他元素出现次数的抵消会导致最终留下的候选元素就是出现次数超过一半的元素。...继续遍历数组,遇到的下一个元素是4。此时计数器变为3。 最终留下的候选元素是4,它出现的次数超过了数组长度的一半。...这就是摩尔投票法的原理:通过抵消的过程,最终留下的候选元素就是出现次数超过一半的元素。 今天就到这里啦!
int(n),n不是表示长度,不会影响存储,仅用于控制显示的宽度。浮点型float,4字节double,8字节double(m,d),m表示总长度,d表示小数位,超出四舍五入。...外键约束:用来和其他表建立联系的字段,是另一表的主键,可以重复可以为空,可以有多个外键。非空约束:不能为空。默认值约束:不指定值时使用默认值填充。...InnoDB默认存储引擎,支持ACID事务、外键和行锁。并发条件下要求数据一致性,适合更新比较频繁的场景。MyISAM不支持事务,不支持外键,只支持表锁。适用于读多写少且对事务要求不高的场景。...覆盖索引索引包含所有需要查询的字段,是常用的优化手段。对于非聚集索引,查询结果只包含索引字段或主键,可以避免回表做二次查询,提高效率。索引下推将服务层的工作下推到存储引擎层,减少回表次数。...何时需要水平分表单表数据量超过 1KW 时,B+树可能超过3层导致查询时IO次数过多性能下降。一般,单表数据量超过500W 需要考虑分表。如果预估数据量会超过500W,可以提前规划分表。
) 存放的是对应的行记录 1、InnoDB是通过B+Tree结构对主键创建索引,然后叶子节点中存储记录,如果没有主键,那么会选择唯一键,如果没有唯一键,那么会生成一个6位的row_id来作为主键 2、...如果创建索引的键是其他字段,那么在叶子节点中存储的是该记录的主键,然后在通过主键索引找到对应的记录 在name上建立索引 在name列上存放的是ID,然后通过ID去找到对应的key和数据 3.1 mysql...MyISAM 下面0X0022其实就是地址,显示根据我们的ID,找到我们的地址,然后通过地址去找到对应的表对应的数据 四、索引的分类 mysql索引的五种类型:主键索引、唯一索引、普通索引和全文索引、...通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力 主键索引: 主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键 唯一索引 索引列的所有值都只能出现一次...是 是 支持行锁 否 是 支持外键 否 是 支持 全文索引 是 是(5.6后支持) 使用操作类型 大量select 大量insert、delete、update 小结 写这篇文章的时候,小农的公司群消息不断
优先选择符合存储需要的最小的数据类型1 原因:列的字段越大,建立索引时所需要的空间也就越大,这样一页中所能存储的索引节点的数量也就越少也越少,在遍历时所需要的 IO 次数也就越多,索引的性能也就越差。...转为地址 插入数据前,先用 inet_aton 把 ip 地址转为整型,可以节省空间,显示数据时,使用 inet_ntoa 把整型的 ip 地址转为地址显示即可。...INT 0~4294967295 VARCHAR(N) 中的 N 代表的是字符数,而不是字节数,使用 UTF8 存储 255 个汉字 Varchar(255)=765 个字节。...限制每张表上的索引数量,建议单张表索引不超过 5 个 索引并不是越多越好!索引可以提高效率,同样可以降低效率。 索引可以增加查询效率,但同样也会降低插入和更新的效率,甚至有些情况下会降低查询效率。...索引 SET 规范 尽量避免使用外键约束 不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引 外键可用于保证数据的参照完整性,但建议在业务端实现 外键会影响父表和子表的写操作从而降低性能
表与表之间的关系 两张表中的数据之间的关系 多对一 :foreign key ,永远是在多的那张表中设置外键 多个学生都是同一个班级的,学生是多,班级是一 两张表:学生表和班级表,学生表关联班级表...一对一 :foreign key +unique,后出现的后一张表中的数据作为外键,并且要约束这个外键是唯一的 一个学生是一个客户,两张表:学生表和客户表 客户表作为外表,在学生表中设置外键 多对多...过滤组 select 需要显示的列 order by 排序 limit 前n条 3.3 多表查询 两张表连在一起:select * from emp,department; 连表查询:把两张表连在一起查...; 外连接: 左外连接:left join 永远显示全量的左表中的数据 select * from emp left join department on emp.dep_id = department.id...; 右外连接:right join 永远显示全量的右表中的数据 select * from emp right join department on emp.dep_id = department.id
),而后通过 A(BKey) 对 A(AKey)的依赖,传递依赖于 A(Akey);三种关系(1:1,1:N,N:M)都含有外键,都很可能发生违反 3NF 的情况。...2.3、表的外键规范 一个表的某列与另一表有关联关系的时候,如果加得上的话,请加上外键约束。外键是很重要的,所以要特别强调。...适量建立外键 为了保证外键的一致性,数据库会增加一些开销,如果有确凿的并且是对性能影响到无法满足用户需求的证据,可以考虑不建外键。否则,还是应该建外键。...以缺省的方式建立外键 以缺省的方式建立外键(即用delete restrict方式),以达到保护数据一致性的目的;外键在保护数据一致方面非常有效。如果不建外键,数据库中容易出现垃圾数据,并且无人知晓。...1 from TB_SOURCE B where B.id = A.id); 17.3、竖向显示变横向显示 竖向显示变横向显示。
从使用的角度来说,还是推荐使用显示连接,这样可以更清楚的显示出多个表之间的连接关系和连接依赖的属性。 二、外连接 左外连接 1. 语法:A left join B 2....buffer,然后在InnerLoop表(内部表)中每次循环都直接匹配这10行数据,这样内层循环只需要10次,对内部表的扫描减少了9/10,所以BNLJ算法就能够显著减少内层循环表扫描的次数。...这里可以一次就是很多行A的数据与B的数据进行比较,而且是在内存中进行比较,速度更加快了。 影响因素 这里BNLJ算法总的扫描行数是由外层循环的数据量N,和分块数量K还有内层循环的数据量M决定的。...其中分块数量K与外层循环的数据量N又是息息相关的,我们可以表示为λN,其中λ取值为(0~1)。则总扫描次数C=N+λNM。...INLJ内层循环读取的是索引,可以减少内存循环的次数,提高join效率,但是也有缺点的,就是如果扫描的索引是非聚簇索引,并且需要访问非索引的数据,会产生一个回表读取数据的操作,这就多了一次随机的I/O操作
1、Manage_FunListCol(列表用字段) 字段名 中文名 类型 大小 默认值 说明 FunctionID 节点ID int 4 1 外键,关联节点 ColumnID 字段ID int 4 1...2、Manage_FunFormCol(表单用字段) 字段名 中文名 类型 大小 默认值 说明 FunctionID 节点ID int 4 1 外键,关联节点 ColumnID 字段ID int 4 1...外键,关联字段 Sort 排序 int 4 1 同一节点下的排序 ColHelp 提示信息 nvarchar 100 _ 出现在控件旁的提示信息,比如“用户名必须4-20个字符” HelpStation...3、Manage_FunFindCol(查询用字段) 字段名 中文名 类型 大小 默认值 说明 FunctionID 节点ID int 4 1 外键,关联节点 ColumnID 字段ID int 4 1...外键,关联字段 Sort 排序 int 4 1 同一节点下的排序 FindKindID 查询方式 int 4 1 外键,查询方式 DefaultValue 默认值 nvarchar 50 _ 第一次显示查询的时候的字段的默认查询关键字
但在实际开发中,查询的频率要远远高于增删改的操作,所以这是利大于弊 索引的使用: //查看索引 show index from 表名; //创建索引 //对于非主键、非唯一约束、非外键的字段,可以创建普通索引...中序遍历是连续范围的数据 是有序的,可以进行范围查询,如果是一个比较平衡的二叉树搜索树 遍历速度O(logN) 最坏情况下变成一个链表,就会变成O(N)速度 AVL树 是一颗严格的二叉搜索树,左右子树高度不能超过...,这会让树的高度变得非常高,树的高度每加一层,比较次数就会增加一次,由于数据都是保存在硬盘中,就会多要一次硬盘IO操作了,它查询的效率就会变得慢,所以并不适合大规模的数据 因此就引入了B树,它是一个N...B+树的非叶子节点都存储的数据比较小,所有可以存储在内存中,进一步减小硬盘IO的次数 特性 B树 B+树 数据存储位置 数据存储在所有节点(包括内部节点) 数据只存储在叶子节点 内部节点 存储键和值 仅存储键...; 因此需要遍历俩次B+树,第一次找到主键Id,再在主键Id的B+树找到对应的值; 总结: 没有索引的情况下,MySQL 只能通过全表扫描来查找数据,效率较低,尤其在表的数据量较大时。
在 SELECT, UPDATE, DELETE语句中的WHERE从句中的常出现的列 在 ORDER BY, GROUP BY, DISTINCT中的字段 多表JOIN的关联列 建立索引的顺序?...覆盖索引:包含了所有查询字段的索引 避免Innodb表进行索引的二次查找 可以把随机IO变为顺序IO加快查询效率 尽量避免使用外键 外键是用于保证数据的参照完整性,但建议在业务端实现。...MySQL外键会建立索引 不建议使用外键约束 表与表之间的关联键建立索引是必须的 外键会影响父表和子表的写操作而降低性能(检查约束导致的) 字段设计规范 优先选择符合存储需要的最小的数据类型 将字符串转化为数字类型存储...非负的用无符号整形 VARCHAR(N)的N代表是字符数,不是字节数,使用UTF-8存储汉字 VARCHAR(255)=765个字节 过大的长度会消耗更多的内存 避免使用 TEXT、 BLOB数据类型...(joinbuffersize) 会产生临时表,影响查询效率 MySQL最多允许关联61个表,建议不超过5个 减少同数据库的交互次数 数据库更适合处理批量操作 合并多个操作,可以提高处理效率 使用 IN
一 、ORM 查询性能 ① 普通查询 #for循环10次发送10次数据库查询请求 obj_list=models.Articles.objects.all() for row in obj_list...: print(row.name) 这种查询方式第一次发送 查询请求每for循环一次也会发送查询请求 ② select_related() 结果为对象 注意query_set类型的对象...查询时主动完成连表形成一张大表,for循环时不用额外发请求; 试用场景: 节省硬盘空间,数据量少时候适用相当于做了一次数据库查询; obj_list=models.Articles.objects.all...category') for row in obj_list: print(row.category.name) ③ prefetch_related() 做连表操作依然会影响查询性能,所以出现...prefetch_related; prefetch_related:不做连表,多次单表查询外键表 ,去重之后显示, 2次单表查询(有几个外键做几次1+N次单表查询) 适用场景:效率高,数据量大的时候适用
图4.19 我们发现进程ID为10704的“top”进程被加亮了,top进程就是视图第二行显示的唯一的运行态(running)的那个进程,可以通过按“y”键关闭或打开运行态进程的加亮效果。...-a:显示活跃和非活跃内存。 -f:显示从系统启动至今的fork进程数量。 -m:显示/proc/slabinfo。 -n:只在开始时显示一次各字段名称。...-s:显示内存相关统计信息及多种系统活动数量。 delay:刷新时间间隔。如果不指定,则只显示一条结果。 count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷次。...当这个值超过CPU个数时,就会出现CPU瓶颈 b 置于等待队列(等待资源,等待输入/输出)的内核线程数目 Memory(内存) swpd 正在使用的虚拟内存大小,单位为k free 空闲内存大小...这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈 ③ 常见问题处理 CPU瓶颈判断和解决办法。 (1)如果r经常大于4,且id经常小于40,则表示CPU的负荷很严重。
7-3 阅览室 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。...书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。...注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。...每天的纪录由若干次借阅操作组成,每次操作占一行,格式为: 书号([1, 1000]内的整数) 键值(S或E) 发生时间(hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数) 每一天的纪录保证按时间递增的顺序给出...输出格式: 对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 题目分析 题目假设很重要,数组非空,且一定存在存在多数的元素。...解法 1: 哈希表统计次数 借助哈希表,哈希表的键是数字,值是数字出现的次数。...整体流程如下: 遍历数组,统计数字和出现次数 遍历哈希表,返回出现次数超过长度一半的数字 注意,这里要使用 ES6 的 Map,不要使用 json 对象。...哈希表存储次数,空间复杂度是 O(N)。 解法 2(推荐):摩尔投票算法 题目说了:只可能有 1 个数字的出现次数超过数组长度的一半。也就是说这个数字的出现总数比其他数字的出现次数和还要多。...= 0 且 result = 当前元素,times 加 1 遍历完成后,result 的值就是数组中出现次数超过一半的数字了。
显示数据时,使用inet_ntoa把整型的ip地址转为地址显示即可。...INT 0~4294967295 VARCHAR(N)中的N代表的是字符数,而不是字节数 使用UTF8存储255个汉字 Varchar(255)=765个字节。...索引设计规范 限制每张表上的索引数量,建议单张不超过5个 禁止给表中的每一列都建立单独的索引 每个Innoodb表必须有个主键 常见索引列建议 1、出现在SELECT、UPDATE、DELETE...索引set规范 尽量避免使用外键约束 1、不建议使用外键约束(foreign key),但一定要在表与表之间的关联键上建立索引; 2、外键可用于保证数据的参照完整性,但建议在业务端实现; 3、外键会影响父表和子表的写操作从而降低性能...10、减少同数据库的交互次数 数据库更适合处理批量操作 合并多个相同的操作到一起,可以提高处理效率 11、对应同一列进行or判断时,使用in代替or in的值不要超过500个in操作可以更有效的利用索引
type所显示的是查询使用了哪种类型,type包含的类型包括如下图所示的几种: system 表只有一行记录(等于系统表),这是const类型的特列,平时不会出现,这个也可以忽略不计 const 表示通过索引一次就找到了...中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。...外键创建失败的几种原因 外键的字段与关联的字段的类型不匹配(包括编码格式的不匹配) 外键的名字是一个已经存在的键值,要保证名字的唯一 mysql引擎引起的外键创建不能保存或者不能发挥作用的情况,mysql...一般的默认引擎是myisam,而myisam是不能创建外键的。...语句创建外键时,create 或者 alter语法错误 8.
5.4、字符类型 char(size) : 定长字符,0 - 255字节,size 指 N 个字符数,若插入字符数超过设定长度,会被截取并警告。 ...设计从表可以有两种方案: 在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束; 给t_card表的主键添加外键约束(相对t_user表),即t_card表的主键也是外键。...例如再创建一张表t_stu_tea表,给出两个外键,一个相对t_stu表的外键,另一个相对t_teacher表的外键。...既然出现了笛卡尔积现象,我们就要避免笛卡尔积现象,避免笛卡尔积现象的措施就是增加条件进行过滤,但是避免了笛卡尔积你现象,会减少记录匹配的次数吗?...答案是不会,次数还是两张表条数的乘积,只不过显示的是有效的记录数。
语法格式:db.COLLECTION_NAME.totalIndexSize([detail](可选参数)) 参数解释:detail可选参数,传入除0或false外的任意数据,那么会显示该集合中每个索引的大小及集合中索引的总大小...在查询文档时,在查询条件中包含一个交叉索引键或者在一次查询中使用多个交叉索引键作为查询条件都会触发交叉索引。 给集合中多个属性创建索引,查询时这些属性中全部或一部分作为条件。...唯一索引 (unique index) 唯一索引会保证索引对应的键不会出现相同的值,比如_id索引就是唯一索引 语法格式: db.COLLECTION_NAME.createIndex({索引键名:排序规则...,那可以这样写: db.stu.find({"name":"kaka"}, {"_id":0, "age":1}) 注意到上面的语句,我们除了”age”:1外,还加了”_id”:0,因为默认情况下,_id...反之:使用索引的属性一定查询次数远远高于增加、删除、修改次数。 内存使用 由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。
,可以用作性能测试 # 如果做性能测试, 可以每执行一次, 往日志里面输出 “.” , 这样日志中的字节数就是实际的性能测试运行的次数, 还可以看见实时速率. tail -f xxx.log | pv ...abc开头的行 grep -n “^abc” 111.txt # 同时列出该词语出现在文章的第几行 grep 'xxx' -n xxx.log # 计算一下该字串出现的次数 grep 'xxx' ...而大写的 R 键可以将当前的排序倒转 列名 含义 PID 进程id PPID 父进程id RUSER Real user name UID 进程所有者的用户id USER 进程所有者的用户名 GROUP...CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。...这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。
领取专属 10元无门槛券
手把手带您无忧上云