java
angen2018
积少成多
展开
-
扫码登录实现大概步骤
如果验证通过,服务器会将用户的登录状态与这个唯一标识关联起来,并在WebSocket频道中发送一个响应,确认登录成功。:使用这个唯一标识,你可以构建一个URL,这个URL包含了用户需要访问的登录页面或者API端点。:首先,你需要为每个登录请求生成一个唯一的标识(通常是一个UUID),这个标识将用于生成二维码和识别登录请求。:用户使用手机扫描二维码后,手机端应用会发送一个请求到服务器,获取到登录状态的Token。:一旦WebSocket接收到登录成功的响应,前端页面可以更新用户的状态,显示用户已登录。原创 2024-09-03 18:20:07 · 194 阅读 · 0 评论 -
通过设置JVM参数来启用GC(垃圾回收)日志
在这个例子中,`-Xloggc:/path/to/gc.log` 指定了GC日志的输出文件路径,`-XX:NumberOfGCLogFiles=10` 表示最多保留10个GC日志文件,`-XX:GCLogFileSize=10M` 表示每个日志文件的最大大小为10MB。在这个例子中,`-XX:+PrintGC`、`-XX:+PrintGCDetails` 和 `-XX:+PrintGCDateStamps` 参数被用来启用GC日志,但没有指定 `-Xloggc` 参数,因此GC日志将默认输出到控制台。原创 2024-09-03 16:23:58 · 487 阅读 · 0 评论 -
mysql 一主一从数据库的配置文件
4. **binlog-ignore-db**:如果需要忽略复制特定的数据库,如MySQL自带的数据库。4. **同步数据**:在从服务器上使用`CHANGE MASTER TO`语句配置复制。1. **server-id**:同样需要设置一个唯一的ID,不能与主服务器的ID相同。3. **read-only**:设置从服务器为只读模式,防止在从服务器上执行写操作。1. **server-id**:为每个MySQL服务器设置一个唯一的ID。2. **创建复制用户**:在主服务器上创建用于复制的专用用户。原创 2024-08-28 15:37:18 · 773 阅读 · 0 评论 -
java JVM
在Java中,判断一个对象是否成为垃圾,即是否可被垃圾回收器(Garbage Collector,GC)回收,主要基于以下条件:1. **无法到达性(Unreachability)**:对象没有任何引用与之相连,即从GC Roots开始无法到达该对象。2. **GC Roots的起点**:GC Roots是垃圾收集器进行可达性分析时的起始点,包括:- 静态字段(`static`字段)中的对象引用。- 局部变量表(栈帧中的局部变量)中的对象引用。原创 2024-08-27 17:04:44 · 891 阅读 · 0 评论 -
java 自定义线程池
1. **创建一个类实现`ExecutorService`接口**:这个类需要实现`execute(Runnable command)`方法,它是用于提交新任务的方法。5. **任务提交**:当提交新任务时,需要将其添加到工作队列中,并根据当前线程池的状态决定是否需要创建新线程来处理这个任务。7. **实现`shutdown`和`shutdownNow`方法**:这些方法用于关闭线程池,不再接受新任务。6. **线程池的关闭**:提供关闭线程池的方法,包括优雅关闭和强制关闭。原创 2024-08-27 11:47:25 · 266 阅读 · 0 评论 -
java 对象的四种引用类型
虚引用必须和 `ReferenceQueue` 一起使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会将这个虚引用加入到与之关联的 `ReferenceQueue` 中。- 弱引用不会阻止垃圾回收器回收其指向的对象,也就是说,只要垃圾回收器发现了弱引用,就会回收其指向的对象,并且清除弱引用本身。- 当系统内存不足时,垃圾回收器会回收软引用指向的对象来释放内存,但在此之前会清除这些对象的软引用。- 虚引用通过 `java.lang.ref.PhantomReference` 类实现。原创 2024-08-27 11:38:10 · 303 阅读 · 0 评论 -
java Fork/Join 框架的理解以及简单运用
2. **定义任务**:实现 `Callable` 接口或继承 `RecursiveTask` 或 `RecursiveAction` 类来定义任务。1. **任务(Task)**:表示可以执行的工作单元。4. **执行任务**:使用 `ForkJoinPool` 的 `invoke` 或 `execute` 方法来执行任务。5. **递归**:Fork/Join 模式通常与递归结合使用,即每个子任务可能进一步分解为更小的子任务。3. **分解任务**:在任务的 `call` 方法中实现任务的分解逻辑。原创 2024-08-26 13:59:45 · 342 阅读 · 0 评论 -
java 有哪些锁
`java.util.concurrent.locks.ReentrantLock` 提供了一种比 `synchronized` 更灵活的锁定机制,支持尝试非阻塞获取锁、可中断的锁获取、超时获取锁以及公平性(按照线程请求锁的顺序来获取锁)。- `java.util.concurrent.locks.ReadWriteLock` 允许多个线程同时读取同一资源,但在写入时需要独占访问。- 是 `CyclicBarrier` 和 `CountDownLatch` 的综合扩展,用于多阶段的同步。原创 2024-08-26 10:48:08 · 268 阅读 · 0 评论 -
java 使用zookeeper包实现zookeeper分布式锁
zookeeper不可重入锁的实现代码。原创 2024-08-25 13:23:29 · 428 阅读 · 0 评论 -
CAS算法
9. **使用场景**:CAS操作广泛用于并发编程中,特别是在实现原子变量类(如`AtomicInteger`和`AtomicReference`)时。如果不相等,则不执行任何操作。7. **锁的替代**:CAS算法是实现锁(如互斥锁)的一种替代方法,它可以减少线程争用时的上下文切换和调度开销。5. **循环使用**:由于CAS操作可能会因为其他线程的干扰而失败,它通常在一个循环中使用,直到成功更新为止。1. **原子性**:CAS操作是原子性的,即它要么完全执行,要么完全不执行,不会出现中间状态。原创 2024-08-25 09:23:36 · 168 阅读 · 0 评论 -
java Collection和Map接口实现类的详解
总结来说,当需要在迭代过程中修改 `List` 或 `Set` 时,应该使用迭代器的 `remove()` 方法来删除元素,并且避免在 `for-each` 循环中直接修改集合。如果你需要有序的键值对集合,`TreeMap` 可能更合适。`ListIterator` 提供了 `add()` 和 `remove()` 方法,可以在 `while` 循环中使用它来安全地添加或删除元素。类似于 `List`,使用 `Iterator` 的 `remove()` 方法可以安全地删除 `Set` 中的元素。原创 2024-08-18 21:14:36 · 562 阅读 · 0 评论 -
多线程中导致cpu使用率一直上升,一般会是哪些地方导致的
1. **锁竞争(Lock Contention)**:当多个线程频繁请求同一资源的锁时,会发生锁竞争,导致线程阻塞和CPU资源浪费。2. **死锁(Deadlock)**:死锁发生时,多个线程相互等待对方持有的资源,导致程序无法继续执行。10. **I/O 操作**:阻塞的 I/O 操作可能导致线程无法继续执行,从而占用 CPU 资源。7. **不合理的线程数量**:创建过多的线程可能导致CPU过载。8. **长时间运行的同步任务**:如果同步任务执行时间过长,可能会导致CPU使用率上升。原创 2024-08-17 23:25:59 · 408 阅读 · 0 评论 -
java 分布式锁 利用守护线程给锁续期
这是因为守护线程通常用于执行一些后台的、非关键的任务,而用户线程的结束通常表示应用程序的主要任务已经完成。- 守护线程:可以认为是为了支持用户线程而存在的,当所有的用户线程结束时,守护线程也会自动结束,即使它们还在运行。守护线程是一种在后台运行的特殊线程,它通常用于为其他用户线程提供服务,比如垃圾回收、JVM内部操作等。守护线程的生命周期与JVM的生命周期相关联,当JVM没有非守护线程运行时,守护线程也会被终止。- 用户线程:执行应用程序的主要任务的线程,如果所有的用户线程都结束,程序也会终止。原创 2024-08-17 22:58:26 · 208 阅读 · 0 评论 -
java JUC编程
Java内存模型(JMM)定义了内存的可见性规则,需要通过适当的同步机制(如 `volatile` 关键字、synchronized)来解决可见性问题。- 有序性问题指的是在并发环境中,由于编译器优化、处理器乱序执行等原因,代码的执行顺序可能会与编写顺序不同,导致不可预期的行为。在并发环境下,由于多个线程可能会同时访问和修改共享数据,因此需要确保对共享数据的操作是原子性的,避免数据不一致的问题。- 并发程序的性能优化是一个持续的过程,需要考虑线程池大小、任务调度、锁的粒度和种类等因素。原创 2024-08-17 22:53:05 · 448 阅读 · 0 评论 -
java如何定位到哪行代码占用内存高
如果内存占用高的进程是Java进程,可以使用`jstack `命令来获取Java堆栈跟踪信息,进而分析具体哪部分代码占用内存较高。`top`命令可以实时显示系统中进程的资源占用情况,通过`Shift + M`可以按内存使用率排序,快速定位内存占用高的进程。使用`ps aux --sort=-%mem`命令可以显示所有进程按照内存使用率排序的列表,找到内存占用高的进程。使用`free -h`命令可以查看内存的总体使用情况,包括已使用内存、空闲内存、缓存和缓冲区内存等。原创 2024-08-15 01:24:12 · 369 阅读 · 0 评论 -
定义一个统一的响应格式类
这个 `ApiResponse` 类是一个泛型类,可以用于封装任何类型的返回数据。在大型项目中,这样的类通常会被定义在共享的库中,以便在不同的服务和模块之间重用。在实际开发中,确实很常见需要定义一个统一的响应格式,用于封装 API 接口的返回结果。// 返回的数据,泛型支持返回不同类型的数据。// 根据需要可以添加其他方法,例如用于成功的响应或错误响应的静态方法。// 无参构造函数,可能需要序列化工具链的无参构造函数。// 创建成功的响应。// 创建失败的响应。原创 2024-08-03 11:17:22 · 395 阅读 · 0 评论 -
Matcher group方法
在Java中,`Matcher` 类的 `group` 方法用于捕获由正则表达式匹配的文本。- 如果正则表达式中没有定义捕获组,或者捕获组没有匹配任何内容,`group(int group)` 将返回 `""`(空字符串)。- `group(int group)`:返回由正则表达式中的捕获组匹配的输入字符串。- `matcher.group(2)` 返回第二个捕获组匹配的字符串,即 "example"。- `matcher.group(1)` 返回第一个捕获组匹配的字符串,即 "test"。原创 2024-07-17 12:49:37 · 445 阅读 · 1 评论 -
centos7 安装java8环境
source /etc/profile 刷新环境变量。原创 2023-02-13 14:09:17 · 363 阅读 · 1 评论 -
重启jar包脚本
APP_NAME=你的jar名字。原创 2022-08-21 15:04:13 · 535 阅读 · 0 评论 -
java 枚举ENUM
所以通过get方法可以获取到,同理你也可以通过set方法修改值,但是实际开发中没必要修改值。就是add成员常量指向了new ActionEnum("添加", 0);在枚举类中定义抽象方法需要枚举类中的每个成员常量实现。举个例子ActionEnum编译后,这样写你就会看懂了。然后最上面的那种使用方式你就会理解为什么可以那么写了。为什么称为成员常量,并且需要对每个成员常量实现?java 枚举类可以实现单例模式,因为枚举类的构造方法必须是私有的。...原创 2022-08-06 23:00:24 · 241 阅读 · 0 评论 -
Spring aop切面编程
4,异常通知@AfterThrowing在目标方法出现异常时执行,如果方法没有异常出现,则不执行。在spring的aop中,指的是业务层的类的所有现有方法。在类中有很多方法可以被增强,但是实际开发中,我们增强的往往就那几个,那么这些被实际增强的方法叫切入点。2,后置通知@AfterReturning()原来方法执行之后,特点可以得到被增强方法的返回值。3,环绕通知@Around在方法之前和之后执行,特点可以阻止目标方法执行。5,最终通知@After()无论方法是否有异常,总是被执行的。...原创 2022-07-24 12:48:16 · 291 阅读 · 0 评论 -
Spring DI依赖注入
依赖注入我们托管给spring核心容器的类中存在属性,需要Spring在创建该类的实例的时候随便给这个对象的属性赋值,这就是依赖注入。1,对象(spring核心容器中的对象)类型,使用ref属性=对象的id。实际开发中,我们是使用set方法进行有参构造。constructor-arg标签属性。2,简单类型value属性=值。name类的属性名。使用有参构造进行属性注入。百度一下,p命名空间注入。3,数组或者map类型。.........原创 2022-07-23 12:51:00 · 216 阅读 · 0 评论 -
spring ioc核心容器
2,多例模式下对象没有放在核心容器里面,对象自己销毁才销毁(垃圾回收机制,没有变量指向堆内存中的对象时)lazy-init懒加载,什么时候调用方法的时候才创建对象,默认不是懒加载false。id属性对象的唯一标识,根据这个标识可以从核心容器中获取到对象。init-method配置类的对象初始化的时候调用哪个方法。1,当核心容器调用getBean(id)的时候,才会创建对象。2,销毁只有当核心容器被销毁的时候,类的对象才会被销毁。1,核心容器创建的时候,会创建出配置的所有类的对象。......原创 2022-07-22 19:32:48 · 181 阅读 · 0 评论 -
mybatis resultMap标签应用
column属性传入哪个字段提供给select="com.angen.dao.MemberDao.findById"对应的那个sql语句来查询。加上这个属性后,如果我们不用member里面的数据就不会查询member的sql语句。场景两条sql语句,一条sql语句需要另一条sql语句的查询结果的某个值来查询。property表示要映射的pojo类的属性名。ofType对应的属性的类型。select属性映射配置文件的命名空间+对应的id.javaType表示要映射的属性的类型。......原创 2022-07-21 23:19:09 · 804 阅读 · 0 评论 -
java 快速生成javaBean类
代码】java快速生成javaBean类。原创 2022-07-20 17:46:12 · 1155 阅读 · 0 评论 -
mybatis笔记 映射配置文件
在数据变更语句insert,update和delete时,我们想要知道更新的那条语句的对应的字段(一般就是id),我们可以使用selectKey标签。${}是直接拼接进入sql语句,而#{}是以预处理语句?所以#{}可以防止sql注入。${}一定要写在引号里面,#{}一定不能写在引号里面。无论是${}还是${}里面都是写属性名。${}和#{}的区别。............原创 2022-07-20 17:45:19 · 324 阅读 · 0 评论 -
mybatis笔记
每一个接口对应一个映射配置文件,映射配置文件存储路径在resources目录下,并且要和接口的包路径保持一致,映射配置文件名需要和接口名保持一致。直接alt+回车,自动生成映射文件中的标签。idea创建映射配置文件模板,可以快速创建mybatis映射配置文件。快速从代码跳转到mapper及从mapper返回代码。根据数据库注解,生成swaggermodel注解。1,存放路径必须是resources的根路径。MyBatis是一款持久层框架。配置好,并且写好其他代码后执行。2,配置文件的名字,随便写。.....原创 2022-07-20 12:54:59 · 472 阅读 · 0 评论 -
java Lombok使用
通过注解的方式添加getter/setter方法,添加构造器,添加equals等方法。Lombok是java的一个库,能自动插入编辑器并构建工具,简化java开发。//getter,setter,tostring等方法。原创 2022-07-19 17:50:37 · 139 阅读 · 0 评论 -
maven 命令介绍
清除编译过后的target文件,有时候修改文件重启服务器后未生效,可以尝试使用这个命令。只会编译main里面的java代码。将一个项目打包后,安装在本地仓库。生命周期命令Lifecycle。执行所有的单元测试用例。......原创 2022-07-19 12:44:35 · 75 阅读 · 0 评论 -
maven 笔记 安装和集成到idea
工程第一次添加依赖的时候会从远程仓库中下载jar包,将jar包缓存到本地仓库中。等第二次用到相同的jar包时,会直接去本地仓库中查找,查找不到才会去远程仓库下载。项目构建maven提供了一套对项目声明周期管理的标准。依赖管理maven可以对项目的第三方jar进行统一的管理,通过maven定义的jar包的坐标,自动从maven仓库中去下载到工程中。groupId项目组织的唯一标识符,实际对应的java的包的结构。maven是一个构建项目的工具。用maven构建的项目结构十分清晰。.........原创 2022-07-19 00:41:25 · 169 阅读 · 0 评论 -
java和redis jedis包
jedis的连接池叫JedisPool,在创建连接池后我们可以从连接池中获取连接,客户端连接Redis使用的是TCP协议,直连的方式每次需要建立TCP连接,而连接池的方式是可以预先初始化好Jedis连接,所以每次只需要从Jedis连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。如果把配置放在代码里的话耦合度会比较高,所以一般我们把配置放在配置文件中,这样要使用的时候加载配置即可。ZSet有序集合类型。......原创 2022-07-17 23:41:20 · 508 阅读 · 0 评论 -
java cookie和session
session默认在30分钟内如果没有人使用,服务器就会销毁。或者手动调用session对象的invalidate方法,或者服务器异常关闭也会销毁.当调用request.getSession时,会判断是否有一个名为JSESSIONID的cookie。如果没有那么会创建一个session,并且将session的id用cookie方式存到浏览器。1,客户端的会话技术将这一次会话范围之内的信息保存在客户端,这就是cookie。2,服务器端的会话技术将这一次会话信息保存到服务器,这就是session。...原创 2022-07-17 14:05:52 · 238 阅读 · 0 评论 -
java Servlet笔记
Servlet运行在服务端(tomcat)的java程序。是sun公司的一套规范,就是动态资源。Servlet作用用来接收客户端的请求,处理请求,响应给浏览器的动态资源。但Servlet本质就是java代码,通过java的API动态的向客户端传输数据内容。Servlet与普通的java程序的区别:1,必须实现Servlet接口2,必须在servlet容器(tomcat服务器)中运行3,servlet程序可以接收用户请求的参数以及向浏览器输出数据。Servlet接口并不是JDK中的接口,所以我们需要导入jar原创 2022-07-13 19:02:10 · 276 阅读 · 0 评论 -
idea tomcat配置使用
创建一个空项目 第二步第三步 第四步 第五步 应用ok后,你会发现有个红×是因为咱们还没项目,创建项目 创建成功 如果项目没有自动发布,我们回到设置 或者 如果没有,那么自己打包原创 2022-07-13 16:56:21 · 58 阅读 · 0 评论 -
tomcat配置虚拟路径
tomcat配置虚拟路径_wx5d69170475ef2的技术博客_51CTO博客Tomcat服务器配置虚拟路径_(ง'-')ง的博客-CSDN博客_tomcat配置虚拟路径配置虚拟路径的方式有两种,通常我们是在tomcat目录下的conf/server.xml文件标签中进行配置,这种方式相对来讲比较常用,但今天小编为大家讲的是比较方便的第二种配置方式——localhost文件中进行配置。用这种配置方式只需要在...\conf\Catalina路径下的localhost文件中新建一个以工程名命名的xml文件原创 2022-07-13 11:59:20 · 3421 阅读 · 0 评论 -
java 正则表达式笔记
Java 正则表达式 | 菜鸟教程字符类/** * 正则表达式-字符类 * String * public boolean matches(String regex) * 语法: * []表示匹配单个字符 * ^表示取反 * -表示范围 * 案例: * 1,[abc]代表a,b,c三个字符中任意一个字符 * 2,^abc代表除abc以外的任意字符 * 3,[a-z]代表所有小写字母中的任意一个,左右包含关系 * 4,[A-Z]代表所有大写字母中的任意一个,左右包含关系 * 5,[原创 2022-07-12 00:14:02 · 187 阅读 · 0 评论 -
java Base64
/** * 基本型:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标 * public static Encoder getEncoder()编码器 * public static Decoder getDecoder()解码器 * URL型:输出映射到一组支付A-Za-z0-9+_,输出的是URL和文件 * public static Encoder getUrlEncoder() * public static Decoder getUrlDecoder() * MIME型:原创 2022-07-11 16:41:41 · 367 阅读 · 0 评论 -
java 方法引用笔记
方法引用概述:方法引用使用::,方法引用就是用来在一定的情况下,替换Lambda表达式。一段Lambda表达式只是调用一个方法,没有别的操作,就可以用方法引用构造方法引用类名::new静态方法引用类名::方法名成员方法引用:1,对象的成员方法引用,方法带参数对象名::成员方法名2,类的成员方法引用,方法不带参数类名::方法名方法引用一般使用在流中。...原创 2022-07-11 16:29:31 · 83 阅读 · 0 评论 -
java 动态代理笔记
代理模式的定义:被代理者没有能力或者不愿意去完成某件事,那么就需要找别人代替自己去完成某件事,这个别人就是代理者,所以代理模式有三个角色:被代理角色,代理角色,抽象角色(协议)拿一手房东和二手房东打比方,一手房东有想把房子租出去的想法,二手房东也有想把房子租出去的想法。但是一般租客不是很容易找到一手房东。租客找二手房东租房子,并不知道一手房东是谁,二手房东可以在房子里面增加家具啥的,来提高房价。静态代理案例抽象角色(协议)被代理者代理者,这里是静态代理,如果把Fangzi换成接口,那么就可以代理原创 2022-07-11 16:10:11 · 81 阅读 · 0 评论 -
java 反射机制笔记
使用反射操作类的成员的前提条件是:要获得该类的字节码文件对象,就是Class对象。Class对象获取的方式Class类常用方法反射之构造方法/** * 反射之构造方法 * ConStructor类的概述: * 作用:获得到ConStructor对象来创建类的对象 * 可以通过反射获取类的构造方法 * 可以通过反射执行类的构造方法 * 【可以通过反射获取类的构造方法】 * Class对象中,与Constructor有关的方法 * Constructor原创 2022-07-08 16:29:05 · 138 阅读 · 0 评论