代码审查常见问题,建议收藏

2020-04-11
阅读 2 分钟
1.5k
最近某宝弹窗事件导致其APP被大量用户删除,影响极其恶劣。我在想,如果他们的内部代码审查更加严格一点,少走形式,就能将隐患扼杀在摇篮里了。基于此,我们部门专门成立了由小组长和核心成员组成的代码评审组,将以前的代码评审模式进行了一些优化,加强了管控。我在以往代码评审过程中发现了一些普遍存在的问题,总结...

一文带你搞懂RPC核心原理

2020-04-11
阅读 3 分钟
2k
一、RPC的作用 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法。 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。 二、完整的RPC涉及到的核心点 编解码、序列化和反序列、请求协议、桩生成(动态代理、反射执行)。 三、RPC使用过程需要注意什么问题 避免多米诺骨牌效应,所以要根据服务能力提前协商...

解读京东的积木理论

2020-02-20
阅读 2 分钟
1.6k
我之前在做业务需求的时候,很多的个性化需求并不能快速响应,实现后有时也很难保证系统的可阅读性。不过好消息是,我今年在做京东内容领域的组件化改造和能力输出,之前的问题或许会得到根本性的解决。那么,接下来我将分享一些个人对于组件化的认知,希望能帮助到你。

一个女生不主动联系你还有机会吗?

2019-12-23
阅读 3 分钟
2.1k
假设你是个妹子,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人。你随时可以甩了现任男友,另外一位马上就能补上。这是冷备份。

如何使错误日志更加方便地排查问题

2019-11-04
阅读 5 分钟
1.6k
在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导。但是在实际中打的错误日志内容和格式变化多样,错误提示上可能残缺不全、没有相关背景、不明其义,使得排查解决问题成为非常不方便或者耗时的操作。而实际上,如果编程的时候稍加用心,就会减少排查问题的很多无用功。 在阐述如何编写有效...

这样规范写代码,同事直呼“666”

2019-10-31
阅读 5 分钟
1.2k
当循环中只需要获取Map 的主键key时,迭代keySet() 是正确的;但是,当需要主键key 和取值value 时,迭代entrySet() 才是更高效的做法,其比先迭代keySet() 后再去通过get 取值性能更佳。

JVM调优分享

2019-10-31
阅读 4 分钟
2.2k
-Djava.library.path=/usr/local/lib-server -Xms6144m-Xmx6144m-XX:MaxPermSize=256m-Dsun.net.client.defaultConnectTimeout=60000-Dsun.net.client.defaultReadTimeout=60000-Dnetworkaddress.cache.ttl=300-Dsun.net.inetaddr.ttl=300

去掉烦人的“!=null"(判空语句)

2019-10-21
阅读 3 分钟
1.5k
文章首发于公众号松花皮蛋的黑板报 作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解 为了避免空指针调用,我们经常会看到这样的语句 {代码...} 最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢? 这是初、中级程序猿经常会遇到的问题。他们总喜欢在方...

缓存常见问题

2019-10-16
阅读 2 分钟
1.6k
缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且处于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

谈谈上线变更

2019-10-13
阅读 3 分钟
1.7k
过程是这样的:我的需求是在方法参数POJO类中新增一个可选参数,我将这个参数定义在POJO类的父类的最后一个。其中提供的是远程调用RPC服务,所以需要打一个描述类的JAR包供调用方使用,这个JAR包包含服务接口和入参、出参实体。

作为非管理者的我们可以从西贝中学到什么

2019-10-04
阅读 2 分钟
1.3k
这几天看了一本经济管理的书,叫做《西贝的服务员为什么总爱笑》,副标题是贾国龙激励3万员工的管理哲学。这本书列举了很多感人的真事,能让我们看到这家企业的发展脉络和人情味的企业文化。但是作为普通读者,我无法真正领会到管理方面的经验,所以将书中打动我的一些点修改后摘录如下。

我在极客时间的首次分享

2019-10-01
阅读 1 分钟
1.6k
文章首发于公众号 松花皮蛋的黑板报作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解 当时我将自己的文章投稿到InfoQ,然后总编辑郭总邮件邀请我来分享,于是有了这次值得纪念的演讲。欢迎朋友们前往极客时间App观看。 主题为:如何利用有效的资源抗住618大促流量 大概内容如下: 性能测试 性...

谈谈技术债务

2019-09-28
阅读 2 分钟
1.2k
最近在我身上发生了这么一件事。我主要负责内容创作的,提供了一个写入的逻辑接口,但是在校验链中对图片来源空间包括域名进行了校验,你可以理解空间是一种业务名位置,空间涉及到精细化成本管理。接口使用者在测试时发现写入失败,因为图片不合法。那碰到这种情况,如果是你,你是另外提供一个图片转链服务呢?还是写...

精益敏捷之认知篇

2019-08-29
阅读 2 分钟
1.7k
一百个读者心中有一百个哈姆雷特,你可能认为最大的挑战是部门协作墙,或者是产品的需求规划不清晰。这些答案都有一定的置信度,但是我想说的是,我们正处在一个快速变化的互联网时代,新想法比别人验证慢一步,可能你就是那个出局者,所以需求方迫切希望能在高速公路上换轮胎。但是,请记住,我们处在一个充满不确定的...

精益敏捷之站会

2019-08-26
阅读 1 分钟
1.4k
有些程序员其实不爱和技术领域外的人过多交流,包括上级领导,很烦他们不了解技术又不了解业务然后又喜欢问之问那的,其实这种烦恼是自己造成的,因为你没有主动和上级沟通。沟通的渠道有很多,可以面对面交流,也可以选择在会议中同步一些信息,可能你会跳出来反驳我的观点,领导那么忙,单独找他沟通太麻烦人家了,而...

分布式系统之中心化复制集管理

2019-08-25
阅读 2 分钟
1.3k
文章首发于公众号:松花皮蛋的黑板报作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解 为了避免分布式系统单点异常引发的系统可靠性和高可用问题,可行的办法就是数据冗余,也称为复制集,那么复制集是怎么管理的呢? 实际上管理方式可以有去中心化副本集和中心化副本集两种。 去中心化副本集...

精益敏捷之任务拆解

2019-08-21
阅读 1 分钟
1.7k
这是一个关于著名高尔夫球手“老虎”伍兹的故事。高尔夫球手在打球的时候,可能会受到一些外界干扰。一般情况下还好,如果他已经开始挥杆,这时候受到了干扰,一般选手肯定是继续把杆挥下去,但通常的结果是打得不理想。

面向对象设计的SOLID原则

2019-08-20
阅读 4 分钟
1.6k
它实际上违背了单一职责原则SRP。上面的类其实有两个职责,一为动物实体的持久化管理,另外一个为动物的属性管理。那我们应该如何设计避免这种错误呢?我们可以新建另外一个类,它负责将实体对象存储到数据库上。如下所示:

秒杀系统技术解剖

2019-08-19
阅读 2 分钟
1.6k
我们知道秒杀类的活动对整个运营贡献是最大的,它的特点是瞬间流量俱增、请求数量远大于库存,导致保证下单扣库存准确性难度大,那我们前端、后端怎么做才能保证呢?下面是我的一些思考。

JVM解剖公园

2019-08-11
阅读 7 分钟
2k
文章首发于公众号:松花皮蛋的黑板报作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解 1、JVM锁粗化和循环原文标题:JVM Anatomy Quark #1: Lock Coarsening and Loops 众所周知Hotsport编译器会进行JVM锁粗化和优化,它将相邻的锁区块进行合并,有效减少锁的的占用成本,类似 {代码...} 优化成...

避免过度设计

2019-08-05
阅读 3 分钟
1.8k
许多文章都在强调不要过度设计自己的系统,但是没有道出个所以然来,所以本文列出一些经典的过度设计,希望能给你带来启发,在工程上做一些平衡,避免过度设计把我们推到另外一个复杂度上

leetcode并发题目解题报告JAVA版

2019-08-01
阅读 11 分钟
1.9k
The same instance of Foo will be passed to three different threads. Thread A will call first(), thread B will call second(), and thread C will call third(). Design a mechanism and modify the program to ensure that second() is executed after first(), and third() is executed after second().

敏捷开发之LinkedIn的高效代码评审技巧

2019-07-28
阅读 2 分钟
2.5k
阅读和代码评审是每个工程师在日常工作中都要做的事情,然而一个标准的code review流程,实际上很难落地,它要求每次代码变更在部署到生产环境前,甚至是在提交合并前,都需要被另外一个小组成员进行正式的评审。在LinkedIn公司,自从2011年起code review成为了开发流程中法定、强制的一部分,也意味着它成为代码质量保...

程序员都应该了解的运维知识经验

2019-07-24
阅读 5 分钟
1.7k
常见的URL格式是[链接],由协议+域名+端口号组成,这里涉及到一个不可轻视的知识点,就是跨域,浏览器有一个同源策略限制,协议、域名、端口号有一个不同就会发生跨域冲突,从而保证了其他站点不能非法操作正常站点的cookie和修改dom元素,重要性不言而喻。当不得已冲突时,可以通过JSONP请求、添加允许跨域响应头、使用...

如何实现Spring框架中的AOP

2019-07-14
阅读 2 分钟
1.9k
文章首发于公众号:松花皮蛋的黑板报作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解 声明一个AdvisedSupport类,用于保存被代理对象和拦截方法的元数据对象 创建织入点AopProxy,可以通过getProxy方法获取代理后的对象。使用CGLIB生成动态代理,生成Enhancer实例,并指定用于处理代理业务的回...

深入理解Apache Kafka

2019-07-14
阅读 5 分钟
2.1k
Kafka由LinkedIn公司于2011年推出,自那时起功能逐步迭代,目前演变成一个完整的平台级产品,它允许您冗余地存储巨大的数据量,拥有一个具有巨大吞吐量(数百万/秒)的消息总线,并且支持实时流任务处理。总的来说,Kafka是一个分布式,可水平扩展,容错的日志提交系统

微服务架构之容错Hystrix

2019-07-12
阅读 5 分钟
2.1k
一、容错的必要性假设单体应用可用率为99.99%,即使拆分后每个微服务的可用率还是保持在99.99%,总体的可用率还是下降的。因为凡是依赖都可能会失败,凡是资源都是有限制的,另外网络并不可靠。有可能一个很不起眼的微服务模块高延迟最后导致整体服务不可用

微服务架构之网关层Zuul剖析

2019-07-11
阅读 8 分钟
3.6k
二、Zuul可以为我们提供什么1、权限控制2、预警和监控3、红绿部署、(粘性)金丝雀部署,流量调度支持4、流量复制转发,方便分支测试、埋点测试、压力测试5、跨区域高可用,异常感知6、防爬防攻击7、负载均衡、健康检查和屏蔽坏节点8、静态资源处理9、重试容错服务三、Zuul网关架构

mysql高级使用和技巧

2019-07-11
阅读 3 分钟
2.2k
一、普通索引和唯一索引查询上来说,普通索引查找到满足条件的记录后会接着查找下一个记录(innodb的数据是按页读写的),判断是否满足。然而唯一索引是查询到了就立即返回了。所以如果你明确知道只有一条结果则应该加上limit 1

通俗易懂地介绍分布式锁实现

2019-07-11
阅读 4 分钟
1.4k
但是很遗憾的是,上面这段代码是不安全的,比如客户端client-1获取锁后由于执行垃圾回收GC导致一段时间的停顿(stop-the-word GC pause)或者其他长时间阻塞操作,此时锁过期了,其他客户如client-2会获得锁,当client-1恢复后就会出现client-1client-2同时处理获得锁的状态