C++11 线程池实现 C++11中已经添加了跨平台的thread相关工具,在一些轻量级使用场景中,使用std::thread无疑会给我们带来很多方便。这里使用它实现了一个简单的线程池:EasyThreadPool.h#ifndef _EASY_THREAD_POOL_H_#define _EASY_THREAD_POOL_H_#include <thread>#include <mu...
nodejs借用管道实现流数据边取边处理 传统的服务器模型中,如果要返回一张本地图片给客户端,需要先读取该图片文件,再发送给客户端。而用nodejs则可以通过管道,将读文件的输入流和发送给客户端的输出流拼接起来,使得服务端无需做过多的处理就能实现数据的边取边处理,提高了服务器的效率。实例如下,一个简单的HTTP服务器,对任何请求都是返回一张图片。var http = require("http");var fs = requ
通过阻塞与非阻塞读取文件操作来认识回调函数 异步编程的主要靠回调实现。回调函数是指在完成任务后就会被调用的函数。目前Node.js的所有API都支持回调函数。 对于读取一个文件,我们可以选择等待文件读取完成在执行操作;也可以先去做别的事情,等文件读取完成时就自动文件内容作为回调函数的参数返回。 1. 以读取文件server.js为例,其阻塞的方法如下://阻塞读文件var fs = require('fs');var content =
Node.js创建第一个应用--HTTP服务器 使用require指令来载入http模块,并将其实例化复制给变量httpvar http = require("http");创建服务器,使用http.createServer()方法创建服务器,并绑定服务监听端口。函数中可以使用request/response参数来接收和响应数据。代码如下:var http = require('http');http.createServer(functi
Ubuntu下配置VScode的C++编程环境 Ubuntu下配置VS code的C++编程环境1、安装VScode直接从官网下载源码包,解压后即可使用2、安装必要的开发环境包括:gcc、g++、gdb、build-essential、Clang3、安装必要插件目前安装的插件如下: 1. C/C++ 2. C/C++ Clang Command Adapter 3. C++ Intellisense 4. ClangComplete 5
LeetCode 85. Maximal Rectangle(最大子矩阵) 链接:LeetCode 85. Maximal Rectangle这一题要用到直方图最大矩阵作为一个中间结果。class Solution {public: int maximalRectangle(vector>& matrix) { vector tmp; int len=matrix.size(); if(len==0) re
LeetCode 84. Largest Rectangle in Histogram(直方图最大矩形) 链接:LeetCode 84. Largest Rectangle in Histogram(直方图最大矩形)class Solution {public: int largestRectangleArea(vector& heights) { int len=heights.size(); if(len==0) return 0; s
实现字符串拷贝strcpy和memcpy,以及字符串比较函数strcmp 这些函数是很容易出现在面试笔试中的,需要牢记,其实也是很容易实现的,只不过要考虑周全,注意异常情况判断。/**实现字符串拷贝*为什么要返回char*?(为了支持链式表达式,如strlen(strcpy(p,q)求复制后的长度))*/char* strcpy(char* strDest,const char* strSrc){ if(strDest==NULL||strSrc==
Linux下给进程重命名 系统提供函数prctl():#include int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);使用例子:prctl(PR_SET_NAME, “process_name”, NULL, NULL, NULL);不过这个函数更
二叉树遍历的递归和非递归实现 LeetCode上有三题是直接分别对应二叉树的非递归遍历实现:144/94/145前序遍历:非递归和递归的方式差不多,主要是要注意左右子节点的入栈顺序和递归时恰好相反/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * Tree
LeetCode268. Missing Number 题目链接:https://leetcode.com/problems/missing-number/题目大意:一个数组有n个数,每个数取自0~n,各不相同,找出没有出现的那个数。这题简单,就不细说了,主要是限制条件是使用常量的额外空间,所以设一个标识数组的做法是行不通的。class Solution {public: int missingNumber(vector&
LeetCode96.Unique Binary Search Trees 题目链接:https://leetcode.com/problems/unique-binary-search-trees/大意:给出一个正整数n,求n个不同数组成的排序二叉树的个数思路:二叉排序树的特点是每一个节点,它的左节点比它小,右节点比它大,运用到这一题,可以用动态规划的思想,每一个数都可以作为根节点,如n个数,1~n,当第k个数即k作为根节点时,1-(k-1)在它的左子树,元素数
LeetCode108. Convert Sorted Array to Binary Search Tree 题目链接:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/大意:给出一个拍过徐的vector,将其转化为一颗排序二叉树,要求高度最低。分析:从排序二叉树的特点分析,就是做二分法。/** * Definition for a binary tree node. * struct Tree
LeetCode22. Generate Parentheses 题目链接:https://leetcode.com/problems/generate-parentheses/大意:给一个整数n,列出n对()所能组成的所有合法排列例:n=3时,有四种排列["((()))","(()())","(())()","()(())","()()()"]分析:n对()就表示一共可以放n个左括号和n个右括号,记录下左括号和右括号的使用情况:只要左括号没有放完,
More Effective C++读书小记 1、仔细区别pointer和references 不论pointer或是references都使你间接参考其它对象。 没有所谓的null reference。一个reference必须总代表某个对象。 如果你有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表)任何对象,那么你应该使用pointer,因为你可以将指针设为null。换个角度
C++实现一个不能被继承的类 要设计一个不能被继承的类,考虑C++11的新特性的话,有三种方法:(1)就是将该类的构造函数和析构函数设为private(或者仅仅将析构函数设为private),这样派生类无法调用基类的构造函数和析构函数,从而不能继承。要创建对象,可以在该类中设一个static成员函数,提供返回一个该类对象指针,这种方法比较普遍就不细说。需要注意的是这种方法导致对象只能在heap中产生。那如何能构造一个正常对
Effective C++读书小记 1、视C++为一个语言联邦 对于内置类型而言,pass-by-value通常比pass-by-reference高效。()内置类型在按值传参时,只是将变量的值传递到栈上。 然后被调用函数将值取出后,使用即可。在按引用传参时,需要将被引用的变量的地址压栈, 然后被调用函数首先取出地址,然后再次根据地址寻址获取值。) C++可分为四个部分:(1)C;(2)Objected-Or
LeetCode357. Count Numbers with Unique Digits 比较简单的做法是根据排列组合的知识算出n位数各位不相同的数字共有9*9*.....(9-n+2)个(n>=2),当n为1时是10个,然后累加就行。class Solution {public: int countNumbersWithUniqueDigits(int n) { if(n==0) return 1; else if(n==1) r
LeetCode347. Top K Frequent Elements 先利用map统计各数的个数,再用vector存储统计结果,自定义vector排序class Solution {public: vector topKFrequent(vector& nums, int k) { vector m; if(k>=nums.size()) return nums; map cnt;
C++常考面试题 1、static关键字的作用(改变生命周期或者改变作用域)(1)static变量只会初始化一次,存储在静态数据区,具有记忆功能,默认初始化为0;(2)类的静态成员变量属于本类中的所有对象共享,不属于特定的类对象,由该类型的所有对象共享访问,只能在类外初始化;(3)类的静态成员函数也是属于整个类,而非类的对象,不接收this指针,因而只能访问类的静态成员变量;(4)模块内的静态全局变