互联网平头哥

其他

基于 XA 事务协议,用代码实现一个二阶段分布式事务

在上篇《漫谈分布式事务的那些解决方案》文章中,我提到了分布式事务的三种通用解决方案,但是没有具体的代码实现,有少小伙伴留言说原理知道了,但是还是不会写代码,那么这篇文章就简单聊一聊基于
2020年4月26日
其他

缓存穿透了怎么办?

映射到布隆过滤器上,当然如果新增数据时,除了写入到数据库中之外,也需要将数据的ID存入到布隆过滤器中。我们在查询某条数据时,先判断这个查询的
2020年3月9日
其他

MySQL 数据库的提速器-写缓存(Change Buffer)

Buffer)的参数。1、innodb_change_buffer_max_sizeinnodb_change_buffer_max_size
2020年2月25日
其他

换工作必须避开的五个坑

作者介绍findyi,前360技术总监,前哒哒少儿英语技术VP,现任土豆教育CTO为什么有的人工作几年已经是架构师、经理、总监、甚至高管?有的人工作十多年却还是在原地打转?其实,在换工作的时候就决定了很多人不同的结局!那么换工作我们怎么作出高质量的选择呢?毕竟选择大于努力,选择对了事半功倍,选择错了可能就要在人生泥潭里打滚了。关于换工作这件事,我有以下五点建议:01选择高速发展的公司而不是大公司很多人换工作都会追求更大更成熟的公司,其实如果选择发展速度更快、上升空间更大的公司会更好。如果公司在高速发展期,这个时候机遇会特别多。因为业务要发展,自然就会出现更多的管理岗或者专家岗。更重要的是,在高速发展的公司因为业务的增长速度快,所产生的学习机会、成长机会会让你的业务能力、专业能力得到更快的提升。高速发展的公司给予员工的各方面激励也会更多,增量的激励要远远大于存量的激励。对于持有期权股票的员工来说更是能分享公司在资本市场上的红利。我在腾讯的leader,现在已经是腾讯的助理总经理。05年加入腾讯,当时也放弃了一些更成熟的公司的机会。而腾讯那个时候还只是一个1000人的中小公司,但发展速度飞快。在这个过程中就需要内部培养出大量的管理者,而他也把握好了几次关键的机会。05年的腾讯阿里、08年的百度、10年的360、13年的美团、15年的头条都属于这样的公司,这个时候如果加入这些公司,会进入职业发展的快车道。当然,如果是应届生,需要尽量避免太小的公司。因为体系化的熏陶和一段稳定的职业周期是应届生比较必要的,应届生可以在中大型企业中选择发展势头更好的加入。02选择高点换工作而不是不爽就换大部分人换工作可能是因为对当下的工作感觉不爽,又或者跟领导相处不愉快,冲动之下决定换工作。因为对工作不爽而换工作是典型的在环境层思考换工作这件事。那么什么是环境层?不同人的思维层级差别很大。大部分人处在四种思维层级之内:环境、行为、能力、BVR(价值观、信念、规则)。环境层:思维层级最低的就是环境层,什么是环境?就是除你之外的一切,都可以认为是环境:天气、领导、家人、交通、房价、物价等等。处在这个层级的人当他自身不好的时候,会把所有原因归因于「因为环境不好」。比如:工作做不好是因为领导是个蠢才....没能升职加薪是因为其他同事用了不正常的手段......上班迟到是因为政府道路规划太差导致交通太堵......关于思维层级想详细了解的可以看看这篇:那些消失的互联网中年人。换工作这件事,一定一定一定一定一定要告别环境层思维!!!(敲黑板,要考的)。那什么时候换工作合适?当在你所在的领域内做到行业突出,得到大家认可的时候,其实才是你选择机会的最好时机。这个时候你处于上升通道中,状态和能力通常处于巅峰,这个时候考虑换工作,你通常会获得一些超出预料的机会,甚至有可能通过换工作提升职级职位。虽说找工作是公司和应聘者的双向选择,但是这个阶段基本是你挑选公司的单向选择。当然还有一种情况,就是你在你所在团队、公司已经有很明显的天花板限制了你的能力的提升。你为了突破天花板、提升能力而选择换工作。这需要你准确判断公司的确无法给你提供突破的机会,误判在这个时候会损失惨重。遇到天花板有很多种情况,这里面说一点比较特殊的:竞争空前激烈的情况。在这种情况下,避开激烈的职场竞争选择竞争更小的环境是一种很好的策略。拿我自己举例,10年我离开腾讯选择加入360,那时候在腾讯清北的硕士都很普遍,这种情况下要杀出重围获得晋升很显然难度很大,而在360虽然也有不少优秀的人,相比较而言竞争的激烈程度完全没法比。也正是在360,我实现了从普通员工到二级管理者的跨越。03选择核心业务避开边缘业务最近我有个朋友从美团外卖跳到阿里大文娱,薪资涨了不少,他自己非常开心。阿里平台大,知名度也高,薪资还给得高,换了谁都该开心是不是?但我有点惋惜,这个朋友在美团外卖是资深架构师,在我看来这属于因为薪资和平台等原因,从一个公司的核心业务跳到另一个公司的边缘业务。说实话,这种操作短期看起来很性感,长期可能很骨感。什么是一个公司的核心业务?就是这个公司的战略命脉,如果这个业务挂了,这个公司也就不太行了。什么是一个公司的边缘业务?可有可无,丢了可惜,吃着又不太好吃的这种,如果这个业务挂了?那换一个探索方向好了。公司几乎不会受影响。腾讯的微信、阿里的电商、360的核心安全、美团的外卖,这些属于核心业务。属于拼死也要守卫住的关键点。在核心业务团队,因为有公司大量资源的注入,同时往往面临更大的商业、业务、产品、技术挑战。在这种环境下个人能得到高速的成长,同时物质回报也更为丰厚。04选择创业公司价值观优先很多大厂的同学遇到职业瓶颈时,会选择创业公司。因为不少创业公司能给出更高的现金和更多的股票,并且创业公司如果业务发展起来,也会给人带来更大的成长。需要说一句:选择创业公司,老板的价值观一定是压倒一切!!!大厂的价值观一般都还不错(当然不排除一些特例),而创业小公司可真叫一个良莠不齐了。一个曾经的下属,加入一家手游公司。老板承诺给5%的股份,签完合同后,老板说股份需要董事会签字,先把合同收回去。拼死拼活干了2年,这家公司可是估值10亿了,可这哥们的股份合同却再也看不见第二眼了。没办法,最后他黯然离场,老板说好的一起奋斗一起吃肉,到最后可能是老板吃肉你喝西北风。别以为这是特例,我身边还有不少类似例子。正是因为一些创业公司老板价值观不正,导致很多人都不愿意加入创业公司,认为股票期权都是废纸!其实创业公司选对老板,一起奋斗。公司如果成了,不说财富自由最起码跟着喝汤是没问题的。我加入360的时候公司只有500人,是个标准的创业公司,老周经常说的一句话是:“兄弟们,好好跟着我干,以后买房是没问题的!”。相信老周并且能好好干的,最后的确都实现了!所以选择创业公司,一定要了解老板的价值观。如果老板就是为了赚快钱,不要跟,如果老板有任何不诚信的行为表现出来,不要跟。要跟哪种老板?那些有改变行业、改变世界梦想的、那些一诺千金的老板。这样的人,不会跟员工去抢那一点利益,同时还能带领你不断成长。05选择热爱的工作而不是谋生的工作做到这点很难,但如果你期望能成为一个有所成就的人,那一定一定一定一定要做到这点。兴趣是最好的老师,它能让你愈挫愈勇、它能让你不断精进、它能让你穿越泥沼跨越山脉抵达理想的山峰!选择热爱的工作,首先你需要知道自己真正喜欢做什么,而不是随波逐流。找到自己喜欢的事情,然后尽全力选择这样的工作。很多人在选择工作时,为了更高的薪资、为了更轻松的环境可能就放弃了真正热爱的事情,这非常可惜也非常不可取!只有热爱工作,并能从中得到无尽乐趣的人才能成功--稻盛和夫那么如果你刚工作的时候根本不知道自己真正热爱的工作是什么?那怎么办?大多数人初出茅庐,只能从“自己不喜欢的工作”开始。多数人对这种“不喜欢的工作”抱着勉强接受、不得不干的消极态度,因此对分配给自己的工作总是感到不满意,本来潜力无限、前程似锦的人生只会白白虚度。先好好干已有的工作,脚踏实地,从眼前开始。做出一定成绩,建立自己的舒适区和学习区。然后开始不断探索,也许这个过程你很快发现你真正热爱的工作,那么这个时候因为你积累的能力、认知、见识、人脉能让你轻松换到你真正热爱的工作。我在360的一个同事,做了多年产品,本职工作勤勤恳恳,因为热爱投资和金融,他一直在投资和金融方面做积累。15年从我们部门转岗到360投资部做投资总监,之后担任360金融的VP,而再看看他做投资的状态,他真的找到了热爱的工作。换工作方向,是困难的,但如果是你热爱的工作,那一定值得你拼尽全力去尝试。这个过程以下两点非常关键:不要呆在舒适区里停止学习不要进入恐慌区陷入焦虑记住一句话:始终在学习区做极限探索:当你的学习区已经覆盖了新方向所需要的技能,这个时候勇敢的走出这一步吧,别给自己留遗憾!对工作,要从吾所好!写在最后的话:换工作选择大于努力,在选择的时候多思考,换的好会带来迁跃式的发展。希望读了这篇文章的朋友们,能跳出思维惯性,扼住命运的咽喉!推荐阅读:删库了,一定要跑路吗?一文读懂
2020年2月24日
其他

删库了,一定要跑路吗?

student;,你会发现我们的数据都回来了。场景三:误删了数据库你在工作中受气了,准备删库跑路啦,于是你就把pingtouge数据库给删除了,删完之后你就后悔了,怎么办?在线等。删除
2020年2月23日
其他

一文读懂 Java 线程池

点击上方“互联网平头哥”,选择“关注公众号”技术文章第一时间送达!为什么要用线程池在生产环境,我们经常面临的情况是:处理某次请求的时间非常短暂,但是请求量很大。在这种情况下,如果为每个请求单独创建一个线程,有限的硬件资源有可能会被OS创建线程,切换线程状态、销毁线程这些操作所占用,用于业务处理的资源反而减少了。所以理想的处理方式是:将请求的线程数量控制在一个范围内,既保证后续的请求不会等待太长时间,又保证物理机将足够的资源用于请求处理本身。线程池设计与结构开发者通常利用
2020年2月22日
其他

做好一件事的三要素

做一件事很难,要做好一件事就更难了,影响我们做好一件事情的因素太多。今天就谈一谈我认为要做好一件事情的三个基本要素,供大家参考。1、心态能否做好一件事,心态有着决定性作用。在做事的时候,必须切实行动,不能抱着试一试的心态,如果是这种心态,那么最终都会以失败而告终。试一试的心态更多的是一种借口,在还没有做之前,我们就给自己找好了退路,因为失败了,我只是试一试而已。所以做事情只有两个选择:做或者不做,并不存在试一试这种中间态。科比曾经说过:“总有人成功,为什么那个人不是我?”,因为这种心态,科比取得了巨大的成功。好的心态是做好一家事情的奠基石。2、72小时法则「72小时法则」:当你决定做一件事情的时候,必须在
2020年2月19日
其他

投资自己,拥抱不确定性

这些吧,疫情之后,我们都可以变得更好,这些都不是我现在想做的事情,现在最想做的事情就是叫上好朋友,一起撸串烧烤,谁也不要嫌弃谁,总听鸡汤大师说:幸福跟钱多少没有关系,经历这么一遭之后,这事算石锤了。
2020年2月15日
其他

秒杀系统设计~亿级用户

个人从事电商行业十几年,经历过大大小小的促销活动和秒杀上百次,每次做秒杀瞬时访问量会翻数十倍,甚至数百倍。对系统架构是巨大的考验,期间也曾经历过系统宕机,甚至整体雪崩。那么我们怎么设计秒杀系统,才能保证秒杀系统的高性能和稳定性,同时还要保证日常业务不受影响呢?先看看秒杀场景特点。秒杀开始前几分钟,大量用户开始进入秒杀商品详情页面,很多人开始频繁刷新秒杀商品详情页,这时秒杀商品详情页访问量会猛增。秒杀开始,大量用户开始抢购,这时创建订单,扣库存压力会显著增大。实际上,秒杀场景基本都是秒杀参与人多,秒杀成功的人却寥寥无几,经常是几十万人或者更多人抢几百个商品库存。那么我们曾经是怎么设计秒杀系统的呢?主要涉及以下几个方面:秒杀业务流程上的考虑:由于参加秒杀的商品售卖价格非常低,基本都是“抢到即赚到”,成功下单后却不付款的情况非常少。所以我们采用下单减库存的方案,下单时扣减库存,然后再进行支付。假如真有个别订单不付款怎么办?没关系,秒杀好活动最主要的目的是吸引流量,个别订单不支付对秒杀活动本身影响不大。况且,没支付剩下的库存还可以做为普通商品继续售卖。不过要注意对机器人和自动脚本的防御,后面会详细介绍。页面静态化:“秒杀开始前几分钟,大量用户开始进入秒杀商品详情页面,很多人开始频繁刷新秒杀商品详情页,这时秒杀商品详情页访问量会猛增”。如果请求全部打到后端服务,那后端服务的压力会非常大(后端服务要处理业务逻辑,而且还要访问数据库,吞吐量比较低)。考虑到秒杀是运营同学提前安排的活动,要秒杀哪些商品、商品价格等信息在秒杀活动开始前已经确定下来,所以我们可以把秒杀商品详情页做成静态页面,把商品详情、商品价格等参数、评论评价等信息全部放在这个静态页面里,然后把这个静态页面上传到CDN上预热(CDN是内容分发网络,可以简单理解成互联网上的巨大的缓存,用于存放静态页面、图片、视频等,可以显著提高访问速度),用CDN扛流量,这样大量的商品详情页的访问请求就不用访问自己的网站(源站)。这样既可以提高访问速度,也没有给网站增加压力,同时也减少了网站带宽压力。请求拦截:前端页面,相关按钮点击后置灰,防止重复提交网关(zuul,nginx)层,为了避免前端恶意请求,比如一些攻击脚本,在网关层要对下单等接口按userID限流,几秒钟只能访问一次。考虑到秒杀场景参与人多,秒杀成功的人极少,我们可以把绝大部分抢购下单请求在网关层直接拒掉,按秒杀失败处理。这样就极大减少了后端服务的压力。假设秒杀库存是200个,我们可以只放行200个请求到后端服务。要注意,为了尽量避免库存被机器人和自动脚本抢走,200个请求不能在秒杀开始瞬间同时放行,可以分段放行,比如秒杀开始后随机选取100ms内的10个请求放行(这100ms内的其他请求直接拒掉,按秒杀失败处理),之后每隔100ms放行10个请求,2秒钟可以放行完200个请求。分段放行,除了限制了机器人和自动脚本,把请求分散在各个时间段,还进一步缓解了后端服务的压力。分段放行总时间不能太长,假如每100ms放行1个请求,放行完所有200个请求需要20秒时间,这样用户就会明显感知到下单早的人没秒杀成功,下单晚的人反而秒杀成功了,用户体验会变差。另外,秒杀过程网关压力会比较大,网关可以做成集群,多节点分摊访问压力。后端服务设计:如果秒杀库存只有200,经过网关拦截,再加上采用分段放行的方式,对于后端服务基本没什么压力了,日常的后端服务就完全可以支撑秒杀活动了。不用再做更复杂的设计。不过,假如秒杀库存有几万个,放行的下单请求就有几万个,为了用户体验放行总时间也不能太长,这时后端服务该怎么设计呢?这时主要压力就在数据库了,扣减库存压力,创建订单压力。库存可以放到Reids缓存中,来提高扣减库存吞吐能力。对于热点商品的库存可以利用Redis分片存储。创建订单可以走异步消息队列。后端服务接到下单请求,直接放进消息队列,监听服务取出消息后,先将订单信息写入Redis,每隔100ms或者积攒100条订单,批量写入数据库一次。前端页面下单后定时向后端拉取订单信息,获取到订单信息后跳转到支付页面。用这种批量异步写入数据库的方式大幅减少了数据库写入频次,从而明显降低了订单数据库写入压力。隔离:1,业务隔离。从业务上把秒杀和日常的售卖区分开来,把秒杀做为营销活动,要参与秒杀的商品需要提前报名参加活动,这样我们就能提前知道哪些商家哪些商品要参与秒杀,可以根据提报的商品提前生成静态页面并上传到CDN预热,提报的商品库存也需要提前预热,可以将商品库存在活动开始前预热到Redis,避免秒杀开始后大量的缓存穿透。2,部署隔离。秒杀相关服务和日常服务要分组部署,不能因为秒杀出问题影响日常售卖业务。可以申请单独的秒杀域名,从网络入口层就开始分流。网关也单独部署,秒杀走自己单独的网关,从而避免日常网关受到影响。秒杀可以复用订单,库存,支付等日常服务,只是需要一些小的改造(比如下单流程走消息队列,批量写入订单库,以及在Redis中扣减库存)。3,数据隔离。为了避免秒杀活动影响到日常售卖业务,Redis缓存需要单独部署,甚至数据库也需要单独部署!数据隔离后,秒杀剩余的库存怎么办?秒杀活动结束后,剩余库存可以归还到日常库存继续做为普通商品售卖。数据隔离后,秒杀订单和日常订单不在相同的数据库,之后的订单查询怎么展示?可以在创建秒杀订单后发消息到消息队列,日常订单服务采取拉的方式消费消息,这时日常订单服务是主动方,可以采用线程池的方式,根据机器的性能来增加或缩小线程池的大小,控制拉取消息的速度,来控制订单数据库的写入压力。网络:秒杀前要和网络运营商、CDN服务商提前申请带宽。还有哪些细节要考虑:如何避免超卖?如果在redis中扣减库存,可以利用decr命令扣减库存,decr是原子操作,在分布式环境下也不会有并发问题,decr扣减库存后,判断返回值,如果返回值小于0,扣减库存失败,秒杀也就失败了;如果在数据库中扣减库存可以在where后面加上库存大于0的条件,来避免库存被减成负值。这样就可以避免超卖情况发生了。接口防刷,前面已经提到过,在网关层对下单等接口按userID限流。网关层除了对userID做限流外,还要做整体限流。在实际访问量超过预估访问量时,整体限流可以起到保护作用,避免系统被压垮。防止重复下单,按userID限流已经起到了防止重复下单的作用。假如限制同一个用户10分钟能下一次单,一般情况下10分钟内,商品早已经被抢光了,用户也就没有再次下单的机会了。可以结合风控系统,在网关层把羊毛党等有问题的用户请求直接拒掉。可以在网关层上面再加一层防火墙或者高防服务,来防御DDos等分布式网络攻击。好啦,就分享到这里。如果感觉本文对您有帮助,有劳动动手指转发一下,分享是美德哦🙏你可能感兴趣的文章:《一分钟简单了解
2020年2月14日
其他

一分钟简单了解 JSON Web Token

没有被篡改过。「为什么需要签名?」对于加密算法来说,碰撞概率还是比较小的,一般而言,不同的输入加密后的输出是不一样的,不同输入产生相同结果的概率还是相当小的,所以可以利用加密算法的这个特性来判断
2020年2月13日
其他

聊一聊 MySQL 中的数据编辑过程中涉及的两阶段提交

1,这样与原库的值就不一致了。从这两个假设中,我们可以看出无论先提交那个日志文件都有可能出现数据不一致的现象,日志文件两阶段提交技术就解决了redo
2020年2月2日
其他

聊一聊 MySQL 数据库中的那些锁

点击上方“平头哥的技术博文”,选择“关注公众号”技术文章第一时间送达!在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在
2020年2月1日
其他

公众号更名通知:初心不变,只为更好!

相信细心的小伙伴已经发现,我的公众号换新名字啦。“平头哥的技术博文”已经正式更名为“互联网平头哥”啦!作为一名互联网从业者,运营该公众号也有大半年了,起初对公众号的定位是输出技术类的文章,将自己所学习到的技术通过文章的形式分享给大家,
2020年1月31日
自由知乎 自由微博
其他

技术 | 聊一聊 InnoDB 引擎中的这些索引策略

「最左前缀原则是建立在联合索引之上的,如果我们建立了联合索引,我们不需要使用索引的全部定义,只要用到了索引中的最左边的那个字段就可以使用这个索引,这就是
2020年1月29日
其他

资料 | 马哥 docker K8S 实战视频

不定期的长文分享,主题包括技术、职场、学习方法、商业、投资、写作、管理等方面,不止是让你们增长见识,还会让你们改变思维方式
2020年1月28日
其他

学好 MySQL ,要抓住这些重点

不定期的长文分享,主题包括技术、职场、学习方法、商业、投资、写作、管理等方面,不止是让你们增长见识,还会让你们改变思维方式
2020年1月21日
其他

技术 | 聊一聊 InnoDB 引擎中的索引类型

引擎中叫作自适应哈希索引,它是由数据库自身根据你的使用情况创建的,并不能认为的干预,所以叫作自适应哈希索引,采用的是哈希表数据结构,所以对于字典类型查询就非常的快,但是对于范围查询就无能为力啦。
2020年1月18日
其他

在这个时代,每个人都应该追逐私域流量

丰富公众号变现渠道,给更多创作者带来变现机会,现在公众号的变现渠道基本上只有两种,一种是导流到自己的付费产品中,比如付费社群、知识星球等,另一种就是接商业的营销广告变现。不管哪种变现方式,基本上都是
2020年1月16日
其他

【资料分享】你有一份打造扛得住的MySQL数据库架构课程,待领取

不定期的长文分享,主题包括技术、职场、学习方法、商业、投资、写作、管理等方面,不止是让你们增长见识,还会让你们改变思维方式
2020年1月12日
其他

MySQL 持久化保障机制-redo 日志

日志,这东西可能工作没啥用,面试时候可能用的上,希望这篇文章对你的学习或者工作有所帮助,感谢您的阅读,如果您觉得文章有收获,欢迎点个赞和转发,谢谢。
2020年1月9日
其他

为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?

的基础知识我们就知道了,下面我们就来看看为什么 是三次握手,而不是四次或者两次,为了让你更好的理解,我把知乎上一个高赞特别形象的比喻放在这里,希望对你有所帮助。
2020年1月7日
其他

你可能知道事务的四大特性,但是你不一定知道事务的实现原理

面试官:"事务的四大特性是什么?"我:"ACID,即原子性(Atomicity)、隔离性(Isolation)、持久性(Durability)、一致性(Consistency)!"面试官:"在
2020年1月3日
其他

2020 年,干就完事了

2019年我加入了曹大、stromZhang的知识星球,在里面学习了一年,一年下来进步了不少,学会了思考,意识到了投资自己。
2020年1月1日
其他

select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?

建立连接时,服务端都会创建一个线程来与客户端进行交互,交互的第一项内容就是验证客户端的身份,认证凭据是基于客户端发起连接请求时携带的主机信息、用户名、密码。如果认证失败,则结束连接任务,并且返回的
2019年12月31日
其他

分享一套全网最新 Spring Cloud Alibaba 视频教程

上面的这套视频都是无加密的,平头哥不玩加密收费的套路,感谢大家对平头哥的支持,未来平头哥会给大家分享更多的学习资料。当然,如果你可以帮我转发宣传一下,顺道帮我涨点粉,那就太好不过了。
2019年12月29日
其他

分享几道 Redis 高频面试题,面试不用愁

不定期的长文分享,主题包括技术、职场、学习方法、商业、投资、写作、管理等方面,不止是让你们增长见识,还会让你们改变思维方式
2019年12月26日
其他

职场中你忽略的细节,都是别人晋升的秘密

看完这四点是不是感觉到自己经常在职场中犯一些莫名其妙的错误?职场就是这样,它让你看不起,摸不透。因为职场中每个层级看到问题的角度不一样,所以对于同样的问题会有不同的结果。愿我们都能学会职场这门学问。
2019年12月23日
其他

借 redis cluster 集群,聊一聊集群中数据分布算法

一致性哈希算法可以说是哈希算法的升级版,解决了哈希算法扩展性差的问题,一致性哈希算法跟哈希算法不一样,一致性哈希算法会将服务器和数据都通过哈希函数映射到一个首尾相连的哈希环上,存储节点映射可以根据
2019年12月12日
其他

深入解析 ConcurrentHashMap 实现内幕,吊打面试官?没问题

锁来保证安全,这就导致了所有并发操作都要竞争同一把锁,一个线程在进行同步操作时,其他线程只能等待,大大降低了并发操作的效率。
2019年12月10日
其他

三分钟带你入门 redis 高可用架构之哨兵

3、将旧的主服务器变成从服务器故障转移操作最后要做的就是将已下线的主服务器设置为新的主服务的从服务器,并保持对其关注,等它恢复后命令它去复制新的主节点。
2019年12月4日
其他

Java 浅拷贝、深拷贝,你知多少?

属性也发生了变化,其实不止这一个值,对于其他值也是一样的,所以这结果证明了我们上面的结论:直接赋值的方式没有生产新的对象,只是生新增了一个对象引用,直接赋值在
2019年12月3日
其他

一文带你深入了解 redis 复制技术及主从架构

文件,发送给从服务器,从服务器再从本地磁盘加载,这样当文件过大时就需要特别大的网络开销,不然由于数据传输比较慢会导致主从数据延时较大,部分复制就是主服务器将复制积压缓冲区的写命令直接发送给从服务器。
2019年11月27日
其他

一文带你深入了解 Redis 的持久化方式及其原理

是基于内存的,所有的数据都存放在内存中,由于机器宕机或者其他因素重启了就会导致我们的数据全部丢失,这也就是要做持久化的原因,当服务器重启时,Redis
2019年11月19日
其他

详细讲解 Redis 的两种安装部署方式

显然这条命令是没有用的,当然这只是我个人认为,也许是我操作失误,也许是我知识面不够,如果朋友们发现错误还请多多指教,这里我就先当它是错误的,正确的做法是在
2019年11月13日
其他

硬件内存模型到 Java 内存模型,这些硬核知识你知多少?

内存模型除了定义了一套规范,还提供了一系列原语,封装了底层实现后,供开发者直接使用。这套实现也就是我们常用的volatile、synchronized、final
2019年11月7日
其他

这一次,终于系统的学习了 JVM 内存结构

虚拟机规范中是这样定义方法区的:它存储了每个类的结构信息,例如运行时常量池、字段、方法数据、构造函数和普通方法的字节码内容,还包括一些在类、实例、接口初始化时用到的特殊方法。
2019年11月4日
其他

你的 Java 并发程序 Bug,100% 是这几个原因造成的

可见性是指一个线程对共享变量进行了修改,其他线程能够立马看到该共享变量更新后的值,这视乎是一个合情合理的要求,但是在多线程的情况下,可能就要让你失望了,由于每个
2019年10月30日
其他

内存崩溃了?其实你只需要换一种方式

System.out.println(filter.contains("https://voice.hupu.com/nba/2492440.html"));
2019年10月26日
其他

程序员成长的四个简单技巧,你 Get 了吗?

点,或者是因为系统要上线,你和你的团队加班加点的调试程序,里面的任何一个因素都会导致你的计划失败,因为软件行业不确定性太大了,所以对于我们程序员来说,更多的是需要通过自驱和自律来利用你那有效的时间。
2019年10月22日
其他

Java 多线程爬虫及分布式爬虫架构探索

分布式爬虫架构跟我们多线程爬虫架构在思路上来说是一样的,我们只需要在多线程的基础上稍加改进就可以变成一个简单的分布式爬虫架构。因为分布式爬虫架构中爬虫程序部署在不同的机器上,所以我们待采集的
2019年10月16日
其他

Java 2019 生态圈使用报告,这结果你赞同吗?

看完这份报告之后,你是不是觉得这份统计好像非常符合你周围的情况?反正挺符合我这边的情况的,比那些培训结构统计的互联网开发人员的薪资报告要靠谱不少。这份报告一定程度上体现了当下的
2019年10月14日
其他

详解JVM内存管理与垃圾回收机制 - 内存管理

,如果不设置,默认值为最大堆空间,即-Xmx,当直接内存使用量达到设置的值时,就会触发垃圾回收,如果垃圾回收不能有效释放足够空间,仍然会引起OOM。如果堆外内存发生OOM,请检查此参数是否配置过小。
2019年10月12日
其他

Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器

,说明我们已经没有权限访问该页面了,也就是说豆瓣网已经认为我们是爬虫程序啦,拒接掉了我们的访问请求。我们来分析一下我们现在的访问架构,因为我们是直接访问豆瓣网的,所以此时的访问架构如下图所示:
2019年10月12日
其他

给你一份 Spring Boot 知识清单

Boot冗长无比的启动流程一定会让你抓狂,透过现象看本质,SpringApplication只是将一个典型的Spring应用的启动流程进行了扩展,因此,透彻理解Spring容器是打开Spring
2019年10月11日
其他

Java 爬虫遇上数据异步加载,试试这两种办法!

从数据我们可以看出,我们需要的数据都在这里啦,所以我们只需要解析这段数据就可以啦,要从这段数据中解析出新闻标题和新闻链接,有两种方式,一种是正则表达式,另一种是将该数据转成
2019年10月10日
其他

Java 爬虫遇到需要登录的网站,该怎么办?

中我们可以查找到豆瓣网的登陆链接为https://accounts.douban.com/j/mobile/login/basic,需要的参数有五个,具体参数查看图中的
2019年10月9日
其他

Java 网络爬虫,就是这么的简单

从结果中可以看出,我们已经正确的提取到了我们想要的信息,如果你想采集详情页的信息,只需要编写一个采集详情页的方法,在方法中提取详情页相应的节点信息,然后将列表页提取的链接传入提取详情页方法即可。
2019年10月7日
其他

如何做好职业规划,也许这几点能够帮助你

』这篇文章,收获颇多,作者孙振耀老先生讲述了年轻人如何择业、如何跳槽、如何面对逆境、如何在职场成长等。告诉我们如何成为一个优秀的普通人,我想普通才是最真实,毕竟我们都普通。下文的内容全部来源『
2019年10月6日
其他

学 Java 网络爬虫,需要哪些基础知识?

属性,你要在这种页面提取表格数据,并且做到优雅的提取,这就是非常考验你的想象力以及技术啦。非常有幸在刚入行的时候就接触到了网络爬虫这一块,它加快了我对互联网的理解和认知,扩宽了我的视野。
2019年10月4日
其他

从 Int 到 Integer 对象,细细品来还是有不少东西

类型的变量来存储数据,提供了一些整数之间的常用操作,常规性的介绍就这么一点,程序员不喜欢说,程序员就喜欢源码,我们还是来看源码吧
2019年9月28日