自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (4)
  • 收藏
  • 关注

原创 go: 使用简单的计数器计算请求的qps

背景一个稳定的后端服务,需要具备相当的容灾能力。假设因为有事故出现,或者是由于活动等原因,导致有突发大量流量请求服务,此时要保证系统不会被打垮,依然能在力所能及的范围内提供服务。要应付以上场景,也就意味着系统具备限流能力。一些常用的限流方法有: 计数器算法,令牌桶算法,漏桶算法等。然而在工作中,我们可能希望做一些更加复杂的操作。 因此如果能够实时计算到当前系统的QPS,根据QPS判断进行不同操作,就能实现在不同的流量中的分级处理。 Qps计算Qps即每秒查询率,表示每一秒钟的请求量。明

2022-01-15 11:17:30 1930 2

原创 字节算法题:判断等式和不等式是否成立

之前字节面试的时候遇到这样一道题目:题目描述:给定一些等式或者不等式,验证式子是否可以成立。其中式子只会有=或者!=例子如下:例子1: input = ["a=b", "b=c"], output = true 例子2: input = ["a=b", "b=c", "a!=c"], output = false问题中只会有等于或者不等于,相等的字母可以理解为有相同的值,或者是在一个集合中。则初步分析之后,可以考虑以下想法:首先处理等式,将相等的关系记录下来。然后再查看.

2021-08-08 10:50:16 1106 1

原创 字节算法题:基于用户登录日志计算任一时间在线人数

在面试的时候遇到这样一道题。给定一些用户登录的日志,计算任意时间的在线人数。其中用户登录日志包括如下信息:type LoginLog struct { userId int loginTime int logoutTime int}根据题目,一天24小时,我们有一堆的用户登录日志。简单的做法是我们遍历获取日志,然后对于用户在线的这段时间,对每一个时间点对在线人数加一。则程序如下:func calOnlineUserCount(logList []*Lo

2021-07-16 11:18:48 2658 2

原创 Redis 6.0 多线程网络通信部分

Redis 6.0中新加入了多线程版本的网络通信。从总体来看,在开启多线程的情况下,会创建IO线程进行读写。但是对于内容的修改,读取等依然是通过主线程完成的。下面是从大佬偷来的一副时序图。https://zhuanlan.zhihu.com/p/144805500通过时序图,可以按照顺序查看过程。1.初始化整个sever的初始化是通过 server.c/initServer函数完成的其中可以看到里面做了一下比较重要的事情:1. 创建了事件循环。事件循环是red

2021-07-06 12:43:34 347 1

原创 各种排序算法(Golang版本)

1.快速排序快速排序是一种非稳定排序。func findPivot(nums []int, left int, right int) int { pivot := nums[left] // pivot的选择这里一直取第0个元素,可换成随机数 nums[left], nums[right] = nums[right], nums[left] var back = left - 1 var front = left for front < right

2021-07-02 22:32:18 432 2

原创 Redis数据结构之简单动态字符串(SDS)

这里写自定义目录标题欢迎使用Markdown编辑器1.简单动态字符串1.简单动态字符串功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页

2021-03-07 11:06:00 97

原创 go语言实现set数据结构

1.Setset是一种十分常用的数据结构。一般代码种使用的set的主要性质如下:1.元素去重2.进行交集,合集等计算3.查看元素是否存在然而,go语言并没有内置的set数据结构想要实现set,我们可以通过map简单实现特定类型的set。2.代码实现下面通过代码讲解如何实现string类型的set:(手敲的,不知有没有问题)type StringSet struct { dataMap map[string]byte}// 创建setfunc NewSet(elements ..

2021-02-01 23:13:14 2061

原创 僵尸网络识别(Botnet detection)

僵尸网络识别是网络安全的一个重要课题。重点是要通过构建模型识别出僵尸网络的流量包的特征,进行识别。项目代码和文章发布于:https://github.com/827983519/Botnet-detection

2021-01-23 15:54:43 1669

原创 三维装箱决策问题

目录1.三维装箱决策问题2.三维装箱决策问题分析3.算法描述(1) 原理描述(3) 时间复杂度分析1.三维装箱决策问题三维装箱问题即研究如何用最少数量的箱子将物品装起来。其描述如下:假设有n个物品,其长宽高信息分别为(l1,w1,h1)(l_1,w_1,h_1)(l1​,w1​,h1​),(l2,w2,h2)(l_2,w_2,h_2)(l2​,w2​,h2​)…(ln,wn,hn)(l_n,w_n,h_n)(ln​,wn​,hn​)。有容器,其容积分别为VVV。用最少的箱子,将全部物体都装起来。

2021-01-23 11:59:39 12065 7

原创 缓存更新策略(go)

文章目录前言一、配置的使用和更新二、具体实现1.监测缓存过期2.监测配置修改总结前言在开发系统时,配置管理是十分重要的一部分。由于配置不经常变动,并且大多数情况下实时性要求不是特别高,因此将配置存在缓存中是很常用的一种方法。存在缓存中能够提高查找效率,但是也带来了新的问题:配置何时更新?怎么更新?一、配置的使用和更新许多服务器使用配置时,会选择将配置存在内存中。并且为了避免被多次初始化,读取配置的对象采用单例模式生成。同时应该满足以下特点:1.配置缓存有过期时间,一定时间后缓存过期,再次拉取数

2021-01-11 23:31:54 502

原创 python检测MySQL的DDL语句正确性

1.Inception库 Inception是一个开源系统,每个人或者每个公司都可以自由使用, 可以用于审核SQL语句的合法性。 Inception使用说明:https://inception-document.readthedocs.io/zh_CN/latest//*--user={username};--password={password};--host={host};--check=1;--port={port};*/inception_magic_start;...

2020-09-20 11:49:44 1943

原创 gorm RowsAffected() 返回0的问题

在项目中,经常需要更新数据,并且要获取到更新的条数从而做不同的操作。在gorm中提供了RowsAffected()的方法获取更新的条数。但是我们执行一下的代码会发现这个方法总是输出0,一点都不好使。db := DBagent.DB.Table("user_tab")err := db.Where( "id = ?", 1).Updates(updateInfo).Error()println(db.RowsAffected()) // 总是打印0这是因为gorm中,如Find,Crea.

2020-09-12 09:40:49 9996

原创 go语言Min,Max,Sum函数

在编写go程序时我们经常需要使用多变量的Min,Max函数。但是会发现官方代码中只提供了float类型的Min,Max函数,这是因为浮点型的数据判断会涉及到比较多的逻辑,而整数型的数据判断逻辑十分简单,可以十分轻松的实现。因此这里就分享一下Min,Max和Sum的代码实现。逻辑非常简单:const ( MININT64 = -922337203685477580 MAXINT64 = 9223372036854775807)func Max(nums... int64) i

2020-08-23 08:57:31 8563

原创 简单的ID生成器设计

1. ID生成器 在工作中,我们经常需要用到ID生成器。比如当当前系统与别的系统有一些数据需要同步时,为了实现幂等性,往往会为每一次同步请求设定一个全局统一的ID。可见ID生成器在许多项目中都有至关重要的多用。 ID生成器有许多的实现方式。 1. 比如用著名的UUID,这种方法可以简单的获取到全局唯一的ID。但是因为获得的ID是字符串,在一些需要纯数据的场合,处理起来效率没有这么高。...

2020-08-15 12:07:45 1639

原创 python获取文件中的类

1. 导入文件的方式获取文件中的类由于工作需求,需要获得文件中的某一些类的内容。一般比较常用的方法是通过遍历文件,然后通过调用importlib包导入文件,就能获得文件中的内容,从而获取想要的类。代码如下:for importer, package_name, is_pkg in pkgutil.walk_packages('.'): importlib.import_module(package_name) module = sys.modules[package_name] for c

2020-08-09 09:13:40 2990

原创 基于卷积神经网络的僵尸网络识别

本文参考文献:https://www.researchgate.net/publication/316176048_Malware_traffic_classification_using_convolutional_neural_network_for_representation_learning僵尸网络检测是网络安全中的一个重要课题。本文是在参考了Wei Wang的论文后,经过修改...

2019-07-12 23:41:30 2035 6

原创 Python: 从pcap文件中提取每个TCP session的payload

如今,网络在我们生活中起到不可或缺的作用,同时也催生出很多与网络相关的问题。比如恶意软件检测、流量识别等。机器学习和深度学习的相关算法已经被广泛应用于这些问题上面了。本人在进行Botnet detection学习的时候,遇到第一个问题就是TCP数据的获取。但是一般我们通过抓包工具获得的就是一些pcap文件。从这些文件中我们利用如dpkt和scapy等库,很容易可以获得文件中的数据。但是如果想把...

2019-06-02 23:36:57 8651 3

原创 基于遗传算法和Kmeans的电影推荐算法

本文参考文献:https://www.sciencedirect.com/science/article/pii/S1045926X140009011.基于用户的协同滤波算法 在我的前一篇文章中我介绍了一种基于用户喜好和电影类型进行推荐的算法。这次我来介绍一种将遗传算法和Kmeans结合的电影推荐算法。 我们知道基于用户的协同滤波算法是一种十分热门的算法。这种算法的目的是...

2019-04-13 09:20:09 3628 11

原创 基于用户喜好以及电影类型的电影推荐算法

本文参考文献:https://www.researchgate.net/publication/257403928_A_movie_recommendation_algorithm_based_on_genre_correlations代码:https://github.com/827983519/recommend_algorithm/blob/master/Genre.py1.电...

2019-04-06 23:08:31 9701 3

原创 sklearn库LDA进行图片数据降维

1.简介 在另一篇文章中讲了利用PCA对图片数据进行降维,这次介绍一下另一种降维方法——LDA(Linear Discriminant Analysis),即线性判别分析。跟PCA不同,LDA是一种supervised的降维方法。即我们对数据降维时需要数据的label。 LDA的原理是要找到一个投影面,使得投影后相同类别的数据点尽可能的靠在一起,而不同类别的数据点尽可能的分开...

2019-02-24 11:14:36 3836 4

原创 sklearn库PCA函数进行数字图片降维

1.PCA简介    PCA全称是Principal component analysis,中文名是主成分分析。是对数据进行降维处理的一种常用方法。    PCA的原理可以理解为寻找超平面对样本进行表达,从而使得属性自身的方差尽可能大,而属性之间的协方差尽可能小。具体的数学原理可以去参考这位大神的文章:https://zhuanlan.zhihu.com/p/21580949    这...

2019-02-23 13:04:07 5088 2

原创 硬币找零问题(贪婪算法和动态规划)

1.硬币找零问题    在学习算法分析时候的一个经典问题就是硬币找零问题。该问题是给一些不同面值的硬币,其中=1,以及数值M。要计算出找M所需要的最少硬币数。   比如我们有硬币&lt;1,5,10,20&gt;,那么如果要找33块钱的话,最少的零钱数是20+10+1+1+1,一共5个硬币。这就是硬币找零问题的简介。 2.贪婪算法(Greedy algorithm)    从上...

2019-02-09 01:33:17 11083

原创 无向图计算vertex cover

1.vertex cover的定义      一个无向图G(V ,E)的vertex cover VC是顶点集V的一个子集,如果边uv∈ E,则顶点u,v至少有一个点属于VC。      可以看出其实寻找vertex cover并不难,因为顶点集V本身就是一个vertex cover。而难的是寻找最小的vertex cover。vertex cover的寻找可以用于街道安装摄像头等情况的计...

2019-01-28 09:57:33 5992

原创 机器学习理论: PAC学习

(这篇文章是本人学习机器学习课程CS685后的一些总结。如有任何错误,欢迎指出) 1. 基本概念定义      当我们利用机器学习构建模型时,我们获得训练集,然后利用算法从训练集中学习到模型,接着就可以用该模型进行各种预测。为什么这是可行的呢? 想要弄清楚为什么可行,我们定义一下东西:(这些用英语写的都是因为本人不知道怎么翻译最准确,干脆不翻译了)     Domain set: ...

2019-01-26 02:05:27 3224

原创 无向图寻找两点间的最短路径

1.简介 无向图是图结构的一种。本次程序利用邻接表实现无向图,并且通过广度优先遍历找到两点之间的最短路径。2.广度优先遍历 广度优先遍历(BFS)和深度优先遍历(DFS)是图结构中最常用的遍历方式。其中广度优先遍历配合上队列能够找到两点之间的最短路径,同时也能解决一些其他的问题(比如寻找迷宫的最短逃离路线)。广度优先遍历寻找两点之间最短路径的操作分为以下几步:...

2018-10-17 08:10:02 10910 3

原创 OK6410之驱动分离分层机制

在linux驱动中存在着一种驱动分离分层的总线机制。 platform会存在/sys/bus/里面 其中bus总线上有关于driver的链表drv和关于device的链表dev。当你注册device或者是driver结构体的时候:(1)将device或者driver结构体加入bus总先相应的链表中;(2)通过.match函数和bus上的相对的链表中的结构体进行匹配(3)...

2018-09-12 11:06:19 119

原创 OK6410之input_dev按键驱动

之前学习过输入子系统的相关概念,这里我们就学习一下如何编写按键驱动。本次要实现的是让开发板的5个按键代表键盘中的L、S、回车键等。 首先看看input_dev结构体:struct input_dev { void *private; const char *name; //设备名字 const char *phys; /...

2018-08-28 10:41:49 254

原创 OK6410之信号量和阻塞机制

上一篇文章讲了利用原子变量防止设备竞态的发生,这一节将如何利用信号量达到同样的效果。 学过ucosIII操作系统的朋友会对信号量这个概念比较熟悉。程序中请求信号量,如果得到信号量则信号量的值-1,并且程序继续运行。若请求不到信号量则会阻塞或者进行其他操作。当程序结束前要释放信号量,则信号量的值+1,这样别的程序才能得到信号量。 信号量的相关内核代码在&lt;asm/semaph...

2018-08-24 23:46:38 1055

原创 OK6410之原子变量

当设备被一个程序打开时,存在被另一个程序打开的可能,如果两个或多个程序同时对设备文件进行写操作,这就是说我们的设备资源同时被多个进程使用,对共享资源(硬件资源、和软件上的全局变量、静态变量等)的访问则很容易导致竞态。对于竟态问题有不同的处理方式,比如信号量,自旋锁等。 但是当共享的资源只是一个简单的整数,这时候我们如果利用完整的锁机制会是一种浪费,这种情况下一般使用原子变量来处理。...

2018-08-24 21:50:48 105

原创 输入子系统

本帖是学习该帖子后的理解:https://www.cnblogs.com/lifexy/p/7542989.html   若有多个不同的驱动程序时,应用程序就要打开多个不同的驱动设备,当别人使用时会很麻烦。因此需要使用输入子系统, 使应用程序无需打开多个不同的驱动设备便能实现 drivers/input/input.c   在该文件中可以看到subsys_initca...

2018-08-23 15:55:55 159

原创 OK6410 LED字符设备驱动编写

本次驱动编写使用:OK6410+linux3.0.1 在内核内部使用struct cdev结构来表示字符设备。因此在内核调用字符设备前需要分配并且注册一个cdev结构体。在代码中需要包括&lt;linux/cdev.h&gt;头文件。字符设备驱动中需要编写相关的驱动函数,从而与应用程序中的open()、write()等函数形成对应。编写驱动函数后利用file_operations使驱动...

2018-08-20 10:39:18 418

原创 OK6410按键中断方式的字符设备驱动编写

使用轮询的方法检测按键会得的程序占用CPU的使用率。因此使用中断的方式编写设备驱动。本次编写字符驱动采用linux内核版本为3.0.1,板子为OK6410 在linux系统中不同设备对应不同的中断,不同中断则通过唯一的数字标志。这些中断值称为中断请求(IRQ)线。每个IRQ线都会关联一个数值量——比如经典的PC机上,IRQ 1是键盘中断。申请中断在编写驱动若需要使用中断,则必须...

2018-08-18 22:28:19 269

fqo47.Computer.Networking.A.TopDown.Approach.6th.Edition.pdf

经典的计算机网络教材。带有目录,清晰。全英文版本。

2019-06-12

OK6410 LED字符设备

OK6410LED灯的字符设备。内核使用linux3.0.1,编译后insmod即可使用

2018-08-20

OK6410轮询方式按键字符驱动

OK6410轮询方式按键字符驱动。采用linux内核版本为3.0.1

2018-08-19

ov2640资料和代码

ov2640资料和代码

2018-05-01

空空如也

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

TA关注的人

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