邢栋博客
邢栋博客,Action博客,记录工作和生活中的点点滴滴
redis发布订阅-监听过期key
<?php // 修改redis.conf notify-keyspace-events "Ex" # 当事件发生时, Redis 可以通知 Pub/Sub 客户端。 # 可以在下表中选择 Redis 要通知的事件类型。事件类型由单个字符来标识: # K Keyspace 事件,以 _keyspace@<db>_ 的前缀方式发布 # E Keyevent 事件,以 _keysevent@<db>_ 的前缀方式发布 # g 通用事件(不指定类型),像 DEL, EXPIRE, RENAME, … # $ String 命令 # s Set 命令 # h Hash 命令 # z 有序集合命令 # x 过期事件(每次 key 过期时生成) # e 清除事件(当 key 在内存被清除时生成) # A g$lshzxe 的别称,因此 ”AKE” 意味着所有的事件 # notify-keyspace-events 带一个由 0 到多个字符组成的字符串参数。空字符串意思是通知被禁用。 # 例子:启用 list 和通用事件: # notify-keyspace-events Elg # 默认所用的通知被禁用,因为用户通常不需要改特性,并且该特性会有性能损耗。 # 注意如果你不指定至少 K 或 E 之一,不会发送任何事件。 # notify-keyspace-events AKE //redis时间到期销毁执行 function run_task($redis, $pattern, $chan, $key) { // // echo "Pattern: $pattern\n"; // echo "Channel: $chan\n"; // echo "Msg: $key\n"; $data = json_decode(base64_decode($key), true); $domain = 'http://tool.he4966.cn'; if ($data) { switch ($data['type']) { case '1': //写需要执行的接口 自行修改 //todo echo 1; break; case '2': # code... break; default: # code... break; } } var_dump($data); } $redis = new \Redis(); //连接本地的 Redis 服务 可以更改自己的 $redis->connect("127.0.0.1", 6379); $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1); echo "任务消息开始监听.." . PHP_EOL; $redis->psubscribe(array('__keyevent@0__:expired'), 'run_task');
windows下apache支持php-nts版本
帮同学的windows服务装个禅道,登录进去才发现只有apache,没有php,也没有mysql
装完php和mysql,发现访问php文件直接展示没有解析,于是就开始配置apache解析php的模块
好多年windows+apache这种组合了,搞了半天才解决
LoadModule fcgid_module modules/mod_fcgid.so <IfModule fcgid_module> FcgidInitialEnv PHPRC "F:/Web/PHPServer/Bin/PHP" FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 15 FcgidIOTimeout 120 FcgidIdleTimeout 120 AddType application/x-httpd-php .php <Files ~ "\.php$>" AddHandler fcgid-script .php FcgidWrapper "F:/Web/PHPServer/Bin/PHP/php-cgi.exe" .php </Files> </IfModule> <Directory "F:/Web/www"> AllowOverride All Options -Indexes +ExecCGI </Directory>
Mac 升级系统后 ssh 报错
报错如下:
Unable to negotiate with 10.10.10.100 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
解决办法:
cd ~/.ssh vim config Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes HostkeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa
golang 数组删除元素
package main import "fmt" func main(){ a := []int{0,1,2,3,4,5,6,7,8,9} //a = a[1:]//删除开头的第一个元素 unset 0 //a = a[3:] //删除开头的前3个元素 unset 0 1 2 //a = append(a[:0],a[1:]...) //删除开头的第一个元素,不移动数据指针,将后面的数据向开头移动 //a = append(a[:0],a[3:]...) //删除开头的前3个元素,不移动数据指针,将后面的数据向开头移动 //使用copy //a = a[:copy(a,a[1:])] //删除开头第一个元素 //a = a[:copy(a,a[3:])] //删除开头前3个元素 //从中间位置删除 //a = append(a[:3],a[4:]...)//删除索引为3的数据 unset[3] //a = append(a[:3],a[5:]...)//删除索引大于等于3且小于5的数据 unset[3 4] //从尾部删除 //a = a[:len(a)-1] //删除最后一个元素 9 //a = a[:len(a)-3] //删除最后的3个元素 9 8 7 fmt.Println(a) }
[golang]map的value赋值和遍历赋值
1、=========map的value赋值=========
package main import "fmt" type Student struct { Name string } var list map[string] Student //map的Value赋值 func main() { list = make(map[string] Student) student := Student{"action"} list["student"] = student //list["student"].Name = "xd" //错误 cannot assign to struct field list["student"].Name in map tempStudent := list["student"] tempStudent.Name = "xd" list["student"] = tempStudent fmt.Println(list["student"]) }
2、=========map的遍历赋值=========
package main import "fmt" type People struct { Name string Age int } //map的遍历赋值 func main() { //定义map list := make(map[string] *People) //定义student数组 peoples := []People{ {Name: "zhou", Age: 24}, {Name: "li", Age: 23}, {Name: "xing", Age: 22}, } //遍历结构体数组,依次赋值给map for i:=0;i<len(peoples);i++{ list[peoples[i].Name] = &peoples[i] } //打印map for k,v := range list{ fmt.Println(k,"=>",v.Name) } }
抢红包之二倍均值法
/** * 二倍均值法 * * @param $nums //分配人数 * @param $money //分配金额 * @return array */ function assignRedBag($nums,$money){ $result = [];//分配结果 $surplusMoney = $money;//剩余金额 for ($i=0;$i<$nums;$i++){ //最后一次分配,直接返回剩余金额 if($i+1 == $nums){ $result[] = $surplusMoney; break; } //每次分配的最大值,剩余金额 / 剩余分配人数 * 2倍 $max = intval($surplusMoney / ($nums - $i) * 2); //随机分配 $nowMoney = mt_rand(1,$max); //存入分配结果 $result[] = $nowMoney; //计算剩余money $surplusMoney = $surplusMoney - $nowMoney; } return $result; } echo '<pre>'; print_r(assignRedBag1(10,100));
Mac下使用clion调试php源码
=====第一大步安装php=====
1、安装libiconv依赖
brew install libiconv
2、安装php
wget https://www.php.net/distributions/php-7.4.22.tar.gz
tar -zxvf php-7.4.22.tar.gz
cd php-7.4.23
./configure --prefix=/Users/action/soft/php7 --with-config-file-path=/Users/action/soft/php7/etc --with-iconv =/usr/local/opt/libiconv --enable-debug
make
make install
ps:: 安装路径自己指定就好,iconv的路径写安装路径
如果再编译过程中报错且和iconv相关,查看文章末尾pkg-config相关内容,否则直接忽略
=====第二大步使用clion=====
1.==导入项目==
New CMake Project from Sources -> import as a new CMake project
2.==编辑CMakeLists.txt==
内容如下 (根据自己的路径来)
set(PHP_SOURCE /Users/action/code/source_code/php-7.4.22)
include_directories(${PHP_SOURCE}/ext/bcmath) include_directories(${PHP_SOURCE}/ext/bcmath/libbcmath/src)
......
include_directories(${PHP_SOURCE}/Zend) include_directories(${PHP_SOURCE}) add_custom_target(makefile COMMAND make && make install WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
这个时候 软件左上角会出现如下标识
3、==点击 Edit Configurations,配置如下:(配置文件路径根据自己的需要来)==
4、==然后在cli模式文件下 打个断点 sapi/cli/php_cli.c==
5、==点击右上角的debug按钮就可以进行操作了==
===================分割线=======================
====pkg-config相关====
==查看==
pkg-config --list-all
==brew安装的东西都可以直接出现在pkg-config列表里面==
export PKG_CONFIG_PATH=$(find /usr/local/Cellar -name 'pkgconfig' -type d | grep lib/pkgconfig | tr '\n' ':' | sed s/.$//)
==安装pkg-config==
wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz (下载就复制链接去手动下载)
tar -xf pkg-config-0.28.tar.gz
cd pkg-config-0.28
./configure --with-internal-glib
make
sudo make install
====php生命周期====
算法面试题
仅供参考:
用过哪些机器学习算法
1.说一下xgboost的原理
2.GBDT的原理以及常用的调参的参数
3.一个数组,找出第k大的数
4.快排的思想是什么,排序算法哪些时间复杂度比较低
5.特征选择方法都有用过哪些,特征重要性
6.除了k-means,还可以用什么聚类方法,或者你还熟悉什么聚类方法
7.朴素贝叶斯原理
8.TF-IDF原理
9.你都知道哪些分类算法
10.LDA的原理是什么?
11.你用过Python 那么你Python都用过哪些机器学习的库?
12.逻辑回归的思想和过程,损失函数是什么,如何训练得到最优参数
13.如何判断模型有没有过拟合
14.user-cf、item-cf公式,原理区别
15.有监督和无监督算法都有哪些,大概讲讲
有监督:linear model、logisit model、决策树、随机森林、朴素贝叶斯、KNN、SVM
无监督:kmeans、PCA
16.lr与线性回归的区别
https://blog.csdn.net/qq_38328378/article/details/81349922
线性回归与逻辑回归是机器学习中比较基础又很常用的内容。线性回归主要用来解决连续值预测的问题,逻辑回归用来解决分类的问题,输出的属于某个类别的概率,工业界经常会用逻辑回归来做排序。
手写代码:
topk
手撸代码,不用库函数求一个数的立方根,要求误差小于0.01
手写代码实现lr的训练与预测
如何判断单链表中是否有环?
LR、SVM(推导及原理)、树模型(xgboost推导及原理)、集成学习(原理和区别)