输入
阅读专栏《邱岳的产品手记》,85%。
输出
暂无
一周三个算法题,中断第二次。
收获
代码
- unset的变量,会notice undefined variable ,is_null 并不会检测存不存在。
php empty,isset,is_null比较(差异与异同)https://www.cnblogs.com/chengmo/archive/2010/10/18/1854258.html
- try catch粒度要细。
缘由,一个功能如果调用两个或以上接口,都要try catch。不然挂一个。整个功能可能都不可用了。
3.优先级问题,之前在其他周总结说过用(int),这里纠正下之前的。注意执行顺序。
$arr = []; var_dump((int)$arr['page'] ?? 0);
PHP Notice: Undefined index: page in /Users/yanshinian/.composereval()'d code on line 2
$arr = ['page'=>'33']; var_dump((int) ($arr['page'] ?? 0));
4.缓存key的命名要严谨
缓存key
我们经常这么写。$id =33; var_dump(sprintf("cache:%s", $id));
严谨点是%s换成%d。
如果是c的话,编译不过去的。
5.PHP curl的超时配置(其实面试很有可能问的一个问题)
我在日志中看到 connection time out 跟 Operation timed out
https://segmentfault.com/a/1190000004085053
6.bc函数应该传字符串。
php是个神奇的语言。各种隐式转换。
7.代码重构(对类名做了abcde的处理),重构的目的是为了以后开发方便、当然也要提升性能。
作为一个curd程序员是很少用设计模式(额,写个单例是有,除此之外,至少php我是没有怎么用)。对于设计模式,有场景了才会去用吧。但是了解下设计模式(为什么用这个?)还是有些帮助的。
├── Seckill
│ ├── AbstractSeckillService.php
│ ├── ASeckillService.php
│ ├── BSeckillService.php
│ ├── CSeckillService.php
│ ├── SeckillInterface.php
│ ├── SeckillServiceFactory.php
│ ├── SeckillTrait
│ │ └── SeckillTrait.php
│ ├── DService.php
│ └── ESeckillService.php
以下想法仅供参考:
1. 公用无依赖的放到Trait。谁想用谁就use 这个trait。组合好于继承。
2. 公用有依赖的可以放到抽象类。或者也可以弄个基类。
3. 不同类型的”秒杀“弄成不同的类。用工厂SericeFactory做统一出口。
4.用interface。把公共方法用接口去规范。
重构,本质上就是一堆微操作。重构这个实践的核心,就是将调整代码的动作分解成一个一个的小动作,如果不能理解这一点,你就很难理解重构本身的价值。--摘极客时间《10x程序员工作法》
讲真业务代码挺繁杂。本想大刀阔斧。后来变成挪过来得了。然后微调微调。
命令与工具
- 看日志
tail -f -n 1 /x/xx/xx/error_20190709.log | awk '{print 2,
4,
6}'
tail -f -n 1 这样组合是没用过的。倒是经常tail -f,满屏,看的头痛。
优先级问题
网友评论