自定义博客皮肤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)
  • 收藏
  • 关注

原创 std::variant 与 std::visit

std::variant简介std::variant 是c++17 引入的一个类型,其作用类似于C语言中的Union,但是比Union 的功能强大的多。C语言中一个联合体Union 可以储存多种类型数据,但缺点有很多。比如:1 没有可用的方法来判断Union中真实储存的类型,获取值时也是内存拷贝的结果,可能会存在问题。这就只能靠程序员人脑保证获取的值是有意义的。2 只能储存基础数据类型,不能储存其他结构体使用 std::variant声明一个variant对象很容易,我们可以利用std::v

2022-03-29 20:21:07 4802

原创 V8 与NodeJS

V8 内存结构和 HandleScope分析node module注册原理

2022-03-29 15:20:37 1603

原创 lighttpd服务器启动脚本

脚本 命名为 httpserver.sh#!/bin/bashcat > ~/.lighttpd_dir_conf <<EOFserver.document-root = "$1"server.port = "$2"dir-listing.encoding = "utf-8"server.dir-listing = "enable"mimetype.assign = ( ".html" => "text/html", ".txt" => "text/

2022-03-28 11:14:30 404

原创 垃圾回收原理

为什么需要 GC在计算机诞生初期,在程序运行过程中没有栈帧(stack frame)需要去维护,所以内存采取的是静态分配策略,这虽然比动态分配要快,但是其一明显的缺点是程序所需的数据结构大小必须在编译期确定,而且不具备运行时分配的能力,这在现在来看是不可思议的。在 1958 年,Algol-58 语言首次提出了块结构(block-structured),块结构语言通过在内存中申请栈帧来实现按需分配的动态策略。在过程被调用时,帧(frame)会被压到栈的最上面,调用结束时弹出。栈分配策略赋予程序员极大的自

2021-12-12 00:04:35 439

原创 Chromium 中的单例模板实现方法分析

Chromium 中的单例模板实现方法分析前言由于 c++ 的编译器可以保证函数内部静态成员的初始化唯一,因此在类内定义的静态成员变量天然的线程安全,并且局部静态变量仅在执行时才会初始化,因此也是懒汉模式的单例。在chromium base 库中存在 StaticSingleton 和 LazyInstance 模板, LazyInstance本身是为了定义懒汉模式的线程安全单例; StaticSingleton 提供了单线程和线程安全的静态单例方法,实际上这LazyInstance模板可以废弃了,而

2021-12-07 20:13:32 486

原创 Chomium MessageLoop实现原理

Chromium Message Loop主要类和功能MessagePump(LibEvent)如果是UI线程和IO线程会使用MessagePumpLibEvent 实现,其他线程则使用MessageDefault. 前者利用libEvent 的事件驱动特性,后者使用event 信号来控制线程阻塞和唤醒。当线程启动时,线程的入口函数ThreadMain会创建并启动 MessagePump, 开始任务轮转,该类会不断的向ThreadControllerWithMessagePumpImpl 发出D

2021-11-20 16:56:13 1580

原创 石子游戏--动态规划

本文记录各种各样的石子游戏题目和解法,石子游戏大多动态规划方法来处理。石子游戏一 亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子piles[i]。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。 亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。 假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比..

2021-11-20 15:01:50 1168 1

原创 刷题笔记 -- 图论

1 Floyd 算法可以求出任意两点的最短距离Floyd 算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点 i 到点 j 的最短路径。从任意节点 i 到任意节点 j 的最短路径不外乎 2 种可能:是直接从 i 到 j 是从 i 经过若干个节点 k 到 j所以,我们假设 Dis(i,j) 为节点 u 到节点 v 的最短路径的距离,对于每一个节点 k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j) 是否成立,如果成立,证明从 i 到 k

2021-10-31 16:26:24 407

原创 Redis 学习笔记

Redis 笔记数据结构Redis 有两级的数据结构, 对外的数据结构由 RedisObject 表示:简称robj, 是数据的对外表示形式, 其具体实现根据不同的情况有所不同.// robj对象的构成typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clo

2021-09-05 15:08:40 147

原创 Linux基础知识

内存1 物理地址虚拟地址和逻辑地址的区别物理地址是 物理介质内存条的的储存地址,是独一无二的虚拟地址 又称线性地址,是计算机能够产生的最大内存地址集合, 与CPU总线有关, 32 位cpu 有4g的虚拟地址虚拟地址不是独一无二的,不同的进程可以使用相同的一块虚拟地址,由MMU(内存管理单元)进行地址映射之后,才能访问真正的 物理地址空间逻辑地址是在有地址变换功能的计算机中,访内指令给出的地址 (操作数) 叫逻辑地址,也叫相对地址,也就是是机器语言指令中,用来指定一个操作数或是一条指令的地址。一个逻

2021-05-08 16:21:47 167

原创 CMake 简易教程

对于大部分小白来说,不太关心项目的构造过程,拿到项目之后也不太清楚怎么构建。导致在Github上Fork代码之后,或者下载某个linux版的软件,面对着一大堆源码不知道怎么使用。本文简单的介绍一下C++ 常见的CMake编译方法。Cmake 是一个跨平台的、开源的构建工具。cmake 是 makefile 的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量Cmake的使用拿到一个由Cmake构建的工程源代码之后,我们首先要做的是当然是安装CMak

2021-05-08 16:20:52 597

原创 C++ 编译过程 与 Inline函数

C++ 编译过程1 预处理/预编译阶段这个阶段本质上还没有进行编译,在 C++ 中,预处理器指令以#号开头,比如#include、#define和#if等。在这一阶段,编译器逐个处理 C++ 源码文件。对于#define指令,编译器将源码中的宏替换成宏定义中的内容;对于#if、#ifdef和#ifndef指令,编译器将有选择地跳过或选中部分源代码。例如: C++ 代码中常用某些宏 例如 WIN 配合 #ifdef和#ifndef指令 来区分不同平台,因为不同的系统...

2020-11-07 14:24:37 1193 1

原创 C++ 语法学习

1. type_info C++的多态是面向对象编程的精髓之一, 但是在实际使用和调试中,很难知道一个指针绑定了哪个子类的对象,这被称为RTTI(运行时类型识别)。常常是读着读着代码,读到了一个 p->func() 就不知道到底在哪里实现的了。这时候type_info 和 typeid就派上用场了,它可以知道指针具体指向的类型,注意这只在多态的时候有用,也就是说基类没有虚函数这个...

2019-12-20 11:53:04 246

原创 代码整洁之道笔记

第二章 有意义的命名1 避免误导,根据对象的特点使用正确的单词,例如accountList用来指一组账号,但如果底层的实现是vector而不是list就会给调用者误解,所以应当使用accountGroup,甚至 accounts都比accountList好2 尽量避免不恰当的缩写,使用可搜索的名称,如果缩写不得当可能导致搜索不出来。3 尽量将原生的变量封装/重命名为有意义的名称,例如将double封装成Time,更能告诉阅读者这是个什么变量,另一方面可以抑制潜在的类型转换第三章 函数1.

2019-07-28 22:47:17 98

原创 如何架一个http服务器? Tinyhttpd 源码学习

tinyhttpd是一个超轻量型Http Server 使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。 下载链接:http://sourceforge.net/projects/tinyhttpd/函数和宏声明#include &lt;stdio.h&gt;#include &lt;sys/socket...

2018-06-28 09:43:11 298

原创 编程之美2.18 : 有一个无序、元素个数为n的正整数数组,要求:如何能把这个数组平均分成两个子数组,并使两个子数组之和最接近。

注: n不一定是偶数,也可能是奇数如题所述,这是一个经典的01背包问题,但是在实现过程中遇到了很多的麻烦,花了三个小时才搞完,特此记录下。主要是分享一下解题过程中出现的错误以及相应的解决办法,希望下回不会再犯吧。首先,先来一个简化版问题,把约束(平均分割)去掉,题目变成  元素个数为n的正整数数组,如何能把这个数组分成两个子数组,并使两个子数组之和最接近,这里没有平均分割要求,那么就是一个简单的0...

2018-04-24 19:12:30 2111

空空如也

空空如也

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

TA关注的人

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