1-Java基础篇-1

简介: 本文详解Java核心概念:final关键字(修饰类、方法、变量的不可变性)、重载与重写区别及重载不能按返回值区分、==与equals本质差异(地址vs内容)、反射机制原理及优缺点(灵活但性能低)、实际项目中反射结合注解的应用场景,以及String/StringBuffer/StringBuilder在可变性、线程安全和性能上的关键区别。(239字)

1. Final 有什么用?

被final修饰的类不可以被继承

被final修饰的方法不可以被重写

被final修饰的变量不可以被改变,

被final修饰不可变的是变量的引用,而不是引用指向的内容, 引用指向的内容是可以改变的

2. 什么是重载(Overload)和重写(Override) ?

重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与 方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分

重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于 父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中 就不能重写。

3. 重载的方法能否根据返回类型进行区分?

方法重载不可以根据返回类型区分

4. == 和 equals 的区别是什么

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数 据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)

equals() : 它的作用也是判断两个对象是否相等。

5. 什么是反射机制?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任 意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法 的功能称为java语言的反射机制。

6. 反射机制优缺点

优点: 运行期类型的判断,动态加载类,提高代码灵活度。

缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要 慢很多

7. 在你进行项目开发的过程中有没有用到过反射

在我们的项目中经常会使用反射 + 自定义注解的方式去实现一些功能 , 例如 :

  1. 在前后端交互的时候, 后端Long类型返回前端后会产生精度丢失 , 我们的处理方式就是在服务端, 通过配置修改Jackson的序列化规则, 将一些Long类型字段转化为字符串返回给前端, 这个时候我们自定义了一个@IdEncrpt注解 , 通过反射获取类的属性, 判断属性上是否添加了@IdEncrpt注解, 如果添加了 , 就会通过反射获取属性值, 转化为字符串
  2. 在整合EMQ的时候 , 为了能够方便的接收订阅消息, 我们自定义了一个@Topic注解 , 作用在类上 , 之后我们通过反射获取类的字节码, 并且获取类上的@Topic注解, 读取到里面定义的主题 , 通过策略模式将不同主题的消息分发到不同的处理器中
  3. 除了上述之外, 在我们项目开发中经常使用的一些框架, 例如 : Mybatis , Spring , SpringMVC 等, 以及一些常用的工具库 common-utils , hutool工具库等都大量使用到了反射机制

8. String和StringBuffer、StringBuilder的区别是什么?

可变性 : String类中使用字符数组保存字符串,所以string对象是不可变 的。

StringBuilder与StringBuffer这两种对象都是可变的。

线程安全性 : String中的对象是不可变的,也就可以理解为常量,线程安全。StringBuffer对方法加了同步锁或者对调用的方法加了同 步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

性能 : 每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对 象。StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引 用。

StirngBuilder 相比使用StringBuffer而言效率更高

目录
相关文章
|
4月前
|
存储 NoSQL 算法
4-Redis篇-2
本文详解Redis集群架构与核心机制:采用哨兵集群(1主2从+3哨兵)保障高可用;对比主从复制、哨兵、Cluster分片三大方案;解析主从同步的全量/增量复制流程;说明Cluster基于16384哈希槽的分片存储原理;简述MULTI/EXEC等事务命令及实际使用情况。(239字)
235 6
|
4月前
|
Java 应用服务中间件 Maven
5-微服务篇-1
本文详解SpringBoot核心机制:①自动装配原理——通过@SpringBootApplication→@EnableAutoConfiguration→AutoConfigurationImportSelector→spring.factories加载条件化配置类;②启动流程三阶段:初始化、上下文创建、自动配置;③常用起步依赖、配置文件类型(properties/YAML)及加载优先级;④四种运行方式。
319 23
|
4月前
|
存储 缓存 NoSQL
4-Redis篇-1
本文详解Redis在项目中的三大应用:热点缓存、业务数据存储(如验证码、排行榜)及分布式锁;涵盖5种基础数据类型、RDB/AOF双持久化机制、惰性+定期混合过期策略,以及8种内存淘汰策略。
243 19
|
4月前
|
缓存 NoSQL 关系型数据库
4-Redis篇-3
Redis与Memcached在数据结构、集群支持及持久化上差异显著;内存满时Redis可淘汰或报错;与MySQL一致性可通过删缓存+双写、MQ异步、过期策略等方案分级保障;缓存穿透用布隆过滤器,击穿靠预热、永不过期或加锁限流。(239字)
224 8
|
4月前
|
SQL 存储 关系型数据库
3-MySQL篇-3
本文详解MySQL索引核心概念:回表查询(先查索引再查主键)、覆盖索引(索引含所有查询字段,避免回表)、左前缀原则(联合索引最左匹配);并列举索引失效场景及建索引最佳实践。
194 0
|
2月前
|
存储 关系型数据库 MySQL
7-事务控制篇-4
InnoDB支持事务、行级锁、外键及聚簇索引,具备崩溃恢复能力,是MySQL 5.5+默认引擎;MyISAM不支持事务与行锁,仅表级锁,存行数、用非聚簇索引,适合读多写少场景。
175 5
|
2月前
|
存储 缓存 关系型数据库
7-事务控制篇-6
B树是自平衡多路搜索树,m阶B树中非叶节点关键字数=子节点数−1,所有叶子同层;B+树则仅内节点存索引、叶子存数据且链表相连,更优IO与范围查询;ACID通过undo/redo日志、锁机制等保障事务可靠。(239字)
143 3
|
2月前
|
SQL 关系型数据库 MySQL
7-事务控制篇-7
本文简述MySQL三大核心要点:联合索引的最左匹配原则(从左依次匹配,范围查询后失效)、SQL执行顺序(FROM→JOIN→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT),以及常见索引失效场景(如LIKE前导%、OR单边无索引、隐式类型转换、函数/运算操作等),并指出EXPLAIN是诊断索引是否生效的关键工具。(239字)
330 2
|
4月前
|
存储 安全 算法
1-Java基础篇-2
本文详解Java集合框架核心知识点:涵盖Map与Collection体系,常见实现类(HashMap、ArrayList等)及线程安全类(ConcurrentHashMap、Vector等);对比ArrayList与LinkedList差异;深入剖析HashMap原理(JDK1.8红黑树优化)及put全流程。
158 1
|
4月前
|
SQL 存储 缓存
3-MySQL篇-4
本文详解MySQL性能优化三大维度:设计上选合适引擎(InnoDB/MyISAM)、字段类型与范式;功能上优化索引、缓存、分库分表;架构上主从复制、读写分离。另涵盖超大分页优化、慢查询定位及EXPLAIN执行分析方法。(239字)
174 2
3-MySQL篇-4

热门文章

最新文章