作者:小傅哥 博客:bugstack虫洞栈https:bugstack。cn 沉淀、分享、成长,让自己和他人都能有所收获!一、咋,膨胀了吗? 生抗美团博客?不要脸,呐们,从未见过如此厚颜无耻之人! 美团博客在技术圈里是非常优秀且质量很高的官网博客,全系硬通货的优秀内容:有技术架构、有算法应用、有搜索引擎实现、讲过风控策略、谈过Java动态追踪、分析过全链路监控,上百篇的高质量有实践根基的技术内容,让作为研发出身的搬砖码农,不只是你,还有我,都非常喜欢此类有强烈技术氛围的文章。 呐,就这?你还要生抗? 是的,即使是这样刚烈的技术博客,我也要生抗它!因为喜欢归喜欢,挑战是挑战,学会学习的方法比仅仅只是按照一个博客文章中的完整思路硬搬到自己的脑子中更重要。为什么这样说呢,因为大部分的技术文章的本质都是对数学逻辑的实现描述,从目标、条件、行为到结果的推演,但这种照着推演结果抄答案是没意义的,只有这些思路在你的大脑里完完整整、磕磕绊绊的走来走去不断碰撞,摸索到结果后,才能有更深刻的印象。 快,是最大的障碍! 向阳而生,逐光而行,减少没必要的内心焦虑,别为想着一口吃不下胖子而惆怅。慢慢铺好脚下的地基,不要着急于快,你现在所做的每一件看似点点的小事,将来都会汇聚在一起。想起我自己在上学阶段,看到很多同学放假喜欢去做一些兼职、发发传单、洗洗盘子、当当家教,但其实以我自己来看,并不会支持去做这些,除非是真的需要这些钱。因为大部分同学毕业后基本都会从事本专业(计算机、软件工程)的事情,而其他兼职的事情与你在自身成长的长期价值积累并不符,而这部分兼职工作也仅能是给你带来一点社会体验和短暂经历。但与未来长远的目标来看,有明确的目标,不焦躁、不焦急,慢慢成长,慢下来、慢下来,你会收获更多!世界很大,生活更大。二、看,刚劲内容! 除了手里的几个卖焦虑的文章,你可以拥有更好的! 一天学会、一文搞懂、学完就P8P9、30岁码农还和刚毕业做一样的活没用!等等贩卖焦虑的文章,看这些内容除了让人烦躁还能带来什么、能有什么成长吗?讲道理,不会有什么大成长,因为你太过着急了,急得像是河里的水搅浑了,没有时间的沉淀,你只能在上面捞点浮沙。 而那些真正有价值的内容,是需要经过时间的磨练的,记得《霍元甲》电影里有句话,我这一拳20年的功夫,你们挡得住吗! 是的,可能这些有深度的技术博客你也挡不住! 美团技术,美团技术沙龙由美团技术团队主办,每期沙龙邀请美团及其他互联网公司的技术专家分享来自一线的实践经验,覆盖前端、后台、系统、算法、测试、运维等技术领域。360核心安全,分享奇虎360公司的技术,与安全的互联网共同成长。病毒防护、安全监测、软件漏洞等方面有深入学习的文章。阿里数据库内核月报,阿里数据库内核月报非常好的数据库进阶资料,文章多为阿里数据库内核专家所写,有深度)中分析,那种数据库产品更被阿里的内核专家们青睐。jenkovTutorials,Wetendtoselectprojectsthatarerelatedtoentrepreneurship,onewayoranother。Ourprojectsareeitheranentrepreneurialprojectinitself,orithelpsotherpeoplesentrepreneurialprojects。 为什么你需要看这样的博客内容? 我遇到过很多好友伙伴问我,在互联网做开发都需要什么样的技术,分布式的系统是怎么搭建的、怎么进行的分库分表、系统上线后要进行压测吗,这些都是在什么标准下怎么进行的呢? 这里以一篇美团博客为例,给大家介绍下分库分表的起因、过程和结果,文章为:MTDDL美团点评分布式数据访问层中间件 美团(背景):2016年Q3季度初,在美团外卖上单2。0项目上线后,商家和商品数量急速增长,预估商品库的容量和写峰值QPS会很快遇到巨大压力。随之而来也会影响线上服务的查询性能、DB(数据库,以下统一称DB)主从延迟、表变更困难等一系列问题。 因为业务的急速发展,体量的暴增,原有的系统设计已经很难满足现有的数据体量,因此会有一些列的技术问题需要解决。但从数据库的使用上来看,单库单表已经很难现有的业务体量了,通常一台64核、7T的数据库服务器,在tps达到1万已经逼近极限。 那么怎么办?把各个应用按照商品库进行垂直拆分吗,这也只能解决一时之痛呢,以后呢?所以分库分表的设计是必然的,应运而生的就是美团的MTDDL(MeituanDistributedDataLayer),美团点评分布式数据访问层中间件,旨在为全公司提供一个通用数据访问层服务,支持MySQL动态数据源、读写分离、分布式唯一主键生成器、分库分表、动态化配置等功能,并且支持从客户端角度对数据源的各方面(比如连接池、SQL等)进行监控,后续考虑支持NoSQL、Cache等多种数据源。 美团,MTDDL整个逻辑架构 分库分表绝不只是一个中间件的开发就完事了,还需要一整套的技术实现来支撑这样的技术组件使用;系统拆分为分布式应用,RPC、MQ、分布式任务、配置中心等需要一并引入。分库分表取模算法,不知道大家有深入阅读过HashMap的源码没,HashMap是一种基于哈希桶和链表红黑树的数据结构,每一个数据存放都需要经过哈希求值、扰动函数、泊松分布和拉链寻址的方式进行计算数据索引和存放逻辑。那么在你设计入美团的分库分表组件时,你脑子中会有哪些个散列算法吗,哈希散列、除法散列法、平方散列法、斐波那契(Fibonacci)散列法吗?各个散列算法都有什么特性,哪一个更适合你的组件开发,它会让数据更加散列,减少碰撞吗。碰撞了是什么效果,HashMap的碰撞是链表转红黑树以及扩容拆解数据,那么数据库里的数据碰撞严重是什么效果另外是关于分布式唯一主键生成器的设计,因为你的每一条数据,都需要是全局唯一的,那么就需要给每一条数据都生成一个唯一ID。美团的分布式ID生成系统Leaf,其实是一种基于DB的Ticket服务,通过一张通用的Ticket表来实现分布式ID的持久化,执行update更新语句来获取一批Ticket,这些获取到的Ticket会在内存中进行分配,分配完之后再从DB获取下一批Ticket。 看到这,你还敢说你是在卷技术、造火箭吗?很多时候不是技术没用,是你没有想法去用,也没有一个自身使用此类技术的土壤!所以不知道各个分散的技术模块都用在哪,只知道面试时会用一下,所以来学点干货吧,骚年!三、我,都写了啥? 抗了2年,写了8个专题,22个类别,245篇文章!两年前,我只会写代码,不会写文章两年前,我给同事做的分享,总让别人听的云里雾里两年前,我也吃过技术答辩的亏,没有内容叙述能力两年前,我缺少知识的成体系建设,很多内容都碎片化 所以从不太开心的那天开始,我陆续总结沉淀和输出技术内容,成体系化地建设自己的技术栈维度,一点点尝试编写文章和吸收读者的反馈,慢慢的把复杂技术内容的文章写的尽可能通俗易懂。所以你会看到我的文章大部分以实战为基准,通过对各类技术场景的验证、归纳、总结,写出成体系的技术内容,既满足自己沉淀提升,也分享给同好成长! 我给自己在技术职业成长上,是一个能抗住农夫三拳的架构师,所以我在编写和输出的技术内容上,也是以数据结构、算法逻辑、设计模式、核心技术、系统架构、服务运维以及总结自身成长的几个方面来进行汇总内容编写文章。 而这几大块内容也是每一个较贵的Java程序员应该掌握的内容,可以包括:JavaSpring:以讲解Java、Spring核心知识为基础,用数学逻辑思维分析关于Java、Spring、Mybatis、Dubbo等核心源码技术内容。其中如《Java面经手册》是一本以面试题为入口讲解Java核心内容的技术书籍,书中内容极力地向你证实代码是对数学逻辑的具体实现。包括正在编写的《手撸Spring》通过手写简化版Spring框架,了解Spring核心原理。在手写的过程中会简化Spring源码,摘取整体框架中的核心逻辑,简化代码实现过程,保留核心功能,例如:IOC、AOP、Bean生命周期、上下文、作用域、资源处理等内容实现。这些都程序员学习技术成长过程中非常重要的知识,如果能深入学习那么对以后的个人成长帮助非常大。算法逻辑和数据结构:这部分内容主要以Java源码为入手,讲解其中的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、斐波那契(Fibonacci)散列法还有黄金分割点的使用等等,这也正式《Java面经手册》的核心内容所在。面向对象:《Java设计模式》的知识是在Java基础铺平,数据结构、算法逻辑有了一定的了解后,在深入学习和使用的技术。同样是一个需求在学过设计模式后,也阅读了不少别人优秀的代码,那么在他实现需求的时候,会拆分出很多的接口和接口的继承、抽象类的职责隔离实现、具体业务模块的分层、功能服务组件的细化、具体实现过程中对设计模式的运用等等。这样的代码实现后会非常具有易扩展和可维护的特点,否则一篇的ifelse不是坑自己就是坑下一个人。中间件:可能很大一部分研发并不会接触到中间件,也不太可能有人告诉你可以使用中间件的方式解决一些实际遇到的问题。因为大部分时候你都会认为中间件只是公司专门部门的人写的,或者是技术大牛搞的,总之与你没关系。但其实代码知识对数学逻辑的具体实现,业务开发有业务开发的方式,《Spring中间件和开发》也只是对Spring的关于容器中一些特定接口和类的使用,具体的还是普通的逻辑代码,比如暴露服务、采集日志、监控系统等。但如果你能早些学到这样技术的核心思想,那么对于升值、加薪、跳槽,都是非常有帮助的。通信专题:其实Netty是一项非常重要的技术,比如在RPC服务实现中的Dubbo、或者MQ、以及很多时候的通信里都是能用到的技术。就连小傅哥的第一次面试大厂也是靠着对Netty的学习,刷进来的!所以小傅哥编写了很多Netty从基础入门讲解到核心原理,告诉你如何处理半包、粘包,怎样定义消息协议,并开发了一个基于Netty的仿微信聊天项目,这些技术内容你都可以在我的博客学习到学习到。字节码编程:这项技术可能大多数研发,哪怕35岁的,可能也不一定接触到。但这样的技术你却基本都用过,比如你的IDEA是购买的吗,你怎么给让它能用的!你用过一些非入侵的全链路监控系统的,你通过字节码插桩搞过一些事情吗,那你用过Cglib吧,它的底层就是通过ASM字节码框架对字节码进行的一些列操作。故事:除了技术学习以外,还有很多伙伴会经常问我一些关于学习、成长以及在职场中怎么活下去。所以我结合我自己在大厂互联网中的学习和成长经历,给读者伙伴写了不少此类的内容。如简历编写、招聘要求、技术资料、代码规范、评审晋升、薪资待遇、副业收入等等。这些内容可能很多会帮助你度过一个安定的职场生涯!四、嗯,有些收获! 叮,走在技术路上的一次打卡! 2021年04月23日,图书节,我的第一本技术书《重学Java设计模式》出版了。不久以后我感受过图书冲榜到销量榜第一、在图书馆看到我的技术书、被国外的粉丝伙伴购买带出国门,还看到有个女孩买来作为礼物送给他的男友。也于不久后看到百度百科还有我书籍的信息,还真是蛮开心的,但不膨胀! 输出也仅仅是我作为技术人的一次成长打卡,我就想走走没走过的路,爬爬没爬过的山,看看风雨过后的彩虹是否绚烂。而通过这样的经历了解下出书的流程;选题、定稿、三审三校、申请书号、印刷装订、发货上架、营销售卖。 除此之外,当你的文章越写越多,除了技术上成体系的完善,你还会获得各个平台的扶持,比如在掘金写小册,得到掘金的签约作者邀请!加油,总有机会是你可以上的!五、你,要动手不? 写文章,如果你还不知道从哪下手! 从给自己看的日常笔记,到整理成分析给读者阅读的文章,其实并不好写,无论是技术、生活、职场,都会有一定的编写门槛。以我个人为例,一篇文章的编写,即使不计算编写前的内容归纳整理,也不包括写完后的文案、推广、分享,仅仅是编写时间也需要68个小时,这包括内容的创作、PPT、xmind、visio等各类工具的绘图、也可能会串联进去一些故事性的图片。所以近一篇文章的编写就已经很费时间,尤其是对不喜欢写作文的理科码农来说,再初期更是难搞! 但其实,做任何事想做好,都是难度、有门槛的!以我编写文章的经验,一篇文章的编写可以总结以下图稿中几个方面: 选题:这是第一步,也是非常重要的一步。在开始之前你总得要花不少的时间来想好你要写什么,是热门的、实践的、创新的还是什么,这是时候还没具体定内容,因为无论热门、实践在每一个栏目下都可以写不同的内容。类型:是写自己的故事、还是职场发展的自身经历,还是写写学到的技术总结成文章呢。其实前期对你来说,写技术是最好下手的,因为只要你经历过,就一定会有技术的总结,比如你出了一个技术事故,自己的秒杀商品系统挂了,那么肯定是会总结出对应的技术经验的。当然你胡说自己跳槽字节拿到工牌了,或者说惨遭试用期解雇,也一定会上热门,不过此类文章对你的个人成长来说,不具备长期价值。内容:当你确定选题,选好了要写的内容,接下来需要汇总此类内容的资料总结了,这包括你自己对技术的看法、也包括你在学习此技术点时从一些有价值的网站获取的资料,当然也包括你阅读的源码、官方的文档,这些内容都是非常具有权威性的。不过千万不要拿一些看着就磨磨唧唧、似懂非懂的内容作为引入,可能这样的内容本身就有坑!卖点:一篇爆款的文章中一定是有此文章的亮点卖点的,比如有技术创新价值吗、有阅读趣味性吗、有分享传播共鸣吗、有流量转换吗,都会是一篇文章的卖点。其实每一个文章也都可以看做是一个sku,这个sku好不好几本也是你的卖点决定的!配图:记住所有技术号主的文章,一定会有配图的!xmind都玩的很溜,visio也画的非常好,ppt更是漂亮的很,因为好的图会让整篇文字堆满的文章更具有可阅读性。与此同时你还会看到一些较为搞笑的图,来增加文章的趣味性。六、来,总结一下! 心怀天下,声色犬码。生有热烈,藏于俗常! 写到这的时候想起首歌,吃的是下锅的米、走的是人间的道、扛的是顶风的旗。就像我自己,生抗美团技术博客,并不是挑战美团技术,而是扛起自己对技术的追求,抗的是对技术的品质! 任何一个自己喜欢的方向,不断的极致的追求下去,都可能成为你自身最具有价值的财富。为你的八小时内谋生存、八小时外谋发展! 如果你现在还不没有意识到自己应该为八小时外努力,那么35岁之前,你手里还能抓几张牌?健康的身体、和睦的家庭、充足的积蓄、执行的计划等等用于抵抗你的房贷车贷、职场中的疲惫、生活里的消费呢。 加油吧!愿每一个在路上拼搏的人都能;所求皆如愿、所行化坦途!