JAVA
文章平均质量分 81
救救孩子把
你说 然后呢 憋说话,让我静静
展开
-
Java基础之IO流
它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流都包括了。输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。原创 2024-09-20 08:07:58 · 398 阅读 · 0 评论 -
【多线程解码】Java 死锁的发生条件与解决途径
在 Java 中,死锁是指两个或多个线程被永久阻塞,它们都在等待被其他线程占用的资源,从而导致程序无法继续执行下去的情况。可以使用jps、jstack查看死锁信息,堆栈信息需要往下找找。原创 2024-09-20 08:07:12 · 773 阅读 · 0 评论 -
线程池的核心线程会被回收吗?
但是ThreadPoolExecutor 还是提供了一个参数来控制这个行为,通过allowCoreThreadTimeOut(true)设置后,核心线程在空闲超过`keepAliveTime时就会被回收。从processWorkerExit() 中可以看出,如果allowCoreThreadTimeOut 设置为true,则大概率情况下是不会调用addWorker(null, false) 去创建线程的,它会直接返回,线程自然消亡。原创 2024-09-19 10:27:00 · 256 阅读 · 0 评论 -
Java中代理模式相关的注解有哪些
代理主题持有一个真实主题的引用,在调用真实主题的方法前后可以添加一些额外的操作,比如权限控制、日志记录、缓存等,从而实现对真实主题的间接访问和控制。后,Spring 会创建一个代理对象,在代理对象中检查缓存是否存在,如果存在则直接返回缓存结果,否则执行方法并将结果存入缓存。后,Spring 会在运行时为该方法创建一个代理对象,在代理对象中实现事务的开启、提交或回滚等操作。:定义了真实主题和代理主题的公共接口,客户端通过这个接口来调用真实主题或者代理主题的方法。:真正实现业务逻辑的对象。原创 2024-09-19 10:26:24 · 209 阅读 · 0 评论 -
Java基础之-多线程
死锁是指多个线程因竞争资源而造成的一种互相等待状态,若无外力作用,这些进程都将无法向前推进。Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程持有共享变量的锁,都采用独占的方式来访问这些变量。独占锁其实就是一种悲观锁,所以可以说synchronized是悲观锁。CAS(compare and swap)的缩写。Java利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法,实现原子操作。原创 2024-09-18 07:13:41 · 481 阅读 · 0 评论 -
Java基础-反射
动态代理是实现 JDK 里的 InvocationHandler 接口的 invoke 方法,但注意的是代理的是接口,也就是业务类必须要实现接口,通过 Proxy 里的。还有一种动态代理 CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。在运行状态,对于任意一个类,都能获取这个类的所有属性和方法,在运行时判断任意一个对象所属的类。原创 2024-09-17 08:54:22 · 414 阅读 · 0 评论 -
Java线程面试题合集
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成该任务只需10毫秒。如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。原创 2024-09-17 08:15:05 · 798 阅读 · 0 评论 -
Java中Redis大Key的优化拆分方案与示例
如果是大字符串,可以考虑将其拆分成多个小字符串存储。比如将一个很长的 JSON 字符串拆分成多个小的 JSON 片段分别存储。对于大哈希,可以将其属性拆分成多个小哈希存储。比如一个包含大量字段的哈希表,可以根据字段的某种特征进行拆分。对于大列表,可以将其拆分成多个小列表存储。比如一个有大量元素的列表,可以根据一定规则拆分成多个子列表。通过以上拆分方案,可以有效地避免 Redis 中的大 key 问题,提高系统的性能和稳定性。原创 2024-09-17 08:14:41 · 481 阅读 · 0 评论 -
Java21新特性
通过高效地调用外部函数(即 JVM 之外的代码)和安全地访问外部内存(即不受 JVM 管理的内存),该 API 使 Java 程序能够调用本机库并处理本机数据,而不会像 JNI 那样危险和脆弱。,这是一种具有确定出现顺序(encounter order)的集合(无论我们遍历这样的集合多少次,元素的出现顺序始终是固定的)。在未来的版本中,官方会把 ZGenerational 设为默认值,即默认打开 ZGC 的分代 GC。表示未命名的变量以及模式匹配时不使用的组件,旨在提高代码的可读性和可维护性。原创 2024-09-16 07:56:01 · 754 阅读 · 0 评论 -
多线程面试题-60题
死锁就是两个线程相互等待对方释放对象锁。很简单,简单看名字就知道是装有线程的池子,可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程的复用。死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了。原子性、可见性、有序性是多线程编程中最重要的几个知识点,由于多线程情况复杂,如何让每个线程能看到正确的结果,这是非常重要的。什么是守护线程?原创 2024-09-16 07:55:26 · 857 阅读 · 0 评论 -
多线程面试题-28问
字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。所以,程序计数器私有主要是为了线程切换后能恢复到正确的执行位置。原创 2024-09-14 12:34:23 · 625 阅读 · 0 评论 -
Java静态代理和动态代理
给大家举个简单例子。在一个公司中,老板处于上层,客户在下层。因每天来访客户众多,老板本应只考虑战略和赚钱,却被一些不重要的客户耽误不少时间。于是老板招聘了一个秘书,专门负责接待客户和登记客户来访。这就如同我们的代码,业务类只需负责核心业务代码,非业务代码如请求用时记录、事务开启、健全及异常处理等,交给代理去做,从而降低代码耦合度,将业务代码和公共代码分离,提高可维护性。这个例子属于静态代理,因为招来的秘书只负责客户来访登记。原创 2024-09-14 12:33:43 · 813 阅读 · 0 评论 -
Java中的锁
开发过程中,最常见的就是互斥锁的了,互斥锁加锁失败时,会用「线程切换」来应对,当加锁失败的线程再次加锁成功后的这一过程,会有两次线程上下文切换的成本,性能损耗比较大。如果明确知道被锁住的代码的执行时间很短,那应该选择开销比较小的自旋锁,因为自旋锁加锁失败时,并不会主动产生线程切换,而是一直忙等待,直到获取到锁,那么如果被锁住的代码执行时间很短,那这个忙等待的时间相对应也很短。如果能区分读操作和写操作的场景,那读写锁就更合适了,它允许多个读线程可以同时持有读锁,提高了读的并发性。原创 2024-09-13 12:22:52 · 752 阅读 · 0 评论 -
Git学习详解
Git是分布式代码托管的标杆,这里将提供如何学习Git,以及Git工作流的总结,和常用的操作命令。原创 2024-09-12 12:19:52 · 490 阅读 · 0 评论 -
多线程和高并发-17题
ThreadLocal 用于创建线程的本地变量,一个对象的所有线程会共享它的全局变量,所以这些变量不是线程安全的,可以使用同步技术。但是当不想使用同步的时候,可以选择 ThreadLocal变量。每个线程都会拥有他们自己的 Thread 变量,它们可以使用 get()\set() 方法去获取他们的默认值或者在线程内部改变他们的值。ThreadLocal 实例通常是希望它们同线程状态关联起来是 private static 属性。当所有线程阻塞,或者由于需要的资源无效而不能处理,不存在非阻塞线程使资源可用。原创 2024-09-12 12:18:23 · 724 阅读 · 0 评论 -
JDK22一些新特性
JDK 22已经于2024年3月19日正式发布。本文总结了JDK 22发布的新特性。原创 2024-09-11 22:41:43 · 856 阅读 · 0 评论 -
Spring Cloud Gateway学习记录
大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能`在客户端记录每个微服务的地址,然后分别去用。每个业务都会需要鉴权、限流、权限校验、跨域等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会很蛋疼,完全可以抽出来,放到一个统一的地方去做。如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一个页面可能会涉及到数百个微服务协同工作,如果。原创 2024-09-06 08:55:57 · 945 阅读 · 0 评论 -
javaSE之面向对象思维导图总结
原创 2018-08-21 17:25:21 · 1658 阅读 · 0 评论 -
equals代码比较优化
if(username.equals(“admin”){ .... } 答案: if(“admin”.equals(username)){ } 第一次看到这个题是蒙的, 尽可能的避免null指针异常 ...原创 2018-08-22 22:41:21 · 1125 阅读 · 1 评论 -
JDBC链接警告WARN: Establishing SSL connection without server's identity verification is not recommended.
jsp中链接mysql数据库报错,WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be establi...原创 2018-06-23 20:50:08 · 303 阅读 · 0 评论 -
jsp显示中的乱码问题
jsp文件中的乱码问题。 <% //处理汉字乱码 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf...原创 2018-06-23 15:58:23 · 152 阅读 · 0 评论 -
JAVA可变形参的使用
public void 方法名(String... args){}有的小伙伴看到(String... args)的时候就蒙,这是什么鬼????这是可变形参,也是多个类型的的参数,算是一个新的特性。package com.yuan.momo;//可变形参个数 //1.格式,对于方法的形参,数据类型...形参名 //2.可变个数的形参方法于同名的方法构成重载 //3.可变参数在调用时从0开始,...原创 2018-06-04 08:53:49 · 3386 阅读 · 0 评论