tmp

redis实现队列消息的ack

好久不见. 提交于 2019-11-27 11:04:40
由于公司提供的队列实在太过于蛋疼而且还限制不能使用其他队列,但为了保证数据安全性需要一个可以有ack功能的队列。 原生的redis中通过L/R PUSH/POP方式来实现队列的功能,这个当然是没办法满足需求的(没有ack功能),所以需要自己对redis的list(队列)做个小小的调整。 大体思路为在POP时将pop出的数据放到备份的地方,当有ACK请求(确认消息被消耗)后将备份的信息删除掉;每次在pop前需要检查备份队列中有没有过期的数据没有ack的,如果有则PUSH到list中后再从list中POP出来。 以下脚本使用lua实现,只需要在执行前加载到redis中即可。 消息本身需要包含id属性 push没什么问题,原生即可(此处以LPUSH为例) pop时脚本 1 local not_empty = function (x) 2 return ( type (x) == " table " ) and ( not x.err) and (#x ~= 0 ) 3 end 4 5 local qName = ARGV[ 1 ] --队列名称 6 local currentTime = ARGV[ 2 ] --当前时间,这个需要从外部传入,不能使用redis自身时间,如果使用自身时间可能导致redis本身的backup在重放请求时出现不一致性 7 local

360:序列重组

北战南征 提交于 2019-11-27 11:00:35
题目描述: 360公司 2020秋招 技术综合C卷在线考试 编程题 | 30.0分2/2 序列重组 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 在一个古老的国度,这个国家的人并不懂得进位,但是对取模情有独钟,因此诞生了一个经典的问题,给出两个在m进制下含有n位的数字,你可以分别将这两个数各位上的数字重新排列,然后将两个数按位对应相加并分别对m取模,这样显然可以得到一个新的m进制下的n位数(可能存在前导0),但是这个结果是不唯一的,问题来了,按照这样的操作,能够得到的最大的m进制下的数字是多少呢。 输入 输入第一行包含两个正整数n,m分别表示数字含有n位,和在m进制下。(n,m≤100000) 输入第二行和第三行分别包含n个整数,中间用空格隔开,每个整数都在0到m-1之间。每行第i个数表示的是当前数第i位上的数字。 输出 输出包含n个数字,中间用空格隔开,表示得到的最大的数字,从高位到低位输出,如6在2进制下输出3位的结果是1 1 0。 样例输入 5 5 4 4 1 1 1 4 3 0 1 2 样例输出 4 4 3 3 2 提示 4 4 1 1 1 →1 4 1 4 1 4 3 0 1 2 →3 0 2 4 1(重排序列不唯一,数位相加后的数字为 4 4 3 8 2,对5取模即可 )

第三季-第27课-Shell脚本高级编程

一曲冷凌霜 提交于 2019-11-27 10:45:04
第27课-Shell脚本高级编程 28.1 什么是脚本 脚本是一个包含一系列 命令序列 的 文本文件 (可以通过编辑器进行编辑,而且可以执行)。当运行这个脚本文件时,文件中包含的命令序列将得到自动执行。例如我们创建7个文件,可以不断的创建7个文件,也可以通过一个脚本文件(.sh文件)来创建。 28.2 脚本编程技术 1. 基本结构 (1)解析器:#!后面的部分,表示该脚本用哪个解析器来操作; (2)命令序列:由众多的命令组成。 2. 变量 shell脚本允许用户设置和使用自己的变量,变量可以使数字或者字符串,用户无需指定其类型,也无需在使用前定义。 赋值号的左右两边不用空格 ,注释用#开头。 #!/bin/sh a=”hello world” b=5 echo “A is: $a” echo “B is %b” 注:在运行该程序之前我们会发现有错,是因为我们使用的是windows下的文件和linux下的文件不同。所以,我们通过dos2unix shell.sh进行转换。我们在转换之前要安装相应的rpm包。 3. 参数 同C程序一样,shell脚本中可以使用命令行参数 $#:传入脚本的命令行参数个数 $*:所有命令行参数值,在各个参数值之间留有空格 $0:命令本身(shell本身) $1:第一个命令行参数 $2:第二个命令行参数 例如: #2.3 echo "number of

python 多进程共享全局变量之Manager()

主宰稳场 提交于 2019-11-27 09:50:36
Manager支持的类型有list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和Array。 但当使用Manager处理list、dict等可变数据类型时,需要注意一个陷阱,即 Manager对象无法监测到它引用的可变对象值的修改,需要通过触发 __setitem__ 方法来让它获得通知。 而触发 __setitem__ 方法比较直接的办法就是增加一个中间变量,如同在C语言中交换两个变量的值一样:int a=1;int b=2;int tmp=a;a=b;b=tmp; python例子: 1 from multiprocessing import Manager,Process 2 3 def test_manager(): 4 5   m[0]['id'] = 2 6 7 m = Manager().list() 8 9 m.append({"id":1}) 10 11 p = Process(target=test_manager) 12 13 p.start() 14 15 p.join() 16 17 print m[0] 执行结果: {"id":1} 并未改变 修改test_manager() def test_manager(): tmp = m[0]

MySQL 分析利器 strace & Perf

百般思念 提交于 2019-11-27 09:28:41
Perf   安装perf      yum install -y perf   执行:      perf top / grep " " * -r Strace介绍及用途   strace 是一个用于诊断,分析linux用户态进程的工具 (pstrace,losf, gbd, pstrack, pt-pmp) MySQL启动后会启动多少线程   strace /usr/local/mysql/bin/mysqld   # /usr/local/mysql/bin/mysqld --verbose --help | grep my.cnf   /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf   my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default   操心系统查看:     ps -T `pidof mysqld`   利用pstack     pstack `pidof mysql`   推荐MySQL5.7以上的版本     select thread_id ,name from performanct_schema.threads 使用strace的正确姿势   最简单使用     strace -T -t -o /tmp

[LeetCode]187. 重复的DNA序列

久未见 提交于 2019-11-27 08:34:48
题目链接: https://leetcode-cn.com/problems/repeated-dna-sequences/ 题目描述: 所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。 编写一个函数来查找 DNA 分子中所有出现超多一次的10个字母长的序列(子串)。 示例: 示例: 输入: s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT" 输出: ["AAAAACCCCC", "CCCCCAAAAA"] 思路: 滑动窗口 + 哈希 每次取10个字符记录下来,然后记录个数 时间复杂度: \(O(n)\) class Solution: def findRepeatedDnaSequences(self, s: str) -> List[str]: from collections import defaultdict visited = set() res = set() for i in range(0, len(s) - 9): tmp = s[i:i+10] if tmp in visited: res.add(tmp) visited.add(tmp) return list(res) java class Solution {

[LeetCode] 189. 旋转数组

好久不见. 提交于 2019-11-27 08:34:43
题目链接: https://leetcode-cn.com/problems/rotate-array/ 题目描述: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例: 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 解释: 向右旋转 1 步: [99,-1,-100,3] 向右旋转 2 步: [3,99,-1,-100] 说明: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 要求使用空间复杂度为 O(1) 的 原地 算法。 思路: 思路一:插入 思路二:拼接 思路三:三个翻转 , 整体翻转, 前 k 翻转,后 k 翻转 思路四:模拟过程 代码: 思路一: class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ n

[BZOJ 1552] 排序机械臂

不打扰是莪最后的温柔 提交于 2019-11-27 08:14:34
Splay大法是坠吼滴! 1552: [Cerc2007]robotic sort Time Limit: 5 Sec Memory Limit: 64 MB Submit: 436 Solved: 186 [ Submit ][ Status ][ Discuss ] Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000。第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号。 Output 输出共一行,N个用空格隔开的正整数P1,P2,P3…Pn,(1 < = Pi < = N),Pi表示第i次操作前第i小的物品所在的位置。 注意:如果第i次操作前,第i小的物品己经在正确的位置Pi上,我们将区间[Pi,Pi]反转(单个物品)。 Sample Input 6 3 4 5 1 6 2 Sample Output 4 6 4 5 6 6 HINT Source HNOI2009集训Day6 还算水的一道区间维护题目, 操作涉及区间翻转所以要用无旋 $Treap$ 或者$Splay$ . 主要思路是每次先建出这棵平衡树, 维护以结点为根的子树的大小, 最小值和最小值所在的子树(左/右/根), 然后每次根据保存的最小值的位置去查找并根据子树大小计算它所在的下标. 然后每次找到之后将其作为区间右端点,

Linux curl命令参数详解

浪子不回头ぞ 提交于 2019-11-27 06:56:51
一、Linux curl 用法举例: 1. linux curl抓取网页: 抓取百度: curl http : // www.baidu.com 如发现乱码,可以使用 iconv 转码: curl http : //iframe.ip138.com/ic.asp|iconv -fgb2312 iconv的用法请参阅: 在Linux/Unix系统下用iconv命令处理文本文件中文乱码问题 2. Linux curl使用 代理 : linux curl使用http 代理 抓取页面: curl - x 111.95.243.36 : 80 http : //iframe.ip138.com/ic.asp|iconv -fgb2312 curl - x 111.95.243.36 : 80 - U aiezu : password http : //www.baidu.com 使用socks代理抓取页面: curl -- socks4 202.113.65.229 : 443 http : //iframe.ip138.com/ic.asp|iconv -fgb2312 curl -- socks5 202.113.65.229 : 443 http : //iframe.ip138.com/ic.asp|iconv -fgb2312 代理服务器地址可以从 爬虫代理 上获取。 3.

Linux server record All user's ops

£可爱£侵袭症+ 提交于 2019-11-27 06:51:42
append to /etc/profile root@moonx:/tmp/dbasky/moonx# cat /etc/profile ... PS1="`whoami`@`hostname`:"'[$PWD]' history USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` if [ "$USER_IP" = "" ] then USER_IP=`hostname` fi if [ ! -d /tmp/dbasky ] then mkdir /tmp/dbasky chmod 777 /tmp/dbasky fi if [ ! -d /tmp/dbasky/${LOGNAME} ] then mkdir /tmp/dbasky/${LOGNAME} chmod 300 /tmp/dbasky/${LOGNAME} fi export HISTSIZE=4096 DT=`date "+%Y-%m-%d_%H:%M:%S"` export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT" chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null moonx@moonx: