Skip to content
- 阅读代码的时间比写代码的时间多得多。思路清晰的设计可获得易于理解的程序,但注释、细致的解释以及一些示例往往具有不可估量的价值。无论对你自己,还是对后来的人,它们都是相当重要的。
- 对于代码中存在的特殊的例外处理,在进行改动时一定要注意,以免改出bug, 最好把例外的代码隔离出去
- laravel的
Users::expired()->get()->pluck("user_id")
返回的是Illuminate\Support\Collection
对象,不可直接in_array
,需手动调用toArray()
- 不要为了省事而写不清晰的让人看不懂的代码,因为不知道什么时候,你自己也看不懂了。重写都没法下手。
- 具体的错误信息不应该暴露到普通用户
- ES中对于keyword类型字段的模糊查询的长度要做限制。以免造成集群崩溃 (1次)
Array to string conversion
处理数据时要确认数据结构是否是想要的,不要主观判断猜测 (多次)
- 更新用户的配置之后,如果需要使用用户的最新配置,就不能从用户的
session
中拿数据了。因为session
中肯定是旧的,这点没考虑到。(1次)
- ES 查询默认是10条结果,一定记得加size,如果需要取出全量数据,要么scroll 要么分页慢慢查 (好多次)
isset
对于值为null
的变量为 false
, strlen
对于变量值为null
为0
;
- 不要用
timestamp
, 改用 datetime
- 删除数据时要判断该数据是否是当前用户的数据,防止被跨站攻击利用枚举法依次列举id进行删除 从而导致删除数据库被删库!!!!也就是水平权限控制
- 忘记清空
脏数据
,将队列中的数据写文件时,忘记清空队列中的脏数据
字符串拼接
没考虑到某个值不存在的情况
- 判断值是否存在直接用
!
(这会导致当值为0出现问题) 但用strlen
比较好, 但又要考虑存在这个值是不是数组的情况
- ES
raw
查询 需要在查询体中加上 index (发生了3次)
- 修改一个bug 导致另一个bug 测试不完整
- php 直接导出数据到页面的话,如果程序有异常也不会报错。 要注意。 可以先保存文件到本地来排查
- 严格判断列表中的数据 是不是空 列如这个情况 “[]” 需要decode 后再判断、 可以直接在Redis里decode出来
- es的 max_result_window = 10000 默认值是10000 凡是有可能分页之类的超过这个数量 就一定要对ES进行配置 (次数:4 )
- 请求ES或其他接口,时通时不通的情况,有可能是端口用完了, 用
netstat -atunp | grep 9200
查看链接指定服务的连接数
- 控制器里面要加
try catch
不然异常直接抛到了客户端。 可以考虑框架的所有错误处理(次数: 2)
- 对于要上线的功能,一定要开分支 。 不然很麻烦,代码都不敢随便提交。(次数: 1)
- 对于
strlen
的使用 要保证参数不是数组 不然会抛异常 (次数:3)
- 对于不确定是否存在的字段,直接使用了
$data['field']
导致程序报错 (次数: 4)
- 不要
主观假设数据来源合法
,不要猜测数据来源是你想要的样子。 要进行反问,如果不是我想要的数据,怎么处理 (次数:3)
- 粗心,复制代码没改到位。
- 写在repository 里面的代码 要考虑到其他的repository 会不会用到, 是不是要抽出来。直接放到model里或者找一个合适的地方。 (次数:1)
- 这个ES库超级烂
basemkhirat/elasticsearch
千万不要用,直接用elasticsearch-php
这个库。
- 数据库查询 连表查询会造成模糊的字段要
表名.字段名
(次数:2)
- strpos(haystack, needle) 参数给搞反了。
$a=1
$a?:0
和 $a==1?:0
的结果不同一个是1
一个是true