c++常见面试题整理-编程思维

1. CPP编译链接过程 2. new和malloc区别,delete和free区别 3. 指针和引用 4. 左值引用和右值引用 5. const 6. 函数重载 7. 函数调用栈帧开辟过程 8. inline 内联函数 9. static关键字 10. 定义指向类的成员的指针 11. this指针 12. 常成员方法 13. 函数模板与类模板 函数模板 类模板 用类模板实现一个顺序栈 用

【leetcode】64. 最小路径和-编程思维

题目(链接) 给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→1→1 的总和最小。 示例 2: 输入:grid = [[1,2,3],[4,5,6]] 输出:12 提示:

【leetcode】198. 打家劫舍-编程思维

题目(链接) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。 示例 1: 输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1)

【leetcode】768. 最多能完成排序的块 ii-编程思维

题目(链接) arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 我们最多能将数组分成多少块? 示例 1: 输入: arr = [5,4,3,2,1] 输出: 1 解释: 将数组分成2块或者更多块,都无法得到所需的结果。 例如,分成 [5, 4], [3, 2, 1] 的结果是 [4, 5,

【leetcode刷题】69. x 的平方根-编程思维

69.x的平方根(点击跳转LeetCode) 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842...,   由于返回类型是整数,小数部分将被舍去。 题解 语言:C++

【leetcode刷题】744. 寻找比目标字母大的最小字母-编程思维

744. 寻找比目标字母大的最小字母(点击跳转LeetCode) 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。 在比较时,字母是依序循环出现的。举个例子: 如果目标字母target = 'z'并且字符列表为letters = ['a', 'b'],则答案返回'a' 示例: 输入: lett

【leetcode刷题】剑指offer 48.最长不含重复字符的子字符串-编程思维

剑指Offer 48.最长不含重复字符的子字符串(点击跳转LeetCode) 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

【leetcode刷题】239.滑动窗口最大值-编程思维

239.滑动窗口最大值(点击跳转LeetCode) 给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例 1: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置

【leetcode】120. 三角形最小路径和-编程思维

题目(链接) 给定一个三角形triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标 + 1的两个结点。也就是说,如果正位于当前行的下标i,那么下一步可以移动到下一行的下标i或i + 1。 示例 1: 输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]] 输出:11

【leetcode】300. 最长递增子序列-编程思维

题目(链接) 给你一个整数数组nums,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为4。 示例 2: 输入

【leetcode】53. 最大子数组和-编程思维

题目(链接) 给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2: 输入:nums = [1] 输出:1 示例 3: 输入:nums = [5,4,

【leetcode】62. 不同路径-编程思维

题目(链接) 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例1: 输入:m = 3, n = 7 输出:28 示例2: 输入:m = 3, n = 2 输出:3 解释: 从左上角开始,总共有 3 条路径可以到达右下角

【leetcode】63. 不同路径 ii-编程思维

题目(链接) 一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用1和0来表示。 示例1: 输入:obstacleGrid = [[0,0,0],[0,1,0]

恶意软件开发(一)reverse shell-编程思维

什么是Reverse Shell? 反向 Shell(Reverse Shell)是指远程攻击者在攻击成功后,通过建立一个反向连接,让受害者的机器连接到攻击者的机器上,从而达到控制受害者机器的目的。通常情况下,攻击者需要在受害者机器上植入一个恶意程序,使得该程序能够在后续与攻击者机器建立连接并接受攻击者的指令。反向 Shell 通常被用于在目标机器上执行命令、获取敏感数据、植入其他恶意程序等操作

恶意软件开发(二)经典代码注入流程-编程思维

什么是代码注入?为什么需要代码注入? 代码注入是指将一段恶意代码注入到正在运行的进程中,以便实现对该进程的控制和操作。通过代码进程注入,攻击者可以在运行中的进程中执行自己的代码,从而可以窃取敏感信息、控制系统或执行其他恶意行为。 攻击者可以使用各种技术来进行代码进程注入攻击,包括使用已知的漏洞、使用API hooking和DLL注入等技术。这些技术可以让攻击者将自己的代码注入到正在运行的进程中,

恶意软件开发(三)经典dll注入流程-编程思维

什么是dll注入? DLL注入允许将外部DLL文件加载到进程中并运行其中的代码。DLL(动态链接库)是一种可重用的代码库,它包含在多个程序中使用的函数、类、变量和其他程序代码。DLL注入技术可以通过将DLL文件注入到目标进程的地址空间中,从而允许程序能够访问其中的代码和数据。DLL注入通常用于许多不同的目的,包括增强程序的功能,修改程序的行为,以及执行恶意活动,如间谍软件或病毒。在某些情况下,D

恶意软件开发(四)通过查找进程名进行dll注入-编程思维

通过进程名查找PID 当我们编写注入器的时候,肯定是希望直接通过进程名进行注入,而不是像上一篇笔记一样通过手动输入PID进行查找。 通过进程名查找PID的步骤如下: (1)创建系统中所有进程的快照 (2)保存系统快照中遇到的第一个进程的信息 (3)循环检索系统中进程的信息是否匹配需要查找的进程名 这里涉及到的函数有: (1)CreateToolhelp32Snapshot:用于创建一个进程或

恶意软件开发(五)linux shellcoding-编程思维

什么是shellcode? Shellcode通常指的是一段用于攻击的机器码(二进制代码),可以被注入到目标计算机中并在其中执行。Shellcode 的目的是利用目标系统的漏洞或弱点,以获取系统控制权或执行恶意操作。它的名称来自于它经常被注入到攻击者编写的恶意软件的 shell 环境中,以便让攻击者可以更轻松地与目标系统进行交互和控制。 Shellcode通常是用汇编语言编写的,因为它需要直接操

c++项目实战之演讲比赛流程管理系统-编程思维

演讲比赛流程管理系统 1. 演讲比赛程序需求 1.1 比赛规则 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如 10001 ~ 10012 比赛方式:分组比赛,每组6个人 第一轮分为两个小组,整体按照选手编号进行抽签后顺序演讲 10个评委分别给每名选手打分,去除最高分和最低分,求得平均分为本轮选手的成绩 当小组