Java开发八月七号上午面试

简介: 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,玩真的。    

关注

目录
相关文章
|
2月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
3月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
5月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
485 0
|
5月前
|
安全 Java 领域建模
Java 17 探秘:不容错过的现代开发利器
Java 17 探秘:不容错过的现代开发利器
425 0
|
3月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
5月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
260 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
3月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
151 0
|
4月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
258 3
|
4月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
248 2