- 博客(79)
- 收藏
- 关注
原创 Java中线程常用方法
多个线程,同时操作一个共享资源的时候,可能会出现业务安全问题存在多个线程同时执行同时访问一个共享资源存在修改该共享资源例如:取钱的线程安全问题场景:小明和小红是一对夫妻,他们有一个共同的账户,余额是10万元,如果小明和小红同时来取钱,并且2人各自都在取钱10万元,可能会出现什么问题呢?
2025-03-02 08:15:06
339
原创 线程概述以及Java中线程的三种创建方式(继承Thread类、实现Runnable接口、实现Callable接口)
线程是一个程序内部的一条执行流程程序如果只有一条执行流程,那么这个程序就是单线程的程序多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)如:12306同时处理多个用户请求,百度网盘下载文件的同时上传文件;再例如:消息通信、淘宝、京东系统都离不开多线程技术。
2025-02-28 18:14:11
313
原创 java基础11——为什么Java字符串是不可变的
String可能是 Java 中使用频率最高的引用类型了,因此String类的设计者可以说是用心良苦。比如说String的不可变性。
2025-02-13 19:33:13
629
原创 银行家算法
允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。
2025-02-13 02:49:59
941
原创 操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
先来先服务调度算法(First-Come, First-Served, FCFS)是一种基本的进程调度算法,其核心思想是按照作业到达时间的先后顺序进行调度。有三个作业按下表的时间提交给系统,请按照先来先服务的调度算法计算它们的平均周转时间T和平均带权周转时间W分析:按照先来先服务的原则,可以计算出各个作业在系统中的开始执行时刻、结束时刻、周转时间。
2025-02-13 01:28:14
802
原创 java基础10——为什么重写equals方法的时候必须要重写hashCode方法
Java 是一门面向对象的编程语言,所有的类都会默认继承自 Object 类,而 Object 的中文意思就是“对象”。这是一个本地方法,用来返回对象的哈希值(一个整数)。在 Java 程序执行期间,对同一个对象多次调用该方法必须返回相同的哈希值。对于任何非空引用 x 和 y,当且仅当 x 和 y 引用的是同一个对象时,equals 方法才返回 true。单从这两段解释上来看,的确是这样的。但两个方法的 doc 文档中还有下述两条信息。
2025-02-06 23:59:34
546
原创 java基础09—— == 和 equals() 的区别
方法比较的是对象的值。当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。方法存在于Object类中,而Object类是所有类的直接或间接父类,因此所有的类都有。方法是比较的对象的内存地址,而 String 的。方法是被重写过的,因为 Object 的。比较的是对象的内存地址。
2025-02-06 14:21:42
193
原创 java基础08——面向对象三大特征 封装继承多态
封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。就好像我们看不到挂在墙上的空调的内部的零件信息(也就是属性),但是可以通过遥控器(方法)来控制空调。如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。就好像如果没有空调遥控器,那么我们就无法操控空凋制冷,空调本身就没有意义了(当然现在还有很多其他方法 ,这里只是为了举例子)。
2025-02-06 09:09:02
179
原创 JSON Web Token令牌(JWT)的原理与组成
Json web token(JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
2025-02-06 09:08:04
885
原创 java基础07——面向对象与面向过程的区别
POP 和 OOP 的性能差异主要取决于它们的运行机制,而不仅仅是编程范式本身。因此,简单地比较两者的性能是一个常见的误区。在选择编程范式时,性能并不是唯一的考虑因素。我们定义了一个 Circle 类来表示圆,该类包含了圆的半径属性和计算面积、周长的方法。下面是一个求圆的面积和周长的示例,简单分别展示了面向对象和面向过程两种不同的解决方案。POP 的编程方式通常更为简单和直接,适合处理一些较简单的任务。我们直接定义了圆的半径,并使用该半径直接计算出圆的面积和周长。
2025-02-06 09:07:29
154
原创 TCP三次握手、四次挥手过程及原理
TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是,所以需要关闭连接。
2025-02-05 11:11:25
984
原创 java基础06——序列化和反序列化
如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),但是在 C++这种半面向对象的语言中,struct(结构体)定义的是数据结构类型,而 class 对应的是对象类型。
2025-02-05 10:56:22
650
原创 java基础05——java泛型
Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型。比如这行代码就指明了该 ArrayList 对象只能传入 Person 对象,如果传入其他类型的对象就会报错。并且,原生 List 返回类型是 Object ,需要手动转换类型才能使用,使用泛型后编译器自动转换。
2025-02-05 10:43:48
320
原创 SpringBoot应用跨域访问解决方案
说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。虽然跨域访问被禁止之后,可以在一定程度上提高了应用的安全性,但也为开发带来了一定的麻烦。比如:我们开发一个前后端分离的易用,页面及js部署在一个主机的nginx服务中,后端接口部署在一个tomcat应用容器中,当前端向后端发起请求的时候一定是不符合同源策略的,也就无法访问。那么我们如何解决这个问题?
2025-02-05 10:36:06
1063
原创 使用Selenium和Jsoup框架进行Java爬虫
在Java中使用Selenium和Jsoup框架编写爬虫,可以结合Selenium模拟浏览器行为获取动态加载的内容,然后利用Jsoup解析HTML结构并抽取所需数据。
2025-02-05 10:19:41
1594
1
原创 springboot项目部署到服务器的tomcat——Linux下安装jdk、安装tomcat、部署war包到服务器
springboot项目部署到服务器的tomcat——Linux下安装jdk、安装tomcat、部署war包到服务器
2024-11-23 20:21:22
1091
原创 Spring19——Spring事务属性(事务配置、转账业务追加日志、事务传播行为)
Spring事务属性(事务配置、转账业务追加日志、事务传播行为)
2024-10-12 13:59:29
839
原创 Spring16——案例:百度网盘密码数据兼容处理(利用AOP环绕通知去除提取码前后空格)
案例:百度网盘密码数据兼容处理(利用AOP环绕通知去除提取码前后空格)
2024-10-07 17:18:00
393
原创 什么是重入锁(Reentrant Lock)以及重入锁在Java中的实现(tryAcquire 方法)
重入锁(Reentrant Lock),也称为递归锁,是一种。在多线程编程中,锁是确保共享资源被安全访问的关键工具。当一个线程需要进入由锁保护的代码块时,它必须首先获得这把锁;如果锁已经被其他线程持有,则该线程会被阻塞直到能够获取到锁。对于非重入锁,一旦某个线程获得了锁,在释放这个锁之前,如果再次尝试获取相同的锁,那么它将被永久阻塞,导致死锁。而重入锁则解决了这个问题,它允许已经持有一个锁的线程重复获取该锁而不会被阻塞。这种能力是来实现的。当一个线程第一次获取锁时,计数器设置为1;
2024-09-22 21:03:53
458
原创 leetcode02——59. 螺旋矩阵 II、203. 移除链表元素
【代码】leetcode02——59. 螺旋矩阵 II、203. 移除链表元素。
2024-09-18 23:27:58
337
原创 Spring07——IOC/DI注解开发管理第三方bean(@Bean注解)、注解开发实现为第三方bean注入资源(简单数据类型/引用数据类型)
IOC/DI注解开发管理第三方bean(@Bean注解)、注解开发实现为第三方bean注入资源(简单数据类型/引用数据类型)
2024-09-16 17:20:29
1082
原创 leetcode01——27. 移除元素(双指针)、977. 有序数组的平方(双指针)、209. 长度最小的子数组(双指针/滑动窗口)
【代码】leetcode01——27. 移除元素(双指针)、977. 有序数组的平方(双指针)、209. 长度最小的子数组(双指针/滑动窗口)
2024-09-15 13:49:32
388
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人