获得徽章 1
#青训营笔记创作活动#
2月20日 day8
跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。用nginx作为代理服务器和用户交互,这样用户就只需要在80端口上进行交互
2月20日 day8
跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。用nginx作为代理服务器和用户交互,这样用户就只需要在80端口上进行交互
展开
评论
点赞
#青训营笔记创作活动#
2月16日 day7
redis限流
固定窗口计数:redis设置一个名为qps的key,val用来计数,1min过期。若get(qps)>10则拒绝。问题是存在窗口临界问题
滑动窗口计数:以访问时间作为区间末尾,当前时间-1min作为区间头部。要获得一段区间,并且按时间排序,可以用ZSet来实现,查询出【当前访问时间-1min,当前访问时间】这段区间的计数
漏桶算法:收到请求时,放入队列中,后台线程以固定的速率去removeLast,处理请求若队列满了,则请求就被丢弃。
2月16日 day7
redis限流
固定窗口计数:redis设置一个名为qps的key,val用来计数,1min过期。若get(qps)>10则拒绝。问题是存在窗口临界问题
滑动窗口计数:以访问时间作为区间末尾,当前时间-1min作为区间头部。要获得一段区间,并且按时间排序,可以用ZSet来实现,查询出【当前访问时间-1min,当前访问时间】这段区间的计数
漏桶算法:收到请求时,放入队列中,后台线程以固定的速率去removeLast,处理请求若队列满了,则请求就被丢弃。
展开
评论
点赞
#青训营笔记创作活动#
2月15日 day6
①值经常会增删改的字段,不合适建立索引,因为每次改变后需维护索引结构
②建立索引的字段,一般值的区分性要足够高,这样才能提高索引的检索效率。一个字段存在大量的重复值时,不适合建立索引
③对于唯一索引,如果确认不会利用该字段排序,那可以将结构改为Hash结构
④尽量使用联合索引代替单值索引,联合索引比多个单值索引查询效率要高。
⑤索引的字段值无序时,不推荐建立索引
⑥查询SQL中尽量不要使用OR关键字,模糊查询尽量不要以%开头
⑦多条件的查询SQL一定要使用联合索引中的第一个字段,否则会打破最左匹配原则。
2月15日 day6
①值经常会增删改的字段,不合适建立索引,因为每次改变后需维护索引结构
②建立索引的字段,一般值的区分性要足够高,这样才能提高索引的检索效率。一个字段存在大量的重复值时,不适合建立索引
③对于唯一索引,如果确认不会利用该字段排序,那可以将结构改为Hash结构
④尽量使用联合索引代替单值索引,联合索引比多个单值索引查询效率要高。
⑤索引的字段值无序时,不推荐建立索引
⑥查询SQL中尽量不要使用OR关键字,模糊查询尽量不要以%开头
⑦多条件的查询SQL一定要使用联合索引中的第一个字段,否则会打破最左匹配原则。
展开
评论
点赞
#青训营笔记创作活动#
2月13日 day5
索引就是用来帮助表快速检索目标数据的。MySQL可以通过CREATE、ALTER、DDL三种方式创建一个索引。
主键索引——索引列中的值必须是唯一的,不允许有空值。
普通索引——MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。
唯一索引——索引列中的值必须是唯一的,但是允许为空值。
大部分数据库系统及文件系统都采用 B-Tree或其变种B+Tree作为索引结构
2月13日 day5
索引就是用来帮助表快速检索目标数据的。MySQL可以通过CREATE、ALTER、DDL三种方式创建一个索引。
主键索引——索引列中的值必须是唯一的,不允许有空值。
普通索引——MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。
唯一索引——索引列中的值必须是唯一的,但是允许为空值。
大部分数据库系统及文件系统都采用 B-Tree或其变种B+Tree作为索引结构
展开
评论
点赞
#青训营笔记创作活动#
2月12日 day4
sql语句执行前,先发起网络请求获取数据库连接对象.由于涉及到了网络请求,那必然会先经历TCP三次握手,同时完成SQL操作后,要释放这个数据库连接,又需要经历TCP四次挥手,过程耗时且占用资源。因此需要用池化技术对数据库连接资源进行维护。当尝试从连接池中获取连接时,如果此时连接池中有空闲连接就直接拿到复用,若没有当前线程则需要等待其他线程释放连接对象。然后工作线程会先查询MySQL自身的用户权限表,获取当前登录用户的权限信息并授权。
数据库将根据sql语句的hash值查询缓存,若存在则直接返回。若不存在则sql将依次经过解析器(进行词法语法分析生成结构树),优化器(生成并选出最优执行计划),存储引擎(从磁盘检索数据),磁盘文件。
2月12日 day4
sql语句执行前,先发起网络请求获取数据库连接对象.由于涉及到了网络请求,那必然会先经历TCP三次握手,同时完成SQL操作后,要释放这个数据库连接,又需要经历TCP四次挥手,过程耗时且占用资源。因此需要用池化技术对数据库连接资源进行维护。当尝试从连接池中获取连接时,如果此时连接池中有空闲连接就直接拿到复用,若没有当前线程则需要等待其他线程释放连接对象。然后工作线程会先查询MySQL自身的用户权限表,获取当前登录用户的权限信息并授权。
数据库将根据sql语句的hash值查询缓存,若存在则直接返回。若不存在则sql将依次经过解析器(进行词法语法分析生成结构树),优化器(生成并选出最优执行计划),存储引擎(从磁盘检索数据),磁盘文件。
展开
评论
点赞
#青训营笔记创作活动#
2月11日 day3
mysql架构从上往下依次看将分为网络连接层,系统服务层,存储引擎层,以及文件系统层。
连接层主要是数据库连接池处理所有客户端接入的工作
服务层包括sql接口,解析器,优化器以及缓存缓冲区
存储引擎层指mysql支持的各大存储引擎如innodb
文件系统层涵盖了所有日志索引数据
2月11日 day3
mysql架构从上往下依次看将分为网络连接层,系统服务层,存储引擎层,以及文件系统层。
连接层主要是数据库连接池处理所有客户端接入的工作
服务层包括sql接口,解析器,优化器以及缓存缓冲区
存储引擎层指mysql支持的各大存储引擎如innodb
文件系统层涵盖了所有日志索引数据
展开
评论
点赞
#青训营笔记创作活动#
2月10日 day2
websocket是为了提供web应用程序和服务端全双工通信而专门制定的一种应用层协议。
当刷网页时用的是http协议,当打开网游时就得切换成websocket服务。为了兼容这些场景浏览器在三次握手后会使用http协议进行一次通信
如果想建立websocket连接,就要在http请求中带上一些特殊的header头,这些header的意思是升级协议为weksocket。如果服务器同意升级就返回101状态吗,websocket连接建立成功
2月10日 day2
websocket是为了提供web应用程序和服务端全双工通信而专门制定的一种应用层协议。
当刷网页时用的是http协议,当打开网游时就得切换成websocket服务。为了兼容这些场景浏览器在三次握手后会使用http协议进行一次通信
如果想建立websocket连接,就要在http请求中带上一些特殊的header头,这些header的意思是升级协议为weksocket。如果服务器同意升级就返回101状态吗,websocket连接建立成功
展开
评论
点赞
#青训营笔记创作活动#
2月9日 day1
cluster:物理集群,每个集群中可以建立多个不同的topic
producer:生产者,负责将业务消息发到topic
consumer:负责消费topic中的消息
topic:队列
partition:分区,一个topic可以分为多个分区每个分区是一个有序的队列
replica 副本,在分区上有若干副本一个leader和多个follower
broker:一台kafka服务器就是一个broker。一个大的topic可以分为多个分区并分布到多个broker上
2月9日 day1
cluster:物理集群,每个集群中可以建立多个不同的topic
producer:生产者,负责将业务消息发到topic
consumer:负责消费topic中的消息
topic:队列
partition:分区,一个topic可以分为多个分区每个分区是一个有序的队列
replica 副本,在分区上有若干副本一个leader和多个follower
broker:一台kafka服务器就是一个broker。一个大的topic可以分为多个分区并分布到多个broker上
展开
评论
点赞
#青训营笔记创作活动#
2月7日 day7
以锁粒度的维度划分:
①表锁:
全局锁:加上全局锁之后,整个数据库只能允许读,不允许做任何写操作。
元数据锁 / MDL锁:基于表的元数据加锁,加锁后整张表不允许其他事务操作。
意向锁:这个是InnoDB中为了支持多粒度的锁,为了兼容行锁、表锁而设计的。
自增锁 / AUTO-INC锁:这个是为了提升自增ID的并发插入性能而设计的。
②页面锁
③行锁:
记录锁 / Record锁:也就是行锁,一条记录和一行数据是同一个意思。
间隙锁 / Gap锁:InnoDB中解决幻读问题的一种锁机制。
临建锁 / Next-Key锁:间隙锁的升级版,同时具备记录锁+间隙锁的功能。
以互斥性的维度划分:
共享锁 / S锁:不同事务之间不会相互排斥、可以同时获取的锁。
排他锁 / X锁:不同事务之间会相互排斥、同时只能允许一个事务获取的锁。
共享排他锁 / SX锁:MySQL5.7版本中新引入的锁,主要是解决SMO带来的问题。
以操作类型的维度划分:
读锁:查询数据时使用的锁。
写锁:执行插入、删除、修改、DDL语句时使用的锁。
以加锁方式的维度划分:
显示锁:编写SQL语句时,手动指定加锁的粒度。
隐式锁:执行SQL语句时,根据隔离级别自动为SQL操作加锁。
以思想的维度划分:
乐观锁:每次执行前认为自己会成功,因此先尝试执行,失败时再获取锁。
悲观锁:每次执行前都认为自己无法成功,因此会先获取锁,然后再执行。
2月7日 day7
以锁粒度的维度划分:
①表锁:
全局锁:加上全局锁之后,整个数据库只能允许读,不允许做任何写操作。
元数据锁 / MDL锁:基于表的元数据加锁,加锁后整张表不允许其他事务操作。
意向锁:这个是InnoDB中为了支持多粒度的锁,为了兼容行锁、表锁而设计的。
自增锁 / AUTO-INC锁:这个是为了提升自增ID的并发插入性能而设计的。
②页面锁
③行锁:
记录锁 / Record锁:也就是行锁,一条记录和一行数据是同一个意思。
间隙锁 / Gap锁:InnoDB中解决幻读问题的一种锁机制。
临建锁 / Next-Key锁:间隙锁的升级版,同时具备记录锁+间隙锁的功能。
以互斥性的维度划分:
共享锁 / S锁:不同事务之间不会相互排斥、可以同时获取的锁。
排他锁 / X锁:不同事务之间会相互排斥、同时只能允许一个事务获取的锁。
共享排他锁 / SX锁:MySQL5.7版本中新引入的锁,主要是解决SMO带来的问题。
以操作类型的维度划分:
读锁:查询数据时使用的锁。
写锁:执行插入、删除、修改、DDL语句时使用的锁。
以加锁方式的维度划分:
显示锁:编写SQL语句时,手动指定加锁的粒度。
隐式锁:执行SQL语句时,根据隔离级别自动为SQL操作加锁。
以思想的维度划分:
乐观锁:每次执行前认为自己会成功,因此先尝试执行,失败时再获取锁。
悲观锁:每次执行前都认为自己无法成功,因此会先获取锁,然后再执行。
展开
评论
点赞