首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

京东资深架构师代码评审歪诗

在此之前和讯网负责股票基金行情系统研发工作,具备高并发、高可用互联网应用研发经验。 贾言验幻空越重, 命频异长。 依轮线日简, 接偶正分壮。言欢空月虫, 明勋品宜昌。..., 作为一种协议要求调用方按验证注解约束传参, 返回值验证注解约束提供方按注解要求返回参数 幻: 代码中要杜绝幻数,幻数可定义为枚举或常量以增强其可读性 空: 要时刻警惕空指针异常 常见 a.equals...null 使用StringUtils判断字符串非空 越: 如果方法传入数组下标作为参数,要在一开始就做下标越界校验,避免下标越界异常 重: 不要写重复代码,重复代码要使用重构工具提取重构 命频异长...: 不要在循环中调用服务,不要在循环中做数据库等跨网络操作 频: 写每一个方法时都要知道这个方法调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高一定要考虑性能指标,...偶: 认识系统之间耦合关系,通过同步数据来做两个系统之间交互是一种很强耦合关系,会使数据接收方依赖于数据发送方数据库定义,如果发送方想改数据结构,必须要求下游接收方一起修改;通过接口调用是一种常见系统耦合关系

4.7K30
您找到你想要的搜索结果了吗?
是的
没有找到

让你写出更加优秀代码!

验-言 公共方法都要做参数校验,参数校验不通过明确抛出异常或对应响应码: Java Bean验证已经是一个很古老技术了, 会避免我们很多问题; 接口中也明确使用验证注解修饰参数和返回值, 作为一种协议要求调用方按验证注解约束传参...为空时会抛出空指针异常; 不确认返回集合是否可为空时要做非空判断, 再做for循环; 使用空对象模式,约定返回空集合,而非null; 使用StringUtils判断字符串非空; 越-月 如果方法传入数组下标作为参数...-勋 不要在循环中调用服务,不要在循环中做数据库等跨网络操作; 频-品 写每一个方法时都要知道这个方法调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高一定要考虑性能指标,考虑是否会打垮数据库...Spring自动扫描服务,那么这个服务默认是单例,其内部成员是多个线程共享,如果直接用成员变量是有线程不安全。...偶-偶 认识系统之间耦合关系,通过同步数据来做两个系统之间交互是一种很强耦合关系,会使数据接收方依赖于数据发送方数据库定义,如果发送方想改数据结构,必须要求下游接收方一起修改;通过接口调用是一种常见系统耦合关系

5.4K20

【ES】199-深入理解es6块级作用域使用

如下: for(let i = 0;i < 100;i++){ //执行某些操作 } //报错 console.log(i); 6.循环中创建函数 使用var声明变量环中,创建一个函数非常困难...由于函数有自己作用域,因此向数组中添加函数时候,实际上循环已经运行完成,因此每次打印变量i值都相当于是全局中访问变量i值,即i = 5这个值,因此实际上答案最终会返回5次5....for-of循环是es6新增坏。。 7.全局作用域绑定 let,const声明与var声明还有一个区别就是三者全局作用域中行为。...== Array这个等式返回布尔值true。...8.块级绑定最佳实践 使用es6块级声明变量中,最佳实践是如果确定后续不会改变这个变量值,用const声明,如果确定要改变这个变量值,则用let声明。

3.7K10

深度解密setTimeout和setInterval——为setInterval正名!

为什么呢?原因是事件环中JS Stack过于繁忙原因,当排队轮到定时器callback执行时候,早已超时。...因此,我们可以通过每次执行setTimeout是判断是否超时,如果超时则返回,并不执行下一次回调。同理,如果想要通过执行次数来控制也可以通过这个方式。...但是异步情况下,比如ajax轮(websocket不在讨论范围内),我们只有一种选择就是setTimeout,原因只有一个——天晓得这次ajax要浪多久才肯回来,这种情况下只有setTimeout...实践是唯一获取真理方式。通过chrome测试工具,我们可以发现清除分配给变量内容,可以释放内存,这也是为什么有许多代码结束之后会xxx=null,也就是为了释放内存原因。...,虽然dom中被删除了,但是引用还在,这个时候root子元素就会以游离状态dom存在,而且无法被回收。

2.9K30

异步,同步,阻塞,非阻塞程序实现

如果是同步,线程会等待接受函数返回值(或者轮函数结果,直到查出它返回状态和返回值)。如果是异步,线程不需要做任何处理,函数执行完毕后会推送通知或者调用回调函数。...他们没有关系 异步同步和阻塞非阻塞没有什么本质关联。一个讲的是消息方式,一个讲的是线程状态。...线程同步调用下,也能非阻塞(同步轮非阻塞函数状态),异步下,也能阻塞(调用一个阻塞函数,然后函数中调用回调,虽然没有什么意义)。 下面,我会慢慢实现一个异步非阻塞sleep。...上面的代码中,一个while循环中timer状态。由于timer存在于wait中。所以需要把timer“提取”出来。...把timer 从生存器gen yield返回出来 2. 轮timer状态(实质是切换进出timer,看它有没有引发StopIteration异常) 3.

7.5K10

如何在 JS 循环中正确使用 async 与 await

for 循环中使用 await 首先定义一个存放水果数组: const fruitsToGet = [“apple”, “grape”, “pear”]; 循环遍历这个数组: const forLoop...接下来几节中,我们将研究await 如何影响forEach、map和filter。 forEach环中使用 await 首先,使用 forEach 对数组进行遍历。...(注意回调函数中async关键字。我们需要这个async关键字,因为await回调函数中)。...forEach环中等待返回结果之前,JavaScrip先执行了 console.log('End')。 实际控制台打印如下: ‘Start’ ‘End’ ‘27’ ‘0’ ‘14’ ?...第一次遍历中,sum为0。numFruit是27(通过getNumFruit(apple)得到值),0 + 27 = 27。 第二次遍历中,sum是一个promise。 (为什么

4.6K20

如何在 JS 循环中正确使用 async 与 await

阅读本文大约需要 9 分钟 async 与 await 使用方式相对简单。 当你尝试环中使用await时,事情就会变得复杂一些。 本文中,分享一些如果循环中使用await值得注意问题。... for 循环中使用 await 首先定义一个存放水果数组: const fruitsToGet = [“apple”, “grape”, “pear”]; 循环遍历这个数组: const forLoop...接下来几节中,我们将研究await 如何影响forEach、map和filter。 forEach环中使用 await 首先,使用 forEach 对数组进行遍历。...forEach环中等待返回结果之前,JavaScrip先执行了 console.log('End')。 实际控制台打印如下: ‘Start’ ‘End’ ‘27’ ‘0’ ‘14’ ?...第一次遍历中,sum为0。numFruit是27(通过getNumFruit(apple)得到值),0 + 27 = 27。 第二次遍历中,sum是一个promise。 (为什么

4.2K30

解析PHP跳出循环方法以及continue、break、exit区别介绍

foreach循环几种,不管哪种循环中PHP中跳出循环大致有这么几种方式: 代码: 代码如下: 上面这个例子中直接在从循环里结束了代码运行,这样会导致后面的代码都不会被执行,如果是一个php web 页面里面,甚至连exit后面的html代码都不会被输出。...可以从一个函数里调用,也可以从一个include()或者require()语句包含文件里来调用,也可以是主程序里调用,如果是函数里调用程序将会马上结束运行并返回参数,如果是include()或者require...()语句包含文件中被调用,程序执行将会马上返回到调用该文件程序,而返回值将作为include()或者require()返回值。...> 这里例子和上面使用exit效果是一样循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP中跳出循环几种方式简单总结。

4.9K40

Android Notes|BottomNavigationView 爱上 Lottie

以前大部分项目底部导航栏关于图片部分实现,要么两套图 selector 切换,要么通过着色器 tint 进行渲染,总之最后呈现效果便是点击时两张图静态切换,说 Low 吧,也还凑合,但是总是没那么高大上...mPreClickPosition], nav_bottom_bar ) } } 问题汇总 鸡老大说: 遇到问题是好事儿,多总结,多积累,掌握一个渐进过程...1、BottomNavigationView 切换对应 Lottie 不改变,怎么玩? 这个问题是我从一开始就陷入了固有思维循环中。...昨天突然想到,为什么我不重新给设置一次 Drawable 呢?...身为猿猿,面对实际开发中遇到问题,一定要采取多方案,首要保证内容、结果输出,其次才是合理渐进优化。 2、BottomNavigationView Item 长按提示怎么搞掉?

3.7K21

二叉树层序遍历

示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20...层次遍历时候,我们只需要遍历出来某一层数据,把这一层数据加入到List中,然后把这个List加入到最终list中,最后返回即可 难点在于如何统计。...统计每一层节点数据: 1、当每一层都入队之后获取这个队列数量,这个数量就是每一层节点数量 2、然后根据这个数量来遍历出队列中现在存在每一层数据 3、循环1和2至此结束 关键代码:...,那就直接返回 if(root==null) return lists; //利用队列特性来存储每层节点 LinkedList<TreeNode...,那就直接返回 if(root==null) return lists; //利用队列特性来存储每层节点 LinkedList<TreeNode

43351

C语言中循环语句总结

while坏:  for循环:  while和for循环对比: 区别:for 和 while 实现循环过程中都有初始化、判断、调整这三个部分,但是 for 循环三个部 分⾮常集中,便于代码维护...do while循环 使用条件:使⽤循环体⾄少被执⾏⼀次场景下 eg:输⼊⼀个正整数,计算这个整数是⼏位数?...环中 continue 后代码,直接去到循环调整部分。...,来到了i++调整部分 printf("%d ", i); } return 0; } 运行结果: 对比for循环和while循环中continue对代码运行影响: 分析代码可以知道它们修改条件位置不同...,i=5这个基础上进行i++ do while语句中break和continue作用跟while一样: goto语句 作用:goto 语句可以实现在同⼀个函数 内跳转到设置好标号处。

11210

遍历数据时arraylist效率高于linkedlist_遍历问题种类

2.原因 ArrayList forEach 方法来自 Collection 父接口 Iterable,Iterable 默认显示方式是增强 for 循环,而 ArrayList 重写了这个方法... LinkedList 中, forEach 遍历和迭代器遍历是等价,前者到最后还是用迭代器。...而实际上,当我们看到迭代器里面的 list.remove()就应该明白 LinkedList forEach()为什么会抛异常了。...ArrayList 重写了 forEach()方法,从增强 for 改为了普通 for 循环,但是方法最开始也记录了modCount,每次循环都会对比,因此也会因为环中改变了 modCount而抛异常...LinkedList 未重写 forEach()方法,底层仍然使用增强 for,编译后还是迭代器,因此抛异常原因同迭代器中操作。 为什么普通 for 循环删除会“漏删”?

65610

.Net多线程编程—System.Threading.Tasks.Parallel

说明: 1)Invoke方法只有actions全部执行完才会返回,即使执行过程中出现异常也会完成。 2)不能保证actions中所有操作同时执行。...或 source 分区程序中任何方法返回 null 时引发异常。...说明: 1)不能同时同一个并行循环中同时使用Break和Stop。 2)Stop比Break更常用。break语句用在并行循环中效果和用在串行循环中不同。...Break用在并行循环中,委托主体方法每次迭代时候被调用,退出委托主体方法对并行循环执行没有影响。Stop停止循环比Break快。...=null 使用了Break语句而提前终止 7 捕获并行循环中异常 原则: 1)异常优先于从循环外部取消和使用Break()方法或Stop()方法提前退出并行循环。

1.2K130
领券