Java开发八月七号上午面试

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 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
目录
相关文章
|
1天前
|
SQL JavaScript 前端开发
用Java来开发Hive应用
用Java来开发Hive应用
14 7
|
1天前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
11 6
消息中间件 缓存 监控
12 0
|
1天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
10天前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
12天前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
16天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
23天前
|
IDE Java 开发工具
快速上手指南:如何用Spring Boot开启你的Java开发之旅?
【8月更文挑战第22天】Spring Boot由Pivotal团队开发,简化了Spring应用的创建过程。本文详述了从零开始搭建Spring Boot项目的步骤:首先确保安装了新版JDK、Maven/Gradle及IDE如IntelliJ IDEA或Eclipse;接着访问Spring Initializr网站(start.spring.io),选择所需依赖(如Web模块)并生成项目;最后,使用IDE打开生成的项目,添加`@SpringBootApplication`注解及main方法来启动应用。通过这些步骤,即便是新手也能快速上手,专注于业务逻辑的实现。
31 1
|
14天前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
57 0
|
14天前
|
开发者 Java Spring
【绝技揭秘】掌握Vaadin数据绑定:一键同步Java对象,告别手动数据烦恼,轻松玩转Web应用开发!
【8月更文挑战第31天】Vaadin不仅是一个功能丰富的Java Web应用框架,还提供了强大的数据绑定机制,使开发者能轻松连接UI组件与后端Java对象,简化Web应用开发流程。本文通过创建一个简单的用户信息表单示例,详细介绍了如何使用Vaadin的`Binder`类实现数据绑定,包括字段与模型属性的双向绑定及数据验证。通过这个示例,开发者可以更专注于业务逻辑而非繁琐的数据同步工作,提高开发效率和应用可维护性。
36 0