GDB常用知识点 0. GDB常用命令1. core_dump2. gdb调试core_dump文件3. gdb调试正在运行的程序4. gdb调试多进程程序5. gdb调试多线程程序6. gdb监视变量
网络中数据传输的过程 数据传输的背景(1) 现在互联网中使用的是基于OSI七层模型的TCP/IP模型。TCP/IP模型包括五层,即物理层,数据链路层,网络层,传输层,应用层;其中数据链路层又可以分为两个子层,即LLC(逻辑链路控制层)和MAC(介质访问控制层)。这些层的分工合作是数据正确传输的基础。(2) ARP协议(地址解析协议),它的主要功能是将网络层IP地址转化为数据链路层MAC地址。从IP地址到物理地址的映射有两种方式:表格方式和非表格方式。在以太网中或者在同一局域网中,所有对IP地址的访问都转换为对数据链路层网卡M
LeetCode-337. 打家劫舍 III LeetCode-337. 打家劫舍 III难度:中等小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。代码:class Solution {public: vector&l
LeetCode-213. 打家劫舍 II LeetCode-213. 打家劫舍 II难度:中等你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 = 2
LeetCode-198. 打家劫舍 LeetCode-198. 打家劫舍难度:中等你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 +
LeetCode-494. 目标和 494. 目标和难度:中等给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5
LeetCode-343. 整数拆分 LeetCode-343. 整数拆分难度:中等给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。示例 :输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。class Solution {public: int integerBreak(int n) { vector<int> f(n+1);//f[i] 拆分数字i,使得f[i]为i拆分
LeetCode-62. 不同路径 LeetCode-62. 不同路径难度:中等一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?class Solution {public: //递归超时 时间复杂度2^(m+n-1) // int dfs(int i, int j, int m, int n) { // if(i>=m ||
LeetCode-72. 编辑距离 LeetCode-72. 编辑距离难度:困难给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)cl
LeetCode-1143. 最长公共子序列 LeetCode-1143. 最长公共子序列难度:中等给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:
LeetCode-516. 最长回文子序列 LeetCode-516. 最长回文子序列给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。示例 1:输入:s = “bbbab”输出:4解释:一个可能的最长回文子序列为 “bbbb” 。class Solution {public: int longestPalindromeSubseq(string s) { int n = s.size();
LeetCode-132. 分割回文串 II LeetCode-132. 分割回文串 II难度:困难给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。返回符合要求的 最少分割次数 。示例 :输入:s = “aab”输出:1解释:只需一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。class Solution {public: int minCut(string s) { if(s.size() == 0)return 0; //记录字符串下标i-j是否是回文
C++多态、虚函数、虚函数表、编译期、运行期、静态、动态的理解 关于C++多态1. 多态分为静态多态和动态多态1.1 静态多态1.1.1函数重载1.1.2模板1.1.3静态多态总结1.2 动态多态:在运行时期才能决定函数行为1.2.1先讲一些储备知识,不然初学者听着迷糊1.2.2 多态的体现:1.2.3 动态的体现1. 多态分为静态多态和动态多态1.1 静态多态静态多态是编译期决定的:在编译期间就决定了行为,也就是在运行到静态多态的时候函数的执行流程都一样包括两种:函数重载和模板1.1.1函数重载函数重载:函数名相同且参数列表不同称为函数重载静态多态体现
C++程序编译过程 C++程序编译过程1.编译流程图2.预处理3.编译4.汇编5.链接1.编译流程图2.预处理编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下1、删除所有的#define,展开所有的宏定义。2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。3、处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。
计算机网络面试高频考点 计算机网络面试高频考点1.TCP三次握手过程①首先握手过程是建立在被动方处于监听状态。②客户端发送syn报文并随机一个序列号发送给服务器,此时客户端为syn_send状态,③服务器收到syn报文后,发送给客户端一个syn+ack报文,并随机一个序列号,确认序号为syn序号+1,发送后服务器会将这个连接添加到半连接队列,并处于syn_recv状态④客户端收到服务器发来的syn+ack报文后,返回一个ack确认报文,序列号为syn的确认序列号,确认号为syn序列号+1,客户端处于establishe
C++智能指针 智能指针一、Auto_ptr二、Unique_ptr三、Share_ptr四、Weak_ptr智能指针的提出是为了解决内存泄露问题的,实现方法是利用了类在生命周期结束会自动调用析构函数,在智能指针使用的时候智能指针本身不是一个指针,他只所以能用->访问出new的类型是它内部重载了->并返回了一个type*。一、Auto_ptr是最先出的智能指针,他再后来被弃用了有一个很重要的原因:他能够通过赋值语义将内存直接交给其他智能指针,这个特性很容易导致程序崩溃,并且这个特性不符合STL的复制构造函