欢迎光临散文网 会员登陆 & 注册

大数据面试题(十一)

2020-06-18 16:39 作者:自学Python的小姐姐呀  | 我要投稿

616.Linux 文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在()目录中

A./bin

B./etc

C./dev

D./lib

答案:C

617.在重新启动Linux 系统的同时把内存中的信息写入硬盘,应使用()命令实现

A.# reboot

B.# halt

C.# reboot

D.# shutdown –r now

答案:D

618.网络管理具备以下几大功能:配置管理、()、性能管理、安全管理和计费管理等

A.故障管理

B.日常备份管理

C.升级管理

D.发送

答案:A

619.关闭linux 系统(不重新启动)可使用命令()

A.Ctrl+Alt+Del

B.halt

C.shutdown -r now

D.reboot

答案:B

620.实现从IP 地址到以太网MAC 地址转换的命令为: ()

A.ping

B.ifconfig

C.arp

D.traceroute

答案:C

621.在vi 编辑器中的命令模式下,键入()可在光标当前所在行下添加一新行

A.< a>;

B.< o>;

C.< I>;

D.A

答案:B

622.在vi 编辑器中的命令模式下,删除当前光标处的字符使用()命令

A.< x>;

B.< d>;< w>;

C.< D>;

D.< d>;< d>;

答案:A

623.在vi 编辑器中的命令模式下,重复上一次对编辑的文本进行的操作,可使用()命令

A.上箭头

B.下箭头

C.< .>;

D.< *>;

答案:C

624.删除文件命令为: ()

A.mkdir

B.rmdir

C.mv

D.traceroute

答案:D

625.退出交互模式的shell,应键入()

A.< Esc>;

B.^q

C.exit

D.quit__

答案:C

算法分析及手写代码

626.判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写出程序提出其中年月日。要求:

写出合格的身份证的正则表达式,

^(\d{15}|\d{17}[\dx])$

写程序提取身份证中的年月日


628.写一个完整函数,实现拷贝数组




629.写一排序算法,输入10个数字,以逗号分开,可根据参数选择升序或者降序排序,须注明是何种排序算法。




630.判断字符串是否是这样的组成的,第一个字母,后面可以是字母、数字、下划线、总长度为5-20。



631.已排好序的数组A,一般来说可用二分查找可以很快找到,现有一特殊数组A,它是循环递增的,如a[]={17, 19 ,20, 25, 1, 4, 7, 9},在这样的数组中找一元素,看看是否存在。请写出你的算法,必要时可写伪代码,并分析其空间,时间复杂度。

思路说明:循环递增数组有这么一个性质:以数组中间元素将循环递增数组划分为两部分,则一部分为一个严格递增数组,而另一部分为一个更小的循环递增数组。当中间元素大于首元素时,前半部分为严格递增数组,后半部分为循环递增数组;当中间元素小于首元素时,前半部分为循环递增数组;后半部分为严格递增数组。

记要检索的元素为e,数组的首元素为a[low],中间元素为a[mid],末尾元素为a[high]。则当e等于a[mid] 时,直接返回mid的值即可;当e不等于a[mid] 时:

1) a[mid] > a[low],即数组前半部分为严格递增数组,后半部分为循环递增数组时,若key小于a[mid]并且不小于a[low]时,则key落在数组前半部分;否则,key落在数组后半部分。

2) a[mid] < a[high],即数组前半部分为循环递增数组,后半部分为严格递增数组时,若key大于a[mid]并且不大于a[high]时,则key落在数组后半部分;否则,key落在数组前半部分。

这种方式的时间复杂度为:O(log(n)),空间复杂度为O(1)。



632.请编写一个完整的程序,实现如下功能:从键盘输入数字n,程序自动计算n!并输出。(注1:n!=1*2*3...*n, 注2:请使用递归实现)

思路说明:因为n! = (n-1)! * n,所以要求n!首先要求出(n-1)!,而(n-1)! = (n-1-1)! * (n-1),以此类推,直到n = 1为止。



633.请用递归的方法计算斐波那契数列的同项F(n),已知F0=0,F1=1,F(n)=F(n-1)+F(n-2)(n>=2,n∈N*).

思路说明:斐波那契数列的排列是:0,1,1,2,3,5,8,13,21,34,55,89,144……,特别指出的是0不是第一项而是第0项;因为F(n)=F(n-1)+F(n-2),所以要求F(n)首先要求出F(n-1)和F(n-2),而F(n-1)=F(n-1-1)+F(n-1-2),以此类推,直到,F(2)=F(1)+F(0)为止,已知F(1) = 1,F(0) = 0。

634.现在有整数数组{11,66,22,0,55,32},请任意选择一种排序算法,用Java程序实现

冒泡思路说明:
(1) 最开始将数组看做一个无序数列(个数是数组的长度)与一个有序数列(0个)的组合;
(2) 每一趟比较完后, 找到了无序数列的最大值, 将其放到有序数列中(有序数列个数+1);
(3) N个数, 比较N-1趟;
(4) 每一趟挨个进行比较:从数组的第一个元素开始, 到无序数列的最后一个为止;
(5) 如果前边一个大于后边一个, 那么交换位置;
(6) 每趟比较的次数与趟数有关;
(7) 根据每趟比较是否发生了交换判断数据是否已经有序,从而进行优化。


635.请根据注释,编码实现下面类的方法


思路说明:我们首先要读懂这道题的意思:righString这个字符串是用来存储一系列权限的,并且权限的取值只有两种:有和没有;在righString中使用字符‘1’表示有权限,字符空格‘ ’表示没有权限。举个例子:如果righString的长度为3,第一位表示对订单系统是否有权限,第二位表示对人员管理系统是否有权限,第三位表示对库存系统是否有权限。而方法中的int right参数则表示的是字符串的第几位。

上边这些搞明白之后,方法的编写就简单多了。


636.二分法查询(递归实现)

思路说明:假设在一个已经排好序的有序序列(N个元素,升序排列),首先让序列中的中间的元素与需要查找的关键字进行比较,如果相等,则查找成功,否则利用中间位置将序列分成两个子序列,如果待查找的关键字小于中间的元素,则在前一个子序列中同样的方法进一步查找,如果待查找的关键字大于中间的元素,则在后一个子序列中同样的方法进一步查找,重复以上过程一直到查找结束!


637.编写一段Java程序,把一句英语中的每个单词中的字母次序倒转,单词次序保持不变,例入输入为“There is a dog.”,输出结果应该是“erehT si a god.”要求不使用Java的库函数,例如String类的split,reverse方法。

函数形如:


思路说明:将字符串转化成字符数组,然后根据数组中空格的位置判断每个单词所占的索引范围,根据得到的索引将数组中的每个单词逆序后拼接到新的字符串中。


638.手写9x9乘法表,冒泡排序

9x9乘法表:


639.题目: 给定一个整数数组,找到是否该数组包含任何重复数字。你的函数应该返回true只要有任何数字 在该数组中重复出现,否则返回false。


640.给定一个数组nums, 写一个函数来移动所有0元素到数组末尾,同时维持数组中非0元素的相对顺序不变。要求不能申请额外的内存空间,并且最小化操作次数。


641.给定一颗二叉树,返回节点值得先序遍历,请使用迭代(非递归)方式实现。


642.验证一棵树是否为有效的二叉搜索树BST


643.从一个链表中删除节点

题目: 写一个函数用于在一个单向链表中删除一个节点(⾮非尾节点),前提是仅仅能够访问要删除的那个节点。

比如给定链表1 -> 3 -> 5 -> 7 -> 9 -> 16,给定你值为3的那个节点, 调⽤用你的函数后,链表变为

1 -> 5 -> 7 -> 9 -> 16。


644.二叉搜索树BST中第Kth小的元素 题目:给定⼀个BST,写一个函数kthSmallest来找到第kth小的元素


645.题目:给定含有n个整数的数组S,S中是否存在三个元素a,b,c使得a + b + c = 0? 找到所有这样的三元 组,并且结果集中不包含重复的三元组。

比如,
S = [-1, 0, 1, 2, -1, -4],,
结果集为: [
[-1, 0, 1],
[-1, -1, 2]
]


646.子集问题

题目: 给定一个不包含相同元素的整数集合,nums,返回所有可能的子集集合。解答中集合不能包含重 复的子集。
比如,
nums = [1, 2, 3], ⼀一种解答为:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2], []
]


647.迭代方法实现二叉树的先序遍历:题目: 给定一颗⼆叉树,返回节点值得先序遍历,请使用迭代(非递归)方式实现。

比如, 给定二叉树{1,#,2,3}, 返回 [1,2,3]


648.验证二叉搜索树BST:题目: 验证一棵树是否为有效的二叉搜索树BST比如,二叉树[2, 1, 3],返回true二叉树[1, 2, 3], 返回false


649.编辑距离题目: 给定两个单词word1和word2,找到最小的操作步骤使得word1转换成word2,每次操作算作一 步。你可以对单词进行以下三种操作:1)插入一个字符2)删除一个字符3)替换一个字符

参考地址:http://www.cnblogs.com/masterlibin/p/5785092.html

650.买卖股票问题:题目: 你有一个数组,第i个元素表示第i天某个股票的价格,设计一个算法找到最大的利润,并且你只能最多完成两次交易。

参考地址:没有完全理解的

http://www.mamicode.com/info-detail-1087177.html

http://www.mamicode.com/info-detail-1087177.html


651.[编程]任给n个整数和一个整数x。请计算n个整数中有多少对整数之和等于x。


652.[编程]请说明快速排序算法的设计思想和时间复杂度,并用高级语言写出对整数数组进行一趟快排的函数实现。

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

一趟快速排序的算法是:
1、设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2、以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3、从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4、从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5、重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。


653.对于一段形如:1,-1~3,1~15×3的输入

输入会依照以下规则:
1、所有输入为整数、
2、“,”为分隔符
3、“~”表示一个区间,比如“-1~3”表示-1到3总共5个整数,同时“~”前的数小于“~”后的数:
4、“x”表示步长,“x3”指每3个整数一个,比如“1~15×3”表示1,4,7,10,13;
根据以上得到的结果进行打印,打印的规则为:
1、所有得到的整数按从小到大排列,以“,”分隔,不计重复;
2、每行最多显示3个整数;
3、如果两个整数是连续的,可以放在同一行,否则自动换行。
例如对于输入“1,-1~3,1~15×3”的输出结果为:
-1,0,1,
2,3,4,
7,
10,
13


654.有两个字符串:目标串S=“s1s2.......sn”,模式串T="t1t2.......tm"。若存在T的每个字符一次和S中的一个连续字符序列相等,则匹配成功,返回T中第一个字符在S中的位置。否则匹配不成功,返回0。写出你的算法,要求线性时间复杂度

答:
字符串匹配操作定义:
目标串S="S0S1S2...Sn-1" , 模式串T=“T0T1T2...Tm-1”
对合法位置 0<= i <= n-m (i称为位移)依次将目标串的字串 S[i ... i+m-1] 和模式串T[0 ... m-1] 进行比较,若:
1、S[i ... i+m-1] = T[0 ... m-1] , 则从位置i开始匹配成功,称模式串 T 在目标串 S 中出现。
2、S[i ... i+m-1] != T[0 ... m-1] ,则从位置i开始匹配失败。
字符串匹配算法 —— Brute-Force 算法
字符串匹配过程中,对于位移i (i在目标串中的某个位置),当第一次 Sk != Tj 时,i 向后移动1位 , 及 i = i+1,此时k退回到i+1位置 ;模式串要退回到第一个字符。该算法时间复杂度O(M*N),但是实际情况中时间复杂度接近于O(M + N),以下为Brute-Force算法的Java实现版本:


655.如何生成一个0-100的随机整数?


656.请编写一段Java程序将两个有序数组合并成一个有序数组


657.在最佳情况下,以下哪个时间复杂度最高(D)

A.直接插入排序

B.直接选择排序

C.冒泡排序

D.归并排序

分析:答案: D

排序方法 最坏时间复杂度 最好时间复杂度 平均时间复杂度

直接插入 O(n2) O(n) O(n2)

简单选择 O(n2) O(n2) O(n2)

冒泡排序 O(n2) O(n) O(n2)

快速排序 O(n2) O(nlog2n) O(nlog2n)

堆排序 O(nlog2n) O(nlog2n) O(nlog2n)

归并排序 O(nlog2n) O(nlog2n) O(nlog2n)

658.一个数组,元素为从0到m的整数,判断其中是否有重复元素,使用java语言编写一个方法


659.某二叉树的先序遍历是12453,中序遍历是42513,那么其后序遍历是(A)

A.45231

B.42351

C.12345

D.54321

660.设一颗二叉树中有3个叶子节点,有八个度为1的节点,则该二叉树中总的节点数为()

A.12

B.13

C.14

D.15

分析:选b 子叶节点是度为零的节点,而二叉树的性质可知,度是0的节点比度是2的节点数多1个,所以度是2的节点为2个,所以共有3+8+2=13

661.给出下面的二叉树先序、中序、后序遍历的序列?

答:先序序列:ABDEGHCF;中序序列:DBGEHACF;后序序列:DGHEBFCA。

补充:二叉树也称为二分树,它是树形结构的一种,其特点是每个结点至多有二棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的遍历序列按照访问根节点的顺序分为先序(先访问根节点,接下来先序访问左子树,再先序访问右子树)、中序(先中序访问左子树,然后访问根节点,最后中序访问右子树)和后序(先后序访问左子树,再后序访问右子树,最后访问根节点)。如果知道一棵二叉树的先序和中序序列或者中序和后序序列,那么也可以还原出该二叉树。

例如,已知二叉树的先序序列为:xefdzmhqsk,中序序列为:fezdmxqhks,那么还原出该二叉树应该如下图所示:

662.你知道的排序算法都哪些?用Java写一个排序系统

答:稳定的排序算法有:插入排序、选择排序、冒泡排序、鸡尾酒排序、归并排序、二叉树排序、基数排序等;不稳定排序算法包括:希尔排序、堆排序、快速排序等。


由于字数限制,后续内容更加精彩,欢迎关注,整理不易,可否动动你的小手给小编来点更新的动力,希望对你们会有帮助!~


大数据面试题(十一)的评论 (共 条)

分享到微博请遵守国家法律