java面试题

java面试题

java基础面试题

1.hashcode和equals如何使用

hashcode是hashmap中确定数据存放在数组上的位置的

equal是hashcode相同时确定是否是相同的key

2.== 和equals的区别

==是用来比较基本类型的数据是否相等

equals是用来比较引用类型数据是否相等

3.重写和重载的区别

重写是子类对父类的方法的重写

重载是同一个类中,方法名相同方法参数不同

4.代理的几种实现方式

1.静态代理

2.动态代理

2.1 jdk自带的动态代理

特点:面向接口的,不需要导入三方依赖的动态代理,可以对多个不同的接口进行增强,通过反射读取注解时,只能读取到接口上的注解

原理:面向接口,只能对实现类在实现接口中定义的方法进行增强

创建代理类:入参有类构造器,接口类,反射处理类的实现类

2.2 cglib动态代理

特点:面向父类的动态代理,需要导入第三方依赖

原理:面向父类,底层通过子类继承父类并重写方法的形式实现增强

一个增强类:设置父类,设置拦截类

一个方法拦截类:需要用户实现

一个jdk方法的代理类:方便实现用源对象方法的调用

5.String、StringBuffer、StringBuilder区别及使用场景

String内容不能被修改

StringBuffer和StringBuilder的内容可以修改

buffer和builder底层都是数组,value是数组,count是统计数组的使用数量

buffer是线程安全的

6. 怎样声明一个类不会被继承,什么场景下会用

final修饰的类不能被继承,Math类就是final修饰的类

7.自定义异常在生产中如何应用

1.throws方法的声明处,后面跟异常的类型

2.throw方法内部,后面跟异常的对象

3.try catch捕获异常

8. java面向对象有哪些特征

封装:封装了类的内部的实现机制,对外部只展示了类的调用方法,便于使用

继承:避免对相同特征进行重复描述

多态:父类指向子类

9.ArrayList和LinkedList有什么区别

arrayList底层是数组,有索引,查询时间复杂度O(1),插入和删除的效率低

linkedList底层是链表,查询需要遍历时间复杂度O(N)插入和删除的效率高

10.高并发中的集合有哪些问题

1.第一代线程安全集合

Vector,hashTable:synchronized修饰

2.第二代线程非安全集合

hashMap,arrayList

不安全,性能好

可以使用Collection的synchronized方法,实现线程安全,

使用的是代码块锁,锁在方法里面,提升了性能

3.第三代线程安全集合类

concurrent包下的

concurrentHashMap

copyOnWriteArrayList

在保证线程安全的同时,性能也很高

底层采用Lock锁,cas自旋锁

11.BeanFactory和ApplicationContext的区别

ApplicationContext继承于BeanFactory

BeanFactory不支持国际化

beanfactory在调用getBean方法时才会创建实例,ApplicationContext在启动时就会创建一个单例bean

BeanFactory只实现了IOC和DI的基本功能, ApplicationContext提供高级功能

12.HashMap和HashTable的区别

1.hashTable是线程安全的hashMap不是线程安全的

2.hashTable不允许有空键值,hashMap允许有空值

3.hashTable数组默认的大小是11, 扩容的方式的size *2+ 1,hashMap中默认容量是16,增长方式是2的倍数。

4.hashtable继承Dictionary类,hashMap继承自AbstractMap类

13.HashMap在扩容上做了哪些优化

mysql面试题

1.ACID是靠什么来保证的

原子性是由undolog,它记录了需要回滚的日志信息,事务回滚时,撤销已经执行成功sql,undolog逻辑日志,根据事务id不同会有不同的undolog

一致性,是由其它三大特性一起保证的

隔离性是由mvcc保证的

持久性是由redolog来保证,mysql修改数据时会在redolog中记录一份日志数据,只要日志记录成功了,数据就不会丢失

2.

相关推荐
快乐肚皮1 分钟前
深入解析Docker:核心架构与最佳实践
java·运维·docker·容器
智慧地球(AI·Earth)3 分钟前
OpenAI for Countries:全球AI基础设施的“技术基建革命”
开发语言·人工智能·php
不学无术の码农6 分钟前
《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码
开发语言·python
zhou1857 分钟前
MySQL保姆级安装教程(附资源包+5分钟极速配置+环境变量调试技巧)
java·python·mysql·php
双叶83638 分钟前
(C语言)超市管理系统(测试版)(指针)(数据结构)(二进制文件读写)
c语言·开发语言·数据结构·c++
小雅痞39 分钟前
[Java][Leetcode middle] 55. 跳跃游戏
java·leetcode
PXM的算法星球40 分钟前
使用CAS操作实现乐观锁的完整指南
开发语言
com未来1 小时前
使用 NSSM 安装 Tomcat 11.0.6 为 Windows 服务
java·windows·tomcat
TDengine (老段)1 小时前
基于 TSBS 标准数据集下 TimescaleDB、InfluxDB 与 TDengine 性能对比测试报告
java·大数据·开发语言·数据库·时序数据库·tdengine·iotdb
养军博客1 小时前
spring boot3.0自定义校验注解:文章状态校验示例
java·前端·spring boot