第一个面试做准备
前端 (React 转换成 TypeScript)
问题与答案:
问: 你在将React组件转换为TypeScript时,如何处理props和state的类型定义?
答: 在将React组件转换为TypeScript时,我定义了详细的接口来类型化props和state。这有助于提前捕获潜在的类型错误,并使组件的使用更加清晰明确。
12345interface MyComponentProps { title: string; count: number;}
问: 请解释在React中使用TypeScript的优势有哪些?
答: TypeScript在React中的主要优势包括强类型系统,这帮助开发者在编译时捕捉错误;更好的协作和代码维护,通过明确的类型定义,新成员更易理解代码;以及丰富的IDE支持,如自动补全和代码导航,提高开发效率。
问: 在进行转换过程中,遇到了哪些挑战?你是如何解决这些问题的?
答: 最大的挑战是处理没有类型定义的第三方库。对此,我通过为这些库编写自定义的类型声明,或使用社区提供的@types包解决了问题。此外,学习TypeScript中高 ...
并查集
并查集
在讲并查集之前,我们先思考一个问题,假设幼儿园小班有六个小朋友,分别为小a,小b,小c,小d,小e,小f,
但并不是每个人都是朋友, 我们规定朋友的朋友也是朋友,例如小a和小b是朋友,小b和小c也是朋友,那么小c和
小a同样也是朋友。现在要求一共有几个朋友圈。 已知小a和小b是朋友,小d和小e是朋友,小e和小f是朋友。我们很
容易能够确认小a和小b是一个朋友圈,小d,小e以及小f是一个朋友圈,而小c自己一个人一个朋友圈。
因为人数很少,我们能够很轻易地判断有几个朋友圈,但当人数很多的时候呢,我们不能每个都去遍历,去数有多少
个朋友圈。这就需要我们本次的知识——并查集。
并查集我们通过构建树状结构来实现,在这里我们分析上面的例子,首先在条件未知的情况下,我们让每个人都自己
一个人为一个朋友圈,如下图:
在初始情况下,每个小朋友自己一个人为一个朋友圈,在上面我们说了,并查集通过树状结构实现,所以就需要根节点,
初始状态下,根结点就是他们本身。现在我们接入第一个条件,即小a和小b是朋友,能够确认的是把小a和小b连接起来,
但问题是如何连接——答案是分别寻找他们的根节点,然后把他们的 ...
二分查找
二分查找
二分查找又叫折半查找,需要注意的是二分查找需要数列是有序的,如果查找到需要的数,返回所在位置
,否则返回NULL。
如一个升序长度为7的数组a[7],分别为1,2,3,4,5,6,7,如下图:
如果查找大小为5的值所在的位置,过程如下:
首先设置两个变量,分别为left = 0,right = 6,left这个参数表示左边端点,right表示右边端点,
因为数组的下表是从0开始的,所以right = 6。
然后开始查找,查找left,right的平均值mid,即mid=(left + right)/2,然后把a[mid]与需要查找
的值5比较,若a[mid] < 5,则太小了,修改left的值,让left = mid + 1;若a[mid] > 5,则表明
查找的数值过大,这是right = mid - 1;若a[mid] = 5,则说明此时的mid即使5在数组中的位置。
所以第一次查找的mid =(0+6)/2= 3,a[mid] = a[3] = 4 < 5,更新left = mid+1。此时left和right
的位置如下图所示:
第二次查找mi ...
深度优先搜索和广度优先搜索
深度优先搜索(DFS)
顾名思义,深度优先搜素的就在于"深度"二字,通俗来讲,DFS就是从一个起始点开始,找到一个连接点进入
一直进入下去直到没有节点,若找到最后一个节点没有子节点且还存在点没有遍历,则回到上一个节点,继续
寻找节点,直到遍历完所有的点。
下图是一个无向图:
如上图所示,从节点1开始遍历,使用DFS算法,节点1有三个子节点,分别为节点2,3,4,因为这里我们没有定义
两个节点之间的距离,所以任意选择下一个节点,这里我们选择先进入节点2,如图所示:
到达节点2之后,与节点2相连的点为1,5,7,但需要注意的是不可能选择节点1,因为节点1已经走过了,所以我们要选择
节点5或者节点7,这里我们选择节点5,如下图所示:
到节点5的时候,发现节点5没有其他相连的节点了,节点2已经记录走过了,所以不能再走节点2。这个时候我们就要进行回溯,
回溯之后,我们又回到节点2,需要注意的是这里的回到节点2,是回到上一步,而不是在走一次节点2,可以理解为"撤回"操作。
这里为了方便理解,在图像里面我用箭头表示,但需要注意的是算法的原理并不是这样,是 ...
markdown 的基本语法
Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。 它使用易读易写
的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。因简洁、高效
、易读、易写,Markdown被大量使用,如Github、Wikipedia、简书等。
总体来说,MarkDown语法简单且容易上手。
Markdown语法
markdown的标题用 # 号来表示,通过不同的 # 号的数量,来判断是几级标题。
12$ # 一级标题$ ## 二级标题
Markdown 粗体,斜体,删除线的用法
粗体
Markdown 里粗体的表示方法为在需要加粗的词语前后各添加两个 ‘*’
1$ **粗体**
斜体
斜体的写法和粗体差不多,斜体是在词语前后只加一个’*’
1$ *斜体*
加粗倾斜
从上面可以看到,’ ** ‘是粗体,’ * ’ 是斜体,那么’***'就是加粗倾斜。
1$ ***加粗倾斜***
删除线
删除线是在词语前后添加两个’~~’
1$ ~~删除线~~
引用语法
Markdown 的用于语法用’>'来完成,如:
1$ > 这是 ...