面试高频问题----2

一、Mysql底层数据结构是什么?

 MySQL 默认的存储引擎 InnoDB 采用的是 B+ 作为索引的数据结构,原因有:
  • B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B 树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B 树更「矮胖」,查询底层节点的磁盘 I/O次数会更少。
  • B+ 树有大量的冗余节点(所有非叶子节点都是冗余索引),这些冗余索引让 B+ 树在插入、删除的效率都更高,比如删除根节点的时候,不会像 B 树那样会发生复杂的树的变化;
  • B+ 树叶子节点之间用链表连接了起来,有利于范围查询,而 B 树要实现范围查询,因此只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 I/O 操作,范围查询效率不如 B+ 树。

二、线程池参数有哪些?

1.核心线程数:线程池中保持存活的最小线程数,即使它们处于空闲状态也不会被销毁
2.最大线程数:线程池中允许的最大线程数。如果任务量超过核心线程数且队列已满,则线程池会创建线程直到达到这个最大值
3.空闲线程的存活时间:当线程池中的线程数量超过核心线程数时,多余的空闲线程在终止之前等待新任务的最长时间。
4.时间单位:用于指定keepAliveTime参数的时间单位,可以是TimeUnit枚举中的任意值
5.工作队列:用于存储等待执行的任务的队列
6.线程工厂:用于创建新线程的工厂,可以自定义线程的创建方式,比如设置线程名称,线程优先级

三、进程、线程和协程的区别:

进程:1.进程是操作系统分配资源的基本单位
           2.每个进程都有自己独立的内存空间和系统资源
           3.进程间通信(通过管道、信号、消息队列、共享内存等)通常涉及内核级别操作,相对较慢;
          4.进程是操作系统级别的并发实体,通常由操作系统调度和管理
线程:1.线程是操作系统调度的基本单位,但它是进程内的执行流
           2.同一进程内的多个线程共享该进程的内存空间和系统资源
           3.线程间通信通常比进程间通信更快,因为它们共享相同的内存空间
          4.线程切换的开销比进程的开销小,因为操作系统只需要保存和加载线程的上下文,而不需要保存和加载整个进程的上下文
协程:1.协程是一种用户态的轻量级线程,由程序员在代码中显示地管理和调度
           2.协程可以在单线程内实现非阻塞或异步I/O操作,从而提高程序的并发性能
           3.协程的切换和调度完全由用户程序控制,不需要操作系统接入,因此切换开销小
           4.协程实现方式有多种:生成器/异步I/O库和第三方库

四、为什么要三次握手?

1.确认双方的发送和接收能力
2.防止已失效的连接请求报文对后续正常连接的影响
3.同步双方的初始序列号值
4.防止重复连接

五、Mysql如何定位慢查询?

1.开启慢查询日志
2.设置慢查询阈值:默认情况下,超过10s的查询被记录为慢查询
3.指定慢查询日志文件的路径
4.查看慢查询日志
5.分析慢查询日志
6.排序和分析
7.定期轮转和清理慢查询日志

六、优化慢查询语句

1.避免使用SELECT***,只选择需要的字段,而不是使用SELECT
2.避免在WHERE子句中使用函数或运算
3.优化数据类型;使用合适的数据类型可以减少存储空间来提高查询性能
4.分区表:对于非常大的表,可以考虑使用分区来提高查询性能
5.调整缓存大小;调整日志设置如:关闭不必要的日志等
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uni-app的面试题主要涉及对其特性和使用的理解。一些可能的面试题包括但不限于以下内容: 1. 对uni-app的理解:uni-app是一个使用Vue.js开发所有前端应用的框架,开发者可以编写一套代码,然后将其发布到iOS、Android、Web(响应式)以及各种小程序平台(如微信、支付宝、百度、快应用等)。 2. 如何为不同的平台设置不同的代码:在uni-app中,可以使用条件编译指令(如`#ifdef H5`)来根据不同的平台设置不同的代码。 3. uni-app中封装接口请求相较于微信小程序有什么要注意的:由于uni-app需要实现跨端兼容,需要注意网络请求的跨域问题。而微信小程序不需要考虑多端兼容,也不会出现跨域问题。 4. uni-app中的本地存储数据和接收数据是什么:在uni-app中,可以使用`uni.setStorageSync(key, data)`和`uni.getStorageSync(key)`来进行本地数据的存储和接收。 5. uni-app路由与页面跳转:在uni-app中,可以使用`uni.navigateTo`、`uni.redirectTo`和`uni.reLaunch`等方法来进行页面的跳转。 6. uni-app全局变量的定义和获取:在uni-app中,可以使用`Vue.prototype`或`Vuex`来定义全局变量,并通过`this.$变量名`来获取全局变量的值。 7. uni-app的生命周期:uni-app中的生命周期包括`onLaunch`、`onShow`、`onHide`、`onError`等,用于控制应用程序的生命周期事件。 8. 提高微信小程序速度的方法:可以通过减少页面数量、压缩代码、优化图片、避免过多的数据请求等方法来提高微信小程序的速度[4]。 以上是uni-app可能的面试题,希望能对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【uni-app高频面试题——精品一】](https://blog.csdn.net/ytfty24124/article/details/128087256)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值