Java
文章平均质量分 77
dx1313113
这个作者很懒,什么都没留下…
展开
-
【面试题】介绍一下类加载过程,什么是双亲委派模型
()方法是在编译之后自动生成的。对于初始化阶段,虚拟机严格规范了有且仅有 6 种情况,必须对类进行初始化(只有主动去使用类才会初始化类)原创 2023-11-26 20:41:49 · 553 阅读 · 0 评论 -
Spring IOC 和 AOP
IoC (Inversion of Control 控制反转)是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由给 Spring 框架来管理。AOP(Aspect Oriented Programming)即面向切面编程。AOP 的目的是将横切关注点(例如日志管理、事务管理、权限控制、接口控制)从核心业务逻辑中分离出来,通过动态代理,字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和可扩展性。OOP(面向对象编程)原创 2023-11-24 21:34:11 · 507 阅读 · 0 评论 -
Java IO流
IO 即 Input / Output ,输入输出流。IO流在Java中分为输入流和输出流,而根据数据的处理方式又分为字节流和字符流。Java IO 流的 40 多个类都是从如下 4 个 抽象类基类中派生出来的。原创 2023-10-14 12:25:33 · 190 阅读 · 0 评论 -
String 、StringBuffer 和 StringBuilder 的区别?
使用 String 声明一个字符串的时候,该字符串会存放在堆中的字符串常量池中。因为在java中所有的String 都是以常量表示,且由 final 修饰,因此在线程池中它的。虽然执行效率高,但是不安全所以不建议在多线程环境下对同一个 StringBuilder 对象进行操作。我们在创建String的时候,它在常量池中对这些信息进行处理,如果程序中出现了大量字符串拼接、划分等操作效率将非常低。比StringBuffer 效率低的原因:考虑到了多线程的情况,在进行字符串操作的时候 使用。原创 2023-11-23 20:10:05 · 310 阅读 · 0 评论 -
@Autowired 和 @Resource 的区别
比如:UserService接口有两个实现类:UserServiceImpl1 和 UserServiceImpl2 , 而且它们都已经被 Spring 容器所管理。@Resource 有两个比较重要且日常开发常用的属性:name (名称),type(类型)。会同时找到多个满足条件的选择,默认情况下它自己不知道选择哪一个。(根据类型进行匹配),也就是说会优先根据接口类型去匹配并注入。(根据名称进行匹配),这个名称通常就是类名(首字母小写)。内置的注解,默认的注入方式是。提供的注解,默认注入方式为。原创 2023-10-30 14:40:46 · 97 阅读 · 0 评论 -
Java synchronized 关键字
synchronized 关键字加到 static 静态方法和 synchronized(class) 代码快上都是给 class 类加锁synchronized 关键字加到实例方法上是给对象实例加锁尽量不要使用 synchronized(String a) ,因为 JVM中,字符串常量池具有缓冲功能、构造方法不能使用 synchronized 关键字修饰。构造方法本身就属于线程安全的,不存在同步的构造方法一说。原创 2023-10-13 13:45:40 · 110 阅读 · 0 评论 -
Java 中 Volatile 关键字
只要在某个线程中无法检测到重排序的情况(即使在其他线程中可以明显地看到该线程中的重排序),那么就无法确保线程中的操作将按照程序中指定的顺序来执行。两个关键字来保证线程之间操作的有序性,volatile 是因为其本身包含 "禁止指令重排序" 的语义,synchronized 是由"一个变量在同一时刻只允许一条线程对其进行 lock 操作" 这条规则获得的,此规则决定了持有同一个对象锁的两个同步块只能串行执行。在缺乏足够同步的多线程程序中,要想对内存操作的执行顺序进行判断,无法得到正确的结论。原创 2023-10-13 13:13:39 · 187 阅读 · 0 评论 -
HashMap为什么线程不安全?
可能会导致链表中的节点指向错误的位置,从而形成一个环形链表,使得查询元素的操作陷入死循环而无法结束。而不是头插法来避免链表倒置,使得插入的节点永远都是放在链表的末尾,避免了链表中的环形结构。数据丢失问题在 JDK1.7 和 JDK 1.8 中都存在,这里以 JDK1.8 为例。中,多个键值对可能会被分配到同一个桶,并以链表或红黑树的形式存储。这是由于当一个桶位中有多个元素需要进行扩容时,多个线程同时对链表进行操作,还是会存在数据覆盖的问题。操作会导致线程不安全,具体来说会有数据覆盖的风险。原创 2023-10-12 11:24:59 · 111 阅读 · 0 评论 -
java中HashMap的实现原理
每个 Entry其实就是一个 键值对,并且包含一个指向下一个元素的引用,这就构成了链表。当需要取出一个 Entry 对象时,也会根据 hash算法找到其在数组中的存储位置,再根据 equals 方法从该位置的链表中取出 Entry。HashMap 结合了 ArrayList 的查询效率高的特点以及 LinkedList 插入效率高的特点,但是如果我们要存储的数据过于庞大,肯定会造成多次 哈希冲突,这样一来,链表上的节点就会堆积很多,在做查询的时候效率又会变得很低,失去了 HashMap本来的特点。原创 2023-10-12 10:37:22 · 194 阅读 · 0 评论 -
String 类型的变量和常量做 “+” 运算时发生了什么?
对象引用 和 “+” 的字符串拼接方式,实际上是通过 StringBuilder 调用 append() 方法实现的,拼接完成之后调用 toString() 得到一个 String 对象。被 final 关键字修饰后的 String 会被编译器当做常量处理,编译器在程序编译期就可以确定它的值,其效果相当于访问常量。常量折叠会把常量表达式的值求出来作为常量嵌在最终生成的代码中,这时 Javac 编译器对源代码做的极少量优化措施之一。方法是比较的对象的内存地址,而。方法比较的是字符串的值是否相等。原创 2023-10-06 15:35:21 · 140 阅读 · 0 评论