Java开发八月七号上午面试

本文涉及的产品
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 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
目录
相关文章
|
2天前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
9天前
|
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方法来启动应用。通过这些步骤,即便是新手也能快速上手,专注于业务逻辑的实现。
25 1
|
10天前
|
消息中间件 缓存 算法
Java多线程面试题总结(上)
进程和线程是操作系统管理程序执行的基本单位,二者有明显区别: 1. **定义与基本单位**:进程是资源分配的基本单位,拥有独立的内存空间;线程是调度和执行的基本单位,共享所属进程的资源。 2. **独立性与资源共享**:进程间相互独立,通信需显式机制;线程共享进程资源,通信更直接快捷。 3. **管理与调度**:进程管理复杂,线程管理更灵活。 4. **并发与并行**:进程并发执行,提高资源利用率;线程不仅并发还能并行执行,提升执行效率。 5. **健壮性**:进程更健壮,一个进程崩溃不影响其他进程;线程崩溃可能导致整个进程崩溃。
15 2
|
10天前
|
存储 Java
Java面向对象面试题总结(上)
在Java中,重写(Override)与重载(Overload)是两个重要的概念,关联到方法的定义与调用。重写是指子类对继承自父类的方法进行新的实现,以便提供子类特有的行为,其关键在于方法签名一致但方法体不同。重载则允许在同一个类中定义多个同名方法,只要参数列表不同即可,以此提供方法调用的灵活性。重写关注多态性,而重载强调编译时多态。
12 1
|
10天前
|
NoSQL Java 数据库
2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
这篇文章是一份详尽的Java面试题总结,涵盖了从面向对象基础到分布式系统设计的多个知识点,适合用来准备Java技术面试。
2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
|
1天前
|
IDE Java Linux
探索安卓开发:从基础到进阶的旅程Java中的异常处理:从基础到高级
【8月更文挑战第30天】在这个数字时代,移动应用已经成为我们日常生活中不可或缺的一部分。安卓系统由于其开放性和灵活性,成为了开发者的首选平台之一。本文将带领读者踏上一段从零开始的安卓开发之旅,通过深入浅出的方式介绍安卓开发的基础知识、核心概念以及进阶技巧。我们将一起构建一个简单的安卓应用,并探讨如何优化代码以提高性能和应用的用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和启发。
|
1天前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
5 0
|
7天前
|
Java 编译器 开发工具
JDK vs JRE:面试大揭秘,一文让你彻底解锁Java开发和运行的秘密!
【8月更文挑战第24天】JDK(Java Development Kit)与JRE(Java Runtime Environment)是Java环境中两个核心概念。JDK作为开发工具包,不仅包含JRE,还提供编译器等开发工具,支持Java程序的开发与编译;而JRE仅包含运行Java程序所需的组件如JVM和核心类库。一个简单的&quot;Hello, World!&quot;示例展示了两者用途:需借助JDK编译程序,再利用JRE或JDK中的运行环境执行。因此,开发者应基于实际需求选择安装JDK或JRE。
30 0
|
10天前
|
存储 缓存 安全
Java多线程面试题总结(中)
Java内存模型(JMM)定义了程序中所有变量的访问规则与范围,确保多线程环境下的数据一致性。JMM包含主内存与工作内存的概念,通过8种操作管理两者间的交互,确保原子性、可见性和有序性。`synchronized`和`volatile`关键字提供同步机制,前者确保互斥访问,后者保证变量更新的可见性。多线程操作涉及不同状态,如新建(NEW)、可运行(RUNNABLE)等,并可通过中断、等待和通知等机制协调线程活动。`volatile`虽不确保线程安全,但能确保变量更新对所有线程可见。
12 0
|
10天前
|
缓存 安全 Java
Java基础面试题总结(上)
Java有8种基本数据类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、boolean、char(2字节)。String类被`final`修饰,不可被继承。String为只读,内容不可改;StringBuffer和StringBuilder可修改内容,前者线程安全,后者非线程安全,故效率更高。
10 0
下一篇
云函数