技术面试相关讨论 | Discussions about Technical-Interview #9
-
我个人平时会负责一些技术面试。面试过程中,经常碰到那些针对面试精心准备的人,比如,消息队列方面,候选人差不多都能答上这些标准答案。但是,这些答案不是我想听到的,我甚至曾经告诉面试者: 我不想听你看来的这些东西,我想听你思考的东西,你们具体在什么场景下用的MQ,如果不用MQ,你的项目又怎么设计?你思考一下你的XX项目,中间还有没有哪一块功能可以用上MQ?为什么?如果用了,你猜一下生产上可能出现什么故障?怎么解决?既然你知道他的作用是“解耦、消峰、异步”,那么在你简历中提到的XXX技术中(比如nginx,或者任何知识点),分别可以通过什么手段去做这三个目的?你在Java/Android/IOS中还见过类似的组件或者机制吗?他们怎么做的?为什么?你怎么看如何解决MQ中消息重复的问题?有必要对所有的消费者都做幂等吗?为什么?幂等在你们xx项目中,具体怎么实现。还有哪些情况你碰到过“消息重复”类似的问题?BASE理论里,如果涉及到MQ的场景,怎么设计?除了你说的这种设计,还有哪种设计?在你的xxx项目中应该怎么设计?为什么? 前面说了一大段,其实我想说的是,最好加上一个章节,告诉这些来取面经的人:哪怕你看完了这上面的内容,你仍然需要在工作中时时刻刻去思考和印证。 这些面经可以是你学习的目录,但是不是你学习的终点,对于优秀的公司和面试官来说,仅限于这些内容,收效甚微。 |
Beta Was this translation helpful? Give feedback.
Replies: 90 comments 12 replies
-
@blackdog1987 谢谢分享,这是一个很好的建议。 这一系列知识,我的定位一直都是“知识扫盲”,或许对大家面试、实际工作有所帮助,但光了解这些是远远不够的,平时工作中一定要注重思考。 我会直接将这个 discussion pin 在顶部,让读者看到来自于面试官的建议。 |
Beta Was this translation helpful? Give feedback.
-
最好是将项目经历,在项目中遇到的问题,遇到的坑,怎么解决的;让个人成长最快的一些案例;要有实际的落地的东西,能讲出来这些很细节的东西。 |
Beta Was this translation helpful? Give feedback.
-
@scholers 感谢分享。 |
Beta Was this translation helpful? Give feedback.
-
那我转行了 (;′⌒`) |
Beta Was this translation helpful? Give feedback.
-
@caojiantao 加油,朋友 |
Beta Was this translation helpful? Give feedback.
-
加油. 重要是要有自己的思考 |
Beta Was this translation helpful? Give feedback.
-
我也很想在工作有跟多的自己的思考,但是实际工作中很难是这样的,会很多很多各种问题,而且现在的社会每个人压力都这么大,烦躁的事情各种各样,,,,,,,,,,,,, |
Beta Was this translation helpful? Give feedback.
-
楼主的问题给了我当头一棒,提出的问题大部分都回答不了 继续努力! |
Beta Was this translation helpful? Give feedback.
-
没有经历过从小项目到大项目的整个过程,可能真的很难回答上面的问题 |
Beta Was this translation helpful? Give feedback.
-
@shanliangxiaomifeng 确实如此,很多时候需要经过大项目的实践,对问题和知识点才会有更深刻的理解。 |
Beta Was this translation helpful? Give feedback.
-
看过和用过是两回事,仅仅是看过深入问下去必然暴露。 |
Beta Was this translation helpful? Give feedback.
-
一定要有自己的思考,解决问题的思路。 |
Beta Was this translation helpful? Give feedback.
-
哪有那么多机会给人去历练, |
Beta Was this translation helpful? Give feedback.
-
能答上来起码看过了......起码看过了有了基础你才知道怎么去思考,要是没看过连思考的方向都没有..所以我觉得掌握这些理论知识还是很有必要啊,理论做基础,实践中求证,进步才快.事实上如果不看这些东西工作中大部分知识你都了解不到啊..起码对我一个初级研发人员来说是这样 |
Beta Was this translation helpful? Give feedback.
-
对于分库分表,我有一个疑问,就是分表的逻辑还是最终需要根据业务去考虑吧? 文档中按照订单id去取模分表,那么如果一个人的历史订单列表怎么办?从多个库多个表取?然后合并? |
Beta Was this translation helpful? Give feedback.
-
如何从大量的 URL 中找出相同的 URL?的分治策略没有考虑数据倾斜问题,可以补充一下 |
Beta Was this translation helpful? Give feedback.
-
这是来自QQ邮箱的假期自动回复邮件。您好,~您的邮件我已收到,谢谢!
|
Beta Was this translation helpful? Give feedback.
-
自动回复:您好,我是梁学凯,信已收到,
|
Beta Was this translation helpful? Give feedback.
-
这是来自QQ邮箱的假期自动回复邮件。
您好,邮件已收到。我将尽快给您回复。谢谢
|
Beta Was this translation helpful? Give feedback.
-
您好,我将尽快给您回复。
|
Beta Was this translation helpful? Give feedback.
-
这是来自QQ邮箱的假期自动回复邮件。
您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。
|
Beta Was this translation helpful? Give feedback.
-
'你好。已收到你的邮件,我会在假期结束后尽快处理。————————————这是来自QQ邮箱的自动回复邮件。'
|
Beta Was this translation helpful? Give feedback.
-
这里延迟双删的步骤不对哦 |
Beta Was this translation helpful? Give feedback.
-
消息的顺序消费根据key存在不同的内存队列里面 , 服务挂了是不是就丢了 ? 用redis 做持久化可行吗? |
Beta Was this translation helpful? Give feedback.
-
希望有人来回答,这是一个非常非常“重要”的问题。!!!!!!!!!!!!!!
partition数量不宜过多吗,如果是那么能理解。
拜托了,有人来说明下吗,”我非常非常感谢“ |
Beta Was this translation helpful? Give feedback.
-
分区多副本 创建topic时设置“replication.factor”设置分区副本;这样这样当一个节点挂掉Isr会选举新leader提供数据,除非三台全挂 /opt/kafka_2.13-2.8.1/bin # kafka-topics.sh --describe --zookeeper 172.18.0.2:2181 --topic TestTopic Topic: TestTopic TopicId: bdvxOQhATRGuoAnYQXwmUg PartitionCount: 5 ReplicationFactor: 3 Configs: Topic: TestTopic Partition: 0 Leader: 0 Replicas: 0,3,2 Isr: 0 Topic: TestTopic Partition: 1 Leader: 2 Replicas: 2,0,3 Isr: 2,0,3 Topic: TestTopic Partition: 2 Leader: 3 Replicas: 3,2,0 Isr: 3,2,0生产者 ACK 为 -1 默认情况:当生产者发送数据给broker时,会根据“Isr”查看当前同步的broker集群,把“Isr”中存在的broker同步好数据后生产者会收到确认 1.“Isr”有全部broker集群。那么会把数据同步到所有broker,一个挂掉会选举新的leader持续服务 (可以保证高可用) 2. 如果“Isr”中只有leader。那么数据发送完其实也只有一台节点存储数据,当该节点挂掉依然无法正常使用该分区。(无法保证) 配合使用:min.insync.replicasmin.insync.replicas 最小同步副本数 和 ack = - 或 all 组合使用 当 ack = -1 或 all ,“Isr”中至少有“min.insync.replicas”副本数,包括leader,follow。如果没有这么多副本,生产者发送消息会抛出异常。 异常信息:消息被拒绝,因为同步复制副本的数量少于所需数量 NotEnoughReplicasException: Messages are rejected since there are fewer in-sync replicas than required.一般情况集群3台,ack为-1,min.insync.replicas为2 |
Beta Was this translation helpful? Give feedback.
-
“数据先写入内存 buffer,然后每隔 1s,将数据 refresh 到 os cache,到了 os cache 数据就能被搜索到(所以我们才说 es 从写入到能被搜索到,中间有 1s 的延迟)。每隔 5s,将数据写入 translog 文件(这样如果机器宕机,内存数据全没,最多会有 5s 的数据丢失),translog 大到一定程度,或者默认每隔 30mins,会触发 commit 操作,将缓冲区的数据都 flush 到 segment file 磁盘文件中。” 官方关于这段的描述: 这句话说明了索引和删除操作在被 Lucene 索引处理之后,但在确认之前,会被写入 Translog。 "The data in the translog is only persisted to disk when the translog is fsynced and committed." 这句话说明了 Translog 数据仅在 Translog 被 fsync(确保数据写入磁盘)并提交后才被持久化到磁盘。 |
Beta Was this translation helpful? Give feedback.
@blackdog1987 谢谢分享,这是一个很好的建议。
这一系列知识,我的定位一直都是“知识扫盲”,或许对大家面试、实际工作有所帮助,但光了解这些是远远不够的,平时工作中一定要注重思考。
我会直接将这个 discussion pin 在顶部,让读者看到来自于面试官的建议。