2022年6月

实现算法

/*
* 薄雾算法
*
* 1      2                                                     48         56       64
* +------+-----------------------------------------------------+----------+----------+
* retain | increas                                             | salt     | sequence |
* +------+-----------------------------------------------------+----------+----------+
* 0      | 0000000000 0000000000 0000000000 0000000000 0000000 | 00000000 | 00000000 |
* +------+-----------------------------------------------------+------------+--------+
*
* 0. 最高位,占 1 位,保持为 0,使得值永远为正数;
* 1. 自增数,占 47 位,自增数在高位能保证结果值呈递增态势,遂低位可以为所欲为;
* 2. 随机因子一,占 8 位,上限数值 255,使结果值不可预测;
* 3. 随机因子二,占 8 位,上限数值 255,使结果值不可预测;
*
* 编号上限为百万亿级,上限值计算为 140737488355327 即 int64(1 << 47 - 1),假设每天取值 10 亿,能使用 385+ 年
 */

class Mist
{
    public const saltBit = 8;          // 随机因子二进制位数

    public const saltShift = 8;        // 随机因子移位数

    public const increasShift = self::saltBit + self::saltShift; // 自增数移位数

    public $increas = 0;                // 自增数

    public $saltA = 0;                  // 随机因子一

    public $saltB = 0;                  // 随机因子二

    public function __construct($increas = 1)
    {
        $this->increas = $increas;
    }

    public function generate(): int
    {
        $this->increas = ++$this->increas;
        // 获取随机因子数值
        try {
            $this->saltA = random_int($this->saltA, 255);
        } catch (\Exception $e) {
            $this->saltA = $this->saltA++;
        }
        try {
            $this->saltB = random_int($this->saltB, 255);
        } catch (\Exception $e) {
            $this->saltB = $this->saltB++;
        }
        return (int) ($this->increas << self::increasShift) | ($this->saltA << self::saltShift) | $this->saltB;
    }
}

调用如下:

$uuid = (new Mist(1))->generate();
#> > 153290

转自:https://learnku.com/articles/69180

一、自造“雪花”唯一值

md5(uniqid(session_create_id(), true).mt_rand(100000,999999));



二、其中说明备注一下:

1、获取一个带前缀、基于当前时间微秒数的唯一ID:

uniqid(); //如:hs5udg24mr15rbvq1j8egtn6hg62bc08419b8e33.48309809143152

2、获取六位的随机数:

mt_rand(); //随机数:130605

3、创建新的无冲突的会话ID:

session_create_id(); //如:fvhgsooqvun8ftpmtuov1rqo2u

4、使用md5加密,为了统一长度,在数据库字段设置时可以设置为定长 char类型:

md5(); //如:70627629d983455ad7a4c6869a632994

以上这么多操作,几乎不会再有重复的了,因为前缀不同,不服来验证吧!呵呵

左侧为 WEB 事件,右侧为 uni-app 对应事件

{
    click: 'tap',
    touchstart: 'touchstart',
    touchmove: 'touchmove',
    touchcancel: 'touchcancel',
    touchend: 'touchend',
    tap: 'tap',
    longtap: 'longtap', //推荐使用longpress代替
    input: 'input',
    change: 'change',
    submit: 'submit',
    blur: 'blur',
    focus: 'focus',
    reset: 'reset',
    confirm: 'confirm',
    columnchange: 'columnchange',
    linechange: 'linechange',
    error: 'error',
    scrolltoupper: 'scrolltoupper',
    scrolltolower: 'scrolltolower',
    scroll: 'scroll'
}

钱没了可以再挣,工作没了可以再找,朋友没了可以再交,爱情没了可以再去找,你生来就一无所有,何惧从头再来。
水到绝境是瀑布,人到绝境是重生。半山腰总是很挤的,你得努力去山顶看看。
人生这道题怎么选都有遗憾,真正的强者是夜深人静的时候,把心掏出来自己缝缝补补,睡一觉起来,又是信心百倍。
活着就该逢山开路,遇水架桥,睡前原谅一切,醒来便是重生。

JS代码

Page({
  data: {
    weekInfo: []
  },

     // 处理未来七天的函数
     dealTime (num) {     // num:未来天数
      var time = new Date()     // 获取当前时间日期
      var date = new Date(time.setDate(time.getDate() + num)).getDate()  //这里先获取日期,在按需求设置日期,最后获取需要的
      var year = time.getFullYear()  //获取年份
      var month = time.getMonth() + 1   // 获取月份
      var day = time.getDay()   //  获取星期
      switch (day) {             //  格式化
        case 0: day = "日"
          break
        case 1: day = "一"
          break
        case 2: day = "二"
          break
        case 3: day = "三"
          break
        case 4: day = "四"
          break
        case 5: day = "五"
          break
        case 6: day = "六"
          break
      }
      var obj = {
        // date: date,
        day: month + '.' + date,
        // month: month,
        week:day,
        date:year+'-'+month + '-' + date
      }
      return obj      // 返回对象
    },
 /**
   * 生命周期函数--监听页面加载
   */
  onLoad (options) {
    var arr = []
    for (let i = 0; i < 7; i++) {
      arr.push(this.dealTime(i))
    }
    // arr[0].day = '今天'
    this.setData({
      weekInfo: arr            // 赋值给data
    },()=>{
      console.log(this.data.aWeek)
    })
    //api_data(this);  请求接口
  },

  DatetabSelect(e) {
    console.log(e)
  }
});


页面wxml

<scroll-view scroll-x class=" nav bg-white" scroll-with-animation scroll-left="{{scrollLeft}}" style="padding-left:8rpx">
  <view class="cu-item date-item {{index==DateTabCur?' Datecur':''}}" wx:for="{{weekInfo}}" wx:key="*this" bindtap="DatetabSelect" data-id="{{index}}" style="padding: 0px 8rpx;">
    <view> {{item.day}}</view>
    <view class="weeks">{{item.week}}</view>
  </view>
</scroll-view>

局部WXSS

.nav .date-item {
  height: 166rpx;
  text-align: center;
  color: #9a9a9a;
  border: none;
  line-height: 78rpx;
}

.date-item .weeks {
  width: 70rpx;
  height: 70rpx;
  border-radius: 50%;
  background: #333333;
  text-align: center;
  line-height: 70rpx;
  color: white;
  /* margin-bottom: 5rpx; */
}

.nav .date-item.Datecur .weeks {
  border: 4rpx solid red;
  color: #333333;
  background:white;
}


演示效果

pictrue-demo.png

转载自:https://blog.csdn.net/weixin_40762926/article/details/121469758

fiber-ext.jpg

根据上图,可以看出来Fiber的大体执行流程,如下:

1、fiber 大概就是实现了一种主执行流程和fiber执行流程的手动切换。
2、fiber->start() 从main流程切换到fiber流程执行。
3、Fiber::suspend() 从fiber切换到main流程。
4、接下来main流程可以执行一些操作,或者顶一个事件循环监听socket的数据情况
5、当有数据写入事件后,调用Fiber->resume 切换到fiber中去执行比如从socket读取数据这样的操作。
6、fiber的流程代码执行完毕以后,也就自动切换到主流程,如果事件循环也结束了,那么就主流程继续向下执行。

转自:https://www.simapple.com/459.html

前言

还在为没有设置好Charles 抓不了手机上的https请求而苦恼吗!今天手把手教你用proxyman抓取iPhone上的网络请求

操作设备环境

  • 电脑系统:macOs Big Sur 11.1
  • 手机系统:ios 12以及最新
  • proxyman系统版本: 2.21.1以及最新

安装

1.软件安装步骤我就省略了,软件下载地址: https://proxyman.io/
11.png

查看大图

2.安装证书;Certificate->Install Certificate on this Mac
22.png

查看大图

3.安装扩展以及证书,Automatic->Install&Trust Certificate
33.png

查看大图

傻瓜式点击就好

抓取数据

1.上面的步骤就安装好了证书;但是这个时候只能请求http,如果我们请求是https的话,执行下面步骤:
44.png

查看大图

成功抓去到了浏览器到所有请求

55.png
查看大图

观察数据返回

抓取手机app数据

移动端安装流程 (⚠️图片上红色文字是关键步骤)

1.查看移动端设置流程,必须跟电脑连同一个Wi-Fi
66.png

查看大图

77.png

查看大图

手机上的设置我就写在图片上下面

2.根据上面5个步骤手机设置,注意⚠️第五步千万别遗漏了,这是你能否抓到数据等关键。

允许https 返回

  1. 找到自己手机链接IP,然后选择自己所要看到数据请求的域名,选择Enable Https Response 就可以看见body 里面的数据返回了。
    88.png
    查看大图

常用设置

99.png

查看大图

本文转自:https://www.jianshu.com/p/2e728bce7eba
感谢作者:剁椒先生

方案一

Casbin的核心-表.png

Casbin的核心.png

方案二

111.JPG
原理

222.JPG
规则

333.JPG
数据ER

444.PNG
管理UI

555.JPG
数据表实例

特别声明:其中方案二为某大佬线上生产环境系统设计,如果侵犯到此权限请通知我删除,同时采纳者一同承担相应责任。