Java开发岗面试常见问题总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33320453/article/details/90371353

Object中有哪些公共方法?
1.equals()
2.clone()
3.getClass()
4.notify(),notifyAll(),wait()
5.toString

什么是单例模式?
单例模式是指一个类仅允许创建其自身的一个实例,并提供对该实例的访问权限。它包含静态变量,可以容纳其自身的唯一和私有实例。它被应用于这种场景——用户希望类的实例被约束为一个对象。在需要单个对象来协调整个系统时,它会很有帮助。

什么是依赖注入?

堆和栈的区别?

java 创建对象的几种方式
1.采用new
2.通过反射
3.采用clone
4.通过序列化机制

==和eqauls()的区别
前者比较的是内存地址,如果需要比较对象内容,需要重写equal方法

final,finalize和finally的不同之处
final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常。

static的用法?
两个基本的用法:静态变量和静态方法.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享

进程和线程的区别?
进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程.进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源。同一进程中的多个线程之间可以并发执行。

&和&&的区别?
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。

ArrayList和LinkedList的区别?
ArrayList内部采用数组顺序存储。适用:数据连续写入,需要根据index进行查找,按index写入和删除少。
LinkedList采用链表进行存储。适用:数据需要按index插入或删除,按index查找少。

数组有length的属性,String有length()的方法。

多线程有几种实现方法?同步有几种实现方法?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口。
同步的实现方面有两种,分别是synchronized,wait与notify。

关于List、Set和Map
List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

abstract method必须以分号结尾,且不带花括号。
局部变量前不能放置任何访问修饰符 (private,public,和protected)。
abstract的methods不能以private修饰。

排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
常见的排序算法:冒泡排序、选择排序、快速排序。

Java实现数组逆置

 public static void swap(int a[]){

       int len = a.length;

       for(int i=0;i<len/2;i++){

           int tmp = a[i];

           a[i] = a[len-1-i];

           a[len-1-i] = tmp;

       }
  }

这是分隔符这是分隔符这是分隔符这是分隔符这是分隔符这是分隔符这是分隔符这是分隔符这是分隔符

MySQL有哪些常见的存储引擎?
在这里插入图片描述
分布式Redis?
以具体的项目组为例,六台虚机分成3主3从,每一主一从作为一个槽。
需要缓存数据时,Redis会为需要缓存的数据分配一个槽,存入master节点,作为一个完整的集群,每个负责处理槽的节点应该具有从节点,保证当它出现故障时可以自动进行故障转移。
3个主节点负责处理槽和相关数据,3个从节点负责转移故障。
redis集群把所有的数据映射到16384个槽中。

Redis过期策略?
三种过期策略:
1.定时删除
含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
优点:保证内存被尽快释放
缺点:
若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key
定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重
2.惰性删除
含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
优点:删除操作只发生在从数据库取出key的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步(如果此时还不删除的话,我们就会获取到了已经过期的key了)
缺点:若大量的key在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的垃圾占用了大量的内存)
3.定期删除
含义:每隔一段时间执行一次删除过期key操作
优点:
通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用–处理"定时删除"的缺点
定期删除过期key–处理"惰性删除"的缺点
缺点
在内存友好方面,不如"定时删除"
在CPU时间友好方面,不如"惰性删除"
难点
合理设置删除操作的执行时长(每次删除执行多长时间)和执行频率(每隔多长时间做一次删除)(这个要根据服务器运行情况来定了)

HashMap的基本原理?
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
数组:存储区间连续,占用内存严重,寻址容易,插入删除困难;
链表:存储区间离散,占用内存比较宽松,寻址困难,插入删除容易;
Hashmap综合应用了这两种数据结构,实现了寻址容易,插入删除也容易。
当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket(桶)位置来储存Entry对象。

HashMap和HashSet的主要区别?
1.HashSet是set的一个实现类,hashMap是Map的一个实现类;
2.HashSet以对象作为元素,而HashMap以(key-value)的一组对象作为元素,且HashSet拒绝接受重复的对象;

ArrayList和LinkedList的大致区别?
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

MySQL索引在什么情况下无法命中?
1、如果条件中有 or ,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
2.、like查询是以%开头,索引不会命中
3. 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
4. 没有查询条件,或者查询条件没有建立索引
5. 查询条件中,在索引列上使用函数(+, - ,*,/), 这种情况下需建立函数索引
6. 采用 not in, not exist
7. B-tree 索引 is null 不会走, is not null 会走

SpringBoot中@Service和@Component注解的区别?
@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能
@Repository注解在持久层中,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。
@Controller层是spring-mvc的注解,具有将请求进行转发,重定向的功能。
@Service层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。

展开阅读全文

没有更多推荐了,返回首页