2019年腾讯最新Java工程师面试题

一、单选题(共21题,每题5分)

1在正则表达式当中下面那一个字符集表示非空格字符

A、[:graph:]

B、[:digit:]

C、[:space:]

D、[:alpha:]

参考答案:A

答案解析:

A

2下列叙述中,错误的是( )。

A、 内部类可访问它所在类的成员

B、 内部类的名称与定义它的类的名称可以相同

C、 内部类可用abstract修饰

D、 内部类可作为其他类的成员

参考答案:A

答案解析:

暂无

3以下哪个排序算法中,元素的比较次数元素与元素的初始排列无关()

A、希尔排序

B、快速排序

C、归并排序

D、直接插入排序

E、选择排序

参考答案:E

4下面程序的输出结果是什么。

下面程序的输出结果是什么。

```

 1 public class A2{
 2 public static void main(String[] args){
 3     int[] a={2,4,6,8,3,6,9,12};
 4     doSomething(a,0,a.length-1);
 5     for(int i=0;i=x){
 6             swap(a,i,j);
 7             i++;//交换了几次
 8         }
 9     }//把最大的放到最后
10     swap(a,i,end);//把最大的放到i的位置
11     return i;
12 }
13
14 private static void swap(int[] a,int i,int j)
15 {
16     int tmp=a[i];
17     a[i]=a[j];
18     a[j]=tmp;
19 }
20 }
21 ```                           

A、找到最大值

B、找到最小值

C、从大到小的排序

D、从小到大的排序

参考答案:C

答案解析:

开始被注释迷惑了半天。

按快排的思想,遍历数组将比x大的按顺序存至a\[0\]a\[1\]a\[2\]..此时j负责遍历数组,i负责依次指向下一次

遍历判断得到的大于x的数该存储的位置,每一次成功存储向后移动一格

![](https://storage.kuibuke.com/source/1/Eawsn8OjUtldwcCznJeyAa-L2dkhbIeK.)

![](https://storage.kuibuke.com/source/1/r_qNSSJe5jKn7YAjOeVqW87cD14xy3SB.)

![](https://storage.kuibuke.com/source/1/P_3qexdojr61Po55nN0C_TegJw5vWnl_.)

swap(a,i,end);//把最大的放到i的位置

应该是将x交换至分界点,( x并非最大 )至此一趟core完成,x左侧大于x,x右侧小于x,x左右任是无序数列

然后依据分治的思想,对左序列,右序列迭代。当分至每个序列只有一个元素序列必然有序。

最终达到排序目的。(灵魂手绘轻喷)

5以下关于hive以及Hadoop生态系统中其他组件的说法正确的是

A、Hbase依赖HDFS存储数据,实现的编程语言为Java

B、Hbase是一个面向列分布式数据库,和hive不同的是,hbase能够在它的数据库上实时运行,而不是运行mapreduce任务

C、hive不支持数据更新,延迟比较小,可用于实时查询系统

D、hive采用了SQL的查询语言HQL,其支持了SQL中的所有特性

参考答案:B

答案解析:

Hbase是一个面向列分布式数据库,和hive不同的是,hbase能够在它的数据库上实时运行,而不是运行mapreduce任务发生的

6以下JAVA程序的输出是什么()

以下JAVA程序的输出是什么()

 1 <pre class="prettyprint">public class HelloSogou{
 2      public static synchronized void main(String[] a){
 3          Thread t=new Thread(){
 4              public void run(){Sogou();}
 5      };
 6      t.run();
 7      System.out.print("Hello");
 8      }
 9      static synchronized void Sogou(){
10      System.out.print("Sogou");
11     }
12 }

A、HelloSogou

B、SogouHello

C、Hello

D、结果不确定

参考答案:B

答案解析:

我觉得误区有两个:一个是run和start区别,Thread.run()是调用方法,Thread. start()是启动线程;另一个是锁持有问题。这个题是调用方法,和多线程就无关。本题只有一个线程,持有HelloSogou.class锁。那么,就是另一个问题:同步方法调用另一个同步方法的锁问题?

public synchronized void methodA(int a, int b){} public synchronized void methodB(int a){ methodA(a, 0);

}

首先要明白两个问题,**1.锁的对象是谁?2.谁持有了锁?**

假设方法A和B是在同一个类Test中的两个方法。 Test t=new Test(); t.methodB();

调用methodB()方法,获得锁,锁是对象**t**;锁谁持有?当前线程(不可以说是methodB持有该锁),methodB又调用methodA,也需要锁**t**,该线程已持有**t**,当然可以直接调用methodA。

类比到此题,只有一个主线程,调用main,持有HelloSogou.class锁,那当然可以直接调用Sogou方法。

第二,如果是**t.statrt()**,那么这个题,**静态同步函数的锁是该类的字节码文件.class。**此题中,main函数和Sogou方法都是static的,所以持有相同**锁** **HelloSogou.class** ,那么,在main线程(main 是一个线程也是一个进程 )中又开了一个线程,调用Sogou方法,锁会冲突。

我的分析是:调用main函数(一个线程),main函数开启另一个线程,并启动,但是main函数和Sogou方法是同一个锁,所以main函数执行完毕后才会释放锁,Sogou方法才会执行,这就是为什么,换成start,是HelloSogou。

第三,将Sogou方法的锁改为其他.class锁,那么,HelloSogou和SogouHello都可能出现。因为没有互斥现象了,变为抢占式的了。

7下列关于Java语言中线程的叙述中,正确的是(  )。

A、线程由代码、数据、内核状态和-组寄存器组成

B、线程间的数据是不共享的

C、用户只能通过创建Thread类的实例或者定义和创建Thread子类的实例,建立和控制自己的线程

D、因多线程并发执行而引起的执行顺序的不确定性可能造成执行结果的不确定

参考答案:D

答案解析:

本题考查线程的基本知识。线程与进程在概念上是相关的,线程是由表示程序运行状态的寄存器、程序计数器、栈指针以及堆栈组成,它不包含进程地址空间中的代码 和数据。代码所操作的数据是Java线程模型中的一个组成部分,数据与代码是独立的。数据可以被多个线程共享,也可不共享。Java语言中提供两种创建线 程的方法,-种是通过继承Thread类创建线程,另-种是通过实现Runnable接口来创建线程。

8通过Intent传递一些二进制数据的方法有哪些?

通过Intent传递一些二进制数据的方法有哪些?

A、使用Serializable接口实现序列化,这是java常用的方法

B、实现Parcelable接口,这里Andriod的部分分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见

A、A

B、B

C、AB

参考答案:C

答案解析:

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

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

9在Java中,JDBC API定义了一组用于与数据库进行通信的接口和类,它们包括在(   )包中。

A、java.lang

B、java.sql

C、java.util

D、java.math

参考答案:B

答案解析:

暂无

10关于计算机网络,以下说法正确的是 (1)在向下的过程中,需要添加下层...

关于计算机网络,以下说法正确的是

(1)在向下的过程中,需要添加下层协议所需要的首部或者尾部

(2)在向上的过程中不断拆开首部和尾部

(3)在向上的过程中,需要添加下层协议所需要的首部或者尾部

(4)在向下的过程中不断拆开首部和尾部

(5)SMTP属于TCP协议

(6)POP3属于UDP协议

(7)DNS属于TCP协议

(8)Telnet属于UDP协议

A、(1)(2)(5)

B、(1)(2)(6)

C、(1)(2)(8)

D、(3)(4)(5)(6)

E、(3)(4)(5)(7)

参考答案:A

答案解析:

1)TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于[传输层](https://baike.baidu.com/item/%E4%BC%A0%E8%BE%93%E5%B1%82)协议。

2)其中TCP提供IP环境下的数据[可靠传输](https://baike.baidu.com/item/%E5%8F%AF%E9%9D%A0%E4%BC%A0%E8%BE%93),它提供的服务包括[数据流](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E6%B5%81)传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的[数据包](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%8C%85)发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;一般来说,TCP对应的是可靠性要求高的应用。

3)而UDP则不为IP提供可靠性、流控或差错恢复功能。UDP对应的则是可靠性要求低、传输经济的应用。

4)TCP支持的应用协议主要有:Telnet、FTP、SMTP等;

5) TCP对应的协议: (1) FTP:定义了文件传输协议,使用21端口。 (2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。 (3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。 (4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。 (5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。 UDP对应的协议: (1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。 (2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。 (3) TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

11Java是一门面向对象的编程语言,下面关键字中能够表示Java面向对象的特...

Java是一门面向对象的编程语言,下面关键字中能够表示Java面向对象的特性是()

A、extends, interface

B、volatite, implements

C、abstract, interface

D、static, void

参考答案:A

答案解析:

A

12下面关于操作系统的进程说法正确的有?

 

A、系统中进程的数目越多,CPU的利用率就越高

B、同一个进程的多个线程共享状况为堆共享,栈私有

C、只有使用了多进程技术才会发生死锁问题

D、进程和线程都有独立的地址空间

参考答案:B

答案解析:

死锁不仅可以发生在多线程中,也可以发生在多个进程中。只要是因争抢资源导致互相等待,无外力作用无法前进的都可以称为死锁

13下列关于Java布尔类型的描述中,正确的是(  )。

 

A、 -种基本的数据类型,它的类型名称为boolean

B、 用int表示类型

C、 其值可以赋给int类型的变量

D、 有两个值,l代表真,0代表假

参考答案:A

答案解析:

暂无

14下面有关java classloader说法错误的是?

A、Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader

B、ClassLoader使用的是双亲委托模型来搜索类的

C、JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关

D、ClassLoader就是用来动态加载class文件到内存当中用的

参考答案:C

答案解析:

一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职:

  • Bootstrap ClassLoader 负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
  • Extension ClassLoader 负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class
  • App ClassLoader 负责加载当前java应用的classpath中的所有类。

classloader 加载类用的是全盘负责委托机制。所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。
所以,当我们自定义的classloader加载成功了com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。

15HTTPS是一种安全的HTTP协议,它使用 ( ) 来保证信息安全?

A、IPSec

B、SSL

C、SET

D、SSH

参考答案:B

答案解析:

SSL是解决传输层安全问题的一个主要协议,其设计的初衷是基于TCP协议之上提供可靠的端到端安全服务。应用SSL协议最广泛的是HTTPS,它为客户浏览器和Web服务器之间交换信息提供安全通信支持。它使用TCP的443端口发送和接收报文。

16下列能够正确创建线程的方法是 ?

  • ①.继承java.lang.Thread类,并重写run(  )方法
  • ②.继承java.lang.Runnable类,并重写start(  )方法
  • ③.实现java.lang.Thread接口,并实现run(  )方法
  • ④.实现java.lang.Runable接口.并实现run(  )方法

A、①,③

B、②,④

C、②,③

D、①,④

参考答案:D

答案解析:

用Thread类的构造方法Thread(Runnable target)创建线程对象时,构造方法中的参数必须是一个具体的对象,该对象称作线程的目标对象,创建目标对象的类必须要实现Runnable接口。

17given the following code,what will be the output?

 1 class Value{
 2     public int i=15;
 3 }
 4 public class Test{
 5     public static void main(String argv[]){
 6         Test t=new Test( );
 7         t.first( );
 8     }
 9
10 public void first( ){
11     int i=5;
12     Value v=new Value( );
13     v.i=25;
14     second(v,i);
15     System.out.println(v.i);
16 }
17
18 public void second(Value v,int i){
19     i = 0;
20     v.i = 20;
21     Value val = new Value( );
22     v = val;
23     System.out.println(v.i+" "+i);
24    }
25 }

A、15 0 20

B、15 0 15

C、20 0 20

D、0 15 20

参考答案:A

答案解析:

![](https://storage.kuibuke.com/source/1/1IhReVK1\_lhieKPRakZwi7kZdUrMZm\_k.)

18如果希望在网络中通过某个类的对象包装数据进行传输,那么这个类需要实现下面哪...

如果希望在网络中通过某个类的对象包装数据进行传输,那么这个类需要实现下面哪个接口?()

A、Cloneable

B、Comparable

C、Serializable

D、Runnable

参考答案:C

19linux查看系统IP地址以及网卡流量可以使用以下哪个命令

 

A、ipconfig

B、ifconfig

C、netstat

D、ss

参考答案:B

答案解析:

Windows下是ipconfig,Linux下是ifconfig

20数据的存储结构是指____。

A、 存储在外存中的数据

B、 数据所占的存储空间

C、 数据在计算机中的顺序存储方式

D、 数据的逻辑结构在计算机中的表示

参考答案:D

答案解析:

暂无

21封装、继承和多态是面向对象编程的三大特征,在java 开发过程中有着广泛应用。以下关于它们的描述不正确的是: ( )

A、封装是将数据和基于数据的操作封装成一个整体对象,通过接口实现对数据的访问和修改

B、继承关系中共有的类属性特征均需在父类和子类中进行说明

C、多态使得一个类实例的相同方法在不同情形有不同表现形式

D、多态机制使具有不同内部结构的对象可以共享相同的外部接口

参考答案:B

答案解析:

答案:B解析:根据《系统集成项目管理工程师教程(第2版)》第137页,继承表示类之间的层次关系(父类与子类),这种关系使得某类对象可以集成另外一类对象的特征。所以继承关系中共有类属性只要在父类中进行说明即可,子类不需要了。

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

1在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的?

A、每个中文字符占用2个字节,每个英文字符占用1个字节

B、假设数据库中的字符是以GBK编码的,那么显示数据库数据的网页也必须是GBK编码的。

C、Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。

D、实现国际化应用常用的手段是利用ResourceBundle类

参考答案:C,D

答案解析:

收到很多赞,感谢诸君阅读捧场
在此针对评论区的一些意见发表如下声明:

  1. 这个回答不会给你解释题目与分析解题过程。这个回答的目的是科普。为的是从根本上向大家解释清楚Unicode的玩法。如果读者只是想了解解题过程和选项分析,请看本题的推荐答案。
  2. 一些朋友说这个答案是复制粘贴过来的。我想一千个读者有一千个哈姆雷特。我无论说什么其实都无法改变读者内心认定的那个结论。所以,大家开心就好。为了这个目的,大家不妨先问问自己是不是真的想要了解Unicode的基础知识?如果是,那么欢迎您继续下面的旅程。


很多人都把Unicode编码挂在嘴边,其实咱们现实生活中遇到的编码基本都是Unicode的

因为Unicode兼容了大多数老版本的编码规范例如 ASCII

Unicode编码定义了这个世界上几乎所有字符(就是你眼睛看到的长那个样子的符号)的数字表示

也就是说Unicode为每个字符发了一张身份证,这张身份证上有一串唯一的数字ID确定了这个字符

在这个纷乱世界上存在的唯一性。Unicode给这串数字ID起了个名字叫[码点](Code Point)

而很多人说的编码其实是想表达[Unicode转换格式](即UTF,Unicode Transformation Formats)

有没有觉得眼前一亮豁然开朗?没错 这就是我们看到的UTF-8/UTF-16/UTF-32的前缀来源

这个[Unicode转换格式]的存在是为了解决[码点]在计算机中的二进制表现形式而设计的

毕竟我们的机内表示涉及存储位宽,兼容古老编码格式,码点是数值过大的罕见字符等问题

[码点]经过映射后得到的二进制串的转换格式单位称之为[码元](Code Unit)。也就是说如果有一种UTF的码点二进制表示有n字节,其码元为8位(1个byte),那么其拥有码元n个。每种UTF的码元都不同,其宽度被作为区分写在了UTF的后缀——这就是UTF-8/UTF-16/UTF-32的由来。UTF-8的码元是8位的,UTF-16的码元是16位的。大部分的编程语言采用16位的码元作为机内表示。这就是我们在各种语言中调用获取一个字符串中character的数量时会出现这么多混乱的原因。事实上我们调用这些方法时取得的不是字符个数,而是码元个数!一旦我们的字符串中包含了位于基本平面之外的码点,那么就会需要更多的码元来表示,这个时候就会出现测试时常见的困惑——为何return的字符数比实际字符数要多?所以实际写代码时要特别注意这个问题。

采取不同的映射方式可以得到不同格式的二进制串,但是他们背后所表示的[码点]永远是一致的就好像你换身份证但是身份证号不变一样。由于平时人们误把[转换格式]也称为[编码],所以造成今天Unicode/UTF傻傻分不清楚且遣词造句运用混乱的悲桑局面。

Unicode 编码 发展到今天 扩展到了 21 位(从 U+0000 到 U+10FFFF )。这一点很重要: Unicode 不是 16 位的编码, 它是 21 位的。这 21 位提供了 1,114,112 个码点,其中,只有大概 10% 正在使用,所以还有相当大的扩充空间。

编码空间被分成 17 个平面(plane),每个平面有 65,536 个字符(正好填充2个字节,16位)。0 号平面叫做「基本多文种平面」( BMP, Basic Multilingual Plane ,涵盖了几乎所有你能遇到的字符,除了 emoji(emoji位于1号平面 - -)。其它平面叫做补充平面,大多是空的。

总结一下各种编码格式的特质:

UTF-32

最清楚明了的一个 UTF 就是 UTF-32 :它在每个码点上使用整 32 位。32 大于 21,因此每一个 UTF-32 值都可以直接表示对应的码点。尽管简单,UTF-32却几乎从来不在实际中使用,因为每个字符占用 4 字节太浪费空间了。

UTF-16 以及「代理对」( Surrogate Pairs )的概念

UTF-16要常见得多,它是根据有 16 位固定长度的码元( code units 定义的。UTF-16 本身是一种长度可变的编码。基本多文种平面(BMP)中的每一个码点都直接与一个码元相映射。鉴于 BMP 几乎囊括了所有常见字符,UTF-16 一般只需要 UTF-32 一半的空间。其它平面里很少使用的码点都是用两个 16 位的码元来编码的,这两个合起来表示一个码点的码元就叫做代理对( surrogate pair 

UTF-8

UTF-8 使用一到四个字节来编码一个码点。从 0 到 127 的这些码点直接映射成 1 个字节(对于只包含这个范围字符的文本来说,这一点使得 UTF-8 和 ASCII 完全相同)。接下来的 1,920 个码点映射成 2 个字节,在 BMP 里所有剩下的码点需要 3 个字节。Unicode 的其他平面里的码点则需要 4 个字节。UTF-8 是基于 8 位的码元的,因此它并不需要关心字节顺序(不过仍有一些程序会在 UTF-8 文件里加上多余的 BOM)。

有效率的空间使用(仅就西方语言来讲),以及不需要操心字节顺序问题使得 UTF-8 成为存储和交流 Unicode 文本方面的最佳编码。它也已经是文件格式、网络协议以及 Web API 领域里事实上的标准了。

我们的JVM中保存码点是UTF16的转换格式,从char的位宽为16位也可以看得出来。由于绝大部分编码的码点位于基本平面,所以使用16位可以几乎表示所有常用字符。这就是许多语言编译器或运行时都使用UTF16的原因。英文在使用UTF16时也是2字节表示的。当我们想要使用其他平面的字符时,码元超过2个字节,就需要使用代理对在语言中的特定表示方式,譬如‘\U112233’之类的。

使用UTF8时,常用的Alphabet和Numeric都在前127字节,被有效率地用一个字节表示。而我们的中文由于排在1920个码点之后,所以使用3个字节表示,这方面就比UTF16转换格式耗费更多空间。

最后,不论使用哪种UTF转换格式,都是程序员自己可以选择的一种表达方式而已。我们可以通过Java方便的API进行自如转换。

2下列说法错误的有( )

A、Java面向对象语言容许单独的过程与函数存在

B、Java面向对象语言容许单独的方法存在

C、Java语言中的非静态方法属于类中的成员(member)

D、Java语言中的方法必定隶属于某一类(对象),调用方法与C语言的过程或C++语言的函数相同

参考答案:A,B,C,D

答案解析:

答案:ABCD 做这题其实要区分:C的过程,C++的函数,Java的方法。再看题目,就知道考点了。 java不允许单独的方法,过程或函数存在,需要隶属于某一类中。——AB错 java语言中的方法属于对象的成员,而不是类的成员。不过,其中静态方法属于类的成员。——C错 D问的是java调用方法和C调用过程,C+ + 的函数一样?肯定不一样。错

3关于Java中的字符串,下列说法错误的是

A、Java为了方便字符串操作,重载了+、+=这两个运算符

B、由于Java中的字符串操作非常重要,所以Java将String类型设定为基本数据类型

C、要使用String,就必须在程序的开头部分写上:import java.util.*;

D、StringBuilder是JDK 5.0中新加入的类,它可以提高字符串操作的效率

参考答案:B,C

答案解析:

暂无

4Java异常处理的过程中,那些实践是值得推荐的?

A、调用方法的时候返回布尔值来代替返回null,这样可以 NullPointerException

B、能抛受控异常(checked Exception)就尽量不抛受非控异常(checked Exception)

C、catch块里不用写代码,优先在finally去实现功能

D、一定要在数据库连接,数据库查询,流处理后,在finally块中调用close()方法

参考答案:A,B,D

答案解析:

异常处理的过程中,你遵循那些好的实践?

  • 异常处理在项目设计中是非常关键的,所以精通异常处理是十分必要的。异常处理有很多最佳实践,下面列举集中,它们提高你代码的健壮性和灵活性:
  • 调用方法的时候返回布尔值来代替返回null,这样可以 NullPointerException。由于空指针是java异常里最恶心的异常。
  • catch块里别不写代码。空catch块是异常处理里的错误事件,因为它只是捕获了异常,却没有任何处理或者提示。通常你起码要打印出异常信息,当然你最好根据需求对异常信息进行处理。
  • 能抛受控异常(checked Exception)就尽量不抛受非控异常(checked Exception)。通过去掉重复的异常处理代码,可以提高代码的可读性。
  • 绝对不要让你的数据库相关异常显示到客户端。由于绝大多数数据库和SQLException异常都是受控异常,在Java中,你应该在DAO层把异常信息处理,然后返回处理过的能让用户看懂并根据异常提示信息改正操作的异常信息。
  • 在Java中,一定要在数据库连接,数据库查询,流处理后,在finally块中调用close()方法。

5以下JSP代码定义了一个变量,如何输出这个变量的值?

A、<bean:write name="helloWorld"/>

B、<%=stringBean%>

C、<bean:write name="stringBean"/>

D、<%String myBean=(String)pageContext.getAttribute("stringBean",PageContext.PAGE_SCOPE);%><br><%=myBean%>

参考答案:B,C,D

答案解析:

bean是Struts1的标签,先下载struts-taglib-1.3.10.jar,然后添加到lib.
测试代码:
pageEncoding="gbk"%>

jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?

A、抽象类可以有构造方法,接口中不能有构造方法

B、抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法

C、一个类可以实现多个接口,但只能继承一个抽象类

D、接口中可以有普通成员变量,抽象类中没有普通成员变量

参考答案:B,D

答案解析:

**接口可以有default、static方法,所以B是错的。** > interface A { > abstract void a(); > static void s() { > } > default void d(){ > > } > void b();//默认用abstract修饰 > int a = 0;//默认用static final 修饰 > }

7以下关于Redis的RDB 优缺点的说法正确的有?

A、RDB 会生成多个数据文件,每个数据文件都代表了某一个时刻中 redis 的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的数据文件发送到一些远程的安全存储上去,比如说 Amazon 的 S3 云服务上去,在国内可以是阿里云的 ODPS 分布式存储上,以预定好的备份策略来定期备份 redis 中的数据。

B、RDB 对 redis 对外提供的读写服务,影响非常小,可以让 redis 保持高性能,因为 redis 主进程只需要 fork 一个子进程,让子进程执行磁盘 IO 操作来进行 RDB 持久化即可。

C、相对于 AOF 持久化机制来说,直接基于 RDB 数据文件来重启和恢复 redis 进程,更加快速。

D、如果想要在 redis 故障时,尽可能少的丢失数据,那么 RDB 没有 AOF 好。一般来说,RDB 数据快照文件,都是每隔 5 分钟,或者更长时间生成一次,这个时候就得接受一旦 redis 进程宕机,那么会丢失最近 5 分钟的数据。

参考答案:A,B,C,D

答案解析:

RDB 优缺点

  • RDB 会生成多个数据文件,每个数据文件都代表了某一个时刻中 redis 的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的数据文件发送到一些远程的安全存储上去,比如说 Amazon 的 S3 云服务上去,在国内可以是阿里云的 ODPS 分布式存储上,以预定好的备份策略来定期备份 redis 中的数据。
  • RDB 对 redis 对外提供的读写服务,影响非常小,可以让 redis 保持高性能,因为 redis 主进程只需要 fork 一个子进程,让子进程执行磁盘 IO 操作来进行 RDB 持久化即可。
  • 相对于 AOF 持久化机制来说,直接基于 RDB 数据文件来重启和恢复 redis 进程,更加快速。
  • 如果想要在 redis 故障时,尽可能少的丢失数据,那么 RDB 没有 AOF 好。一般来说,RDB 数据快照文件,都是每隔 5 分钟,或者更长时间生成一次,这个时候就得接受一旦 redis 进程宕机,那么会丢失最近 5 分钟的数据。
  • RDB 每次在 fork 子进程来执行 RDB 快照数据文件生成的时候,如果数据文件特别大,可能会导致对客户端提供的服务暂停数毫秒,或者甚至数秒。

8OutOfMemoryError异常在哪些数据区域中可能会出现?

A、Java堆溢出

B、程序计数器溢出

C、虚拟机栈和本地方法栈溢出

D、方法区和运行时常量池溢出

参考答案:A,C,D

答案解析:

程序计数器一般不会溢出。

三、判断题(共1题,每题5分)

1天猫双十一有个积分换墨盒的活动,总共有50万台天猫魔盒(box),每个用户(user)可以用99个天猫积分(point)兑换一台魔盒,且每人限换一台。 请设计一套java接口并实现下单(order)逻辑。 参考(但不局限于)下面的下单逻辑: 1、创建订单 2、扣减用户积分 3、扣减魔盒库存 4、下单成功 同时请回答: 1、数据库表结构如何设计,有哪些表,分别有什么作用? 2、下单过程中哪些地方可能成为瓶颈?如何解决或改善? 3、是否会用到数据库事务,哪些地方会用到?如果不用数据库事务,如何保证数据的一致性?

正确

错误

参考答案:A

答案解析:

1、表的设计:
①用户表usertable ,字段id,name,point,以及记录该用户是否曾经兑换过魔盒的标志字段hasdown,用0表示没有下过,1表示下过
②魔盒表boxtable,字段allnumber表示总数,remainnumber表示所省的魔盒数量
③订单表ordertable,字段id,userid,ordertime表示下单时间
2、并发过程,当所有用户同时访问数据库,操作魔盒表和用户表时为了保证事务的一致性,有必要在业务逻辑处理的地方,即更改魔盒表中魔盒数量的代码块或接口和对用户表信息的处理地方处都要加上同步机制,事务回滚等措施
3、用到的事务
判断用户信息:积分是否大于99,是否曾经兑换过魔盒(hasdown是否为0),如果积分够又没兑换过,那么在兑换时用户表里的积分数要减去99,并且置hasdown为1
操作魔盒表:判断魔盒剩余数是否大于0,如果大于0就进行兑换,并使魔盒数减1,
订单表:当以上两个事务均完成时再向订单表里插入一条记录,包括用户id,下单时间
附:接口
Public void order(User user, Box box);

原文地址:https://www.cnblogs.com/a609251438/p/11897905.html

时间: 2024-10-11 00:57:01

2019年腾讯最新Java工程师面试题的相关文章

2019蚂蚁金服中高级Java工程师面试题

面试基础 谈谈一致hash算法? 按照hash算法来将对应的key哈希到一个具有2^32次方个桶的空间中,即0~(2^32)-1的数字空间.将这些数字头尾相连,想象成一个闭合的环形.如果集群中加入新的机器,采用它的IP或者唯一别名计算哈希值,也映射到环中.新增key值以顺时针的方向,存储到离自己最近的机器中. 参考:https://blog.csdn.net/cb_lcl/article/details/81448570 说说乐观锁和悲观锁? 乐观锁:假设每次操作别人不会修改数据,当更新的时候根

Java工程师笔试题整理[校招篇]

隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打好Java基础:如何一步一步的学Java - 学习编程 - 知乎专栏.然后再来看一下练习一下各大厂的面试笔试题目. 如果以下内容满足不了你,你还可以去看这篇: 2016校招编程题汇总 - 学习编程 - 知乎专栏 进入主要内容(主要内容整理来自牛客网:牛客网)(以下内容按照各大公司进行划分,对每一公司按照年份进行划分,如果想想下载以下内容,可以

2019最新java常见面试题整理

操作系统说一下线程和进程,它们的区别同步和异步的区别阻塞和非阻塞的区别操作系统中死锁的四个必要条件mmap和普通文件读写的区别,mmap的注意点CPU密集型和IO密集型的区别Linuxlinux 用过的命令kill 用法,某个进程杀不掉的原因(进入内核态,忽略 kill 信号)系统管理命令(如查看内存- 网络情况)管道的使用grep 的使用,一定要掌握,每次都会问在文件中查找shell 脚本find 命令awk 使用讲一下linux的Swap分区硬链接和软连接区别讲一下epoll的基本原理,优点

Java 工程师面试题整理(三)

根据自己收集的还有一部分自己面试的整理出来,希望能帮到面试的兄弟(2019年). 用友网络 1.你们用微服务有什么好处呢? 2.微服务之间的事务是怎么处理的?怎么回滚? 3.MQ用的什么?MQ的事务是怎么做的? 4.Object里面有什么方法?这些方法什么时候需要用到?equals方法和hashCode需要一起重写吗? 5.怎么删除一个list里面的奇数.list里面有十个整数. 6.Java的IO有没有了解?包里都有些什么内容? 7.Java的类加载过程是什么样的? 8.怎么在Object类中

高级java工程师面试题-随笔

最近打算要换工作,也面试了几家,因为不是自己喜欢的所以拒了一些(当然也有人家不要我的.....).在面试的过程中发现对java高级程序员的考察基本上围绕知识面,知识深度两个方面来考察.下面是在面试过程中遇到的问题: 1 如何防止重复提交2 如何跟踪web开发中的一个会话3 10万数据 如何高效查询最大值 第三个记录4 http与https的区别5 请求http://www.baidu.com 的全过程6 static 是否可以继承7 String.StringBuffer与StringBuild

最新Java开发面试题汇总

原文地址:www.jianshu.com/p/faaa4c2a4-前言为了方便之后的面试复习,我把各类面试题给汇总了一下,每道题都是经过自己筛选后觉得需要掌握的,此次整理包括 Java.数据结构与算法.计算机网络.操作系统.数据库等.文末我会把这些完整的答案放送给大家.Java 篇(1). Java基础知识java中==和equals和hashCode的区别int与integer的区别抽象类的意义接口和抽象类的区别能否创建一个包含可变对象的不可变对象?谈谈对java多态的理解String.Str

Java 工程师面试题整理(四)

秀强信息 这个公司做学前教育,老板喜欢谈理想和谈情怀来压工资.属于18年年底成立的小公司,Java开发三个人吧. 一面(电话): 1.服务没挂,但是不可用的,Nginx感知不到,怎么办? 2.下单过程库存是怎么处理的?下单卡住多久释放锁定的库存? 3.多线程同步?synchronized,wait,notify.notifyALL 4.wait和sleep以及yield 5.HashMap和ConcurrentHashMap 6.ThreadLocal用过吗? 7.Redis怎么做数据同步?对象

2019 翔通动漫java面试笔试题 (含面试题解析)

本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.翔通动漫等公司offer,岗位是Java后端开发,最终选择去了翔通动漫. 面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助.另外,目前在翔通动漫也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角 面试流程 ??先说下面试流程,一般大公司都有3-4轮技术面,1轮的HR面.就翔通动漫

JAVA工程师面试题

 今天去一家公司面试了一下,脑瓜子感觉晕晕的,有几个算法题都没做出来,题目相对来说都比较简单,应该是自己没准备好吧,状态不怎么行,面试后自己觉得挺不满意的,以后还是得沉下心来,做好充足的准备,才能让面试更添几分色彩,把今天笔试题跟大家分享一下,也给自己做个总结: 1.一台天平,右盘上有若干重量相等的白球,左盘上有若干重量相等的黑球,这时候两边平衡.现在从右盘取走一个白球置于左盘子上,再把左盘的两个黑球置于右盘上,同时给左盘加20克砝码,这时候两边也平衡;如果从右盘移两个白球到左盘上,从左盘移