
面试题
一把大锤子
这个作者很懒,什么都没留下…
展开
-
根据前序和中序、中序和后序构建二叉树
1、根据前序和后序构建二叉树思路:在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历序列中,根节点的值在序列的中间,左子树的节点的值位于根节点的值得左边,而右子树的节点的值位于根节点的值的左边。所以需要扫描中序遍历,才能找到根节点的值。既然已经分别找到了左、右子树的前序序列和中序遍历,我们可以用同样的方法去构建左右子树。我们可以用递归实现:struct TreeNode* Buynode(){ struct TreeNode* s = (struct Treenode*)mall原创 2020-08-10 20:34:06 · 1720 阅读 · 0 评论 -
二叉树的层次遍历
二叉树的层次遍历树的层次遍历如下图所示:依次打印[A B G C D H E F]算法描述:要想实现层次遍历,我们需要借助另一个数据结构「 队列 」。因为队列的特点是先进先出。利用这个特点,我们可以将已经访问过的结点的子节点存进队列里,实现每个层次的顺序不变。先是根节点入队,如果根节点不为空,就打印根节点。接着入根节点的左孩子和右孩子(先入左孩子,再入右孩子)。如上图所示,先入A,队列不为空就打印A,再入B和G,队列不为空,就打印B。接着入C和D。然后打印G。然后将H入队。C的左右子原创 2020-08-06 20:47:28 · 251 阅读 · 0 评论 -
前中后序遍历二叉树
前序遍历二叉树算法描述:是通过中序遍历二叉树算法描述:先访问这棵树,如果树为空,就跳出。如果树不为空,然后再访问这棵树的左孩子,如果左孩子为空,就退回到访问这棵树的父节点,然后再访问这棵树的右结点,如果右结点为空就回退到这棵树的父节点,然后接着向上后退。直到它的左右孩子都为空时就打印这个结点。我们就用到栈这个数据结构。比如一颗二叉树如下所示:我们先将这棵树的A结点入栈,然后访问它的左孩子B结点,然后将B结点入栈,接着访问B的左孩子C,将C入栈,访问C的左孩子,发现C的左孩子为空,我们就将C出栈,然原创 2020-08-05 20:41:21 · 2268 阅读 · 0 评论 -
【Linux】linux经典面试题目---其他类
一、程序加载到内存上有哪些段,运行时的临时变量放在哪?1、.text段指令段:通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。2、.data段数据段:通常是指用来存放程序中已始化且不为0的全局变量和静态变量的一块内存区域。数据段属于静态内存分配。常量也放在这个区域。3、.bss段数据段:通常是指用来存放程序中未初始化或者初始化为0的全原创 2020-08-03 19:51:54 · 192 阅读 · 0 评论 -
Linux经典面试题目---系统类
一、虚拟内存是什么为了防止内存不足导致死机,系统会在硬盘上开辟一块空间,linux是一个固定的分区,windows是一个文件,就叫作虚拟内存。系统会按照某种策略在适当的时候将物理内存中的部分数据移动到虚拟内存中,以节省物理内存。linux是当物理内存不够用的时候,使用虚拟内存。windows会将长时间未使用的数据移动到虚拟内存。二、用户态和内核态能解释一下吗1、当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代原创 2020-08-01 20:23:56 · 360 阅读 · 0 评论 -
【Linux】Linux经典面试题---网络部分
一、 OSI 七层网络协议模型和 TCP/IP 四层网络协议模型二、tcp 三次握手,四次挥手,为什么是三次?为什么是四次?time_wait 出现 在什么时候,它的作用是什么?TIME_WAIT 状态持续多长时间?三次握手,哪一个 阶段会抛出异常详见博客:TCP的三报文握手和四报文挥手相关面试题三、 http长连接和短连接的区别1、短连接连接->传输数据->关闭连接HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。也可以这样说:短连原创 2020-07-30 20:54:57 · 936 阅读 · 0 评论 -
【Linux】Linux面试经典题目---进程和线程部分
一、 进程和线程的区别进程与资源分配有关,进程有自己的独立地址空间,程序更加健壮,但是通信较麻烦,线程是资源调度的最小单位,是共享进程中的数据的,开销更小,通信更加便利。它们二者之间的区别为:1、进程与资源分配有关,进程有自己的独立地址空间,程序更加健壮,但是通信较麻烦,线程是资源调度的最小单位,是共享进程中的数据的,开销更小,通信更加便利。2、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)3、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表原创 2020-07-26 21:11:11 · 860 阅读 · 0 评论 -
【Linux】Linux面试的经典题目总结---命令部分
一、怎么查看都有哪些进程占用了端口?1、lsof -i用来显示符合条件的进程情况。lsof(list open files)是一个列出当前系统打开文件的工具。在root用户来执行lsof -i命令,如下图所示:lsof输出各列信息的意义如下:COMMAND:进程的名称PID:进程标识符USER:进程所有者FD:文件描述符,应用程序通过文件描述符识别该文件,如cwd、txt等TYPE:文件类型,如DIR、REG等DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点原创 2020-07-25 20:43:22 · 519 阅读 · 0 评论 -
单链表面试题之判断两个链表是否相交
题目描述:思路:如果head1 ==head1,直接返回head1 .否则,分别从head1,head2开始遍历两个链表分别获得长度lenA和lenB如果lenA >= lenB那么指针p由head开始向后移动lenA-lenB步。指针q=head2,接着p和q每次向后前进一步并比较p和q是否相等。如果相等就返回该结点。 否则两个链表没有交点代码实现:struct ListNode *getIntersectionNode(struct ListNode *headA, stru原创 2020-07-21 20:57:15 · 221 阅读 · 0 评论 -
C++中的设计模式之---工厂模式
工厂模式的分类1、核心功能:根据“需求”生产“产品”。不需要关注对象的生成过程。简化名称,便于使用。2、分类:实际上根据业务情景不同分为不同的实现方式。一般分3种:简单工厂模式(不属于23中模式中的一种)、工厂方法模式、抽象工厂模式。简单工厂模式1、核心思想:同一个“工厂”中生产多个“产品”。比如我们现在要得到苹果,香蕉,梨这三种水果。我们可以让他们在同一工厂中进行生产。只需要给他们对应得编号。1代表苹果,2代表香蕉,3代表梨。如下图所示:2、代码实现:class Fruit{public原创 2020-07-18 19:42:09 · 161 阅读 · 0 评论 -
用两个栈实现一个队列和用两个队列实现一个栈
用两个栈实现一个队列我们都知道栈的特点是”后进先出“,队列的特点是”先进先出“。两个栈实现一个队列也就是利用两个栈来实现队列的先进先出特点。思路:定义两个栈,stack1和stack2.将队列中的元素“abcd”压入stack1中,此时stack2为空;将stack1中的元素pop进stack2中,此时pop一下stack2中的元素,就可以达到和队列删除数据一样的顺序了;当stack2只pop了一个元素a时,satck1中可能还会插入元素e,这时如果将stack1中的元素e插入stack2中原创 2020-07-17 22:06:22 · 283 阅读 · 0 评论