关于 12306 售票的一些思考研究

关于 12306 售票的一些思考研究

声明:本内容不一定是官方实际应用情况,仅为个人思考研究的方案。

问题:

买过票的都知道,乘客可以选车次的某站到某站,那意味着这期间的站点,该座位是不可售的。

那么,12306 是如何计算这个座位的售票情况的呢?

阅读更多
【架构设计】Websocket 消息格式之系统事件

【架构设计】Websocket 消息格式之系统事件

封面来源网络,如有侵权,请联系删除。

命名规范

系统事件的命名以 socket: 为前缀,例如 socket:connect 事件。

事件列表

WSS 连接成功 socket:connected

  • 事件发送方:服务端

  • 事件信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
    "event": "socket:connected",
    "data": {
    "socket_id": "1ba1b6cb-0127-48f8-b5a5-9fd79a7c68a6", // socket 唯一ID
    "heart": {
    "interval": 30, // 心跳间隔,单位:秒(用户客户端发送心跳事件)
    "timeout": 25 // 心跳超时,单位:秒(用于客户端接收心跳事件)
    }
    }
    }
阅读更多
有度 Golang 版 SDK
PHP 代码风格检测/修复工具:Laravel Pint

RocketMQ 安装

此处基于 Macbook Pro 的安装演示

环境依赖

安装 JDK

阅读更多

SPM 淘宝-导购效果跟踪

摘录为主

什么是 SPM

SPM是淘宝社区电商业务(xTao)为外部合作伙伴(外站)提供的一套跟踪引导成交效果数据的解决方案。

下面是一个跟踪点击到宝贝详情页的引导成交效果数据的SPM示例:

http://detail.tmall.com/item.htm?id=3716461318&&spm= 2014.123456789.1.2

其中spm=2014.123456789.1.2 便是下文所说的SPM编码

SPM编码:用来跟踪页面模块位置的编码,标准spm编码由4段组成,采用a.b.c.d的格式(建议 全部使用数字),其中,

阅读更多

Hyperf:JSON-RPC 服务

Server 端

定义服务(示例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

declare(strict_types=1);

namespace App\JsonRpc;

use Hyperf\RpcServer\Annotation\RpcService;

/**
* 注意,如希望通过服务中心来管理服务,需在注解内增加 publishTo 属性.
* @RpcService(name="TestsService", protocol="jsonrpc-http", server="jsonrpc-http")
*/
class TestsService
{
// 实现一个加法方法,这里简单的认为参数都是 int 类型
public function add(int $a, int $b): int
{
// 这里是服务方法的具体实现
return $a + $b;
}
}
阅读更多

学习:搭建并行处理管道,感受 GO 语言魅力

前言

团队内组织 Golang 的学习,这是第三周学习内容:完成课程的学习、代码编写与 Channel 心得总结。

相关课程

https://www.imooc.com/learn/927

基础编程

Hello World 网络版

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import (
"fmt"
"net/http"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "sdfasdfas %s", r.FormValue("tests"))
})

http.ListenAndServe(":1000", nil)
}
阅读更多

安装 Swoole 提示 openssl 相关报错处理

报错

1
2
3
4
5
6
7
8
9
10
11
12
ocal/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib -I/usr/local/openssl/include -I/tmp/pear/temp/swoole -I/tmp/pear/temp/swoole/include -I/tmp/pear/temp/swoole/ext-src -I/tmp/pear/temp/swoole/thirdparty/hiredis -DHAVE_CONFIG_H -g -O2 -Wall -Wno-unused-function -Wno-deprecated -Wno-deprecated-declarations -std=c++11 -c /tmp/pear/temp/swoole/ext-src/php_swoole.cc  -fPIC -DPIC -o ext-src/.libs/php_swoole.o
In file included from /tmp/pear/temp/swoole/include/swoole_socket.h:34,
from /tmp/pear/temp/swoole/include/swoole_coroutine.h:22,
from /tmp/pear/temp/swoole/ext-src/php_swoole_coroutine.h:22,
from /tmp/pear/temp/swoole/ext-src/php_swoole_cxx.h:20,
from /tmp/pear/temp/swoole/ext-src/php_swoole.cc:16:
/tmp/pear/temp/swoole/include/swoole_ssl.h:27:10: fatal error: openssl/ssl.h: No such file or directory
#include <openssl/ssl.h>
^~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:192: ext-src/php_swoole.lo] Error 1
ERROR: `make' failed
阅读更多

Golang:string 与 strconv.Itoa 的区别

Example

我们来尝试打印 0 到 100 的对应结果:

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"fmt"
"strconv"
)

func main() {
for i := 0; i <= 100; i++ {
fmt.Println(i, ":::", string(i), ":::", strconv.Itoa(i))
}
}
阅读更多
Flag:使用 Go 语言完成 LeetCode 100 道题打卡

Redis 配置统计字典:info 系统状态说明

命令说明

info 命令有三种用法:

  • info:部分 Redis 系统状态统计信息
  • info all:全部 Redis 系统状态统计信息
  • info {section}:某一块的系统状态统计信息,其中 {section} 可忽略大小写,参考值,如:memory 是查看内存信息。

info {section} 中的 {section} 包含如下:

模块名{section} 模块含义
server 服务器信息
clients 客户端信息
memory 内存信息
persistence 持久化信息
stats 全局统计信息
replication 主从复制信息
cpu CPU 消耗信息
commandstats 命令统计信息
cluster 集群信息
keyspace 数据库键统计信息
阅读更多

Redis:处理 bigkey

危害

  • 内存空间不均匀(平衡):如 Redis Cluster 中,bigkey 会造成节点的内存空间分布不均匀
  • 超时阻塞:由于 Redis 单线程的特性,操作 bigkey 会较耗时,意味着阻塞 Redis 可能性较大。
  • 网络阻塞:获取 bigkey 的网络传输较大,不仅影响客户端,而且影响其他节点;如:bigkey 为 1MB,每秒 1000次,每秒产生的流量 1000MB/s
阅读更多

Swoole 协程的思考-执行顺序

示例

情况一:非阻塞IO

1
2
3
4
5
6
7
8
9
10
11
12
<?php

go(function () {
echo 'AA'.date('Y-m-d H:i:s').PHP_EOL;
Co::sleep(1);
echo 'BBB'.date('Y-m-d H:i:s').PHP_EOL;
});

go(function () {
echo 'CC'.date('Y-m-d H:i:s').PHP_EOL;
echo 'DD'.date('Y-m-d H:i:s').PHP_EOL;
});
阅读更多

PHP 各版本特性:PHP 7.4.x

本文部分内容根据官网进行删减,仅整理常用特性。

新特性

类属性

类属性现在支持类型声明。

1
2
3
4
5
6
7
8
<?php

class User
{
public int $id;

public string $name;
}
阅读更多

PHP 各版本特性:PHP 7.3.x

本文部分内容根据官网进行删减,仅整理常用特性。

新特性

数据解析支持引用

[&$a, [$b, &$c]] = $d;对应的 list() 也一样支持。

阅读更多

CDN 科普

概述

含义

CDN 的全称是 Content Delivery Network,即内容分发网络。CDN 是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术。 —— 摘自《百度百科

阅读更多