
面试指南针
文章平均质量分 53
源码数据
这个作者很懒,什么都没留下…
展开
-
C和C++面试 剪绳子
这里 6 同样可以拆成 6=2+2+2,但是 3(n - 3) - 2(n - 2) = n - 5 >= 0,在 n>=5 的情况下将绳子拆成 3 比拆成 2 效果更好。继续拆成更大的绳子可以发现都比拆成 2 和 3 的效果更差,因此我们只考虑将绳子拆成 2 和 3,并且优先拆成 3,当拆到绳子长度 n 等于 4 时,也就是出现 3+1,此时只能拆成 2+2。将绳子拆成 5 和 n-5,因为 5=2+3,而 5原创 2024-07-24 07:30:00 · 332 阅读 · 0 评论 -
机器人的运动范围
回溯是深度优先搜索的一种特例,它在一次搜索过程中需要设置一些本次搜索过程的局部状态,并在本次搜索结束之后清除状态。而普通的深度优先搜索并不需要使用这些局部状态,虽然还是有可能设置一些全局状态。例如,当 k 为 18 时,机器人能够进入方格 (35,37),因为 3+5+3+7=18。但是,它不能进入方格 (35,38),因为 3+5+3+8=19。一个机器人从坐标 (0, 0) 的格子开始移动,每一次只能向左右上下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于 k 的格子。原创 2024-07-23 15:45:00 · 503 阅读 · 0 评论 -
C和C++矩阵中的路径
使用回溯法(backtracking)进行求解,它是一种暴力搜索方法,通过搜索所有可能的结果来求解问题。回溯法在一次搜索结束时需要进行回溯(回退),将这一次搜索过程中设置的状态进行清除,从而开始一次新的搜索过程。例如下图示例中,从 f 开始,下一步有 4 种搜索可能,如果先搜索 b,需要将 b 标记为已经使用,防止重复使用。在这一次搜索结束之后,需要将 b 的已经使用状态清除,并搜索 c。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向上下左右移动一个格子。原创 2024-07-23 11:00:00 · 360 阅读 · 0 评论 -
旋转数组的最小数字
如果数组元素允许重复,会出现一个特殊的情况:nums[l] == nums[m] == nums[h],此时无法确定解在哪个区间,需要切换到顺序查找。将旋转数组对半分可以得到一个包含最小元素的新旋转数组,以及一个非递减排序的数组。新的旋转数组的长度是原数组的一半,从而将问题规模减少了一半,这种折半性质的算法的时间复杂度为 O(log。把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。原创 2024-07-22 17:30:00 · 285 阅读 · 0 评论 -
C和C++变态跳台阶
一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级…它也可以跳上 n 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。同样,跳上 n 级台阶,可以从 n-1 级跳 1 级上去,也可以从 n-2 级跳 2 级上去…跳上 n-1 级台阶,可以从 n-2 级跳 1 级上去,也可以从 n-3 级跳 2 级上去…所以 f(n) 是一个等比数列。原创 2024-07-22 10:30:00 · 228 阅读 · 0 评论 -
C和C++面试题-跳台阶
跳 n 阶台阶,可以先跳 1 阶台阶,再跳 n-1 阶台阶;或者先跳 2 阶台阶,再跳 n-2 阶台阶。一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。原创 2024-07-22 11:00:00 · 228 阅读 · 0 评论 -
面试题-矩形覆盖
要覆盖 2*n 的大矩形,可以先覆盖 2*1 的矩形,再覆盖 2*(n-1) 的矩形;或者先覆盖 2*2 的矩形,再覆盖 2*(n-2) 的矩形。而覆盖 2*(n-1) 和 2*(n-2) 的矩形可以看成子问题。我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?原创 2024-07-21 11:15:00 · 265 阅读 · 0 评论 -
用两个栈实现队列
in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,先进入的元素先退出,这就是队列的顺序。用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。原创 2024-07-21 09:30:00 · 258 阅读 · 0 评论 -
用两个栈实现队列
in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,先进入的元素先退出,这就是队列的顺序。用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。原创 2024-07-21 17:00:00 · 320 阅读 · 0 评论 -
二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。我们先来回顾一下中序遍历的过程:先遍历树的左子树,再遍历根节点,最后再遍历右子树。所以最左节点是中序遍历的第一个节点。① 如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点;② 否则,向上找第一个左链接指向的树包含该节点的祖先节点。原创 2024-07-20 13:00:00 · 279 阅读 · 0 评论 -
重建二叉树
前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分为树的左子树中序遍历结果,右部分为树的右子树中序遍历的结果。然后分别对左右子树递归地求解。根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。原创 2024-07-20 08:00:00 · 365 阅读 · 0 评论 -
从尾到头打印链表
要逆序打印链表 1->2->3(3,2,1),可以先逆序打印链表 2->3(3,2),最后再打印第一个节点 1。而链表 2->3 可以看成一个新的链表,要逆序打印该链表可以继续使用求解函数,也就是在求解函数中调用自己,这就是递归函数。为了能将一个节点插入头部,我们引入了一个叫头结点的辅助节点,该节点不存储值,只是为了方便进行插入操作。不要将头结点与第一个节点混起来,第一个节点是链表中第一个真正存储值的节点。头插法顾名思义是将节点插入到头部:在遍历原始链表时,将当前节点插入新链表的头部,使其成为第一个节点。原创 2024-07-19 15:00:00 · 413 阅读 · 0 评论 -
面试笔记-替换空格
② 令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。P1 和 P2 从后向前遍历,当 P1 遍历到一个空格时,就需要令 P2 指向的位置依次填充 02%(注意是逆序的),否则就填充上 P1 指向字符的值。从后向前遍是为了在改变 P2 所指向的内容时,不会影响到 P1 遍历原来字符串的内容。因为一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符。③ 当 P2 遇到 P1 时(P2原创 2024-07-19 10:45:00 · 316 阅读 · 0 评论 -
二维数组中的查找
该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来快速地缩小查找区间,每次减少一行或者一列的元素。当前元素的查找区间为左下角的所有元素。给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。要求时间复杂度 O(M + N),空间复杂度 O(1)。其中 M 为行数,N 为 列数。原创 2024-07-18 09:09:35 · 192 阅读 · 0 评论 -
数组中重复的数字
对于这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到第 i 个位置上进行求解。在调整过程中,如果第 i 位置上已经有一个值为 i 的元素,就可以知道 i 值重复。在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。原创 2024-07-18 09:08:51 · 325 阅读 · 0 评论 -
vue3使用jsx渲染以及注意点
【代码】vue3使用jsx渲染以及注意点。原创 2024-03-19 21:49:17 · 532 阅读 · 0 评论 -
大厂面试--优化机制
[2020.01.02更新] link和@import的是什么?有什么区别?[2021-01-14 更新] CSS方式实现一个不知道宽高的 div 居中都有哪几种方法?[2021-01-16 更新] CSS 伪类与伪元素的区别?[2021-02-06 更新] 说一下盒模型的区别?介绍一下标准的css盒模型? border-box和content -box有什么区别?[2021-02-23 更新] BFC是什么?触发BFC的条件是什么?有哪些应用场景?[2021-02-24 更新] 说一下什么是重绘重排,哪些原创 2024-03-25 10:30:00 · 350 阅读 · 0 评论 -
大厂面试--列举并解释一下 http的所有请求方法?
HTTP/1.1定义的请求方法有8种: GET、POST、 PUT、 DELETE、PATCH、 HEAD、OPTIONS、TRACE。最常的两种GET和POST,如果是RESTful接口的话- -般会 用到GET、POST、 DELETE、 PUT。原创 2024-03-24 15:00:00 · 325 阅读 · 0 评论 -
大厂面试--说一下HTTP的缓存策略,有什么区别,分别解决了什么问题?
浏览器每次发起请求时,现在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存;否则,则向服务器发起请求并携带缓存标识。 根据是否需要向服务器发起HTTP请求,将缓存过程划分为两个部分:强制缓存和协商缓存,强制缓存优先于协商缓存。原创 2024-03-24 12:00:00 · 307 阅读 · 0 评论 -
大厂面试--webpack新特性详解
资源模块;moduleIds & chunkIds 的优化;移除Node.js的polyfill;更强大的tree-shaking;持久化缓存提高性能;Module Federation 模块联邦;Module Federation是为了解决独立应用之间代码共享问题。可以在项目内动态加载其他项目的代码,同步可以共享依赖。通过细化功能模块、组件复用、共享第三方库、runtime dependencies线上加载npm包等,可以更好的服务于多页应用、微前端等开发模式。原创 2024-03-23 16:15:00 · 900 阅读 · 0 评论 -
大厂面试--Vue计算属性和普通属性的区别?
如果声明的计算属性计算量非常大的时候,而且访问量次数非常多,改变的时机却很小,那就需要用到computed;缓存会让我们减少很多计算量。原创 2024-03-22 13:30:00 · 337 阅读 · 0 评论 -
大厂面试--[Vue&React] 对虚拟DOM的理解?虚拟DOM主要做了什么?虚拟DOM本身是什么?
从本质上讲,Virtual Dom是一个Javascript对象,通过对象的方式来表示DOM结构。将页面的状态抽象为JS对象的形式,配合不同的渲染工具,将使跨平台渲染成为可能。通过事物处理机制,将多次DOM修改的结果一次性的更新到页面上,从而有效的减少页面渲染的次数,减少修改DOM的重绘重排次数,提高渲染性能 Virtual Dom是对DOM的抽象,这个对象是更加轻量级的对DOM的描述。原创 2024-03-22 12:00:00 · 560 阅读 · 0 评论 -
大厂面试--使用Typescript 的优势有哪些?
【代码】大厂面试--使用Typescript 的优势有哪些?原创 2024-03-21 17:00:00 · 393 阅读 · 0 评论 -
大厂面试-- [Vue&React] 对虚拟DOM的理解?虚拟DOM主要做了什么?虚拟DOM本身是什么?
从本质上讲,Virtual Dom是一个Javascript对象,通过对象的方式来表示DOM结构。将页面的状态抽象为JS对象的形式,配合不同的渲染工具,将使跨平台渲染成为可能。通过事物处理机制,将多次DOM修改的结果一次性的更新到页面上,从而有效的减少页面渲染的次数,减少修改DOM的重绘重排次数,提高渲染性能 Virtual Dom是对DOM的抽象,这个对象是更加轻量级的对DOM的描述。原创 2024-03-21 12:00:00 · 343 阅读 · 0 评论 -
大厂面试--是否熟悉Node, 主要做过哪些业务,平时用过什么包?
Node是一个让Javascript运行在服务端的开发平台,它让Javascript成为了与PHP、Python、Perl、Ruby等服务器语言平起平坐的脚本语言。目前Nodejs已发展成一个成熟的开发平台,吸引了许多开发者。有许多大型高流量网站都采用Nodejs进行开发,此外,开发人员还可以使用它来开发一些快速移动Web框架。原创 2024-03-20 16:45:00 · 233 阅读 · 0 评论 -
大厂面试-- javascript中回调函数和任务队列的区别?
不进入主线程,进入任务队列的任务。只有当主线程上的同步任务执行完成后,主线程会读取任务队列中的任务,开始异步执行。任务队列中的事件包括IO设备的事件、用户产生的事件。 任务队列是一个事件的队列,I0设备完成-项任务后,就在队列中添加一个事件,表示相关的异步任务可以进入执行栈了。 回调函数是作为参数传给另一个函数的函数,这个函数会在另-个函数执行完成后执行。异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数。 主线程上排队执行的任务,前一个任务执行完成后才能执行下一个任务。原创 2024-03-20 14:30:00 · 193 阅读 · 0 评论 -
大厂面试--说下call、apply、bind三者的区别、应用以及内部实现?
怎么利用call、apply来求一个数组中最大或者最小值如何利用call、apply来做继承apply、call、bind的区别和主要应用场景。原创 2024-03-20 09:00:00 · 502 阅读 · 0 评论 -
大厂面试指南--什么是防抖和节流,说一下原理、区别和应用,并用Javascript进行实现
使用时间戳,当触发事件的时候,我们取出当前的时间戳,然后减去之前的时间戳(最一开始值设为0 ),如果大于设置的时间周期,就执行函数,然后更新时间戳为当前的时间戳,如果小于,就不执行。当触发 事件的时候,我们设置一个定时器,再触发事件的时候,如果定时器存在,就不执行,直到定时器执行,然后执行函数,清空定时器,这样就可以设置下个定时器。**原理:**规定在一个单位时间内,只能触发一次函数。**原理:**在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。原创 2024-03-19 21:40:45 · 1465 阅读 · 0 评论