自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 多线程编程

C++多线程学习博客推荐1 C++11多线程编程----初识2 c++11多线程编程(二)——理解线程类的构造函数3 c++11多线程编程(三)——竞争条件与互斥锁4 c++11多线程编程(四)——死锁(Dead Lock)5 c++11多线程编程(五)——unique_lock6 c++11多线程编程(六)——条件变量(Conditio...

2019-08-22 15:25:51 586

原创 epoll详解

推荐2篇有深度的博文博文1(关于epoll内部结构,实现原理,ET/LT)博文2(关于epoll工作在ET模式下如何读完/写完)

2019-03-27 18:41:36 110

原创 直通BAT-大数据

哈希函数Map-Reduce案例1一用map-reduce方法统计一篇文章中每个单词出现的个数海量数据的常见处理技巧案例二请对10亿个IPV4的ip地址进行排序,每个ip只会出现一次考虑到IPV4的ip地址最多约等于42亿,而题目中也说是10亿。我们知道无符号整数的最大值是42亿+(接近43亿)因此,我们可以考虑把ip地址(32位)转...

2019-03-03 20:56:40 262

原创 直通BAT-位运算

算术运算常见操作符:+ - * / %位运算操作符:& | ^ ~ << >>位运算的面试题目大部分靠平时积累。案例一 布隆过滤器如果使用哈希表,把黑名单存入哈希表或者数据库,由于单个URL为64字节长度,100亿个黑名单长度为64B*100亿=6400亿B,约等于640G空间。思想:碰到网页黑名单问题/垃圾邮件过滤问题/爬虫的网址判断重复...

2019-03-03 17:24:33 940

原创 暑期实习笔试之旅

2.27 CVTE今晚搞了CVTE的实习生笔试,C++方向,20道选择2道编程,搞完心里五味杂陈。先从编程题目开始回忆:(一)题目大概是这样的:给出一个数字字符串,找出和为整数n的最长子串,如果有多种情况,返回最靠前的子串。比如输入12345 7会返回34。分析:一开始想的是动态规划,设置一个数组dp[i]表示以数字s[i]结尾的最长子串。结果搞了半天,连最普通的情况都算不出来...

2019-02-27 22:56:54 952

原创 动态规划专题

一 动态规划的递归写法和递推写法1 动态规划动态规划DP是用来解决一类最优化问题的算法思想。简单来说,动态规划将一个复杂的问题分解为若干个子问题,通过综合子问题的最优解来得到原问题的最优解。动态规划会将每个求解过程的子问题的解记录下来,这样当下次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。一般可以用递归或递推的方式来解决动态规划问题,其中递归写法又叫做记忆化搜...

2019-02-21 17:26:51 254

原创 直通BAT-二分查找

1 简介与实例在有序数组中查找某一数据所在的下标,若存在该数据,返回下标,否则返回-1。#include <cstdio>int a[10]={1,3,5,7,9,11,13,15,17,19};int value; //待查找元素的值int index; //查找到的下标,如果没有查到,返回-1int search_index(int a[],int n)...

2019-02-20 16:07:43 279

原创 直通BAT-排列组合概率问题

组合题目分类1 以高中数学为基础的古典概率计算方法。2 斐波那契数和卡特兰数。3 以选择题居多。案例一在6*9的方格中,以左上角为起点,右下角为终点,每次只可以向下走或向右走,请问一共有多少种不同的走法。从左上角走到右下角,必然会向下走5步,向右走8步,则可以有或,即1287种。案例二ABCDEFG七人站队,要求A必须在B的左边,但不要求一定相邻,请问共有多少种排法...

2019-02-18 22:13:32 893

原创 排序总结

一 排序的基本概念与分类排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等十大排序算法。用一张图概括:对前7中排序算法而言,只看平均时间复杂度,归并/快速/堆排序要胜过希...

2019-02-17 15:16:37 261

原创 排列组合/八皇后问题

全排列的递归解法法一#include <iostream>#include <cstdio>using namespace std;void swap_alpha(char *a,char *b){ char temp=*a; *a=*b; *b=temp; return;}void main_function(c...

2019-02-04 15:15:44 279

原创 C++学习2022

2 future:5 forward完美转发。6 move8 左值引用和右值引用表达式和函数对象包装器.

2022-09-18 15:49:11 435 1

原创 git常见操作

一般错误:没有父提交的情况下不能 'fixup' 您可以用 'git rebase --edit-todo' 修正,然后执行 'git rebase --continue'。移除任何与 .gitignore 或其他忽略文件中的模式匹配的文件。把指定的分支合并到当前分支。Git clean -d -n -x (-x选项)贮藏工作(当前分支有新修改但是又不想提交时想切换分支)Git clean -d -n. (-n选项)Git checkout -b 分支名。选择可视化解决冲突工具。

2022-09-18 15:32:51 280

原创 BRPC学习

SelectServer的核心处理过程,首先如果recover已开启且判断该请求被拒绝就直接返回拒绝,然后确定或获取offset和步长,然后用offset+步长 / n的方法获取节点下标,并用下标更新offset,然后判断节点是否是最后一个节点/节点不是被过滤掉&&节点可以简单访问,如果获取到了节点,就更新offset和步长(存储在tls中),否则(所有节点不可用)&打开recover模式,就StartRecover。相同的地址配合不同的tag被认为是不同的实例,brpc会建立不同的连接。

2022-09-18 14:23:17 821

原创 CMAKE学习指南

一 简介CMake是一个跨平台的、开源的构建工具。cmake是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量.它允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。在 linux 平台下使用 CMake 生成 Ma...

2021-11-17 21:47:27 759

原创 排序特征在线服务/模型在线推理

排序特征在线服务从持续产生的用户行为日志,可以处理得到用户画像、预测模型、实体属性等有价值的数据,这些数据都可以看作某个领域的特征(Features)。数据处理业界已有成熟的框架,比如 MapReduce、Spark、Flink 等,可以满足不同场景的特征数据生成。但如何把特征应用于在线服务,则存在以下挑战:特征存储的挑战。特征数据具有短时高吞吐写、在线读性能高、大批量事务写、版本回退等特点,已有的关系型数据、KV存储系统都无法很好的满足,在线服务使用特征数据的存储成本高昂; 特征检索的挑战。

2021-11-05 15:39:18 231

原创 守护进程/僵尸进程/孤儿进程

一 守护进程守护进程就是在后台运行,不与任何终端关联的进程,,一个守护进程的父进程是init进程,它是一个孤儿进程,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都被丢到了/dev/null中。通常情况下守护进程在系统启动时就在运行,它们以root用户或者其他特殊用户(apache和postfix)运行,并能处理一些系统级的任务.习惯上守护进程的名字通常以d结尾(sshd),但这些不是必须的.进程组:它是由一个或多个进程组成,进程组号(GID)就是

2021-10-10 11:30:52 707

原创 剑指offer----数字在排序数组中出现的次数

这个题目要求比遍历更低的时间复杂度,那么需要2个二分查找,第一个二分查找为查找数组中第一个为K的位置,第二个二分查找为查找数组中最后一个为K的位置。2个位置之差即为次数比较巧妙的解法:class Solution {public: int bisearch(vector<int>& data, float k){ //二分查找 int left = 0; int right = data.size() - 1; w...

2021-10-03 22:36:38 59

原创 剑指offer---复杂链表的复制

复杂链表的复制_牛客题霸_牛客网解法一:哈希class Solution {public: RandomListNode* Clone(RandomListNode* pHead) { if(!pHead) return NULL; std::unordered_map<RandomListNode*,RandomListNode*> m; for(auto p = pHead;p!=NULL;p=p.

2021-10-03 10:36:01 57

原创 剑指offer---打印1到最大的N位数

法一:大数运算,字符串注意点:1最后的打印要判断非数值位,非数值位不输出2在加一的过程中要避免溢出,譬如只求三位数,但是999+1为1000,这个时候就溢出了,我们要结束循环#include <iostream>#include <cstring>using namespace std;bool IncreaseNumber(char* number,int len){ int nSum = number[len-1] - '0'; ...

2021-10-02 10:35:40 76

转载 前缀树(Trie树)

Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串...

2021-09-29 22:57:19 121

原创 海量数据案例

海量数据处理面试题集锦_结构之法 算法之道-CSDN博客_海量数据面试题

2021-09-29 22:13:28 75

原创 数据库基础(3)

一 MYSQL表与字段设计1 数据库基本设计规范(1)尽量控制单表数据量的大小,建议控制在 500 万以。500 万并不是 MySQL 数据库的限制,过大会造成修改表结构、备份、恢复都会有很大的问题,可以用历史数据归档(应用于日志数据),分库分表(应用于业务数据)等手段来控制数据量大小(2)谨慎使用 MySQL 分区表。分区表在物理上表现为多个文件,在逻辑上表现为一个表 谨慎选择分区键,跨分区查询效率可能更低 建议采用物理分表的方式管理大数据。(3)禁止在数据库中存储图片,文件等大的二进

2021-09-27 01:18:14 274

原创 加密与安全---廖雪峰课程总结

对潜在的安全威胁,要做到三防。1防窃听2防篡改3防伪造编码算法ASCII码ASCII编码最多只能有127个字符UTF-8/Unicode编码想对更多的文字进行编码,就需要用Unicode。而中文的中使用Unicode编码就是0x4e2d,使用UTF-8则需要3个字节编码最简单的编码是直接给每个字符指定一个若干字节表示的整数,复杂一点的编码就需要根据一个已有的编码推算出来。比如UTF-8编码,它是一种不定长编码,但可以从给定字符的Unicode编码...

2021-09-24 16:56:59 203

原创 Unix网络编程---套接字联网API chapter 14

高级IO函数1套接字超时三种方案(1)使用SIGALRM为connect设置超时(2)使用SELECT为recvfrom设置超时(3)使用SO_RCVTIMEO套接字选项为recvfrom设置超时2recv和send函数

2021-09-13 02:07:32 86

原创 《linux多线程服务端编程》---- Part 1 C++多线程系统编程(2)

Chapter 4C++多线程系统编程精要Chapter 5高效的多线程日志

2021-09-12 18:48:49 104

原创 《linux多线程服务端编程》---- Part 1 C++多线程系统编程(1)

Chapter 1线程安全的对象生命期管理综述:线程安全:对象的创建:一个函数如果要锁住相同类型的多个对象,为保证始终按照相同的顺序加锁,可以比较mutex对象的地址,始终先加锁地址较小的mutex。shared_ptr/weak_ptrshared_ptr技术与陷阱意外延长对象的生命周期小结(1)原始指针暴露给多个线程往往会造成race condition(2)统一用shared_ptr来管理对象的生命期。(3)sha..

2021-09-12 17:05:39 202

原创 《linux多线程服务端编程》---- C++基础前奏

1 mutable在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。该关键字修饰类中数据成员时,会释放掉non-static成员变量的bitwise constnes约束,即使在const成员函数依然可以修改该数据成员变量。Immutableobject(不可变对象) :当对象被创建后,你不能修改对象的状态以及字段。2 C++二阶构造【C++深度剖析教程4】C++的二阶构造模式_厚积薄发-CS..

2021-09-12 16:28:09 114

原创 可重入&不可重入&线程安全&非线程安全

一 可重入函数可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode

2021-09-10 17:29:18 307

原创 Unix网络编程---套接字联网API chapter 8

1 UDP套接字编程UDP是无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。UDP客户/服务器函数调用:图片2 recvfrom和sendto函数图片3 UDP服务器程序示例图片图片4 UDP客户程序示例图片图片5 UDP程序例子小结图片图片6 UDP的connect函数没有三路握手过程,内核只是检查是否存在立即可知的错误,记录对端的IP地址和端口号,然后立即返回到调用进程。图片图片UDP客户进程或服务器进程只在使

2021-09-08 21:40:37 75

原创 Unix网络编程---套接字联网API chapter 7

1获取和设置影响套接字的选项1)getsockopt函数和setsockopt函数2)fcntl函数把套接字设置为非阻塞式IO或信号驱动式IO以及设置套接字属主的POSIX方法3)ioctl函数2getsockopt和setsockopt

2021-09-07 15:59:17 163 2

原创 数据库基础(2)

一数据库范式第一范式(1NF)数据库中的每一列(每个字段)都是不可拆分的最小单元,也就是确保每一列的原子性。第一范式的目标是确保每列的原子性。第二范式(2NF)满足1NF后,要求表中的所有列,都必须依赖于主键,而不可以有任意一列与主键没有关系,即一个表只描述一件事情。第三范式(3NF)满足第二范式(2NF)之后,要求表中的每一列只与主键直接相关而不是间接相关(表中的每一列只可以依赖于主键)二 redis数据库1 Mysql和redis的区别https://www.c.

2021-09-06 22:49:14 267 3

原创 数据库基础(1)

一数据库索引索引是存储引擎用于快速找到记录的一种数据结构。索引分类(按照创建方式):mysql的索引分为单列索引(主键索引,唯一索引,普通索引)和组合索引.单列索引:一个索引只包含一个列,一个表可以有多个单列索引。组合索引:一个组合索引包含两个或两个以上的列。单列索引普通索引其sql格式是 CREATE INDEX IndexName ON `TableName`(`字段名`(length)) 或者 ALTER TABLE TableName ADD INDEX Index.

2021-09-06 22:35:41 328 1

原创 C++基础知识(2)

一 C++内存分区二指针&引用指针和引用的区别:(1)指针和引用都是一种内存地址的概念,但是指针是一个实体,引用是一个别名。(2)指针指向一块内存,内容是所指内存的地址,指针的内容是可以改变的,有const与非const之分,甚至可以为空。sizeof得到的是指针类型的大小。(3)引用只是一个内存的别名,引用必须且只可以在定义时被绑定到一块内存上,后续不可以更改,也不为空,没有const与非const之分,sizeof得到的是它所代表对象的大小。(4)在参数传递时,指针.

2021-09-06 21:55:55 561

原创 C++基础知识(1)

C++面向对象三大特性封装,继承,多态封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可以信的类或者对象操作,对不可信的进行信息隐藏。一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。实例:将函数定义和函数声明放在不同的文件中。继承指可以让某个类型的对象获得另一个类型的对象的属性的方法。它

2021-09-06 21:01:17 330

原创 Unix网络编程----套接字联网API chapter 5

chapter 51 TCP客户/服务器程序示例服务器程序main函数:服务器str_echo函数客户端main函数客户端str_cli函数2正常启动3正常终止4信号处理

2021-09-06 00:08:13 85

原创 操作系统-内存管理

内存管理:操作系统对内存的划分和动态分配。内存管理的功能:逻辑地址和物理地址内存分配管理方式分为连续分配管理方式和非连续分配管理方式。1 连续分配管理方式为一个用户程序分配一个连续的内存空间。主要包括单一连续分配/固定分区分配/动态分区分配。会产生许多内存碎片。动态分区分配算法(主要的数据结构是空闲分区表和空闲分区链)1)基于顺序搜索的动态分区分配(适合不太大的系统)(1)首次适应要求空闲分区链表以地址递增的顺序链接。每次分配内存时都从链首开始顺序查找

2021-09-05 21:50:03 551

原创 操作系统--死锁

不可抢占性资源:一旦系统把资源分配给进程后,就不可以把它强行收回,只可以等待进程使用完毕后自行释放。如磁带机,打印机等。可抢占性资源:某进程在获得该资源之后,该资源又可以被其他进程或系统抢占。CPU和主存都是可抢占性资源,这类资源不会发生死锁。可重用性资源可重用性资源是一种可供用户重复使用多次的资源。计算机大多数资源都是可重用性资源可消耗性资源又称为临时性资源,是在进程运行期间,由进程动态创建和消耗的。通常它是由生产者进程创建,由消费者进程消耗。典型的可消耗性资源即用于进程间通信

2021-09-05 21:22:54 736

原创 操作系统相关知识

进程间通信的目的进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( IPC)进程间通信的目的:(1)数据传输:一个进程需要将它的数据发送给另一个进程。(2)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程);(3)资源共享:多个进

2021-09-05 21:14:15 121

原创 IO5种常见模型

阻塞和非阻塞是指进程访问的数据如果尚未就绪,进程是否需要等待,简单说就是相当于函数内部的实现区别,也就是未就绪时时直接返回还是等待就绪。同步和异步指消息通信机制,同步一般指主动请求并等待 IO 操作完毕的方式,当数据就绪后在读写时必需阻塞,异步则指主动请求数据后便可以继续处理其他任务,随后等待 IO 操作完毕的通知,这样时进程在数据读写时也不阻塞。同步I/O操作导致请求进程阻塞,直至IO操作完成。异步IO操作不导致请求进程阻塞。I/O复用内核一旦发现进程指定的一个或多个I

2021-09-05 21:07:06 328

原创 Linux IO多路复用

IO复用IO 复用也称多路 IO 就绪通知,这是一种进程预先告知内核的能力,让内核发现进程指定的一个或多个 IO 条件就绪了,就通知进程。IO 复用的实现方式目前主要有 select,poll 和 epoll。Select该函数允许进程指定内核等待多个事件中的任何一个发生,并只有在一个或多个事件发生或经历一段指定的时间后才唤醒它。传给select的参数告诉内核(1)进程关心的描述符(2)对于每个描述符进程关心的条件条件(是否想从一个给定的描述符读,是否想写一个给定的描述符,是

2021-09-05 21:02:47 197

空空如也

空空如也

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

TA关注的人

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