当前位置:   article > 正文

无经验的java开发面试准备_java面试题无经验

java面试题无经验

前言

里面一共几种内容:

准备记录和所看的资料
部分面试题:关于基础,并发,容器和spring
关于人事


一、准备记录和所看的资料

由于时间和个人的问题,准备了一共是两个星期左右,当然准备是不够的,因为一开始的时候我一直在着重理解,也没有背过,当时想的是要笔试,所以背的基本没怎么背过,但是如果是没有笔试的那些操作的话,那是一定要背的!而且要学会找内容背!!!
一开始的时候看的是cyc2018,这是个大佬,一般看完的话基础就稳稳的了!看不完也要把计算机基础、java、数据库这三个点看完。
如果看的时候觉得很乏味,可以用ctrl+p变成PDF,然后再用wps编辑它,这样就可以记录一下重点内容之类的。
因为我还用了牛客网刷题,所以也可以将牛客网上出现过的题标在上面,就很方便。
后面因为准备一个面试,所以就直接开背了,就看java面试大全,个人认为里面有些是不太好背的。
如果全面准备的话,个人认为cyc和那个面试大全的应该背的都背一遍。如果要求较低的话,快速排序和互斥锁要理解并且能打出来!!!
还有一些hr的面试也要准备好:人事面试题你值得拥有!!

二、进阶操作

进阶指的就是进大厂的啦~我做不到,但是网上的资料怎么做倒是看得七七八八,绝大多数都是说把剑指offer和leetcode刷一遍,所有的排序都要懂。剑指offer的话牛客都有得刷,牛客上也有很多题,做几套就知道深浅了,也看到很多大佬分享面试经验,大概什么内容也清楚。还有就是看一下java3y的,当然还有很多大佬,但是我知道这几个。

一些几率大的面试题以及答案

碎碎念:可以使用幕布来整理面试题,因为它真的很方便,可以把答案缩起来背,UI也不错!!!
当然整理得是不全的,但是临时抱佛脚背了两天是这样的了TAT

java基础

1、String、StringBuffer、StringBuilder的区别

String不可变、StringBuffer和StringBuilder可变
String和StringBuffer是线程安全的,StringBuilder不是

2、JRE和JDK区别

jre,java运行环境,为java的运行提供环境
jdk,java开发工具包,为java提供开发环境和运行环境
其实jdk是包含jre的,如果只需要运行java的程序,那么只需要装jre就可以了,如果需要编写java程序,则需要装jdk

3、==和equals()的区别

==在基本类型是比较值是否相等,对于对象是比较引用是否相等
而equals()本质上与==是一样的,不过在String和integer对equals()方法重写成值的比较

4、两个对象的hashCode()相同,则equals()也一定为true吗?

不一定,因为计算哈希值具有随机性,不过两个对象的equals()为true的话hashCode()就一定相等。

5、final在java中有什么用

用final修饰类的话,该类不允许被继承
用final修饰方法的话,该方法不允许重写
用final修饰数据后,数据在初始化后不允许修改

6、String 属于基础的数据类型吗?

不属于;int char short long double byte boolean就属于

7、java 中操作字符串都有哪些类?它们之间有什么区别?

String、StringBuffer、StringBulider这些类 然后说他们的区别
StringBuffer的性能低于StringBuilder,所以在单线程中时候使用StringBuilder,多线程时使用StringBuffer

8、String str="i"与 String str=new String(“i”)一样吗?

不一样;内存分配的方式不一样、前者分配在常量池中、后者分配在堆内存中

9、如何将字符串反转,

使用StringBuilder或者StringBuffer的reverse()方法

10、抽象类必须要有抽象方法吗?

不用,但是如果一个类有抽象方法,则必须将这个类声明为抽象类

11、普通类和抽象类有哪些区别?

普通类不允许有抽象方法,抽象类可以包括抽象方法
抽象类不能直接实例化、普通类可以

12、抽象类能使用 final 修饰吗?

不能,定义抽象类就是为了然其他类继承,用final修饰会造成矛盾

13、接口和抽象类有什么区别?

一个类可以有多个接口、但只能继承一个抽象类
接口的成员只能是public而抽象类的成员可以有多种访问权限
接口的字段只能用static和final修饰,而抽象类的字段没有这种限制

14、 java 中 IO 流分为几种?

按功能分为输入流和输出流
按类型分为字符流和字节流

15、BIO、NIO、AIO有什么区别

BIO 同步阻塞IO 是传统IO 模式简单使用方便 但并发处理能力低
NIO 是BIO的升级版 是同步非阻塞IO,服务器与客户端使用channel进行通讯,实现多路复用
AIO nio的升级版,也叫nio2,是异步非阻塞io,异步io的操作是基于事件和回调机制

16、&和&&的区别

&运算符是按位与和逻辑与,&&运算符是短路与运算,当第一个结果为false时,&&会直接判定为flase,而&会对另一个结果进行运算

17、int和integer的区别

int是基本类型,而integer是它的包装类型

18、Array和ArrayList的区别

Arrary可以包含基本类型和对象类型、ArrayList只包含对象类型
Array的大小固定,ArrayList大小是动态变化

19、方法的覆盖(重写)和方法的重载

方法的覆盖是子类重新定义了父类的方法。方法的覆盖必须有相同的方法名,参数列表和返回类型
方法的重载是指方法中方法名相同,但是参数的个数、类型、顺序至少有一个不同
他们都能体现java的多态,方法的重写体现的是编译时的多态,方法的重载体现的是运行时的多态。
容器

20、Collection和Collections有什么区别

collection是集合类的上级接口,实现它的接口有Set和List
Collections是集类的帮助类,可以实现对集合类的排序、搜索、线程安全等操作

21、List、Map、Set三个接口存取元素时,各有什么特点

List是以特定索引存放元素,可以有重复的元素,主要有ArrayList、Vector、LinkedList三个实现版本
Set是不允许存放重复的元素的,有TreeSet、HashSet两个实现版本
Map保存的是键值对的映射,映射关系有1对1或者1对多,有TreeMap、HashMap、HashTable三个实现版本

22、HashMap和HashTable有什么区别

hashmap允许空键值、hashtable不允许
hashmap不是线程安全的,hashtable是线程安全的

23、如何决定使用 HashMap 还是 TreeMap?

如果有较多的插入、删除、定位操作则用HashMap
如果遍历的情况比较多就用TreeMap

24、说一下 HashMap 的实现原理?(非同步)

HashMap是基于哈希表的Map接口的非同步实现,它的数据结构为数组加链表的结合体 不过在jdk中当链表节点数大于8时会自动转化为红黑树。

25、 说一下 HashSet 的实现原理?

HashSet底层由HashMap实现
它的值放在HashMap的Key上
HashMap的value统一为present

26、 ArrayList 和 LinkedList 的区别是什么?

ArrayList支持随机访问,但插入删除的代价高,需要移动大量元素
LinkedList不支持随机访问,但插入删除代价低,只需要移动指针

27、 如何实现数组和 List 之间的转换?

List变数组:调用ArrayList的toArray()方法
数组变list:调用Arrays的asLiat()方法

28、ArrayList 和 Vector 的区别是什么?

同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的
数据增长:当容量满时ArrayList增长为原来的1.5倍,而Vector增长为原来的两倍

29、 在 Queue 中 poll()和 remove()有什么区别?

两者都会从队列去除一个元素,poll()在获取元素失败时会返回空,但是remove()获取元素失败时会抛出异常

30、哪些集合类是线程安全的?

vector:使用了 synchronized 进行同步。
statck:堆栈类,先进后出
hashtable

31、迭代器是什么

就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露容器对象的内部细节

32、 Iterator 和 ListIterator 有什么区别?

Iterator可用于遍历Set和List集合,ListIterator只能用来遍历List
ListIterator实现了Iterator的接口,有包含了其他功能,例如增加元素、替换元素、获取前一个元素或后一个的索引等等;

多线程

33、并行和并发有什么区别?

并行是指两个或者多个事件在同一时刻发生、并发是指两个或者多个事件在同一段时间内发生
并行是指不同实体上的多个事件、并发是指同一实体上的多个时间
并行是在多台处理器上处理多个任务、并发是在一个处理器上处理多个任务

34、线程和进程的区别?

进程是系统资源分配的基本单位,而线程是cpu调度的基本单位
创建进程所需的系统资源大,创建线程所需的系统资源较少
一个进程无法直接访问另一个进程,而同一个进程的线程共享进程内的资源
进程之间的切换和通信开销大,线程之间的切换和通信开销小
线程不能独立执行,必须放到进程里,进程里至少有一个线程成为主线程

35、守护线程是什么

守护线程是一个服务线程,服务于其他线程

36、创建线程有哪几种方法

继承Thread类创建线程类
通过runnable接口创建线程类
通过callable和Future创建线程

37、runnable 和 callable 有什么区别?

Runnable中的run()是没有返回值的,它做的仅仅是执行run()方法里面的代码
Callable里面的call()方法是有返回值的,返回一个泛型。利用Future和FutureTask配合可以用来获取异步执行的结果

38、线程有哪些状态?

创建 并没有调用该对象的start方法
就绪 当调用了线程对象的start方法之后,该线程就进入了就绪状态
运行
阻塞 sleep,suspend,wait等方法都可以导致线程阻塞。
死亡 run方法执行结束或者调用stop方法后

39、sleep() 和 wait() 有什么区别?

sleep()不会释放同步锁,wait()会释放同步锁
sleep()可以用时间指定使他自己醒来,时间没到只能用interrupt()强行打断;wait()可以用notify()直接唤起
sleep()来自Thread类,wait()来自 Object类

40、notify()和 notifyAll()有什么区别?

notify()是随机唤醒一个进程,notifyAll()是唤醒所有线程

41、创建线程池有哪几种方式?

newFixedThreadPool(int nThreads)
newCachedThreadPool()
newSingleThreadExecutor()
newScheduledThreadPool(int corePoolSize)

42、线程池都有哪些状态?

running、shundown、stop、tidying、terminated

43、线程池中 submit()和 execute()方法有什么区别?

接收的参数不一样
submit有返回值 execute没有
submit方便Exception处理

44、怎么防止死锁?

死锁四个必要条件
互斥条件
请求和保持条件
不可剥夺条件
环路等待条件
破坏四个条件的发生

45、synchronized 和 volatile 的区别是什么?(4)

volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。
volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。
volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞
volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化

46、synchronized 和 ReentrantLock 区别是什么?

synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。

  1. 锁的实现
    synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。
  2. 等待可中断
    当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。
    ReentrantLock 可中断,而 synchronized 不行。
  3. 公平锁
    公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。
    synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但是也可以是公平的。

异常

47、throw 和 throws 的区别?

throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。而throw则是指抛出的一个具体的异常类型。

48、 final、finally、finalize 有什么区别?

inal可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
finalize是一个方法,属于Object类的一个方法,该方法一般由垃圾回收器来调用,当我们调用System的gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾。

49、Error 和 Exception 区别是什么?

Error 用来表示 JVM 无法处理的错误,如系统崩溃,内存不足,堆栈溢出等
Exception 类的错误是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。

50、受检异常和非受检异常

受检异常 :需要用 try…catch… 语句捕获并进行处理,并且可以从异常中恢复;
非受检异常 :是程序运行时错误,例如除 0 会引发 Arithmetic Exception,此时程序崩溃并且无法恢复。

数据库

51、myisam 和 innodb的区别吗?

myisam引擎是5.1版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务、行级锁和外键,并且索引和数据是分开存储的。
innodb是基于聚簇索引建立的,和myisam相反它支持事务、外键,并且通过MVCC来支持高并发,索引和数据存储在一起。

52、mysql的索引有哪些

索引按照数据结构来说主要包含B+树和Hash索引。

53、锁的类型有哪些呢

mysql锁分为共享锁和排他锁,也叫做读锁和写锁。
读锁是共享的,可以通过lock in share mode实现,这时候只能读不能写。
写锁是排他的,它会阻塞其他的写锁和读锁。从颗粒度来区分,可以分为表锁和行锁两种。
表锁会锁定整张表并且阻塞其他用户对该表的所有读写操作,比如alter修改表结构的时候会锁表。
行锁又可以分为乐观锁和悲观锁,悲观锁可以通过for update实现,乐观锁则通过版本号实现。

54、事务的基本特性

原子性 指的是一个事务中的操作要么全部成功,要么全部失败。
一致性 指的是数据库总是从一个一致性的状态转换到另外一个一致性的状态。比如A转账给B100块钱,假设中间sql执行过程中系统崩溃A也不会损失100块,因为事务没有提交,修改也就不会保存到数据库。
隔离性 指的是一个事务的修改在最终提交前,对其他事务是不可见的。
持久性 指的是一旦事务提交,所做的修改就会永久保存到数据库中。

55、那ACID靠什么保证的呢?

A原子性由undo log日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql
C一致性一般由代码层面来保证
I隔离性由MVCC来保证
D持久性由内存+redo log来保证

56、数据库的隔离级别

未提交读(READ UNCOMMITTED)
事务中的修改,即使没有提交,对其它事务也是可见的。
#提交读(READ COMMITTED)
一个事务只能读取已经提交的事务所做的修改。
#可重复读(REPEATABLE READ)
保证在同一个事务中多次读取同一数据的结果是一样的。
#可串行化(SERIALIZABLE)
强制事务串行执行,这样多个事务互不干扰,不会出现并发一致性问题。

57、mysql主从同步怎么做

master提交完事务后,写入binlog
slave连接到master,获取binlog
master创建dump线程,推送binglog到slave
slave启动一个IO线程读取同步过来的master的binlog,记录到relay log中继日志中
slave再开启一个sql线程读取relay log事件并在slave执行,完成同步
slave记录自己的binglog

分布式

58、CAP

分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容忍性(P:Partition Tolerance),最多只能同时满足其中两项。
在一致性的条件下,系统在执行数据更新操作之后能够从一致性状态转移到另一个一致性状态。
在可用性条件下,要求系统提供的服务一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
在分区容忍性条件下,分布式系统在遇到任何网络分区故障的时候,仍然需要能对外提供一致性和可用性的服务,除非是整个网络环境都发生了故障。

59、分布式锁和分布式事务区别

锁问题的关键在于进程操作的互斥关系,
而事务问题的关键则在于事务涉及的一系列操作需要满足 ACID 特性

Spring

60、Spring是什么

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

61、AOP

AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证、日志、事务处理。

62、spring 常用的注入方式有哪些?

Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:
构造方法注入
setter注入
基于注解的注入

63、spring 中的 bean 是线程安全的吗?

Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。

64、spring 自动装配 bean 有哪些方式?

隐式的bean发现机制和自动装配
在java代码或者XML中进行显示配置

65、 spring 事务实现方式有哪些?

编程式事务管理对基于 POJO 的应用来说是唯一选择。我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。
基于 TransactionProxyFactoryBean 的声明式事务管理
基于 @Transactional 的声明式事务管理
基于 Aspectj AOP 配置事务

66、说一下 spring 的事务隔离?

事务隔离级别指的是一个事务对数据的修改与另一个并行的事务的隔离程度,当多个事务同时访问相同数据时,如果没有采取必要的隔离机制,就可能发生以下问题:
脏读:一个事务读到另一个事务未提交的更新数据。
幻读:例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。
不可重复读:比方说在同一个事务中先后执行两条一模一样的select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读。

67、@RequestMapping 的作用是什么?

RequestMapping是一个用来处理 请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

68、Spring基于xml注入bean的几种方式:

set()方法注入;
构造器注入:①通过index设置参数的位置;②通过type设置参数类型;
静态工厂注入;
实例工厂;

69、Spring 事务中的隔离级别有哪几种?

① ISOLATION_DEFAULT:这是个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。
② ISOLATION_READ_UNCOMMITTED:读未提交,允许事务在执行过程中,读取其他事务未提交的数据。
③ ISOLATION_READ_COMMITTED:读已提交,允许事务在执行过程中,读取其他事务已经提交的数据。
④ ISOLATION_REPEATABLE_READ:可重复读,在同一个事务内,任意时刻的查询结果都是一致的。
⑤ ISOLATION_SERIALIZABLE:所有事务逐个依次执行。

70、使用 @Autowired 注释

它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

71、使用@Resource注解

@Resource和@Autowired注解都是用来实现依赖注入的。只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入即直接根绝bean的ID进行注入。

72、Spring 管理事务的方式有几种?

编程式事务,在代码中硬编码。(不推荐使用)
声明式事务,在配置文件中配置(推荐使用)
基于XML的声明式事务
基于注解的声明式事务

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/729184
推荐阅读
相关标签
  

闽ICP备14008679号