自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux/Unix系统下的线程安全IO

SIO Packages (Signal-Safe IO)/************************************************************* * The Sio (Signal-safe I/O) package - simple reentrant output * functions that are safe for signal handlers. *************************************************

2021-10-05 13:56:00 395

原创 Linux/Unix 使用inotify,hook函数来监控文件事件

在实际开发中有时候回遇到许多文件的操作,或者需要对文件事件进行排查。。可以使用inotify函数来完成这项工作代码如下:#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>#include <sys/inotify.h>#define EVENT_SIZE

2021-08-15 22:25:25 821

原创 关于信号类程序的同步机制

一、多进程中的信号同步机制:基于signal interrupt的例子,用于防止race condition先看以下例子:#include "csapp.h"void handler(int sig){ int olderrno = errno; sigset_t mask_all, prev_all; pid_t pid; Sigfillset(&mask_all); while((pid = waitpid(-1, NULL, 0

2021-07-11 12:51:44 431

原创 CSAPP - 一个简单的Shell

Shell命令在是最常用的一个和操作系统交互的工具。shell命令的基本执行过程是:1)从stdin来读取用户的command。2)对command进行解析,并判断是否为buildin command3)如果是buildin command则执行buildin command4)如果非buildin command,则执行fork命令,然后在fork的子进程中执行execve创建新的program。其中还涉及到对输入command进行parse的简单过程。5)如果要对进程的切换f

2021-07-04 22:10:25 349

原创 Windows10 + Nodejs调用C++语言Dll

一、安装环境首先需要安装nodejs环境安装NodeJS解释器:https://nodejs.org/dist/v14.17.1/node-v14.17.1-x64.msi需要安装ms_build环境,因为node14需要匹配VS2015。执行一下命令:C:Windows\System32\>npm install --global --production windows-build-tools --vs2015等待几分钟安装需要的环境经过实验,不需要额外安装MSB

2021-06-24 09:27:37 1758

原创 动态规划-背包问题

背包问题是一种组合优化的NP完全问题。有N个物品和容量为W的背包,每个物品都有自己的体积w和价值v,求拿哪些物品可以使得背包所装下的物品的总价值最大。如果限定每种物品只能选择0个或1个,则问题称为0-1背包问题;如果不限定wu'pi...

2021-06-17 08:51:41 2280 3

原创 安装FastDFS单机版环境

1. 主机环境与系统:服务器:阿里云操作系统:Ubuntu 18.04 64位本机已经开启root权限,因此省去了执行su等ming'ling

2021-06-06 17:41:25 354 4

原创 Windows 应用生成MiniDump文件的方法笔记

Windows应用在yu// 创建Dump文件 void CreateDumpFile(LPCTSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException){ HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Dump信息 MINID

2021-06-03 14:45:26 1337

原创 FastDFS 架构分析

本系列文章将使用FastDFS框架来搭建一个基于分布式文件系统的网络云盘1. FastDFS架构分析Fast'D

2021-05-30 11:02:46 482 2

原创 数据流压缩之应用篇zlib库

关于数据流压缩的原理,lz77以及huffman编码可以参考上一篇:https://blog.csdn.net/sesiria/article/details/116835301本篇将包含以下内容:1. gzip格式分析2. zlib库函数API分析3. zlib库实战(压缩和解压文件)gzip格式采用deflate算法来实现数据的压缩一、deflate采用了改进版的lz77算法即:三个字节以上重复才进行编码,否则不进行编码;即对滑动窗口进行查询的时候最短的匹配大..

2021-05-23 17:58:29 2366 2

原创 数据流压缩原理实现(huffman编码,LZ77压缩算法)

1. 压缩原理deflate算法 a) LZ77 算法原理 b) Huffman算法原理 c) Huffman算法测试实例2. gzip格式分析3. zlib库函数API分析4. zlib库实战(压缩和解压文件)一、数据压缩的原理规则压缩:已知数据的排列组合模式,通过抽象用数学公式来表示。比如矢量图,3D模型的顶点数据等。对于未知规则的数据:则是采用一种更高效的编码来代替原有数据的编码。一种方法是找出数据中那些重复出现的字符串,然后用更短的符号代替...

2021-05-23 09:07:14 5792 2

原创 一个异步日志IO的demo

整理了以下项目中用到的一个异步日志IO的实现,基于以下设计:1. 使用了一个push队列和一个write队列。主线程往push队列中加数据,写线程从write队列中拿数据写到磁盘2. 默认情况下write线程处于睡眠3. 有两种情况会唤醒写线程。 1)push队列满后,会调用force_write将push队列和write队列交换并唤醒写线程将日志写入磁盘 2)如果push队列长时间未满,待定时器触发后,也会切换push和write并唤醒写线程。 3)每次写...

2021-05-17 23:18:47 156

原创 CentOS中的 MySql Yum源安装

部署服务器环境的时候经常需要安装MySql,以下是常见的安装方式* 源码安装* rpm包安装* yum源安装本文主要介绍yum源的安装一、yum源下载进入https://dev.mysql.com/downloads/页面,可以看到很多下载项,可以选择MySQL Yum Repository对应的链接是:https://dev.mysql.com/downloads/repo/yum/这里选择 mysql80-community-release-el7-3...

2021-05-17 15:05:38 480

原创 Unix/Linux 编程:网络编程之 内存池

一,内存池的原理二,内存池的应用三,基于连接的简单的内存池的实现/** * File name: memorypool.c * Author: sesiria 2021-05-05 * A Implementation of memory pool. * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#in..

2021-05-07 20:53:46 205

原创 Unix/Linux 编程:网络编程之 线程池

一,线程池的基本组成1. 工作线程队列2. 任务队列3. 线程管理器(封装了线程池的一些基本方法,创建,销毁,加入新任务等)比如一个常用的网络服务,通常主循环用于处理接收与基本的recv/send操作。可是如果某些业务操作需要长时间的处理数据。比如等待数据库查询结果,对数据进行编解码等业务逻辑事。为了不让主线程进行长时间的阻塞,从而引入了线程池。让线程池的工作队列来处理具体的业务。主线程则继续处理网络连接。应用:线程池是生产者与消费者模型的一个最典型的应用。最常见的ngin.

2021-05-05 18:06:20 381 5

原创 Unix/Linux 编程:网络编程之 基于Reactor实现WebSocket服务

使用到的上一篇文章中基于epoll实现的Reactor模型。OpenSSL使用其中的SHA1,base64 encode等库openSSL源码使用1.1.0l$ tar xzvf OpenSSL-1.1.0l.tar.gz$ cd OpenSSL-1.1.0l$ ./config –-prefix=/usr/local/openssl$ make$ sudo make install安装完以后需要将openSSL的库和头文件添加到默认的搜索路径。否则后续编译需要加一大串 -I.

2021-05-03 18:21:30 267

原创 Unix/Linux 编程:网络编程之 epoll与Reactor

在上一篇文章中实现了epoll的非阻塞IO的服务端程序可是如果实际应用中需要注册大量事件,一个超长的if代码块会严重降低代码的可读性和管理因此参考了 Reactor模型的实现改写了epoll服务器。讲所有的事件处理函数都写成回调函数的形式。这里注意几个参数传递时候的坑。/* Server based on EPOLL */#include <stdio.h>#include <stdlib.h>#include <string.h>#include

2021-05-03 13:31:17 270

原创 Unix/Linux 编程:网络编程之 IO模型

一、阻塞IO(blocking)主线程阻塞等待用户连接请求(accept阻塞)。等请求达到以后再调用(recv)系统调用接收数据,这时候又阻塞等待。等内核将数据接受好并从内核空间拷贝到用户空间后,系统调用返回,表明数据读取完毕。这个操作在等待IO的时候会将主线程挂起而不能执行其他操作,浪费了大量服务器性能。二、多线程(blocking+multithread)由于accept系统调用会对每个客户端的连接都返回一个fd,因此可以利用多线程的方法。主线程只负责accept处理连接请求。

2021-05-02 14:33:14 191 2

原创 GDB的基本使用

一、GDB的基本使用1. 编译代码 准备一个文件比如 test_gdb.c#include <stdio.h>int main() { int arr[4] = {1, 2, 3, 4}; int i = 0; for(i = 0; i < 4; i++) { printf("%d\n", arr[i]); } return 0;}编译: -g选项gcc

2021-04-24 23:21:10 273

原创 哈希表与布隆过滤器

一,背景问题1.在使用Word文档的时候,word是如何判断某个单词是否拼写正确的?2.网络爬虫程序,怎么让它不去爬相同的URL页面?通过哈希表来查询(时间复杂度O(1))3. 缓存穿透问题如何解决?*描述缓存场景,为了减轻落盘数据库(mysql)的访问压力,在server端与mysql之间加入一层缓冲数据层(用来存放热点数据);*缓存穿透发生的场景是server端向数据库请求数据时,缓存数据库(redis)和落盘数据库(mysql)都不包含该数据,数据请求压力全部涌向落盘数据库

2021-04-19 22:37:54 754

原创 DCMTK在windows下的编译与安装(CMAKE+Visual Studio 2017)

最近项目中有需求需要对DICOM影像进行处理, 因此需要使用到开源库DCMTK。编译与安装遇到了一些坑这里总结以下。一,准备工作1.DCMTK源码https://dicom.offis.de/dcmtk.php.en下载后解压到D:\DCMTK\dcmtk-3.6.6目录下2.DCMTK文档网上上看了许多blog关于编译的说法众说纷纭,最后还是参考了官方的文档中的INSTALL相关说明下载后解压到D:\DCMTK\dcmtk-3.6.6-html-help3.DCMTK支持.

2021-04-18 14:53:05 3754 3

原创 链表,堆栈与队列

一,链表定义:struct link_node { int value; struct link_node * next;};1. 判断链表是否有没有环使用两个快慢指针慢指针往后面以动一个节点快指针每次移动两个节点// check whether the link list is a ring// 1 for true, and 0 for false.int isRing(struct link_node* head) { if (head ==

2021-04-11 17:43:25 379

原创 排序与查找算法

一,排序其中最基本的三种排序是冒泡,选择与插入。其平均复杂度为O(n^2). 但是其中选择排序在数据有序的情况or数据量小的情况下效率很高。虽然简单也是应该掌握的排序。比如C++的STL库中的sort模板函数,在数据量较小的情况下使用的是插入排序,在数据量较大使用快速排序等。1)冒泡最简单的排序方法。思路如下 时间复杂度O(N^2) 空间复杂度O(1)1)从左往右扫描两两比较数据,如果发现左边的数大于右边的数则交换。第一轮扫描以后,最右边的数一定为序列中最大的数2)第二轮开始扫描

2021-04-11 12:20:35 626

原创 C语言中Try/Catch的实现

C语言中Try/Catch的实现许多高级语言中都有Try/Catch的实现用于处理异常。例如在C++中try { // ... do something // ... throw a exception} catch (exception &e) { // handled the specific exception} catch (...) { // handled other exception.}可以通过以上语句块来实现异常的捕获和处理。

2021-04-07 22:46:10 13162 3

原创 Algorithm: Maximum Flow Problem

reference 【Introduction to Algorithm Chapter 26】Problem SettingWe wish to compute the greatest rate at which we can ship material from the source to the sink without violating any capacity constra...

2021-04-05 22:53:21 506

原创 C++ 后端开发工程师的技术栈整理

C++ 后台开发岗位知识技能树一、语言:a)C/C++ 语言,对象生命周期,垃圾回收,标准库,错误与异常的处理,日志,面向对象的理解,设计模式,GDB的使用,代码高内聚低耦合二、数据结构与算法:a)线性表:链表,队列,栈b)树:二叉树,红黑树,字典树,线段树等c)图:图搜索,dijkstra算法,最小生成树d)递归e)排序:希尔,归并,快排,堆排序,桶排序f)算法:贪心,动态规划g)跳表,散列表,布隆过滤器三、数据库a)持久型mySqli.MySql安装与配置ii

2021-04-04 22:55:12 6196 3

原创 数字图像处理-图像的计算

使用Numpy来实现一些数字图像处理的基本运算一, 图像的灰度变换1. 线性变换。Gn = c*G0+ a, 其中G0为原始图像中对应点的像素灰度值,Gn为经过线性变换后所得到的点的灰度值。1)当c<1时,变换结果是使得图像的对比度见效,其效果是使医学图像中相邻组织的对比减弱,图像变的暗淡。2)当c=1时,变换后的对比度保持不变。a是亮度调节系数。 当c=1,a>0时,图像的灰度得到提高,使得图像变亮; 当c=1,a<0时,图像的整体灰度...

2021-03-29 13:56:05 783 3

原创 Disjoint Union Set 并查集

Equations are given in the format A / B = k, where A and B are variables represented as strings, and k is a real number (floating point number). Given some queries, return the answers. If the answer d...

2019-12-11 14:28:43 318

原创 MatchZoo 文本匹配工具包

MatchZoo是封装了一系列文本匹配的框架包含以下算法:官网地址:https://github.com/kouunn/MatchZooModel Detail:1. DRMMthis model is an implementation ofA Deep Relevance Matching Model for Ad-hoc Retrieval.model file: mo...

2019-11-24 09:39:42 938

原创 基于K-Means算法的应用 User Clustering

User Clustering计算出segment对于Recence,先对数据进行排序,然后映射到4个bucket中,数值越大价值越大接着计算对于R的 segment接着对M排序并映射到bucket中,然后计算对应M的Segment接着计算M的segment最后把segment的值相加得到Score最后根据的Score设定规...

2019-10-27 10:23:12 407

原创 基于论文[From Word Embedding to Document Distance]的实验

代码参考:https://github.com/mkusner/wmd一,准备环境安装好anaconda笔者这里用的是python3 64bit的版本需要用到这个库,gensimconda install -c conda-forge gensim从参考代码的仓库上下载WMD代码:git clone [email protected]:mkusner/wmd.git...

2019-10-26 17:46:44 259

原创 Algorithm: K-Means

K-MeansThe K-Means is anunsupervised learning algorithm which hasthe input sample data without label.Sometimes we use the CRM system to manage the relationship between the customer. The concept...

2019-10-25 09:33:18 333

原创 在Markdown中的Latex 基本使用

研究机器学习的时候,在markdown中最常的应用是写数学公式,和证明。一, 数学证明块:$$\begin{array} {l}{\text { Recall the exponential family form of the Bernoulli distribution }(6.113 \mathrm{d}),} \\ {\qquad p(x | \mu)=\e...

2019-10-22 15:35:56 1222

转载 [转] Python使用matplotlib,numpy,scipy进行散点的平滑曲线化方法

首先给出一个没有smooth过的曲线import matplotlib.pyplot as pltimport numpy as npT = np.array([6, 7, 8, 9, 10, 11, 12])power = np.array([1.53E+03, 5.92E+02, 2.04E+02, 7.24E+01, 2.72E+01, 1.10E+01, 4.70E+00]...

2019-10-19 20:43:36 1340

原创 C++并发编程之读写锁(C++17)

STL 和 Boost 都提供了 shared_mutex 来解决「读者-写者」问题(必须使用C++17或者后续版本)。shared_mutex 这个名字并不十分贴切,不如 pthread 直呼「读写锁」。所谓「读写锁」,就是同时可以被多个读者拥有,但是只能被一个写者拥有的锁。而所谓「多个读者、单个写者」,并非指程序中只有一个写者(线程),而是说不能有多个写者同时去写。下面看一个计数器的例...

2019-10-19 09:09:38 2992

原创 金融风控项目

一、问题定义金融的核心是风险控制。自然而然地,AI的主战场也变成了如何使用AI技术精准的做风险控制。在风控领域,有一个很重要的问题是:如何通过用户的信息来判断用户的逾期与否?我们通过收集用户的基本信息、地域信息、社交信息等来判断一个人的逾期概率。我们的问题是:基于用户相关的信息来预测此用户是否违约。数据如下:https://www.kesci.com/home/competit...

2019-10-18 15:57:34 3812 2

原创 git 基本使用

一,Github简介二,创建SSH (每次提交可以不用输用户名密码)HTTP方式需要每次用户名密码认证在Github中 新增SSH打开一个终端并生成一个SSH的Key文件生成好的文件:将公钥添加至Github:配置多用户:三,Git的基本应用1) 使用SSH来获得代码:执行git clone xxx@github...

2019-10-17 22:06:39 200

原创 【工具】几个写文章和paper相关的工具

1. Mathpix 能把图片中的公式转成Latex格式,方便后续进行公式编辑现在各种markdown,word,知乎,CSDN都支持Latex公式了。复制公式强烈推荐!https://mathpix.com/2. Latex强大的包https://www.latex-project.org/get/可以进行各种复杂3. 如果觉得Latex太大可以使用在线版:ov...

2019-10-17 11:13:54 372

原创 Algorithm: Boosting model with XGBoost

Difference between bagging and boosting:We call each sub model in ensemble mode as weak learner. In random forest, it is the decision tree.Weak Learner: it can't be used to predict the result in...

2019-10-16 19:43:00 246

原创 Chatbot 聊天机器人相关资料

chatbot guide:https://zhuanlan.zhihu.com/p/552016251.retrieval based chatbot:https://zhuanlan.zhihu.com/p/547955452.generation based chatbot:https://blog.csdn.net/irving_zhang/article/details/790...

2019-10-15 14:29:27 326

空空如也

空空如也

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

TA关注的人

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