自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 问答 (1)
  • 收藏
  • 关注

原创 一个有意思的问题dev 运行 Cpp 的方式

今天我室友问了我一个问题,如何关闭一个正在Windows上运行的有没有任何图形界面的问题。然后我叫他打开任务管理器,按照进程的名字查找,找到后直接结束进程就行了。随后我又想原理,任何程序在操作系统上运行都是以一个进程的方式运行的,你只要有一个可以管理进程的工具你就可以杀死任何非系统的核心进程,除非这是个病毒(我这句话很不严谨,勿喷,参考就好)。这个软件之所以没有任何界面,是因为没有调用操作系统的GUI接口而已。但是仍然改变不了它是一个进程的本质。不知道为什么,我突然之间想到一个问题,为什么我用 dev

2022-04-24 00:46:44 694

原创 算法刷题技巧总结

一、位运算技巧n&(n-1) 将正整数二进制最低位的 1 变成 0技巧案例:https://leetcode-cn.com/problems/counting-bits/solution/bi-te-wei-ji-shu-by-leetcode-solution-0t1i/

2022-01-17 21:44:11 345

原创 JDK动态代理

什么是代理,为什么需要代理?代理是一种设计模式。因此本文主要讲的就是Java中代理设计模式的实现。思想上简单的理解就是有两个类A和B, A是我们的被代理类,B是我们的代理类,我们要执行A的某个方法的时候我们不直接通过对象A调用,而是让 B 和 A实现同一个接口,当然A要执行的这个方法是从接口中重写过来的,因此B也有一个这样的方法,然后在B的这个方法中调用A的这个方法。被代理的就是A和B的公共方法。这个方法就是在接口中的方法大概的过程就是这样,代理最为我们熟知的应用场景就是Java的aop编程。静态

2022-01-11 17:55:32 244

原创 滑动窗口-5977. 最少交换次数来组合所有的 1 II

题目链接交换 定义为选中一个数组中的两个 互不相同 的位置并交换二者的值。环形 数组是一个数组,可以认为 第一个 元素和 最后一个 元素 相邻 。给你一个 二进制环形 数组 nums ,返回在 任意位置 将数组中的所有 1 聚集在一起需要的最少交换次数。示例 1:输入:nums = [0,1,0,1,1,0,0] 输出:1 解释:这里列出一些能够将所有 1 聚集在一起的方案:[0,0,1,1,1,0,0] 交换 1 次。 [0,1,1,1,0,0,0] 交换 1 次。 [1,1,0,0,0,0

2022-01-09 21:21:57 447

原创 数独暴力判重-5976. 检查是否每一行每一列都包含全部整数

题目链接对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效矩阵。给你一个大小为 n x n 的整数矩阵 matrix ,请你判断矩阵是否为一个有效矩阵:如果是,返回 true ;否则,返回 false 。示例 1:输入:matrix = [[1,2,3],[3,1,2],[2,3,1]] 输出:true 解释:在此例中,n = 3,每一行和每一列都包含数字 1、2、3 。 因此,返回 true 。 示例 2

2022-01-09 21:13:01 496

原创 二分细节-剑指 Offer 11. 旋转数组的最小数字

题目链接这一题有一个细节要注意,必须比较最右边的端点,否则 mid 的元素值和 right 的元素值相等的时候不好缩小区间。因为当right > left 的时候 mid 的值是肯定小于 right 的,这样right–才能保证不会缩过头了,因为right前面至少有一个还能满足要求就是mid, 可以大胆的往前缩。class Solution {public: int minArray(vector<int>& numbers) { int left =

2022-01-07 00:11:41 472

原创 二分查找-33. 搜索旋转排序数组-一句话点透

题目链接整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为[nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …,nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一

2022-01-07 00:04:24 71

原创 位运算技巧-异或预算找出两个出现奇数次的数

该技巧就是将所有的数进行异或,因为其他的数字出现次数为偶数次,所以自己抵消为零了,剩下的结果就是两个要找的数的异或结果,因为这是两个不同的数,所以必然有不相同的位,我们任意找出一个不相同的位就可以将这些数分为两组怎么找出不同的一位: 根据最后异或的结果,结果上为1的位就是两个要求的数不同的位,这是异或的性质。怎么分组: 可以通过与运算将数分成两组,分成之后两个不同的数必然不在同一组,因为他们在我们选取的这一位上是不同的。而相同的数必然可以分到同一组。最后两组分别异或运算得到的两个数就是结果。因为相同的

2022-01-06 15:36:31 263

原创 双指针法-167. 两数之和 II - 输入有序数组

题目链接给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <=answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。示例 1:输入:numbers = [2,7,11,1

2022-01-05 22:21:34 59

原创 二分查找-第一个错误的版本

题目链接题目内容你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例 1:输入:

2022-01-05 22:15:39 59

原创 双指针法-977. 有序数组的平方

题目链接题目给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100] 示例 2:输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]提示:1 <= nums.length <= 104-104 &

2022-01-04 22:32:58 86 1

原创 反射调用的缺点和优化

缺点反射因为反射基本上是以解释执行的方式运行的,所以性能非常慢。优化Method、 Field 和 Constructor 对象都有 setAccessible() 方法,setAccessible 的作用是启动和禁用访问安全检查的开关,传递的参数为 true 表示关闭检查。...

2022-01-04 16:53:31 283

原创 算法笔记-二分法求平方根

题目链接69. Sqrt(x)做这一题是看着carl的代码随想录二分算法的专题过来的。因为事先知道是二分算法,所以思路比较清晰,但是因为总是没考虑到细节,错了很多次。易错点数据范围,因为题目给的数字可能是最大的整形数字,如果相乘就会溢出,一定要考虑数据范围,可以使用 long 或者 long lon如果没有找到刚好为整数的平方根,就要从 left 和 right 中找到最大的符合题目条件的一个。其实这里是可以优化的。可优化点这是我的代码,非常的臃肿class Solution {pub

2022-01-03 21:59:51 547

原创 信号量机制解决进程互斥问题

整形信号量机制用户可以对操作系统提供的一对原语来对整形信号量进行操作wait()和signal(),这个信号量只能进行初始化操作、P操作、V操作,不是一般的整形原语是不能被中断的就是用来解决双标志法不能一气呵成的缺点缺点: 还是不能解决让权等待的问题记录型信号量机制优点: 解决了让权等待的问题...

2021-12-23 19:58:03 269

原创 进程互斥的硬件实现方法

中断屏蔽方法就是在一个进程开始访问临界区到结束访问的时间段内都不允许中断,就是不允许进程切换。优点: 简单高效缺点: 不适用于多处理机;只适用于操作系统的内核进程,不适用于用户进程(因为开关中断指令只能运行在内核态,如果能让用户随意使用会很危险)TestAndSet 指令或者TestAndSetLock(TSL指令)用硬件实现,执行的过程中只能一气呵成,不能中断。这个指令大致做的就是给临界区加锁(无论之前是否加锁),然后返回加锁前的加锁状态。优点: 实现简单, 适用于多处理机环境缺点: 不满足

2021-12-23 19:05:32 371

原创 进程互斥的软件实现方法

进程互斥的软件实现方法1. 单标志法一个进程通过改变标志来把临界区让给另一个进程,如果进程没有交让就死了。另一个进程就永远卡死了。2. 多标志先检查法每一个标志对应一个进程,当一个进程想要使用临界区的时候就先判断除了自己的标志之外的标志是否为true,为true就一直循环知道循环退出,判断完所有其他标志后,就将自己的标志设为true,然后再访问临界区,访问完临界区之后就将自己的标志设为false。缺点: 在最后一次循环结束的瞬间,进程时间片到了,可能有另外一个进程刚好也想

2021-12-23 18:32:14 516

原创 对于进程同步和异步的理解

多进程并发执行具有异步的特性进程异步就是指一个以上的进程在并发执行时具有的异步特型,就比如说两个进程之间指令的执行顺序是不确定的,具有很强的随机性。举个例子现在有两个并发执行的进程 A 和 B, 各自都有n条指令需要执行。然而,我的CPU很垃圾,只能在同一时刻执行一条语句,就产生了如下几个问题:是先执行A进程的第一条语句还是B进程的第一条语句?显然这是未知的。假如先执行的是A进程的第一条语句,那我要执行到第几条语句才停下来再去执行B的语句呢?(肯定不能让A进程执行完所有的语句再转去执行B进

2021-12-19 20:48:59 1551

原创 操作系统运行机制和体系结构笔记

操作系统的运行机制在设计操作系统为了方便安全问题的设计将 CPU 指令分为两种,特权指令 和 非特权指令。在操作系统管辖下的CPU又分为两种状态,核心态和用户态,特权指令只能在核心态下执行,所以当需要执行特权指令的时候操作系统需要将CPU由 用户态 切换为 核心态 ,这里会有比较大的开销什么是内核?内核其实是指计算机上 最底层的软件,实现操作系统内核功能的那些程序就称为 内核程序, 一般是一些非常接近硬件的程序。所谓的微内核就是把一些内核程序从内核中移除,减少内核的规模,而这些可以被移除的内核程序

2021-12-15 15:16:43 366

原创 二分法遍历技巧,再也不用纠结

二分法查找技巧,再也不用纠结头疼了

2021-12-14 23:04:13 4021

原创 Java反射入门

Java反射的最基本用法

2021-12-12 15:56:10 321

原创 C语言递归函数——汉诺塔问题笔记

C语言递归函数——汉诺塔问题笔记学C的时候老师根本没讲过递归,当时自己也没把它当回事,但是递归在算法中的地位实在太重要了。于是翻了翻C课本上的递归,书上讲的不多,但是一个经典的汉诺塔问题就让我伤透了脑筋。看了七八个钟头还是一头雾水。嘿嘿,先把它抄下来,想起来的时候再来看看。三个塔,n个盘子,从塔A移动到塔B,只能大的在下小的在上,每次只能移动一个。书上这样解释 :编程思路: 这是一个使用...

2021-12-11 22:06:00 154

原创 操作系统(页表)

什么是分页,什么是页表?

2021-12-11 21:40:51 2145

原创 springboot项目打成jar包后无法显示jsp

springboot项目打成jar包后无法显示jsp的解决方案超级头疼一直显示去网上找了很多解决办法,但不是关键问题,最后自己误打误撞,总算解决了,汇总分享一下1.更换正确的打包插件这里关键的就是这个版本号,一定要是这个版本,很多博主说是因为springboot官方推荐的前端模板是themeleaf,能与jsp兼容的打包插件只有这个版本。<plugin> <groupId>org.springframework.boot</grou

2021-07-21 22:22:12 1128

原创 LeetCode四数相加问题(C语言、指针、hash(哈希)表)

LeetCode四数相加问题(C语言)题目描述给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。例如:输入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [

2020-11-28 12:52:25 184

原创 Apple Tree树状数组、前向星、DFS序(C语言)

Apple Tree树状数组、前向星、DFS序(C语言)题目输入值第一行包含一个整数Ñ(Ñ ≤100,000),这是树中的叉的数量。接下来的N -1行分别包含两个整数u和v,这意味着fork u和fork v通过分支连接。下一行包含的整数中号(中号≤100,000)。以下中号行,每行包含一个消息,该消息或者是“ Ç X ”,这意味着苹果上叉存在X已经变了。例如,如果叉子上有一个苹果,则卡卡(Kaka)摘下;否则,空叉上会长出一个新苹果。或“ Q x ”,表示查询叉子x上方子树中的苹果数量,

2020-11-26 23:48:06 171

原创 贪心算法实例 —— 事情安排

贪心算法实例 —— 事情安排问题:本关任务:小张最近很忙,记事本里有n件事情等待处理,每件事处理完毕后,能得到不同的奖励(或报酬),而且都有一个截止日。一件事处理需要一整天时间,并且小张不能同时干其他事情。请你替小张安排一个事情处理的时间表,争取获得最大的奖励(或报酬)。测试输入:第一行输入整数n,表示n个事情。随后输入n行,每行包括一个事情的截止日(不大于n)和处理收益。测试输出:输出最大的总收益。前言:这是老师布置的一个作业题,我想了很久,没想出来,去网上一搜,找到的代码既没思路又没注释,花

2020-10-31 16:53:24 2269

原创 为二维指针动态分配内存,使之成为二维数组的首地址(C语言)

为二维指针动态分配内存,使之成为二维数组的首地址暂时只存代码,方法说明有空再补充分配void malloc2Dpoint(T** &p,int n,int m){ p = (T**)malloc(sizeof(T*)*n); for(int i = 0; i<n; i++){ T *q = (T*)malloc(sizeof(T)*m); p[i] = q; }}回收释放void free2Dpoint(T** p,int m){ for(int i = 0; i

2020-10-25 18:43:40 431

空空如也

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

TA关注的人

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