自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 libuv源码分析(6)uv_queue_work

????问题来由  在使用libuv的过程中,我们难免遇见的一个问题是,有一些库没有异步、只能同步运行,这种情况该怎么办呢?比如mysql-connector-cpp。  首先要说的是,直接在回调函数中执行mysql-connector-cpp这种会阻塞的操作是不符合Libuv的reactor模式的。void handle_json_lab(std::shared_ptr<smpHttp::...

2019-11-26 20:58:20 2830

原创 libuv源码分析(5)uv_fs_*

uv_fs_*  uv_fs_*这一系列的函数基本是一致的,它们的逻辑大概是如下://x代表一种操作open、write等int uv_fs_x(...uv_fs_t* req...) { INIT(x); //uv_fs_t和其基类uv_req_t的基本初始化 ... //这里是每个操作各自不同对于req的初始化 POST; //提交这个任务}INIT  INIT这个宏...

2019-11-26 03:41:54 433

原创 libuv源码分析(4)async

uv_async_init  libuv中async的开端在uv_loop_init函数中: //前面省略 err = uv_async_init(loop, &loop->wq_async, uv__work_done); if (err) goto fail_async_init; uv__handle_unref(&loop->wq_a...

2019-11-26 03:26:34 527

原创 libuv源码分析(3)init_threads

由来  在我们第一次提交io操作时,会有uv_once被调用,来检测是否初始化过线程池,如果没有则立刻初始化线程池。所以说线程池并非一开始在uv_run的时候或者在loop中初始化的,而是在io操作开始前。我以uv_open为例子画一下UML图如下:在uv_open中先初始化req,然后准备提交work,提交前会调用uv_once检测是否初始化线程池,没有则初始化。init_once...

2019-11-18 03:05:27 403

原创 libuv源码分析(2)uv__loop_alive

前言  上一篇说了一下整体的事件循环,对于UV_RUN_DEFAULT模式来调用uv_run来说,uv__loop_alive就决定了是否退出,这一篇看一下uv__loop_alive的源码。详情static int uv__loop_alive(const uv_loop_t* loop) { return uv__has_active_handles(loop) || ...

2019-11-16 18:31:44 720

原创 libuv源码分析(1)事件循环分析

前言  libuv总是报出一些让人难以理解的错误????,作为一个C的项目,不具有Java、JavaScript、php那样的人气,很难百度到一些问题的答案,甚至google也不行。为了用好libuv,也为了学习吧。我开始看libuv的源码,不知道自己能走多远。。。事件循环这是官方事件循环的示意图。链接->官方图片位置int uv_run(uv_loop_t* loop, uv_r...

2019-11-16 17:52:22 713

原创 如何用git回退到以前的版本?

https://blog.csdn.net/a_runner/article/details/80190499

2019-11-13 21:29:40 229

原创 __attribute__((unused)) 的含义

作者:louyang链接:https://www.jianshu.com/p/21aef14340a8在C程序中,如果定义了一个静态函数,而没有去使用,编译时会有一个告警:#include <stdio.h>int main(void){ printf("main\n");}static void a(void){ printf("a\n");}...

2019-11-10 15:17:50 8547

原创 打家劫舍

class Solution {public: int rob(vector<int>& nums) { if(!nums.size()) return 0; vector<int> v(nums.size()); for(int i = 0; i < v.size(); ++i...

2019-10-23 17:29:48 107

原创 最大子序和

????Leetcode链接关键点要想到将序列分为以不同角标结束的最优解集合。class Solution {public: int maxSubArray(vector<int>& nums) { vector<int> res(nums.size(), INT_MIN); res[0] = nums[0]; ...

2019-10-22 19:09:46 69

原创 爬楼梯

典型的动态规划题目:具有:最优子结构和无后效性。class Solution {public: int climbStairs(int n) { if(n == 1 || n == 2) return n; vector<int> v(n + 1, 0); v[1] = 1; v[2] = 2; ...

2019-10-21 10:58:22 136

原创 如何更新本地仓库到远程仓库的版本?

git reset --hard origin/maste假设“origin / master”是你想要重置的远程分支。这–hard会将您的本地HEAD分支更新为与原始/主版本相同的版本,并将此更改同步到索引和工作区中。...

2019-10-21 10:53:20 523

原创 如何杀掉Linux中的僵尸进程?

https://www.jb51.net/LINUXjishu/457748.ht

2019-10-20 16:39:03 212

原创 如何解决basic_string::_M_create错误?

????原因  原因在于使用string(iter1, iter2)这个构造函数时,iter1>iter2。#include <string>#include <iostream>#include <algorithm>using namespace std;int main() { try{ string s("abc"); ...

2019-10-20 16:01:51 5822 1

原创 如何开启ubuntus的core_dump?

#vi /etc/profile 然后,在profile中添加:ulimit -c 1073741824(但是,若将产生的转储文件大小大于该数字时,将不会产生转储文件)或者ulimit -c unlimited这样重启机器后生效了。 或者, 使用source命令使之马上生效。#source /etc/profile...

2019-10-20 15:06:00 153

原创 完全平方数

????Leetcode题目链接第一种方法:BFS  对于这个题目我的第一个想法就是BFS,将数值像洋葱一样一层一层的向外延展,每一层count+1,当出现队列中有等于n的值时,返回count即可。但是直接这样做要超出时间要求,于是加了一个unordered_set来记录已经放入过队列的值,避免重复,最后勉强过关。class Solution {public: void a(vect...

2019-10-17 13:41:05 234

原创 如何退出nohup运行的程序?

ps -aux | grep 程序名`| grep -v grepps -aux可以显示所有的进程。grep 程序名查找你要找的程序。grep -v grep过滤掉grep这个进程。

2019-10-15 17:24:13 3332

原创 如何解决Mysql中自增的ID不连续的问题?

????sql语句----drop、truncate和delete 精辟解析–终于知道ID为啥有时候不连续了

2019-10-15 16:59:43 1489

原创 在后台解决前端小伙伴请求json时的CORS跨域问题?

前端小伙伴在请求我后台的json时出现了跨域的报错。最后通过后端添加响应头解决了这个问题,总结一下。????解决办法res->addHeader("Access-Control-Allow-Origin", "*");res->addHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, P...

2019-10-15 16:52:04 560

原创 如何让云服务上的程序在用户退出后继续运行?

????今天的主角:nohup(no hang up)base:简单的后台运行:nohup command &就可以了。添加日志: nohup command > file 2>&1 &首先我们要知道0、1、2是三个固定的fileno。0 – stdin (standard input)1 – stdout (standard output)...

2019-10-15 00:24:27 150

原创 如何解决在Linux下执行程序时出现Text file busy的问题?

今天遇见了这个问题:原因是文件被程序占用了。可以在root权限下使用命令:fuser 文件名找到占用的进程,然后kill杀掉进程。然后就可以正确运行了????...

2019-10-15 00:11:57 1848

原创 如何将Linux本地的文件复制到Linux云服务器上?

  最近买了一个阿里云的服务器,用来部署我的web服务器。之前我用的是腾讯的windows系统的云服务器,直接将文件从桌面拉进去就可以了,再者当时用的node.js,一个npm就是所有的依赖了。这次使用的是c++做后台,用的平台是libuv,通过命令行来复制文件就是必要的了。scp ./smpHttp root@47.103.210.8:/root/smpHttpW/smpHttp ...

2019-10-14 23:55:23 1123

原创 如何将c++中utf-16编码的字符串(wstring)转为utf-8(string)?

最近使用到了mysql-connector-cpp,通过这个库获取到的字符串类型是mysql::string,其实其实质就是mysql自己实现的wstring。如果直接进行转换:mysqlx::string s2 = i2.get(0);string s = s(s2);这样的话,在s的最后会多出来一个‘\u0000’。所以我们必须先将utf-16的字符串转化为utf-8的字符串。...

2019-10-14 22:31:28 4807

原创 如何解决更新windows10后兼容性助手显示Vmware不能在Windows上运行的问题?

我在寝室更新了window10,到自习室去上自习时发现Windows不能运行vm了。。。在国内百度没找到解决办法,最后在stackflow解决了问题,希望能帮助到你。bcdedit /set hypervisorlaunchtype off链接:https://stackoverflow.com/questions/56324278/wmware-workstation-dont-work...

2019-10-10 20:41:04 3839 4

原创 如何解决Mysql 5.6 Can't open shared library '/usr/lib/mysql/plugin/mysqlx.so'问题?

ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/mysqlx.so' (errno: 2 /usr/lib/mysql/plugin/mysqlx.so: cannot open shared object file: No such file or directory)这个问题来源于:我要使用mysq...

2019-10-07 00:24:43 6203 1

原创 TCP/IP详解-读书笔记-第一章

这里开始记录一下我读TCP/IP 详解的收获,同时也总结知识点,方便以后查阅。P1 1.2: TCP/IP is normally considered to be a 4-layer system.TCP/IP suite:ApplicationTransportNetworkLinkThe link layer, sometimes is also called d...

2019-09-27 15:34:07 123

原创 如何解决Cmake报错 Symbol `malloc' causes overflow in R_X86_64_PC32 relocation的问题?

添加上add_definitions("-fPIC")即可。更多资料可以看这一篇blog:fPIC更多信息

2019-09-22 19:05:18 1424

原创 Cmake常用选项(2)

宏定义${PROJECT_SOURCE_DIR}example: include_directories(${PROJECT_SOURCE_DIR}/home/ele/libuv/include)代表当前项目根目录。选项AUX_SOURCE_DIRECTORY(path, des)example:AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR...

2019-09-22 18:22:38 193

原创 enable_shared_from_this

有时我们会遇见这样一个问题:void func2(shared_ptr<Good>)struct Good { void func1() { //在这里我想要调用func2. }}shared_ptr<Good> a(make_shared<Good>());a.func1();如代码中所见,在Good类的成员函数中,我们想要调用一个自己...

2019-09-14 17:08:33 87

原创 GeekBand设计模式八大原则总结

面向对象设计原则(1):依赖倒置原则(DIP)高层模块(稳定)不应该依赖于底层模块(变化),二者都应该依赖于抽象(稳定)。抽象(稳定)不应该依赖与实现细节(变化),实现细节应该依赖于抽象(稳定)面向对象设计原则(2):开放封闭原则(OCP)对扩展开放,对更改封闭。类模块应该是可扩展的,但是不可修改。面向对象设计原则(3):单一职责原则(SRP)一个类应该仅有一个引起他变化的...

2019-09-13 12:09:54 214

原创 什么是__builtin_expect指令?

  在http-parser中,我看到了这样一行代码。其中有一个叫做UNLIKELY的宏定义,它的定义是这样的:UNLIKELY是__builtin_expect指令的一个宏定义。__builtin_expect指令的效果就是:  以UNLIKELY为例,这在里就是告诉编译器:我在这里更容易倾向于等于0.让编译器有一定的预判,能够进行一些优先级的设置,从而优化性能。不考虑性能,只谈...

2019-09-13 11:15:37 446

原创 如何解决libuv使用Cmake时链接报错undefined reference to `pthread_sigmask'的问题?

????当我们在Cmake中使用:(实例CmakeList在文章最后 )target_link_libraries(smpHttp /home/ele/libuv/out/Debug/libuv.a)这样链接libuv时,有时会报出这样的错误:[build] /home/ele/libuv/out/Debug/libuv.a(process.o): In function `uv__proce...

2019-09-03 21:44:30 5100

原创 栈混洗

这里使用的是O(n)的算法:思路:再来一次栈混洗,看能不能实现序列B中的效果。(设A为输入栈,B为要验证的栈)先将要验证的栈B转移到栈rb,这样B的栈底就位于rb的栈顶了,让我们可以知道依次放入栈B的元素是哪些。模拟混洗的过程,如果rb栈顶与s中一样,那么就将rb和s都pop。如果s为空,则表示能实现栈B这样一个结果。#pragma once#include <stack&...

2019-08-23 17:48:53 1032

原创 Cmake常用选项

简单记录下Cmake中我常用到的选项,方便自己查阅

2019-08-14 22:24:51 753

原创 redis基数树rax源码分析(2.5)

点点废话  最近没有再将rax的源码往下看,在尝试自己这是我边看rax边实现的一个小练习,欢迎大家指教:https://github.com/LurenAA/radix_tree ,好想要个star,求求了,兄弟萌

2019-08-14 18:40:51 437

原创 归并排序

概述  归并排序的特点在于它的时间复杂度为O(nlogn)。而根据一个结论性的东西来说:最坏情况下比较方式的排序算法至少需要Ω(nlogn)的时间(结论来自邓俊辉版数据结构P59),这是比较性排序算法的极限。计算时间复杂度  (函数代码在下面)不难看出merge函数的时间复杂度是O(n),sort函数的时间复杂度主要来源于merge函数和两个自身的递归函数,于是:T(n) = 2 ...

2019-08-13 17:59:47 133

原创 redis基数树rax源码分析(2)

今天我想要说的是rax中的padding这个函数,我查了很多的资料,大家的博客都告诉我们内存对齐提高性能,却没有去分析为什么,是有根据让作者选择这样做?如果只是这样简单的放过,总感觉让人有一丝的遗憾。  ...

2019-08-12 18:51:18 907

原创 redis基数树rax源码分析(1)

  最近想用libuv写个http服务器,看到了这个开源项目haywire,在看到第39次提交的时候,作者用基数树来存储不同路由的controller,不过在后续版本中改为了使用hash,不过想来不如正好学学基数树,作者使用的基数树是这个版本radix_tree,这个版本缺少注释,且和一般思路不一样的使用的是二叉树而非N叉树,为了理解方便,我选择了注释较多的rax...

2019-08-12 00:11:44 738 1

原创 ssh Visual Studio Code的c++环境配置

 如果你已经搭建好了vscode的ssh环境,但是并不知道如何配置c++编译环境,那么恭喜,来对地方了  如果你可以看到以下界面(重点在左下角的绿色标识,代表进入了远程环境界面),那么我们就可以继续了。首先你得下载这个:然后在你的项目文件夹中需要有如下结构:c_cpp_properties.json:{ "configurations": [ { ...

2019-08-06 19:47:41 1301

原创 填充每个节点的下一个右侧节点指针

填充每个节点的下一个右侧节点指针116. 填充每个节点的下一个右侧节点指针和117. 填充每个节点的下一个右侧节点指针 II这两个题目唯一的区别在于是否是完美二叉树。    这个题目的思路完全来源于层次遍历,如果掌握了层次遍历,这两个题目的答案都是一样的。源代码:/*// Definition for a Node.class Node {public: int va...

2019-08-05 02:04:16 142

空空如也

空空如也

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

TA关注的人

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