自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 在行情一般的情况下,就说说23级应届生如何找java工作

Java应届生找工作,不能单靠背面试题,更不能在简历中堆砌和找工作关系不大的校园实践经历,而是更要在面试中能证明自己的java相关商业项目经验。其实不少应届生Java求职者不是说没真实Java项目经验,而是不知道怎么挖掘,总之当下,应届生求职java,没真实项目,难度会增大。

2024-02-20 17:31:05 960 1

原创 自动装箱与拆箱了解吗?原理是什么?

资料,我根据我从小白到架构师多年的学习经验整理出来了一份。从字节码中,我们发现装箱其实就是调用了 包装类的。、 需要的小伙伴 可以关注我。方法,拆箱其实就是调用了。最近很多同学问我有没有。

2024-01-21 15:43:11 463

原创 23级应届生如何找java工作?

Java应届生找工作,不。其实不少应届生Java求职者不是说没真实Java项目经验,而是不知道怎么挖掘,总之当下,应届生求职java,没真实项目,难度会增大。

2024-01-20 15:17:58 933

原创 HashMap 的长度为什么是 2 的幂次方

我们上面也讲到了过了,Hash 值的范围值-2147483648 到 2147483647,前后加起来大概 40 亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个 40 亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位置也就是对应的数组下标。这也就解释了 HashMap 的长度为什么是 2 的幂次方。资料,我根据我从小白到架构师多年的学习经验整理出来了一份。、 需要的小伙伴 可以关注我。

2024-01-20 11:05:58 441

原创 HashMap 的底层实现#JDK1.8 之前

相比于之前的版本, JDK1.8 之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。所谓扰动函数指的就是 HashMap 的。

2024-01-20 11:04:50 412

原创 2024Java高频面试题之MQ消息中间件,面试都问些什么?(附详细答案)

MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

2024-01-19 11:45:03 1302

原创 2024最新Java高频面试题总结(附答案PDF)春招面试必备!

这两部分内容相辅相成,前面的核心知识点介绍让后面的面试题更容易理解,后面的面试题加深了读者对于 Java 核心点的掌握。如此一来,让你所学及所用,不仅能够应付面试,更能学习到更多有价值的 Java 技术点,让你在面试中和工作中都能展示的更加出色。

2024-01-19 11:33:27 2012

原创 ArrayList 可以添加 null 值吗?

值无意义,会让代码难以维护比如忘记做判空处理就会导致空指针异常。中可以存储任何类型的对象,包括。

2024-01-18 11:18:43 519

原创 ArrayList 和 Vector 的区别?(了解即可)

ArrayList 是 List 的主要实现类,底层使用 Object[]存储,适用于频繁的查找工作,线程不安全 。

2024-01-18 11:14:32 377

原创 MyISAM 和 InnoDB 如何选择?

一般情况下我们选择 InnoDB 都是没有问题的,但是某些情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择 MyISAM 也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。在很多我们已知场景中,InnoDB 的速度都可以让 MyISAM 望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用。大多数时候我们使用的都是 InnoDB 存储引擎,在某些读密集的情况下,使用 MyISAM 也是合适的。

2024-01-17 14:52:37 436

原创 varChar(100)和 varChar(10)的区别是什么?

VARCHAR(100)和 VARCHAR(10)都是变长类型,表示能存储最多 100 个字符和 10 个字符。因此,VARCHAR (100) 可以满足更大范围的字符存储需求,有更好的业务拓展性。例如在进行排序的时候,VARCHAR(100)是按照 100 这个长度来进行的,也就会消耗更多内存。虽说 VARCHAR(100)和 VARCHAR(10)能存储的字符范围不同,但二者存储相同的字符串,所占用磁盘的存储空间其实是一样的,这也是很多人容易误解的一点。

2024-01-17 14:50:16 823 1

原创 2023,程序员正式进入寒冬的一年。

后台有粉丝私信我,跟他同期进公司的同事,现在只剩下他自己了,并且每天有很多人来公司面试,很担心自己哪天就被炒了。卷总归是没错的,但是我想说的是,大部分年轻的程序员请不要做梦,尤其是学历较低,自制力不强的程序员,请看清楚局势,”为主要目的,现在程序员这个行业如果在第一份工作薪资不是很高的时候,我的建议是赶紧。的岗位不会多到,985与211的大佬们吃完后还有剩下的,甚至他们都自己不够吃。程序员就是这样,担心线上有bug,担心被炒,担心35岁,永远都在担心中度过。是的,2023年的java行业如网上说的。

2024-01-16 12:00:58 507

原创 谈谈对AOP的理解

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用。Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用。

2024-01-16 11:22:54 511

原创 静态变量有什么作用?

它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。静态变量是通过类名来访问的,例如。关键字修饰就无法这样访问了)。通常情况下,静态变量会被。关键字修饰成为常量。

2024-01-13 14:10:52 397

原创 HashMap 为什么线程不安全?

数据丢失这个在 JDK1.7 和 JDK 1.8 中都存在,这里以 JDK 1.8 为例进行介绍。中,多个键值对可能会被分配到同一个桶(bucket),并以链表或红黑树的形式存储。操作会导致线程不安全,具体来说会有数据覆盖的风险。JDK1.7 及之前版本,在多线程环境下,扩容时会造成死循环和数据丢失的问题。还有一种情况是这两个线程同时。JDK 1.8 后,在。

2024-01-13 14:02:35 455

原创 Spring Bean 是线程安全的吗?

prototype 作用域下,每次获取都会创建一个新的 bean 实例,不存在资源竞争问题,所以不存在线程安全问题。singleton 作用域下,IoC 容器中只有唯一的 bean 实例,可能会存在资源竞争问题(取决于 Bean 是否有状态)。如果这个 bean 是有状态的话,那就存在线程安全问题(有状态 Bean 是指包含可变的成员变量的对象)。不过,大部分 Bean 实际都是无状态(没有定义可变的成员变量)的(比如 Dao、Service),这种情况下, Bean 是线程安全的。

2024-01-12 14:19:06 428

原创 MySQL索引的优缺点

大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。

2024-01-12 14:11:22 399

原创 Bean 的作用域有哪些?

Spring 中 Bean 的作用域通常有下面几种:getBean()

2024-01-11 09:59:13 417

原创 什么是 Spring Bean?

我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。l下图简单地展示了 IoC 容器如何使用配置元数据来管理对象。

2024-01-11 09:58:04 381

原创 静态变量有什么作用?

它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。也就是说,静态变量只会被分配一次内存,即使创建多个对象,这样可以节省内存。静态变量是通过类名来访问的,例如。关键字修饰就无法这样访问了)。通常情况下,静态变量会被。关键字修饰成为常量。

2024-01-10 14:10:16 524

原创 成员变量与局部变量的区别?

对于编译器(javac)来说,局部变量没赋值很好判断,可以直接报错。而成员变量可能是运行时赋值,无法判断,误报“没默认值”又会影响用户体验,所以采用自动赋默认值。默认值有两种设置方式:手动和自动,根据第一点,没有手动赋值一定要自动赋值。成员变量在运行时可借助反射等方法手动赋值,而局部变量不行。先不考虑变量类型,如果没有默认值会怎样?变量存储的是内存地址对应的任意随机值,程序读取该值运行会出现意外。

2024-01-10 14:08:39 406

原创 ArrayList 与 LinkedList 区别?

ArrayListLinkedListArrayListLinkedListArrayListadd(E e)ArrayListLinkedListadd(E e)iLinkedListArrayListArrayList我们在项目中一般是不会使用到LinkedList的,需要用到LinkedList的场景几乎都可以使用ArrayList来代替,并且,性能通常会更好!另外,不要下意识地认为LinkedList作为链表就最适合元素增删的场景。我在上面也说了,LinkedList。

2024-01-09 17:42:12 426

原创 什么是序列化?什么是反序列化?

(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。对于许多对象,像是使用大量引用的复杂对象,这种序列化重建的过程并不容易。对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),但是在 C++这种半面向对象的语言中,struct(结构体)定义的是数据结构类型,而 class 对应的是对象类型。

2024-01-09 17:28:46 633

原创 @Autowired 和 @Resource 的区别是什么?

这种方式就无法正确注入对象了,因为这个时候 Spring 会同时找到多个满足条件的选择,默认情况下它自己不知道选择哪一个。(根据类型进行匹配),也就是说会优先根据接口类型去匹配并注入 Bean (接口的实现类)。(根据名称进行匹配),这个名称通常就是类名(首字母小写)。如果无法通过名称匹配到对应的 Bean 的话,注入方式会变为。属于 Spring 内置的注解,默认的注入方式为。就是我这里所说的名称,这样应该比较好理解了吧。属于 JDK 提供的注解,默认注入方式为。属性(不建议这么做)则注入方式为。

2024-01-05 11:18:07 482

原创 谈谈自己对于 Spring IoC 的了解

在实际项目中一个 Service 类可能依赖了很多其他的类,假如我们需要实例化这个 Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数,这可能会把人逼疯。IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。在 Spring 中, IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。

2024-01-05 11:15:05 459

原创 接口和抽象类有什么共同点和区别?

接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象类的成员变量默认 default,可在子类中被重新定义,也可被重新赋值。

2024-01-04 14:15:27 444

原创 char 和 varChar 的区别是什么?

CHAR 在存储时会在右边填充空格以达到指定的长度,检索时会去掉空格;VARCHAR 在存储时需要使用 1 或 2 个额外字节记录字符串的长度,检索时不需要处理。CHAR 更适合存储长度较短或者长度都差不多的字符串,例如 Bcrypt 算法、MD5 算法加密后的密码、身份证号码。VARCHAR 类型适合存储长度不确定或者差异较大的字符串,例如用户昵称、文章标题等。CHAR(M) 和 VARCHAR(M) 的 M 都代表能够保存的字符数的最大值,无论是字母、数字还是中文,每个都只占用一个字符。

2024-01-04 14:07:44 514

原创 JAVA基本类型和包装类型的区别

staticnullnull====equals()这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能通过标量替换来实现栈上分配,而避免堆上分配内存基本数据类型的成员变量如果没有被static修饰的话(不建议这么使用,应该要使用基本数据类型对应的包装类型),就存放在堆中。

2023-12-30 11:34:37 394

原创 java三种注释方式

通常用于解释方法内某单行代码的作用。:通常用于生成 Java 开发文档。:通常用于解释一段代码的作用。

2023-12-30 11:30:14 451

原创 == 和 equals() 的区别

=====因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。equals()不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()方法存在于Object类中,而Object类是所有类的直接或间接父类,因此所有的类都有equals()方法。Object类equals()equals()equals()Objectequals()equals()equals()

2023-12-29 10:20:42 385

原创 continue、break 和 return 的区别是什么?

在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。continuebreakreturn用于跳出所在方法,结束该方法的运行。return;思考一下:下列语句的运行结果是什么?

2023-12-29 10:12:14 434

原创 volatile关键字的作用是什么?

我们从一个最经典的例子来分析重排序问题。大家应该都很熟悉单例模式的实现,而在并发环境下的单例实现方式,我们通常可以采用双重检查加锁(DCL)的方式来实现。现在我们分析一下为什么要在变量singleton之间加上volatile关键字。但是由于操作系统可以如果是这个流程,多线程环境下就可能将一个未初始化的对象引用暴露出来,从而导致不可预料的结果。因此,为了防止这个过程的重排序,我们需要将变量设置为volatile类型的变量。可见性问题主要指一个线程修改了共享变量值,而另一个线程却看不到。

2023-12-28 14:33:45 518

原创 @Component和@Bean的区别是什么?

1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。

2023-12-28 13:50:36 799

原创 Spring中的bean的作用域有哪些?

singleton:唯一bean实例,Spring中的bean默认都是单例的。prototype:每次请求都会创建一个新的bean实例。request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经没有了。

2023-12-27 11:09:34 369

原创 什么是SpringAOP? 有哪些AOP的概念?

AOP(Aspect-Oriented Programming,面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使用JDK动态代理去创建代理对象;而对于没有实现接口的对象,就无法使用JDK动态代理,转而使用CGlib动态代理生成一个被代理对象的子类来作为代理。

2023-12-27 11:05:58 428

原创 a = a + b 与 a += b 的区别

= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两个整型相加,如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。(因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错)

2023-12-26 11:31:03 357

原创 你们数据量级多大?分库分表怎么做的?

首先分库分表分为垂直和水平两个方式,一般来说我们拆分的顺序是先垂直后水平。基于现在微服务拆分来说,都是已经做到了垂直分库了垂直切分是将一张表按列切分成多个表,通常是按照列的关系密集程度进行切分,也可以利用垂直切分将经常被使用的列和不经常被使用的列切分到不同的表中。在数据库的层面使用垂直切分将按数据库中表的密集程度部署到不同的库中,例如将原来的电商数据库垂直切分成商品数据库、用户数据库等。

2023-12-26 11:25:41 969

原创 为什么要出现并发?并发的三要素

对于处理器重排序,JMM 的处理器重排序规则会要求 java 编译器在生成指令序列时,插入特定类型的内存屏障(memory barriers,intel 称之为 memory fence)指令,通过内存屏障指令来禁止特定类型的处理器重排序(不是所有的处理器重排序都要禁止)。由于CPU分时复用(线程切换)的存在,线程1执行了第一条指令后,就切换到线程2执行,假如线程2执行了这三条指令后,再切换会线程1执行后续两条指令,将造成最后写到内存中的i值是2而不是3。有序性:即程序执行的顺序按照代码的先后顺序执行。

2023-12-25 11:06:14 1507

原创 hashCode()方法如何理解?

hashCode() 返回散列值,而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价。在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证等价的两个对象散列值也相等。下面的代码中,新建了两个等价的对象,并将它们添加到 HashSet 中。

2023-12-25 10:47:43 400

原创 聊聊equals()方法

2. equals() 与 ==对于基本类型,== 判断两个值是否相等,基本类型没有 equals() 方法。对于引用类型,== 判断两个变量是否引用同一个对象,而 equals() 判断引用的对象是否等价。

2023-12-24 10:53:35 375

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除