0%

wxpy

直接排除,只有极少数人的微信可以使用,无法用来实现机器人;

图灵机器人

图灵机器人可以接入微信,也可以实现群管理,但是是通过第三方来实现的

功能 详解 是否必要
接入微信公众号 群自动回复
主动触发回复 主动往群里发送消息
定时发送 定时给群发送消息
### 微群管家
图灵机器人推荐的微信个人号接入第三方插件,但只有windows版本可用,不适用于mac版本开发,但可以实现自定义开发,文档比较全面且免费,可以作为备选方案
功能介绍:
功能 详解 是否必要
关键词自动回复 群自动回复
主动触发回复 主动往群里发送消息
定时发送 定时给群发送消息

收费情况如下:

产品 功能 价格
免费

建议:建议使用微群管家,免费

微友助手

也是图灵机器人推荐的个人号接入第三方插件,有后台管理。
功能介绍:

功能 详解 是否必要
机器人管理 扫码登录的用户作为机器人,无需邀请新人
机器人管理 群数据下载,分析群数据,没太大意义
定时群发 可以直接定时群发消息,支持多个群
群分组管理 可以给群做一个分组,但是仅限付费群,需要调研收费情况 待定
自动回复 设置关键词后机器人可根据关键词自动回复
智能聊天 @机器人后接入图灵机器人自动回复 待定
群文件管理 自动保存群成员发到群内的文件,在群内@机器人,机器人将会回复群文件存放链接
成员管理 管理用户,可设置群内权限,也可查看聊天记录
踢人 需要机器人本身是群主才能踢人

收费情况如下:

产品 功能 价格
微友助手精简版 (机器人聊天+关键词回复)或 (机器人聊天+新人入群欢迎语)或 (机器人聊天+定时发送消息)或(机器人聊天+群数据分析)四选一 79/群/年
微友助手高级版 机器人聊天、群数据分析、新人入群欢迎语、关键词回复、定时群发 99/群/年
微友助手旗舰版 高级版所有功能+潜水/邀请查询,管理员、关键词自动批量踢人,群签到,群精华,群文件管理,群名保护,重复群成员查询去重,发红包、链接、小程序智能提醒及更多扩展功能。 129/群/年
微友助手企业版 包含旗舰版的所有功能,支持购买的群数范围内无限次换群。购买50个以上,问题优先处理,1对1VIP服务。 需要咨询

建议:企业版,可以协调价格

chatie

文档地址:https://docs.chatie.io/v/zh/api
微群管家也是基于web开发的,微友助手和chatie是通过ipad方式登录,还可以用
功能介绍:与微友助手类似

收费情况:
如果web版微信可用,免费,否则通过ipad登录收费

产品 功能 价格
token 提供一个类似于微信公众号token,必须自行开发 1920元/年
token 提供一个类似于微信公众号token,可自行开发 1920/年

安装

简介
Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。
安装前提
node.js
git
安装步骤

1
npm install -g hexo-cli

建站

1
2
3
hexo init <folder>
cd <folder>
npm install

创建博客

1
2
3
4
5
6
7
8
9
10
11
hexo new [layout] <title> #hexo n
hexo generate(或者hexo g:生成静态文件) #hexo g
hexo publish [layout] <filename>(发布草稿)
hexo server(启动服务器)
hexo deploy(或者hexo d:部署)
hexo render <file1> [file2] ...(渲染文件)
hexo migrate <type>(从其他博客迁移内容)
hexo clean(清除缓存文件 (db.json) 和已生成的静态文件 (public))
hexo list(列出网站资料)
hexo version(显示 Hexo 版本)
#部署使用hexo deploy (hexo d,需要先编译)

添加评论

可以使用gitment或者valine
valine评论
gitment评论
注意事项
1 如果添加了CNAME,回调地址需要填绑定的地址
2 如果需要开启评论,除了百度能搜到的步骤以外,还需要本地安装博客评论模块
npm i –save gitment
再重新hexo g -d一下
3 作者的服务器停掉了,因此需要修改js源码来源:
修改源
(也可以wget将源码下载下来后修改源到自己服务器上)

基础

  • 列出所有数据库:show dbs;
  • 列出所有表:show tables;或show collections;
  • 查询所有数据:db.taname.find().pretty();
  • 查询指定列所有数据:db.tbname.find({},{col1:1,col2:2,…}).pretty();
  • 根据条件查询所有数据:db.tbname.find({name:”test”},{col1:1,col2:1}).pretty();
  • 查询结果不包含指定字段:db.tbname.find({},{status:0,col2:0}).pretty();

    查询

    1 查询所有数据

    db.tbname.find().pretty();

1 查看查询语句执行效率

语法
explain select … from … [where …]
示例

1
explain select * from news;

explain

只查询一行数据:
const

查询多行数据:执行查询
towrow
执行explain:
towrowres

2 属性详解

属性 作用
id SELECT的查询序列号
select_type SELECT的查询序列号
table 显示这一行的数据是关于哪张表的
type 显示了连接使用了哪种类别,有无使用索引,是使用Explain命令分析性能瓶颈的关键项之一
possible_keys 指出MySQL能使用哪个索引在该表中找到行
key 显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL
key_len 显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref 显示使用哪个列或常数与key一起从表中选择行
rows 显示MySQL认为它执行查询时必须检查的行数
Extra 包含MySQL解决查询的详细信息,也是关键参考项之一
select_type
类型 解释
SIMPLE 简单SELECT(不使用UNION或子查询等)
PRIMARY 最外面的SELECT
UNION UNION中的第二个或后面的SELECT语句
DEPENDENT UNION UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT UNION的结果
SUBQUERY 子查询中的第一个SELECT
DEPENDENT SUBQUERY 子查询中的第一个SELECT,取决于外面的查询
DERIVED 导出表的SELECT(FROM子句的子查询)
type

索引从好到坏依次是:

1
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。

安装pear(参考文档:https://www.cnblogs.com/huangbx/p/php_codesniffer.html)


  1. 从以下网址:http://pear.php.net/go-pear.phar下载代码,或直接另存为文件go-pear.phar
  2. 运行php go-pear.phar(注意是否加了环境变量,没有可在php.exe目录下运行)
  3. 如果报错“ERROR, enter the php.exe path”,输入选项13,选择php.exe所在目录

安装php sniffer


  1. 运行命令“pear install PHP_CodeSniffer”
  2. 配置phpstorm(其他IDE请自行Google),Settings->Languages & Frameworks->php->Code Sniffer,选择刚才安装的phpcs.bat文件,validate 看看会不会报错
  3. 如果校验报错,可能是找不到autoload路径,打开phpcs文件,更改include路径,例如我可以直接改成include_once ‘/pear/PHP/CodeSniffer/autoload.php’
  4. 选择Settings->Inspections->PHP Code Sniffer validation,点击刷新按钮,选择”PSR2”
  5. 此时如果有不规范的代码可以看到有phpcs的报错了

配置本地git


  1. 打开.git/hooks,新建文件pre-commit
  2. 示例代码如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #!/bin/bash
    #
    # check PHP code syntax error and standard with phpcs
    # author : star[github.com/star1989]
    # date : 2017-02-24
    PROJECT=$(git rev-parse --show-toplevel)
    cd $PROJECT
    SFILES=$(git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\.php)
    TMP_DIR=$PROJECT."/tmp"

    # Determine if a file list is passed
    if [ "$#" -ne 0 ]
    then
    exit 0
    fi
    echo "Checking PHP Lint..."
    for FILE in $SFILES
    do
    # echo "php -l -d display_errors=0 ${FILE}"
    # echo "git show :$FILE > $TMP_DIR/$FILE"
    php -l -d display_errors=0 $FILE
    if [ $? != 0 ]
    then
    echo "Fix the error before commit."
    exit 1
    fi
    FILES="$FILES $PROJECT/$FILE"
    done

    if [ "$FILES" != "" ]
    then
    echo "Running Code Sniffer..."

    TMP_DIR=/tmp/$(uuidgen)
    mkdir -p $TMP_DIR
    for FILE in $SFILES
    do
    mkdir -p $TMP_DIR/$(dirname $FILE)
    git show :$FILE > $TMP_DIR/$FILE
    done
    phpcs --standard=PSR2 --encoding=utf-8 -n $TMP_DIR
    PHPCS_ERROR=$?
    rm -rf $TMP_DIR
    if [ $PHPCS_ERROR != 0 ]
    then
    echo "Fix the error before commit."
    exit 1
    fi
    fi

    exit $?
  3. 注意这行phpcs –standard=PSR2 –encoding=utf-8 -n $TMP_DIR,在运行git的终端下运行phpcs –help,如果可以运行这行才会生效
  4. 此时提交不规范的代码就会报错

排序算法

1 冒泡排序

解析
从零开始,每一位和剩余位数比较,如果大于(小于)则交换,最后一位最终会是最大(最小)的。
代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$arr = [2,3,1,4,7,6,9];
var_dump(bubbleSort($arr));
function bubbleSort($arr)
{
$len = count($arr);
for($i = 0;$i < $len; $i++) {
for($j = $len - 1;$j > $i;$j--) {
if($arr[$j] < $arr[$j-1]) {
$tmp = $arr[$j];
$arr[$j ] = $arr[$j - 1];
$arr[$j - 1] = $tmp;
}
}
}
return $arr;
}

2 快速排序

解析
选中一个值(一般是$arr[0])作为基准,通过一次排序分割成比基准数小和比基准数大的两部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$arr = [3,4,1,5,7,2,6];
function quickSort($arr)
{
if(count($arr) <= 1)
{
return $arr;
}
$mid = $arr[0];
$left = array();
$right = array();
for($i = 1;$i<count($arr);$i++)
{
if($mid < $arr[$i])
{
$right[] = $arr[$i];
} else {
$left[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left,array($mid),$right);
}
var_dump(quickSort($arr));

注意事项
array_merge()需要将左边,中间和右边都合并

查找算法

折半查找

1 简介

crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

2 格式

minute hour day month week command

3 操作

crontab -l:列出所有任务

laravel 定时任务

原文路径

1
2
3
## 其他解决方式
1 supervisor
**举例**

[program:finance_svcs_autoreconciliation]
command=php /opt/app/nginx/html/qa6/financesvcs/artisan queue:work beanstalkd –queue=autoreconciliation_broadcast –daemon
directory=/opt/app/nginx/html/qa6/financesvcs
autostart=true
autorestart=true
user=apache
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/qa1/%(program_name)s-stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10

1
```

1 (自己摸索版本)5.2

1 定义路径

.env配置文件添加日志路径,例如

1
LOG_PATH=/tmp/paytest

2 启动文件添加日志路径

1
2
3
4
$app->configureMonologUsing(function($logger){
$logger->pushHandler(new \Monolog\Handler\RotatingFileHandler(env('LOG_PATH').'.log'), 10);
return $logger;
});

2 官方文档

1 异常处理

介绍
当您启动一个新的 Laravel 项目时,错误和异常处理就已为您配置。 应用程序触发的所有异常都被 App\Exceptions\Handler 类记录下来,然后渲染给用户。 我们将在本文档中深入介绍此类。
配置
(1)config/app.php 文件的 debug 选项,决定了是否向用户显示错误信息。默认情况下,此选项设置为存储在 .env 文件中的 APP_DEBUG 环境变量中。
(2)Laravel 支持 single 、daily 、 syslog 和 errorlog 日志模式。要配置 Laravel 使用的存储机制,应该修改 config/app.php 配置文件中的 log 选项。例如,如果您希望使用每日一个日志文件而不是单个文件,则应将 app 配置文件中的 log 值设置为 daily
日志等级
使用 Monolog 时,日志消息可能具有不同的日志等级。默认情况下,Laravel 将所有日志级别写入存储。但是,在生产环境中,您可能希望通过将 log_level 选项添加到 app.php 配置文件中来配置应记录的最低日志等级。

一旦配置了此选项,Laravel 将记录大于或等于指定日志等级的所有级别。例如,默认将 log_level 设置为 error 那么将会记录 error , critical , alert 和 emergency 日志信息:

1
'log_level' => env('APP_LOG_LEVEL', 'error'),

注意事项
Monolog 识别以下日志等级 - 从低到高为: debug , info , notice , warning , error , critical , alert , emergency
Report方法
所有异常都由 App\Exceptions\Handler 类处理。 这个类包含两个方法:report 和 render 。 我们将详细研究这些方法。 report 方法用于记录异常或将其发送到外部服务,如 Bugsnag 或 Sentry 。默认情况下,report 方法只是将异常传递给记录异常的基类。然而,你可以自由选择任何方式进行处理。
render方法
render 方法负责将异常转换成 HTTP 响应发送给浏览器。默认情况下,异常会传递给为您生成响应的基类。但是,您可以自由检查异常类型或返回您自己的自定义响应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 渲染异常并添加到 HTTP 响应中。
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
if ($exception instanceof CustomException) {
return response()->view('errors.custom', [], 500);
}

return parent::render($request, $exception);
}

HTTP异常
可直接用abort(),例如abort(404),abort(403, ‘Unauthorized action.’);
自定义错误页面
如果您要自定义404 HTTP状态代码的错误页面,请创建一个 resources/views/errors/404.blade.php 。此文件将会用于渲染所有404错误。此目录中的视图文件命名应与它们对应的HTTP状态代码匹配。由 abort 函数引发的 HttpException 实例将作为 $exception 变量传递给视图。

2 记录

介绍
默认情况下,Laravel 日志目录为 storage/logs
可以传递参数,例如:

1
2
$test = "test";
Log::info(222222222, ['te' => $test]);