面经-C++
C++运行时多态机制 虚函数机制(如何实现的):当一个类中定义了虚函数之后,其对象存储布局之中会生成一个虚函数指针,该虚函数指针指向了一张虚函数表, 虚函数表里面存放的是虚函数的入口地址 虚函数机制被激活的条件: 1.基类要定义虚函数 2.派生类要重定义(覆盖)基类虚函数 3.创建派生类对象 4.基类指针指向派生类对象(基类引用绑定到派生类对象) 5.通过基类指针(引用)调用虚函数 为什么构造函数不能设为虚函数? 答: 根据虚函数被激活的条件,先要创建对象,才会生成虚函数指针, 之后才能使用虚函数 类中定义虚函数后,内存中有一个指针大小的数据,即虚函数指针 虚指针的生成条件 类中声明了虚函数(包括继承的虚函数) 虚函数的存在会导致所有该类的对象(包括派生类对象)携带 vptr 补充C++静态多态 静态成员函数可不可以是虚函数 static静态成员函数不能定义为虚函数。 static成员不属于任何类对象或类实例,静态成员函数没有this指针。 虚函数依靠vptr和vtable来处理。 原子变量与互斥锁性能对比分析 低竞争场景: 原子变量:性能显著优于...
[译]C10M并发连接的秘密
The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution 现在我们已经攻克了C10K问题,那么我们如何升级并支持1000万并发连接?你会说这是不可能的。不是这样的,现在的系统正在使用一些他们可能不熟悉的激进技术来提供 1000 万个并发连接。为了了解它是如何完成的,我们求助于 Errata Security 首席执行官 Robert Graham,以及他在 Shmoocon 2013 上题为C10M Defending The Internet At Scale的精彩演讲。 Robert以一种巧妙的方式来阐述我以前从未听说过的问题。他从一些历史开始,讲述了 Unix 最初为何被设计为电话网络的控制系统,而不是通用服务器操作系统。实际传输数据的是电话网络,因此控制平面和数据平面之间应该有明确的分离。我们现在正在使用Unix服务作为数据平面的一部分,但是我们不应该这么做。如果我们设计一个内核来处理每台服务器一个应用程序,那么我们的设计将与多用户内核的设计...
个人服务器Ubuntu2404部署hexo博客
创建git裸仓库 git init --bare hexo.git 修改git push之后的钩子操作 修改hooks/post-receive 文件 #!/bin/bash GIT_WORK_TREE=/var/www/hexo git checkout -f 参考资料 https://cloud.tencent.com/developer/article/2308870?areaId=106001 https://cloud.tencent.com/developer/article/1662792
Unraid使用自带WireGuard进行内网穿透
由于使用其他的内网穿透工具(frp等),需要部署在docker上,没办法在外网进行停止docker的操作。所以使用自带WireGuard用于备用,另外使用WireGuard内网穿透还可以直接访问内网的其他应用和设备。 Unraid设置 本机配置 右上角点击高级进行配置 点击生成密钥对生成本机的密匙 本地隧道网络池设置一个ip网段,需要不同于本地内网的网段 本地隧道地址填随便一个该网段下的一个ip地址,为本机的ip地址 其他字段不用填 Peer设置(对端,公网服务器) 具体设置见图片 Peer公钥和私钥填写在服务器上生成的密钥,或者在unraid生成,在服务器上填写此处生成好的 持久保活参数 重要!!! 必填 访问端和unraid端主动连接服务器,服务器代理访问段数据转发到unraid 服务器设置 本人使用的Unbuntu2404,使用apt安装的wireguard。其他linux发行版可以参考 配置文件在/etc/wireguard/wg0.conf,需要sudo权限 [Interface] PrivateKey = xxxx...
编程常见问题解决
MySQL ubuntu2404 使用 apt安装mysql8.0.37 无法直接登陆root 需要使用auth_socket方式登陆 sudo mysql -uroot --socket=/var/run/mysqld/mysqld.sock Vim vim Youcompleteme C++补全无法补全头文件 使用–clangd-complete安装,旧的–clang-complete不支持头文件补全 Docker build时报错 dial tcp: lookup goproxy.cn on [fe80::1%2]:53: dial udp [fe80::1%2]:53: connect: network is unreachable DNS有问题 https://robinwinslow.uk/fix-docker-networking-dns 修改/etc/docker/daemon.json 添加 "dns": ["8.8.8.8"] Ubuntu Ubun...
[译]C++11中的通用引用
Universal References in C++11 – Scott Meyers 或许C++11中最重要的新特征是右值引用;右值引用是移动语义和完美转发的基础(关于右值引用,移动语义,完美转发可以参考Thomas Becker’s overview)。 在语法上,右值引用和标准引用类似,区别是使用两个&,这个函数使用了Widget的右值引用: void f(Widget&& param); 考虑到右值引用是使用“&&”声明的,似乎可以合理地假设类型声明中出现“&&”表示一个右值引用,事实并非如此: Widget&& var1 = someWidget; // here, “&&” means rvalue reference auto&& var2 = var1; // here, “&&” does not mean rvalue reference tem...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick Start Create a new post $ hexo new "My New Post" More info: Writing Run server $ hexo server More info: Server Generate static files $ hexo generate More info: Generating Deploy to remote sites $ hexo deploy More info: Deployment