1.shell中的变量有哪几种?
a)本地
b)全局
c)内置
2.shell中命令变量如何定义?
a)$(命令)
b)命令
3.shell中定义变量的时候如果含有其他变量的引用,应该如何定义?
a)data=”$var”
4.请说出如下shell中内置变量的含义
a)$$ 进程号
b)$n 脚本获取的第n个参数
c)$# 脚本获取的参数个数
d)$? d)上一命令的执行结果
e)$0 脚本名
5.shell中如何进行字符串截取(截取公式)?并说明参数意义
a)${var:start:n}
b)var表示带截取关键字变量,start表示从索引为第几位开始截取,n表示截取多少个字符
6.shell中常用的测试语句有哪些?
a)Test
b)[]
7.shell中数值计算如何进行数值计算?应该注意些什么?
a)$((计算公式))
b)let 计算公式
8.请说出常见的shell中的流程控制语法
a)if
b)case
c)for
d)while
e)until
9.参数和功能详情如下:
脚本 X.sh 使用方式 X.sh [ start|stop|restart ]
脚本内容
# case语句使用场景
case "$1" in
"start")
echo "服务启动中..."
;;
"stop")
echo "服务关闭中..."
;;
"restart")
echo "服务重启中..."
;;
*)
echo "$0 脚本的使用方式: $0 [ start | stop | restart ]"
;;
esac
9.shell中函数如何获取函数调用是的传参?
a)在函数内部使用$n
10.代码发布的整体流程是什么?
获取代码
打包代码
传输代码
停止应用
解压代码
防止代码
开启应用
检查效果
对外访问
11.企业中常用的代码仓库是什么?
a)Gitlab
b)Svn
12.如何进行Python源码安装?
a)Python setup.py install
13.如果源码安装c程序
a)配置 ./configure
b)编译 make
c)安装 make install
1.算法的特征?
1)有穷性: 一个算法必须保证执行有限步骤之后结束;
2)确切性: 算法的每一步骤必须有确切的定义;
3)输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身给出了初始条件;
4)输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5)可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次数运算后即可完成。
2.什么是算法?什么是数据结构?
算法是独立存在的一种解决问题的方法和思想。
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
3.简单描述一下如何计算一个算法的时间复杂度?
基本操作,即只有常数项,认为其时间复杂度为O(1)
顺序结构,时间复杂度按加法进行计算
循环结构,时间复杂度按乘法进行计算
分支结构,时间复杂度取最大值
判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度
4.什么是空间复杂度?
空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度。
5.书序表的实现形式有哪些?各自有什么特点
基本形式
数据元素本身连续存储,每个元素所占的存储单元大小固定相同
元素外置
元素的大小不统一,将实际数据元素另行存储,而顺序表中各单元位置保存对应元素的地址信息
6.顺序表的两种实现方式是什么?有什么特点?两种方式在扩容时的表现?
一体式结构
整体性强,易于管理。但是由于数据元素存储区域是表对象的一部分,顺序表创建后,元素存储区就固定了。
分离式结构
表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联。
一体式结构由于顺序表信息区与数据区连续存储在一起,所以若想更换数据区,则只能整体搬迁,即整个顺序表对象(指存储顺序表的结构信息的区域)改变了。
分离式结构若想更换数据区,只需将表信息区中的数据区链接地址更新即可,而该顺序表对象不变。
7.请说一下算法的稳定性是什么?
稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。
8.冒泡排序的思想?
冒泡思想:通过无序区中相邻记录的关键字间的比较和位置的交换,使关键字最小的记录像气泡一样逐渐向上漂至水面。整个算法是从最下面的记录开始,对每两个相邻的关键字进行比较,把关键字较小的记录放到关键字较大的记录的上面,经过一趟排序后,关键字最小的记录到达最上面,接着再在剩下的记录中找关键字次小的记录,把它放在第二个位置上,依次类推,一直到所有记录有序为止。
9.插入排序的思想?实现一下
插入的思想:将无序列表第一个数据看做是有序的,从索引为1的数据开始遍历的最后分别将其插入到左侧有序序列中,在插入的过程中分别同有序序列中的数据进行比较,如果小于左侧的数据则发生交换行为,如果大于则直接停止。
def bubble_sort(alist):
# 获取列表的长度
n = len(alist)
for i in range(n-1):
# 开启大循环,每一次循环将会从无序序列中获取最大值
# 统计发生交换行为的次数,小循环结束如果counter为0则表明列表中的数据是有序的,直接退出大循环
counter = 0
print("$$$")
for j in range(n-1-i):
if alist[j] > alist[j+1]:
alist[j],alist[j+1] = alist[j+1],alist[j]
counter += 1
if counter == 0:
break
10.快速排序的思想?
快排的基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
def quick_sort(alist,start,end):
left = start
right = end
if left >= right:
return
mid = alist[left]
while left < right:
while alist[right] > mid and left < right:
right -= 1
alist[left] = alist[right]
while alist[left] < mid and left < right:
left += 1
alist[right] = alist[left]
alist[left] = mid
quick_sort(alist, start, left-1)
quick_sort(alist, left+1, end)
9.你知道哪些排序算法(一般是通过问题考算法)?
冒泡, 选择, 快排, 归并,插入,希尔
小结
关于自动化运维和数据结构面试题就先写到这里啦,有什么不足需要改进的地方欢迎大家指出来哦。
之后会继续更新面试系列,Python系列的文章,欢迎大家关注博主!