面试官:面阿里P7是吧?消息队列这些我必问!

RabbitMQ相关问题 死信队列即DLX,全称为,翻译为:死信交换机。当一个消息在队列中变成死信 (dead message) 之后,它能被重新发送到另外一个交换机中,这个交换机就是DLX,绑定到DLX的队列就称为死信队列;死信队列本身也是一个普通的消息队列,可以通过设置一些参数将其设置为死信队列;死信队列是一个用于存放无法被消费的消息的队列,这些消息被称为死信,死信队列可以避免消息一直被消费却无法消费成功的情况;延迟队列是用来存放“延迟消息”的队列; 阅读详情

点击“开发者技术前线”,选择“星标????”

在看|星标|留言,  真爱

回复“666”,获取一份专属大礼包

作者:mousycoder

segmentfault.com/a/1190000021054802

消息队列连环炮

  1. 项目里怎么样使用 MQ 的?

  2. 为什么要使用消息队列?

  3. 消息队列有什么优点和缺点?

  4. kafka,activemq,rabbitmq,rocketmq 都有什么去呗?

  5. 如何保证消息队列高可用?

  6. 如何保证消息不被重复消费?

  7. 如何保证消息的可靠性传输?

  8. 如何保证消息的顺序性?

  9. 写一个消息队列架构设计?

消息队列技术选型

解决的问题:

  • 解耦

  • 异步

  • 削峰

不用 MQ 系统耦合场景

A 系统产生了一个比较关键的数据,很多系统需要 A 系统将数据发过来,强耦合(B,C,D,E 系统可能参数不一样、一会需要一会不需要数据,A 系统要不断修改代码维护)

A 系统还要考虑 B、C、D、E 系统是否挂了,是否访问超时?是否重试?

使用 MQ 系统解耦场景

  1. 维护这个代码,不需要考虑人家是否调用成功,失败超时

  2. 如果新系统需要数据,直接从 MQ 里消费即可,如果某个系统不需要这条数据就取消对 MQ 消息的消费即可。

总结:通过一个 MQ 的发布订阅消息模型(Pub/Sub), 系统 A 跟其他系统就彻底解耦了。

不用 MQ 同步高延迟请求场景

一般互联网类的企业,对用户的直接操作,一般要求每个请求都必须在 200ms以内,对用户几乎是无感知的。

使用 MQ 进行异步化之后的接口性能优化

提高高延时接口

没有用 MQ 时高峰期系统被打死的场景

高峰期每秒 5000 个请求,每秒对 MySQL 执行 5000 条 SQL(一般MySQL每秒 2000 个请求差不多了),如果MySQL被打死,然后整个系统就崩溃,用户就没办法使用系统了。但是高峰期过了之后,每秒钟可能就 50 个请求,对整个系统没有任何压力。

使用 MQ 进行削峰的场景

5000 个请求写入到 MQ 里面,系统 A 每秒钟最多只能处理 2000 个请求(MySQL 每秒钟最多处理 2000 个请求),系统 A 从 MQ 里慢慢拉取请求,每秒钟拉取 2000 个请求。MQ,每秒钟 5000 个请求进来,结果只有 2000 个请求出去,结果导致在高峰期(21小时),可能有几十万甚至几百万的请求积压在 MQ 中,这个是正常的,因为过了高峰期之后,每秒钟就 50 个请求,但是系统 A 还是会按照每秒 2000 个该请求的速度去处理。只要高峰期一过,系统 A 就会快速的将积压的消息给解决掉。

算一笔账,每秒积压在 MQ 里消息有 3000 条,一分钟就会积压 18W 条消息,一个小时就会积压 1000 万条消息。等高峰期一过,差不多需要 1 个多小时就可以把 1000W 条积压的消息给处理掉

架构中引入 MQ 后存在的问题

  • 系统可用性降低

MQ 可能挂掉,导致整个系统崩溃

  • 系统复杂性变高

可能发重复消息,导致插入重复数据;消息丢了;消息顺序乱了;系统 B,C,D 挂了,导致 MQ 消息积累,磁盘满了;

  • 一致性问题

本来应该A,B,C,D 都执行成功了再返回,结果A,B,C 执行成功 D 失败

Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点

建议:中小型公司 RabbitMQ 大公司:RocketMQ 大数据实时计算:Kafka

消息队列高可用

RabbtitMQ 高可用

RabbitMQ有三种模式:单机模式 、普通集群模式、镜像集群模式

  • 单机模式

demo级

  • 普通集群模式(非高可用)

队列的元数据存在于多个实例中,但是消息不存在多个实例中,每次多台机器上启动多个 rabbitmq 实例,每个机器启动一个。

  • 优点:可以多个机器消费消息,可以提高消费的吞吐量

  • 缺点:可能会在 rabbitmq 内部产生大量的数据传输 ;可用性基本没保障,queue 所在机器宕机,就没办法消费了

没有高可用性可言

  • 镜像集群模式(高可用,非分布式)

队列的元数据和消息都会存在于多个实例中,每次写消息到 queue的时候,都会自动把消息到多个实例的 queue 里进行消息同步。也就 是每个节点上都有这个 queue 的一个完整镜像(这个 queue的全部数据)。任何一个节点宕机了,其他节点还包含这个 queue的完整数据,其他 consumer 都可以到其他活着的节点上去消费数据都是 OK 的。

缺点:不是分布式的,如果这个 queue的数据量很大,大到这个机器上的容量无法容纳 。

开启镜像集群模式方法:管理控制台,Admin页面下,新增一个镜像集群模式的策略,指定的时候可以要求数据同步到所有节点,也可以要求同步到指定数量的节点,然后你再次创建 queue 的时候 ,应用这个策略,就 会自动将数据同步到其他的节点上去。

  • Kafka 高可用架构

broker进程就是kafka在每台机器上启动的自己的一个进程。每台机器+机器上的broker进程,就可以认为是 kafka集群中的一个节点。

你创建一个 topic,这个topic可以划分为多个 partition,每个 partition 可以存在于不同的 broker 上,每个 partition就存放一部分数据。

这就是天然的分布式消息队列,也就是说一个 topic的数据,是分散放在 多个机器上的,每个机器就放一部分数据。

分布式的真正含义是每个节点只放一部分数据,而不是完整数据(完整数据就是HA、集群机制)
Kafka 0.8版本之前是没有 HA 机制的,任何一个 broker 宕机了,那么就缺失一部分数据。

Kafka 0.8以后,提供了 HA 机制,就是 replica 副本机制。

每个 partition的数据都会同步到其他机器上,形成自己的多个 replica 副本。然后所有 replica 会选举一个 leader。那么生产者、消费者都会和这个 leader 打交道,然后其他 replica 就是 follow。写的时候,leader 负责把数据同步到所有 follower上去,读的时候就直接读 leader 上的数据即可。

如果某个 broker宕机了,刚好也是 partition的leader,那么此时会选举一个新的 leader出来,大家继续读写那个新的 leader即可,这个就 是所谓的高可用性。

leader和follower的同步机制:

写数据的时候,生产者就写 leader,然后 leader将数据落地写本地磁盘,接着其他 follower 自己主动从 leader来pull数据。一旦所有 follower同步好数据了,就会发送 ack给 leader,leader收到所有 follower的 ack之后,就会返回写成功的消息给生产者。

消费的时候,只会从 leader去读,但是只有一个消息已经被所有 follower都同步成功返回 ack的时候,这个消息才会被消费者读到。

消息队列重复数据

MQ 只能保证消息不丢,不能保证重复发送

Kafka 消费端可能出现的重复消费问题

每条消息都有一个 offset 代表 了这个消息的顺序的序号,按照数据进入 kafka的顺序,kafka会给每条数据分配一个 offset,代表了这个是数据的序号,消费者从 kafka去消费的时候,按照这个顺序去消费,消费者会去提交 offset,就是告诉 kafka已经消费到 offset=153这条数据了 ;zk里面就记录了消费者当前消费到了 offset =几的那条消息;假如此时消费者系统被重启,重启之后,消费者会找kafka,让kafka把上次我消费到的那个地方后面的数据继续给我传递过来。

在这里,我为大家准备了一份2020年最新最全的《Java面试题及答案V3.0》,这套电子书涵盖了诸多后端技术栈的面试题和答案,相信可以帮助大家在最短的时间内复习Java后端的大多数面试题,从而拿到自己心仪的offer。

截了张图,大家可以仔细查看左边的菜单栏,覆盖的知识面真的很广,而且质量都很不错。

资料获取方法

  1. 扫描下方二维码

  2. 后台回复关键词:Java核心整理

重复消息原因:(主要发生在消费者重启后)

消费者不是说消费完一条数据就立马提交 offset的,而是定时定期提交一次 offset。消费者如果再准备提交 offset,但是还没提交 offset的时候,消费者进程重启了,那么此时已经消费过的消息的 offset并没有提交,kafka也就不知道你已经消费了 offset= 153那条数据,这个时候kafka会给你发offset=152,153,154的数据,此时 offset = 152,153的消息重复消费了

保证 MQ 重复消费幂等性

幂等:一个数据或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。
思路:

  • 拿数据要写库,首先检查下主键,如果有数据,则不插入,进行一次update

  • 如果是写 redis,就没问题,反正每次都是 set ,天然幂等性

  • 生产者发送消息的时候带上一个全局唯一的id,消费者拿到消息后,先根据这个id去 redis里查一下,之前有没消费过,没有消费过就处理,并且写入这个 id 到 redis,如果消费过了,则不处理。

  • 基于数据库的唯一键

保证 MQ 消息不丢

MQ 传递非常核心的消息,比如:广告计费系统,用户点击一次广告,扣费一块钱,如果扣费的时候消息丢了,则会不断少钱,积少成多,对公司是一个很大的损失。

RabbitMQ可能存在的数据丢失问题

  • 生产者写消息的过程中,消息都没有到 rabbitmq,在网络传输过程中就丢了。或者消息到了 rabbitmq,但是人家内部出错了没保存下来。

  • RabbitMQ 接收到消息之后先暂存在主机的内存里,结果消费者还没来得及消费,RabbitMQ自己挂掉了,就导致暂存在内存里的数据给搞丢了。

  • 消费者消费到了这个消费,但是还没来得及处理,自己就挂掉了,RabbitMQ 以为这个消费者已经处理完了。

问题 1解决方案:

事务机制:(一般不采用,同步的,生产者发送消息会同步阻塞卡住等待你是成功还是失败。会导致生产者发送消息的吞吐量降下来)

    channel.txSelect
try {
    //发送消息
} catch(Exception e){
    channel.txRollback;
    //再次重试发送这条消息
} 
    channel.txCommit;

confirm机制:(一般采用这种机制,异步的模式,不会阻塞,吞吐量会比较高)

  • 先把 channel 设置成 confirm 模式

  • 发送一个消息到 rabbitmq

  • 发送完消息后就不用管了

  • rabbitmq 如果接收到了这条消息,就会回调你生产者本地的一个接口,通知你说这条消息我已经收到了

  • rabbitmq 如果在接收消息的时候报错了,就会回调你的接口,告诉你这个消息接收失败了,你可以再次重发。

public void ack(String messageId){

}

public void nack(String messageId){
    //再次重发一次这个消息
}

问题 2 解决方案:

持久化到磁盘

  • 创建queue的时候将其设置为持久化的,这样就可以保证 rabbitmq持久化queue的元数据,但是不会持久化queue里的数据

  • 发送消息的时候将 deliveryMode 设置为 2,将消息设置为持久化的,此时 rabbitmq就会将消息持久化到磁盘上去。必须同时设置 2 个持久化才行。

  • 持久化可以跟生产者那边的 confirm机制配合起来,只有消息被持久化到磁盘之后,才会通知生产者 ack了 ,所以哪怕是在持久化到磁盘之前 ,rabbitmq挂了,数据丢了,生产者收不到 ack,你也可以自己重发。

缺点:可能会有一点点丢失数据的可能,消息刚好写到了 rabbitmq中,但是还没来得及持久化到磁盘上,结果不巧, rabbitmq挂了,会导致内存里的一点点数据会丢失。更多面试题:面试鹅厂,我被虐的体无完肤

问题 3 解决方案:

原因:消费者打开了 autoAck机制(消费到一条消息,还在处理中,还没处理完,此时消费者自动 autoAck了,通知 rabbitmq说这条消息已经消费了,此时不巧,消费者系统宕机了,那条消息丢失了,还没处理完,而且 rabbitmq还以为这个消息已经处理掉了)

解决方案:关闭 autoAck,自己处理完了一条消息后,再发送 ack给 rabbitmq,如果此时还没处理完就宕机了,此时rabbitmq没收到你发的ack消息,然后 rabbitmq 就会将这条消息重新分配给其他的消费者去处理。

Kafka 可能存在的数据丢失问题

消费端弄丢数据

原因:消费者消费到那条消息后,自动提交了 offset,kafka以为你已经消费好了这条消息,结果消费者挂了,这条消息就丢了。

例子:消费者消费到数据后写到一个内存 queue里缓存下,消息自动提交 offset,重启了系统,结果会导致内存 queue 里还没来得及处理的数据丢失。

解决方法:kafka会自动提交 offset,那么只要关闭自动提交 offset,在处理完之后自己手动提交,可以保证数据不会丢。但是此时确实还是会重复消费,比如刚好处理完,还没提交 offset,结果自己挂了,此时肯定会重复消费一次 ,做好幂等即可。

Kafka 丢掉消息

原因:kafka 某个 broker 宕机,然后重新选举 partition 的 leader时,此时其他的 follower 刚好还有一些数据没有同步,结果此时 leader挂了,然后选举某个 follower成 leader之后,就丢掉了之前leader里未同步的数据。

例子:kafka的leader机器宕机,将 follower 切换为 leader之后,发现数据丢了
解决方案:(保证 kafka broker端在 leader发生故障,或者leader切换时,数据不会丢)

  • 给 topic设置 replication.factor ,这个值必须大于 1,保证每个 partition 必须至少有 2 个副本

  • 在 kafka 服务端设置 min.insync.replicas 参数,这个值必须大于 1,这个是要求一个leader至少感知到有至少一个follower还跟自己保持联系,没掉队,这样才能确保 leader挂了还有一个follower,保证至少一个 follower能和leader保持正常的数据同步。

  • 在 producer 端设置 acks =all,这个是要求每条数据,必须是写入所有 replica 之后,才能认为是写成功了。否则会生产者会一直重试,此时设置 retries = MAX(很大的重试的值),要求一旦写入失败,就卡在这里(避免消息丢失)

  • kafka 生产者丢消息

按 2 的方案设置了 ack =all,一定不会丢。它会要求 leader 接收到消息,所有的 follower 都同步 到了消息之后,才认为本次写成功。如果没满足这个条件,生产者会无限次重试 。

消息队列顺序性

背景:mysql binlog 同步的系统,在mysql里增删改一条数据,对应出来了增删改 3 条binlog,接着这 3 条binlog发送到 MQ 里面,到消费出来依次执行,起码是要保证顺序的吧,不然顺序变成了 删除、修改、增加。日同步数据达到上亿,mysql->mysql,比如大数据 team,需要同步一个mysql库,来对公司的业务系统的数据做各种复杂的操作。

场景:

  • rabbitmq,一个queue,多个consumer,这不明显乱了

  • kafka,一个topic,一个partition,一个consumer,内部多线程,这不也乱了

RabbitMQ 消息顺序错乱

RabbitMQ 如何保证消息顺序性

需要保证顺序的数据放到同一个queue里

Kafka 消息顺序错乱

写入一个 partition中的数据一定是有顺序的。

生产者在写的时候,可以指定一个 key,比如订单id作为key,那么订单相关的数据,一定会被分发到一个 partition中区,此时这个 partition中的数据一定是有顺序的。Kafka 中一个 partition 只能被一个消费者消费。消费者从partition中取出数据的时候 ,一定是有顺序的。

Kafka 保证消息顺序性

如果消费者单线程消费+处理,如果处理比较耗时,处理一条消息是几十ms,一秒钟只能处理几十条数据,这个吞吐量太低了。肯定要用多线程去并发处理,压测消费者4 核 8G 单机,32 条线程,最高每秒可以处理上千条消息

消息队列延迟以及过期失效

消费端出了问题,不消费了或者消费极其慢。接着坑爹了,你的消息队列集群的磁盘都快写满了 ,都没人消费,怎么办?积压了几个小时,rabbitmq设置了消息过期时间后就没了,怎么办?

例如:

  • 每次消费之后都要写 mysql,结果mysql挂了,消费端 hang 不动了。

  • 消费者本地依赖的一个东西挂了,导致消费者挂了。

  • 长时间没处理消费,导致 mq 写满了。

场景:几千万条数据再 MQ 里积压了七八个小时

推荐福利:




快速处理积压的消息

一个消费者一秒是 1000 条,一秒 3 个消费者是 3000 条,一分钟是 18W 条,1000 多 W 条需要一个小时恢复。

步骤:

  • 先修复 consumer 的问题,确保其恢复消费速度,然后将现有的 consumer 都停掉

  • 新建一个topic,partition是原来的 10 倍,临时建立好原先 10 倍或者 20 倍的 queue 数量

  • 然后写一个临时的分发数据的 consumer 程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的 10 倍数量的 queue

  • 接着临时征用 10 倍的机器来部署 consumer,每一批 consumer 消费一个临时 queue 的数据

  • 这种做法相当 于是临时将 queue 资源和 consumer 资源扩大 10 倍,以正常 10 倍速度

  • 等快速消费完积压数据之后,恢复原先部署架构 ,重新用原先的 consumer机器消费消息

原来 3 个消费者需要 1 个小时可以搞定,现在 30 个临时消费者需要 10 分钟就可以搞定。

如果用的 rabbitmq,并且设置了过期时间,如果此消费在 queue里积压超过一定的时间会被 rabbitmq清理掉,数据直接搞丢。
这个时候开始写程序,将丢失的那批 数据查出来,然后重新灌入mq里面,把白天丢的数据补回来。

如果消息积压mq,长时间没被处理掉,导致mq快写完满了,你临时写一个程序,接入数据来消费,写到一个临时的mq里,再让其他消费者慢慢消费 或者消费一个丢弃一个,都不要了,快速消费掉所有的消息,然后晚上补数据。

如何设计消息队列中间件架构

  • mq要支持可伸缩性,快速扩容。设计一个分布式的 MQ,broker->topic->partition,每个 partition 放一个机器,就存一部分数据。如果现在资源不够,给 topic 增加 partition ,然后做数据迁移,增加机器。

  • mq数据落磁盘,避免进程挂了数据丢了,顺序写,这样就没有磁盘随机读写的寻址开销,磁盘顺序读写的性能是很高的,这个就是 kafka的思路。

  • mq高可用性。多副本->leader & follower-> broker 挂了重新选举 leader 对外提供服务

  • 支持数据 0 丢失。





END

后台回复“电子书” “资料” 领取一份干货,数百技术电子书等你开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。历史推荐裸辞4个月,面试了30家公司,终于找到了理想的工作
面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...
面试鹅厂,我被虐的体无完肤
面试阿里露馅被怼了!面试官:这简历一看就是包装过的
中文版开源!一份来自亚马逊工程师写的 Google 面试指南,太火了
面试环节:在浏览器输入xxxhub 回车之后发生了什么?(超详细版)
又要要饭了,点个在看吧
最新阿里P6-P7Java研发岗面经:技能要求+面试真题+经验总结! 阿里技术岗位体系结构: 最全阿里技术P系列解读:P5-P8的技能要求和薪资结构 技术四面面试题如下 一面(问了数据结构、jvm、锁等): 自我介绍和项目 HashMap底层如何实现? Hash一致算法? 说说HashMap和ConcurrentHashMap的区别?treemap和HashMap的区别? java的内存分区? java对象的回收方式,回收算法? CMS和G1了解吗? CMS解决什么问题,说一下回收的过程? CMS回收停顿了几次? java栈什么时候会内存溢出... 阅读详情

相关推荐

阿里三面,P9面试官是如何考察候选人的

这篇文章,给大家分享一个同学面试阿里某个部门时的经历

码上代码的博客 2万+

9 道 MQ 高频面试题总结

现在面试中 MQ 的问题也是必问,下面汇总了一些问题与答案。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 5320

【Unity动画系统】详解Root Motion动画在Unity中的应用(一)

什么时候勾选Bake into pose,当不希望动画带动游戏对象旋转时。在旋转的动画中一般是不用勾选的,因为就需要用它来带动我们的角色对象旋转。但在比如前进、后退、待机等动画来说,我们就可以勾选这里,以避免因动画文件本身的瑕疵而给我们带来的旋转。loop match:代表了这个动画在角度上的吻合度。如果这个动画在播放中转角过大,那么就会显示红色,告诉我们如果勾选bake into pose,则会带来不好的效果。

weixin_60154963的博客 6804

MQ相关面试题

文章目录你们项目中哪些地方有使用到 MQ ? 你们项目中哪些地方有使用到 MQ ? 使用 MQ 异步发送优惠券; 使用 MQ 异步发送通知(短信、邮件); 使用 MQ 异步扣库存 使用MQ异步审核贷款金额 使用MQ异步第三方接口(中国公民信息网) 为什么需要使用 MQ? 1.异步处理(多线程和 MQ) 2.实现解耦 3.流量削峰(MQ 可以实现抗高并发) 可以按场景简述,录单流程:用户手机端填写录单流程,服务端接收到请求信息后,存储数据库,响应客户录单成功,然后写一条消息到MQ中,具体生成整张保

Gblfy_Blog 7755

浏览器Cookie迁移实战:从Chrome导出导入登录态全攻略

Cookie是浏览器保存的会话凭证,服务端通过Set-Cookie将登录态种在本地。迁移Cookie本质上是把服务端认可的会话标识搬到新环境,从而免去重复输入账号密码和二次验证的麻烦。在换电脑、切浏览器或重装系统时,掌握Cookie的导出导入技术能显著提升效率。Chrome与Edge同属Chromium内核,存储结构相似,但字段差异(如Domain、SameSite、Secure)常导致迁移失败。通过浏览器扩展或CDP脚本可实现跨浏览器登录态迁移,适用于内网后台、开发环境等场景。本文从原理到实践,梳理Coo

weixin_42533120的博客 339

【机器学习(一)】从零到一:用sklearn构建你的第一个机器学习项目

本文为机器学习新手提供了一个完整的端到端实战指南。通过使用Python的scikit-learn库,以经典的鸢尾花数据集为例,详细演示了从环境搭建、数据探索、预处理、模型训练与评估,到超参数调优和模型保存的全流程。文章旨在帮助读者快速构建第一个机器学习项目,掌握核心工作流和工程实践。

weixin_29070861的博客 467

2023面试必备:消息队列核心17问深度解析(含Kafka/RocketMQ/RabbitMQ)

本文深度剖析MQ消息可靠性保障、顺序消费、幂等性设计等关键技术原理,详解Kafka/RocketMQ/RabbitMQ架构差异与选型策略,并给出亿级流量场景下的消息积压解决方案。

Zyw907155124的博客 2602

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

MQ常见面试题

消息堆积是指由于消费者处理速度不足,导致消息队列中积累了大量未处理的消息,从而影响消息的传输和处理。消息堆积可能导致消息的延迟、消息的丢失、消息队列的阻塞等问题。在消息队列中,保证消息的顺序性是一个比较复杂的问题,需要考虑多个方面的因素,例如消息生产和消费的速度、消息路由的算法、消息队列的分区方式等。消息队列是一种分布式系统中的通信方式,它通过异步传输消息的方式来解耦消息的生产者和消费者。消息堆积是指消息队列中积压的消息数量超过了系统的处理能力,导致消息处理速度变慢,甚至系统崩溃的现象。

lonely_baby的博客 5894

NVIDIA DRIVE SDK深度解析(一)——核心组件与安全架构设计

本文深度解析NVIDIA DRIVE SDK的核心组件与安全架构设计,涵盖DriveOS、加速库和应用框架三层架构,以及虚拟化与安全隔离机制。重点探讨了安全岛设计、媒体处理流水线和功能安全监控体系,为开发者提供自动驾驶系统开发的实战建议和性能优化技巧。

weixin_28704565的博客 565

[南大ICS-PA2]PA2 - 简单复杂的机器:冯诺依曼计算机系统

mips32和riscv32的指令长度只有32位, 因此它们不能像x86那样, 把C代码中的32位常数直接编码到一条指令中. 思考一下, mips32和riscv32应该如何解决这个问题?加载立即数到寄存器的高20位,然后便可以是哟给你标准的立即指令来创建32位常量。在程序分析领域中,静态指令是指程序代码中的指令,动态指令是指程序运行过程中的指令,例如对于一下指令序列。位域,在小端机器上,先定义的在每个字节的低位,后定义的在每个字节的高位。,这是处理非法指令的宏,其定义在。指令,而下一条动态指令则是。

qq_42474104的博客 928

【不一样的面经】阿里面试,我挂在了第四轮……

可能每个技术人都有个阿里梦,我也不例外。最近准备跳槽,前一阵子在准备各种面试,也面了几个大厂,包括阿里。是的,最后我挂在了第四轮。这篇文章来总结一下我在阿里四轮的面试经历,希望能对读者有所启发。 阿里社招一般有四到五轮,我这次的流程是第一轮技术面、第二轮写代码、第三轮boss面、第四轮boss面、第五轮HR面。然而我没能和HR聊上一句。 当时我在上海法院出差,第一轮是在周一晚上8点钟左右,我一看是...

2万+

Springboot+Vue 实现鸿蒙商城管理系统开发实践

通过使用 Springboot 和 Vue 技术栈,我们成功实现了鸿蒙商城管理系统的开发。系统具备用户管理、商品管理、订单管理、库存管理和统计分析等功能,支持 Web 端和鸿蒙端的访问和操作。在开发过程中,我们充分利用了 Springboot 的快速开发优势和 Vue 的组件化开发特点,提高了开发效率和系统的可维护性。同时,通过与鸿蒙设备的集成,实现了多设备之间的数据交互和协同工作,提升了用户体验。

ZXJ_SXT的博客 1324

面试阿里,我还是挂在了第四轮……

作者 | 倪升武责编| 郭 芮可能每个技术人都有个阿里梦,我也不例外。最近准备跳槽,前一阵子在准备各种面试,也面了几个大厂,包括阿里。是的,最后我挂在了第四轮。这篇...

优快云资讯 1万+

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

今天面了个阿里拿 38K 出来的,让我见识到了基础的天花板

人人都有大厂梦,对于程序员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。同样的,小编的好朋友的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是朋友分享的这次面试阿里 P6 的一些经历和心得。现在很多程序员,都会陷入到一个怪圈:看到别人升职加薪,又觉得为啥别人运气总是那么好,我和他差不多时间进公司的啊!

javaAnPou的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

面试阿里P6,过关斩将直通2面,结果3面找了个架构师来吊打我?

前言 人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。 同样的,我自己的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是我这次面试阿里P6的一些经历和心得。 阿里P6岗面试经历 这次阿里的面试经历实在太紧张+刺激+尴尬了,面试前还自信满满,面试后被吊打得怀疑人生。整个.

AMSRY的博客 2156

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

三面面阿里只为P7,过关斩将成功通过2面,结果3面找来个架构师,只为吊打我

前言 人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。 同样的,我自己的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是我这次面试阿里P7的一些经历和心得。 阿里P7岗面试经历 这次阿里的面试经历实在太紧张+刺激+尴尬了,面试前还自信满满,面试后被吊打得怀疑人生。整个流程是四面

文章中资料均可获取,有需要请添加yunduoa2019即可 233

刺激!阿里P6岗3面惊险之旅,p8大佬也没把我“干掉”

前言 人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。 同样的,我自己的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是我这次面试阿里P6的一些经历和心得。 阿里P6岗面试经历 这次阿里的面试经历实在太紧张+刺激+尴尬了,面试前还自信满满,面试后被吊打得怀疑人生。整..

m0_50180963的博客 312

阿里 P9 级面试官是如何 360° 无死角考察候选人的?

作者 |中华石杉 责编 | 伍杏玲 本文经授权转载自石杉的架构笔记 这篇文章,给大家分享一个同学面试阿里某个部门时的经历。 简单说一下这个同学面试的背景,本身技术底子还不错,在几个有一定知名度的中型互联网公司工作过,然后之前打算尝试一下阿里的职位,就去面试了。 第一轮和第二轮面试,全部都通过了,面试官评价也是基本技术素养还可以,基础也不错,定级都是P6+的职级。 但是第三面是...

优快云资讯 4万+

面试个阿里P6,直通2面,结果3面被架构师吊打

前言 人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。 同样的,我自己的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是我这次面试阿里P6的一些经历和心得。 阿里P6岗面试经历 这次阿里的面试经历实在太紧张+刺激+尴尬了,面试前还自信满满,面试后被吊打得怀疑人生。整个.

weixin_50666791的博客 253

2021最新分享阿里P6面经及心得

前言 人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。 同样的,我自己的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是我这次面试阿里P6的一些经历和心得。 阿里P6岗面试经历 这次阿里的面试经历实在太紧张+刺激+尴尬了,面试前还自信满满,面试后被吊打得怀疑人生。整个.

Java6888的博客 1215

阿里Java岗最新面经分享——四面阿里定级P7,聊聊我是如何做到的

原文链接:https://blog.youkuaiyun.com/GYHYCX/article/details/104029436 写在前面 背景 先说下个人情况吧,二本毕业,之前在一家中长工作3年左右,面试阿里也是一个偶然。 公司嘛大家都懂的,最后想着另谋发展,目光渐渐的投向了阿里,光看是肯定进不去的,我先将阿里的招聘需求给下载了下来,根据这些招聘需求,我总结出了一些面试必问的技术:多线程、JVM 、设计模式等等 误入歧途 面过大厂的朋友都知道,这些大厂面试不是说靠背面试题就能进去的。我根据这些面试.

从2026-09-21开始专注于AI,以前是后端研发、大数据研发等 382

四面阿里经验总结,月薪36K定级P7(含面试题答案)

阿里技术岗位要求及体系图: 好多人对阿里巴巴技术岗的体系结构及级别的技术要求设置不太清楚,想去面试也不知道面试什么级别的岗位,下面说说阿里的技术体系又是一个怎么样的水平划分! 阿里P6(技术主管) 工作要求: 能独立解决问题,制定系统的技术实现方案,考核会涉及部分技术深度。 技能要求: 除P5的技能外,还需掌握以下技能,以下技能至少需要做到熟悉。架构设计,运维能力,操作系统。 技术四面面试题如下 一面(问了数据结构、jvm、锁等): 自我介绍和项目 HashMap底层如何实现?.

weixin_48726357的博客 3141

阿里P9首次公开:阿里面试官都问些什么?

金三银四求职季,相信大家都在摩拳擦掌。就目前国内的面试模式来讲,在面试前积极复习整个 Android 知识体系将变得非常重要,复习准备的是否充分,将直接影响你入职的成功率。 但很多小伙伴却苦于没有合适的资料来回顾整个 Android 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。那么现在,你们的机会来了!!! 学习路线&思路 大家可以先从下面几个方面来准备技术面试,如下示例,非常详细!!! 泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶 注解原理丶注解原理丶序列化 Activity知

老皮的博客 652
上一篇: 30个提高开发效率的Visual Studio Code插件
下一篇: 提高Github下载速度的方法「100%有效」可达到2MB/s
DevolperFront
博客等级 码龄8年 464粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值