
java
文章平均质量分 74
loading。。。
这个作者很懒,什么都没留下…
展开
-
java 框架 Srping
[json](https://www.jsonbest.com/zh)AOP(面向切面编程)是一种编程范式,它是面向对象编程(OOP)的一种补充。AOP旨在通过将横切关注点(例如日志记录、安全性、事务管理等)从应用程序的核心业务逻辑中分离出来,从而提高代码的模块化性和可维护性。在传统的面向对象编程中,一个类通常负责一个特定的功能,而横切关注点则散布在各个类的方法中。这样导致了横切关注点代码的重复和散乱,不利于代码的维护和扩展。=原创 2023-08-04 14:02:54 · 266 阅读 · 0 评论 -
java 并发
[json](https://www.jsonbest.com/zh)线程是进程中的最小执行单元,是CPU调度的基本单位。一个进程可以包含多个线程,这些线程共享进程的资源,包括内存空间、文件描述符等。线程之间可以并发执行,使得程序可以同时处理多个任务,提高了系统的响应能力和并发性。进程是操作系统中的一个执行实例,是程序在计算机上的一次执行活动。每个进程都有自己独立的内存空间和系统资源,进程之间是相互独立的。进程的切换代价相对较高,因为需要保存和恢复进程的所有状态信息原创 2023-08-03 00:46:18 · 343 阅读 · 0 评论 -
JVM 学习
[json](https://www.jsonbest.com/zh)自定义类加载器可以继承ClassLoader类并重写其findClass()方法来实现自定义的类加载逻辑。在某些特定需求下,可能需要自定义类加载器来加载一些特殊的类,例如从网络、数据库或特定资源中加载类。原创 2023-08-02 01:18:21 · 898 阅读 · 0 评论 -
java 基础
Java的基本数据类型是一组预定义的数据类型,用于存储简单的值,而不是对象。Java中的基本数据类型具有固定的大小和默认值。byte:1字节,范围为-128到127。short:2字节,范围为-32,768到32,767。int:4字节,范围为-231到231-1。long:8字节,范围为-263到263-1。float:4字节,范围为IEEE 754规定的浮点数范围,一般精度为6-7位小数。double:8字节,范围为IEEE 754规定的浮点数范围,一般精度为15位小数。原创 2023-08-01 00:50:35 · 274 阅读 · 0 评论 -
消息队列,问题与处理方案梳理
1、如何保证消息不被重复消费?一、为什么会出现重复消费的问题?RabbitMQ、RocketMQ、Kafka 都有可能出现重复消费的问题,导致重复消费的原因可能出现在生产者,也可能出现在 MQ 或 消费者。这里说的重复消费问题是指同一个数据被执行了两次,不单单指 MQ 中一条消息被消费了两次,也可能是 MQ 中存在两条一模一样的消费。生产者:生产者可能会重复推送一条数据到 MQ 中,为什么会出现这种情况呢?也许是一个 [json](https://www.jsonbest.com/zh)原创 2022-04-10 18:31:15 · 5605 阅读 · 0 评论 -
进程与java线程间的通信方式
进程间的几种通信方式说一下?管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有血缘关系的进程间使用。进程的血缘关系通常指父子进程关系。管道分为 pipe(无名管道)和 fifo(命名管道)两种,有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间通信。信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它通常作为一种锁机制,[json](https://www.jsonbest.com/zh)原创 2022-04-10 00:17:28 · 302 阅读 · 0 评论 -
Java内存模型JMM
Java 内存模型Java 内存模型(JMM)是一种抽象的概念,并不真实存在,它描述了一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。试图屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。注意JMM与JVM内存区域划分的区别:JMM描述的是一组规则,围绕原子性、有序性和可见性展开;相似点:存在共享区域和私有区域主内存与工作内存处理器上的寄存器的读写的速度比内存快几个数量级,为了解决这种速度矛原创 2022-04-08 16:44:35 · 188 阅读 · 0 评论 -
Spring MVC执行流程
原创 2022-04-05 16:51:49 · 432 阅读 · 0 评论 -
Spring 事务失效
原创 2022-04-05 15:32:12 · 433 阅读 · 0 评论 -
ThreadLocal
原创 2022-04-04 16:03:35 · 256 阅读 · 0 评论 -
java JUC 面试
说说 AtomicInteger 和 synchronized 的异同点?相同点都是线程安全不同点1、背后原理synchronized 背后的 monitor 锁。在执行同步代码之前,需要首先获取到 monitor 锁,执行完毕后,再释放锁。原子类,线程安全的原理是利用了 CAS 操作。2、使用范围原子类使用范围是比较局限的,一个原子类仅仅是一个对象,不够灵活。而 synchronized 的使用范围要广泛得多。比如说 synchronized 既可以修饰一个方法,又可以修饰一段代码,相当于.原创 2022-04-02 19:13:16 · 544 阅读 · 0 评论 -
Lock和AQS详解,Lock VS synchronized
锁 ( lock ) 和同步块 ( synchronized block ) 之间的差异使用 synchronized 块和使用 Lock API 之间几乎没有区别:同步块完全包含在方法中 : 在独立的方法中,我们可以使用 Lock 提供的 lock() 和 unlock() 实现锁和解锁操作。同步块不支持公平竞争,任何线程都可以获取释放的锁定,且不能指定优先级。但锁 ( Lock ) 就不一样了,可以通过指定公平属性来实现 Lock 中的公平性。这可以确保最长的等待线程被授予锁定权限。如果线程无法原创 2022-04-02 18:37:56 · 469 阅读 · 0 评论 -
java 线程状态转换,sleep与wait区别
sleep和wait的区别原创 2022-04-02 00:04:10 · 528 阅读 · 0 评论 -
SpringMVC, java, 过滤器, 拦截器, 监听器, Filter, Intercept, Listener
文章目录一.过滤器1.java代码,写个类实现Filter接口(implements Filter)2.在web.xml如下小菜:1.判断是否是Ajax请求2.另外一般出来编码问题的时候会直接在web.xml中加上这段:这个不需要再写java代码,因为它指向的代码是org.springframework.web.filter.CharacterEncodingFilter已经存在的。直接复制可用,无需改动。二.拦截器1.java代码部分,需要一个继承了HandlerInterceptorAdapter抽象类原创 2020-10-12 15:54:44 · 337 阅读 · 0 评论 -
详解java锁之java“锁“事
文章目录1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍1. 乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说概念。对于同一个数据的原创 2020-09-14 16:05:40 · 454 阅读 · 0 评论 -
线程安全的List, 从Vector 到 SynchronizedList 到 CopyOnWriteArrayList
文章目录大部分人会脱口而出:用Vector,这样只会让面试官鄙视!除了Vector,你还会别的吗?你至少还得说得上这种:java.util.Collections.SynchronizedList它能把所有 List 接口的实现类转换成线程安全的List,比 Vector 有更好的扩展性和兼容性,Syfinal List list;SynchronizedList(List<E> list) { super(list); this.list = list;}nch原创 2020-09-10 16:27:35 · 378 阅读 · 0 评论 -
彻底搞懂String, 字符串常量池, intern方法
来看一段代码:public static void main(String[] args) { String s = new String("1"); s.intern(); String s2 = "1"; System.out.println(s == s2); String s3 = new String("1") + new String("1"); s3.intern(); String s4 = "11"; System.out原创 2020-09-09 10:29:39 · 245 阅读 · 0 评论 -
海量数据面试题
文章目录1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?2. 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。4. 海量日志数据,提取出某日访问百度次数最多的那个IP。5. 在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.原创 2020-09-04 15:25:08 · 267 阅读 · 0 评论 -
Java中创建对象的5种方式
文章目录1.使用new关键字2.使用Class类的newInstance方法3.使用Constructor类的newInstance方法4.使用clone方法5.使用反序列化作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和原创 2020-09-04 10:50:20 · 231 阅读 · 0 评论 -
Java对象的序列化和反序列化, serialVersionUID作用
文章目录一、序列化和反序列化的概念二、JDK类库中的序列化API三、serialVersionUID的作用一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对原创 2020-09-04 10:42:47 · 326 阅读 · 0 评论 -
Java 并发编程:volatile的使用及其原理
文章目录一、volatile的作用二、volatile的使用三、volatile的原理一、volatile的作用我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,对系统的性能有比较大的影响,所以,如果有其他解决方案,我们通常都避免使用Synchronized来解决问题。而volatile关键字就是Java中提供的另一种解决可见性和有序性问原创 2020-09-03 11:03:10 · 163 阅读 · 0 评论 -
Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
一、线程的状态Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。New:新建状态,当线程创建完成时为新建状态,即new Thread(…),还没有调用start方法时,线程处于新建状态。Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源。处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来调度。Running:运原创 2020-09-03 09:51:13 · 138 阅读 · 0 评论 -
Java 并发编程:CAS、ABA问题、Synchronized底层优化, 偏向锁、轻量级锁、 重量级锁、原理与实现,悲观锁,乐观锁
一、重量级锁现在我们应该知道,Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。JDK中对Synchronized做的种种优化,其核心都是为了减少这种重量级锁的使用。原创 2020-09-02 15:45:18 · 275 阅读 · 0 评论 -
try、catch、finally用法总结
try、catch、finally用法总结:1、不管有没有异常,finally中的代码都会执行2、当try、catch中有return时,finally中的代码依然会继续执行3、finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。4、finally代码中最好不要包含return,程序会提前退出,也就是说返回的值不原创 2020-07-08 17:35:10 · 374 阅读 · 0 评论 -
JAVA8十大新特性,lambda表达式详解
一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:interface Formula {double calculate(int a);default double sqrt(int a) { return Math.sqrt(a);}}Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqr原创 2020-06-02 18:44:58 · 885 阅读 · 0 评论 -
ConcurrentHashMap实现线程安全的底层原理, 1.7和1.8的比较,vs hashtable
ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEntry 用来封装映射表的键 / 值对;Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个 HashEntry 对象链接起来的链表。一个 ConcurrentHashMap 实例中包含由若干个 Segment 对象组成的数组。Hash...原创 2020-04-26 09:23:58 · 2098 阅读 · 0 评论 -
设计模式七大原则, 单一职责原则,开闭原则, 里氏替换原则, 依赖倒置原则, 接口隔离原则,合成/聚合复用原则 迪米特原则
1.单一原则(Single Responsibility Principle):一个类或者一个方法只负责一项职责,尽量做到类的只有一个行为原因引起变化;a、业务对象(BO business object)、业务逻辑(BL business logic)拆分;2.里氏替换原则(LSP liskov substitution principle):子类可以扩展父类的功能,但不能改变原有父类的功...原创 2020-04-18 17:42:43 · 2165 阅读 · 0 评论 -
HashMap实现原理及源码分析, 面试
一. 实现原理HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。//HashMap的主干数组,可以看到就是一个Entry数组,初始值为空数组{},//主干数组的长度一定是2的次幂,至于为什么这么做,后面会有详细分析。transient Entry<K,V>[] table = (Entry<...原创 2020-04-16 22:03:15 · 351 阅读 · 0 评论 -
jvm,java 虚拟机 面试问题集锦
1. java8中的运行时数据区?Java8没有方法区(java7中还存在)的概念了,原来方法区中的内容分配到了堆中和MetaSpace中。程序计数器: 线程切换后能回到正确的执行位置java虚拟机栈: 描述java方法执行的线程内存模型, 每个方法执行时,java虚拟机同步创建一个栈帧本地方法栈: 与java虚拟机栈发挥的作用相似, 区别在于虚拟机栈为虚拟机执行java方法(字节码)服...原创 2020-04-07 14:31:37 · 337 阅读 · 0 评论 -
单例模式,饿汉式, 懒汉式
饿汉式class Singleton{ private static final Singelton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return instance; }}懒汉式class Singleton{ private st...原创 2020-04-01 14:43:44 · 123 阅读 · 0 评论 -
线程池ThreadPoolExecutor实现原理
参照1. 线程池优点1.降低资源消耗。通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗;2.提升系统响应速度。通过复用线程,省去创建线程的过程,因此整体上提升了系统的响应速度;3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此,需要使用线程池来管理线程。2. 工作原理线程池的设计思想就是使用了核心线程池corePoo...原创 2020-03-31 13:46:21 · 144 阅读 · 0 评论 -
Spring, MVC, Mybatis, SQL 面试
● 请谈一谈Spring中自动装配的方式有哪些?考察点:spring框架参考回答:no:不进行自动装配,手动设置Bean的依赖关系。通过“ref”attribute手动设定。byName:根据Bean的名字进行自动装配。byType:根据Bean的类型进行自动装配。constructor:类似于byType,不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同...原创 2020-03-25 23:26:51 · 141 阅读 · 1 评论 -
java 基础知识, 面试
1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?参考答案Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。2. ”static”...原创 2020-03-24 18:33:55 · 305 阅读 · 0 评论