Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign up技术面试相关讨论 | Discussions about Technical-Interview #9
Comments
@blackdog1987 谢谢分享,这是一个很好的建议。 这一系列知识,我的定位一直都是“知识扫盲”,或许对大家面试、实际工作有所帮助,但光了解这些是远远不够的,平时工作中一定要注重思考。 我会直接将这个 issue pin 在顶部,让读者看到来自于面试官的建议。 |
最好是将项目经历,在项目中遇到的问题,遇到的坑,怎么解决的;让个人成长最快的一些案例;要有实际的落地的东西,能讲出来这些很细节的东西。 |
@scholers 感谢分享。 |
* 更新 es 架构文章描述。 * 更新 README,欢迎所有面试官和面试者们来 #9 分享自己的想法。在这里对 @blackdog1987 表示感谢,他给我们分享了他自己作为技术面试官招人的一些侧重点和对面试者的建议。
那我转行了 (;′⌒`) |
@caojiantao 加油,朋友 |
加油. 重要是要有自己的思考 |
我也很想在工作有跟多的自己的思考,但是实际工作中很难是这样的,会很多很多各种问题,而且现在的社会每个人压力都这么大,烦躁的事情各种各样,,,,,,,,,,,,, |
楼主的问题给了我当头一棒,提出的问题大部分都回答不了 继续努力! |
没有经历过从小项目到大项目的整个过程,可能真的很难回答上面的问题 |
@shanliangxiaomifeng 确实如此,很多时候需要经过大项目的实践,对问题和知识点才会有更深刻的理解。 |
看过和用过是两回事,仅仅是看过深入问下去必然暴露。 |
一定要有自己的思考,解决问题的思路。 |
哪有那么多机会给人去历练, |
能答上来起码看过了......起码看过了有了基础你才知道怎么去思考,要是没看过连思考的方向都没有..所以我觉得掌握这些理论知识还是很有必要啊,理论做基础,实践中求证,进步才快.事实上如果不看这些东西工作中大部分知识你都了解不到啊..起码对我一个初级研发人员来说是这样 |
对于分库分表,我有一个疑问,就是分表的逻辑还是最终需要根据业务去考虑吧? 文档中按照订单id去取模分表,那么如果一个人的历史订单列表怎么办?从多个库多个表取?然后合并? |
@ryouaki 如果仅按照订单id去分表,要查询一个用户的历史订单,会导致全表扫描。可以通过异构索引表方式,通过数据冗余减少全表扫描的频率。 详细的说明建议看看《企业IT架构转型之道 阿里巴巴中台战略思想与架构实战》这本书中数据拆分相关章节的说明。 |
你好,我是个新手,您回答的意思是否是无法避免分表后要查询的话会产生全表扫描?只能减低扫描的频率么? |
@Alwaysrain1203 是这样的,我们没有必要对所有的查询场景都建立异构索引表,因为这样会导致数据库大量的数据冗余。 还是需要根据实际情况,“82法则”,仅对性能要求高的场景做一些优化方案处理即可。 |
多谢答疑! |
很多人没这么多机会锻炼啊 |
没锻炼的同学不就应该选择初级岗位,像学徒这样的吗 |
神乎其神,过度面试,夸大需求 我面试很简单,就看沟通是否顺畅,是否好学上进,相关经验不能作假夸大,主动性强有思路更好,足够了,事实上都干得挺好 就这个mq吧,搞成解耦削峰异步的“标准答案”,别到头来都忘记了你是要干什么,业务实现才是你要干的事 处理来不及不够快嘛,所以才堆积排队 然后嘛,不能把中间件的使用当高科技,说白了就像是看文档调api 到底,实际上都很基础,计算机原理之类 比如,磁盘顺序读写速度最快,所以kafka就这么干,也就成了 |
不是针对楼主,说的是现状 技术这东西大多数并不需要多么高的技术,也不是真有多么高的专业壁垒,再难也不需要你学一年半载还不会,若真还不会那必须改行 外行不懂只会崇拜,内行的不必太较真,像这kafka就是再熟,没准也会忘了怎么拼写 |
@gotoeasy 谢谢分享。 每个人看问题的角度不一样,这里很欢迎各位面试官和技术朋友们来分享自己的一些想法。 |
关于zk被问的一个问题,就是在北京、上海有两批服务器,现在把它放到同一个局域网下面,用zk做注册中心,怎么解决两个地区服务相互调用的网络延迟问题。 |
机房都目的是做灾备? |
面试官是说两机房在一个局域网内,但场景是他们之间数据共用一套,用dubbo 做rpc调用。问我怎么通过zk的配置来解决。@hisenyuan |
这个问题描述的感觉无法回答。 |
技术这东西,对于绝大部分人来说,没有高深不高深的,只有先知和后知。被问到的点刚好做过,属于有经验;被问到的点,做过类似的,能类比着说出来,属于有较强学习能力。但思考不一样,无论自己做过什么,思考过的人,和没有思考过的人,通过他的回答可以很快看出来。 |
谢谢,受益匪浅 |
大家有看过 【石杉的架构笔记】推送的文章吗?亿级流量高并发场景下,如何保证缓存与数据库的双写一致性? 。里面说到比较复杂的数据不一致问题的解决方案。将操作路由之后,发送到一个 jvm 内部队列中。他需要建很多的内存队列,然后hash到不同的队列去排队,一个队列对应一个工作线程,每个工作线程串行拿到对应的操作,然后一条一条的执行。我觉得这样子处理是不是有些过于复杂了, 是不是可以通过java里面的读写锁来实现就可以了,写的时候对这个key加写锁,直接写成功才返回,在写的时候不能对这个key进行读操作。如果长时候拿不到读锁我们也可以类似他说的那样来优化。 |
我刚刚看到石杉讲的这边,我一直有个疑问,数据库不是有行级锁吗?复杂情况那个案列,他就是担心写数据,写一半,然后进来读数据之后会导致数据库和缓存不一致吗?你这个里面读了同一行数据,有锁呀,不会出现这样的状态吧!!!求哪位大神指点。 |
行锁是在mysql(数据库)里,缓存不在库里(在redis?),你锁了数据库的行,但是这把锁管不了缓存。 |
大佬我的疑问是这样,石杉老师说保证缓存和数据库的双写一致性,初级的解决方案是数据发生变更,先删除缓存,然后去修改数据库。这个操作我理解,对于高并发的情况下,他说去修改数据库,这个时候还没修改好,然后一个请求过来,去读缓存,发现缓存是空的,然后去查询数据库,查到了修改前的旧数据,放到了缓存,然后导致不一致。我的意思是你改的时候,还可以查询到旧数据吗?我是个入门没有多久的小白,望大佬别笑话我的问题。 |
缓存、数据库一致性问题,先删除缓存,再更新数据库。删除成功更新数据库的时候,就让排队,只允许一个线程去查数据库,问题就解决了。你说的改数据库的时候,能否查到旧数据,是可以的,innodb的多版本控制了解一下。更新操作一般几毫秒(行锁情况下)。 |
石杉老师说的思路大概就是串行化来解决,我觉得只要可以保证写排他,读共享应该也是可以解决的。 |
|
|
分库分表中间件我用的是sharding-jdbc,但是后来直接用订单时间来分表,3个月前的订单表几乎没有需求去查询。也没有用中间件了 |
建立虚拟vpc
cy503328434 <notifications@github.com> 于2019年7月11日周四 下午5:18写道:
… 关于zk被问的一个问题,就是在北京、上海有两批服务器,现在把它放到同一个局域网下面,用zk做注册中心,怎么解决两个地区服务相互调用的网络延迟问题。
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#9?email_source=notifications&email_token=AAN2JENT2BJZBZNIQISSJNTP633EVA5CNFSM4GMI6UQ2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZWCM5Q#issuecomment-510404214>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAN2JEPPQMCDJNYQWFRQJODP633EVANCNFSM4GMI6UQQ>
.
--
Your Feirnds
|
解决方案提到 这里有一个疑问 思考了一下 |
问我用的啥 微服务--分布式事务怎么处理的,一脸懵逼 |
可能是世风日下,什么人都可以成为面试官的原因。有些人真是太拿自己当回事了,就应该狠狠的按在地上好好摩擦摩擦 ... |
我既参加过面试也面试过别人,参加面试有把面试官吊起来打的时候,也有碰到各种SB的时候,但是我面试别人从不会为难别人,不说自己多么高尚吧,至少还是不要做人太辣鸡。 |
之前遇到个面试 问我用过什么支付 我说京东 然后问我京东支付的bug你是怎么处理的 瞬间无法回答 |
写数据,可能还没有到数据库,还在内存队列,所以这个时候数据库锁没有用。 |
可能面试官目前正遇到自己团队中的支付问题,他想通过面试别人来获得解决问题的解决思路或灵感。之前听说有这种情况,没有招人计划,纯粹是通过面试别人来解决现在的手头的问题 |
http://dubbo.apache.org/zh-cn/docs/user/demos/multi-registry.html 这段时间准备面试,特意去官网看了下配置,不知道是不是问多注册中间配置问题 |
可以考虑使用zk的observer模式 |
我个人平时会负责一些技术面试。面试过程中,经常碰到那些针对面试精心准备的人,比如,消息队列方面,候选人差不多都能答上这些标准答案。但是,这些答案不是我想听到的,我甚至曾经告诉面试者:
我不想听你看来的这些东西,我想听你思考的东西,你们具体在什么场景下用的MQ,如果不用MQ,你的项目又怎么设计?你思考一下你的XX项目,中间还有没有哪一块功能可以用上MQ?为什么?如果用了,你猜一下生产上可能出现什么故障?怎么解决?既然你知道他的作用是“解耦、消峰、异步”,那么在你简历中提到的XXX技术中(比如nginx,或者任何知识点),分别可以通过什么手段去做这三个目的?你在Java/Android/IOS中还见过类似的组件或者机制吗?他们怎么做的?为什么?你怎么看如何解决MQ中消息重复的问题?有必要对所有的消费者都做幂等吗?为什么?幂等在你们xx项目中,具体怎么实现。还有哪些情况你碰到过“消息重复”类似的问题?BASE理论里,如果涉及到MQ的场景,怎么设计?除了你说的这种设计,还有哪种设计?在你的xxx项目中应该怎么设计?为什么?
前面说了一大段,其实我想说的是,最好加上一个章节,告诉这些来取面经的人:哪怕你看完了这上面的内容,你仍然需要在工作中时时刻刻去思考和印证。
这些面经可以是你学习的目录,但是不是你学习的终点,对于优秀的公司和面试官来说,仅限于这些内容,收效甚微。