「javamq面试题」java面试 题
本篇文章给大家谈谈javamq面试题,以及java面试 题对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、RabbitMQ面试题:如何解决消息的顺序问题? --- 2022-04-03
- 2、RocketMQ 顺序消费
- 3、Java和MQ问题:JMS中的进入了OnMessage方法,是否就等于消费了这个MQ消息,还是有其它机制?
- 4、java一面和二面什么区别
- 5、java去公司工作用到的是哪方面的知识?
RabbitMQ面试题:如何解决消息的顺序问题? --- 2022-04-03
RabbitMQ的消息顺序问题,需要分三个环节看待,发送消息的顺序、队列中消息的顺序、消费消息的顺序。
消息发送端的顺序,大部分业务不做要求,谁先发消息无所谓,如果遇到业务一定要发送消息也确保顺序,那意味着,只能全局加锁一个个的操作,一个个的发消息,不能并发发送消息。
RabbitMQ中,消息最终会保存在队列中,在同一个队列中,消息是顺序的,先进先出原则,这个由Rabbitmq保证,不同队列中的消息顺序,是没有保证的,例如:进地铁站的时候,排了三个队伍,不同队伍之间的,不能确保谁先进站。
在多个消费者消费同一个消息队列的场景,通常是无法保证消息顺序的。
例如:消息A、B、C按顺序进入队列,消费者A1拿到消息A、消费者B1拿到消息B, 结果消费者B执行速度快,就跑完了,又或者消费者A1挂了,都会导致消息顺序不一致。
解决消费顺序的问题,通常就是一个队列只有一个消费者
这样就可以一个个消息按顺序处理,缺点就是并发能力下降了,无法并发消费消息,这是个取舍问题。
RocketMQ 顺序消费
对于所有的 MQ 来说,必问的一道面试题就是 RocketMQ 顺序消息怎样做?原理是什么?
首先我们要明确什么顺序消费,顺序消费的定义是什么?我所理解的顺序消费,指的针对某一类消息,比如都是订单A 的消息来说,它的消费有先后顺序,类似于 FIFO。假设订单 A 有创建、付款、完成这几类消息,我们对于订单 A 的消息,必须要满足先消费创建,其次是付款,最后是完成。
所以针对整个链路来说,我们不仅需要塞的时候是有序的,消费的时候也应该做到有序。就算是以 FIFO 顺序塞进去,消费如果使用多线程同时消费同一个 ConsumerQueue 且同时能消费多个消息,那必然做不到有序。接下来,会从 provider、consumer 两个方面说明如何做到有序。
首先针对顺序消息,生产者可以是多线程的,只要保证每个线程发的是不同类型的消息(如发生不同订单的消息),那么在不同的分区就可以保证有序;
针对 provider 来说,RocketMQ 提供了发送顺序消息的方式,即 MessageQueueSelector:
provider 在发送的时候,只要选择消息发送到那个 ConsumerQueue 即可。比如订单来说,使用订单 id 作为 key 选择队列,那么同一个订单的消息必定能发送到同一个队列。
所以 provider 的顺序发送异常简单。
针对 consumer 来说,需要使用 MessageListenerOrderly 来消费消息:
consumer 顺序消费的原理也很简单。消费者消费消息的时候,会有一个 PullMessageService 拉取线程(单线程)拉取消息,然后放入到 processQueue(每个消费队列对应一个 processQueue) 中,因为是单线程拉取的,对于同一个队列的消息(虽然消费者可以订阅多个队列,但是对于同一个队列是有序的)是有序的。在放入 processQueue 之后,会调用 ConsumeMessageConcurrentlyService 或 ConsumeMessageOrderlyService 来进行消费,这里是调用 ConsumeMessageOrderlyService 进行消费。ConsumeMessageOrderlyService 在消费的时候,会先获取每一个 ConsumerQueue 的锁,然后从 processQueue 获取消息消费,这也就意味着,对于每一个 ConsumerQueue 的消息来说,消费的逻辑也是顺序的。
不能更换MessageQueue重试就需要MessageQueue有自己的副本,通过Raft、Paxos之类的算法保证有可用的副本,或者通过其他高可用的存储设备来存储MessageQueue。
热点问题好像没有什么好的解决办法,只能通过拆分MessageQueue和优化路由方法来尽量均衡的将消息分配到不同的MessageQueue。
消费并行度理论上不会有太大问题,因为MessageQueue的数量可以调整。
消费失败的无法跳过是不可避免的,因为跳过可能导致后续的数据处理都是错误的。不过可以提供一些策略,由用户根据错误类型来决定是否跳过,并且提供重试队列之类的功能,在跳过之后用户可以在“其他”地方重新消费到这条消息。
其实对于所谓的顺序消费来说,本质上是类似于一个状态机的行为,比如一个订单先创建,后付款、最后结束的行为,完全可以定义一个状态,而且发生的顺序是有先后的。所以完全不必要使用什么顺序消费,可以先创建,把创建消息塞到 mq,从 mq 获取到创建消息消费,然后创建一个付款消息,再塞到 mq。然后从 mq 消费付款消息,然后标识订单结束。完全可以用一个状态机 + mq + db 来做,更加稳定通用。
Java和MQ问题:JMS中的进入了OnMessage方法,是否就等于消费了这个MQ消息,还是有其它机制?
MQ有两种消息:queue和topic
如果用queue的话只会有一个被消息;topic都有消费
java一面和二面什么区别
下面列出了一面问到的问题:
synchronized与lock的区别,使用场景。看过synchronized的源码没
JVM自动内存管理,Minor GC与Full GC的触发机制
了解过JVM调优没,基本思路是什么
如何设计存储海量数据的存储系统
缓存的实现原理,设计缓存要注意什么
淘宝热门商品信息在JVM哪个内存区域
操作系统的页式存储
volatile关键字的如何保证内存可见性
happen-before原则
Lucene全文搜索的原理
阿里二面
下面是面试过程中的问题:
自我介绍下自己,不超过3分钟(我的自我介绍仍然不超过1分钟)
你说你熟悉并发编程,那么你说说Java锁有哪些种类,以及区别(果然深度不一样)
如何保证内存可见性
Http请求的过程与原理
TCP连接的特点
TCP连接如何保证安全可靠的
为什么TCP连接需要三次握手,两次不可以吗,为什么
AOP的原理
动态代理与cglib实现的区别(这个,醉得很厉害)
那么你说说代理的实现原理呗
看过Spring源码没,说说Ioc容器的加载过程吧
阿里三面(总监面)
先问项目,从项目问起
了解什么分布式数据一致性算法,具体说说
MySQL事务隔离级别以及MVCC机制
Redis缓存雪崩、缓存穿透以及如何解决?
问了设计秒杀系统
说说同步和异步,什么时候用同步,什么时候用异步
mysql的innodb索引数据结构为什么是b+树,用hash来实现可以吗?
分布式事务的实现?
如何解决redis和mysql数据一致性?
常见的MySQL主从同步方案有哪些?优劣势比较过?
阿里四面(总监面)
自我介绍
手画自己项目架构图,然后针对架构和中间件提问
四面总结
一面和二面总结
一面大概面了50多分钟,可以看出一面的问题不是很难,但是要得到面试官比较高的评价,还是需要一-定的表达能力和对技术比较本质的认识的,如果在回答问题的时候能够做一些适当的扩展,自然会让面试官对你有不一样的评价。
二面面试官问的问题都比较直接,答案也是知道就知道,不知道就不知道。这些问题-部分是基础,一部分是根据你的专业技能的来提问的。面完后面试官对我的评价是:中规中矩,有机会下次面试。虽说是中规中矩,但听到面试官说有机会下次面试就感觉这次面试应该过了。
三面总结
三面是交叉面,没想到是阿里的总监面试。由于具体的技术问题在前两轮面试中已经问过了,所以三面后不会有具体的技术问题,总结来看,对自己做过的项目一定要深入,包括使用使用到的技术原理、为什么要使用这些技术。
针对项目,面试官关注的无非以下几点:
1.项目中某个比较重要的点是如何实现的(需要深入技术的原理)
2.遇到的最大困难是什么(有哪些),你怎么解决的?
3.如果需要扩展某个功能,如何降低系统的耦合度
4.如果针对某个功能进行优化,你会怎么设计和优化
四面总结
虽然这面比较轻松,也没有什么具体的技术问题,但对项目仍然是面试官关注的,后面了解到总监面除了看你的基础,主要看你的潜力(就是有没有培养的价值),这个东西看起来挺虚的,但是从你平时的学习中仍然是可以看得出来的。所以,作为一名开发人员。平时对技术的研究也是很重要的
最后
其实一步一步走过来,不单单只靠面试之前刷题那么简单,更多的还是平时的积累。小编整理出一篇Java进阶架构师之路的核心知识,同时也是面试时面试官必问的知识点,篇章也是包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日志、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等
想要免费获取这份完整版文档的朋友,点赞、关注、转发之后,私信【学习】即可免费获取
最后是总重要的技能环节,分享给大家一份核心面试文档
JavaOOP
Java集合/泛型
由于篇幅限制,无法全部展现出来,文末有完整版获取方式
Java异常
Java中的IO与NIO
Java反射
Java序列化
什么是java序列化,如何实现java序列化?
保存(持久化)对象及其状态到内存或者磁盘
序列化对象以字节数组保持-静态成员不保存
序列化用户远程对象传输
Serializable 实现序列化
writeObject 和 readObject 自定义序列化策略
序列化 ID
序列化并不保存静态变量
Transient 关键字阻止该变量被序列化到文件中
序列化(深 clone 一中实现)
多线程并发
JAVA 并发知识库
Java中实现多线程有几种方法
继承 Thread 类
实现 Runnable 接口。
ExecutorService、 Callable、 Future 有返回值线程
基于线程池的方式
4 种线程池
如何停止一个正在运行的线程
notify()和notifyAll()有什么区别?
sleep()和wait() 有什么区别?
volatile 是什么?可以保证有序性吗?
JVM
java中会存在内存泄漏吗,请简单描述。
64 位 JVM 中,int 的长度是多数?
Serial 与 Parallel GC 之间的不同之处?
32 位和 64 位的 JVM,int 类型变量的长度是多数?
Java 中 WeakReference 与 SoftReference 的区别?
JVM 选项 -XX:+UseCompressedOops 有什么作用?为什么要使用
怎样通过 Java 程序来判断 JVM 是 32 位 还是 64位?
32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?
JRE、JDK、JVM 及 JIT 之间有什么不同?
解释 Java 堆空间及 GC?
Mysql
数据库存储引擎
InnoDB(B+树)
TokuDB( Fractal Tree-节点带数据)
Memory
数据库引擎有哪些
InnoDB与MyISAM的区别
索引
常见索引原则有
数据库的三范式是什么
第一范式(1st NF - 列都是不可再分)
Redis
什么是 Redis?
Redis 与其他 key-value 存储有什么不同?
Redis 的数据类型?
使用 Redis 有哪些好处?
Redis 相比 Memcached 有哪些优势?
Memcache 与 Redis 的区别都有哪些?
Redis 是单进程单线程的?
一个字符串类型的智能存储最大容量是多少?
Redis持久化机制
缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
Memcached
Memcached 是什么,有什么作用?
memcached 服务在企业集群架构中有哪些应用场景?
Memcached 服务分布式集群如何实现?
Memcached 服务特点及工作原理是什么?
简述 Memcached 内存管理机制原理?
memcached 是怎么工作的?
memcached 最大的优势是什么?
memcached 和 MySQL 的 query
memcached 和服务器的 local cache(比如 PHP 的 APC、mmap 文件等)相比,有什么优缺点?
memcached 的 cache 机制是怎样的?
memcached 如何实现冗余机制?
MongoDB
mongodb是什么?
mongodb有哪些特点?
你说的NoSQL数据库是什么意思?NoSQL与RDBMS直接有什么区别?为什么要使用和不使用NoSQL数据库?说一说NoSQL数据库的几个优点?
NoSQL数据库有哪些类型?
MySQL与MongoDB之间最基本的差别是什么?
你怎么比较MongoDB、CouchDB及CouchBase?
MongoDB成为最好NoSQL数据库的原因是什么?
journal回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?
分析器在MongoDB中的作用是什么?
名字空间(namespace)是什么?
Spring
不同版本的 Spring Framework 有哪些主要功能?
什么是 Spring Framework?
列举 Spring Framework 的优点。
Spring Framework 有哪些不同的功能?
Spring Framework 中有多少个模块,它们分别是什么?
什么是 Spring 配置文件?
Spring 应用程序有哪些不同组件?
使用 Spring 有哪些方式?
什么是 Spring IOC 容器?
什么是依赖注入?
Spring Boot
什么是 Spring Boot?
为什么要用SpringBoot
Spring Boot 有哪些优点?
Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
运行Spring Boot有哪几种方式
如何理解 Spring Boot 中的 Starters?
如何在Spring Boot启动的时候运行一些特定的代码?
Spring Boot 需要独立的容器运行吗?
Spring Boot中的监视器是什么?
如何使用Spring Boot实现异常处理?
Spring Cloud
什么是 Spring Cloud?
使用 Spring Cloud 有什么优势?
服务注册和发现是什么意思?Spring Cloud 如何实现?
负载平衡的意义什么?
什么是 Hystrix?它如何实现容错?
什么是 Hystrix 断路器?我们需要它吗?
什么是 Netflix Feign?它的优点是什么?
什么是 Spring Cloud Bus?我们需要它吗?
什么是微服务
什么是服务熔断?什么是服务降级
RabbitMQ
什么是 rabbitmq
为什么要使用 rabbitmq
使用 rabbitmq 的场景
如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
如何避免消息重复投递或重复消费?
消息基于什么传输?
消息如何分发?
消息怎么路由?
如何确保消息不丢失?
使用 RabbitMQ 有什么好处?
Dubbo
为什么要用 Dubbo?
Dubbo 的整体架构设计有哪些分层?
默认使用的是什么通信框架,还有别的选择吗?
服务调用是阻塞的吗?
一般使用什么注册中心?还有别的选择吗?
默认使用什么序列化框架,你知道的还有哪些?
服务提供者能实现失效提出是什么原理?
服务上线怎么不影响旧版本?
如何解决服务调用链过长的问题?
说说核心的配置有哪些?
MyBatis
什么是 Mybatis?
Mybaits 的优点
MyBatis 框架的缺点
MyBatis 框架适用场合
MyBatis 与 Hibernate 有哪些不同?
#{}和${}的区别是什么?
当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
模糊查询 like 语句该怎么写?
通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?
如何获取自动生成的(主)键值?
ZooKeeper
什么是Zookeeper?
Zookeeper 如何保证了分布式一致性特性?
ZooKeeper 提供了什么?
Zookeeper 文件系统
ZAB 协议?
四种类型的数据节点 Znode
Zookeeper Watcher 机制 -- 数据变更通知
客户端注册 Watcher 实现
服务端处理 Watcher 实现
客户端回调 Watcher
数据结构
栈(stack)
队列(queue)
链表(Link)
散列表(Hash Table)
排序二叉树
前缀树
红黑树
B-TREE
位图
Elasticsearch
elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。
elasticsearch 的倒排索引是什么
elasticsearch 索引数据多了怎么办,如何调优,部署
elasticsearch 是如何实现 master 选举的
详细描述一下 Elasticsearch 索引文档的过程
详细描述一下 Elasticsearch 搜索的过程?
Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法
lucence 内部结构是什么?
Elasticsearch 是如何实现 Master 选举的?
Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一个 master,另外 10 个选了另一个 master,怎么办?
Kafka
Kafka 是什么
partition 的数据文件(offset, MessageSize, data)
数据文件分段 segment(顺序读写、分段命令、二分查找)
负载均衡(partition 会均衡分布到不同 broker 上)
批量发送
压缩(GZIP 或 Snappy)
消费者设计
Consumer Group
如何获取 topic 主题的列表
生产者和消费者的命令行是什么?
微服务
微服务架构有哪些优势?
微服务有哪些特点?
设计微服务的最佳时间是什么?
微服务架构如何运作?
微服务架构的优缺点是什么?
单片,SOA 和微服务架构有什么区别?
在使用微服务架构时,您面临哪些挑战?
SOA 和微服务架构之间的主要区别是什么?
微服务有什么特点?
Linux
绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?
怎么查看当前进程?怎么执行退出?怎么查看当前路径?
怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当
Ls 命令执行什么功能? 可以带哪些参数,有什么区别?
查看文件有哪些命令
列举几个常用的Linux命令
你平时是怎么查看日志的?
建立软链接(快捷方式),以及硬链接的命令
目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
查看文件内容有哪些命令可以使用?
面试,难还是不难?最终结果好还是不好?取决于面试者的底蕴(气场+技能)、心态和认知以及沟通技巧。而一些主流的大型互联网公司面试(阿里巴巴、京东、美团、滴滴)更是需要你在面试时展现出自己的能力,从而获得面试官的欣赏和肯定。
而程序员在应聘时更是需要经历层层面试。俗话说,磨刀不误砍柴工,做好面试前的准备工作可以帮助大家更好的应对面试官的问题以及面试中的突发情况。
不用出国也能买到60多万的真皮腰带!机会难得,快来试试
精选推荐
广告

面试题2
104阅读·0评论·0点赞
2020年11月25日
66个求职应聘技巧性问答(三)
955阅读·0评论·0点赞
2015年5月26日
凯捷Java二面问题总结
84阅读·1评论·0点赞
2022年10月24日
程序员面试中一面、二面、三面有什么区别?
2697阅读·1评论·3点赞
2023年1月5日
纯干货分享!百度Java一、二、三面面经总结,本人已成功拿到offer!
5987阅读·7评论·8点赞
2021年4月11日
Java 虚拟机系列一:一文搞懂 JVM 架构和运行时数据区
460阅读·2评论·0点赞
2020年1月23日
阿里后端开发Java面经,附上我的面试真题复盘,希望对大家有帮助!
1429阅读·0评论·0点赞
2021年4月22日
华为OD(外包)社招技术二面,总结复盘
1.4W阅读·4评论·7点赞
2020年9月28日
java二面技术面试经验_网易java开发面试:一面+二面+三面以及 面试经验总结
280阅读·0评论·0点赞
2021年3月1日
java一面和二面_钉钉面经,Java面试题,一面二面整理
268阅读·0评论·0点赞
2021年3月10日
阿里Java研发2面,都会问什么?斩获阿里P6+的“他”告诉你答案
200阅读·2评论·0点赞
2021年5月19日
网易java程序员面试_网易Java程序员两轮面试 请问你能答对几个?
106阅读·0评论·0点赞
2021年3月8日
java二面问什么_java面试题,拼多多面试题分享(java二面)
2792阅读·0评论·1点赞
2021年3月11日
阿里高级Java面试题(首发,70道,带详细答案)
408阅读·0评论·0点赞
2022年8月19日
四年开发,待业半年本想放弃Java,抱着试试的心态面试某C轮金融科技公司居然过了!
1866阅读·18评论·6点赞
2020年11月21日
阿里第2面,都会问什么?
1426阅读·0评论·0点赞
2019年11月15日
阿里二面(主问项目和开发性问题)
875阅读·0评论·0点赞
2018年7月28日
阿里java研发岗五面(HR面+技术四面),附面试路线分享!
372阅读·0评论·1点赞
2021年7月26日
华为技术支持面试
7450阅读·1评论·3点赞
2011年11月18日
去首页
看看更多热门内容
评论1

jiasiyan

赞
请问大佬,校招不会问得这么难吧
java去公司工作用到的是哪方面的知识?
小公司做小项目一般都用SSH+jsp大公司做项目都是根据不同的项目 采取不同的框架技术,比如银行大部分都用 EJB等
第一:先学习Java的核心库(JavaSE)
JavaSE的内容包括:环境搭建、基础语法、面向对象、数组、集合、常用类、IO流、反射机制、网络编程……..
第二:MySQL数据库
搞定一门数据库相关的课程,例如:MySQL、Oracle,搞定一个就可以了,目前互联网公司,例如:京东、阿里等,他们都在使用MySQL,所以建议大家学习MySQL数据库,小巧轻盈,免费,由于互联网公司的项目访问量比较大,所以一般会搭建数据库的集群,可以一个数据库不够,所以需要搭建数据库集群,为了应付高并发。(搭建的比较多的时候,免费就很重要了。)
第三:WEB前端
以后从事Java开发,从事JavaEE开发,主要开发的系统结构是B/S结构的,B指的是Browser,S指的是Server。要开发这种系统,B端要会,S端也要精通。WEB前端的学习就是学习B端技术。包括:HTML 、CSS、JavaScript(JS)、jQuery框架(底层对JS进行了封装)…
第四:WEB后端(JavaWEB)
WEB后端其实可以是很多种不同的编程语言,例如:PHP、C、C++、Java,他们都可以进行WEB后端的开发,我们既然选择了比较火爆的Java,那么我们学习的后端一定是基于Java语言实现的,包括:Servlet、Filter、Jsp、EL、JSTL、MVC架构模式、数据库连接池(阿里巴巴的Druid连接池)、代理模式(动态代理)。另外后端学习了之后,还要学习一个异步编程技术AJAX。(完成网页的局部刷新,AJAX其实不属于后端,是前端浏览器上的程序。)
学习到这里为止,表示Java基本/基础的技术已经学完了。但是这些最基层的技术在实际的开发中不会使用的,一般为了开发效率,都会使用大量的提前封装好的框架。
第五:最好能够停留下来,做一个项目。
这个项目最好能将之前所学全部串起来。(对以前的知识点进行巩固。)
这个项目最好是基于:Servlet + Jsp+AJAX+jQuery+MySQL….
在这个项目的开发过程中:大家一定要记住,目前比较好的项目自动构建工具:Maven是一定要精通的。还有一个就是团队协作开发:Git/SVN是一定要会用的。(目前使用Git比较多一些。)
第六:学习高级框架
Spring、SpringMVC、MyBatis(持久层框架,这个框架互联网公司使用比较多,因为互联网项目需要进行SQL优化,MyBatis的SQL优化很方便,所以大部分都是使用MyBatis)
Struts2(很少使用了,使用这个的肯定是很老的项目)、Hibernate(传统企业,还有政府等可能会使用Hibernate。)
SpringBoot(新项目大部分使用的都是boot了。所以在项目中遇到还在使用SSM的一般都是遗留项目。)
当你走到这里之后,基本上你可以出山了。(去找工作,8K的薪资应该问题不大,但前提是你学的好。学习的深度够了,广度够了。)
第七:最好能有一个大型项目是使用框架来完成的。
SpringBoot做一个项目。
Spring SpringMVC MyBatis做一个项目。
这个项目最好是找几个人搭伙做一下。体验一下团队协作。(尤其是使用一些协作的工具。怎么沟通,怎么写日报,怎么开会,怎么使用Git,等等….)
第八:如果你的薪资想达到15K的话,你可能需要还要学习一些分布式相关的一些技术。
能够应付高并发的一些技术,例如:分布式框架Dubbo、SpringCloud、MQ、Nginx、Redis…..
java的知识体系构架
....祝 工作顺心 哈哈
javamq面试题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java面试 题、javamq面试题的信息别忘了在本站进行查找喔。