Java Web程序员面试真题汇编43_第1页
Java Web程序员面试真题汇编43_第2页
Java Web程序员面试真题汇编43_第3页
Java Web程序员面试真题汇编43_第4页
Java Web程序员面试真题汇编43_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaWeb程序员面试真题汇编43简答题1.

Kafka与传统消息系统的区别是什么?正确答案:Kafka与传统消息系统之间有如下区别。

1)Kafka持久化日志,这些日志可以被重复读取和(江南博哥)长期保留。

2)Kafka是一个分布式系统,它以集群的方式运行,具有高扩展性,在内部通过复制数据提升容错能力和高可用性。

3)Kafka支持对数据的实时流式处理。

4)Kafka每秒消息处理速度达到十万级以上。其他消息系统远没有如此高的性能。

5)消息保留:传统的队列系统通常从队列末尾处理完成后删除消息。而Kafka中的消息即使在处理后仍然存在。这意味着Kafka中的消息不会因消费者收到消息而被删除。

6)基于逻辑的处理:传统队列系统不允许基于类似消息或事件处理逻辑。ApacheKafka允许基于类似消息或事件处理逻辑。[考点]消息队列综合

2.

如何处理可以让某个方法请求的参数中始终包含特定字符串如"my=dev"?正确答案:可以通过在方法的@RequestMapping注解中进行参数属性配置来实现,示例如下:

@RequestMapping(params="my=dev")[考点]SpringMVC

3.

Mongodb哪个命令可以切换、创建数据库?正确答案:Mongodb用use命令可以切换及创建数据库,命令格式:use数据库名称。如果不存在该数据库,use会创建一个新的数据库,如果该数据库存在,则切换到这个数据库,并返回这个数据库。[考点]Mongodb

4.

请写出单例模式的具体Java代码实现。正确答案:单例模式总结起来有很多种写法,最简单、高效的是用枚举法,这里介绍6种写法,使用哪一种写法,读者朋友可以根据自己的需要来选择。

1)枚举实现。

publicenumSingleton{

INSTANCE;

publicvoiddo(){}

}

2)用静态内部类来实现,保证了只会在调用时初始化,并且只会初始化一次。

publicclassSingleton{

privateSingleton(){)

privatestaticclassSingletonCreator{

privatestaticSingletoninstance=newSingleton();

}

publicstaticSingletongetInstance(){

returnSingletonCreator.instance;

}

}

3)最简单的实现。不足是无论是否会用到都会创建这个对象。

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance=newSingleton();

publicstaticSingletongetInstance(){

returninstance;

}

}

4)满足了使用时才创建实例的条件,但多线程访问时可能会产生创建多个实例问题。

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance;

publicstaticSingletongetInstance(){

if(instance==null){

instance=newSingleton();

}

returninstance;

}

}

5)解决了多线程的问题,但是会造成同步阻塞。降低了性能。

publicclassSingleton{

privateSingleton(){}

privatestaticSingletoninstance;

publicsynchronizedstaticSingletongetInstance(){

if(instance==null){

instance=newSingleton();

}

returninstance;

}

}

6)使用volatile关键字,并只有在判断实例为空真正创建对象时加用同步锁。

publicclassSingleton{

privateSingleton(){}

privatestaticvolatileSingletoninstance;

publicstaticSingletongetInstance(){

if(instance==null){

synchronized(Singleton.class){

if(instance==null){

instance=newSingleton();

}

}

}

returninstance;

}

}[考点]关于设计模式

5.

Spring中Bean有哪几种作用域?正确答案:Spring支持5种作用域。singleton与prototype是基本作用域,适用于所有Bean,singleton是Spring默认的作用域;Request、Session和globalSession是Web作用域,只有在Web应用中使用Spring时,这三个作用域才有效。现分别介绍如下。

1)singleton:单例模式,在SpringIoC容器中,使用singleton作用域的Bean将只有一个实例。

2)prototype:原型模式,每次注入,SpringIoC容器都将创建一个新的Bean实例。

3)request:对于每次HTTP请求,使用request作用域的Bean都会创建一个新实例,即每次HTTP请求将会产生不同的Bean实例。

4)session:对于每次HTTPSession,使用session作用域的Bean都会创建一个新实例。

5)globalSession:同一个全局的HTTPSession,只会创建一个新实例。典型情况下,仅在使用portletcontext时有效。

比较常用的是singleton和prototype两种作用域。Spring默认使用singleton作用域,容器会管理Bean的整个生命周期。而使用prototype作用域时,容器创建实例交给调用组件后,将不再管理维护该实例。使用singleton作为作用域的好处是可以节省频繁创建与销毁实例的开销。但要注意,在单例模式下,Bean是线程不安全的。[考点]Spring基础

6.

在Java开发中如何获取数据库的元信息?正确答案:数据库连接的getMetaData()方法可以取得数据库的元信息对象DatabaseMetaData,DatabaseMetaData中有很多方法,通过它们可以获取到数据库的产品名称、版本号、配置信息等。[考点]JDBC相关

7.

在服务提供方可以配置的消费者端的属性有哪些?正确答案:有如下四个属性:

timeout:方法调用超时时间。

retries:调用失败重试次数,默认重试2次。

loadbalance:负载均衡策略,默认随机策略。

actives:消费者端最大并发调用限制。[考点]Dubbo框架

8.

在Java中如何创建一个JDBC数据库连接?正确答案:创建连接,首先要注册目标数据库的驱动(Class.forName),然后通过DriverManager来创建并管理连接。DriverManager类是JDBC的管理类,该类负责加载、注册JDBC驱动程序,创建和管理数据库连接。获取连接方法:DriverManager.getConnection(StringURL,Stringuser,Stringpassword),有三个参数,后面是数据库的用户名和密码,URL是数据库连接字符串。[考点]JDBC相关

9.

JDBC中的CLOB和BLOB数据类型分别代表什么?正确答案:BLOB和CLOB都是大字段类型,BLOB是以二进制来存储的,CLOB可以直接存储文字。[考点]JDBC相关

10.

如何使用iQuery设置一个属性值?正确答案:iQuery设置一个属性值也是用attr()方法。形如attr(name,value),它得有两个参数,前面为属性名,后面是属性值。假定有<img/>元素,id为imgid,示例代码为$('#imgid').attr('src','/img/test.jpg'),这样就给<img/>的src属性进行了赋值。[考点]AJAX与JavaScript

11.

SpringBoot自动配置原理是什么?正确答案:SpringBoot的核心就是自动配置,自动配置又是基于条件判断来配置Bean。而自动配置的源码在spring-boot-autoconfigure-*.jar中。

1)开启自动配置的注解是@EnableAutoConfiguration,已包含在启动类的注解@SpringBootApplication中,所以SpringBoot默认已开启自动配置功能。

2)只要用户已经添加了相关jar依赖项,@EnableAutoConfiguration这个注解会“猜”用户将如何配置Spring。如果spring-boot-starter-web已经添加Tomcat和SpringMVC,这个注释就会自动假设用户在开发一个Web应用程序并添加相应的Spring配置,会自动去Maven依赖中读取每个starter中的spring.factories文件,该文件中配置了所有需要被创建的Spring容器中的Bean。[考点]SpringBoot

12.

什么是CSRF攻击?如何防范CSRF攻击?正确答案:CSRF(Cross—SiteRequestForgery),即跨站点请求伪造,攻击者通过跨站请求,在合法用户不知情的情况下,以合法用户的身份伪造请求进行非法操作。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。

防范CSRF攻击的主要手段是识别请求者身份。这里推荐几种方法。

●表单提交Token验证。

●HTTP请求头的Referer域检查(Referer记录着请求来源,可以通过检查请求来源来验证请求是否合法,如很多网站用此方法来实现图片防盗链)。

●验证码验证。[考点]软件安全知识

13.

$(document).ready()函数的作用是什么?正确答案:ready()函数仅能用于当前文档,它规定当ready事件发生时执行的代码。当DOM(文档对象模型)已经加载,并且页面(包括图像)已经完全呈现时,会发生ready事件。由于该事件在文档就绪后发生,因此把所有其他的iQuery事件和函数置于该事件中是非常好的做法。ready()函数有三种语法。

●$(document).ready(function).

●$().ready(function).

●$(function)。[考点]AJAX与JavaScript

14.

SpringJDBC如何把ResultSet对象中的数据映射为Java对象?正确答案:通过使用RowMapper可以做到。可使用接口实现类或匿名内部类(如果只使用一次)来实现RowMapper。示例如下:

//先创建实现t_users表与User对象映射的RowMapper实现类

publicclassUserRowMapperimplementsRowMapper<User>{

@Override

PublicUsermapRow(ResultSetrs,introwNum)throwsSQLException{

Useruser=newUser();

user.setUserId(rs.getInt("id"));

user.setUserName(rs.getString("user_name"));

returnuser;

}

}

然后就可以使用SpringJDBC执行SQL查询了:

Stringsql="select*fromt_users";

List<user>list=jdbcTemplate.query(sql,newUserRowMapper());[考点]SpringJDBC框架

15.

什么是复制?正确答案:复制是将数据同步到多个服务器的过程,通过多个数据副本存储到多个服务器上,增加数据可用性。复制可以保障数据的安全性,灾难恢复,无须停机维护(如备份、重建索引、压缩),分布式读取数据。[考点]MongoDB

16.

Producer是否直接将数据发送到Broker的Leader?正确答案:Producer只需要将数据发送到Broker的Leader,为了帮助Producer做到这点,所有的Broker都可以及时的告知:哪些是活动的,目标Topic目标分区的Leader在哪。这样Producer就可以直接将消息发送到目的地了。[考点]Kafka

17.

什么是TPS、QPS?正确答案:QPS和TPS是衡量网站性能和吞吐量的指标。

QPS(QueriesPerSecond),即每秒查询率是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。也就是最大吞吐能力。

TPS(TransactionsPerSecond),即每秒事务数。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出响应的过程,客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

QPS与TPS两者有所不同,一个TPS可能对应一个QPS,也可能对应多个QPS。对于一个页面的一次访问请求,形成一个TPS,但一次页面请求,如果发生多次对服务器的请求,那服务器完成的每一次请求,就是一个QPS。[考点]电商与互联网相关知识

18.

Kafka的使用场景有哪些?正确答案:Kafka由于它的众多优点,有着广泛的应用场景。如下所述。

日志聚合:收集各种服务的日志写入Kafka的消息队列进行存储,各种日志处理应用通过Consumer订阅并获取队列中的消息进行处理。因为在生产环境中,为了监控日志,会有大量的日志需要传输存储检索(很多公司采用著名的日志系统ELK),在分布式应用中由于日志的数量级越来越大,存储起来对速度的要求也越来越高,这时使用消息队列作为中间件能解决大量日志传输的问题。

消息系统:由于其高吞吐量、高可靠性、高扩展性等特点,被广泛用作消息中间件。

网站活动跟踪:经常有互联网系统用Kafka来记录Web用户或App用户的各种活动数据,如浏览网页、搜索、点击等,将这些活动信息发布到Kafka的Topic中,然后Consumer通过订阅这些Topic来做实时处理或监控分析,或者加载到大数据系统做离线分析和数据挖掘。

运营指标监控:Kafka也适合用来记录生产运营监控数据。从各分布式应用中聚合数据然后集中处理。

系统解耦:在重要操作完成后,发送消息,由别的服务系统来完成其他操作。如订单系统下单完成后给短信系统发送消息,订单系统只需要将消息发送到分布式消息队列即可。短信系统从消息队列获取消息后,根据消息内容给用户发送下单成功短信。短信系统与订单系统相互不直接耦合交互,甚至不需要知道对方系统的存在,都只单独与消息队列发生关系。这样就发挥了分布式系统的优点,从而提高了系统整体性能,也实现了应用系统之间的解耦合。同时,在消息队列两端,新增相关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论