面试题 | 《Java面试题集》-- 第三套

说明:以下面试题中,选项背景为这个颜色的,则代表为正确答案。

01

0.6332的数据类型是?

A.

float

B.

double

C.

Float

D.

Double

解析

考点Java基本数据类型

默认为double型,如果为float型需要加上f显示说明,即0.6332f;

02

Oracle中varchar2类型的最大长度是?

A.

1000

B.

4000

C.

2000

D.

3000

解析

考点数据库字段类型

varchar2分别在oracle的sql和pl/sql中都有使用,oracle 在sql参考手册和pl/sql参考手册中指出:oracle sql varchar2的最大支持长度为4000个字节(bytes);而 oracle plsql varchar2最大支持长度为32767个字节,注意此处的最大长度是指字节长度,而不是指字符个数

03

按照MVC设计模式,JSP用于实现?

A.

Model

B.

View

C.

Controller

D.

容器

解析

考点:MVC模型思想

jsp对应mvc的v层,就是视图层,用来显示用户界面

04

下面的代码实现了设计模式中的什么模式?

public class A { 
    private A instance; 
    private A() { 
    } 
    public static A getInstance { 
        if ( A == null ) 
            instance = new A(); 
        return instance; 
    } 
} 

A.

Factory

B.

Abstract Factory

C.

Singleton

D.

Builder

解析

考点:设计模式

单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在,单例模式只允许创建一个对象,因此节省内存,加快对象访问速度;

饿汉式:单例实例在类装载时就构建,急切初始化。(预先加载法)

懒汉式:单例实例在第一次被使用时构建,延迟初始化

以上属于懒汉模式

05

TCP通信建立在连接的基础上,TCP连接的建立要使用几次握手的过程?

A.

2

B.

3

C.

4

D.

5

解析

考点:TCP协议

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换,TCP协议稳定、安全、但是效率低。

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发

06

以下哪个命令用于测试网络连通?

A.

telnet

B.

netstat

C.

ping

D.

ftp

解析

考点:网络编程

DOS命令的使用 ping命令:利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障 ifconfig all :显示或设置网络设备 netstat: 用于查看当前基于 NETBIOS 的 TCP/IP 连接状态,通过该工具你可以 获得远程或本地 的组名和机器名。 telnet: 使用telnet命令访问远程计算机

07

下列是jsp作用域的通信对象的有?

A.

Session

B.

application

C.

pageContext

D.

cookie

解析

考点:jsp作用域对象

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 session表示一个请求的javax.servlet.http.HttpSession对象。

Session可以存贮用户的状态信息 applicaton 表示一个javax.servlet.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page表示从该页面产生的一个servlet实例

08

用abstract修饰的类是抽象类,但抽象类中可以没有abstract方法?

A.

正确

B.

错误

解析

考点:抽象类

抽象类中可以没有抽象方法,但是如果实现了抽象类,则必须继承实现抽象类中所有的抽象方法

09

JDK1.8新特性有哪些?

解析

考点:JDK1.8新特性

一、接口的默认方法:Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。

二、Lambda 表达式:Collections.sort(names (a b) -> b.compareTo(a));

三:方法与构造函数引用。Java 8 在包java.time下包含了一组全新的时间日期API

10

怎样设计实现一个高效的线程安全的HashMap?

解析

考点:线程安全、HashMap

方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的。 这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现。

方法二:重新改写HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap. 这个方法比方法一有了很大的改进。(锁分离) 方法一使用的是的synchronized方法是一种悲观锁,在进入之前需要获得锁 确保独享当前对象,然后做相应的修改/读取,方法二使用的是乐观锁,只有在需要修改对象时比较和之前的值是否被人修改了,如果被其他线程修改了,那么就会返回失败,锁的实现使用的是 NonfairSync. 这个特性要确保修改的原子性、互斥性,无法在JDK这个级别得到解决,JDK在此次需要调用JNI方法,而JNI则调用CAS指令来确保原子性与互斥性;

11

了解面向服务框架SOA,微服务吗?谈谈理解?

解析

考点:微服务

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式 进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。 微服务:彻底的组件化和服务化,Docker容器,进程隔离;微服务的目的是有效的拆分应用,实现敏捷开发和部署 ;

12

有1万个左右的脏词,每次发帖要判断帖子里边是否包括有脏词,数据库应该如何设计?

解析

考点:数据库约束条件、优化设计

可以建立一个脏词字典表,写好函数判断帖子正文里面是否有脏词。然后再这个帖子正文字段上面建立check 约束

13

Java中会存在内存泄露吗?请简单描述?

解析

考点:内存泄漏

会出现内存泄露。

内存泄露有两种情况:

1)堆中分配的内存,在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉;

2)在内存对象已经不需要的时候,还仍然保留这块内存和它的访问方式(引用)。

List list = new ArrayList<>();

for(int i=1;i<100;i++){

Object o = new Object();

list.add(o);

o=null;

}

14

JAVA中常用xml解析技术有哪些?区别是什么?

解析

考点:XML解析

Java中常用的xml解析技术有DOM、SAX两种方式,这两种方式如下: DOM解析处理大型文件时其性能下降的非常厉害,此问题由DOM的树结构所造成的,这种结构占用的内存较多,而DOM必须在解析文件之前把整个文档载入内存,适合对XML的随机访问。

SAX解析不同于DOM,SAX是事件驱动类型的XML解析方式,它顺序读取XML文件,不需要一次全部装载整个文件,当遇到像文档开题,文档借书,或者标签开题与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合XML的顺序访问

15

简单说说session.load()和session.get()的区别,哪种方式可以使用二级缓存?

解析

考点:延迟加载

session.load()和session.get()的区别为:

1.get不支持延迟加载 而load支持。换句话说,get方法一定获取实际的对象 而load有可能返回代理对象。

2.如果未能发现符合条件的记录,get方法返回null 而load方法会抛出一个 ObjectNotFoundException。 get方法和load方法都可以使用二级缓存

16

Mybatis里面的$和#有什么区别?

解析

考点:mybatis使用

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111 那么解析成sql时的值为order by "111" 如果传入的值是id,则解析成的sql为order by "id".

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111 那么解析成sql时的值为order by user_id 如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$

17

说一说ThreadLocal 关键字?

解析

考点:ThreadLocal

volatile,synchronized,Lock. 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本. 安全:使用元子类,实现并发锁,使用线程安全的类,使用volatile关键字

18

Spring的annotation(注解)如何实现?

解析

考点:Spring注解驱动

Annotation是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用Annotation,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证、处理或者进行部署。

4个元注解:

1.@Target 用于描述注解的使用范围 

2.@Retention 用于描述注解的生命周期

3.@Documented 可以被工具文档化

4.@Inherited 三种标准annontation类型:

(1)Override,被标注的方法重载了父类的方法;

(2)Deprecated

(3)SuppressWarnings,此注解能告诉Java编译器关闭对类、方法及成员变量的警告

19

什么是反射?哪些地方用到反射?反射的性能如何优化?

解析

考点:反射

反射就是知道了类,通过方法获得这个类里面的方法、属性等等信息。 反射的作用:在运行的时判定任意一个对象所属的类;运行时,构造任意一个类的对象;运行时,判定一个类所属的成员变量和方法;在运行时调用任意的一个方法;生成动态代理;

20

一般线程和守护线程的区别?

解析

考点:线程

Daemon的作用是为其他线程的运行提供服务,比如说GC线程。thread.setDaemon(true)必须在thread.start()之前设置。 在Daemon线程中产生的新线程也是Daemon的。 当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程

原文发布于微信公众号 - 码神联盟(lkchatspace)

原文发表时间:2018-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏自动化测试实战

RF设置全局变量

4457
来自专栏代码世界

Flask之wtforms

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

1495
来自专栏抠抠空间

Flask之WTForms

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

1103
来自专栏jeremy的技术点滴

Retrying_Library_For_Java

3235
来自专栏测试开发架构之路

【总结】梳理下接口功能测试

1323
来自专栏zingpLiu

浅析Python多线程

学习Python多线程的资料很多,吐槽Python多线程的博客也不少。本文主要介绍Python多线程实际应用,且假设读者已经了解多线程的基本概念。如果读者对进程...

1988
来自专栏代码世界

Flask之wtforms

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

1333
来自专栏北京马哥教育

经典!Python运维中常用的几十个Python运维脚本

file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建。但是更推荐使用内置...

3204
来自专栏Golang语言社区

Linux内核通知链机制的原理及实现

一、概念: 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它...

3908
来自专栏逍遥剑客的游戏开发

Nebula3学习笔记(5): IO系统

1924

扫码关注云+社区

领取腾讯云代金券