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

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

作者:赵玉开,十年以上互联网研发经验,2013年加入京东,在运营研发部任架构师,期间先后主持了物流系统自动化运维平台、青龙数据监控系统和物流开放平台研发工作,具有丰富物流系统业务和架构经验。...在此之前在和讯网负责股票基金行情系统研发工作,具备高并发、高可用互联网应用研发经验。 贾言验幻空越重, 命频异长。 依轮线日简, 接偶正分壮。言欢空月虫, 明勋品宜昌。...null 使用StringUtils判断字符串非空 越: 如果方法传入数组下标作为参数,要在一开始就做下标越界校验,避免下标越界异常 重: 不要写重复代码,重复代码要使用重构工具提取重构 命频异长...: 不要在循环中调用服务,不要在循环中做数据库等跨网络操作 频: 写每一个方法时都要知道这个方法调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高一定要考虑性能指标,...壮: 时刻注意程序健壮性,两个方面实践提升健壮性: 契约,在设计接口时定义好协议参数,并在实现时第一时间校验参数,如果参数有问题,直接返回给调用方; 如果出现异常情况, 也按异常情况约定应对策略

4.7K30

让你写出更加优秀代码!

为空时会抛出空指针异常; 确认返回集合是否可为空时要做非空判断, 再做for循环; 使用空对象模式,约定返回空集合,而非null; 使用StringUtils判断字符串非空; 越-月 如果方法传入数组下标作为参数...-勋 不要在循环中调用服务,不要在循环中做数据库等跨网络操作; 频-品 写每一个方法时都要知道这个方法调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高一定要考虑性能指标,考虑是否会打垮数据库...,是否会击穿缓存; 异-宜 异常处理是程序员最基本素质,不要处处捕获异常,对于捕获了只写日志,没有任何处理catch要问一问自己,这样吃掉异常,是否合理; 下面是一个反例, 在导出文件controller...日-日 打印日志和设定合理日志级别,如有必要要添加if条件限定是否打印日志,在日志中使用JSON序列化,生成长字符toString()都要做if限定打印,否则配置日志级别没达到,也会做大量字符串拼接...壮-妆 时刻注意程序健壮性,两个方面实践提升健壮性: 契约,在设计接口时定义好协议参数,并在实现时第一时间校验参数,如果参数有问题,直接返回给调用方; 如果出现异常情况, 也按异常情况约定应对策略;

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

分布式计划任务设计与实现

首先是高可用HA需求,当运行计划任务服务器一旦出现故障,所有的计划任务将停止工作。 其次是性能问题,越来越多大型计划任务程序出现,对CPU/IO密集操作,单个节点已经不能满足我们需求。...总之解决计划任务灾备,要比web,cache, database 复杂多。 图 1. 分时方案 ? 严格划分时间片,交替运行计划任务,当主系统宕机后,备用系统仍然工作,只不过处理周期拉长了。...正常情况下主系统工作备用系统守候,心跳检测发现主系统出现故障,备用传统启动。缺点:单一系统,不能负载均衡,只能垂直扩展(硬件升级),无法水平扩展 图 3. 多路心跳方案 ?...上面的HA是三层基于VIP技术实现,下面这个方案我采用多路心跳,做服务级,进程级,IP与端口级别的心跳检测,做正常情况下主系统工作备用系统守候,心跳检测发现主系统出现故障,备用传统启动,当再次检测到主系统工作...缺点:开发复杂,程序健壮性要求高,有时会出现释放锁问题。 图 5. 任务轮或任务轮+抢占排队方案 ? 任务轮或任务轮+抢占排队方案 每个服务器首次启动时加入队列。

1.1K50

分布式计划任务设计与实现

总之解决计划任务灾备,要比web,cache, database 复杂多。 图 1. 分时方案 严格划分时间片,交替运行计划任务,当主系统宕机后,备用系统仍然工作,只不过处理周期拉长了。...HA 高可用方案 正常情况下主系统工作备用系统守候,心跳检测发现主系统出现故障,备用传统启动。缺点:单一系统,不能负载均衡,只能垂直扩展(硬件升级),无法水平扩展 图 3....多路心跳方案 上面的HA是三层基于VIP技术实现,下面这个方案我采用多路心跳,做服务级,进程级,IP与端口级别的心跳检测,做正常情况下主系统工作备用系统守候,心跳检测发现主系统出现故障,备用传统启动...,当再次检测到主系统工作,将执行权交回主系统.缺点:开发复杂,程序健壮性要求高 图 4....缺点:开发复杂,程序健壮性要求高,有时会出现释放锁问题。 图 5. 任务轮或任务轮+抢占排队方案 任务轮或任务轮+抢占排队方案 每个服务器首次启动时加入队列。

1.4K70

超全 | 只有高手才知道C语言高效编程与代码优化方法(二)

如果在循环中一个函数经常被调用,那么就将循环纳入到函数,这样可以减少重复函数调用。...在以下应用,近一半函数调用调用叶子函数。 由于不需要执行寄存器变量存储和读取,叶子函数在任何平台都很高效。...寄存器变量读取性能消耗,相比于使用四五个寄存器变量叶子函数所做工作带来系能消耗是非常小。 所以尽可能将经常调用函数写成叶子函数。函数调用次数可以通过一些工具检查。...递归可能优雅而简单,但需要太多函数调用; 不在循环中使用sqrt开平方函数,计算平方根非常消耗性能; 一维数组比多维数组更快; 编译器可以在一个文件中进行优化-避免将相关函数拆分到不同文件...使用val+val+val而不是val*3; put()函数比printf()快,但不灵活; 使用#define宏取代常用小函数; 二进制/未格式化文件访问比格式化文件访问更快,因为程序不需要在人为可读

3.6K20

Socket 面对挑战?

虽然将单个系统调用添加到循环中似乎不会增加太多负担,但情况并非如此。每个系统调用都需要将参数封送并复制到内核,同时导致系统阻塞调用进程并调度另一个进程。...低延迟应用程序问题在于 kevents ()传递数据,只传递数据就绪信号。下一个逻辑步骤是使用基于事件 API 来传递数据。...传统上,操作系统系统接收到每个数据包执行两个副本。第一个拷贝由网络驱动程序网络设备内存执行到内核内存,第二个拷贝由内核socket层在用户程序读取数据时执行。...系统接收到每个消息都要执行拷贝,导致这些复制操作成本都较高。同理,当程序想要发送一条消息时,必须将发送每条消息数据用户程序复制到内核; 然后再被复制到设备用来在网络上传输缓冲区。...api 衍生品,例如 send () ,需要扩展才能在一个多宿主世界工作

33220

MIT 6.S081 教材第七章内容 -- 调度 --

而两个CPU核使用同一个栈运行同一个线程会使得系统立即崩溃。 所以,在进程切换最开始,进程先获取自己锁,并且直到调用switch函数时也释放锁。...当shell需要输出时会调用write系统调用最终走到uartwrite函数,这个函数会在循环中将buf字符一个一个向UART硬件写入。...exit接口整体来看,在最后它会释放进程内存和page table,关闭已经打开文件,同时我们也知道父进程会wait系统调用唤醒,所以exit最终会导致父进程被唤醒。...这里可能会很复杂,因为关闭文件系统文件涉及到引用计数,虽然我们还没学到但是这里需要大量工作。不管怎样,一个进程调用exit系统调用时,会关闭所有自己拥有的文件。...因为文件系统是持久化,它能在多次重启之间保持数据,我们需要保持文件系统良好状态,如果我们正在更新文件系统过程,例如创建文件,然后我们想关闭操作系统,断电之类

24710

【Python 千题 —— 基础篇】分解数据

在这里,我们使用 eval 函数来解析字符数字。 输入描述 输入一个字符串。 输出描述 程序将从输入字符串中提取数字,将这些数字存储在列表,并输出该列表。...for token in input_string.split(","): 使用 eval 函数解析字符数字: 在环中,我们使用 eval() 函数来尝试解析当前部分(即字符数字),并将其计算结果添加到...这个习题涵盖了前面提到知识点,包括使用 input() 函数读取用户输入数据,字符串分割,使用 eval() 函数解析字符数字,列表操作,以及使用 print() 函数输出结果。...相关知识点 这个Python编程习题涉及了以下主要知识点: input函数: input() 是Python内置函数,用于用户处读取输入。它将等待用户在控制台中输入数据,并返回用户输入内容。...帮助学习者理解如何字符串中提取数字,并将它们存储在列表

15340

日志切割之Logrotate

1、关于日志切割   日志文件包含了关于系统中发生事件有用信息,在排障过程或者系统性能分析时经常被用到。对于忙碌服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。...日志文件设置在独立配置文件,它(们)放在/etc/logrotate.d/目录下。...我们将展示怎样使用logrotate来管理该日志文件。 我们创建一个日志文件开始吧,然后在其中填入一个10MB随机比特流数据文件。...它们符号常量在头文件signal.h定义。在不同平台上,信号编号可能发生变化,因此需要使用符号名称。...压缩 copytruncate             用于还在打开日志文件,把当前日志备份并截断 nocopytruncate           备份日志文件但是截断

1.9K30

Oracle 错误总结及问题解决 ORA「建议收藏」

ORA-00318: 日志 (线程 ),预计文件大小 与 匹配 ORA-00319: 日志 (线程 ) 具有错误日志重置状态 ORA-00320: 无法日志 (线程 ) 读取文件标题 ORA...ORA-01151: 如果需要,请使用介质恢复以恢复块和恢复备份 ORA-01152: 文件 没有完备旧备份恢复 ORA-01153: 激活了兼容介质恢复 ORA-01154: 数据库正在运行...此编号必须存在 ORA-01170: 文件未找到 ” ORA-01171: 数据文件因高级检查点错误而将脱机 ORA-01172: 线程恢复停止在块(在文件) ORA-01173: 数据字典指明系统表空间丢失数据文件...: 权限不足, 无法游标高速缓存中选择数据 ORA-13774: 权限不足, 无法工作量资料档案库中选择数据 ORA-13775: 输出游标数据类型不一致 ORA-13776: 用户 “” 尚未获得对...要执行此操作, 必须禁用对象 ORA-16603: Data Guard 中介在配置 ID 检测到匹配 ORA-16604: 无法描述使用程序包 “” 模板 ORA-16605: 模板正在使用,

19.4K20

Python快速学习第十天

首先指定了我要读取字符数"4",然后(通过不提供要读取字符方式)读取了剩下文件。注意,在调用open时可以省略模式,因为'r'是默认。...通常来说,逐个字符读取文件也是没问题,进行逐行读取也可以。还可以使用file.readline读取单独一行(当前位置开始直到一个换行符出现,也读取这个换行符)。...通常来说,一个文件对象在退出程序后(也可能在退出前)自动关闭,尽管是否关闭文件不是很重要,但关闭文件是没有什么害处,可以避免在某些操作系统或设置中进行无用修改,这样做也会避免用完系统中所打开文件配额...如果需要继续使用文件(不关闭文件),又想将磁盘上文件进行更新,以反映这些修改,那么就要调用文件对象flush方法(注意,flush方法不允许其他程序使用文件同时访问文件,具体情况依据使用操作系统和设置而定...在Python近几个版本(2.2开始),文件对象是可迭代,这就意味着可以直接在for循环中使用它们,从而对它们进行迭代。如代码清单11-12所示,很优雅,不是吗?

1.2K60

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

goto goto实际上只是一个运算符,和其他语言一样,PHP鼓励滥用goto,滥用goto会导致程序可读性严重下降。...goto作用是将程序执行当前位置跳转到其他任意位置,goto本身并没有要结束循环作用,但其跳转位置作用使得其可以作为跳出循环使用。...可以从一个函数里调用,也可以从一个include()或者require()语句包含文件里来调用,也可以是在主程序调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require...()语句包含文件中被调用程序执行将会马上返回到调用文件程序,而返回值将作为include()或者require()返回值。...而如果是在主程序调用,那么主程序将会马上停止执行 代码如下: <?

4.9K40

优化查询性能(三)

但是,当管理门户或SQL Shell调用Show Plan时,Show Plan使用运行时模式。...使用以下任意一种方法,管理门户显示查询备选执行计划: 选择系统资源管理器,选择工具,选择SQL性能工具,然后选择备用显示计划。...outfile 要列出查询优化计划文件路径名。指定为带引号字符串。如果该文件不存在,系统将创建该文件。如果该文件已存在,则InterSystems IRIS会覆盖该文件。...eos 可选-语句末尾分隔符,用于分隔Infile列表各个缓存查询。指定为带引号字符串。默认值为“GO”。如果此EOS字符串与缓存查询分隔符匹配,则不会生成输出文件。...假设从缓存查询导出到文本文件查询包含完全限定表引用;如果文本文件表引用不是完全限定,则QOPlanner实用程序使用在运行QOPlanner时在系统上定义系统范围默认模式。

1.2K20

编写可维护JavaScript

一、基本格式化 A.缩进层级 1.建议使用4个制表符缩进 B.语句结尾 1.不要省略分号 C.行长度 1.建议单行长度超过80个字符 D.换行 1.下一行两个缩进 2.将符号置于行尾 3.当给变量赋值时...推荐将严格模式运用到全局作用域中 2.尽可能在函数内部使用严格模式 F.相等 1.数字和字符串比较字符串会转为数字,布尔值和字符串比较布尔值会转为数字,对象和类型比较会调用valueOf(),如果没有...,你就做到了松耦合;当一个大系统每个组件内容有了限制,就做到了松耦合;在一起工作组件无法达到“无耦合”(no coupling) B.将JavaScriptCSS抽离 1.即使是老版本IE也不要使用...(……)) 2.最好将所有的JS代码都放入外置文件 F.将HTMLJavaScript抽离:例如innerHTML这种不要使用 1.服务器加载:jquery.load(……) 2.简单客户端模板...等第三方库所提供模板系统 六、避免使用全局变量 A.全局变量带来问题 1.命名冲突:全局环境是用来定义JS内置对象地方,如果给这个作用域添加了自己变量,接下来则会面临读取浏览器附带内置变量风险

83210

C4droid8.0汉化版下载

0xa 由于汉化过程不当处理导致QT项目级别无法正常编译, 有QT相关需要的话请下载C4droid8.0原版 更新日志: 8.01 QT不在依赖于第三方应用(建议使用QT) GCC更新为10.2 支持中文标识符和...经测试v6.97使用了busyboxsh命令为默认shell,可以直接运行/sdcard下可执行文件,这是个不错改进。 很多时候..../configure编译库会出现mkdir /temp/xxx 没有此目录错误,蜜汁bug,怎么能在根目录下直接读写文件呢(起码也要挂载读写分区)。...Q:安装上,安装失败签名错误等 A:卸载原版和插件,建议使用一键卸载c4droid工具卸载,共存版安装上请加QQ 2....导出应用问题 Q:导出失败 A:检查文件名是否合法,检查资源路径是否合法,检查代码是否可以运行 Q:导出包,解析失败无法安装 A:导出时是否使用了中文(全角)字符包名,必须使用英文

1.3K80

使用Logrotate解决Tomcat日志文件catalina.out过大问题

就好比明明身边躺着现成性感美女,大家却忙着自娱自乐,罪过! logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧日志文件,并创建新日志文件,起到"转储"作用。...日志文件设置在独立配置文件,它(们)放在/etc/logrotate.d/目录下。...对于第六个归档,时间最久归档将被删除。 compress 在轮任务完成后,已轮归档将使用gzip进行压缩。...这在你或任何软件仍然需要读取最新归档时很有用。 missingok 在日志轮期间,任何错误将被忽略,例如“文件无法找到”之类错误。 notifempty 如果日志文件为空,轮不会进行。...原因在于:linux系统,内核是根据文件描述符来找文件

2.5K50

cobol语言基础教程_boo语言

在这个部,段和节名称是用户定义。在过程部必须至少有一个语句。结束这个部执行最后一条语句是在调用程序使用STOP RUN或者是在被调用程序使用EXIT PROGRAM。     ...*通过copy系统LLDCB字段来定义本文件字段 3.文件读     读文件使用READ命令,后面直接加上要读取文件文件名,一次只能读一条记录,想读文件多条记录时,需要使用循环。...排序索引被保持在文件系统,其将关键值与文件记录位置相关联。 也可以创建备用索引来获取记录。 这种文件需要在定义时候指定KEY 3.相对文件组织 相对文件由依据相对地址排序记录组成。...2.关键字 1.输入输出 (1)ACCEPT     用于接收操作系统或者用户获取注入日期,时间和天等数据。ACCEPT一般要搭配FROM进行使用。...5.Call调用程序时候,若使用动态调用,则可以在主程序使用Cancel 子程序语法,把内存这个子程序销毁。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

2.6K30

浅谈软件开发性能提升

影响硬性性能方面的因素有: 处理计算机体系结构下存储系统层次结构排列顺序: cpu处理器中允许将多条指令程序规定顺序分开发送给各相应电路单元处理技术。...语言抽象性(表现为词汇级和词法级抽象) : CC++语言中间文件是obj文件,它通过在栈上分配了sizeof(obj)字节空间,它们时间复杂度都是为0(1),相对于C语言C++面向对象类机制,...如果需要再对象新拷贝上进行操作情况下,建议直接使用obj方式 String接口优化 推荐使用const String&(除非调用方确保有现成String对象); 如果不需要修改字符串内容,可以使用...程序尽量减少对内存管理器调用次数。 减少内存读写操作,特别是减少内存写次数,并且尽可能按顺序进行内存访问读取操作。 一起使用函数存储在一起。...6、延迟工作,按需执行。 7、减少跨进程调用。 8、使用高性能函数库。 9、可以通过使用智能指针代替指针使用。 10、优化动态库文件加载,尽量避免不必要IO操作。

89420

实用运维脚本分享

,块设备IO统计等 sar #网络连接状态查看 netstat -s #进程资源使用信息查看 pidstat 1 pidstat -d 1 #查看某个进程系统调用信息 -p后面是进程id,...-tttT 进程系统系统调用时间 strace -tttT -p 12670 #统计IO设备输入输出系统调用信息 strace -c dd if=/dev/zero of=/dev/null bs...nohup就是不挂起意思 下面输出被重定向到myout.file文件 nohup command > myout.file 2>&1 & ##at:计划任务,在特定时间执行某项工作,在特定时间执行一次...应用程序优先权值范围-20~19,数字越小,优先权就越高。...需要注意是普通用户只能在0~19之间调整应用程序优先权值,只有超级用户有权调整更高优先权值(-20~19)。

21241

android6.0系统Healthd深入分析

} POWER_SUPPLY_SYSFS_PATH定义为"/sys/class/power_supply",在init函数打开系统文件夹,然后一一读取文件夹下文件内容,在while循环中判断该文件夹下各个文件节点内容...至此,healthd_init函数就分析完了,其主要工作就是:创建了三个文件节点用来监听相应三种事件改变;创建BatteryMonitor对象,并通过读取/sys/class/power_supply...,死循环中变量nevents 表示epollfd监听得到事件数目,这里介绍一下轮询机制重要函数epoll_waite(). epoll_wait运行道理是:等侍注册在epfd上socket...,电压,温度,健康状况,电池状态以及充放电倍率存入dmesgline变量,在后面会将电池充电类型,电池使用时间都以字符串存入dmesgline变量,然后: KLOG_WARNING(LOG_TAG,...,电量,使用等相关信息,它通过一个阻塞式死循环不断监听底层三个文件节点上事件信息,当监听到事件便调用到BatteryMonitor执行更新操作,通过BatteryService.java中注册监听电池属性改变函数

1.7K10
领券