自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UDP 小结

UDP 小结参考《图解TCP_IP》UDP 协议端格式源端口号(Source Port)表示发送端端口号,字段长 16 位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段设置为 0 。可用于不需要返回的通信中。目标端口号(Destination Port)表示接收端端口号,字段长度 16 位。UDP 长度(Length)该字段保存了 UDP 首...

2019-06-30 18:51:02 282

原创 海量数据面试题

海量数据面试题哈希切割给一个超过100G 大小的 log fifile, log中存着 IP 地址, 设计算法找到出现次数最多的 IP 地址? 与上题条件相同, 如何找到 top K 的 IP ?如何直接用 Linux 系统命令实现?思路:先把这这个 log fifie 分成拆分成很多个小文件。小文件的大小并不是相等的,而是在拆分过程中,根据某个哈希函数把 ip 进行哈希的方式存储在一个...

2019-06-27 20:03:08 197

原创 位图及布隆过滤器的模拟实现

位图及布隆过滤器的模拟实现位图位图其实就是一个简化版的哈希表,在很多时候,我们并不关注一个数据出现了多少次,而只是关注这个数据存在与否。所以哈希表太浪费空间了,我们可以用一个比特位来表示一个数据存在与否。那么在 32 位平台下,一个整数是 4 个字节,共 32 个比特位,那么它就可以表示 32 个数据的状态。比如我们要处理 100 个数据并且这 100 个数据都是小于等于 100 的,那么...

2019-06-26 16:42:00 532

原创 jsoncpp 操作指南

JSON 小练在日常的开发环境中,尤其是进行服务器端和客户端开发中,我们一定会对数据进行序列化和反序列化,在之前,我总是用空格作为两个数据之间的分隔,直到我遇到 JSON, 我爱了。那么我就用一个简单的例子来总结一下目前我用到的 JSON 操作。网络计算器我用的是 jsoncpp

2019-06-23 14:32:36 1347 1

原创 HTTP 简单总结

HTTP 简单总结HTTP 是我们每个人日常生活中几乎不可能不用的一个协议。我们浏览网页就是在使用 HTTP 协议,那么我就来简单的总结一下 HTTP 协议都有什么组成。tips: 只是一个简单的总结,没有涉及到深层次的东西。HTTP 协议格式这里我先用一个工具 fiddler 抓包看看。抓个百度。请求部分响应部分请求格式首行:使用空格分隔方法(GET/POST/PUT/D...

2019-06-22 19:28:16 194

原创 Socket 编程

Socket 编程socket 常见 APIsocket创建 socket 文件描述符。适用于 TCP/UDP 协议。这个函数是服务器和客户端都需要用。参数:domain: 这是需要填一个宏,表示要用什么协议。例如这里填 AF_INET表示创建的socket使用 ipv4协议。type: 这里也是填一个宏,表示需要用什么协议。例如填 SOCK_DGRAM表示使用UDP协...

2019-06-15 12:20:45 192

原创 封装UDP Socket API并且构建一个简单的回显服务器

封装UDP Socket API并且构建一个简单的回显服务器因为 Socket API 用起来非常的不便利,所以我将把 Socket API 封装起来,让我以后写程序的时候不再关注那些不重要的细节,而是把我的关注点放在接收到请求之后,怎么处理这个请求上。udp_socket_api.hpp#pragma once#include <iostream>#include &l...

2019-06-12 15:57:21 432

原创 七大经典排序

七大经典排序插入排序插入排序开始先把第一个数字作为一个有序子数组,然后从第二个数字开始。既然前面是一个有序的数组,那么当前这个数组只要逐个跟前面的有序子数组比较就行。如果当前数字比前面的数字小,就把前面的数字往后挪一个位置。直到当前的数字比比较的数字( 下标为:j )大为止,把当前数字填入到 j + 1 的位置。即可表示当前数字插入成功。// 插入排序//// 时间复杂度// ...

2019-06-12 15:23:32 228

原创 简单的线程池

简单的线程池什么是线程池?线程池就是线程的一种使用模式。虽然线程是轻量级的进程,但是线程的创建和销毁还是会引发效率问题。并且,如果创建的线程过多,反而会增加很多的调度开销,影响系统效率。线程池就是可以提前创建好一些线程,在我们需要使用线程的时候,对已经创建好的线程添加任务就好。线程池的使用场景:需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服务器完成网页请求这样的任务,使...

2019-06-07 16:08:41 157

原创 生产者消费者模型概要和基本练习

生产者消费者模型什么是生产者消费者模型?完成某些操作的时候可能需要一些数据,这样的数据可能由专门的 线程/进程产生, 再由专门的线程/进程使用。需要有一个交易场所。(存储数据的地方,可能是一个队列、栈或者其他数据结构)生产者:负责产生数据,然后把数据放到交易场所中。消费者:负责消费数据,从交易场所中获取走。生产者消费者模型的要点。一个交易场所(阻塞队列)。两个角色(生产...

2019-06-06 18:09:08 803

原创 锁(哲学家就餐问题)

2019-06-05 17:37:35 600

原创 线程的同步与互斥

线程的同步与互斥之所以会引出这个概念全都是因为 “线程之间是抢占式调度的”。关于线程互斥的一下关键词:临界资源:多个线程访问的那个公共资源叫做临界资源。临界区:访问临界资源的代码叫做临界区。互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性:不会被任何调度机制打断的操作,该操作只有两种状态,要么完成,要么未完成。线程不安全:多线...

2019-06-05 17:16:20 466

原创 虚函数的默认参数的值是依赖对象静态类型决定的

虚函数的默认参数的值是依赖对象静态类型决定的我们来先从一道题来引出这个问题:这道题的要求是输出结果是什么?如果你的选项不是B,那么你需要跟着我一起来学习一下,虚函数的默认参数到底需要取哪个?标准库规定就是说,虚函数的默认参数取的是静态类型的。那么什么是静态类型呢?举个栗子

2019-06-04 19:30:56 193

原创 那么AVL树呢?

那么AVL树呢?

2019-06-03 16:43:18 382

原创 使用gdb调试多线程程序

使用gdb调试多线程程序在我们日常打代码的日子里,肯定会涉及到多线程的程序,那么在Linux下编写多线程的程序应该如何调试呢。void *ThreadEntry(void *arg){ (void)arg; while (true) { std::cout << "Thread 1 runnning ... " << std:...

2019-06-01 17:31:35 536

原创 Linux线程控制​

Linux线程控制​线程控制的相关函数不是系统调用是库函数。线程控制的函数库是POSIX线程库。POSIX是一个标准,规定了操作系统需要写哪些接口供程序员来使用。与线程有关的函数大多数都是以pthread_开头的。需要使用线程函数库的时候需要引入头文件 <pthread>,并且因为该库是一个动态库,在写编译命令的时候需要在后面加上 -lpthread链接这个库。创建线程...

2019-06-01 17:12:40 172

空空如也

空空如也

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

TA关注的人

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