自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 redis原子操作&lua脚本

一、背景在koala项目中, 很多处用到了redis锁, 比如ota升级、获取photo表的自增id、控制翻译加载等, 多数用法示例如下:这种用法, 通过expire设置过期时间来防止未释放锁带来的问题, 但引来了其他问题:setnx 与 expire分开调用,不能保证原子性, 因此可能存在expire未成功调用且锁未成功释放的问题二、调研2.1、将setnx 与 expire组合成原子操作的方法 redis版本>=2.6.12后(我们用的是3.0.6版本),...

2021-06-29 15:55:10 203

原创 关于双网卡Gateway的调研

一、问题问题描述:配置网卡eno1 ip: 10.171.16.65/24 gateway: 10.171.16.65 配置网卡enp1s0 ip: 192.168.1.99/16 gateway: 192.168.1.1 结果 enp1s0 能ping通 eno1 不能ping通 二、 排查原因查看路由表如下图:Metric解释:路由距离,到达指定网络所需的中转数。 也可以理解为路由成本、优先级(越小优先级越高) 可以发现,...

2021-06-29 15:51:07 536

原创 网络配置Netplan-ubuntu18.04

一、 获取当前配置# part1 NetCardName // 网卡名 IP // IPv4/IPv6地址SubnetMask // IPv4/IPv6子网掩码MTU MAC // MAC地址# 通过系统调用获取, 用的go原生包获取, 可以用系统命令ifconfig来对比查看, 如下security@DEFAULTSTRING:~$ ifconfigenp1s0: flags=4163<UP,BROADCAST,RUNNIN

2021-06-29 15:47:37 1884

原创 web大文件上传方案

一、前言我们在web项目开发时,基本都会有文件上传的功能,但大部分都是比较小的图片上传, 如果直接上传比较大的文件(以GB为单位),基本上会被服务器拒绝,即使服务器调整 post body size 那也会有连接超时的问题, 并发请求时甚至还会导致服务cpu、内存的过高增长, 从而影响整体服务。这时我们就需要专门处理大文件的上传问题。 二、总体思路由前端将大文件分成多个小文件上传,上传完成后由服务端合并成一个大文件。前端计算文件的 sha256 值 请求服务器创建上传任务 服务器根...

2021-06-29 15:44:28 801

原创 gevent文件读写坑点

参考解释为什么gevent的monkey patch不会自动把阻塞的file descriptor设置成非阻塞https://github.com/gevent/gevent/issues/1070如何open一个非阻塞file descriptorhttps://stackoverflow.com/questions/9259380/how-to-write-to-a-file-using-non-blocking-ioIIs the write() function in C blockin

2021-06-25 15:57:55 543

原创 orm/事务/session 规范

0、 ORM join使用规范示例0.1 不允许超过两张表进行join操作0.1.1 问题描述0.1.2 问题复现示例0.1.3 问题解决方案及结果对比一、orm使用规范1、事务中同时包含读写操作时, 要保证写操作在最后执行1.1、问题描述在同一个事务里执行select操作会把数据flush到db, 但由于事务的隔离级别,导致其他事务并不能查到此数据, 直到commit之后才可以看到这可能会导致一些查询事务跳过后commit的数据1.2、问题复现示例...

2021-06-17 17:08:17 357 1

转载 go知识点

以下代码能编译过去吗?为什么?package mainimport ( "fmt")type People interface { Speak(string) string}type Stduent struct{}func (stu *Stduent) Speak(think string) (talk string) { if think == "bitch" { talk = "You are a good boy" } else { talk = "hi"

2021-06-06 20:39:03 67

原创 Gitlab CI/CD

一、目的自动打包服务, 减少人工干预,节省时间成本, 降低错误率 自动执行单元测试, 给出覆盖和执行情况 可拓展其他功能: 比如代码规范检查等二、流程三、关键设施构建方法3.1 gitlab runner本地安装: # 1 添加仓库curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash # ...

2021-05-18 15:08:59 158

原创 单元测试标准

一、基本准则1、自动化的单元测试应该能够自动地运行,从准备数据到执行测试到检查结果这一整个过程都不需要人工干预。首先,调用测试的过程必须是自动化的,不需要任何人工干预,例如人工输入参数值或回答YES/NO。对于测试所需要的任何预设条件(例如创建一个临时文本文件并输入指定内容)等等,都应该成为单元测试自身的一个自动化组成部分。配合自动化构建工具,能够做到一键执行整个项目的全部单元测试并生成测试报告。另一方面,检查测试结果也应该是自动化的,测试必须能够自己决定它是通过了还是失败了,而不需要人工确

2021-05-12 11:04:15 1934

转载 TCP 重传、滑动窗口、流量控制、拥塞控制

简书最近不太稳定,未防止资源丢失, 转载自:https://www.jianshu.com/p/5b07a2f05771【图解】你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了 - 小林coding - 博客园正文相信大家都知道 TCP 是一个可靠传输的协议,那它是如何保证可靠的呢?为了实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。那么,TCP 是通过序列号、确认应答、..

2021-04-27 23:10:08 231

转载 kafka集群 leader选举机制(浅显易懂)

为防止资源找不到,转载自:https://my.oschina.net/u/3070368/blog/4338739Kafka 几大概念Topic(主题) Kafka 中可将消息分类,每一类的消息称为一个 Topic,消费者可以对不同的 Topic 进行不同的处理。 Broker(代理) 每个 Broker 即一个 Kafka 服务实例,多个 Broker 构成一个 Kafka 集群,生产者发布的消息将保存在 Broker 中,消费者将从 Broker 中拉取消息进行消费。 B.

2021-04-27 13:59:18 6433 1

转载 redis集群的对比

Redis Cluster 是一个分布式系统。由多个 Redis 实例组成的整体,数据按照 Slot 存储分布在多个 Redis 实例上,通过 Gossip 协议来进行节点之间通信。整理理解redis cluster 整体上还是一个哈希分布的方案,与 twemproxy,codis 没有本质区别, 不同的地方在于,客户请求不在通过代理节点转发,而是直接与对应槽位的节点处理 通过 gossip 来使得集群中的节点互相了解其他节点的状况,(节点的存活情况,所持有的槽位情况等)哈希方案:slot(.

2021-04-25 16:49:26 190

转载 2021-03-29

RabbitMQ知识点 目录RabbitMQ知识点 RabbitMQ 的使用场景有哪些?RabbitMQ 有哪些重要的角色?RabbitMQ 的消息是怎么发送的?RabbitMQ 怎么避免消息丢失?RabbitMQ 怎么保证消息的稳定性?要保证消息持久化成功的条件有哪些?RabbitMQ 持久化有什么缺点?RabbitMQ 有几种广播类型?https://blog.csdn.net/weixin_30315435/article/details/960391...

2021-03-29 23:28:42 76

转载 linux系统 es5.0安装ik中文分词器

转自:https://www.cnblogs.com/wangchuanfu/p/7239165.html 文中有个错误 本文已经改正es5.0集成ik中文分词器,网上资料很多,但是讲的有点乱,有的方法甚至不能正常运行此插件特别注意的而是,es的版本一定要和ik插件的版本相对应:1,下载ik 插件:https://github.com/medcl/elasticsearc...

2019-08-05 11:06:20 588

原创 排序总结

各种排序的总结#includeusing namespace std;//直接插入排序void insertSort(int arr[] ,int size){ for(int i=1;i<size;i++){ int temp = arr[i]; int j = i-1; while(j >= 0 && arr[j] > temp){ arr[j+1] = arr[

2017-03-17 21:05:10 263

原创 机器人的运动范围

牛客上看到这样一道题:题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思

2017-01-06 17:01:24 286

原创 矩阵中的路径

在牛客上看到这样一道题:题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb

2017-01-06 16:39:56 320

原创 滑动窗口的最大值

牛客上看到这样一道题:题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1},

2017-01-06 11:36:12 299

原创 数据流中的中位数

在牛客上看到这样一道题:题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。解题思路:可能看到这道题的第一反应是,这没什么难度呀,题目都说了用排序了,时间复杂度nlogn,如果这么简单的话,这题就没什么必要出了。对于这种找出很

2017-01-05 17:56:43 341

原创 链表中环的入口结点

牛客上看到这样一道题:题目描述一个链表中包含环,请找出该链表的环的入口结点。思路分析:链表中有环的题目似乎也算是一个非常经典的面试笔试题了,也是很多人喜欢问到的, 这道题其实有很多思路       思路一:我的第一反应是用map或者set,遍历链表,把每一个节点映射到map中或者添加到set中,当要添加的节        点在map或者set中已经存在的时候

2016-12-28 14:25:30 672

转载 剑指offer面试题:正则表达式匹配

转载自:http://www.cnblogs.com/AndyJee/p/4700373.html题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"

2016-12-27 17:23:28 259

转载 数组中的重复数字

牛客上的题目,参考剑指offer,转载自:http://www.cnblogs.com/AndyJee/p/4693099.html题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的

2016-12-26 18:06:28 251

原创 扑克牌顺子

把每一件简单的事情做的完美,你就是伟大的。在牛客上看到这样一道题:题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,

2016-12-20 17:11:01 298

原创 字符串循环左移

伟大在于把简单的事情做的完美在牛客上看到这样一道题:题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它解题思路:看到牛客讨

2016-12-16 11:28:21 684 1

原创 求递增序列中和为S的乘积最小的两个数

不要小看每一道简单的题,把细节做好,把每一道简单的题做的漂亮,这就是一种能力。牛客上有这样一道题:题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述:对应每个测试案例,输出两个数,小的先输出解题思路:定义两个指针start=0,end=array.length

2016-12-16 10:58:28 613

原创 求和为S的所有连续正数数列

今天在牛客上看到一道题:题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描

2016-12-15 17:50:27 538

转载 动态规划-股票买卖总结

转载自:http://liangjiabin.com/blog/2015/04/leetcode-best-time-to-buy-and-sell-stock.htmlBest Time to Buy and Sell Stock IDescription: Say you have an array for which the ith element is the price

2016-12-07 17:45:00 4429

原创 带有重复元素的有序数组二分查找

在牛客上看到这样一道题:题目描述统计一个数字在排序数组中出现的次数。     一般首先会想到顺序遍历一遍,时间复杂度o(n),如果这么简单,这道题就没什么必要出了。  其实这道题也很容易想到二分查找,时间复杂度为o(logn),但是二分查找需要注意一个细节,就是当遇到重复元素时,让mid指针跳过所有重复元素,这也是很多粗心的小伙伴非常容易忽略的,也是很多面试官喜

2016-12-07 16:52:53 7303

原创 数组中的逆序对

在牛客网上看到这样一道题:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size 对于%75的数据,size 对于%100的数据,size输入

2016-12-07 14:27:13 783

转载 几个常用字符串hash算法的node封装

// hash.jsexports.additive = function (key, prime) { key = key instanceof Buffer ? key : new Buffer(key); prime = prime == undefined ? 0xffffffff : prime; for (var hash = key.length, i = 0; i

2016-12-07 10:19:47 1711

转载 使用python的Flask实现一个RESTful API服务器端[翻译]

最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了。本文将会使用python的Flask框架轻松实现一个RESTful的服务。REST的六个特性:Client-Server:服务器端与客户端分离。Stateless(无状态):每次客户端请求必需包含完整的信息,换句话说,每一次请求都是独立的。Cache

2016-12-05 17:46:54 749

转载 web安全之分布式拒绝攻击-ddos与防范方法

一、从DoS到DDoS     拒绝服务(Denial of Service,DoS)由来已久。自从有了Internet,就有了拒绝服务式攻击方法。由于过去没有大型网站或机构受到过这种攻击,其劣性并不突出。直到2000年初,Yahoo!、eBay及Amazon等遭其暗算,它才露出庐山真面目。     DoS攻击的方法是,恶意用户会向服务器发送多个连接请求,使其呈满负载状态,并且将所有请

2016-09-29 16:45:56 2134

转载 web安全之文件上传漏洞攻击与防范方法

一、 文件上传漏洞与WebShell的关系文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。文件上传漏洞本身就是一个危害巨大的漏洞,WebShell更是将这种漏洞的利用无限扩大。大多数的上传漏洞被利用后攻击者都会留下

2016-09-29 14:48:09 55027 2

转载 web安全之跨站请求伪造攻击(CSRF)与防范方法

一.CSRF是什么?  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。二.CSRF可以做什么?  你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取

2016-09-29 13:35:38 14897

转载 web安全之跨站脚本攻击XSS与防范方法

跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。一个简单的留言板我们有个页面用于允许用户发表留言,然后在页面底部显示留言列表DOCTYPE html>html>head> php incl

2016-09-29 11:43:50 1311

转载 webc常见安全隐患之sql注入与防范方法

伴随着Web2.0、社交网络、微博等一系列新型互联网产品的兴起,基于Web环境的互联网应用越来越广泛,Web攻击的手段也越来越多样,Web安全史上的一个重要里程碑是大约1999年发现的SQL注入攻击,之后的XSS,CSRF等攻击手段愈发强大,Web攻击的思路也从服务端转向了客户端,转向了浏览器和用户。SQL注入常见攻击技巧SQL注入攻击是Web安全史上的一个重要里程碑,它从1999

2016-09-29 10:21:53 1054

转载 二叉树的基本性质

(1) 在二叉树的第k层上,最多有2k-1(k≥1)个结点;解释:最多的时候是满二叉树,它的第1层有21-1=1个结点;第2层有22-1=2个结点;第3层23-1=4个结点;第4层有24-1=8个结点;……(2) 深度为m的二叉树最多有2m-1个结点,最少有m个结点;(3)对于任意一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个;即如果其叶子结点数为N0,而度

2016-09-23 15:06:29 502

转载 N个元素的进出栈总数-方法转换-动态规划

其实此题还可以用动归方法解决,f[i,j],i表示入栈的个数,j表示出栈的个数,那f[i,j]就表示入栈i个数中出j个数的,但是此题要注意的是出栈数不能大于入栈数,那动归方程该如何推导,再次谢谢一位某位具有探索精神的大神为我们做了细致的研究现在我把它的论文粘贴如下:1      引 言在实际应用和数据结构课程的教学中,栈作为一种基本结构非常重要[1][3][4][6]。

2016-09-23 14:28:59 5169 1

转载 树、森林与二叉树的转换

1、树转换为二叉树由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。将树转换成二叉树的步骤是:(1)加线。就是在所有兄弟结点之间加一条连线;(2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线;(3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次

2016-09-23 11:52:38 266

转载 中缀表达式求值问题

中缀表达式的求值问题是一个比较常见的问题之一,我们通常在编写程序时,直接写出表达式让编译器去处理,很少去关心编译器是怎么对表达式进行求值的,今天我们来一起了解一下其中具体的原理和过程。  表达式一般来说有三种:前缀表达式、中缀表达式、后缀表达式,其中后缀表达式又叫做逆波兰表达式。中缀表达式是最符合人们思维方式的一种表达式,顾名思义,就是操作符在操作数的中间。而前缀表达式和后缀表达式中操作符分别

2016-09-23 11:15:29 3190 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除