2019年百度最新Java工程师面试题

1、单选题(共27题,每题5分)

1若下列所用变量均已经正肯定义,如下表达式中不合法的是?
 
B
运算符优先级口诀:单目算术位关系,逻辑三目后赋值。
单目:++、--
算术:+、-、*、/、%
位:位移运算符:>、>>>
关系:、=、==
========================
逻辑:&&、||、!、&、|、^
三目:三目运算符(又称为三元运算符)A>B? x:y
后:凑字数用的。。
赋值:=
 
此题重点考察C答案:三目运算符的优先级比赋值运算符优先级高,所以先计算出三目运算后的结果,再将结果赋值给a.
因此C是对的。
 
2以下代码,执行test()函数后,屏幕打印结果为()
public class Test2 { public void add(Byte b) { b = b++; } public void test() { Byte a = 127; Byte b = 127; add(++a); System.out.print(a + " "); add(b); System.out.print(b + ""); } } 
D
![](https://storage.kuibuke.com/source/1/fAknqFBCEalHkfEwfeNwgMsPqKDm3rDT.)
![](https://storage.kuibuke.com/source/1/V2TTnf00Y9HZ6EahCk1HGsdNTtDWLc2_.)
 
包装类的值都是final 不可变的,对于++b 或者b++ ,只是新建立了一个对象,而后把引用传给了原对象句柄,在函数中操做,只是形参的临时句柄改变了指向,实参的句柄仍是指向原来的对象。因此即便不是b = b++ 这种,b的值在add以后也是不会变的。
 
3Oracle数据库中,在SQL语句中链接字符串的方法是哪一个?( )
 
B

暂无html

 
4Java中基本的编程单元为:
 
A

java的基本编程单元是类,基本存储单元是变量。java

 
5已知脚本内容以下:
if [ $1 -eq 5 ];then
         echo True
     else:
         echo False

 

如下能达到同等效果的是:web

A

利用了||的短路原理正则表达式

 
6如下代码的输出的正确结果是 ?

如下代码的输出的正确结果是数据库

1 public class Test {  
2  public static void main(String args\[\]) {  
3  String s = "祝你考出好成绩!";  
4  System.out.println(s.length());  
5  }  
6 }  

 

D

java中,每个字符都是占用1个长度,包括汉字。express

 
7经过Intent传递一些二进制数据的方法有哪些?
经过Intent传递一些二进制数据的方法有哪些?
A、使用Serializable接口实现序列化,这是java经常使用的方法
B、实现Parcelable接口,这里Andriod的部分分类好比Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见
C

Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE自己就支持的),一是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也能够用于进程间通讯(IPC))。实现Serializable接口很是简单,声明一下就能够了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提升性能。编程

注:Android中Intent传递对象有两种方法:一是Bundle.putSerializable(Key,Object),另外一种是Bundle.putParcelable(Key,Object)。固然这些Object是有必定的条件的,前者是实现了Serializable接口,然后者是实现了Parcelable接口。数组

 
8代码行float t=5.1; int i=t; ,不正确的是 ?
 
B

5.1须要定义为double类型, double类型也不能直接赋值给int服务器

 
9继承是JAVA语言的一个特性,针对类的继承,虚拟机会如何进行父类和子类的初始化加载呢?请阅读代码选择出该段代码的输入结果。
 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         System.out.print(B.c);
 5     }
 6 }
 7 
 8 class A {
 9     public static String c = "C";
10     static {
11         System.out.print("A");
12     }
13 }
14 
15 class B extends A{
16     static {
17         System.out.print("B");
18     }
19 }

 

 
A

总结: 一、若是一个 static final 变量是"编译期常量",就像 public static final String a = "JD";那样,那么这个值不须要对 Test2 类进行初始化就能够读取。网络

二、可是,若是只是将一个变量的域设置为 static 和 final 的,那不足以确保这种行为。例如,对 public static final String a = new String("JD");的访问将强制对 Test2 类进行初始化,由于它不是一个"编译期常量"。

三、若是一个 static 变量域不是 final,那么在对它进行访问时,老是要求在它被读取以前,要先进行连接 (为这个域分配存储空间) 和初始化 (初始化该存储空间) 就像 public static String a = "JD";。

参考 :http://www.javashuo.com/article/p-aiateymf-be.html

 
10如下关于HTTP method 的说法,错误的是?
 
D

HTTP method

  • 一台服务器要与HTTP1.1兼容,只要为资源实现GET和HEAD方法便可
  • GET是最经常使用的方法,一般用于请求服务器发送某个资源。
  • HEAD与GET相似,但服务器在响应中值返回首部,不返回实体的主体部分
  • PUT让服务器用请求的主体部分来建立一个由所请求的URL命名的新文档,或者,若是那个URL已经存在的话,就用干这个主体替代它
  • POST起初是用来向服务器输入数据的。实际上,一般会用它来支持HTML的表单。表单中填好的数据一般会被送给服务器,而后由服务器将其发送到要去的地方。
  • TRACE会在目的服务器端发起一个环回诊断,最后一站的服务器会弹回一个TRACE响应并在响应主体中携带它收到的原始请求报文。TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。
  • OPTIONS方法请求web服务器告知其支持的各类功能。能够查询服务器支持哪些方法或者对某些特殊资源支持哪些方法。
  • DELETE请求服务器删除请求URL指定的资源
 
11如下哪一个是ARP欺骗攻击可能致使的后果
 
C
 
12下面关于this()和super()说法正确的有?

java中,下面关于this()和super()说法正确的有?

A

1,this()函数主要应用于同一类中从某个构造函数调用另外一个重载版的构造函数。this()只能用在构造函数中,而且也只能在第一行。因此在同一个构造函数中this()和super()不能同时出现。
2,super()函数在子类构造函数中调用父类的构造函数时使用,并且必需要在构造函数的第一行

 
13在switch(expression)语句中,expression的数据类型不能是(  )。
 
A

暂无

 
14有一条TCP链接,它的最大报文段长度为4KB,TCP拥塞窗口为24KB,这...

有一条TCP链接,它的最大报文段长度为4KB,TCP拥塞窗口为24KB,这时候发生超时,那么该拥塞窗口变为了()

B

TCP报文中,当发生超时事件,阈值被设置成当前拥塞窗口的一半,而拥塞窗口被设为一个最大报文段,也就是4KB。

 
15下列属于正则表达式的是
 
C

暂无

 
16Oracle数据库表空间与数据文件的关系描述正确的是( )
 
B

暂无

 
17下面关于java内存区说法错误的是?
 
C
 
18数据库中创建索引的目的?
 
B
 
19TCP释放链接第二次挥手时ACK(),第三次挥手时ACK()?
 
C

为何在第三次挥手时须要发送ack和seq?

由于 TCP 是可靠的全双工传输,因此须要确保客户端的连接关闭正确,而且防止传送的数据包在网络中延迟出现的错误,若是后面又使用一样的端口创建了一个 TCP 连接并且如今要释放(完成了两次挥手),刚才延迟的包如今到了,这时也许服务器还有数据要发送,可是客户端收到延迟的包,就直接确认返回ACK,从而出现非正常关闭。

 
20下列叙述中,错误的是()
 
A

略。

 
21若是但愿在网络中经过某个类的对象包装数据进行传输,那么这个类须要实现下面哪...

若是但愿在网络中经过某个类的对象包装数据进行传输,那么这个类须要实现下面哪一个接口?()

C
 
22运行代码,输出的结果是()
 public class P {  
 public static int abc = 123;  
 static{  
 System.out.println("P is init");  
 }  
 }  
 public class S extends P {  
 static{  
 System.out.println("S is init");  
 }  
 }  
 public class Test {  
 public static void main(String\[\] args) {  
 System.out.println(S.abc);  
 }  
 }

 

A

虚拟机规范严格规定了有且只有五种状况必须当即对类进行“初始化”:

  1. 使用new关键字实例化对象的时候、读取或设置一个类的静态字段的时候,已经调用一个类的静态方法的时候。

  2. 使用java.lang.reflect包的方法对类进行反射调用的时候,若是类没有初始化,则须要先触发其初始化。

  3. 当初始化一个类的时候,若是发现其父类没有被初始化就会先初始化它的父类。

  4. 当虚拟机启动的时候,用户须要指定一个要执行的主类(就是包含main()方法的那个类),虚拟机会先初始化这个类;

  5. 使用Jdk1.7动态语言支持的时候的一些状况。

除了这五种以外,其余的全部引用类的方式都不会触发初始化,称为被动引用。下面是被动引用的三个例子:

  1. 经过子类引用父类的的静态字段,不会致使子类初始化。

  2. 经过数组定义来引用类,不会触发此类的初始化。

1 public class NotInitialization {
2 
3 public static void main(String[] args) {
4 
5 SuperClass[] sca = new SuperClass[10];
6 
7 }
8 
9 }

 

  1. 常量在编译阶段会存入调用类的常量池中,本质上没有直接引用到定义常量的类,所以不会触发定义常量的类的初始化。
public class ConstClass {

static {

System.out.println("ConstClass init!");

}

public static final int value = 123;

}

public class NotInitialization{

public static void main(String[] args) {

int x = ConstClass.value;

}

}

 

上述代码运行以后,也没有输出“ConstClass init!”,这是由于虽然在Java源码中引用了ConstClass类中的常量HELLOWORLD,但其实在编译阶段经过常量传播优化,已经将此常量的值“hello world”存储到了NotInitialization类的常量池中,之后NotInitialization对常量ConstClass.HELLOWORLD的引用实际都被转化为NotInitialization类对自身常量池的引用了。也就是说,实际上NotInitialization的Class文件之中并无ConstClass类的符号引用入口,这两个类在编译成Class以后就不存在任何联系了。参考资料:https://blog.csdn.net/qq_22771739/article/details/...

 
23下列语句正确的是( )
 
A
**答案A:**
**A:**形式参数可被视为local variable。**形参和局部变量同样都不能离开方法**。都只有在方法内才会发生做用,也只有在方法中使用,不会在方法外可见。
**B:** **对于形式参数只能用final修饰符**,其它任何修饰符都会引发编译器错误。可是用这个修饰符也有必定的限制,就是在方法中不能对参数作任何修改。 不过通常状况下,一个方法的形参不用final修饰。只有在特殊状况下,那就是:方法内部类。 一个方法内的内部类若是使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。
**C:**形参的值在调用时根据调用者更改,实参则用自身的值更改形参的值(指针、引用皆在此列),也就是说**真正被传递的是实参。**
**D:**方法的参数列表指定要传递给方法什么样的信息,**采用的都是对象的形式**。所以,在参数列表中必须指定每一个所传递对象的类型及名字。想JAVA中任何传递对象的场合同样,这里传递的实际上也是引用,而且引用的类型必须正确。--《Thinking in JAVA》
 
24一颗二叉树的叶子节点有5个,出度为1的结点有3个,该二叉树的结点总个数是?
 
B

叶子节点个数 = 5 ,由于叶子节点个数=度为2的结点个数加1,因此

度为2的结点个数=5-1=4,

度为1的结点个数 = 3,
因此总个数 = 5 + 4 + 3 = 12

 
25操做系统是裸机上的第一层软件,其余系统软件(如__(12)__等)和应用软件都是创建在操做系统基础上的。
 
B

本题考查操做系统基本概念。 财务软件、汽车防盗程序、办公管理软件和睦象预报软件都属于应用软件,而选项A、C和D中含有这些软件。选项B中汇编程序、编译程序和数据库管理系统软件都属于系统软件。 计算机系统由硬件和软件两部分组成。一般把未配置软件的计算机称为裸机,直接使用裸机不只不方便,并且将严重下降工做效率和机器的利用率。操做系统(Operating System)的目的是为了填补人与机器之间的鸿沟,即创建用户与计算机之间的接口,而为裸机配置的一种系统软件。由下图能够看出,操做系统是裸机上的第一层软件,是对硬件系统功能的首次扩充。它在计算机系统中占据重要而特殊的地位,全部其余软件,如编辑程序、汇编程序、编译程序和数据库管理系统等系统软件,以及大量的应用软件都是创建在操做系统基础上的,并获得它的支持和取得它的服务。从用户角度看,当计算机配置了操做系统后,用户再也不直接使用计算机系统硬件,而是利用操做系统所提供的命令和服务去操纵计算机,操做系统已成为现代计算机系统中必不可少的最重要的系统软件,所以把操做系统看做是用户与计算机之间的接口。操做系统紧贴系统硬件之上,全部其余软件之下(是其余软件的共同环境)。 ![1.png](http://s1.51cto.com/images/20181010/1539166926957548.png "1539166926957548.png")

 
26下列说法哪一个正确( )

下列说法哪一个正确( )

C
A.没有模板,怎么可能建立对象,建立对象必须先要定义类,常识
B.对象中的数据域和方法取决于该对象的类,类里面有就有,没有就没有
D.数据域不必定是基本类型,也能够是引用类型
 
 
27JAVA属于( )。
 
D

计算机软件主要分为系统软件与应用软件两大类。系统软件主要包括操做系统、语言处理系统、数据库管理系统和系统辅助处理程序。应用软件主要包括办公软件和多媒体处理软件。Java是一门面向对象编程语言,属于计算机语言。故正确答案为D选项。

 

2、多选题(共3题,每题5分)

1CMS垃圾回收器在那些阶段是没用用户线程参与的
 
A,C
 
2jdk中关于操做装箱、拆箱的说法正确的有?
 
A,B,D

选项 C 说法错误,应该是: Double、Float的valueOf方法的实现是相似的 , 无限不可列举,不共享

 
3如下关于java堆栈的说法,正确的有()
 
A,B,C,D
相关文章
相关标签/搜索