`

编程中注意事项

 
阅读更多
1。 防空指针异常。不要相信db中数据,和外部传参过来的数据,包括必输项。
2。 不允许for循环中调用mc或db
3。 一定要考虑调用量,减少对db,mc,redis操作次数。
4。 封装变化,把可能变化的逻辑写在一处。
5。 调用别的接口或者rpc,要进行异常的处理和超时处理。或者新的功能也对自己加异常处理,免的影响线上已有逻辑。
6。 比较大有风险的功能加降级开关控制。
7。 异步操作和同步操作的相互影响问题。注意不要让异步的处理结果覆盖了同步的处理结果
8。 并发请求防止串数据,localcache防并发串数据。
9。 测试环境没问题,线上有问题。可能是并发或者缓存的问题 。
10。多线程操作时或者无限for循环,注意cpu资源消耗,如有可能,可以短暂线程sleep。
11。调用外部接口要用try-catch 捕获,最好能捕获throwable,以防对自己程序造成影响。
12。设计SOA接口时,任务worker时要防重入,特别是插入类接口,即所谓的幂等性
 
之前公司总结的:
数据安全 

1          接口防重入

  • 问题:
  1. 各种Worker、调用方会重试失败的调用
  2. 前台用户提交后,再次刷新
  3. 恶意重试
  • 方案:
  1. 调用方提供UUID
  2. 被调用方根据UUID重复与否决定是否处理
    1. 没有重复,处理并返回结果
    2. 有重复,直接返回上次处理结果
  3. 完全是利用数据库的约束来实现
  4. 并发较低

2            防轮询

  • 问题:
  1. 有序的数字URL
  • 方案:
  1. 服务端增加验证,确认是本人访问
    1. 增加访问日志,某个帐号访问量大,报警(ERP后台)
  2. Id无序
  3. Id有序的,url中增加passkey,并且验证
    1. Passkey=hash(id+key)

3            xss攻击

  • 问题:
  1. 恶意上传js(恶意伪造文件扩展名)
  2. 生成恶意链接(url中提交内容带有脚本引用 )
  3. 发送给其它用户
    1. 偷取用户cookie
    2. 自动下单
  • 方案:
  1. 上传图片时,一定要对content-type和文件头判断
    1. PNG图片,文件头会有PNG字样
    2. GIF图片,文件头是GIF89A
  2. 任何场景下输出时,对于字符串输出进行htmljs等等编码
    1. 转义><&、”等等特殊字符
    2. 如果要输出富文件
      1. 必须过滤scriptobject
               2. 可以使用UBB代码
 

2   极值处理

1            最大范围-内存溢出

  • PermGen space
  1. Class太多,实时编译内容多
  2. 常量太多(String.intern())
  3. 代码增强技术产生class太多
  • Java heap space
  1. 缓存内容太多
  2. 队列太大,只移指针,不清空
  3. 访问量太大,回收器来不及回收
  • 处理:
  1. Jmap工具
  2. 垃圾回收日志输出
  3. Java探针
  4. 最好分页取出数据、然后再处理

2           最大范围-最大装载量

  • 问题:
  1. 从磁盘读入文件,文件大小超过JVM内存
  2. Socket读入数据,读入内容超过JVM内存
  3. 从数据库读入数据,读入数据超过JVM内存
  4. 创建byte数组时,初始化大小超JVM内存
  • 建议:
  1. 分步读入安全量数据
  2. 处理完成后,释放内存
  3. 再读入

3            最大范围-循环阀值

  • For循环
  1. 循环结束条件来自外部参数
    1. 这个值不受你控制
    2. 需要判断这个值不能超过阀值
  • While循环
  1. While(true)里面的break来自外部参数
  2. While(条件)来自外部参数
  • 方案:
  1. 设置计数器,达到阀值后强制跳出

 

4            最大范围-边界

  • 各种对象为null
  • 各种字符串为null和超长
  • 各种数字为0或越界
  1. 尤其定义成int,外面传入long
  • 数组的大小

5            最大范围-各种超时

  • 读取文件超时
  1. 文件太大
  2. 磁盘出问题
  • 各种网络接口超时
  1. 设置默认超时
  2. 设置特定超时设置
  3. 连接被断开
  • Web ServiceICESAF调用超时
  1. 尽量并行调用接口
    1. 三个接口abc,相互无影响。
      1. 一般情况 a()b()c()
      2. 并行调用: 利用FutureTask先创建异步调用,最后get结果
  • 后台记录页面的执行时间

6          最大范围-限流

  • 问题:
  1. 并行请求太大,超过系统能力
  • 方案:
  1. 设置最大执行线程数量
  2. 执行中的线程数量记录
  3. 新请求后,检查是否超最大数
    1. 超了,提示您先坐会儿,重新点击按钮提交
      1. 12306这次应用了
    2. 对于反复刷新的,必须限制
 
 
梁飞总结的:
    •敲每个点号时,考虑:
–会不会出现空指针?
–有没有异常抛出?
–是不是在热点区域?
–在哪个线程执行?
–有没有并发锁间隙?
–会不会并发修改不可见?
分享到:
评论

相关推荐

    ug编程与加工注意事项

    ug编程与加工注意事项

    单片机嵌入式编程注意事项

    因此,掌握单片机嵌入式编程的技巧和注意事项是十分必要的。 首先,谈到编程语言,单片机嵌入式编程常用的语言包括汇编语言、C语言和C++。汇编语言因其接近硬件执行层,能够实现高效率和对硬件的精细控制,但编写...

    编程注意事项(化为编程守则)

    华为认证的编程注意事项旨在提高代码质量,遵循以下几点: 1. **排版规则**: - 缩进:推荐使用4个空格作为缩进单位,以保持代码的整洁和一致性。对于自动化生成的代码,可能存在不同风格,但应尽量统一。 - 空行...

    嵌入式编程注意事项总结

    以下是对"嵌入式编程注意事项总结"的详细阐述: 1. **理解硬件**:嵌入式编程与普通桌面编程不同,程序员需要深入理解目标硬件平台的特性,包括处理器架构、内存限制、外设接口等。了解硬件可以帮助优化代码,避免...

    SQL编程注意事项

    以下是一些关键知识点,它们涵盖了标题"SQL编程注意事项"所提及的要点。 1. NULL值处理:在SQL中,NULL表示未知或无值,与0、空字符串等不同。在进行比较和计算时,NULL值需要特别对待。例如,`NULL = NULL`返回的...

    单片机编程技巧分析和注意事项

    分析和讲述了单片机编程过程中要注意的一系列事项,对编程方法做了分析,是一份ppt的文档。

    谈一下PLC编程注意事项

    1.双线圈输出如果在同一个程序中,同一元件的线圈使用了两次或多次,称为双线圈输出。对于输出继电器来说,在扫描周期结束时,真正输出的是最后一个Y0的线圈的状态(见图1a)。 Y0的线圈的通断状态除了对外部负载起...

    msp430 编程注意事项

    ### MSP430编程注意事项详解 #### 一、引言 MSP430是一款由德州仪器(TI)生产的超低功耗16位微控制器系列。它以其极低的功耗特性、丰富的内置功能模块及高度灵活的配置能力而闻名于世,在嵌入式系统开发领域具有...

    宝马编程注意事项:

    在宝马汽车的编程过程中,确保遵循正确的步骤和注意事项至关重要,以避免潜在的设备损坏和编程中断。以下是对宝马编程的一些详细说明和要点: 1. 使用正版工具:宝马编程需要专用的电脑工具,如OPS加SSS、ISSS加...

    CICS 编程注意事项

    在CICS编程中,有一些重要的注意事项需要遵循,这些注意事项对于提高程序的效率、稳定性和可维护性都有重要作用。 首先,CICS事务处理是CICS的核心概念,它是对一个或多个数据库或文件的处理单元。每个CICS事务都有...

    ASP.NET编程中的重要注意事项

    在本篇文件中,我们将讨论编程人员在使用ASP.NET开发应用程序时需要注意的10个技巧,这些技巧涉及从缺省的控件、表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET环境。

    MFC多线程编程注意事项

    MFC多线程编程注意事项,很不错的资料。

    IAR编程注意事项_IAR编程注意_stopc5v_

    本文将详细讨论"IAR编程注意事项",并重点关注"stopc5v"这一特定问题。这通常是针对某种特定微控制器或处理器的优化设置,如STOP模式下的电源管理。 首先,理解IAR编程的基本流程至关重要。这包括创建项目、配置...

    并行编程方面的设计注意事项

    并行编程方面的设计注意事项并行编程方面的设计注意事项

    单片机嵌入式编程的五个注意事项

    在单片机编程的过程中,如果一名设计者能够同时掌握多门...本文特意为大家整理了拥有嵌入式编程领域多年工作经验的工程师意见,汇总成了一篇能够对嵌入式编程经验有着指导意义的注意事项,感兴趣的朋友快来看一看吧。

    基于PHP编程注意事项的小结

    综上所述,理解PHP中这些常见的编程注意事项对于编写高质量的PHP代码至关重要。在开发过程中,应当注意运算符的优先级、遵循变量命名的大小写规则,并正确处理序列化数据,以减少潜在的错误和问题。同时,时刻关注...

    php编程的注意事项

    在PHP编程领域,掌握一系列的关键注意事项对于提升代码质量和开发效率至关重要。以下是对“php编程的注意事项”这一主题的深入解析,旨在帮助初学者和有一定经验的开发者避免常见陷阱,优化编程实践。 ### 1. 统一...

    路径分隔符在编程中的注意事项

    ### 路径分隔符在编程中的注意事项 #### 一、引言 在软件开发过程中,正确处理文件路径对于程序的稳定运行至关重要。不同操作系统(如Windows与Unix/Linux)对于路径分隔符有着不同的约定,这也使得路径的处理成为...

    android java编程注意事项.doc

    android java编程注意事项

Global site tag (gtag.js) - Google Analytics