- 博客(282)
- 收藏
- 关注
原创 从零配置 linux 开发环境
vscode 的「File」→「Preferences」→「Settings」→「Text Editor」→「Font」→「Font Family」末尾追加。跳转后,下载并解压 nvim-linux64.tar.gz,把解压后的。NvChad 是一个强大的预配置库,用户基于它能更快的改出自己合意的配置。得先安装好各种组件,其中 neovim 至少要安装 0.9.0 版本的。apt-get 的版本很老,只有 0.6.1,先把 neovim 删掉。记录下我的开发环境的配置流程,方便以后自己在新机上配置。
2023-07-08 23:54:31
485
原创 protobuf3 oneof
文章目录前言内容OneofUsing OneofOneof FeaturesBackwards-compatibility issues前言工作需要,需要用到 protobuf3 中的 oneof 来定义数据结构,在这里翻译一下 pb官方文档,oneof。(意译+机翻,塑料英语勿喷,欢迎指正)内容OneofIf you have a message with many fields and where at most one field will be set at the same time,
2022-03-14 14:48:21
3992
原创 什么时候使用内联函数
定义调用函数这一行为本身有耗时(内存、寄存器、地址切换等),记为 t1函数运行本身也有耗时,记为 t2解析大多数情况下,t1 << t2 (t1 远小于 t2)但也存在一些耗时很短的函数,t1 和 t2 的耗时比较接近对于 1,不用在意对于 2,可以用 inline,节省掉 t1 的时间但此时 t1 和 t2 都是一个很小的值,所以 inline 优化的效果并不明显如果该函数被大量调用,则优化效果明显总结t1 << t2:不用t1 ≈ t2,调用频率
2022-03-13 18:26:10
1135
原创 clickhouse-cpp 写入时卡住 bug调试
问题使用 clickhouse 遇到问题,有一台机器 clickhouse 出问题,只要他存在,其他机器都没法写,全都卡住,哪怕重启也没用。只有屏蔽这台机器后,重启其他机器才能正常写入。进行调试调试官网链接下载并安装 clickhouse server,clickhouse client拉取 clickhouse-cpp 代码clickhouse-client连接上默认的 localhost:9000,用户是 default,密码为空select * from system.cluste
2022-01-11 15:20:06
1203
原创 用 echo 命令修改用户密码
忘记用户的密码上 root, passwd 用户名 修改用户密码后并没有生效,sudo 提示密码错误改为使用 echo 就能解决问题,echo "密码" | passwd --stdin 用户名
2021-12-27 10:45:55
5151
2
原创 API 和 SDK 辨析
贴近生活讲讲两者的关系有一杯密封饮料,它的名字叫做“SDK”。饮料上插着吸管。吸管的名字叫“API”。把你叫做“XX系统”。如果你想喝到SDK里的饮料(让系统拥有SDK中的功能),你必须通过API这根吸管来实现(通过API连接你的系统和SDK工具包),否则你就喝不到饮料。所以:SDK=放着你想要的软件功能的软件包API=SDK上唯一的接口...
2021-06-25 21:46:16
125
原创 Docker 入门学习
文章目录链接概念镜像容器tar 文件Dockerfile 配置文件远程仓库docker pull操作pull 从仓库下载镜像 和 run 指定镜像运行成一个容器commit 提交修改后的容器到镜像dockerfile 对 镜像 build 操作镜像与 tar 文件的 save 和 load 操作小结链接看视频学的:【docker入门】10分钟,快速学会docker概念docker 中最重要的两个重要概念:镜像 和 容器镜像类似于我们用虚拟机,创建虚拟机前需要下载的系统镜像文件,比如iso文件、
2021-04-30 18:28:44
215
原创 Git 常用方法小结
文章目录推荐网站内容基础篇git commitgit checkout <分支名>git branch <分支名>git merge <分支名>git rebase <分支名>高级篇head相对引用 ^ ~强制相对引用 -f撤销变更 git reset、git revert移动提交记录git cherry-pick交互式的 rebase杂项只提交一个记录提交的技巧#1知识图谱推荐网站师傅推荐的 一个很好的学习 Git 的网站内容基础篇git comm
2021-04-28 23:59:07
243
转载 vscode左侧文件不同颜色标识含义
代码里的左侧颜色标识红色,未加入版本控制; (刚clone到本地)绿色,已经加入版本控制暂未提交; (新增部分)蓝色,加入版本控制,已提交,有改动; (修改部分)白色,加入版本控制,已提交,无改动;灰色:版本控制已忽略文件。git文件标识A: 增加的文件.C: 文件的一个新拷贝.D: 删除的一个文件.M: 文件的内容或者mode被修改了.R: 文件名被修改了。T: 文件的类型被修改了。U: 文件没有被合并(你需要完成合并才能进行提交)X: 未知状态...
2021-04-18 00:33:14
2706
原创 C++ 左值、右值、左值引用、右值引用
文章目录左值、右值左值引用右值引用总结参考来源看什么都没有比看官方文档更棒Rvalue Reference Declarator: &&左值、右值C++对于左值和右值没有标准定义,但是有一个被广泛认同的说法:可以取地址的,有名字的,非临时的就是左值;不能取地址的,没有名字的,临时的就是右值;左值通常是:变量,常量等等,能出现在赋值符号左侧(是指存在于单个表达式之外的对象)右值通常是:表达式,数值等等,不能出现在赋值符号左侧(是一个暂时存在的值存在于单个表达式之内的对象)左值
2021-04-17 15:51:51
305
原创 合并k个升序链表
文章目录链接题目思路代码链接合并k个升序链表题目合并k个升序链表思路合并,两个的很简单,双指针跑一下。k个的话,想法是k个指针,每轮跑k次,取最小值插入答案链表,但这样不优,遍历k个只取了一个出来放进结果中,时间复杂度是k*所有的节点个数。考虑如何快速获取k个中的最小值,可以想到小顶堆。用优先队列维护k个节点,每次取堆顶,然后加入改链表的下一个节点进入堆中即可。代码/** * Definition for singly-linked list. * struct ListNode
2021-04-12 22:58:13
138
原创 仅由01构成的串中,最长01数目相等的子串
有一个仅由0和1组成的01串,找到其中最长的一段子串,使得该子串中0和1的数目相等。面试时将0改成-1,然后用前缀和,二分枚举长度然后检验,这里二分枚举错了,不满足二分的性质。正确思路是,在前缀和的基础上,找前缀和相等的 i 和 j 并且 |i - j| 尽可能大。这里用哈希存一下每个前缀和的最小 id ,然后O(n)跑一下取最大距离即可。#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 10;in
2021-04-12 17:02:10
1344
原创 const int * a 和 int const * a 和 int * const a 区别
const int * a; int const * a;int * const a;的区别前两个没区别,都是一个指针,指向 const 类型的 int。最后一个是 const 指针,指向 int 类型可以看到这里编译器提示 p3 不可以被修改。
2021-04-11 17:26:47
363
原创 指针强制转换成unsinged int
题目C++数组中,两个相邻的指针,如果把他们都强制转换成unsigned int类型,会发生什么情况?回答32位系统下,指针也是32位的,4个字节。64位系统下,指针也是64位的,8个字节。如果是在32位系统下,没事。倘若在64位系统下,将指针强制转换成 unsigned int 类型,会导致精度丢失,进行编译时编译器会报错。(因此如果要进行这样的强转操作,应该改成long或者unsigned long)这里考察的是强制类型转换的知识。如果是少字节的强转成多字节的,则不会报错,能够编译通过。
2021-04-11 17:21:04
1121
原创 进程间通信及使用场景
文章目录前言IPC方式管道通信无名管道有名管道(FIFO)信号消息队列共享内存套接字socket参考来源前言经常被问到进程间通信的方式,这个可以答上来,但是问了一下各个通信方式的使用场景,就不清楚了。这里对进程间通信(IPC,InterProcess Communication)做一个简单的记录IPC方式管道通信无名管道半双工,只能在具有公共祖先的两个进程之间使用(例如父子进程)。有名管道(FIFO)可以在不相关的程序之间交换数据。FIFO其实是一种文件类型。FIFO主要有两种用途:
2021-04-11 11:29:49
638
原创 普通二分查找 + 查找边界的二分
文章目录二分查找的框架查找一个数查找左侧边界的二分搜索查找右边界的二分搜索注意参考来源二分的主要场景是:在有序数组中logn找到某个数字扩展的有:找到这个数字的同时,要求下标尽可能小或者尽可能大(即找左侧边界、右侧边界)那这个时候我们就要深入理解细节,才能写出相应限制下的二分算法。主要关心的有:while括号的不等号是否要带上等号,mid是否应该+1,left的更新方式,right的更新方式,返回值的选取等等。二分查找的框架先来写一个二分查找的大概框架int binarySearch(vect
2021-04-09 16:31:24
127
原创 Dos 和 DDos
文章目录Dos概念攻击方式SYN洪水攻击死亡之ping泪滴UDP泛洪(UDP flood)Land攻击(LandAttack)IP欺骗DDOS概念做法Dos概念DoS是Denial of Service的简称,即拒绝服务。最常见的DoS攻击有计算机网络宽带攻击和连通性攻击。DoS攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。
2021-04-09 14:23:10
184
转载 C++11常用新特性
文章目录前言新特性1.类型推导2.区间迭代3.nullptr4.初始化5.尖括号“>”6.外部模板7.lambda表达式参考来源前言面试被问到了,只回答了auto遍历,其他学过但很少用,没想起来,很尴尬。做个记录新特性1.类型推导auto自动推导出变量的类型decltypeauto只能对变量进行类型推导,decltype 关键字是为了解决 auto 关键字只能对变量进行类型推导的缺陷而出现的。格式:decltype(表达式)编译器分析表达式并得到它的类型,却不实际计算表达式的值。
2021-04-08 20:58:52
136
原创 为什么用 nullptr 而不是 NULL
文章目录结论理由结论如果想表示空指针,那么使用nullptr,而不是NULL。注:nullptr在C++ 11中才出现。理由NULL 是void*类型,它的值为0可以看到C中的定义如下#define NULL ((void*)0)而C++的定义如下#define NULL 0所以假设有一天你写了这样的代码,会提示你有二义性void test(void *p){ ……}void test(int num){ ……}int main(void){ test(NULL);
2021-04-08 19:44:22
247
原创 长链接 转换成 短链接
文章目录参考来源思路方法一方法二参考来源豆瓣 短链接生成的算法原理思路方法一一般会想到用哈希,这里可以用MD5码获取哈希值,但时MD5生成的串挺长的,这类要考虑怎么把它变短。做法如下:方法二很好想的思路,给每个长链接一个ID,这个ID的进制越高意味着越短。譬如用09和az还有A~Z来构成六十多进制的ID,然后这个ID就作为长链接对应的短链接返回。映射关系也要存储起来。...
2021-04-07 23:39:48
1642
原创 ACM经历和退役感想
大一进集训队,自己成绩一般般,也不成熟。组队后,刚上大学的愣头青,作为队长也不知道怎么组织队友,就各打各的,情况大概就得过且过。矛盾主要发生在大一暑假。我觉得暑假多校的题目是真滴难,排名不理想大伙就急,一急队伍就情绪化,讨论思路的时候大家就容易吵起来,自己也没担好队长的责任,也有闹情绪、黑脸、甚至自闭划水。大二,多校排名靠后就得等名额,最后一个ICPC名额刚好轮到我们队伍参加。结果银川赛站的主办方做了奇奇怪怪的操作,导致学校不安排参赛。当时的心态真的非常炸裂,最消沉的时候甚至想着 “要不干脆就退了吧”
2021-04-07 22:31:29
568
原创 NC35 最小编辑代价
思路当i字符等于j字符时:dp[i][j] = dp[i-1][j-1]当i字符不等于j字符时:dp[i][j] = min(insert, delete, replace)int insert = dp[i][j-1] + 1; i个编辑成j-1个字符,再插入int delete = dp[i-1][j] + 1; i-1个编辑成j个字母,再删除int replace = dp[i-1][j-1] + 1; i-1个编辑成j-1个字母,再替换代码class Solution {public
2021-03-27 20:01:45
123
原创 2018 CCPC 湖南全国邀请赛 题解
A#include <cstdio>using namespace std;typedef long long ll;const int maxn = 2e5 + 10;int a[maxn];int main() { int n; while(scanf("%d", &n) != EOF){ for(int i = 0; i <= n; i++){ scanf("%d", &a[i]);
2020-12-11 19:29:21
143
原创 2018 ICPC 南京站 M题 (EXKMP+马拉车)
做法exkmp + manacher代码#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6 + 10;char s[maxn], ma[maxn * 2], t[maxn];int mp[maxn * 2];int q, nxt[maxn], extend[maxn], slen, tlen; // extend[i]:s[i...n] 与 t 的最长公共前缀
2020-12-03 00:45:48
251
原创 KDtree 知识点简记 + 例题(HDU 5992)
文章目录定义操作建树查询例题代码参考来源定义int MAX_DIM; ///所讨论的空间的维度struct node{ int x[MAX_DIM];///所有维度的坐标信息}KDtree[maxn];操作建树按顺序选取维度dim = (dim + 1) % MAX_DIM按照目前的维度划分成两个空间build(l, r, dim) …… nth_element(KDtree + l, KDtree + mid, KDtree + r + 1, [dim](const nod
2020-12-01 10:37:37
315
原创 Sql server 操作简记
文章目录综述增删改查索引视图存储过程触发器综述只记录几个简单的用法,只用于方便回忆增insert into [表名] values(),(),();删delete from [表名]where 条件改update [表名] set 字段 = ???where 条件查select [字段] from [表名]where 条件索引create unique nonclustered index [索引名]on [表名]重命名索引exec sp_re
2020-11-30 16:16:56
162
转载 VS2010 添加搜索路径和链接库的方法
在引入第三方时,环境配置 头文件搜索路径 和 链接库搜索路径方法1、点击项目名,右击–>属性–>C/C+±->附加包含目录,其中添加头文件的路径2、点击项目名,右击–>属性–>链接器–>附加库目录,其中添加lib和dll文件的路径3、点击项目名,右击–>属性–>链接器–>输入–>附加依赖项,其中添加lib名的路径以上步骤完成配置。转载于:https://www.cnblogs.com/xuxu8511/archive/2013/04/12
2020-11-22 21:25:50
1463
转载 [SQL Server]SQL Server如何重命名一个数据表的表名?
[SQL Server]SQL Server如何重命名一个数据表的表名?
2020-11-19 16:12:23
1329
原创 2015 ICPC 上海站 A - An Easy Physics Problem(计算几何)
思路分两种情况1、不发生碰撞2、发生碰撞只要写出点A的射线方程,圆的方程,联立即可求出碰撞时间t的二次方程。通过二次方程的 delta 与 0 的大小关系,判断是否碰撞。1、不发生碰撞时直接看点B是否在A的射线上2、发生碰撞时先看点 B 是否在A到碰撞点上(入射线),然后再看是否在出射线上,因为求出射线比较麻烦,这里是算出切线方程,算出点B关于切线的对称点,然后判断点B是否在A射线上。代码#include <bits/stdc++.h>using namespace st
2020-11-02 16:43:11
175
原创 2020 ICPC 线上模拟赛 E题 Eat Walnuts(区间dp)
E Eat Walnuts思路简单的区间dp,注意边界值不能选,i>j部分应初始化为0(而不是INF)代码#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 1e2 + 10;const int INF = 5e8 + 10;int a[maxn];int dp[maxn][maxn];int
2020-11-01 16:15:16
239
原创 2020 ICPC 线上模拟赛 I题 Character Wheels(模拟)
I Character Wheels思路顺时针旋转,坐标的变化为i , j --> j n-i+1,将逆时针转换成顺时针,模拟即可代码#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 1e2 + 10;const int INF = 5e8 + 10;char mp[maxn][maxn];i
2020-11-01 16:13:19
294
原创 2015 CCPC The Battle of Guandu(思维 + dijkstra)
思路对于每个重要程度为2的战场,曹操的人数要大于袁绍的,枚举重要程度为2的战场,对于x战场曹操人数+1,则对应的袁绍战场y要+1,为了平衡这个影响,曹操要对y战场+1,然后又是袁绍……,不断将影响传递下去,直到传递到重要程度为0的战场,此时可以停止,因为重要程度为0的战场对胜负没有影响。记录传递的所有路径中的最小花费(最短路),即可知道当前枚举的战场的最小花费,枚举所有重要程度为2的战场,使得它们的曹操人数都等于袁绍人数+1即可。这样跑显然会T,我们建反图,建新点空边连重要程度为0的点,然后对新点跑di
2020-10-23 20:44:42
181
原创 2020 CCPC Kingdom‘s Power(树+思维)
思路要么是让人走到叶子结点,再折返到岔口走下一个叶子结点。要么是折返的花费高于从根派一个新的人过来,走到其他的叶子结点。那就要获得树的深度信息,通过深度信息获取结点到根的距离以及各叶子结点到岔口的距离。并且由于我们肯定是优先走深度小的叶子结点,再走深度深的叶子结点,所以需要对每个结点,都对以它为根节点的子树按照各分支的最大深度排序。排序后树的每个分支都是左低又高,从左往右深搜并更新答案即可。代码#include <bits/stdc++.h>using namespace std
2020-10-21 17:54:42
293
原创 蓝桥杯练习系统 历届真题
核桃的数量输出三者的最小公倍数即可#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e3 + 10;const int INF = 0x3f3f3f3f;int main(){ ll a, b, c; scanf("%lld %lld %lld", &a, &b, &c); ll tem = a * b / __gcd(
2020-10-15 14:05:03
483
原创 2018 ICPC 区域赛 青岛站 F题 Tournament ZOJ 4063(找规律)
题目ZOJ 4063 Tournament思路手写答案或者打表,找规律会发现是把左上角的块放到右下角,右上角的块放到左下角。块的大小依次为2 4 8 16 ……枚举块长度即可显然,lowbit(n)决定了完整的行的数目,即它决定了k的值。代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e4 + 10;const int INF = 0x3f3f3f3f
2020-10-13 12:28:03
325
原创 2020 杭电多校 Slime and Stones(ex威佐夫博弈)
题目链接思路代码#include <bits/stdc++.h>using namespace std;typedef long long ll;int main() { ll t, n, m, k; scanf("%d", &t); while(t--){ scanf("%lld %lld %lld", &n, &m, &k); k++; if(n > m) swap
2020-09-06 15:27:36
207
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人