当前位置: 首页 > news >正文

做网站的注意事项如何比较网站

做网站的注意事项,如何比较网站,怎样办自己的网站,近期新闻事件总结了本次面试遇到的值得整理记录的面试题。 目录 变量赋值判断 变量判断 Foreach使用 Mysql优化策略 合理的索引设计 查询优化 数据表结构设计 配置优化 合理使用事务 定期维护数据库 使用缓存 监控与性能分析 Redis主从复制 介绍 配置 示例 Redis 数据类型… 总结了本次面试遇到的值得整理记录的面试题。 目录 变量赋值判断 变量判断 Foreach使用 Mysql优化策略 合理的索引设计 查询优化 数据表结构设计 配置优化 合理使用事务 定期维护数据库 使用缓存 监控与性能分析 Redis主从复制 介绍 配置 示例 Redis 数据类型及应用 string 常用命令 应用场景 hash 常用命令 应用场景 list 常用命令 应用场景 set 常用命令 应用场景 zset 常用命令 应用场景 Mysql 事务级别 1.READ UNCOMMITTED 2.READ COMMITTED 3.REPEATABLE READ 4.SERIALIZABLE 大数据量统计 Mysql 锁 行级锁 表级锁 主键锁 间隙锁 借鉴文章 变量赋值判断 $a null; $b $a; $c false; $d $c; var_dump(isset($a), empty($b), isset($c), empty($d)); 结果 bool(false) bool(true) bool(true) bool(true) 变量判断 $a [0, 1, 2, 3]; $b [1, 2, 3, 4]; $a $b; print_r($a); 结果 Array ( [0] 0 [1] 1 [2] 2 [3] 3 ) Foreach使用 $arr [1, 2, 3, 4]; foreach ($arr as $V) {} foreach ($arr as $v) {} print_r($arr); 结果 Array ( [0] 1 [1] 2 [2] 3 [3] 4 ) Mysql优化策略 合理的索引设计 使用索引在常用的查询条件如WHERE、JOIN、ORDER BY 和 GROUP BY上创建索引。 复合索引对多个列的查询条件创建复合索引以减少索引的数量和提高查询性能。 避免过度索引过多的索引会增加写入操作的负担影响性能因此要合理选择索引。 查询优化 使用 EXPLAIN在运行查询之前使用 EXPLAIN 了解查询的执行计划帮助识别瓶颈。 避免 SELECT *选择必要的列减少返回的数据量提高查询效率。 使用 WHERE 条件尽量添加 WHERE 条件减少读取的数据量。 小表驱动大表 尽量使用小表去关联大表减少关联数据 数据表结构设计 合理的数据类型选择合适的数据类型可以减少存储空间并提高性能。例如尽量使用 INT 而不是 BIGINT以及选择最合适的字符串类型。 规范化与反规范化在设计表结构时根据实际情况考虑规范化消除冗余与反规范化提高查询效率。 分区表Partitioning对于大型表使用分区可以提高查询效率和管理性能。 大表进行拆分比如一个大表里面有很多的text,MEDIUMTEXTLONGTEXT这种可以抽取关键字段然后引用大表的主键ID方便报表需求开发。 配置优化 调整内存设置根据应用程序的需求适当调整 MySQL 的内存配置如 innodb_buffer_pool_size对于 InnoDB 存储引擎来提高性能。 设置查询缓存对于频繁查询的结果可以启用查询缓存虽然在新的 MySQL 版本中查询缓存已被弃用需谨慎使用。 监控和调优服务器参数定期监控 MySQL 的性能指标并根据需求调整配置如连接数、线程数等。 合理使用事务 控制事务的范围尽量将事务控制在最小的范围内减少对资源的占用。 使用适当的事务隔离级别根据需求选择合适的事务隔离级别以平衡性能与一致性。 IO和HTTP不要在同一个事务之内这么做是为了避免事务在回滚的时候某一操作不可逆。 定期维护数据库 分析和优化表定期运行 ANALYZE TABLE 和 OPTIMIZE TABLE 来更新统计信息和整理表的碎片。 清理无用数据定期删除或归档旧数据保持数据库的有效性和性能。 使用缓存 应用层缓存使用 Redis 或 Memcached 等缓存系统来减轻数据库的负担提高响应速度。 数据缓存将频繁访问的数据缓存在内存中减少对数据库的直接查询。 监控与性能分析 使用监控工具借助如 MySQL Enterprise Monitor、Percona Toolkit 等工具监控数据库性能。 慢查询日志启用慢查询日志以识别性能瓶颈并对相关查询进行优化。 Redis主从复制 介绍 Redis主从复制是一个多Redis实例进行数据同步的过程其中一个实例是主实例Master其他实例是从实例Slave。主实例负责处理命令请求而从实例则 periodically 地从主实例拉取数据副本。 配置 要配置Redis主从复制需要在从实例的配置文件中设置 slaveof 指令指向主实例的IP和端口。 例如假设主实例运行在IP 192.168.1.100 的6379端口上可以在从实例的配置文件中添加如下行 slaveof 192.168.1.100 6379 或者你也可以在从实例启动时通过命令行参数设置 redis-server --slaveof 192.168.1.100 6379 当配置生效后从实例会连接到主实例并开始接收数据。如果主实例发生故障从实例可以配置为自动进行故障转移这需要设置 slave-serve-stale-data 为 yes 并启用 slave-read-only 选项。 示例 以下是一个简单的例子展示如何在Redis配置文件中启用主从复制 # 主实例的配置文件无需更改# 从实例的配置文件slaveof 192.168.1.100 6379slave-serve-stale-data yesslave-read-only yes 记得在修改配置后重启Redis实例以使配置生效。 Redis 数据类型及应用 string 常用命令 除了get、set、incr、decr mget等操作外Redis还提供了下面一些操作 获取字符串长度 往字符串append内容 设置和获取字符串的某一段内容 设置及获取字符串的某一位bit 批量设置一系列字符串的内容 应用场景 String是最常用的一种数据类型普通的key/value存储都可以归为此类value其实不仅是String 也可以是数字比如想知道什么时候封锁一个IP地址(访问超过几次)。INCRBY命令让这些变得很容易通过原子递增保持计数。 hash 常用命令 hget,hset,hgetall 等。 应用场景 比如我们要存储一个用户信息对象数据包含以下信息 用户ID为查找的key 存储的value用户对象包含姓名name年龄age生日birthday 等信息 list 常用命令 lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等。 应用场景 可以轻松地实现最新消息排行等功能。 List的另一个应用就是消息队列可以利用Lists的PUSH操作将任务存在List中然后工作线程再用POP操作将任务取出进行执行。 set 常用命令 sadd,srem,spop,sdiff ,smembers,sunion 等。 应用场景 Redis set对外提供的功能与list类似是一个列表的功能特殊之处在于set是可以自动排重的。set提供了判断某个成员是否在一个set集合内的重要接口这个也是list所不能提供的。 比如在微博应用中每个人的好友存在一个集合set中这样求两个人的共同好友的操作可能就只需要用求交集命令即可。 Redis还为集合提供了求交集、并集、差集等操作 zset 常用命令 zadd,zrange,zrem,zcard等 应用场景 以某个条件为权重比如按顶的次数排序. ZREVRANGE命令可以用来按照得分来获取前100名的用户ZRANK可以用来获取用户排名非常直接而且操作容易。 Redis sorted set的使用场景与set类似区别是set不是自动有序的而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序并且是插入有序的即自动排序。 比如:全班同学成绩value可以是同学的学号而score就可以是其考试得分这样数据插入集合的就已经进行了天然的排序。 Mysql 事务级别 在 MySQL中事务的隔离级别有以下 4 种 读未提交READ UNCOMMITTED 读已提交READ COMMITTED 可重复读REPEATABLE READ 序列化SERIALIZABLE MySQL 默认的事务隔离级别是可重复读这4种隔离级别的说明如下。 1.READ UNCOMMITTED 读未提交也叫未提交读该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据而未提交的数据可能会发生回滚因此把该级别读取到的数据称之为脏数据把这个问题称之为脏读。 2.READ COMMITTED 读已提交也叫提交读该隔离级别的事务能读取到已经提交事务的数据因此它不会有脏读问题。但由于在事务的执行中可以读取到其他事务提交的结果所以在不同时间的相同 SQL查询中可能会得到不同的结果这种现象叫做不可重复读。 3.REPEATABLE READ 可重复读是MySQL的默认事务隔离级别它能确保同一事务多次查询的结果一致。但也会有新的问题比如此级别的事务正在执行时另一个事务成功的插入了某条数据但因为它每次查询的结果都是一样的所以会导致查询不到这条数据自己重复插入时又失败因为唯一约束的原因。明明在事务中查询不到这条信息但就是插入不进去这就叫幻读 Phantom Read。 4.SERIALIZABLE 序列化事务最高隔离级别它会强制事务排序使之不会发生冲突从而解决了脏读、不可重复读和幻读问题但因为执行效率低所以真正使用的场景并不多。 大数据量统计 一亿条订单数据属于1000个商户取出订单量最多的前10家商户 如果直接使用一条sql来查出来 无疑是非常慢并且损耗系统性能的 设置数据库可能会崩溃。 可以分为两步来执行。 下面介绍实现思路 首先数据表增加字段 在订单表中增加一个是否处理的标识 在商户表中增加一个订单量字段用来存储该商户的下单量 第一步分批次的每次拿一定订单数据统计后更新相应商户下单量并标识订单已被处理最后把所有现有订单处理统计完成。 第二步在下单时维护一个商户下单量字段 这样最后统计商户订单量前10只需要 select id,name, order_num from member order by order_num desc limit 10; 即可达到效果。 Mysql 锁 行级锁 表级锁 主键锁 主键锁是为了保护表中具体的一条记录当对表中的一条记录进行更新UPDATE、删除DELETE或者插入INSERT操作时MySQL会自动对这条记录加锁 间隙锁 当使用范围当条件进行修改时会把范围中的符合条件的数据条数进行锁定还会对一部分可能会修改的数据进行锁定这部分就是间隙锁。 借鉴文章 MySQL常见优化策略_mysql优化策略-CSDN博客
http://www.hkea.cn/news/14552771/

相关文章:

  • 在线制作图片动画效果seo案例分析方案
  • 合肥seo网站多少钱广州抖音seo公司
  • 龙华建设局网站企业网站开发研究现状
  • 一个备案号多个网站德阳响应式网站建设
  • 昆山建设工程招标网站网站已经开发怎样用微信实现手机网站开发
  • 网站项目在哪接dw网页制作教程图片主页子页
  • 椒江建设局网站网站如何做淘宝联盟推广
  • 网站做下CDN防护网站建设验收模板
  • 网站推广总结网站版权符号代码
  • 支付商城网站制作上海做响应式网站的公司
  • 织梦网站导航如何删除怎么做网站免费优化
  • 公司如何做网站推广线下推广方法及策略
  • 免费建设网站怎么样新闻型网站建设
  • 怎么和网站合作推广哪个网站可以改字体
  • 做淘宝客的网站株洲微豆网络科技有限公司网页设计
  • 做360网站优化快速株洲网站制作公司
  • 站内seo的技巧免费ppt模板下载不用钱的
  • 做宠物食品的网站南山区网站建设
  • 专门看网站的浏览器wordpress的标签设置主页
  • iis配置网站无法访问北京网站开发人员
  • 360网站名片怎么做前端seo搜索引擎优化
  • 凡科建站的优势html网站地图生成
  • 永久免费手机网站建设的好处小说网站分页关键字怎么做
  • 商城网站开发模板金华网站建设明细报价表
  • 微网站教程丝绸之路网站建设
  • 手机做任务的网站有哪些如何在vps上建设网站
  • 建网站找哪家好wordpress 负载能力
  • 网站设计中的js是什么推广普通话的标语
  • 网站 编码文档网站备案 写共享可以吗
  • 在哪网站建设西湖区外贸网站建设