怎么在百度提交自己的网站兖州网站开发
怎么在百度提交自己的网站,兖州网站开发,哪些网站可以接生意做,网站怎么上传数据库【大长文】7大领域#xff0c;50道经典题目#xff0c;助你彻底搞定MySQL面试#xff01;
开发人员必备的9大MySQL索引和查询优化一般来说#xff0c;程序员的面试内容分为两部分#xff0c;一部分与编程相关#xff0c;另一部分则与数据库相关。而作为数据库中的主流for update 可以根据条件来完成行锁锁定并且 id 是有索引键的列如果 id 不是索引键那么InnoDB将完成表锁。29.你知道哪些优化锁的方法读写分离分段加锁减少锁持有的时间多个线程尽量以相同的顺序去获取资源尽可能让所有的数据检索都通过索引来完成合理设计索引尽可能减少基于范围的数据检索过滤条件不要将锁的粒度过于细化不然可能会出现线程的加锁和释放次数过多反而效率不如一次加一把大锁。五、事务相关30. 什么是事务?事务是一系列的操作他们要符合ACID特性。最常见的理解就是事务中的操作要么全部成功要么全部失败。31. ACID是什么ACID是数据库事务正确执行的四个基本要素的缩写。包含原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability。AAtomicity指的是原子。即要么全部成功要么全部失败不可能只执行一部分操作。CConsistency指的是一致性。即系统数据库总是从一个一致性的状态转移到另一个一致性的状态不会存在中间状态。IIsolation指的是隔离性。通常来说一个事务在完全提交之前对其他事务是不可见的。DDurability指的是持久性。一旦事务提交那么就永远是这样子了哪怕系统崩溃也不会影响结果。32.事务是如何通过日志来实现的在Innodb存储引擎中事务日志是通过redo和innodb的存储引擎日志缓冲Innodb log buffer来实现的。当开始一个事务的时候会记录该事务的lsn(log sequence number)号;当事务执行时会往InnoDB存储引擎的日志缓存里面插入事务日志当事务提交时必须将存储引擎的日志缓冲写入磁盘通过innodb_flush_log_at_trx_commit来控制也就是写数据前需要先写日志。这种方式称为“预写日志方式”innodb通过此方式来保证事务的完整性。也就意味着磁盘上存储的数据页和内存缓冲池上面的页是不同步的是先写入redo log然后写入data file因此是一种异步的方式。33. 同时有多个事务在进行会怎么样多事务的并发进行一般会造成以下几个问题更新丢失Lost Update当两个或多个事务选择同一行然后基于最初选定的值更新该行时由于每个事务都不知道其他事务的存在就会发生丢失更新问题最后的更新覆盖了由其他事务所做的更新脏读Dirty Reads一个事务正在对一条记录做修改在这个事务没有提交前 这条记录的数据就一直处于不确定状态这时另一个事务也来读取同一条记录如果不加控制第二个事务读取了这些脏数据并据此做进一步的处理就会产生未提交的数据依赖关系这种现象被形象地叫做脏读发现其读出的数据已经发生了改变、或某些记录已经被删除了这种现象就叫做“不可重复读”幻读Phantom Reads一个事务按相同的查询条件重新读取以前检索过的数据却发现其他事务插入了满足其查询条件的新数据这种现象就称为“幻读” 。34. MySQL的事务隔离级别有哪些?未提交读(READ UNCOMMITTED)。这个隔离级别下其他事务可以看到本事务没有提交的部分修改因此会造成脏读的问题(读取到了其他事务未提交的部分,而之后该事务进行了回滚)已提交读(READ COMMITTED)。其他事务只能读取到本事务已经提交的部分这个隔离级别有不可重复读的问题在同一个事务内的两次读取拿到的结果竟然不一样因为另外一个事务对数据进行了修改REPEATABLE READ(可重复读)。可重复读隔离级别解决了上面不可重复读的问题但是仍然有一个新问题就是幻读。当你读取id 10 的数据行时对涉及到的所有行加上了读锁此时例外一个事务新插入了一条id11的数据因为是新插入的所以不会触发上面的锁的排斥那么进行本事务进行下一次的查询时会发现有一条id11的数据而上次的查询操作并没有获取到再进行插入就会有主键冲突的问题SERIALIZABLE(可串行化)。这是最高的隔离级别可以解决上面提到的所有问题因为他强制将所以的操作串行执行这会导致并发性能极速下降因此也不是很常用。35. InnoDB使用的是哪种隔离级别InnoDB默认使用的是可重复读隔离级别。36.REPEATABLE READ隔离级别下 MVCC 如何工作SELECTInnoDB会根据以下条件检查每一行记录第一InnoDB 只查找版本早于当前事务版本的数据行这样可以确保事务读取的行要么是在开始事务之前已经存在要么是事务自身插入或者修改过的第二行的删除版本号要么未定义要么大于当前事务版本号这样可以确保事务读取到的行在事务开始之前未被删除。INSERTInnoDB为新插入的每一行保存当前系统版本号作为行版本号。DELETEInnoDB为删除的每一行保存当前系统版本号作为行删除标识。UPDATEInnoDB为插入的一行新记录保存当前系统版本号作为行版本号同时保存当前系统版本号到原来的行作为删除标识保存这两个版本号使大多数操作都不用加锁。它不足之处是每行记录都需要额外的存储空间需要做更多的行检查工作和一些额外的维护工作。37.InnoDB 如何开启手动提交事务InnoDB 默认是自动提交事务的每一次 SQL 操作非 select 操作都会自动提交一个事务如果要手动开启事务需要设置set autocommit0禁止自动提交事务相当于开启手动提交事务。38.在 InnoDB 中设置了 autocommit0添加一条信息之后没有手动执行提交操作请问这条信息可以被查到吗autocommit0 表示禁止自动事务提交在添加操作之后没有进行手动提交默认情况下其他连接客户端是查询不到此条新增数据的。六、表结构设计相关39. 为什么要尽量设定一个主键主键是数据库确保数据行在整张表唯一性的保障即使业务上本张表没有主键也建议添加一个自增长的ID列作为主键。设定了主键之后在后续的删改查的时候会更加快速以及确保操作数据范围安全。40. 主键使用自增ID还是UUID推荐使用自增ID不要使用UUID。因为在InnoDB存储引擎中主键索引是作为聚簇索引存在的。也就是说主键索引的B树叶子节点上存储了主键索引以及全部的数据按照顺序。如果主键索引是自增ID那么只需要不断向后排列即可如果是UUID由于到来的ID与原来的大小不确定会造成非常多的数据插入数据移动然后导致产生很多的内存碎片进而造成插入性能的下降。总之在数据量大一些的情况下,用自增ID性能会更好。41. 字段为什么要求定义为not null?MySQL官网这样介绍NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL columntakes one bit extra, rounded up to the nearest byte.也就是null值会占用更多的字节且会在程序中造成很多与预期不符的情况。七、优化相关42.explain出来的各种item的意义是什么select_type 。表示查询中每个select子句的类型type。表示MySQL在表中找到所需行的方式又称“访问类型”possible_keys 。指出MySQL能使用哪个索引在表中找到行查询涉及到的字段上若存在索引则该索引将被列出但不一定被查询使用key。显示MySQL在查询中实际使用的索引若没有使用索引显示为NULLkey_len。表示索引中使用的字节数可通过该列计算查询中使用的索引的长度ref。表示上述表的连接匹配条件即哪些列或常量被用于查找索引列上的值 Extra。包含不适合在其他列中显示但十分重要的额外信息。43.profile的意义以及使用场景有哪些Profile 用来分析 sql 性能的消耗分布情况。当用 explain 无法解决慢 SQL 的时候需要用profile 来对 sql 进行更细致的分析找出 sql 所花的时间大部分消耗在哪个部分确认 sql的性能瓶颈。44. 统计过慢查询吗?对慢查询都怎么优化过?慢查询的优化首先要搞明白慢的原因是什么。是查询条件没有命中索引是load了不需要的数据列还是数据量太大所以优化也是针对这三个方向来的首先分析语句看看是否load了额外的数据可能是查询了多余的行并且抛弃掉了可能是加载了许多结果中并不需要的列对语句进行分析以及重写分析语句的执行计划然后获得其使用索引的情况之后修改语句或者修改索引使得语句可以尽可能的命中索引如果对语句的优化已经无法进行可以考虑表中的数据量是否太大如果是的话可以进行横向或者纵向的分表。45.说一说你能想到的sql语句优化至少五种避免select *将需要查找的字段列出来使用连接join来代替子查询拆分大的delete或insert语句使用limit对查询结果的记录进行限定用 exists 代替 in 是一个好的选择用Where子句替换HAVING 子句因为HAVING 只会在检索出所有记录之后才对结果集进行过滤不要在 where 子句中的“”左边进行函数、算术运算或其他表达式运算否则系统将可能无法正确使用索引尽量避免在where 子句中对字段进行 null 值判断否则将导致引擎放弃使用索引而进行全表扫描尽量避免在 where 子句中使用 or 来连接条件否则将导致引擎放弃使用索引而进行全表扫描尽量避免在 where 子句中使用!或操作符否则将引擎放弃使用索引而进行全表扫描。46.说一说你能想到的表结构优化至少五种永远为每张表设置一个ID选择正确的存储引擎 ;使用可存下数据的最小的数据类型整型 date,time char,varchar blob使用简单的数据类型整型比字符处理开销更小因为字符串的比较更复杂。如int类型存储时间类型bigint类型转ip函数使用合理的字段属性长度固定长度的表会更快。使用enum、char而不是varchar尽可能使用not null定义字段(给空字段设置默认值)尽量少用text;给频繁使用和查询的字段建立合适的索引。八、其他47.数据三大范式是什么第一范式 1NF字段具有原子性不可再分。第二范式 2NF是在第一范式 1NF 的基础上建立起来的要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列 以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。第三范式 3NF必须先满足第二范式 2NF。简而言之 第三范式 3NF 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。所以第三范式具有如下特征1 每一列只有一个值2 每一行都能区分3 每一个表都不包含其他表已经包含的非主关键字信息。48.超大分页如何处理超大的分页一般从两个方向上来解决数据库层面这也是我们主要集中关注的(虽然收效没那么大)类似于select * from table where age 20 limit 1000000,10这种查询其实也是有可以优化的余地的。这条语句需要load1000000数据然后基本上全部丢弃只取10条当然比较慢。当时我们可以修改为select * from table where id in (select id from table where age 20 limit 1000000,10)。这样虽然也load了一百万的数据但是由于索引覆盖要查询的所有字段都在索引中所以速度会很快。同时如果ID连续的好我们还可以select * from table where id 1000000 limit 10效率也是不错的优化的可能性有许多种但是核心思想都一样就是减少load的数据。从需求的角度减少这种请求……主要是不做类似的需求直接跳转到几百万页之后的具体某一页只允许逐页查看或者按照给定的路线走这样可预测可缓存以及防止ID泄漏且连续被人恶意攻击。解决超大分页,其实主要是靠缓存可预测性的提前查到内容缓存至redis等k-V数据库中直接返回即可。49.MySQL数据库cpu飙升到500%的话该如何处理多实例的服务器先top查看是那一个进程占用CPU多show processeslist 查看线程是否有锁住查看慢查询找出执行时间长的sqlexplain分析sql是否走索引sql优化再查看是否缓存失效引起需要查看buffer命中率。50.什么是存储过程存储过程是一些预编译的SQL语句更加直白的理解存储过程可以说是一个记录集它是由一些T-SQL语句组成的代码块这些T-SQL语句代码像一个方法一样实现一些功能对单表或多表的增删改查然后再给这个代码块取一个名字在用到这个功能的时候调用他就行了存储过程是一个预编译的代码块执行效率比较高,一个存储过程替代大量T_SQL语句 可以降低网络通信量提高通信速率可以一定程度上确保数据安全在互联网项目中其实是不太推荐存储过程的比较出名的就是阿里的《Java开发手册》中禁止使用存储过程。在互联网项目中迭代太快项目的生命周期也比较短人员流动相比于传统的项目也更加频繁。在这样的情况下存储过程的管理确实是没有那么方便复用性也没有写在服务层那么好。学习资源如果你是也准备转行学习网络安全黑客或者正在学习这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你知识库由360智榜样学习中心独家打造出品旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力熟练掌握基础攻防到深度对抗。1、知识库价值深度 本知识库超越常规工具手册深入剖析攻击技术的底层原理与高级防御策略并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等提供了独到的技术视角和实战验证过的对抗方案。广度 面向企业安全建设的核心场景渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点是应对复杂攻防挑战的实用指南。实战性 知识库内容源于真实攻防对抗和大型演练实践通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。2、 部分核心内容展示360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。内容组织紧密结合攻防场景辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合是你学习过程中好帮手。1、网络安全意识2、Linux操作系统3、WEB架构基础与HTTP协议4、Web渗透测试5、渗透测试案例分享6、渗透测试实战技巧7、攻防对战实战8、CTF之MISC实战讲解3、适合学习的人群一、基础适配人群零基础转型者适合计算机零基础但愿意系统学习的人群资料覆盖从网络协议、操作系统到渗透测试的完整知识链开发/运维人员具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能实现职业方向拓展或者转行就业应届毕业生计算机相关专业学生可通过资料构建完整的网络安全知识体系缩短企业用人适应期二、能力提升适配1、技术爱好者适合对攻防技术有强烈兴趣希望掌握漏洞挖掘、渗透测试等实战技能的学习者2、安全从业者帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力3、合规需求者包含等保规范、安全策略制定等内容适合需要应对合规审计的企业人员因篇幅有限仅展示部分资料完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】