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

一、单选题(共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

暂无

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

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

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

 

以下能达到同等效果的是:

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个长度,包括汉字。

 
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

总结: 1、如果一个 static final 变量是"编译期常量",就像 public static final String a = "JD";那样,那么这个值不需要对 Test2 类进行初始化就可以读取。

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

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

参考 :https://www.cnblogs.com/hglibin/p/10298650.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选项。

 

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

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

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

 
3以下关于java堆栈的说法,正确的有()
 
A,B,C,D
 
posted @ 2019-11-20 15:43  八重樱  阅读(1335)  评论(1编辑  收藏  举报