自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿龙的博客

记录学习(・ω・)ノ

  • 博客(111)
  • 收藏
  • 关注

原创 阿龙的学习笔记---C++后端开发学习路线梳理、阶段性总结

1. 前言不是科班出身,机械学院下的机器人专业,乱七八糟QT、ROS、双目、单片机都接触一些,但是到现在没做过太多软件开发的活儿,所以对于未来找实习找工作没什么底。研一就快要过去了,因为疫情研一下半学期也一直在家待着了。有好有坏,稀里糊涂学了一些东西吧。但是在探索中,浑浑噩噩好像没有一个明确的方向,希望能总结总结,做一些规划。2. C++软件开发学习路线 当然有这么多成功的大佬们是我学习的方向,看看各路大神都是怎么学的呗。找了一些学习路线的总结:C++后台开发学习路线(已签腾讯后..

2020-06-11 17:17:38 1112

原创 阿龙的学习笔记---2021上半年的记录

看过的面经,把不会的问题总结了,记在笔记本上,整理复习一下。

2021-07-12 17:19:43 220

原创 阿龙的学习笔记---202107学习

学这个https://interview.huihut.com/#/this 指针被隐含地声明为: ClassName *const this,这意味着不能给 this 指针赋值;内联函数缺点: inline 函数无法随着函数库升级而升级。因为在编译器就编进去了,inline函数的改变需要重新编译,不像 non-inline 可以直接链接。虚函数(virtual)可以是内联函数(inline)吗?一般都说不可以,但是在不表现出多态时,是有可能被内联的,比如说直接通过对象调用,编译器就可能内联.

2021-07-12 14:46:17 191

转载 阿龙的学习笔记---转载及精炼总结github仓库:cpp-backend-reference

转载自https://github.com/chankeh/cpp-backend-reference突击复习常见题,要提前批了,之前的忘了不少,知识广度先再拓展一下。文章中的一些详细讲解的链接可以深度学习。后端开发面试知识点大纲:语言类(C++):关键字作用解释:volatile作用Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取。Vola.

2021-07-03 15:37:04 276

原创 阿龙的学习笔记---MySQL45讲的总结(二)

普通二级索引和唯一索引这两个怎么选择呢?从查询的角度来说,差异很微乎其微,都是二分查找。普通索引找到后还需要往后按序再查找唯一索引可能不用往后再查找。从更新的角度,差异较大。关于change buffer。change buffer:更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中,这样就不需要从磁盘中读入这个数据页了。。(change buffer会持

2021-07-03 12:26:41 124 1

原创 阿龙的学习笔记---MySQL45讲的总结(一)

学习这个大佬的课,的确超级有经验:https://time.geekbang.org/column/intro/100020801查询语句过程(待补充)- 连接器,分析器,优化器,执行器,最后到存储引擎。更新语句过程依然走上面的路:先连接查询缓存会清空。分析器分析出是一条更新语句。优化器进行索引等优化。执行器执行。但是除了更新表中数据外,还有redolog和binlog两个日志文件的更新。即物理日志 redo log 和逻辑日志 binlog。redo log: I.

2021-07-01 20:34:00 83

原创 阿龙的学习笔记---《STL源码剖析》---(一)

《STL源码剖析》读书笔记。

2021-06-28 17:21:17 78

原创 阿龙的学习笔记---Redis用作任务队列的问题

参考以下文章,待整理。https://www.cnblogs.com/cjjjj/p/12789471.htmlhttps://3g.163.com/dy/article/FMAG7M9R05424KIG.htmlhttps://xie.infoq.cn/article/5b2777af639ff13518558d071

2021-06-23 13:26:04 63

原创 阿龙的学习笔记---Redis做分布式锁的注意事项

参考以下文章:待整理https://www.cnblogs.com/haibiscuit/p/12699233.htmlhttps://blog.csdn.net/qq_26286487/article/details/80990249

2021-06-23 13:22:57 84

原创 阿龙的学习笔记---神奇的大型随机抽样算法:蓄水池算法

看面经遇到这么神奇的算法,需要记录一下~蓄水池算法:https://www.jianshu.com/p/7a9ea6ece2af

2021-06-22 16:59:07 87

原创 阿龙的学习笔记---使用Python装饰器来处理log

实习做直播项目中,大哥用python装饰器来实现打log/汇报日志等通用代码的一波操作很优雅,先占一个坑,到时候学习记录一下。

2021-05-31 13:58:47 86

原创 阿龙的学习笔记---CMake指定C++版本

主要参考这个文章: https://cloud.tencent.com/developer/article/1741243调试毕业设计程序,编译安装库时遇到的问题:说98版本不支持long long/home/l/software/octomap-devel/octomap/include/octomap/OccupancyOcTreeBase.hxx:964:46: error: ISO C++ 1998 does not support ‘long long’ [-Werror=long-l.

2021-05-31 13:55:41 2264

原创 python time 时间日期处理相关

time模块转换为字符格式:# 格式化成2016-03-20 11:45:39形式print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 获取time中的小时或分钟的int型。time.localtime().tm_hour# 其他还有: # int tm_sec; /* 秒 – 取值区间为[0,59] */ # int tm_min; /* 分 - 取值区间为[0,59] */ # int tm_hour; /* 时

2021-05-13 14:48:08 97

原创 Python RPC服务被系统KILL 简单的排查方法

情况请求某个服务的时候报错,去容器上查看,发现子进程被kill了。之前好几次出现这个情况,基本上都是top看一下内存占用,只是简单的把容器扩容。排查方法先使用top看一下内存占用,然后请求服务,发现4个G占满了。再使用dmesg命令来查看内核信息进行排错。发现的确是oom。dmesg命令详解(转载)dmesg是用来在Unix-like系统中显示内核的相关信息的。dmesg全称是display message (or display driver),即显示信息。实际上,dmesg命令

2021-05-08 12:00:08 218

原创 阿龙的学习笔记---《深度探索C++对象模型》读书笔记(五)--- 构造、析构、拷贝语意学

一个 pure virtual destructor 纯虚析构函数 需要被定义,因为编译器会在derived类中静态调用他。所以一般不要把虚析构函数声明为纯虚。不要把不会呗重写的函数声明为虚函数,因为效率上没有静态函数高,并且不能被inline所优化。虚函数在设计为const的时候,需要谨慎,因为你不知道derived class 会不会修改成员变量,所以建议是最好不要声明为const。无继承情况下的构造Plain Old Data (POD) POD 指的是这样一些数据类型:基本数据类型、指.

2021-04-17 16:28:04 70

原创 阿龙的学习笔记---《深度探索C++对象模型》读书笔记(四)--- Function语意学

各种调用方式class中有三种function可以调用:static、non-static、virtual,是有差异的。非静态成员函数:Nonstatic Member functionsC++设计准则是:应该与非成员函数的开销一样。所以其实调用时,会转换为非成员函数的形式,会将object通过this指针的方式传入。成员变量的读取也会转换为this指针的操作。转换之后可能会加上前文提到的NRV优化,以及名称的特殊处理(Name mangling)即重新按照一定的规则命名。虚拟成员

2021-04-16 18:37:10 91

原创 阿龙的学习笔记---《深度探索C++对象模型》读书笔记(三)--- Data语意学

占用空间: 空的基类是1字节的大小,由于编译器需要使得不同的对象有不同的地址,以及其他因素,会给空的class一个char,分配空间。如果继承这个类,那么可能会占用这1字节的空间,但新的编译器可能会优化掉,比如在32位机器上,以下两种可能性:同名: 外部声明的同名变量,一般会被class内部的变量覆盖。内存中 顺序: non-static data members 在 class object 中的排列顺序将和其被声明的顺序一样。...

2021-04-16 00:28:31 86

原创 阿龙的学习笔记---《深度探索C++对象模型》读书笔记(二)--- 构造函数语义学

默认构造函数:什么是trival-default constructor,什么是non-trival default constructor两者的差别在哪?简单言之,trival的默认构造函数只是能让代码通过编译,而其它什么事都不做,而non-trival的默认构造函数则相反,non-trival的构造函数还会进行一些其它的动作,比如初始化class object的virtual function table。并不是我们所理解的任何没有构造函数的类都会自动创建,不需要的时候只是有trival

2021-04-15 19:47:52 113

原创 阿龙的学习笔记---《深度探索C++对象模型》读书笔记(一)--- 关于对象

《深度探索C++对象模型》,好书! 但好早以前看的了,这次面试一个虚继承和多重继承的题没答上来,才想起来看这本书的时候,一扫而过,也没有记笔记,所以印象不深,这两天总结一下~

2021-04-15 17:53:19 79

原创 阿龙的学习笔记---算法题C++数据结构/算法/功能/处理输入输出等(转载总结)

STL及常用函数常用STL数据结构及函数: https://blog.csdn.net/fantacy10000/article/details/95974634常用算法C++实现及STL常用API: https://blog.csdn.net/CodeAddict/article/details/85614087#_STL_some_demos_1算法竞赛中常用的C++ STL: https://blog.csdn.net/qq_34489943/article/details/79771371

2021-04-01 16:31:09 120

原创 阿龙的学习笔记---ElasticSeach的学习与记录

一些博客资料APIDoc:https://elasticsearch-py.readthedocs.io/en/7.10.0/api.html#cluster官方集群相关startup文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html知乎Es入门:https://zhuanlan.zhihu.com/p/104215274https://zhuanlan.zhi

2021-03-31 22:36:03 143

原创 阿龙的学习笔记---golang学习

安装环境:在VsCode中搭建Go开发环境,手把手教你配置

2021-03-30 15:19:47 127

原创 阿龙的学习笔记---RPC总结

RPC学习总结实习项目中用到了gRPC和自研RPC,做一个总结吧。参考:https://www.zhihu.com/question/25536695 里面2、3、4号回答都不错。看到个这,感觉还挺有意思的,梳理了后台一步一步发展的趋势,主要是。作者:得闲野鹤链接:https://www.zhihu.com/question/25536695/answer/154614906我们在做一个访问量不大的项目的时候,一台服务器部署上一个应用+数据库也就够了.那么访问量稍微大一点

2021-03-15 21:05:04 165

转载 阿龙的学习笔记---设计模式---代理模式,适配器模式

总结自:http://c.biancheng.net/view/1359.html概述在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。优缺点代理模式的主要优点有:代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可以扩展目标对象的功能;代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性其主要缺点是:代理模式会造成系统设计中类的数量增加在客户端.

2021-03-14 18:47:55 56

转载 阿龙的学习笔记---一致性哈希

参考 https://www.sohu.com/a/411095977_115128#一致性哈希概述基础的哈希表的东西就不多说了。在分布式缓存集群中,如何做缓存负载均衡?在分布式集群缓存的负载均衡实现中,比如 memcached 缓存集群,需要把缓存数据的 key 利用哈希函数散列,这样缓存数据能够均匀分布到各个分布式存储节点上,要实现这样的负载均衡一般可以用哈希算法来实现。普通哈希算法做负载均衡的弊端:假如用一个简单的「取模法」来说明这个过程。假设有 3 个服务器节点编号.

2021-03-14 14:39:55 80

转载 阿龙的学习笔记---零拷贝

零拷贝概述零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,主要就是利用各种零拷贝技术,避免让CPU做大量的数据拷贝任务,减少不必要的拷贝,或者让别的组件来做这一类简单的数据传输任务,让CPU解脱出来专注于别的任务。这样就可以让系统资源的利用更加有效无零拷贝的文件传输:在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,我们通常用下面的代码完成:while((n

2021-03-13 13:15:08 86

原创 阿龙的学习笔记---python修饰器

首先,要明白python中函数也是个对象,是可以被赋值,可以当做参数传递的。假如我定义一个函数,接收一个函数作为参数,然后调用他,如下:def mytest(func): return func()def myfunc(): print("Called")mytest(myfunc)如上,会打印出来字符,函数对象传入了mytest,然后在其中调用。再者,函数中可以定义函数,然后返回这个函数对象,如下 is_called中定义了函数,然后返回这个函数,然后new()调用了这个函数,.

2021-03-12 17:37:15 70

原创 阿龙的学习笔记---python相关杂七杂八的记录

_临时变量,_ 代表临时变量比如for _ in range(10): _ 代表临时变量,用来循环10次。或者接收不需要的函数返回值。声明编码方式:python在文件头声明编码方式:具体格式参考官方文档:https://www.python.org/dev/peps/pep-0263/# -*- coding: utf-8 -*-# coding=utf-8字典取值:最简单的是方括号,dict[‘key’],但是如果没有这个key,会抛出异常。字典的成员函数dict.g..

2021-03-12 15:14:12 104

原创 阿龙的学习笔记---《后台开发:核心技术与应用实践》读书笔记(三)--- 进线程通信、常用类库

三、进线程与进线程通信多线程操作使用pthread库来实现,可以传递参数,设置属性。多线程通信:互斥锁,pthread_mutex_xxxx,(相当于二元信号量)。lock,trylock 和 unlock 进行操作。条件变量:pthread_cond_xxxx条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作有:触发条件(当条件变为 true 时);等待条件,挂起线程直到其他线程触发条件。条件操作可以不占用cpu,比如你一直判断某个条件是否成立,

2021-02-16 21:49:17 70

原创 阿龙的学习笔记---《后台开发:核心技术与应用实践》读书笔记(二)--- 网络通信

二、网络通信OSI 7层: 物理层,数据链路层,网络层,传输层,会话层(会话连接断点续传),表示层(数据格式加密等),应用层。TCP/IP 4层:网络接口层(主机到网络层), 网络层, 传输层, 应用层。在4层模型中,ARP是放在网络接口层的。TCP/IP协议部分看之前的博客吧。socket网络编程API:网络字节序和主机字节序,也就是大小端,大小是说高低位放在起始位置(一般计算机内存是从低到高,所以大端是高位放在低地址,小端是低位在低地址)。网络都是大端字节序。四种网络IO模型:阻塞,非

2021-02-15 23:32:55 80

原创 阿龙的学习笔记---《后台开发:核心技术与应用实践》读书笔记(一)--- 编程语言 与 编译调试

听说是一本腾讯员工写的书,快到面试时候,拿来读一下看看,内容好像不太精,少了一丢丢所以然,但是包含了一些对面试有用的知识点,记录一下。一、编程语言c语言 是面向函数。size_of 对函数来讲是得到 函数返回值类型 的size。字节对齐的规则是按照结构体中长度最长的来对齐,比如说有double类型是8byte,那么20字节的结构体会占用24字节的内存。宏定义一段语句的时候可以使用do…while(0); 这样的话整个代码块还算是一个语句。extern ”C" 告诉编译器用C

2021-02-15 13:53:56 184

原创 《Linux高性能服务器编程》---读书笔记(五)---优化与监测

微调内核参数最大文件描述符数量。epoll最大数量。GDB调试gcc或g++编译时,需要加上-g选项,产生必要的调试信息。开始调试:gdb a.out设置断点:(gdb) break(b) main.c 12 — 在main.c的12行设置断点。删除断点:查看断点的编号后,delete 编号,就可以删除了。禁用断点:disable。执行: run(简写r),后面可以添加运行参数继续:continue©next(n):执行下一行。step(s):进入函数内部。until(u

2021-01-21 12:11:42 87

原创 《Linux高性能服务器编程》---读书笔记(四)---信号、定时器、多线/进程,线/进程池

信号kill函数可以发送信号给pid的进程。目标进程在收到信号时,需要定义一个接收函数来处理之。为一个信号设置处理函数,可以使用signal系统调用。信号也可以作为一个异步事件被复用I/O所监听,则可以统一事件源。定时器Linux可用的定时器方法有三种:socket提供的超时选项,是对数据接受与发送的阻塞调用的参数,比如send、 sendmsg、recv、 recvmsg、 accept和connect。根据其返回值与errno来判断是否时间已到。SIAGALRM信号,由alar

2021-01-20 18:29:51 74

原创 《Linux高性能服务器编程》---读书笔记(三)---复用I/O总结、Epoll详解、I/O框架库libevent

I/O复用使得程序同时监听多个文件描述符。但是其本身是阻塞的。监听的同时就绪时,会顺序依次处理。主要有select, poll, epoll。select:select I/O复用系统调用,使用fd_set这个结构来存储文件描述符,以bit表示。并且有最大限制(好像是1024*8)。将可读,可写,异常的三组fd_set传入,然后如果有可读可写异常,则会修改对应的fd_set的标志位以告知用户。书里提到了就绪条件,供参考:对于标志位的结果,需要通过轮询的方式来查找,效率很低。

2021-01-20 12:36:28 338

原创 《Linux高性能服务器编程》---读书笔记(二)---高性能服务器程序框架

高性能服务器程序框架服务器模型:C/S模型:服务器、客户端模型。客户端访问服务器获取资源。服务器启动后,创建监听socket,调用bind绑定服务器端口上,然后listen来等待客户端连接。服务器稳定后,客户端可以发起连接服务器。对于服务端,请求是随意异步事件,需要通过一些I/O模型来监听。使用I/O复用。当监听到请求后,accept接受,然后分配一个逻辑单元为这个连接服务。在处理服务的同时,还需要同时监听其他客户的请求,可以通过select系统调用来实现。服务器基本框架:.

2021-01-17 18:41:01 690

原创 《Linux高性能服务器编程》---读书笔记(一)--- TCP/IP基础,Linux API

TCP/IP协议族数据链路层、网络层、传输层协议是在Linux内核中实现的。因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务。实现这组系统调用的API就是Socket。Socket提供两种功能:将应用程序数据从用户缓冲区中复制到 TCP/UDP内核发送缓冲区,以交付内核来发送数据;或者是从内核 TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据。应用程序以通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为route

2021-01-15 22:23:33 92

原创 阿龙的学习笔记---《Effective STL》读书笔记(三)

条款22:避免原地修改set和multiset的键正如所有标准关联容器,set和multiset保持它们的元素有序,这些容器的正确行为依赖于它们保持有序。 如果你改了关联容器里的一个元素的值(例如,把10变为1000),新值可能不在正确的位置。正确做法:找到想要修改的元素,做一份拷贝,修改拷贝值,删除原来元素,添加修改后的新元素。这样,重新插入的时候还会进行新的排序。条款23:考虑用排序的vector代替关联容器vector比起关联容器,效率高很多。这适用于当你最开始初始化vecto

2020-12-01 19:23:17 89

原创 阿龙的学习笔记---《Effective STL》读书笔记(二)

####0 条款12: 切勿依赖STL的线程安全性对于一个STL,最多期望:多个线程对容器的读是安全的;多个线程对不同容器的写是安全的。而且上述是最多期望这个,甚至有些stl中还不支持以上的内容。所以程序员需要自己做同步控制:对一个容器的成员函数的调用,每次都锁住容器。对于每个返回的迭代器的生存期间内,都锁住对于算法的运行,锁住容器。锁的使用可以参考Effective C++中使用一个类来实现。条款13:vector和string优先于动态分配的数组使用new操作符

2020-12-01 13:22:17 93

原创 阿龙的学习笔记---《Effective STL》读书笔记(一)

读了《Effective STL》,记录一下。条款1:仔细选择你的容器标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。连续内存容器在一个或多个(动态分配)的内存块中保存它们的元素。如果一个新元素被查入或者已存元素被删除,其他在同一个内存块的元素就必须向上或者向下移动来为新元素提供空间或者填充原来被删除的元素所占的空间。这种移动影响了效率(参见条款5和14)和异常安全(就像我们将会看到的)。标准的连续内存容

2020-11-30 21:08:58 74

原创 阿龙的学习笔记---STL学习---删除元素:remove和remove_if函数,以及erase-remove用法

STL删除元素remove() & remove_if()remove和remove_if只是通过迭代器的指针向前移动来删除,将没有被删除的元素放在链表的前面,并返回一个指向新的尾值的迭代器。由于remove()函数不是成员,因此不能调整链表的长度。remove函数原型如下:template< class ForwardIt, class T >ForwardIt remove(ForwardIt first, ForwardIt last, const T& valu

2020-11-25 15:38:12 223

空空如也

空空如也

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

TA关注的人

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