摘要:
vector的resize:既分配了空间,也创建了对象,会调用构造函数 vector的reserve:reserve()表示容器预留空间,但不是真正的创建对象,需要通过insert()或push_back()等操作创建对象 reserve()只修改capacity大小,不修改size大小, resi 阅读全文
摘要:
如何实现浏览器的前进、后退功能?其实,用两个栈就可以非常完美地解决这个问题。 使用两个栈,X 和 Y,我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。当栈 X 中没有数据时 阅读全文
摘要:
###make_shared的使用 shared_ptr<string> p1 = make_shared<string>(10, '9'); shared_ptr<string> p2 = make_shared<string>("hello"); shared_ptr<string> p3 = 阅读全文
摘要:
运行并挂载docker镜像 docker run -it -v E:/workspace/docker:/dl -p 8888:8888 8d78dd1e1b64 /bin/bash 安装jupyter 保存docker容器的修改 查看被修改的容器 :docker ps -l 提交指定容器保存为新的 阅读全文
摘要:
###重要结论 有效地利用二级指针,将其作为管理和操作链表的首要选项 ###问题的引入 在对链表进行删除操作时,函数参数的参数为二级指针,代码如下: struct single_list* del(struct single_list **prev) { struct single_list *tm 阅读全文
摘要:
为什么大多数编程语言中,数组要从 0 开始编号,而不是从 1 开始呢? 从数组存储的内存模型上看: “下标”最确切的定义应该是**“偏移(offset)”** 用a表示数组的首地址,a[0]就是偏移为0的位置,也就是首地址,a[k]就表示偏移k个type size的位置,所以计算a[k]的内存地址只 阅读全文
摘要:
###引入 看个例子: // array表示一个长度为n的数组 // 代码中的array.length就等于n int[] array = new int[n]; int count = 0; void insert(int val) { if (count == array.length) { i 阅读全文
摘要:
###buffer对象 buffer对象:顾名思义,就是一个缓冲区对象,缓存了从套接字接收来的数据以及需要发往套接字的数据。 如果是从套接字接受来的数据,事件处理回调函数在不断地往buffer对象增加数据,同时,应用程序需要不断把buffer对象中的数据处理掉,这样,buffer对象才可以空出新的位 阅读全文
摘要:
###多线程设计的几个考虑 在反应堆reactor框架设计中,main reactor线程是一个acceptor线程,这个线程一旦创建,会以event_loop形式阻塞在event_dispatcher的dispatch方法上,实际上它是在等待监听套接字上的事件发生,即已完成的连接,一旦有连接完成, 阅读全文
摘要:
https://app.yinxiang.com/fx/7e601cad-6501-4fe7-8e4e-f0fbd9d02c4b TCP 高性能网络框架需要满足的需求有以下三点: 1)采用 reactor 模型,可以灵活使用 poll/epoll 作为事件分发实现。 2)必须支持多线程,从而可以支持 阅读全文