- 博客(310)
- 收藏
- 关注
转载 TCP/IP 协议栈
TCP(传输控制协议)传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。一、TCP/IP协议族TCP/IP(TCP/IP Protocol Su...
2018-06-16 20:33:00
245
转载 笔记—《程序员自我修养》
《程序员自我修养》 笔记温故而知新平坦内存模型存在的问题进程之间地址空间不隔离多进程时, 内存碎片多(分页), 内存利用效率低(缓存命中率)程序运行的地址空间不确定分段提高缓存命中率读写权限隔离提高内存利用效率(多个运行的线程可以共享一份代码段)分页提高内存利用率,减少内存碎片和虚拟内存管理机制一起解决了内存不连续的问题(分配的内存一般是虚拟内存,在...
2018-06-11 20:35:00
222
转载 Container With Most Water 双指针法
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find...
2018-06-11 10:06:00
194
转载 多线程服务器 编程模型
多线程服务器 编程模型多线程的价值在于发挥多核处理器的性能,单核使用状态机是最高效的。提高平均响应时间TCP网络编程 本质处理三个半事件连接的建立链接的断开消息到达消息发送完毕,对于低流量的服务不必关心one loop per thread好处:线程数目基本固定,不会频繁创建销毁可以方便地调配负载IO事件发生的线程固定,无需考虑并发。并发设计方...
2018-04-29 16:17:00
122
转载 c++ 高效并发编程
高效并发编程并发编程的基本模型包括,通过消息机制来管理运行顺序的message passing, 通过互斥保护共享的shared memory。线程同步的基本原则最低限度共享变量,考虑使用immutable对象尽量减小锁粒度互斥器和条件变量足以完成绝大多数任务,尽量使用高层的封装避繁就简,读写锁 信号量 可重入锁 ,慎用。关于死锁RAII 控制锁区间注意锁的获取顺...
2018-04-29 15:02:00
169
转载 线程安全的对象生命期管理
线程安全的对象生命期管理解决对象构造的线程安全当我们需要动态分配对象时( 懒加载 ), 如果在多个线程中运行这一部分代码,可能出现多次初始化的问题。单例模式c++ 11 之后static 变量的初始化是线程安全的。可以利用静态变量来实现单例模式,解决重复初始化的问题。std::call_once个人感觉不够优美,要传递一个flag 来标识初始化情况线程访问未...
2018-04-29 14:24:00
116
转载 TCP No-Delay
Nagle 算法由于TCP中包头的大小是固定的,所以在数据(Payload)大小很小的时候IP报文的有效传输率是很低的,Nagle算法就是将多个即将发送的小段的用户数据,缓存并合并成一个大段数据时,一次性一并发送出去。特别的是,只要当发送者还没有收到前一次发送TCP报文段的的ACK(即连接中还存在未回执ACK的TCP报文段)时,发送方就应该一直缓存数据直到数据达到可以发送的大小,然后...
2018-04-26 08:45:00
200
转载 实现TTCP (检测TCP吞吐量)
实现TTCP (检测TCP吞吐量)应用层协议为了解决TCP粘包问题以及客户端阻塞问题设计的应用层协议如下://告知要发送的数据包个数和长度struct SessionMessage{ int32_t number; int32_t length;} __attribute__ ((__packed__));//数据包struct PayloadMessag...
2018-04-25 19:52:00
657
转载 阻塞IO下的echo回显实验
我们只关心代码中的业务逻辑和底层阻塞原因客户端代码发送数据 std::string message(len, 'S'); int nw = stream->sendAll(message.c_str(), message.size()); printf("sent %d bytes\n", nw);接受服务端回显的数据 std::vector<...
2018-04-25 19:39:00
101
转载 C++ 使用成员初始化列表的一个小坑
注意在成员列表中初始化的顺序并不是列表顺序 而是:在类中声明的顺序!EventLoop::EventLoop() :looping(false), quit(false),_tid(curThreadId()), poller(new Poller(this)){//, timerQueue(new TimerQueue(this)) { std::cout<&...
2018-04-24 17:27:00
74
转载 c++ 高性能日志库(muduo_AsyncLogging)
c++ 高性能日志库(muduo_AsyncLogging)实现一个高效的网络日志库要解决那些问题?首先明确一下问题的模型,这是一个典型的多生产者 单消费者问题,对于前端的日志库使用者来说,应该做到非阻塞添加,作为后端的文件写入,应该注意磁盘IO的瓶颈。功能需求日志的级别分级发生时间和具体线程信息线程安全实现思路多个线程共有一个前端,通过后端写入磁盘文件异...
2018-04-19 21:22:00
639
转载 从零开始写STL—哈希表
static const int _stl_num_primes = 28; template<typename T, typename Hash = xhash<T>> class hashtable; ministl::vector<int> prime_list = { 53, 97, 193...
2018-04-18 20:04:00
109
转载 从零开始写STL—模板元编程之tuple
tupleClass template std::tuple is a fixed-size collection of heterogeneous values. It is a generalization of std::pair.可以用来在bind中存储函数指针和参数实现思路不定参数模板 + 模板偏特化tuple作为一个存储不定参数模板的类,分为一下几种偏特化...
2018-04-18 20:03:00
179
转载 从零开始写STL-string类型
class string { public: typedef size_t size_type; typedef char* iterator; typedef char value_type; private: char *start, *end_of_storage, *End; ...
2018-04-18 20:03:00
84
转载 从零开始写STL—模板元编程之any
anyclass any;(since C++17)The class any describes a type-safe container for single values of any type.(1) An object of class any stores an instance of any type that satisfies the constructo...
2018-04-18 20:03:00
231
转载 c++ 实现 key-value缓存数据结构
c++ 实现 key-value缓存数据结构概述最近在阅读Memcached的源代码,今天借鉴部分设计思想简单的实现了一个keyvalue缓存。哈希表部分使用了unordered_map,用于实现LRU算法的双向链表嵌套在缓存类中实现。LRU 算法LRU算法又称为last least used 算法,是用于在缓冲区内存不足的情况下进行内存替换调度的算法,出于局部性原理,我...
2018-04-12 20:18:00
1417
转载 从零开始写STL - 智能指针
从零开始写STL - 智能指针智能指针的分类及其特点:scoped_ptr:初始化获得资源控制权,在作用域结束释放资源shared_ptr: 引用计数来控制共享资源,最后一个资源的引用被释放的时候会析构unique_ptr: 只能有一个持有资源引用的对象weak_ptr:eak_ptr也维护了一个引用计数,跟shared_ptr维护的引用计数或互不干扰,或相互协同。weak...
2018-03-29 17:25:00
150
转载 从零开始写STL—functional
function C++11 将任意类型的可调用(Callable)对象与函数调用的特征封装到一起。这里的类是对函数策略的封装,将函数的性质抽象成组件,便于和algorithm库配合使用基本运算符 和 基本比较符号组件 template<class Arg, class Result> struct unary_function { ...
2018-03-29 16:56:00
146
转载 从零开始写STL—set/map
这一部分只要把搜索树中暴露的接口封装一下,做一些改动。set源码剖析 template<typename T> class set { public: typedef T key_type; typedef BStree_iterator<T> iterator; private: ...
2018-03-28 16:55:00
69
转载 从零开始写STL-二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。平均情况下插入查找删除元素是Onlgn,最差情况下是On的为什么要实现二叉搜索树?由二...
2018-03-28 15:22:00
165
转载 从零开始写STL—栈和队列
从零开始写STL—栈和队列适配器模式意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。何时使用: 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一...
2018-03-28 11:41:00
137
转载 从零开始写STL-内存部分-内存分配器allocator
从零开始写STL-内存部分-内存分配器allocator内存分配器是什么?一般而言,c++的内存分配和释放是这样操作的>>class Foo{ //...};>>Foo* pf = new Foo;//配置内存,然后建构对象>>delete pf; //将对象解构,然后释放内存 其中的 new操作内含两阶段动作:(1)调用::opera...
2018-03-27 11:27:00
172
转载 从零开始写STL-容器-双端队列
从零开始写STL-容器-双端队列什么是双端队列?在介绍vector源码,我们发现在vector前端插入元素往往会引起大量元素的重新分配,双端队列(deque)就是为了解决这一问题,双端队列中在首端和末端插入元素的时间复杂度都为O(1),也许你会说链表不行吗,但是其实链表存在一定的缺陷,比如每个结点都要多花出两份存储指针的空间,下面我们将通过源码来分析deque的实现。基本实现模型...
2018-03-20 19:55:00
198
转载 JVM 总结
面试 java 虚拟机jvm 基础jvmWrite Once Run EveryWhere>jar 包可以在任何兼容jvm上运行>jvm 适配器 屏蔽掉底层差异>内存管理jdk由.java - .classjvm 监控工具jre由.class - 机器码jvm 运行时数据区代码进入jvm后进行分解运行数据(线程共...
2018-03-13 15:18:00
81
转载 从零开始写STL-容器-list
从零开始写STL-容器-listList 是STL 中的链表容器,今天我们将通过阅读和实现list源码来解决一下问题:List内部的内存结构是如何实现的?为什么List的插入复杂度为O(1)?为什么List的size()函数复杂度为O(n)?list 容器的幕后英雄 - list 结点作为一个链表首先要维护数据(模板元素的实例内容),指向前一个节点的指针 和 指向后...
2018-03-12 16:08:00
160
转载 从零开始写STL—容器—vector
从0开始写STL—容器—vectorvector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效?以上内容我们将通过写一个自己的vector来进行学习typedef 简析在容器类的最前面我们会看到许多的typedef ,常见的如下: public: type...
2018-03-12 11:53:00
275
转载 Web 后端编程的几个关键点(总结中...)
基础服务端结构服务器如何部署,负载均衡,代理技术,如何向B端提供服务?分布式架构与前端界面的交互形式数据CURD表之间的关联 较为棘手 如何将一对多 多对多的概念进行 面向对象 描述前后端交互的数据格式数据的检验,映射和绑定URL 到 代码逻辑/资源的映射Web安全SQL 注入,跨站脚本攻击, 跨站请求伪造转载于:https://www.cnbl...
2018-03-08 19:57:00
99
转载 Spring实战读书笔记
Spring实战读书笔记Spring-coreSpring之旅 - DI 和 AOP 概念spring 的Bean容器spring 的 核心模块Spring的核心策略POJO 最小侵入式编程Spring不会强迫你实现接口或者继承类,通过DI来装配POJO类型。采用依赖注入和面向接口实现松耦合依赖反转容器(IOC):将整体设计和局部实现之间的依赖关系反转...
2018-02-06 14:08:00
143
转载 MSDN 同步部分 个人笔记
(在知乎看到轮子哥说,掌握了MSDN上的并发部分 和 线程与进程部分就可以掌握所有语言的多线程编程,我在网上翻了一下并没有中文版,所以决定自己翻译一下...)目录:线程之间协同运行的方式有许多种,下面所述的函数提供了线程之间并发获取资源的方式。同步部分的新特性关于同步使用线程同步参考同步部分的新特性:Windows提供了下面的新特性:Win8...
2017-11-26 16:41:00
136
转载 Visual C++ 网络编程 笔记
第一章 网络分层模型 OSI模型应用层:服务于应用程序的协议,比如用于域名解析的DNS协议,用于下载界面内容的HTTP协议表示层:处理不同硬件和操作系统之间的差异,确保应用层之间顺利通信 and 加密 and 压缩会话层:两个应用程序之间建立逻辑连接,为创建管理和宗旨对话提供必要的方法,一般以API形式出现,SOCKET API传输层:提供数据传输的服务,端对端或者主机对主机,TC...
2017-10-08 22:23:00
170
转载 Test for Job 图上的动态规划(DAG)
Test for JobTime Limit:5000MSMemory Limit:65536KTotal Submissions:11399Accepted:2697DescriptionMr.Dog was fired by his company. In order to support his...
2017-09-30 13:24:00
110
转载 1085 数字游戏 2003年NOIP全国联赛普及组
丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。例如,对于下面这圈数字(n=4,m=2): ...
2017-09-29 09:15:00
78
转载 1058 合唱队形 2004年NOIP全国联赛提高组
题目描述Description N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。你的...
2017-09-28 21:38:00
100
转载 选菜 01背包
1025 选菜时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题解查看运行结果题目描述Description 在小松宿舍楼下的不远处,有PK大学最不错的一个食堂——The Farmer’s Canteen(NM食堂)。...
2017-09-28 21:07:00
99
转载 数字划分
#include <iostream>#include <string>#include <cstdio>#include <vector>#include <algorithm>#include <deque>#include <map>#include <stac...
2017-09-28 20:56:00
82
转载 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
1017 乘积最大2000年NOIP全国联赛普及组NOIP全国联赛提高组#include <iostream>#include <string>#include <cstdio>#include <vector>#include <algorithm>#i...
2017-09-28 20:46:00
174
转载 网易2018校招 合唱 DP
时间限制:2秒空间限制:131072K小Q和牛博士合唱一首歌曲,这首歌曲由n个音调组成,每个音调由一个正整数表示。对于每个音调要么由小Q演唱要么由牛博士演唱,对于一系列音调演唱的难度等于所有相邻音调变化幅度之和, 例如一个音调序列是8, 8, 13, 12, 那么它的难度等于|8 - 8| + |13 - 8| + |12 - 13| = 6(其中||表示绝对值...
2017-09-28 16:47:00
139
转载 POJ 2983 Is the Information Reliable? 差分约束
Time Limit:3000MSMemory Limit:131072KTotal Submissions:14143Accepted:4439DescriptionThe galaxy war between the Empire Draco and the Commonwealth of Zibu ...
2017-09-19 18:52:00
118
转载 POJ 2101 Intervals 差分约束
Time Limit:2000MSMemory Limit:65536KTotal Submissions:27746Accepted:10687DescriptionYou are given n closed, integer intervals [ai, bi] and n integers c1, ....
2017-09-19 16:48:00
124
转载 Organize Your Train part II 字典树(此题专卡STL)
Organize Your Train part IITime Limit:1000MSMemory Limit:65536KTotal Submissions:8787Accepted:2490DescriptionRJ Freight, a Japanese railroad company fo...
2017-09-19 15:47:00
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人