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

Java代码评审歪诗!让你写出更加优秀的代码!

贾言 代码评审歪诗 窗外风雪再大 也有我陪伴着你 全文字数:2000字 阅读时间:5分钟 贾言 代码评审歪诗 验幻空越重 命频异长 依轮线日简 接偶正分壮 架构师说, 用20个字描述代码评审的内容...为空时会抛出空指针异常; 不确认返回集合是否可为空时要做非空判断, 再做for循环; 使用空对象模式,约定返回空集合,而非null; 使用StringUtils判断字符串非空; 越-月 如果方法传入数组下标作为参数...-勋 不要在循环中调用服务,不要在循环中做数据库等跨网络操作; 频-品 写每一个方法时都要知道这个方法的调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高的一定要考虑性能指标,考虑是否会打垮数据库...方法中做了两层的try...catch, catch块中记录日志后什么都没做, 这样用户看不到真正想要的内容, 研发也只有看日志才能发现错误, 而“看日志”, 通常只有业务方反馈问题时才会看, 就会导致研发人员发现错误会比现场人员还会晚...日-日 打印日志和设定合理的日志级别,如有必要要添加if条件限定是否打印日志,日志中使用JSON序列化,生成长字符串的toString()都要做if限定打印,否则配置的日志级别没达到,也会做大量字符串拼接

5.4K20

App性能优化浅谈

数据解析 实际开发当中服务端的返回数据格式无非就两种: JSON XML 这两种格式数据格式各有优劣,从可读性来看,xml略微好一点,不过JSON也有规范的标签,从解析难度和速度来看,大家都比较倾向使用...JSON,目前JSON也是主流的数据格式。...Android中均可以使用优秀的解析库来加快我们的解析速度,XML中有dom4j,JSON有Jackson、Gson,我们通过这些库实现我们更快的完成数据解析,提高我们的开发效率。...不要在循环当中声明临时变量,不要在循环中捕获异常。 如果对于线程安全没有要求,尽量使用线程不安全的集合对象。 使用集合对象,如果事先知道其大小,则可以构造方法中设置初始大小。...最后 写这篇文章的出发点也是对Android性能优化有个比较清楚的认识,任何事情都不可能一蹴而就,需要渐进,对一个初学者你谈优化很不现实,我们先把基本的做好,再去考虑相应的优化,笔者也不断学习当中

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

从0到1,构建完整的前端异常监控系统

长期生产bug并修复bug的循环中总结出一下几个痛点: 无法快速定位到发生错误的代码位置,因为脚手架构建时会用webapck自动帮我们压缩代码,而上线版本又通常不会保留 source map(开源贡献者除外...而保留了sourcemap文件就可以利用webpack打包后的生成的一份.map的脚本文件就可以让浏览器对错误位置进行追踪了,但这种做法并不可取,更为推荐的是服务端使用Node.js对接收到的日志信息时使用...确定上报的内容,应该包含异常位置(行号,列号),异常信息,错误堆栈中包含了绝大多数调试有关的信息,我们通讯的时候只能以字符串方式传输,我们需要将对象进行序列化处理。...将异常数据从属性中解构出来,存入一个JSON对象JSON对象转换为字符串 将字符串转换为Base64 后端接收到信息后进行对应的反向操作,就可以日志中记录。 ?...这个接口就是对上报的错误信息进行解析,得到错误堆栈对象 ?

64420

前端异常埋点系统初探

长期生产bug并修复bug的循环中总结出一下几个痛点: 无法快速定位到发生错误的代码位置,因为脚手架构建时会用webapck自动帮我们压缩代码,而上线版本又通常不会保留 source map(开源贡献者除外...而保留了sourcemap文件就可以利用webpack打包后的生成的一份.map的脚本文件就可以让浏览器对错误位置进行追踪了,但这种做法并不可取,更为推荐的是服务端使用Node.js对接收到的日志信息时使用...确定上报的内容,应该包含异常位置(行号,列号),异常信息,错误堆栈中包含了绝大多数调试有关的信息,我们通讯的时候只能以字符串方式传输,我们需要将对象进行序列化处理。...将异常数据从属性中解构出来,存入一个JSON对象JSON对象转换为字符串 将字符串转换为Base64 后端接收到信息后进行对应的反向操作,就可以日志中记录。...这个接口就是对上报的错误信息进行解析,得到错误堆栈对象 上面我们已经拿到colno为2319,lineno为1,接下来需要安装一个插件帮助我们找到对应压缩前的代码位置。

61330

从0到1,构建完整的前端异常监控系统

长期生产bug并修复bug的循环中总结出一下几个痛点: 无法快速定位到发生错误的代码位置,因为脚手架构建时会用webapck自动帮我们压缩代码,而上线版本又通常不会保留 source map(开源贡献者除外...而保留了sourcemap文件就可以利用webpack打包后的生成的一份.map的脚本文件就可以让浏览器对错误位置进行追踪了,但这种做法并不可取,更为推荐的是服务端使用Node.js对接收到的日志信息时使用...确定上报的内容,应该包含异常位置(行号,列号),异常信息,错误堆栈中包含了绝大多数调试有关的信息,我们通讯的时候只能以字符串方式传输,我们需要将对象进行序列化处理。...将异常数据从属性中解构出来,存入一个JSON对象JSON对象转换为字符串 将字符串转换为Base64 后端接收到信息后进行对应的反向操作,就可以日志中记录。...这个接口就是对上报的错误信息进行解析,得到错误堆栈对象 上面我们已经拿到colno为2319,lineno为1,接下来需要安装一个插件帮助我们找到对应压缩前的代码位置。

87410

前端异常埋点系统初探

长期生产bug并修复bug的循环中总结出一下几个痛点: 无法快速定位到发生错误的代码位置,因为脚手架构建时会用webapck自动帮我们压缩代码,而上线版本又通常不会保留 source map(开源贡献者除外...而保留了sourcemap文件就可以利用webpack打包后的生成的一份.map的脚本文件就可以让浏览器对错误位置进行追踪了,但这种做法并不可取,更为推荐的是服务端使用Node.js对接收到的日志信息时使用...确定上报的内容,应该包含异常位置(行号,列号),异常信息,错误堆栈中包含了绝大多数调试有关的信息,我们通讯的时候只能以字符串方式传输,我们需要将对象进行序列化处理。...将异常数据从属性中解构出来,存入一个JSON对象JSON对象转换为字符串 将字符串转换为Base64 后端接收到信息后进行对应的反向操作,就可以日志中记录。...这个接口就是对上报的错误信息进行解析,得到错误堆栈对象 上面我们已经拿到colno为2319,lineno为1,接下来需要安装一个插件帮助我们找到对应压缩前的代码位置。

91420

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

在此之前和讯网负责股票基金行情系统的研发工作,具备高并发、高可用互联网应用研发经验。 贾言验幻空越重, 命频异长。 依轮线日简, 接偶正分壮。言欢空月虫, 明勋品宜昌。...(b) 要把常量放到左侧 aInteger == 10 如果 aInteger 为空时会抛出空指针异常 不确认返回集合是否可为空时要做非空判断, 再做for循环 使用空对象模式, 约定返回空集合, 而非...: 不要在循环中调用服务,不要在循环中做数据库等跨网络操作 频: 写每一个方法时都要知道这个方法的调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高的一定要考虑性能指标,...controller方法中做了两层的try...catch, catch块中记录日志后什么都没做, 这样用户看不到真正想要的内容, 研发也只有看日志才能发现错误, 而“看日志”, 通常只有业务方反馈问题时才会看...JSON 序列化,生成长字符串的 toString() 都要做 if 限定打印,否则配置的日志级别没达到,也会做大量字符串拼接,占用很多 gc 年轻代内存.

4.7K30

我们为什么使用Node

传统的web 平台将无法做到这一点,这也是为什么像微软这样的公司也积极地推动Node,尽管他们已经有了像.NET 那么优秀的平台。...图中,Node 的http 模块接收到并且解析了一个新的HTTP 请求① ,然后服务端的应用代码使用异步接口,将一个回调函数传入数据库的读取函数中来进行一次数据查询②。...假如你需要调用或者开发一个JSON API,Node 也是一个非常棒的选择,因为它使得操作JavaScript 对象变得非常简单。...通过Node 的stream API,你可以创建一个对象接收关于连接的事件,收到新数据时触发data 事件,结束连接时触发end 事件,在有错误发生时触发error 事件。...stream 中加工成另外一个对象,可以把xml 文件的数据读取出来转换成JSON 格式,让JavaScript 操作起来更容易。

42620

从零开始编写一个WEB服务器 - 基础

HTTP协议简介 WEB服务器是解析HTTP协议并根据HTTP请求的信息提供服务的应用程序,所以要编写一个WEB服务器首先需要了解HTTP协议。...可以通过 Content-Type 请求首部来指定请求主体的数据类型,比如可以通过下面的请求首部来指定请求主体的数据类型为 JSON: Content-Type: application/json HTTP...这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden 服务器收到请求,但是拒绝提供服务。...8080 端口,然后一个无限循环中调用 Listener 对象的 Accept() 方法来接收客户端连接,Accept() 方法返回一个 Conn 对象。...接着通过调用 Conn 对象的 Read() 方法来读取客户端连接的HTTP请求,然后通过调用 connResp() 函数来返回数据给客户端请求。 注意:为什么要在无限循环中接收客户端连接呢?

1.5K20

nodejs body-parser 解析post数据实例

,当接收到客户端请求时所有的中间件都会给req.body 添加属性,请求体为空,则解析为空{} (或者出现错误)。...bodyParser.json(options) 中间件只会解析 json ,允许请求提任意Unicode编码支持 gzip 和 deflate 编码。...options 一个对象,有以下属性 inflate 默认为false,true->压缩的请求体会被解压,false->压缩的请求提不被解压。...limit 控制请求体最大大小,默认为100kb,当为数字时会转换为bytes,当为字符串时,value值会通过 bytes库 转换为字节大小。...reviver 此选项会通过JSON.parse直接传给其第二个参数。 strict 默认为true,当为true时只接受数组和对象,当为false时会接受任何JSON.parse 能接受的。

1.7K20

JS拼接HTML引用变量有哪几种姿势,参数出现怎么办

知道么,对象是不能通过js直接拼接到html中的(html解析器只能解析字符串)。拼接的必须是字符串。对象 --> 字符串。 var objectC = {"icon": "蔡虚坤唱跳rap.jpg....触发事件时会得到([onject Object])无法解析。或引起Uncaught SyntaxError: Unexpected identifier错误。 ?...处理方法: 1.将对象各属性拆开,分成一个方法的多个参数进行传递。(推荐) #为什么推荐方法1呢?...2.设置全局变量(多循环情况需考虑效率问题) 3.将对象通过JSON.stringify()转成JSON字符串拼入html。...2.但是转换过程中,可能会出现unexpected end of input错误。改错误是因为json字符串的双引号和oncilck的双引号冲突。需要将json字符串转成单引号字符串。

3.8K40

SpringMVC底层数据传输校验的方案

经过跟踪日志,发现是Server之间进行json格式大数据量传输时会丢失部分字符,造成接收方拿到完整字符串后不能正确解析json,因此报错。...1 问题现象 服务器之间使用http+json的数据传输方案,传输过程中,一些json数据发生错误,导致数据接收方解析json报错,系统功能因此失败。...下面截取了一小段真实数据错误传输的json中,有一个数据项是departmentIdList,其内容时一个长整型数组。 ?...": [ 719, 721'373, 7375, 7377 ] 可以看到,这个错误导致了两个问题: 1、json解析失败 2、丢失了一些有效数据 详细检查系统日志之后,这是偶发bug,并且只传输数据较大时发生...3.3 DigestRestTemplate关键代码 对原json进行摘要,并同原始数据一起生成一个新的json对象

66220

Python Web 框架:Tornado1.Tornado2.安装3.使用4.Tornado 代码解析

中直接运行代码 2 .如果是ubuntu,命令窗口输入 python 文件名.py 使用浏览器访问 4.Tornado 代码解析 1.入门程序代码解析 tornado.web:tornado...current()返回当前线程的IOLoop实例对象 start()启动IOLoop实力对象的IO循环,开启监听 ---- 2.httpserver底层处理 httpserver监听端口 tornado.httpserver.HTTPServer...HTTPServer(app) http_server.bind(tornado.options.options.port) http_server.start(1) #启动IOLoop轮监听...options.parse_command_line() app = Application([(r'/',IndexHandler),(r'/article',ArticleHandler,{'title':'你>希望自己成为什么样的人...print("---------> 响应头set_default_headers()执行") self.set_header("Content-type", "application/json

58230

分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载

B所使用的程序之中写数据库轮代码,这样就会产品一个很严重的两个问题,第一个问题是延迟,轮机制要定时执行,必须会引起延迟,第二个问题是数据库压力过大,当进行高频度的轮会生产大量的数据库查询,并且如果有大量的使用者进行轮...再比如医疗应用之中的危急值管理,当发现检验、检查危急值之后,需要及时通知病区启动声光报警系统等,提醒医护工作人员及相关领导做出相应的措施,再比如应用于异构系统整合,当检验系统做出检验报告,通过消息总线进行发布,HIS系统则即时会收到检验报告数据而实现系统的整合...二、基于Socket的实现      目前能够实现发布订阅模式的开源产品非常之多,为什么还要制造轮子呢,其主要原因有以下几点      1)像NServiceBus这种东西基于MSMQ,大量的发布者-...那为什么要使用Socket技术进行实现呢,其主要原因是有以下几点:      1)使用高效的Socket通信技术,高效、支持更多的客户端。     ...SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置、AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析文章进行了解和学习

89700

使用CJSON库实现XML与JSON格式的相互转化

,在网上查了相关的资料后决定在json格式的存储于解析这块采用cjson库,而xml就简单的来解析字符串。...while表示如果它的后面没有”<”表示后面就没有对应的值,这个时候就是xml格式的数据遍历完了,这个时候结循环中判断了下是否存在下一个标签,如果没有则结束循环,返回json格式字符串,函数返回。...环中依次遍历它的每一个标签,第一个if判断中出现这样的语句strValue != “” && LabelPos !...另外还判断了是否存在数组的情况,json中数组是以一个类似于子对象的方式存储的,所在转化为xml时会将它作为一个子项存储,只是它的标签于父项的标签相同,所以判断数组的语句是当它存在子项时进行的,当得到它是一个数组时...当它只是一个普通的对象时会根据是否存在引号来判断它是否是字符串,然后调用不同的添加项的函数来插入数据 最后将json对象转化为字符串,清空内存并返回函数(万别忘记清理内存) 整个项目的下载地址:

2.3K20

分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载

B所使用的程序之中写数据库轮代码,这样就会产品一个很严重的两个问题,第一个问题是延迟,轮机制要定时执行,必须会引起延迟,第二个问题是数据库压力过大,当进行高频度的轮会生产大量的数据库查询,并且如果有大量的使用者进行轮...再比如医疗应用之中的危急值管理,当发现检验、检查危急值之后,需要及时通知病区启动声光报警系统等,提醒医护工作人员及相关领导做出相应的措施,再比如应用于异构系统整合,当检验系统做出检验报告,通过消息总线进行发布,HIS系统则即时会收到检验报告数据而实现系统的整合...二、基于Socket的实现      目前能够实现发布订阅模式的开源产品非常之多,为什么还要制造轮子呢,其主要原因有以下几点      1)像NServiceBus这种东西基于MSMQ,大量的发布者-...那为什么要使用Socket技术进行实现呢,其主要原因是有以下几点:      1)使用高效的Socket通信技术,高效、支持更多的客户端。     ...SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置、AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析文章进行了解和学习

1.3K70

PHP实现RPC(简版)

这就要借助一下PHP的魔术函数了, __call() 这个函数是一个类调用不存在的方法时会跑到这里来, 所以, 我们返回一个类, call方法中进行远程调用, 这样, 本地看来就只是调用一个方法....刚才使用PHP简单实现中, 已经发现了. 需要解决的问题如下: 网络通信 信息格式 对象状态保存 1.网络通信 说到底, 网络通信不过两种: tcp udp. 有没有使用udp实现的RPC呢?...当然, 如果需要频繁调用, 可以不断开tcp连接, 一段时间内一直保持连接, 避免频繁握手. 2.信息格式 信息格式就有很多选择了, json、xml等等, 也可以自己定制, 只要发送端和接收端统一信息格式就行了...过程 个人理解的RPC调用过程: 客户端创建RPC对象 客户端调用方法 RPC解析方法并将对象及参数做序列化 RPC通过网络连接发送方法调用 服务端接收到方法调用, 解析对象及参数反序列化 服务端执行方法并将结果序列化返回...客户端接收到结果并进行解析, 返回给本地调用者 拿到最终结果 RPC适用于内部网络不同项目之间的通信, 如果是对外暴露的, 个人感觉还是通过接口的形式吧.

1.4K10
领券