自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 wsl2+ubuntu20安装ros2遇到update问题

wsl2+ubuntu20安装ros2遇到update问题

2022-09-05 15:51:10 959 1

原创 Linux文件系统

文件组成inode(索引节点,index node)和文件(普通文件、目录文件)一一对应,存储在磁盘中一般包含inode编号、文件大小、访问权限、创建修改时间、文件数据块位置等dentry(目录项,directory entry)用于记录文件名,inode指针,目录层级关系等,缓存在内存中目录和目录项目录是一个文件,其中保存子目录和文件,存储在磁盘中目录项是一个数据结构,缓存在内存中,用于加速目录的读取。每个目录项可以指向一个文件或目录(也就是每个目录项有一个inode)磁盘布

2022-03-23 15:37:38 1423

原创 HTTP和HTTPS

HTTP和HTTPSHTTP:超文本传输协议,明文传输,80端口超文本:文字、图片、视频、超链接等的混合体(比如HTML)HTTP状态码状态码含义例子1xx协议处理的中间状态2xx成功200、2043xx重定向301、3024xx客户端错误(可能是报文格式有问题,服务器无法解析)400、403、4045xx服务器错误500、502200:OK,表示发送成功204:Not Content,只包含响应头301:Moved P

2022-03-21 22:01:39 1096

原创 协程和IO多路复用

IO操作当一个文件读操作发生时:等待数据拷贝到内核缓冲区(比如加载文件、等待完整的UDP包)将数据从内核拷贝到进程IO多路复用和协程传统的网络编程使用多线程模型,一个监听socket,然后每来一个请求就多线程开启一个新的会话socket。由于多线程的理论并发上限是CPU的核心数,当并发量越来越大的时候,就会有大量的线程处于就绪态等待执行,并且会存在频繁的线程上下文切换(线程栈、栈指针等寄存器),从而影响真正执行业务代码的时间。IO多路复用之前程序在进行IO操作时,主要有阻塞式和非阻塞式

2022-03-21 09:41:34 656

原创 Go channel简介

channel用于在并发单元之间通信,类似于管道ch := make(chan int) // 创建一个channeldefer close(ch)ch <- v // 向管道中写入v := <-ch // 从管道读取v, ok := <-chchannel类型channel有三种类型[可读可写 | 只读 | 只写]chan T // rwchan<- T // w<-chan T // r阻塞和非阻塞如果在创建一个chan

2022-03-19 15:53:01 493

原创 Redis:Error starting userland proxy: listen tcp4 0.0.0.0:6379: bind: address already in use

在尝试启动docker中的redis的时候突然报错了$ sudo docker start redisError response from daemon: driver failed programming external connectivity on endpoint redis (89f663b87a43b4cbf45acd826512dea07fd05d257eb1a7b86b1afeb1402bef6e): Error starting userland proxy: listen tcp

2022-03-17 14:39:12 3065

原创 缓存击穿、缓存穿透和缓存雪崩

缓存失效Redis中的EXPIRE允许用户为某个key指定超时时间,超时之后对应的value就会被清空。延迟失效机制当客户端请求操作某个key的时候,Redis会对客户端请求操作的key进行有效期检查,如果key过期才能进行相应的处理缓存穿透什么是缓存穿透缓存穿透指有人恶意攻击系统时,用一个Redis和MySQL中都不存在的数据去密集请求服务,如果达到MySQL的瓶颈,就会造成宕机等后果。怎么解决缓存穿透问题缓存空值这里的空值指那些在数据库和缓存中都查询不到的值通过把空值.

2022-03-16 23:32:50 547

原创 数据库和缓存的数据一致性问题

系统使用缓存的方式是复制数据库中的部分数据到缓存中,然后就可以从缓存中更快地获取数据。但是数据不仅仅有读操作,有时候也需要进行写操作。完成数据写之后,再次使用缓存的时候,需要保证从缓存中读取到的数据是最新的,即保证缓存一致性。为了保证数据最新,必然要对数据库和缓存都进行更新,这就涉及到两个问题:更新缓存的时候,是修改缓存数据还是直接删除缓存?数据库和缓存先更新哪一个?先简单分析一下淘汰缓存:优点:操作简单,没有复杂的逻辑;缺点:下一次读取,会带来额外的miss更新缓存:优点:下一次直接

2022-03-15 21:48:17 936

原创 Go语言使用RabbitMQ

基本概念什么是消息队列消息队列是一种应用(进程)间的通信方式。生产者只需把消息发布到MQ,消费者只需重MQ中取出,可靠传递由消息队列中的消息系统来确保。消息队列有什么用消息队列是一种异步协作机制,最根本的用处在于将一些不需要即时生效的操作拆分出来异步执行,从而达到可靠传递、流量削峰等目的。比如如果有一个业务需要发送短信,可以在主流程完成之后发送消息到MQ后,让主流程完结。而由另外的线程拉取MQ的消息,完成发送短信的操作。常用的消息队列常用的MQ大概有ActiveMQ、RabbitMQ、R

2022-03-14 16:08:12 7418

原创 TCP三次握手

TCPTCP(传输控制协议,Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的运输层协议面向连接:一对一;相对于UDP可以一对多可靠地:确保送达字节流:有序、无边界(无大小限制)TCP首部序列号:发送数据时自增(类似于TCP报文的索引)确认应答号:用于目的主机的应答,下一次期望收到的序列号建立TCP连接:三次握手TCP连接需要建立的东西Socket:IP和Port序列号:确保有序接收窗口大小:流量控制(每次发送的报文一定在

2022-03-04 17:40:37 1984

原创 ping和traceroute的工作原理

PING原理PING是基于ICMP协议(网络层)工作的ICMP:Internet Control Message Protocol,互联网控制报文协议ICMP用于报告传输过程中出现的问题,比如确认IP包是否成功送达,或者发送过程中被废弃的原因比如主机A向主机B发送消息,在途径某个路由器时,无法发现B的存在。路由器就会向A发送一个ICMP不可达的数据包,A解析ICMP的首部和数据段得知具体信息ICMP报文封装在IP包里,从左到右依次是IP头、ICMP头、ICMP数据段,后两部分构成IP

2022-03-04 01:37:54 2078

原创 C++11/14/17常用新特性

nullptr&NULL传统C++把NULL(void* or int)和0视为同一种东西,引发了很多问题。C++11引入nullptr,其类型为nullptr_t,可以隐式转化为任何指针类型,可以和0完全区别开。结论:空指针无脑使用nullptrconstexpr&const传统C++中const为常数,区别于常量表达式。带来的一些麻烦,比如不能用于初始化数组长度。C++11引入constexpr,可以显示声明常量表达式。常量表达式的值一定在编译期计算出也可以修饰函数,表示

2022-03-01 15:14:31 798

原创 左值/右值引用&移动/拷贝&完美转发

左值引用&右值引用我一度认为是否会用左值/右值引用能够判断出一个人是否了解modern C++左值:理解为等号左边的值(能取地址)右值:理解为等号右边的值,即表达式结束后不再存在的临时对象(不能取地址),比如常量表达式,函数返回值,和存在寄存器中的临时值等纯右值:纯粹的字面量,比如非引用的返回值、表达式(包括lambda)等将亡值:可以被移动的临时值(第一次看到可能比较难理解,不妨先往后看)引用:一个变量的别名(没去了解过底层原理,感觉像是指针的某种高级封装)对引用的操作就相当于对

2022-03-01 15:12:41 795

原创 CSP20219——T2非零段划分

朴素思想肯定是遍历每个bar,确定在不同bar的影响下的非零段个数,但是暴力求解是O(MN)的本题要求O(N),所以需要优化使对于每个bar的求解是O(1)的可以用cnt[bar]cnt[bar]cnt[bar]统计每个barbarbar对应的非零段个数然后就涉及到怎么描述一个非零段的问题,也就是说什么条件下一定会存在非零段A[i]<bar<=A[i+1]A[i]<bar<=A[i+1]A[i]<bar<=A[i+1]无论A[i+1]A[i+1]A[i+1]之后

2022-02-26 11:24:49 190

原创 CSP202109——T1数组推导

有一个硬约束:A[i]>=0&&A[i]<=B[i]A[i]>=0 \&\& A[i] <= B[i]A[i]>=0&&A[i]<=B[i]在B[i]B[i]B[i]变化时,一定有A[i]==B[i]A[i]==B[i]A[i]==B[i]所以B[i]B[i]B[i]变化时min+=B[i],max+=B[i]min+=B[i],max+=B[i]min+=B[i],max+=B[i];B[i]B[i]B[i]不变时m.

2022-02-26 11:10:55 255

原创 差分前缀和 题集&题解

题目来自洛谷题单【算法2-1】前缀和与差分P5638 【CSGRound2】光骓者的荣耀前缀和模板题对城市序列前缀和prefix[i]每次计算跳过[i,i+k)的时间#include<bits/stdc++.h>using namespace std;int n, k;vector<long long> a, prefix;int main(){ cin >> n >> k; a = vector<long lon.

2022-02-26 00:14:45 362

原创 GDB简明使用

最近在学OS(Ubuntu,X86_64),想看看从C接口到系统调用的过程,但是写了个小代码发现,使用C接口时(比如fopen)只会以callq的形式被调用,所以打算学一下gdb。说来惭愧,以前一直没有系统学过,偶尔用用得查半天。顺便发现了一个好网站,里面整理了很多linux工具的用法GDB启动和退出g++ -g a.cpp -o agdb a // 启动q // 退出调试运行run(r) // 运行程序到下个断点处停止continue(c) // 继续执行到断点处next

2022-02-24 01:01:22 1012

原创 CSP202112——T3登机牌条码

其实题目已经给了模拟思路了:计算数据码字、填充码字和长度码字(注意特判s==-1的时候)计算校验码字,主要是一个多项式求余数据码字按题意模拟,解析字符串,得到编码值,如果长度是奇数就在加个29两两合并增加填充码字(使得总个数%w==0)增加长度码字校验码字这题难点就在怎么多项式求余,还好数据比较松可以O(N^2)模拟竖式除法需要用一个多项式乘法求出gx的系数(求的过程中模929,否则会爆)fx/gx多项式除法,用一个vector记录对应位置的系数注意除法余项的系数取反 ,因

2022-02-23 21:42:21 929 4

原创 CSP202112——T2序列查询新解

观察f(x)f(x)f(x)和g(x)g(x)g(x)的序列,其实是有规律的:f(x)f(x)f(x)在每个a[i]a[i]a[i]处+1+1+1,在[a[i],a[i+1])[a[i], a[i+1])[a[i],a[i+1])中值相等g(x)g(x)g(x)每r个数+1+1+1而这题O(N)的复杂度会TLE,所以只能考虑O(n)解法:每次处理f(x)f(x)f(x)相等的一个大区间在这个大区间中划分出g(x)g(x)g(x)相等的小区间,计算err注意处理f(x)f(x)f(x)两端可

2022-02-23 10:09:25 508

原创 CSP202112——T1序列查询

正着扫一遍,判断f更新的时间/* * @Email: [email protected] * @Github: nArrow4 * @Date: 2022-02-22 22:13:42 */#include<bits/stdc++.h>using namespace std;int main(){ int n, N; cin >> n >> N; vector<int> a(n+1, 0); for (int i

2022-02-23 10:01:11 558

原创 MIT6.S081-Syscall Lab

MIT6.S081MIT6.S081 Fall 2020.syscall lab这个实验需要自己实现一些系统功能调用前置知识xv6的启动过程Qemu启动RISC-V模拟,在只读内存中读取并运行启动加载程序(boot loader)CPU在_entry(kernel/entry.S)以机器模式执行,此时没有分页,虚拟地址直接映射启动加载程序加载内核到0x80000000调用start()函数进入内核模式,执行kernel/main.cuserinit()创建第一个进程exec调用

2022-02-09 10:39:03 389

原创 MIT6.S081-Util Lab

MIT6.S081MIT6.S081 Fall 2020.util lab这一系列的任务就是教你去使用一些系统功能调用根据任务书上一步一步来就好lab代码及notes前置知识标准流输入0,输出1,错误2可以作为printf的第一个参数命令行参数argc:表示参数个数argv:参数的内容,从下标1开始。是一个char数组,可以用atoi转换为整型无名管道创建int pipe[2];pipe[0]表示读,pipe[1]表示写文件&目录open根据路

2022-02-07 21:20:17 295

原创 Go设置、获取和删除Cookie

Go操作Cookie// A Cookie represents an HTTP cookie as sent in the Set-Cookie header of an// HTTP response or the Cookie header of an HTTP request.//// See https://tools.ietf.org/html/rfc6265 for details.type Cookie struct { Name string Value string

2022-02-03 17:31:03 1591

原创 MySQL基础及GORM框架

SQL概念什么是SQL即Structured Query Language结构化查询语言,访问和处理关系型数据库的计算机语言为什么需要数据库程序运行时使用到的数据通常保存在内存中,一旦关闭就消失了想要将数据保存下来只能存到文件里,带来很多重复性的保存、解析代码数据库可以帮助持久化数据这一过程也就是应用程序不需要知道数据底层的存储情况,只需要使用数据库提供的接口就可以实现什么是关系型数据库可以把每一类数据看成一个二维表格,每一行是一个记录,每一列是一个字段不同的关系表之间可以用

2022-02-01 23:44:14 1278

原创 Session和Cookie

Cookie在客户端记录用户身份Session在服务器端记录用户身份Cookie为什么需要Cookie服务器端需要知道某些请求是由同一个用户发起的Web应用基于HTTP传输,数据交换完毕则连接关闭,所以网络连接本身不能区分用户服务器端给每个用户一个“身份证”,也就是Cookie,来进行身份识别Cookie是什么可以理解为HTTP用来识别身份的一个报文字段Cookie怎么使用用户首次访问时,服务器在响应报文中增加一个Cookie字段,由浏览器保存在本地用户再次访问时,请

2022-01-27 18:19:07 439

原创 力扣 第69场双周赛 T4

首先看下暴力思想:对于每个右下角和左上角,判断能否放置邮票如果不能放置,就跳过如果能放置,就对ans对应区间的每个元素都加一最后,如果ans和grid中存在同时为1的位置,就是false;否则是true但是暴力显然是O(n^2)的,所以需要做优化:能否放置 -> 区间内有无1 -> 区间和大于0? -> 前缀和维护ans -> 每次对区间所有元素加一 -> 差分具体代码如下class Solution {public: bool possib

2022-01-09 16:46:26 333

原创 使用网线直连树莓派

博主最近准备用树莓派做一个web服务器。由于是在学校里(用的校园网),不能把树莓派连到路由上,所以想着折腾一下网线直连。看网上的很多方法都是将WLAN共享到以太网,但是我试了很久就是不行。使用arp -a查询的话只能得到192.168.137.255(或者192.168.80.255),这个实测是用不了的。看到有些博客说啥固定IP也不太理解怎么做。然后就刷到了树莓派使用网线直连电脑虽然上面图裂了:),但是我突然就悟了。按照他的步骤点开Internet协议版本4,如下图所示这里的自动获得I

2021-11-15 15:08:33 2321

原创 django template

刚刚开始看django,可能有很多理解不到位的地方。只是在这里记录一些报错解决方案(希望不是混出来的)。Invalid block tag on line 5: ‘raw’. Did you forget to register or load this tag?这是在尝试引入自己写的标签时遇到的。教程中的用法是{% raw %}...{% end raw %]但是实测会报错Invalid block tag on line 5: 'raw'. Did you forget to reg

2021-11-13 20:03:16 743

原创 C++中的多线程问题

进程和线程进程和线程的关系应用程序>程序=进程>线程一个应用程序(APP)可以有多个进程,彼此相互独立。一个进程可以开启多个线程,相当于是分工完成进程任务。比如一个辅瞄程序是一个进程,完成辅瞄过程中的所有任务;(辅瞄代码中的)相机任务是一个线程,只负责从相机(或本地视频)读取视频流,供其他线程使用。进程和线程的区别各个进程拥有独立的虚拟地址空间,也就是说进程间的数据相互隔离,不能直接访问。同一进程的各个线程共享同一个虚拟地址空间,也就是一个线程可以直接访问另一个线程中的变量(如果知

2021-09-25 19:03:40 1653

原创 编译cartographer时glog链接出错

catkin_make_isolated --install --use-ninja用这个指令编译的时候,报错对‘google::LogMessage::LogMessage(char const*, int, int, unsigned long, void ........往上翻一点发现一个CMake 的Warnning:runtime library [libglog.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by file in /

2021-08-31 21:26:47 1380

原创 安装cartographer时无法访问raw.githubusercontent.com

按照官方教程安装cartographer的时候:wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall报错:ERROR in config: Unable to download URL [https://raw.githubusercontent.com/googlecartographer/cartogr

2021-08-31 19:43:46 3158

原创 c++中的比较函数

比较函数在用c++ code的时候经常会用到比较函数cmp(比如sort和priority_queue),在此做个总结。SORTsort(num.begin(), num.end(), cmp);方法一:自定义cmp函数sort方法中默认的运算是a<b,小于则True,否则False。在默认的逻辑中,小的元素排在前面。在自定义排序操作时,同样有返回True的时候表示a比b“小”,返回False的时候表示a比b“大”。如下例所示,如果返回的表达式是a>b,则表示在当前的逻辑中,a&g

2021-08-28 15:03:12 6192

原创 对Java多态的一些思考

写这篇文章是因为在学Java的时候遇到了一个问题:public class Test5 { public static void main(String... args){ C o1 = new D(); o1.m(1.0f); }}class C{ public void m(double x) { System.out.println("C' m(double)"); }}class D extends C

2021-08-19 16:45:10 75

原创 TypeError: list indices must be integers or slices, not tuple

TypeError: list indices must be integers or slices, not tuple今天在写python程序的时候遇到这样的报错。大概查了一下,发现是list切片的问题。也就是说list的索引只能是整数或切片(正如报错所说),所以使用如下操作时,就会报错data = [[0,1],[2,3],[3,4]]print(data[:,1]一种解决方法就是把data转换成narray。data = [[0,1],[2,3],[3,4]]data = np.ar

2021-07-15 10:30:27 2013

原创 catkin编译kalibr时aslam_imgproc模块异常

又又又又遇到错误了no matching function for call to ‘getOptimalNewCameraMatrix’这次是因为本机中用的opencv版本和kalibr所需的冲突了。所以需要安装opencv2.4.13(我用的是这个)注意安装的时候设置一下INSTALL_PREFIX,否则会和原来的版本冲突。然后在kalibr中修改一下CMakeLists.txt(主要是include_directories和target_link_libraries)就OK了...

2021-07-11 17:45:58 285 1

原创 catkin编译kalibr时evaluateJacobians异常

编译时爆出如下错误error: no matching function for call to ‘aslam::backend::ErrorTermFs<DIMENSION>::evaluateJacobians(aslam::backend::JacobianContainer&) const’ aslam::backend::ErrorTerm::evaluateJacobians(J);看源代码发现函数evaluateJacobians是在ErrorTerm中

2021-07-11 16:53:40 190 5

原创 catkin编译kalibr时aslam_cv模块异常

如题,在用catkin编译时报错:/home/zhiyu/kalibr_workspace/src/kalibr/aslam_cv/aslam_time/include/aslam/implementation/Time.hpp:153:37: error: no matching function for call to ‘boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000000>::subs

2021-07-10 21:28:57 579

原创 catkin编译kalibr时下载suitesparse报错

如题,在使用如下指令时catkin build -DCMAKE_BUILD_TYPE=Release -j4报错“无法本地校验颁发者的权限”。这个是在catkin编译的过程中使用wget从网上下载suitesparse时,产生的错误。可以通过修改CMakeLists.txt来解决:vim ~/kalibr_workspace/src/kalibr/suitesparse/CMakeLists.txt将其中的DOWNLOAD_COMMAND rm -f SuiteSparse-${VERSI

2021-07-10 20:08:23 794

原创 bazel编译tensorflow时报错Checksum error

问题描述在用bazel对tensorflow进行编译的时候bazel build --config=monolithic //tensorflow:libtensorflow_cc.so抛出错误:ERROR: /home/narrow/tensorflow/tensorflow/core/kernels/BUILD:4680:1: no such package '@icu//': java.io.IOException: Error downloading [http://10.21.205.2

2021-05-01 10:52:59 1982 1

原创 ubuntu下安装ZBar遇到的坑

问题一:No package ‘pygtk-2.0’ found在下载完zbar后,运行./configure,生成Makefile时出现报错:checking for PYGTK... configure: error: Package requirements (pygtk-2.0) were not met:No package 'pygtk-2.0' foundConsider adjusting the PKG_CONFIG_PATH environment variable if y

2021-02-25 19:01:07 1293 1

空空如也

空空如也

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

TA关注的人

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