java面试知识点总结(一)

本文深入解析Java多线程实现、集合框架、字符串处理、数据库操作等核心知识点,对比分析HashMap与Hashtable、String与StringBuilder等差异,阐述JSP与Servlet、抽象类与接口的区别,以及Spring框架的IOC和AOP原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

thread和runnable的区别?
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
thread是类,runnable为接口,建议使用runable实现多线程。

2,hashmap和hashtable有什么区别?
继承方式不同:hashmap继承AbstractMap,hashtable继承dictionary

线程安全不同:hashmap非线程安全,hashtable线程安全,支持多线程。

对null值得处理不同:hashmap的key和value都可以为null
hashtable的key和value都不可以为null

支持遍历的种类不同:hashmap 只支持iterator遍历
hashtable支持iterator和enumeration枚举器两种方式

通过迭代器遍历时遍历的顺序不同:
hashmap是从前向后的遍历数组
hashtable是从后向前的遍历数组

容量的初始值和增加方式不一样:
hashmap默认容量大小是16,增加容量时,每次将容量变为原始容量2
hashtable默认容量大小是11,增加容量时,每次将容量变为原始容量
2+1;

添加key-value时hash值算法不同:
hashmap添加元素时使用的是自定义的哈希算法
hashtable没有自定义哈希算法,而是直接采用的key的hashcode()

部分apI不同:
hashtable重写了tostring()方法,hashmap没有重写tostring()方法

3,String,StringBuffer,StringBuilder的区别?

1,可变与不可变 string不可变,stringbuilder和stringBuffer都继承了AbstractStringBuilder类,可变的
2,是否线程安全 string安全 ,stringbuffer可以加同步锁是安全的,stringbuilder是不安全的
3,stringbuffer和stringbuilder共同点
都继承了抽象类,最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

4,jsp和servlet的区别?
jsp经过编译后就变成了servlet,jsp的本质就是servlet。jsp更擅长页面显示,servlet更擅长逻辑控制。jsp是servlet技术的扩展。

5,抽象类和接口有什么区别?
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板

接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情

抽象类:可以有默认的方法实现,接口完全是抽像的。不存在方法的实现。可以使用exteds关键字来继承抽象类,子类可以用implements来实现接口。抽像类可以有构造器,接口不能有构造器。

6,用到过的集合有哪些?
set,无序,不能重复
list:有序,可重复。
map:键值对,键唯一,值不唯一

7,数据库union的关键字的作用?
union和union all的区别?
union称为联合的作用是将多个结果合在一起并且显示出来
union all和union的区别是:union会自动压缩多个结果集中的重复结果,而union all则将所有的结果都展示出来,不管是不是重复的
union对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序
union all 对两个结果集进行集合操作,包括重复行,不进行排序

8,try和catch和fianlly的执行顺序?
对于try{}catch{}finally{}而言,,它们的执行顺序很简单,如果在try{}中捕获相应的异常,中断当前代码的执行,转而去执行catch{}中的内容,最后去执行。
finally{}中方法,一般来说finally中的方法都是会被执行的,其中finally中很大程度上用于资源的释放。

9,ioc和aop解决了什么问题?
spring的核心是IOC控制反转和AOP面向切面编程。IOC控制反转主要强调的是程序之间的关系是由容器控制的,容器控制对象,控制了对外部资源的获取。而反转即为,在传统的编程中都是由我们创建对象获取依赖对象,而在IOC中是容器帮我们创建对象并注入依赖对象,

.AOP:面向切面编程,主要是管理系统层的业务
这个模块被命名为切面(aspect),切面将那些与业务逻辑无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

10,string是基本数据类型吗?
string是引用类型。底层是char数组实现的

11,list的三个子类的特点?
Arraylist底层结构是数组,底层查询快,增删慢
linkedlist底层结构是链表型,增删快,查询慢
voctor 底层结构是数组,线程是安全的。增删慢,查询快

list和map,set的区别?
list和set是存储单列数据的集合,
map是存储键和值这样的双列数据的集合。
list中存储的数据是是有顺序。并且允许重复。
map中存储的数据是没有顺序的。其建是不能重复的。值是可以重复的。
set中存储的数据是无序的。且不允许有重复。

list接口有三个实现类,linkedlist,arraylist,vector
map接口有三个实现类,hashmap,hashtable,linkedHashMap
set接口有两个实现类,hashSet和linkedHashSet

12,redis的端口号是多少?6379
zookeeper端口号?2181 3888 2888

13,如何遍历map集合?
keyset,values,entryset,
三种方式得到set之后,都可以使用foreash或者iterator

14,如何删除list元素?
for循环,增强for循环,iterator遍历,

15,heap和stack有什么区别?
栈是一种线性集合,其添加元素和删除元素都在同一段完成。
栈是先进后出方式处理,堆是栈的一个组成元素。

16,BS和CS的区别?
CS是client/server的缩写,是客户机和服务器结构的应用程序,必须是电脑本地安装程序,cs开发成本高。

BS是brower/serve的缩写,是浏览器和服务器结构的应用程序,用浏览器打开系统,bs开发成本低

17,spring有几种注入方式?
三种,构造,属性,接口

18,事务的四大特性?
原子性,一致性,隔离性,持久性

19,javac命令和java命令做什么事情呢?
javac:负责的是编译,当执行javac的时候,会执行java的编译程序,会对指定的.java文件进行编译,生成了jvm可以执行的字节码文件,也就是class文件。

java负责运行部分,会启动jvm,加载运行所需要的类库,执行.class文件,一个文件要执行,必须要有执行的起始点,就是main函数。

20,构造函数和一般函数有什么区别?
两个函数的定义结构不同。
构造函数是在函数被创建时,就被调用,用于初始化,而且初始化动作只执行一次。
一般函数实在函数创建后,需要调用才被执行,可以被调用多次。

21,super()和this()是否可以同时出现在构造函数中?
两个只能有一个定义在第一行,不能同时出现。

为什么一定要定义在第一行?
因为super和this都是调用构造函数,构造函数用于初始化,所以初始化的动作要先完成。

22,throw 和throws关键字的区别:
throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。

23,线程状态:
被创建:start()
运行:具备执行资格,同时具备执行权;
冻结:sleep(time),wait()—notify()唤醒;线程释放了执行权,同时释放执行资格;
临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权;
消亡:stop()

24,wait和sleep区别: 分析这两个方法:从执行权和锁上来分析:
wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。
sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。
wait:线程会释放执行权,而且线程会释放锁。
Sleep:线程会释放执行权,但不是不释放锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值