Java面试题总结之数据结构、算法和计算机基础(刘小牛和丝音的爱情故事1)

全文字数: 1703

阅读时间: 大约6 分钟

刘小牛是一名Java程序员,由于天天996平常也不注意锻炼身体,一不小心就进入了ICU,最终抢救无效,告别了人间。死后的刘小牛,被告知需要进入天堂或者地狱,进入天堂需要有一技之长,刘小牛当然想进入天堂了,他思来想去自己也只会敲代码了,所以他来到了天堂的大门前,准备应聘Java程序员,玉帝和王母最疼爱的女儿丝音接待了他,丝音对他说,想要应聘我们天堂的程序员可不简单,我需要问你几个问题,答对了我们才会录用你,让你进入天堂工作,否则你还是去地狱吧,刘小牛说没问题,我这么多年程序员也不是白干的,这点我还是有信心的。下面是他和丝音的对话。

丝音:你知道一个byte 几个bit位吗?

刘小牛:这个问题太简单了,一个Byte是8bit。

丝音:常用UNIX 命令有哪些(Linux 的常用命令)(至少10 个)?

刘小牛:unix常用命令有:

ls 显示指定目录下的文件目录清单相当于dos下的dir命令。
pwd 显示当前目录。
mkdir 在当前目录下创建目录。
rm 删除文件或目录。
cp 复制文件。
mv 移动文件。
cd 切换工作目录。
ps 查看进程。
ftp 传送文件。
telnet 远程登录命令。
ping 用来测试本机与目标主机是否联通。
env 查看当前系统中的环境变量。
more 分屏显示指定文件的内容。
echo在终端上显示你要显示的内容,向C语言中的printf函数。

丝音:嗯嗯不错,下一个问题,后序遍历下列二叉树,访问结点的顺序是什么?

刘小牛:这问题也太简单了,访问顺序为:DJGEBKNIFCA 。:顺序为:DJGEBKNIFCA 。

丝音:哼,敢小瞧我们天堂的题,下一道题,排序都有哪几种方法?请列举说明,然后用JAVA 实现一个快速排序。

刘小牛:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(桶排序、基数排序);

/** 使用快速排序方法对arr[0:n- 1]排序
从a[ 0 :n- 1 ]中选择一个元素作为middle,该元素为支点;
把余下的元素分割为两段left 和right,使得left 中的元素都小于等于支点,
而right 中的元素都大于等于支点;
递归地使用快速排序方法对left 进行排序;
递归地使用快速排序方法对right 进行排序;
所得结果为left + middle + right。*/
public class QuickSort {public static void main(String[] args) {int[] arr = {5,2,4,9,7,16,26,3};sort(arr, 0, arr.length - 1);}public static void sort(int arr[], int left, int hight) {int l = left;int h = hight;int k = arr[left];while (l < h) {//  从后往前比较//  如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,// 然后再从前往后比较while (l < h && arr[h] > k) {h--;//  h=6}// 交换位置if (l < h) {int temp = arr[h];arr[h] = arr[l];arr[l] = temp;// 进行过一次替换后,没必要将替换后的两值再次比较,所以i++直接下一位与k对比l++;}//  从前往后比较 如果没有比关键值大的,比较下一个,// 直到有比关键值大的交换位置while (l < h && arr[l] <= k) {l++;}// 交换位置if (l < h) {int temp = arr[h];arr[h] = arr[l];arr[l] = temp;h--;}//  此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,// 但是左右两边的顺序还有可能是不一样的,进行下面的递归调用}print(arr);System.out.print("l=" + (l + 1) + ",h=" + (h + 1) + ",k=" + k + "\n");//  递归,先判断l>low再次进行左边排序if (l > left) {//  左边序列。第一个索引位置到关键值索引-1sort(arr, left, l - 1);}// 左边依次排序执行完递归后,弹栈进行右边排序if (h < hight) {//  右边序列。从关键值索引+1到最后一个sort(arr, l + 1, hight);}}//  打印数组的方法public static void print(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i != (arr.length - 1)) {System.out.print(arr[i] + ",");} else {System.out.print(arr[i] + "]");System.out.println();}}}}

刘小牛把在纸上写好的代码递给了丝音。

丝音:嗯嗯,写的不错,看不出来你还挺厉害的呀,好再问你一个简单的问题,写一个程序判断数字是否为质数?

刘小牛:这个简单,程序如下:

/*** 1、偶数不可能是质数* 2、对于大于2的数,如果一个数a大于数b的一半,那么b不可能被a整除*/public boolean isPrimeNum(int num) {// 2特殊处理if (num == 2) {return true;}// 识别小于2的数和偶数if (num < 2 || num % 2 == 0) {return false;}int max = num / 2;for (int i = 3; i < max; i += 2) {if (num % i == 0) {return false;}}return true;}

丝音:给你出一道难得吧,这个题有好多以前应聘的人都没答对呢,设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序;要求用java 实现。

刘小牛:这道题难不倒我,代码如下:

public class CountGame {//判断第n个人是否已经出列private static boolean same(int[] p, int l, int n) {for (int i = 0; i < l; i++) {if (p[i] == n) {return true;}}return false;}public static void play(int playerNum, int step) {//按出列顺序排列的新数组int[] p = new int[playerNum];//当前报数的人int counter = 1;while (true) {if (counter > playerNum * step) {break;}//从1开始报数for (int i = 1; i < playerNum + 1; i++) {while (true) {//如果报数的人已经出去,则跳过if (same(p, playerNum, i) == false){break;}else{i = i + 1;}}if (i > playerNum){break;}//如果当前报数的人是第m个人,则第M个人出列if (counter % step == 0) {System.out.print(i + " ");p[counter / step - 1] = i;}counter += 1;}}System.out.println();}public static void main(String[] args) {//一共10个人,输到第7个人出列play(10, 7);}
}

丝音:哇,你真厉害呀,最后一个问题,用程序实现1000 的阶乘

刘小牛:这个问题有个陷阱,就是普通的数据类型存不了这么大的数,不过这难不倒我的,嘿嘿

Java的代码实现如下:

//首先导入大数包和输入包
import java.math.BigInteger;
import java.util.Scanner;//计算n!(1*2*...*n)
public class BigIntegerTestDrive {public static void main(String[] args) {// 输入nScanner in = new Scanner(System.in);int n = in.nextInt();// 输入初始值int pre_answer = 1;// 将初始值由int类型转变为String类型String x = String.valueOf(pre_answer);// 将String类型的的初始值,传递给BigInteger类型,BigInteger answer = new BigInteger(x);// 循环迭代逐次相乘for (int i = 1; i <= n; i++) {// 因为BigInteger类型只能和该类型的变量相乘,因此还需将每次的中间乘数也依次变为BigInteger类型String var = String.valueOf(i);BigInteger variable = new BigInteger(var);// 调用相乘函数进行相乘运算answer = answer.multiply(variable);}// 输出最终答案System.out.println(answer);in.close();}
}

回答完这些问题,丝音看着刘小牛微笑着点点头说:“”你基础还是挺不错的”。听到夸赞,刘小牛期待的看着丝音问:“那我能进入天堂了吗”。丝音笑着说:“天堂哪有那么好进”。你......未完待续
(本故事纯属虚构,如有雷同纯属巧合)

Java面试题总结之数据结构、算法和计算机基础(刘小牛和丝音的爱情故事1)相关推荐

  1. JAVA:实现BloomFilter二进制向量数据结构算法(附完整源码)

    JAVA:实现BloomFilter二进制向量数据结构算法 package com.thealgorithms.datastructures.bloomfilter; import java.util ...

  2. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  3. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  4. 计算机应用基础试题事业单位,事业单位考试计算机基础知识试题及答案

    计算机基础知识是事业单位考试内容,以下是由学习啦小编整理关于事业单位考试计算机基础知识试题的内容,希望大家喜欢! 事业单位考试计算机基础知识试题及答案(一) 1.Windows中,剪贴板是指( ). ...

  5. 部队文职计算机试题,2020军队文职人员考试:计算机基础模拟试题(1)

    [导语]2020年军队文职备考进行中,为助力各位考生做好2020年军队文职招聘考试准备,山东中公教育小编为大家整理了考试题库:2020军队文职人员考试:计算机基础模拟试题(1),供大家学习和参考. 1 ...

  6. 事业单位考试计算机科学与技术试题的答案,事业单位考试计算机基础知识试题答案...

    事业单位考试计算机基础知识试题答案(微缩打印版) 一. 选择题 1. 世界上首先实现存储程序的电子数字计算机是____. A.ENIAC B.UNIVAC C.EDVAC D.EDSAC 2.计算机科 ...

  7. 2016年大学计算机期末试题及答案,2016年大学计算机基础试题题库及答案

    2016年大学计算机基础试题题库及答案 一.单选题练习 1.完整的计算机系统由( C )组成. A.运算器.控制器.存储器.输入设备和输出设备 B.主机和外部设备 C.硬件系统和软件系统 D.主机箱. ...

  8. 计算机基础知识数据结构与算法,(计算机基础知识)[数据结构与算法] 图

    第六章 图 6.1 图的定义和基本术语 图: G=(V,E) Graph = (Vertex, Edge) V: 顶点(数据元素)的有穷非空集合 E: 边的有穷集合 完全图: 任意两个点都有一条边相连 ...

  9. 使用流程图表示算法(计算机基础)

    前言 用流程图表示算法,其特点是 直观易读,流程图是指利用标准的图形符号来描述程序处理的步骤,流程图包括一个基本符号集合,其中每个符号表示算法中指定类型的操作. 使用流程图表示算法直观.清晰,因此在程 ...

  10. 奥鹏教育计算机试题,最新奥鹏教育《计算机基础》模拟试卷附答案(11页)-原创力文档...

    <计算机基础>模拟试卷一 一.[单项选择题]( 本大题共 20 小题,每小题 2 分,共 40 分) 在每小题列出的四个选项 中只有一个选项是符合题目要求的,请将正确选项前的字母填在答题卷 ...

最新文章

  1. ipython/jupyter notebook修改文件存储路径和浏览器
  2. Servlet中过滤器的实现原理(源码实现)
  3. 数据可视化揭晓NBA球星顶薪背后的真相
  4. 年终总结系列6:借与贷,科普LTV指标
  5. 第五话 Asp.Net MVC 3.0【MVC实战项目の一】
  6. 怎样用计算机自带软件打电话,怎样用电脑拨号打电话 yuntel电话助手自动拨号软件...
  7. 用 Python 打造属于自己的GUI图形化界面
  8. JS 延时函数 setTimeout 或者 rxjs 写法
  9. Cisco路由器的配置
  10. WEB测试项目实战——2.产品需求与设计评审
  11. Internet Explorer 编程简述(序)
  12. asp毕业设计—— 基于asp+access的网络招聘管理系统设计与实现(毕业论文+程序源码)——网络招聘管理系统
  13. 毛星云opencv之10.1.5综合示例--harris角点检测和绘制
  14. 无需转动魔方即可判断魔方拼装错误的完整方法
  15. 企业微信的审批申请状态变化回调通知api接口bug
  16. 使用Eclipse创建最简单的JavaWeb网页项目
  17. Android 获取手机系统版本号、获取手机型号、获取手机厂商、获取手机IMEI、获取手机CPU_ABI、获取手机唯一识别码
  18. 数据中台建设(规划篇)
  19. 易语言编写的时间校准器源码
  20. Java访问获取LDAP用户信息

热门文章

  1. [转]在数学的海洋中飘荡
  2. POI使用详解 java 复杂excel导出(笔记)
  3. Apk脱壳圣战之---脱掉 爱加密 的壳
  4. 本地机房连接阿里云专有网络VPC构建混合云解决方案
  5. 如何用CSS实现div元素高度相对于整个屏幕100%
  6. 天天对着代码没事也谢谢博客
  7. win10安装.net framework 3.5 错误代码 错误代码 0x800F0906、0x800F081F、0x800F0907
  8. 在你的网页集成QQ推广即时聊天
  9. c语言中加数字的作用是什么,C语言中if括号里!直接加一个数字什么意思。比如if(!1),还有if(3)是什么意思...
  10. 2.1.1.15使用WIFI网卡1_准备工作及配置内核