码农翻身

尾递归

  • n的阶乘 普通递归

    factorial函数在递归过程中会入栈【n】次

    int factorial(int n) {
      if (n==1) {
          return 1;
      } else {
          return n * factorial(n-1) 
      }
    }
    
Tip

【尾递归】生成优化的代码,复用栈帧

  • n的阶乘 尾递归

    factorial函数在递归过程中会入栈【1】次,复用【n】次

    int factorial(int n, int result) {
      if (n==1) {
          return 1;
      } else {
          return factorial(n -1, n * result) 
      }
    }
    

正交性

  • 不同的类组合实现功能时,职责划分应朝着正交的方向努力,【把变化封装在一个维度上】

    如:X轴、Y轴、Z轴,每个维度可以独立变化,互不影响

    如:日志系统的Logger、Appender、Formatter

    如:(用户管理、订单管理、支付管理) 和 (日志、安全、事务、性能统计)

  • AOP 面向切面编程

设计模式:装饰者

  • 可用于解决重复代码

    如:入参日志、try{业务逻辑}catch{异常处理}、返回结果日志、执行耗时

<?php

interface Decorator
{
    public function display();
}

/**
* 核心类
*/
class XiaoFang implements Decorator
{
    private $name;
    
    public function __construct($name)
    {
        $this->name = $name;
    }

    public function display()
    {
        echo "我是" . $this->name . "我要出门" . PHP_EOL;
    }
}

/**
* 装饰边框类
*/
class Finery implements Decorator
{
    private $componment;

    public function __construct(Decorator $componment)
    {
        $this->componment = $componment;
    }

    public function display()
    {
        $this->componment->display();
    }
}

/**
* 装饰物类1
*/
class Shoes extends Finery
{
    public function display()
    {
        echo "穿上鞋子" . PHP_EOL;
        parent::display();
    }
}

/**
* 装饰物类2
*/
class Fire extends Finery
{
    public function display()
    {
        echo "出门前整理头发" . PHP_EOL;
        parent::display();
        echo "出门后整理头发" . PHP_EOL;   
    }
}

$xiaofeng = new XiaoFang("小方");
$shoes = new Shoes($xiaofeng);
$fire = new Fire($shoes);
$fire->display();

web服务

  • WSDL 数据传输方式:XML
  • SOAP 数据传输方式:XML
  • HTTP GET/POST:JSON

RSA非对称加密

  • 一个保密的私钥+一个公开的公钥
  • 用私钥加密的数据,只有对应的公钥才能解密
  • 用公钥加密的数据,只有对应的私钥才能解密
  • HTTPS 非对称解密(安全性高)+数字签名+对称加密(速度快)

不经过后端处理的token

Tip

Hash Fragment www.a.com/callback#token=<授权方返回的token>

#token=<授权方返回的token> 只会停留在浏览器端,只有JavaScript能访问它

并且不会再次通过HTTP Request 发送到别的服务器

  • 更安全的token:授权码+token

    限制授权码的有限期,如:5分钟内有效

    限制使用次数:授权码只能换取一次token,第二次需要用refresh_token换取

码农需要知道的"潜规则"

Tip

吴思《潜规则》——中国历史中的真实游戏

要透彻地理解一门技术的本质——WHY

  • 上帝的游戏:局部性原理(时间局部性、空间局部性)
  • 访问速度不匹配的解决方案:缓存(硬盘——>内存,内存——>CPU)
  • 抛弃细节——抽象
  • 减少交流——分层
  • 减少等待——异步调用
  • 分而治之:子问题、递归
  • 养成计算机的思维方式
  • 写作——主动性学习,效率最高
  • 保持好奇心,热爱并行动