- 博客(98)
- 资源 (1)
- 收藏
- 关注
原创 Hive基本概念
什么是Hive hive是由Facebook开源,用于解决海量结构化日志的数据统计工具。它是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。Hive本质:将HQL转化成MapReduce程序Hive处理的数据存储在HDFS Hive分析数据底层的实现是MapReduce 执行程序运行在Yarn上Hive的优缺点优点操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。 避免了去写MapReduce,减...
2021-08-30 20:06:00
256
原创 GDB的下载与安装
基于 Linux 系统的免费、开源,衍生出了多个不同的 Linux 版本,比如 Redhat、CentOS、Ubuntu、Debian 等。这些 Linux 发行版中,有些默认安装有 GDB 调试器,但有些默认不安装。判断当前 Linux 发行版是否安装有 GDB 的方法也很简单,就是在命令行窗口中执行 gdb -v 命令。以本机安装的 CentOS 系统为例:[root@bogon ~]$ gdb -vbash: gdb: command not found如...
2021-08-02 16:12:05
954
原创 GDB介绍
哪怕是开发经验再丰富的程序员,编写的程序也避免不了出错。程序中的错误主要分为 2 类,分别为语法错误和逻辑错误:程序中的语法错误几乎都可以由编译器诊断出来,很容易就能发现并解决; 逻辑错误指的是代码思路或者设计上的缺陷,程序出现逻辑错误的症状是:代码能够编译通过,没有语法错误,但是运行结果不对。对于这类错误,只能靠我们自己去发现和纠正。也就是说,程序中出现的语法错误可以借助编译器解决;但逻辑错误则只能靠自己解决。实际场景中解决逻辑错误最高效的方法,就是借助调试工具对程...
2021-08-02 15:37:10
475
原创 C++中的override关键字
在C++11中引入了override关键字,以帮助防止在覆盖虚函数时出现的一些小问题。例如,在下面的程序中就存在这样的错误。// This program has a subtle error in the virtual functions.#include <iostream>#include <memory>using namespace std;class Base{ public: virtual void func...
2021-08-02 10:28:35
1305
原创 C++11简介
C++ 11 标准是颠覆性的,该标准在 C++ 98 的基础上修正了约 600 个 C++ 语言中存在的缺陷,同时添加了约 140 个新特性,这些更新使得 C++ 语言焕然一新。
2021-04-10 15:47:43
2237
1
原创 C++11中使用string,不需要 #include<string>
在C++11中,下面的代码没有问题#include <iostream>using namespace std;int main() { string s; cin >> s; cout << s << endl;}std::istream 和 std::ostream 都有 std::ios_base 这个基类。std::ios_base 的成员函数 getloc 以值返回 std::locale (要求定义可见)。std::
2020-12-02 16:12:58
2657
1
原创 利用pytorch-yolo训练KITTI数据集
毕设的第二阶段,就是对融合后的图像进行目标检测,这里首先使用KITTI数据集的原始图像进行目标检测,代码使用的是u版pytorch-yolo :https://github.com/ultralytics/yolov3一、环境配置我使用的环境是 win10+ cuda 11.1 + python 3.8 + pytorch1.6.0二、数据准备将数据集Annotations、JPEGImages复制到yolov3-master工程目录下的data文件夹下;同时新建两个文件夹...
2020-10-05 16:47:38
1650
4
原创 Ubuntu16.04 安装VMwareTools
安装Ubuntu系统后,往往系统没有自动安装VMwareTools,需要我们收到安装,VMwareTools可以做到虚拟机全屏,虚拟机与主机之间的相互复制,还是挺香的。1、关闭虚拟机,在虚拟机设置中进行如下操作其中,linux.iso文件可以在VMware的安装目录下找到2、重新开启虚拟机,在光盘中找到VMwareTools压缩包将该压缩包复制到home目录下并解压3、在解压得到的vmware-tools-distri...
2020-09-25 11:04:29
1065
原创 LRU算法(C++实现)
一、LRU算法简介对于web开发而言,缓存必不可少,也是提高性能最常用的方式。无论是浏览器缓存,还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问,同时也可以降低服务器的负载和压力。那么,了解常见的缓存淘汰算法的策略和原理就显得特别重要。常见的缓存算法LRU (Least recently used) 最近最少使用,如果数据最近被访问过,那...
2020-03-29 17:36:01
11334
6
原创 【muduo】base篇---ThreadPool
一、线程池简介 线程池本质上也是生产者消费者问题:生产者线程向任务队列添加任务,消费者线程(在线程队列中)从任务队列取出任务去执行。二、ThreadPool线程池ThreadPool用到了前面分析的Thread、MutexLock、Condition。ThreadPool可以设置工作线程的数量,并向任务队列放入任务。放入到任务队列中的任务将由某个工作...
2020-03-27 18:59:18
308
1
原创 【muduo】base库之 BlockingQueue和BounderBlockingQueue
一、生产者---消费者模型无界缓冲区与有界缓冲区的封装,本质就是生产者---消费者模型。生产者消费者模型一般有两种实现方式,可以利用信号量也可以利用条件变量实现,muduo库采用条件变量实现。 有界缓冲区是指生产者在向仓库添加数据时要先判断仓库是否已满,如果已满则通知消费者来取走数据;消费者在消费时,先判断仓库是否已空,如果是则通知生产者生产数据。 在无界缓冲...
2020-03-27 11:57:41
213
原创 【muduo】base库之 Thread
一、基础知识POSIX线程(英语:POSIX Threads,常被缩写为Pthreads)是POSIX 的线程标准,定义了创建和操纵线程的一套API。实现POSIX 线程标准的库常被称作Pthreads,一般用于Unix-likePOSIX 系统,如Linux、Solaris。它以pthread.h头文件和一个线程库实现。Pthreads API中大致共有100个函数调用,全都以"pthr...
2020-03-17 22:42:58
395
原创 【muduo】base库之 Types
一、类型转换C++中有四种强制类型转换操作符:static_cast:这个是最经常使用的类型转换。凡是C++隐式执行的类型转换都能够用static_cast显式完毕。在隐式转换时有时编译器会有警告信息。可是显示转换就不会有。static是指编译时,转型失败的话就不能编译。 const_cast:从名字能够看出和const有关,这个转换的作用是去除或加入const特性,它能够将一个cons...
2020-03-16 22:41:36
271
原创 【muduo】base库之 Atomic
什么是原子操作原子操作指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。任何要求多于一个函数调用的操作都不是原子操作,因为在两个函数调用之间,内核可能会临时挂起线程,执行其他的操作,当内核切换回当前线程时,之前的数据可能别修改,所以不能保证是原子操作。为什么需要原子操作C++中针对共享数据的存取在...
2020-03-15 22:57:31
547
原创 Reactor模式
Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。I/O的四种模型I/0 操作 主要分成两部分① 数据准备,将数据加载到内核缓存② 将内核缓存中的数据加载到用户缓存堵塞、非堵塞的区别是在于第一阶段,即数据准备阶段。无论是堵塞还是非堵塞,都是用应用主动找内核要数据,而read数据的过程是‘堵塞’的,直到数据读取完。同步、异步的区别在于第二阶段,若由请求者主动的去...
2020-03-13 21:29:16
210
原创 C++基础(面经)
1、空类里有哪些函数默认构造函数、默认拷贝构造函数、默认析构函数、默认赋值运算符 这四个是我们通常大都知道的。但是除了这四个,还有两个,那就是取址运算符和 取址运算符 const即总共有六个函数。class Empty{public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Emp...
2020-03-12 15:44:45
1429
原创 体系结构相关(面经)
1、什么是内存对齐以及为什么要内存对齐?内存对齐:编译器将程序中的每个“数据单元”安排在适当的位置上。简单理解:按照某种规则将我们定义的结构体成员放在合适的地址偏移位置上存储。举一个例子://32位系统#include<iostream>using namespace std; struct{ int x; char y;}s; int ...
2020-03-11 16:09:40
335
原创 计算机网络部分(面经)
1、为什么TCP握手是三次挥手是四次?三次握手客户端在创建socket网络套接字后,会通过三次握手这个过程来进行连接:用connect向服务端发起连接请求,发送了一个SYN,阻塞等待服务端回复(第一次握手) 服务端收到客户端发送的SYN,为了让客户端知道他这准备好了,于是回了一个ACK告诉客户端我准备好了,并且发了一个SYN问客户端准备好没(第二次握手) 客户端收到服务端回复的AC...
2020-03-10 15:40:51
1244
原创 IO/Linux部分
1、I/O多路复用首先需要明确的是,Linux有五类 io 模型:阻塞 IO模型,非阻塞 IO 模型, IO复用模型,信号驱动IO模型,异步IO模型1.阻塞I/O模型:最简单的一种IO模型,简单理解就是死等,即进程或线程一直等待条件,不满足则一直等待老李去火车站买票,排队三天买到一张退票。耗费:在车站吃喝拉撒睡 3天,其他事一件没干。2.非阻塞I/O模型:应用进程与内核交互,目...
2020-03-08 22:31:55
188
原创 数据库部分 面经集合
1、Mysql 主键是什么概念“主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。2、主键和索引的关系与区别主键一定是唯一性索引,唯一性索引并不一定就是主键。 一个表中可以有多个唯一性索引,但只能有一个主键。 主键列不允许空值,而唯一性索...
2020-03-08 17:07:00
383
1
原创 第二章 策略模式(C++实现)
一、策略模式解析策略模式是一种定义一系列算法的方法,所有的这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 策略模式就是用来封装算法的,但在实际中,它可以用来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理。二、C++代码实现...
2020-03-04 21:31:49
106
原创 LeetCode 112. 路径总和(C++实现)
一、题目描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 1...
2020-02-28 13:25:40
210
原创 LeetCode 101. 对称二叉树(C++实现)
一、题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用...
2020-02-27 16:38:32
287
原创 LeetCode 104. 二叉树的最大深度(C++实现)
一、题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。二、思路一般来说,树的遍历分为两种策略:DFS...
2020-02-27 14:13:37
1178
原创 LeetCode 102. 二叉树的层次遍历(C++实现)
一、题目描述给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]二、思路层次遍历,整个遍历过程只经过...
2020-02-25 14:02:47
302
原创 LeetCode 144. 二叉树的前序遍历 (C++实现)
一、题目描述给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?二、思路方法一:迭代从根节点开始,每次迭代弹出当前栈顶元素,并将其孩子节点压入栈中,先压右孩子再压左孩子。方法二:...
2020-02-24 10:24:11
677
原创 LeetCode 61. 旋转链表(C++实现)
一、题目描述给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步...
2020-02-23 21:27:01
315
原创 LeetCode 2. 两数相加(C++实现)
一、题目描述给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -...
2020-02-23 19:24:50
1183
原创 LeetCode 21. 合并两个有序链表(C++实现)
一、题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4二、思路我们的目的是将两个有序链表合并成一个有序链表,因此,我们的每次操作都是获取 l1l1 指向的结点和 l2l2 指向的结...
2020-02-23 14:02:28
199
原创 LeetCode 234.回文链表(C++实现)
一、题目描述请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用O(n) 时间复杂度和 O(1) 空间复杂度解决此题?二、思路方法一:将值复制到数组中后用双指针法确定数组列表是否为回文很简单,我们可以使用双指针法来比较两端...
2020-02-18 22:08:10
327
原创 LeetCode 328. 奇偶链表 (C++实现)
一、题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3-&g...
2020-02-17 10:15:36
366
原创 LeetCode 203.移除链表元素 (C++实现)
一、题目描述删除链表中等于给定值val的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5二、思路如果删除的节点是中间的节点,则问题非常简单,也是利用双指针的技巧。快指针先走一步用于去寻找删除链表中等于给定值val的所有节点;慢指针落后...
2020-02-15 19:21:17
378
原创 LeetCode 19. 删除链表的倒数第N个节点 (C++实现)
一、题目描述给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?二、思路方法一:两次遍历算法...
2020-02-14 19:48:22
446
原创 LeetCode 160. 相交链表 (C++实现)
一、题目描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:...
2020-02-14 16:37:37
594
原创 LeetCode 142. 环形链表 II(C++实现)
一、题目描述给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to nod...
2020-02-13 21:05:57
249
原创 LeetCode 141. 环形链表 (C++实现)
一、题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2...
2020-02-13 13:41:53
410
原创 LeetCode 707. 设计链表 (C++实现)
一、题目描述设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性prev以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第index个节点的值。如果索引...
2020-02-13 10:16:21
862
原创 LeetCode 206. 反转链表(C++实现)
一、题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?二、迭代法核心思想:设立三个指针,依次完成反转,在反转之前需要存储下一个结点的地址,否则后面的结点会丢失。h...
2020-02-05 22:21:05
676
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人