基础概念总结

1.用户态与内核态

用户态和内核态:运行在用户态下的程序不能直接访问操作系统内核数据结构和程序,需要通过系统调用完成自己所需要的功能,这个时候就需要切换到内核态,有三种方式可以从用户态切换到内核态:

  1. 系统调用
  2. 执行用户态程序时发生事先不可知的异常
  3. 外围设备的中断

其中前两种可以认为是主动的,后两种是被动的。

2.epoll和select的区别

epoll和select都是实现IO多路复用的一种方式,不同之处在于,select只知道有IO事件发生了,但不知道是哪一个流,需要一个一个去轮询,epoll不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)的,此时我们对这些流的操作都是有意义的。

3.进程和线程区别?进程和线程上下文切换有什么不同?

进程是操作系统进行资源分配的最小单位,线程是CPU资源进行分配的最小单位,一个进程可以包含多个线程,同一个进程里边的线程共享进程的资源。

4.在什么情况下mysql尽量少创建索引,甚至不创建索引?

  • 表数据比较少
  • 经常增删改的表,提高了查询速度,却会降低更新表的速度,因为更新表时,Mysql不仅保存了数据,还要保存索引文件。
  • 数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

5.mysql,一个大表怎么优化?

  • 首先,优化索引和sql
  • 加缓存,比如redis
  • mysql 分区表进行分区
  • 分库分表

6.redis性能高的原因

  • redis使用多路复用技术,可以处理并发的连接。非阻塞IO内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。
  • redis是单线程的,省去了很多上下文切换线程的时间;
  • redis是基于内存的,内存的读写速度非常快

7.简单聊聊垃圾收集器

常见的垃圾收集器一般有7种吧,包括Serial,Serial Old,ParNew,Parallel Scavenge,PS Old,CMS,G1,这几种垃圾收集器之间是有关系的。其中最简单也是最原始的收集器Serial,是一个串行的单线程收集器,Serial Old是Serial的老年代版本,一般用于Client模式,在Server模式下,一般会配合Parallel Scavenge使用,或者在CMS出现concurrent allocation failure的时候,作为后备收集器使用。ParNew是Serial收集器的多线程版本,使用上基本Serial收集器类似。Parallel Scavenge是一个追求吞吐量优先的垃圾收集器,用于新生代。PS old为PS收集器对应的老年代版本。CMS是并发标记清除垃圾收集器,用于老年代,追求用户程序的最短停顿时间。G1可以同时用于新生代和老年代的收集,从整体看,采用的是标记-整理的算法,从region层面看,采用的是复制算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值