京东2019春招Java面试题

1.在对问题的解空间树进行搜索的方法中,一个结点有多次机会成为活结点的是:()
动态规划
回溯法
分支限界法
回溯法和分支限界法

B 回朔法:当沿一条路径走到底时,无法继续前进,退回上一结点,查看是否具体其他路径,有则继续查找,若没有则继续往上层结点回退

2.在算法设计中,通常要注意理解其本质含义。算法的基本要素有:()
算法对硬件的基本要求
对数据对象的运算和操作
算法的控制结构
算法的数据机构

BC 一个算法通常由两种基本要素组成:一是(对数据对象的运算和操作),二是(算法的控制结构)

3.京东商城plus会员的消费记录金额分别为900,512,613,700,810,若采用选择排序算法对其进行从小到大的排序,第三趟排序结果为:()
900512613700810
512900613700810
512613700900810
512613700810900

C 选择排序,把每一轮最小的数放到前面来,两者交换位置
开始时:900512613700810
第一趟后:512900613700810
第二趟后:512613900700810
第三趟后:512613700900810

4 .递归算法x(8)需要调用几次函数x(int n)

class program
 {
     static void Main(string[] args)
     {
         int i;
         i = x(8);
     }
     static int x(int n)
     {
         if (n <= 3)
             return 1;
         else
             return x(n - 2) + x(n - 4) + 1;
     }
 }

9
12
18
24

A 1+2+4+2=9
x(8) 1x(6)+x(4) 2x(4)+x(2) x(2)+x(0) 4x(2)+x(0) 2

5.下列叙述中,有关线性链表叙述正确的是()
线性链表中的表头元素一定存储在其他元素的前面
线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面
线性链表中的各元素在存储空间中的位置必须是连续的
线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的

D 链表和数组最大区别就是 数组在内存中是连续的空间

6.串的朴素模式匹配算法,主要思想是对主串(S)的每一个字符作为子串(T)开头,与要匹配的字符串进行匹配。主串(S)的长度为n,要匹配的子串的长度为m,那么朴素模式匹配算法的最坏时间复杂度为:
O((n-m)*m)
O((n+1)*m)
O((n-m+1)*m)
O((m+1)*n)

C 最坏时间算法也就是每次都匹配到字串的最后一位,匹配次数为m;且匹配到主串的尾部,匹配次数为n-m+1.所以结果是m*(n-m+1)

7.广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。那么广义表E((a,(a,b),((a,b),c)))的长度和深度分别为:
2和4
1和4
1和3
2和3

B
E(x) x=((a,(a,b),((a,b),c)))    最外层0个逗号   长度是0+1  长度是1
深度1                 E
                      |
深度2           (a,(a,b),((a,b),c))
              /       |        \
深度3        a      (a,b)   ((a,b),c)
                             /   \
深度4                        a     b  

8.关于TCP协议的描述,以下错误的是?
面向连接
可提供多播服务
可靠交付
报文头部长,传输开销大

B 广播和多播仅应用于UDP;TCP是一个面向连接的协议

9.在 bash shell 环境下,当一命令正在执行时,按下 control-Z 会:
中止前台任务
给当前文件加上EOF
将前台任务转入后台
注销当前用户

C 
ctrl c中断
ctrl z表示转到后台

10.如果ORDER BY子句后未指定ASC或DESC,默认使用以下哪个?
DESC
ASC
不存在默认值
其它选项都不对

B 默认升序

11.下图的UML类结构图表示的是哪种设计模式:
在这里插入图片描述
访问者模式
生成器模式
代理模式
命令模式

B 生成器模式又叫建造者模式,功能是使用简单的对象一步步构造成复杂对象

12.对象间存在一对多关系,当一个对象被修改时,则会自动通知它的依赖对象,采用以下哪种设计模式最好?
建造者模式
观察者模式
策略模式
代理模式

B 观察者模式:对象间存在一对多关系,如果一个对象被修改时,会自动通知它的依赖对象。

13.文件目录data当前权限为rwx — ---,只需要增加用户组可读可执行权限,但不允许写操作,具体方法为:
chmod+050data
chmod+040data
chmod+005data
chmod+004data

A 
7:表示rwx,拥有读、写和执行的权限
6:表示rw-,拥有读和写的权限
5:表示rx,拥有读取和执行的权限
4:表示r--,拥有只读权限
3:表示-wx,拥有写入和执行的权限
2:表示-w-,拥有只写权限
1:表示 - x,仅拥有执行权限
0:表示---,无权限
chmod 777 participants
说明:第17设置用户的权限,第27设置组的权限,第37设置其他所有者的权限。
题上说了data是一个目录,如果只添加只读权限,目录就进不去了。所以应该是 050

14.执行以下shell语句,可以生成/test文件的是(假定执行前没有/test文件):

touch /test
a=`touch /test`
>/test
echo 'touch /test'
ABC
B选项是表示转义,` `中的的内容会被执行,即执行touch /test创建一个文件
C选项是输出重定向,将要输出的内容写入/test中,若是没有/test文件则创建再写入

15.以下不合法的shell头是(不合法指运行会报错):
#!/bin/bash
#-/bin/bash
!#/bin/bas

C

16.以下语句可以用来获取shell脚本参数的是
$1
$?
$*
$$

AB

在这里插入图片描述

17.以下属于Redis支持的数据类型是( )
Strings
Lists
Sets
集合排序

ABCD

18.关于redis下面说法错误的是()
Redis主要消耗内存资源
Redis集群使用一致性hash
Redis集群之间是异步复制的
分区可以让Redis管理更大的内存

B Redis Cluster在设计中没有使用一致性哈希(Consistency Hashing),而是使用数据分片引入哈希槽(hash slot)来实现

19.以下哪个区域不属于新生代?
eden区
from区
元数据区
to区

C
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。
这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。

20.以下程序会输出什么

		int a =100,b=50,c=a---b,d=a---b;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);

100 48 48 49
100 49 48 52
98 50 50 49
98 50 50 48

C
自增自减运算符优先级大于加减运算符的优先级
int a =100,b=50,c=a---b,d=a---b;
先考虑a--,a执行后自减操作,即先用a后再自减1,与--a先反
(1)c=a---b,先执行a-b操作,得到c=50,再执行a减1操作,得到a=992)d=a---b,先执行a-b操作,得到d=49,再执行a减1操作,得到a=98

21.JVM内存不包含如下哪个部分( )
Stacks
PC寄存器
Heap
Heap Frame

D 
Stacks: JVM中有虚拟机栈和本地方法栈,都属于栈
PC寄存器: 即程序计数器,用来记录程序执行过程中的将要执行的下一条指令的行号
Heap:堆
Heap Frame:翻译过来 堆帧?只有栈帧(Stack Frame)

在这里插入图片描述

22.java有8种基本类型,请问byte、int、long、char、float、double、boolean各占多少个字节?
1 2 8 2 4 8 1
1 4 8 2 4 8 1
1 4 4 2 4 4 2
1 4 4 2 4 8 2

B

23.下列代码返回结果为:

Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);
System.out.print(c == d);

true、true
true、false
false、true
false、false

B Interger的范围时[-128,127],在这个范围内比较大小,相等为true,超过范围为false

24.下列代码输出结果为:

String str =
"";
System.out.print(str.split(",").length);

0
1
出现异常

B String split这个方法默认返回一个数组,如果没有找到分隔符,会把整个字符串当成一个长度为1的字符串数组 返回到结果,所以此处结果就是1

25.后端获取数据,向前端输出过程中,以下描述正确的是
对于前端过滤过的参数,属于可信数据,可以直接输出到前端页面
对于从数据库获得的数据,属于可信数据,可以直接输出到前端页面
对于从用户上传的Excel等文件解析出的数据,属于可信数据,可以直接输出到前端页面
其它选项都不属于可信数据,输出前应该采用信息安全部发布的XSSFilter做进行相应编码

D 其他的选项中的数据都属于不可信数据,都可能存在安全问题,因此都需要进行相应的处理

26.java8中,下面哪个类用到了解决哈希冲突的开放定址法
LinkedHashSet
HashMap
ThreadLocal
TreeMap

C threadlocal 使用开放地址法 - 线性探测法:当前哈希槽有其他对象占了,顺着数组索引寻找下一个,直到找到为止

27.当我们需要所有线程都执行到某一处,才进行后面的的代码执行我们可以使用?
CountDownLatch
CyclicBarrier
Semaphore
Future

A CountDownLatch 允许一个线程或多个线程等待特定情况,同步完成线程中其他任务

28.下列说法正确的是( )
volatile,synchronized 都可以修改变量,方法以及代码块
volatile,synchronized 在多线程中都会存在阻塞问题
volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性

C synchronized: 具有原子性,有序性和可见性;(三个都有)

29.关于Java中参数传递的说法,哪个是错误的?
在方法中,修改一个基础类型的参数不会影响原始参数值
在方法中,改变一个对象参数的引用不会影响到原始引用
在方法中,修改一个对象的属性会影响原始对象参数
在方法中,修改集合和Maps的元素不会影响原始集合参数

D 在方法中,修改集合和Maps会影响原始集合参数

30.spring默认使用jdk动态代理,那么下面哪个配置是开启强制使用cglib代理
<aop:aspectj-autoproxy proxy-target-class=“true”/>
<aop:scoped-proxy proxy-target-class=“true” >
<aop:aspectj-autoproxy expose-proxy=“true”/>
<aop:config proxy-target-class=“false”/>

A <aop:aspectj-autoproxy proxy-target-class="true"/>

猜你喜欢

转载自blog.csdn.net/qq_33591873/article/details/107841054