Java开发八月七号上午面试

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Java开发八月七号上午面试

1、手写二分查找(递归)
public static int binarySerch(int [] a,int low,int high,int key){
int mid=(high+low)/2;
 if(key<a[low]||key>a[high]){
     return -1;
}else if(key==a[mid]){
  return mid;
}else if(key<a[mid]){
  return binarySerach(a,low,mid-1,key);
}else if(key>a[mid]){
  return binarySerach(a,mid+1,high,key);
}
   return -1;
}
2、
String a="abc";
String b="abc";
a.equal(b);
a==b;
各自的返回值是什么?String对象存在什么里?堆还是栈?

返回值都是true。

equal方法比较的是内容,==对基本数据类型比较的是值,对引用数据类型比较的是地址。在当前例子中,a和b都是对字符串abc的引用,所以地址是一致的。

String对象存在堆里。

栈存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)

堆:存放所有new出来的对象。

4、构造方法能否重写?能否重载?

构造方法无法被子类继承,所以无法重写。

可以重载,通过创建不同参数的构造方法,灵活地创建对象。

3、说一下finally,有什么用途?

finally:在try catch异常捕捉代码块中,不管是否发生异常,finally代码块一定会被执行。

一般情况下,把关闭物理连接池(数据库连接、IO流、Socket连接)放在其中。

4、你怎么做数据库查询优化?

1、尽量避免出现select * from 表,要尽可能明确查询的字段。

2、在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。

3、查询时尽量用索引覆盖,即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。

4、在判断有无符合条件的记录时尽量不要使用select count(*)和select top 1。

5、使用内层限定原则,在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句最里层限定,以减少数据的处理量。

6、应避免在order by字句中使用表达式。

7、小心使用in和or,在in中的数据尽量不超过两百个。

5、索引怎么创建,为什么要用索引?

创建索引语法:

CREAT INDEX  index_name 
ON table_name(colume name1,colume name2……)

索引相当于书籍的目录,能提高数据的检索速度。

6、说一说你理解的事务?

SQL采用事务将一系列不可分割的数据库操作作为整体来执行,保证数据库数据库的时效性和完整性。

7、讲一下Object,它有什么常用方法?

java.lang.Object,所有类都直接或间接继承了Object类,Object类是所有类的父类。

Object类的常用方法:

equals()方法:比较两个对象的引用是否相同。

toString()方法:返回一个“以文本方式表示”此对象的字符串。

getClass()方法:返回调用该方法的对象的类。

hashCode()方法:返回对象的散列值。

clone()方法:快速创建一个对象的引用副本。

finalize()方法:垃圾回收器准备释放内存的时候,会先调用finalize()。

wait()、notify()、notifyAll()用于线程相关操作。

8、@Service有什么用?

标记服务层,完成依赖注入,在控制层中可以用@AutoWired自动装配。

9、说一下@RestController

@RestController相当于@ResponseBody+@Cpmtroller合在一起。

在方法中使用@ResponseBody注解,如果方法需要返回json数据,就可以使用@ResponseBody注解。

而如果某个控制器类下的所有方法需要返回json数据的话,就可以使用@RestController。但需要注意的是,如果使用了@RestController注解,那么该控制器下的方法都不会再返回视图。

10、RabbitMQ分发多个消息的原理

RabbitMQ有四种消息分发模式,主要用的有3种,Fanout(广播模式)、Direct(队列模式)、Topic(主题模式),分发多个消息指的就是广播模式。

RabbitMQ拿到消息之后,会先交给 交换机 (Exchange), 然后交换机再根据预先设定的不同绑定( Bindings )策略,来确定要发给哪个队列。

而对广播模式而言,它不处理路由键,只需要简单的将队列绑定到exchange上,一个发送到exchange的消息都会被转发到与该exchange绑定的所有队列上。

11、Redis最多可以存储多少数据(也好像是每秒内查询次数)?是单线程还是多线程?怎么证明?

Redis没有存储多少数据的指标,存储的数据实际上是根据实际容量。在配置时:

设置redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。

(Redis可以达到100000+的QPS(每秒内查询次数))

Redis是单线程。

证明:可以通过显示线程命令来查看。[参考【1】]

参考:

【1】、https://blog.csdn.net/bntX2jSQfEHy7/article/details/79479152

三分恶                

                 微信公众号                  

             基础、原理、实战,搞Java,玩真的。    

关注

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
20 2
|
11天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
16天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
11天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
24 4
|
12天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
38 4
|
13天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
36 4
|
13天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
53 4
|
23天前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
77 8
|
18天前
|
SQL Java 程序员
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
19天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
36 2