Java常见八股-(1.Java基础篇)
Java常见八股-(2.Java高级篇)
Java常见八股-(3.MySQL篇)
Java常见八股-(4.前端篇)
Java常见八股-(5.框架篇)
目录
一、算法与数据结构
1. 算法
1.1你知道哪些算法,说下你了解的排序算法
1.2谈一下递归
1.3栈和队列的区别
1.4二叉排序树了解吗
1.5在堆中查找一个数字用什么方法可以快速查到
1.6递归和迭代的区别
2. 数据结构
2.1什么是堆和栈,说一下堆栈的区别?
2.2用过什么树结构
2.3 B树,B+树哪个用的比较多
二、实施
1. Linux
1.1谈一下对Linux的了解
1.2 Linux如何查看文件内容
1.3 Linux如何删除文件内容
1.4 Linux切换目录命令
1.5 Linux创建文件命令
1.6 linux中搜索文件命令
1.7 Linux的部署
1.8 linux 中 vim
1.9 Linux文件分页查看指令
一、算法与数据结构
1. 算法
1.1你知道哪些算法,说下你了解的排序算法
1、冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2、选择排序(Selection Sort)
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
3、插入排序(Insertion Sort)
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
4、希尔排序(Shell Sort)
1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。
5、归并排序(Merge Sort)
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
6、快速排序(Quick Sort)
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
7、堆排序(Heap Sort)
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
8、计数排序(Counting Sort)
计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
9、桶排序(Bucket Sort)
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。
10、基数排序(Radix Sort)
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。
1.2谈一下递归
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
1.3栈和队列的区别
栈(Stack)和队列(Queue)是两种常见的线性数据结构.
主要区别:
操作原则:栈遵循后进先出(LIFO),而队列遵循先进先出(FIFO)。
操作位置:栈的操作只在栈顶进行,而队列的插入操作在队尾进行,删除操作在队头进行。
应用场景:栈常用于处理需要反向处理的数据运算,如递归调用和表达式求值;队列则更多用于消息传递和任务调度等场景。
1.4二叉排序树了解吗
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree)或二叉搜索树,是一种数据结构,主要用于存储数据并支持高效的查找、插入和删除操作。
二叉排序树是一种特殊的二叉树,满足以下性质:
- 空树:若左子树不空,则左子树上所有结点的值均小于根结点的值。
- 右子树:若右子树不空,则右子树上所有结点的值均大于根结点的值。
- 递归性质:左、右子树也分别为二叉排序树
1.5在堆中查找一个数字用什么方法可以快速查到
堆排序
1.6递归和迭代的区别
定义和结构
- 递归:递归是一种通过函数自己调用自己的编程技巧。它通常将一个大问题分解为更小的子问题,通过不断调用自身来解决。递归算法包括递归定义和基本情况,递归函数会反复调用自身,每次处理一个子问题,直到达到基本情况为止。
- 迭代:迭代是通过循环结构重复执行某段代码,每次迭代使用上一次的结果作为下一次的初始值。迭代不需要函数调用栈空间,因此通常比递归更高效。
时间复杂度
- 递归:递归的时间复杂度通常较高,因为每次函数调用都会增加栈空间的开销。对于一些递归算法,随着问题规模的增加,递归调用的次数可能会呈指数增长,导致时间复杂度急剧上升。
- 迭代:迭代的时间复杂度通常较低,因为它不需要额外的函数调用开销。迭代通过循环结构逐步逼近目标,适合处理大规模数据问题。
适用场景
- 递归:递归适合解决那些可以分解成相似子问题的问题,如树形结构的遍历、计算斐波那契数列等。递归的优点在于代码简洁,但缺点是可能导致栈溢出,特别是在深度递归的情况下。
- 迭代:迭代适合处理需要逐步逼近目标的问题,如计算数组中所有数字的和。迭代的优点是效率高、稳定,缺点是代码可能较冗长,不易理解。
优缺点总结
- 递归:
- 优点:代码简洁、易于理解。
- 缺点:效率较低,可能导致栈溢出,特别是在深度递归的情况下。3
- 迭代:
- 优点:效率高、稳定,适合处理大规模数据问题。
- 缺点:代码较长,不易理解
2. 数据结构
2.1什么是堆和栈,说一下堆栈的区别?
功能方面:堆是用来存放对象的,栈是用来执行程序的。
共享性:堆是线程共享的,栈是线程私有的。
空间大小:堆大小远远大于栈
2.2用过什么树结构
在编程和计算机科学中,常用的树结构包括二叉树、二叉搜索树、AVL树、红黑树、B-tree等。这些树结构各有其特点和适用场景。
二叉树
二叉树是最基础的树结构之一,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树有多种类型,包括完全二叉树、满二叉树和平衡二叉树等。二叉树在各种算法中都有广泛应用,例如在堆排序和优先队列中12。
二叉搜索树
二叉搜索树是一种特殊的二叉树,其每个节点的左子树上的所有节点值都小于该节点的值,而右子树上的所有节点值都大于该节点的值。这种结构使得在二叉搜索树中查找、插入和删除节点变得非常高效。AVL树和红黑树都是自平衡的二叉搜索树,它们通过保持树的平衡来优化查找、插入和删除操作的效率13。
AVL树
AVL树是一种自平衡的二叉搜索树,其每个节点的左子树和右子树的高度最多相差1。为了保持平衡,当插入或删除节点时,可能需要通过旋转节点来重新平衡树。AVL树的查找、插入和删除操作的平均时间复杂度为O(log n)13。
红黑树
红黑树也是一种自平衡的二叉搜索树,每个节点都有颜色属性,可以是红色或黑色。红黑树的平衡特性保证了其高效的查找、插入和删除操作。红黑树的性质包括根节点是黑色、每个叶节点(NIL或空节点)是黑色、红色节点的子节点必须是黑色等13。
B-tree
B-tree是一种多路平衡搜索树,适用于磁盘或其他直接访问辅助设备。B-tree能够保持数据有序,并且广泛应用于数据库和文件系统中。
2.3 B树,B+树哪个用的比较多
B+树
B+树是B树的变体,是一种自平衡的树数据结构,在数据库系统中使用得更为广泛,B+树中所有实际数据都存储在叶子节点中,而非叶子节点仅用于索引。这种设计使得B+树在处理大量数据时能够显著提高查询效率,尤其是在范围查询方面表现优异。B+树的叶子节点之间通过链表连接,便于区间查找和遍历。因此,B+树广泛应用于关系型数据库的索引
二、实施
1. Linux
1.1谈一下对Linux的了解
一种支持多用户,多任务,多平台,内核免费的操作系统。
1.2 Linux如何查看文件内容
文件内容不足一页可以用cat
两页以上建议使用more或less
查看前几行用head,查看后几行用tail
从最后一行开始查看用tac
1.3 Linux如何删除文件内容
利用vi file.txt打开文件进行编辑
按下"i"键进入编辑模式,然后选择要删除的内容并按下"x"键删除
完成后按下"Esc"键退出编辑模式,再输入":wq"保存并退出
1.4 Linux切换目录命令
cd
1.5 Linux创建文件命令
touch
1.6 linux中搜索文件命令
which搜索可执行文件
whereis搜索可执行文件,源文件,帮助文档
locate和find可以搜索各种类型文件
1.7 Linux的部署
安装Linux系统,安装时需要指定超级管理员和普通用户的账户密码
配置Linux网络
根据业务需要配置防火墙
配置Linux图形化客户端如finalshell
配置Linux图形化文件传输工具winscp
1.8 linux 中 vim
vi作为Linux系统默认的编辑器,vim是vi的升级版,两者最大区别就是编辑一个文本时vi不会显示颜色,而vim会显示颜色。显示颜色更便于用户进行编辑,但其他功能没有太大的区别。
vim有三种工作模式
(一)命令模式:控制光标移动,可对文本进行复制、粘贴、删除等工作。
(二)编辑模式(输入模式):正常的文本录入。
(三)末行模式:保存或退出文档,以及设置编辑环境。
1.9 Linux文件分页查看指令
more或less