2024年Web前端最全数据库学习笔记——索引优化_cpu缓存脏页,2024年最新前端大厂技术面试题汇总

Vue

  • 什么是MVVM?

  • mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

  • 组件之间的传值?

  • Vue 双向绑定原理

  • 描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?

  • 虚拟 DOM 实现原理

  • Vue 中 key 值的作用?

  • Vue 的生命周期

  • Vue 组件间通信有哪些方式?

  • vue 中怎么重置 data?

  • 组件中写 name 选项有什么作用?

  • Vue 的 nextTick 的原理是什么?

  • Vuex 有哪几种属性?

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

insert into article(author_id,category_id,views,comments,title,content) values
(1,1,1,1,‘1’,‘1’),
(2,2,2,2,‘2’,‘2’),
(1,1,3,3,‘3’,‘3’);


**需求**:查询category\_id为1且comments大于1的情况下,views最多的article\_id


##### 双表优化


* 建表


	+ 商品类别表

create table class(
id int unsigned not null primary key auto_increment,
card int unsigned not null
);


	+ 图书表

create table book(
bookid int unsigned not null auto_increment primary key,
card int unsigned not null
);

 驱动表的概念,mysql中指定了连接条件时,满足查询条件的记录行数少的表为驱动表;如未指定查询条件,则扫描行数少的为驱动表。mysql优化器就是这么粗暴以小表驱动大表的方式来决定执行顺序的。


### 三、MySQL整体优化思路


#### 1 硬件相关优化


* 在 MySQL 整体的优化环节中,硬件相关的优化必不可少,因此首先来聊聊这一方面的优化策略:


##### 1.1 CPU 相关


* A.关闭 CPU 节能,设定为最大性能模式。  
 原因是:考虑到在高并发之前没有任何连接的情况,机器可能会处于节电模式,高并发场景来临时可能导致处理不过来新的请求。
* B.配置合理的 CPU 核数和选择合适的 CPU 主频。  
 原因是:  
 CPU 核数越多,支持的并发也越高;  
 CPU 主频越高,处理任务的速度越快。


##### 1.2 内存相关


* 内存对 MySQL 数据库影响是非常大的。InnoDB 使用 InnoDB buffer pool 缓存数据、索引等内容,从而加快访问速度。因此 MySQL 运行的物理机上,内存配置也是比较重要的。  
 在应用数据库实例前,应该预估活跃的数据大小,然后根据这个合理配置数据库服务器内存的大小。


##### 1.3 磁盘相关


* 对于 OLTP 的数据库,一般场景是 IO 密集型的操作。因此,对于这类情况,应该把更多的注意力放在提高磁盘 IO 上。  
 对于磁盘相关的优化,这里聊聊几种方法:  
 A. 使用 SSD(固态硬盘) 或者 Pcle SSD 设备;  
 为什么 SSD 比传统机械硬盘快?  
 传统的机械硬盘需要耗费长时间的磁头旋转和定位来查找数据。  
 而 SSD 其内部是由闪存组成的。闪存延迟低、功耗低。  
 因此 SSD 比传统机械硬盘更快。


#### 2 系统层面优化


* 当硬件层优化的差不多了之后,系统层部分配置也应该去做一些优化。这里就来介绍部分系统层面的优化方法:


##### 2.1 调整 I/O 调度算法


* MySQL 运行的物理机上,I/O 调度算法建议使用:deadline/noop,尽量不使用 CFQ。
* 原因是 CFQ 把 I/O 请求按照进程分别放入进程对应的队列中。CFQ 的公平是针对进程而言,每一个提交 I/O 请求的进程都会有自己的 I/O 队列,以时间算法为前提,轮转调动队列,默认从当前队列中取出 4 个请求处理,然后处理下一个队列的 4 个请求,确保每个进程享有的 I/O 资源是均衡的。因此高并发场景,CFQ 很可能会导致 I/O 的响应缓慢。


##### 2.2 文件系统选择


* 优先选用 xfs 或 ext4,坚决不用 ext3。
* 原因是: ext3 在 fsck 时需要耗费大量时间,文件越多,时间越长 。


##### 2.3 调整内核参数


* `vm.swappiness ≤ 10`  
 降低使用 swap 的概率,但是尽量不要设置为 0,可能引起 OOM。
* `vm.dirty_ratio ≤ 5`  
 这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件 IO 而阻塞。
* `vm.dirty_background_ratio ≤ 10`  
 避免因为 IO 压力瞬间飙升导致内核进程卡死,操作系统 hung 住。这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时,就会触发 pdflush/flush/kdmflush 等后台回写进程运行,将一定缓存的脏页异步地刷入外存。


#### 3 MySQL 层优化


在之前的部分章节中,我们知道了,MySQL 自身很多地方是可以优化的,这里再对 MySQL 层的优化做一个总结:


##### 3.1 参数优化


在启动 MySQL 之前,一些参数合理的设置,可以大大提升 MySQL 的性能。这里就来介绍一部分相对比较重要的参数:  
 `innodb_buffer_pool_size`  
 该参数控制 InnoDB 缓存表和索引数据的内存区域大小。对性能影响非常大,建议设置为机器内存的 50-80%。  
 `innodb_flush_log_at_trx_commit`  
 InnoDB 的 redo 日志刷新方式,对 InnoDB 的影响会很大。  
 `sync_binlog`  
 控制累积多少个事务后才将二进制日志 fsync 到磁盘。  
 `innodb_file_per_table`  
 开启独立表空间。  
 `max_connection`  
 最大连接数。不能设置的过小,防止客户端连接失败;也不能设置的过大,防止数据库内存资源过多消耗。  
 `long_query_time`  
 慢查询时间阀值。  
 `query_cache_type`  
 `query_cache_size`  
 建议这两个参数都设置为 0。


##### 3.2 MySQL 设计优化


**ES6**

*   列举常用的ES6特性:

*   箭头函数需要注意哪些地方?

*   let、const、var

*   拓展:var方式定义的变量有什么样的bug?

*   Set数据结构

*   拓展:数组去重的方法

*   箭头函数this的指向。

*   手写ES6 class继承。

![](https://img-blog.csdnimg.cn/img_convert/aac1740e50faadb9a6a7a5b97f9ccba8.png)

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**微信小程序**

*   简单描述一下微信小程序的相关文件类型?

*   你是怎么封装微信小程序的数据请求?

*   有哪些参数传值的方法?

*   你使用过哪些方法,来提高微信小程序的应用速度?

*   小程序和原生App哪个好?

*   简述微信小程序原理?

*   分析微信小程序的优劣势

*   怎么解决小程序的异步请求问题?

![](https://img-blog.csdnimg.cn/img_convert/60b1dbe5c76e264468aa993416a9a031.png)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值