首页 文章 精选 留言 我的

精选列表

搜索[数据库知识开放麦],共10000篇文章
优秀的个人博客,低调大师

前端开发:详细讲解this指向相关的知识

在前端开发中,this虽然只是其中的一个关键字而已,但是确实一个比较特殊的关键字。为什么说this在js关键字中很特殊呢,原因就在于this是函数在运行时自动生成的一个对象,this的指向在函数定义的时候不是确定的,只有在函数运行的时候才能确定this指向是谁,其实this最终指向的就是调用它的那个对象(this指向的是最后调用它的对象),说白了就是“谁调用指向谁”。 首先来了解一下this指向的优点好处:在特定函数和写法中,this可以方便快捷的引用对象,使得写法简单容易复用和代码简洁精简。 一、this指向不同是由函数调用方式决定的 1、普通函数的调用 this指向window,eg: function fun() { console.log(this); //指向window } window.fun(); 2.构造函数的调用,this指向实例对象 function Student(age, name) { this.age = age; this.name = name console.log(this) //this分别指向Student的实例对象s1、s2 } var s1 = new Student(18, 'ls') var s2 = new Student(18, ‘cc’) 3.对象方法的调用,this指向该对象方法所属的对象 var obj = { fun: function () { console.log(this); //指向obj } } obj.fun(); 4.定时器函数的调用,this指向window setInterval(function () { console.log(this); //指向window }, 2000); 5.通过事件绑定方法的调用,this指向绑定事件的对象 <body> <button id="btn">cc</button> <script> var objBtn = document.getById("btn"); objBtn.onclick = function() { console.log(this); // 指向btn } </script> </body> 6.箭头函数的调用,this指向父级对象 var obj = { a: 1, fun: () => { console.log(this); //this指向了obj的父级对象window } } obj.fun(); //指向window 7.匿名函数的调用,this指向全局变量window (function fun() { console.log(this); //this指向全局变量window })(); 二、更改this指向的三个方法 每一个function构造函数的都有是三个方法:call(), apply(), bind(),也就是这三个方法可以更改this的指向,但是call(), apply()只能在特定作用域调用函数,而bind()方法会创建一个函数实例,然后this会被绑定到bind()上面。 1.call() 方法 把普通函数的this指向window的,更改this指向,eg: var Student = { name:”caicai”, age:25 } function fun(x,y){ console.log(x+","+y); console.log(this); } fun(“ll”,30); 修改上面例子的更改this指向,如下所示: var Student = { name:"caicai", age:25 } function fun(x,y){ console.log(x+","+y); console.log(this); console.log(this.name); } fun.call(Student,”ll”,30); //现在this就指向Student了 2.apply() 方法 apply() 方法与call()很类似,它们的不同之处在于提供参数的方式,apply()使用参数数组,而不是参数列表 <script> var Student = { name:"caicai", age:25 } function fun(x,y){ console.log(x+","+y); console.log(this.age); } aa.call(Student,1,2); aa.apply(Student,[1,2]); </script> 3.bind()方法 bind()方法创建的是一个新函数(也称为绑定函数),它和被调用函数有相同的函数体。当目标函数被调用时,this的值就会绑定到bind()的第一个参数上面。 <script> var Student = { name:"caicai", age:25 } function fun(x,y){ console.log(x+","+y); console.log(this.age); } aa.call(Student,1,2); aa.apply(Student,[1,2]); aa.bind(Student,1,2)(); //必须调用,不然就只是单纯的绑定而已 </script> 4. 存储this指向到变量里面 var obj = document.getById("obj"); obj.onclick = function () { var _this = this; //把this储存在变量中,且不改变定时器的指向 setTimeout(function () { console.log(this); //指向window console.log(_this); //this对当前对象的引用 }, 2000); } 以上就是本章全部内容,欢迎关注三掌柜的微信公众号“程序猿by三掌柜”,三掌柜的新浪微博“三掌柜666”,欢迎关注!

优秀的个人博客,低调大师

前端开发:详细讲解this指向的相关知识

在前端js中,this虽然只是其中的一个关键字而已,但是确实一个比较特殊的关键字。为什么说this在js关键字中很特殊呢,原因就在于this是函数在运行时自动生成的一个对象,this的指向在函数定义的时候不是确定的,只有在函数运行的时候才能确定this指向是谁,其实this最终指向的就是调用它的那个对象(this指向的是最后调用它的对象),说白了就是“谁调用指向谁”。 首先来了解一下this指向的优点好处:在特定函数和写法中,this可以方便快捷的引用对象,使得写法简单容易复用和代码简洁精简。 一、this指向不同是由函数调用方式决定的 1、普通函数的调用,this指向window,eg: function fun() { console.log(this); //指向window } window.fun(); 2.构造函数的调用,this指向实例对象 function Student(age, name) { this.age = age; this.name = name console.log(this) //this分别指向Student的实例对象s1、s2 } var s1 = new Student(18, 'ls') var s2 = new Student(18, ‘cc’) 3.对象方法的调用,this指向该对象方法所属的对象 var obj = { fun: function () { console.log(this); //指向obj } } obj.fun(); 4.定时器函数的调用,this指向window setInterval(function () { console.log(this); //指向window }, 2000); 5.通过事件绑定方法的调用,this指向绑定事件的对象 <body> <button id="btn">cc</button> <script> var objBtn = document.getById("btn"); objBtn.onclick = function() { console.log(this); // 指向btn } </script> </body> 6.箭头函数的调用,this指向父级对象 var obj = { a: 1, fun: () => { console.log(this); //this指向了obj的父级对象window } } obj.fun(); //指向window 7.匿名函数的调用,this指向全局变量window (function fun() { console.log(this); //this指向全局变量window })(); 二、更改this指向的三个方法 每一个function构造函数的都有是三个方法:call(), apply(), bind(),也就是这三个方法可以更改this的指向,但是call(), apply()只能在特定作用域调用函数,而bind()方法会创建一个函数实例,然后this会被绑定到bind()上面。 1.call() 方法 把普通函数的this指向window的,更改this指向 eg: var Student = { name:”caicai”, age:25 } function fun(x,y){ console.log(x+","+y); console.log(this); } fun(“ll”,30); 修改上面例子的更改this指向,如下所示: var Student = { name:"caicai", age:25 } function fun(x,y){ console.log(x+","+y); console.log(this); console.log(this.name); } fun.call(Student,”ll”,30); //现在this就指向Student了 2.apply() 方法 apply() 方法与call()很类似,它们的不同之处在于提供参数的方式,apply()使用参数数组,而不是参数列表 <script> var Student = { name:"caicai", age:25 } function fun(x,y){ console.log(x+","+y); console.log(this.age); } aa.call(Student,1,2); aa.apply(Student,[1,2]); </script> 3.bind()方法 bind()方法创建的是一个新函数(也称为绑定函数),它和被调用函数有相同的函数体。当目标函数被调用时,this的值就会绑定到bind()的第一个参数上面。 <script> var Student = { name:"caicai", age:25 } function fun(x,y){ console.log(x+","+y); console.log(this.age); } aa.call(Student,1,2); aa.apply(Student,[1,2]); aa.bind(Student,1,2)(); //必须调用,不然就只是单纯的绑定而已 </script> 4. 存储this指向到变量里面 var obj = document.getById("obj"); obj.onclick = function () { var _this = this; //把this储存在变量中,且不改变定时器的指向 setTimeout(function () { console.log(this); //指向window console.log(_this); //this对当前对象的引用 }, 2000); } 以上就是本章全部内容,欢迎关注三掌柜的微信公众号“iOS开发by三掌柜”,三掌柜的新浪微博“三掌柜666”,欢迎关注! 三掌柜的微信公众号: 三掌柜的新浪微博:

优秀的个人博客,低调大师

收藏,吊打面试官的kafka知识!

1 什么是kafka Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。 2 为什么要使用 kafka,为什么要使用消息队列 缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。 解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。 冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。 健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。 3.Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么 ISR:In-Sync Replicas 副本同步队列 AR:Assigned Replicas 所有副本 ISR是由leader维护,follower从leader同步数据有一些延迟(包括延迟时间replica.lag.time.max.ms和延迟条数replica.lag.max.messages两个维度, 当前最新的版本0.10.x中只支持replica.lag.time.max.ms这个维度),任意一个超过阈值都会把follower剔除出ISR, 存入OSR(Outof-Sync Replicas)列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。 4.kafka中的broker 是干什么的 broker 是消息的代理,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉取指定Topic的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。 5.kafka中的 zookeeper 起到什么作用,可以不用zookeeper么 zookeeper 是一个分布式的协调组件,早期版本的kafka用zk做meta信息存储,consumer的消费状态,group的管理以及 offset的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖, 但是broker依然依赖于ZK,zookeeper 在kafka中还用来选举controller 和 检测broker是否存活等等。 6.kafka follower如何与leader同步数据 Kafka的复制机制既不是完全的同步复制,也不是单纯的异步复制。完全同步复制要求All Alive Follower都复制完,这条消息才会被认为commit,这种复制方式极大的影响了吞吐率。而异步复制方式下,Follower异步的从Leader复制数据,数据只要被Leader写入log就被认为已经commit,这种情况下,如果leader挂掉,会丢失数据,kafka使用ISR的方式很好的均衡了确保数据不丢失以及吞吐率。Follower可以批量的从Leader复制数据,而且Leader充分利用磁盘顺序读以及send file(zero copy)机制,这样极大的提高复制性能,内部批量写磁盘,大幅减少了Follower与Leader的消息量差。 7.什么情况下一个 broker 会从 isr中踢出去 leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个follower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除 。 8.kafka 为什么那么快 Cache Filesystem Cache PageCache缓存 顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。 Zero-copy 零拷技术减少拷贝次数 Batching of Messages 批量量处理。合并小的请求,然后以流的方式进行交互,直顶网络上限。 Pull 拉模式 使用拉模式进行消息的获取消费,与消费端处理能力相符。 9.kafka producer如何优化打入速度 增加线程 提高 batch.size 增加更多 producer 实例 增加 partition 数 设置 acks=-1 时,如果延迟增大:可以增大 num.replica.fetchers(follower 同步数据的线程数)来调解; 跨数据中心的传输:增加 socket 缓冲区设置以及 OS tcp 缓冲区设置。 10.kafka producer 打数据,ack 为 0, 1, -1 的时候代表啥, 设置 -1 的时候,什么情况下,leader 会认为一条消息 commit了 1(默认) 数据发送到Kafka后,经过leader成功接收消息的的确认,就算是发送成功了。在这种情况下,如果leader宕机了,则会丢失数据。 0 生产者将数据发送出去就不管了,不去等待任何返回。这种情况下数据传输效率最高,但是数据可靠性确是最低的。 -1 producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了。 11.kafka unclean 配置代表啥,会对 spark streaming 消费有什么影响 unclean.leader.election.enable为true的话,意味着非ISR集合的broker 也可以参与选举,这样有可能就会丢数据,spark streaming在消费过程中拿到的 end offset 会突然变小,导致 spark streaming job挂掉。如果unclean.leader.election.enable参数设置为true,就有可能发生数据丢失和数据不一致的情况,Kafka的可靠性就会降低;而如果unclean.leader.election.enable参数设置为false,Kafka的可用性就会降低。 12.如果leader crash时,ISR为空怎么办 kafka在Broker端提供了一个配置参数:unclean.leader.election,这个参数有两个值:true(默认):允许不同步副本成为leader,由于不同步副本的消息较为滞后,此时成为leader,可能会出现消息不一致的情况。false:不允许不同步副本成为leader,此时如果发生ISR列表为空,会一直等待旧leader恢复,降低了可用性。 13.kafka的message格式是什么样的 一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成 header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成。 当magic的值为1的时候,会在magic和crc32之间多一个字节的数据:attributes(保存一些相关属性,比如是否压缩、压缩格式等等);如果magic的值为0,那么不存在attributes属性。body是由N个字节构成的一个消息体,包含了具体的key/value消息 14.kafka中consumer group 是什么概念 同样是逻辑上的概念,是Kafka实现单播和广播两种消息模型的手段。同一个topic的数据,会广播给不同的group;同一个group中的worker,只有一个worker能拿到这个数据。换句话说,对于同一个topic,每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个worker消费。group内的worker可以使用多线程或多进程来实现,也可以将进程分散在多台机器上,worker的数量通常不超过partition的数量,且二者最好保持整数倍关系,因为Kafka在设计时假定了一个partition只能被一个worker消费(同一group内)。 15.Kafka中的消息是否会丢失和重复消费? 要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消息消费。 1、消息发送 Kafka消息发送有两种方式:同步(sync)和异步(async),默认是同步方式,可通过producer.type属性进行配置。Kafka通过配置request.required.acks属性来确认消息的生产: 0---表示不进行消息接收是否成功的确认;1---表示当Leader接收成功时确认;-1---表示Leader和Follower都接收成功时确认; 综上所述,有6种消息生产的情况,下面分情况来分析消息丢失的场景: (1)acks=0,不和Kafka集群进行消息接收确认,则当网络异常、缓冲区满了等情况时,消息可能丢失; (2)acks=1、同步模式下,只有Leader确认接收成功后但挂掉了,副本没有同步,数据可能丢失; 2、消息消费 Kafka消息消费有两个consumer接口,Low-level API和High-level API: Low-level API:消费者自己维护offset等值,可以实现对Kafka的完全控制; High-level API:封装了对parition和offset的管理,使用简单; 如果使用高级接口High-level API,可能存在一个问题就是当消息消费者从集群中把消息取出来、并提交了新的消息offset值后,还没来得及消费就挂掉了,那么下次再消费时之前没消费成功的消息就“诡异”的消失了; 解决办法: 针对消息丢失:同步模式下,确认机制设置为-1,即让消息写入Leader和Follower之后再确认消息发送成功;异步模式下,为防止缓冲区满,可以在配置文件设置不限制阻塞超时时间,当缓冲区满时让生产者一直处于阻塞状态; 针对消息重复:将消息的唯一标识保存到外部介质中,每次消费时判断是否处理过即可。 16.为什么Kafka不支持读写分离? 在 Kafka 中,生产者写入消息、消费者读取消息的操作都是与 leader 副本进行交互的,从 而实现的是一种主写主读的生产消费模型。 Kafka 并不支持主写从读,因为主写从读有 2 个很明 显的缺点: (1)数据一致性问题。数据从主节点转到从节点必然会有一个延时的时间窗口,这个时间 窗口会导致主从节点之间的数据不一致。某一时刻,在主节点和从节点中 A 数据的值都为 X, 之后将主节点中 A 的值修改为 Y,那么在这个变更通知到从节点之前,应用读取从节点中的 A 数据的值并不为最新的 Y,由此便产生了数据不一致的问题。 (2)延时问题。类似 Redis 这种组件,数据从写入主节点到同步至从节点中的过程需要经 历网络→主节点内存→网络→从节点内存这几个阶段,整个过程会耗费一定的时间。而在 Kafka 中,主从同步会比 Redis 更加耗时,它需要经历网络→主节点内存→主节点磁盘→网络→从节 点内存→从节点磁盘这几个阶段。对延时敏感的应用而言,主写从读的功能并不太适用。 17.Kafka中是怎么体现消息顺序性的? kafka每个partition中的消息在写入时都是有序的,消费时,每个partition只能被每一个group中的一个消费者消费,保证了消费时也是有序的。整个topic不保证有序。如果为了保证topic整个有序,那么将partition调整为1. 18.消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1? offset+1 19.kafka如何实现延迟队列? Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n)),并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复杂度都降为O(1)。时间轮的应用并非Kafka独有,其应用场景还有很多,在Netty、Akka、Quartz、Zookeeper等组件中都存在时间轮的踪影。 底层使用数组实现,数组中的每个元素可以存放一个TimerTaskList对象。TimerTaskList是一个环形双向链表,在其中的链表项TimerTaskEntry中封装了真正的定时任务TimerTask. Kafka中到底是怎么推进时间的呢?Kafka中的定时器借助了JDK中的DelayQueue来协助推进时间轮。具体做法是对于每个使用到的TimerTaskList都会加入到DelayQueue中。Kafka中的TimingWheel专门用来执行插入和删除TimerTaskEntry的操作,而DelayQueue专门负责时间推进的任务。再试想一下,DelayQueue中的第一个超时任务列表的expiration为200ms,第二个超时任务为840ms,这里获取DelayQueue的队头只需要O(1)的时间复杂度。如果采用每秒定时推进,那么获取到第一个超时的任务列表时执行的200次推进中有199次属于“空推进”,而获取到第二个超时任务时有需要执行639次“空推进”,这样会无故空耗机器的性能资源,这里采用DelayQueue来辅助以少量空间换时间,从而做到了“精准推进”。Kafka中的定时器真可谓是“知人善用”,用TimingWheel做最擅长的任务添加和删除操作,而用DelayQueue做最擅长的时间推进工作,相辅相成。 历史好文推荐 Kafka实战宝典:Kafka的控制器controller详解 Kafka实战宝典:一文带解决Kafka常见故障处理 Kafka实战宝典:监控利器kafka-eagle kafka实战宝典:手动修改消费偏移量的两种方式 Kafka实战宝典:如何跨机房传输数据 本文分享自微信公众号 - 数据社(DataClub)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

【AWS征文】AWS 数据加密知识点

一、S3 加密 服务端加密 服务器端加密是由接收数据的应用程序或服务在数据目的地对数据进行加密。Amazon S3 在将您的数据写入数据中心内的磁盘时会在对象级别上加密这些数据,并在您访问这些数据时为您解密这些数据。只要您验证了您的请求并且拥有访问权限,您访问加密和未加密对象的方式就没有区别。例如,如果您使用预签名的 URL 来共享您的对象,那么对于加密和解密对象,该 URL 的工作方式是相同的。此外,在您列出存储桶中的对象时,列表 API 会返回所有对象的列表(无论对象是否加密)。 注意您不能对同一个对象应用不同类型的服务器端加密。 您有三个互斥选项,具体取决于您选择如何管理加密密钥: 具有 Amazon S3 托管密钥的服务器端加密 (SSE-S3) 当您使用具有 Amazon S3 托管密钥的服务器端加密 (SSE-S3) 时,每个对象均使用唯一密钥加密。作为额外的保护,它将使用定期轮换的主密钥对密钥本身进行加密。Amazon S3 服务器端加密使用可用的最强数据块密码之一(即 256 位高级加密标准 (AES-256))来加密您的数据。有关更多信息,请参阅使用具有 Amazon S3 托管加密密钥的服务器端加密 (SSE-S3) 保护数据。 每个对象使用唯一数据秘钥加密 在 AWS Key Management Service 中存储客户主密钥 (CMK) 的服务器端加密 (SSE-KMS) 在 AWS Key Management Service 中存储客户主密钥 (CMK) 的服务器端加密 (SSE-KMS) 与 SSE-S3 类似,使用该服务具有一些额外的好处,但也要额外收取费用。使用 CMK 需要单独的权限,该密钥可进一步防止未经授权地访问 Amazon S3 中的对象。SSE-KMS 还向您提供审核跟踪,显示您的 CMK 的使用时间和使用者。此外,您还可以创建和管理客户托管 CMK,或者使用您、服务和区域独有的 AWS 托管 CMK。有关更多信息,请参阅使用具有 AWS Key Management Service 中存储的 CMK 的服务器端加密 (SSE-KMS) 保护数据。 每个对象使用唯一数据秘钥加密 具有客户提供密钥的服务器端加密 (SSE-C) 使用具有客户提供密钥的服务器端加密 (SSE-C) 时,您管理加密密钥,而 Amazon S3 管理加密(在它对磁盘进行写入时)和解密(在您访问您的对象时)。有关更多信息,请参阅通过使用客户提供的加密密钥的服务器端加密 (SSE-C) 保护数据。 所有对象使用相同的秘钥加密(客户端提供的) 客户端加密 客户端加密 是在将数据发送到 Amazon S3 之前加密数据的行为。要启用客户端加密,您可以选择以下方法: 使用 AWS KMS 中存储的 CMK 在上传对象时 — 通过使用客户主密钥 (CMK) ID,客户端先向 AWS KMS 发送请求以获取可用于加密对象数据的 CMK。AWS KMS 返回两个随机生成的数据密钥版本: 客户端用于加密对象数据的数据密钥的纯文本版本 客户端将作为对象元数据上传到 Amazon S3 的同一数据密钥的密码 blob 下载对象时 — 客户端首先从 Amazon S3 下载加密的对象以及作为对象元数据存储的数据密钥的密码 blob 版本。然后,客户端将密码 blob 发送到 AWS KMS 以获取密钥的纯文本版本,以便让客户端解密对象数据。 客户端将为其上传的每个对象获取一个唯一的数据密钥。 使用在应用程序中存储的主密钥 上传对象时 — 将客户端主密钥提供给 Amazon S3 加密客户端。该客户端仅使用该主密钥来加密客户端随机生成的数据加密密钥。该过程的工作方式如下所示: Amazon S3 加密客户端在本地生成一个一次性对称密钥 (也称为“数据加密密钥”或“数据密钥”)。它使用数据密钥加密单个 Amazon S3 对象的数据。该客户端将为每个对象生成一个单独的数据密钥。 该客户端使用您提供的主密钥来加密数据加密密钥。客户端会将加密的数据密钥及其材料说明作为对象元数据的一部分上传。该客户端利用材料描述来确定要用于解密的客户端主密钥。 该客户端将加密数据上传到 Amazon S3 并在 Amazon S3 中将加密数据密钥保存为对象元数据 (x-amz-meta-x-amz-key)。 下载对象时 — 该客户端从 Amazon S3 下载加密的对象。通过使用对象元数据中的材料说明,该客户端将确定要用于解密数据密钥的主密钥。该客户端将使用该主密钥解密数据密钥,然后使用该数据密钥对对象进行解密。 您提供的客户端主密钥可以是对称密钥,也可以是公有/私有密钥对。 SSE-KMS 需要额外的费用,使用 SSE-S3/SSE-C 免费 二、KMS 秘钥自动轮换方式 备用密钥管理。AWS KMS 会保留 CMK 的所有备用密钥,即使密钥轮换处于禁用状态。只有删除 CMK 后才会删除备用密钥。如果使用 CMK 进行加密,AWS KMS 会使用当前的备用密钥。如果使用 CMK 进行解密,AWS KMS 会使用加密时所用的备用密钥。 启用和禁用密钥轮换。默认情况下,客户管理的 CMK 的自动密钥轮换处于禁用状态。当您启用(或重新启用)密钥轮换时,AWS KMS 会在启用日期 365 天后自动轮换 CMK,并在此后每隔 365 天轮换一次。 已禁用的 CMK。 禁用 CMK 后,AWS KMS 不会对它进行轮换。但是,密钥轮换状态不会发生改变,并且在 CMK 处于禁用状态时不能对其进行更改。重新启用 CMK 后,如果备用密钥已超过 365 天,AWS KMS 会立即轮换,并在此后每隔 365 天轮换一次。如果备用密钥少于 365 天,AWS KMS 会恢复原始密钥轮换计划。 待删除的 CMK。 对于待删除的 CMK,AWS KMS 不会对它进行轮换。密钥轮换状态设为 false,处于待删除状态时不能更改。如果删除被取消,将恢复之前的密钥轮换状态。如果备用密钥已超过 365 天,AWS KMS 会立即轮换,并在此后每隔 365 天轮换一次。如果备用密钥少于 365 天,AWS KMS 会恢复原始密钥轮换计划。 AWS 托管 CMK。 对于 AWS 托管 CMK,您无法管理其密钥轮换。AWS KMS 每隔三年(1095 天)自动轮换一次 AWS 托管 CMK。 AWS 拥有的 CMK。 对于 AWS 拥有的 CMK,您无法管理其密钥轮换。AWS 拥有的 CMK 的密钥轮换策略由创建和管理 CMK 的 AWS 服务确定。有关详细信息,请参阅服务的用户指南或开发人员指南中的静态加密 主题。 AWS 服务。在 AWS 服务中,您可以在用于服务器端加密的 客户托管 CMK 上启用自动密钥轮换。年度轮换是透明的,并与 AWS 服务兼容。 监控密钥轮换。 当 AWS KMS 自动轮换 AWS 托管 CMK 或客户托管 CMK 的密钥材料时,会将 KMS CMK Rotation (KMS CMK 轮换) 事件写入 Amazon CloudWatch Events 中。您可以通过该事件验证 CMK 是否已轮换。 不支持的 CMK 类型。 以下类型的 CMK 不 支持自动密钥轮换,但您可以手动轮换这些 CMK。

优秀的个人博客,低调大师

Python机器学习小知识:pandas.apply

pandas.apply函数是Python在机器学习处理数据时常用的一个方法。apply函数会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。该函数定义如下:DataFrame.apply(self, func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds)其中,func 参数是函数名,相当于C/C++的函数指针。func函数需要自己实现,函数的传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据,结构传入给func函数中,这样会在定义的func函数中实现对Series不同属性之间的计算,返回结果。具体定义请参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html 以下为一些例子: df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])df A B0 4 91 4 92 4 9 df.apply(np.sqrt) A B0 2.0 3.01 2.0 3.02 2.0 3.0 df.apply(np.sum, axis=0)A 12B 27dtype: int64 df.apply(np.sum, axis=1)0 131 132 13dtype: int64

优秀的个人博客,低调大师

电脑网站支付开发知识点

开发文档 请求参数说明文档:[url]https://docs.open.alipay.com/270/105900/[/url] 接入注意点 使用sdk签名方法详解:[url]https://openclub.alipay.com/read.php?tid=2212&fid=46[/url] 支付宝交易状态快速掌握:[url]https://openclub.alipay.com/read.php?tid=1295&fid=72[/url] 关于支付宝异步通知的那些事:[url]https://openclub.alipay.com/read.php?tid=1314&fid=69[/url] 强烈推荐云排查!!!(自查问题神器):[url]https://openclub.

优秀的个人博客,低调大师

云计算基础知识:CPU虚拟化

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 虚拟化技术的分类主要有服务器虚拟化、存储虚拟化、网络虚拟化、应用虚拟化。 服务器虚拟化技术按照虚拟对象来分,可分为:CPU虚拟化、内存虚拟化、I/O虚拟化;按照虚拟化程度可分为:全虚拟化、半虚拟化、硬件辅助虚拟化。 将不同的虚拟化对象和程度组合,可得出9种不同的服务器虚拟化技术。 首先详细介绍下服务器虚拟化之CPU虚拟化,后续讲解中再详细介绍内存虚拟化及I/O虚拟化。 CPU虚拟化 CPU全虚拟化技术 主要采用优先级压缩技术(Ring Compression)和二进制代码翻译技术(BinaryTranslation)。优先级压缩技术让VMM和Guest运行在不同的特权级下。对x86架构而言,即VMM运行在***特权级别Ring 0下,Guest OS运行在Ring 1下,用户应用运行在Ring 3下。因此,Guest OS的核心指令无法直接下达到计算机系统硬件执行,而是需要经过VMM的捕获和模拟执行(部分难以虚拟化的指令需要通过Binary Translation技术进行转换)。 CPU半虚拟化技术 主要采用Hypercall技术。Guest OS的部分代码被改变,从而使Guest OS会将和特权指令相关的操作都转换为发给VMM的Hypercall(超级调用),由VMM继续进行处理。而Hypercall支持的批处理和异步这两种优化方式,使得通过Hypercall能得到近似于物理机的速度。 CPU硬件辅助虚拟化技术 目前主要有Intel的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。通常情况下,Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。 CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 GuestOS负责第2级调度,即线程或进程在VCPU上的调度(将核心线程映射到相应的虚拟CPU上)。 VMM(Virtual Machine Monitor)负责第1级调度,即VCPU在物理处理单元上的调度。 两级调度的调度策略和机制不存在依赖关系。VMM负责物理处理器资源在各个虚拟机之间的分配与调度,本质上即把各个虚拟机中的VCPU按照一定的策略和机制调度在物理处理单元上可以采用任意的策略来分配物理资源,满足虚拟机的不同需求。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册