第1周 |「知识星球」高质量答疑 7 个问题

栏目: IT资讯 · 发布时间: 5年前

内容简介:如果对本文的内容有疑问,请在文章留言区留言,谢谢。
第1周 |「知识星球」高质量答疑 7 个问题

点击上面  蓝色字体 关注我们

技术  /  架构  /  职场  /  面试   /  内推

非常感谢「搜云库技术分享」小伙伴们的高质量技术交流。 这里,我使用「知识星球」沉淀「2019年的第1周」高质量的答疑内容。本周与你一起精进 7 个问题,请细心阅读。 如果对您有帮助的话,可以帮忙转发与分享。同时,欢迎加入「技术架构分享群」与「 搜云库技术分享,知识星球 」共同探讨,一起进步, 文末扫描关注 ,或公众号回复「 加群 」。

在这里,特别感谢星球合伙人:

@卷小毛,@豆哥,@琳茹,@无悔,@熊姐,@帅超,@Mask,@凡羊羊(排名不分前后)

对磊哥的支持,加入搜云库技术分享的大家庭!

惜小天 提问:

第1周 |「知识星球」高质量答疑 7 个问题

消息中间件如何实现高可用,削峰,异步请求是怎么用中间件处理呢?

第1周 |「知识星球」高质量答疑 7 个问题

星球合伙人:龙的凤影

回答:

消息中间件是如何实现高可用、消峰、异步请求的,我简单说下吧。

1、 实现高可用 :消息中间件,可以部署多个,部署在不同的物理机器上,做集群,当其中某节点宕机了,剩余的节点照样能够正常工作。

2、 削峰 :当流量出现急剧上升,系统的处理能力达到瓶颈的时候,通过消息队列,逐渐放行消息,减缓系统的处理频率,从而不至于将系统的CPU耗尽,从而使请求依次处理,达到削峰效果。

3、 异步 :系统之间的服务,原本是直接的同步调用的,但是现在使用消息中间件后,可以实现异步调用,例如系统A、B、C,系统生产的消息不仅可以提供给B系统,还可以扩展到C系统,我生产者A不需要修改代码逻辑,只负责生产消息,而且生产者不关心你是否有没有消费、啥时候消费;而消费B和C,我们只需要订阅生产的消息,到时候消费消息即可,有消息就消费。

一个经典例子:

当一个用户注册的时候,之前是当用户在页面进行填入信息注册时候,数据写入数据库(100ms),同步调发送邮件注册服务(100ms)和调用发送注册短信(100ms),当一系列操作都成功后,才返回到前台给客户[共花300ms]。 而加入消息中间件之后,用户在页面进行填入信息注册时候,数据写入数据库(100ms),直接返回前端给客户注册成功,在数据写入数据库的同时,可以把调发送邮件注册服务(100ms)和调用发送注册短信(100ms)的消息推送到消息中间件上,由对应的消费服务进行消费那么整个注册过程,则能由[300ms]缩短到[100ms])。

当然,消息中间件存在着许多的缺点:

1、MQ宕机了怎么办? 2、MQ发送消息过程中消息丢失? 3、使用MQ,系统更加复杂性了?

惜小天 提问:

第1周 |「知识星球」高质量答疑 7 个问题

为什么采用G1收集器而不是cms收集器加seial收集器,堆大小如何设计比较合适,老年代和年轻代分配比例,基于什么原理算法给出最优方案?

第1周 |「知识星球」高质量答疑 7 个问题

星球合伙人:豆

回答:

首先声明,以下是个人的理解或者资料中的描述,并没有进行实践验证,可能并不严谨。

关于CMS收集器与G1收集器,我们先来看一下他们的区别。大家都知道CMS因为追求最短回收停顿时间采用的是标记-清除算法,这种算法会产生大量的空间碎片,当大对象进行分配时,往往会出现总体剩余空间很大但是连续的剩余空间不足的情况,从而引发Full GC,虽然CMS提供了一个参数可以控制快满时内存碎片的整理,但是相应的停顿的时间也会变长。

而G1做出的优化是:

1、对分代收集的改进,物理意义上不再隔离young与old,而是分为了Region区,虽然还有young和old的概念,但是他们不需要连续的存储,把内存化整为零并且不需要配合其他收集器就能独立管理整个堆。

2、G1虽然和CMS类似追求短的回收停顿,但是G1更关注于设立一个可预测控制的停顿时间,此时我们就可以控制垃圾回收时间避免应用雪崩现象(因为分为一个个的Region,所以不用在整个堆中进行垃圾收集,而是根据优先级,对优先级大的Region进行回收)。

3、G1整体上采用的是标记-整理算法(虽然两个Region是基于复制法),所以避免了CMS空间碎片的问题。

虽然j9都是默认G1收集器的了,但是并不是说G1就一定优化于CMS,现在市面上使用比较多的应该还是CMS+ParNew这种,G1收集器内部实现逻辑复杂(从提出paper到推出使用用了大约8年时间,现在还在优化,相信会越来越强并逐渐取代CMS的)。根据大佬们的测试,G1在小堆里的表现并没有比CMS好(此处R大推荐的8G),CMS在8G以下的堆中表现的比G1更加的稳健。G1适用于多CPU、大内存、低GC停顿要求、产生大量内存碎片需要整理压缩这几种情况。

关于堆大小的设置,假设你设置了一个2G的堆内存,你还要考虑你的线程占用的内存-线程栈(默认1M * 线程数,考虑永久代大小256M(j8之前),考虑二进制代码占用空间(48到240M不等),如果你使用了netty或者堆外缓存,你还要考虑堆外内存的大小(默认最大值约为堆内存大小)。综合下来,你设置一个2G大小的堆,要预留的内存空间为3.5-5.5G左右(还要预留一些供操作系统使用)。

老年代和年轻代的比例,是SUN官方根据大量研究、实践、调优得出的适合大部分情况的比例,比例的大小可以参看下HotSpot官方的调优白皮书

当然这个情况也不是绝对的,如果你的项目很多对象生命周期都比较短暂,你可以适当调整一下比例让老年代小一些,但是尽量要避免Full GC

蔡 提问:

第1周 |「知识星球」高质量答疑 7 个问题

现在工作3年了,做的项目一般都是单点应用,出去找工作问项目经历,没做过高并发这种项目,怎么做准备呢?

第1周 |「知识星球」高质量答疑 7 个问题

星球合伙人:卷小毛

回答:

你说你工作了三年,一直在做单点应用。其实单点应用也有很好玩的东西,我说的可以使说应用很多东西的了。

一、代码的思想

需求分析》应用设计》代码编写》后期重构

1、需求分析

我们的技术总是围绕着需求去走,但是我们一定要完完全全跟着需求走吗?可能有一些需求多多少少有些瑕疵。我们能不能从中优化需求,解剖需求呢?从而达到,产品想要的效果,也方便我们后期的维护和拓展。需求不只是看在当下!

2、应用设计

一个好的设计,是从需求中解剖出来的。如果我们一开始拿到需求,就在那里忙前忙后的。你会发现后期的维护会给你带来无尽的麻烦。解剖需求我们要从多个角度去分析,去拓展。画图,构思出整个代码功能的架构图。这对你未来的路会有好处。

3、代码编写

我自己的信条是 多重构,多封装,多共用。从而以少量代码快速完成多模块代码设计。这样会给你后期带来很好的体验。别人在优化BUG的时候,你只要找到相关问题,优化完后。有充足的时间去完成自己的事情。 重构,不只是第4步(后期重构)开始做的,在你第2步(应用设计)和第3步(代码编写)中就要带有这个思想了。

4、后期重构

当你接触一些新技术的时候,你就要回顾以前所写的代码,是否能应用!若是能,那就重构优化他,对比原有的代码。能否给你带来较好的效果

二、技术的玩

我所说的玩,不是玩游戏那种。但是你也可以当成玩游戏,过副本 1.业余时间学习后,要实践,把固定死的写法。玩出另一个花样来,或许能给你带来意想不到的效果 2.对新技术的追求,不要觉得他有难度就放弃了。我们工作不就是为了自己技术得以提升。但是工作上得到的并不多。需要自己去开拓边疆,打怪兽。这样我们的装备才会更好。

做到上面两点的话,你会比别人走的更远。代码是死的,技术也是玩出来的。在玩的时候,你自己能否有那种思想很重要。不要固定死自己的思维

更多向磊哥的提问

想看磊哥的回答, 限时免费 进知识星球查看回答

惜小天 提问:

第1周 |「知识星球」高质量答疑 7 个问题

磊哥可以提供一些关于mycat面试题和原理资料吗?

第1周 |「知识星球」高质量答疑 7 个问题

不停奔跑提问:

第1周 |「知识星球」高质量答疑 7 个问题

磊哥,最近我一直在为准面试做准备,看了好多资料,现在感觉准备的一点头绪都没有了,因为上家公司是外包公司,用的技术也是很老旧,对于现在面试中问的高并发,分布式等等都没有怎么涉及过,这种情况我应该如何准备面试呢?

第1周 |「知识星球」高质量答疑 7 个问题

:neutral_face: 微笑提问:

第1周 |「知识星球」高质量答疑 7 个问题

磊哥,我是名实习生,我所在的公司用ssh,项目业务逻辑特别简单,每天无所事事,也无法离职,该怎么提升自己,能不能给个方向?

第1周 |「知识星球」高质量答疑 7 个问题

:neutral_face: 微笑提问:

第1周 |「知识星球」高质量答疑 7 个问题

面试的时候该怎么介绍项目经验?

第1周 |「知识星球」高质量答疑 7 个问题

搜云库技术团队,欢迎广大技术人员投稿

投稿邮箱: admin@souyunku.com

如果对本文的内容有疑问,请在文章留言区留言,谢谢。

限时:免费进星球

限时免费加入 ,已经有 1400 + 人了

星球介绍: 技术,资讯,资源,分享,职场,面试,答疑

星球是为了帮助公众号和博客粉丝更好更近的沟通,这里会有最新的技术文章分享,技术答疑,职场面试等相关问题交流沟通。

第1周 |「知识星球」高质量答疑 7 个问题

微信识别二维码, 限时免费加入

公号回复关键字

回复: 【进群】

「技术架构分享群」 

回复:

【内推】 十大热门城市,程序员 作内推群   回复: 【1024】 送2019最新  4000G  

架构师视频 

新资料、面试题、等其他资料,进群找群主

更多技术干货


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java技术手册(第6版)

Java技术手册(第6版)

Benjamin J Evans、David Flanagan / 安道 / 人民邮电出版社 / 2015-12-1 / 79.00

《Java技术手册 第6版》为《Java 技术手册》的升级版,涵盖全新的Java 7 和Java 8。第1部分介绍Java 编程语言和Java 平台,主要内容有Java 环境、Java 基本句法、Java 面向对象编程、Java 类型系统、Java的面向对象设计、Java 实现内存管理和并发编程的方式。第2部分通过大量示例来阐述如何在Java 环境中完成实际的编程任务,主要内容有编程和文档约定,使......一起来看看 《Java技术手册(第6版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具