- 博客(16)
- 收藏
- 关注
原创 个人总结-数据报表处理
协调产品与业务获取到各个指标产生的数据源。还需注意数据源的数据时效性、准确性与完整性。1、理解需求背景,自我感觉这个只要大体了解一下,做的数据报表的背景,作用,面向用户。先生成中间明细表为后续明细查看、验证时对数、数据导出做铺垫。2、最重要的一步,与业务、产品梳理每一个指标,以及每一个指标计算的逻辑。再通过中间表生成汇总表。这样确保我们的明细与总数能对得上。4、数据展示需要注意性能。
2023-10-31 14:51:14 89
原创 ThreadLocal内存泄漏的研究
ThreadLocal的key是弱引用,但是value与thread之间是强引用,所以线程如果被回收是不会出现内存泄漏的。但是如果采用的线程池,线程有可能一直存在,这样就会导致内存泄漏。线程池里的线程,核心线程正常执行的话,是不会被回收且一直存在的,除非出现异常,线程池会重新创建新线程。首先ThreadLocal之所以会出现内存泄漏主要原因是value没有被gc回收。最大线程被创建后,出现异常或者达到存活的最大时间,线程也会被销毁。
2023-04-10 23:33:33 145
原创 spring bean的生命周期
InitializingBean接口是Spring提供的一个回调接口,用于在Bean初始化完成后执行一些特定的初始化逻辑。实现该接口的类必须实现afterPropertiesSet()方法,并将初始化逻辑放在该方法中。而使用PostConstruct注解时,只需要在方法上添加该注解,不需要实现任何接口或方法。实现InitializingBean需要实现afterPropertiesSet()方法,而使用PostConstruct注解的方法必须满足一定的条件。PostConstruct注解是Java。
2023-04-02 23:24:25 87
原创 springboot启动过程
它主要是通过 ApplicationEventPublisher 接口来发布事件,这些事件可以是 Spring Boot 内置的事件,也可以是自定义事件。通过实现ApplicationContextInitializer接口,可以在应用程序启动期间进行一些基础的配置,以确保应用程序在启动时处于最佳状态。的作用是帮助开发者在应用程序启动时,发布多种类型的事件,以便其他组件可以监听并处理这些事件。2、在应用程序启动后,可以做一些监控或日志记录等操作,例如记录应用程序启动时间等。
2023-04-02 23:05:47 147 1
原创 springboot基础学习
Spring Boot是一个开源的Java框架,它是基于Spring框架的基础上开发的,用于简化Spring应用程序的开发和部署。它提供了一种快速、便捷的方式来创建Spring应用程序,并且可以减少开发人员的配置工作。Spring Boot的主要特点包括自动配置、快速开发、微服务支持和轻量级容器等。它被广泛应用于企业级应用程序、云应用程序、微服务和RESTful Web服务等领域。
2023-04-02 21:43:48 75
原创 tomcat高级
3、如果找到了对应的 Servlet,Web 容器会将请求转发给该 Servlet 进行处理;如果没有找到对应的 Servlet,则会返回 404 错误。4、Servlet 接收到请求后,会根据业务逻辑进行处理,并将处理结果返回给 Web 容器。2、Web 容器接收到请求后,会根据请求的 URL,查找对应的 Servlet。1、用户在浏览器中输入 URL,请求发送到 Tomcat 的 Web 容器。5、Web 容器将处理结果返回给用户的浏览器,完成整个请求响应过程。
2023-04-01 10:00:38 37
原创 tomcat基础学习
Tomcat是一个开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,可以用于运行基于Java的Web应用程序。它是Apache软件基金会的一个项目,可以在各种操作系统上运行,包括Windows、Linux和Mac OS等。Tomcat提供了一个运行环境,使得开发人员可以在Tomcat中开发和测试Web应用程序,并将其部署到生产环境中。
2023-04-01 08:51:51 55
原创 java线程通信
JMM(Java Memory Model)是Java虚拟机规范中定义的一种内存模型,它规定了Java程序中多线程访问共享变量时的行为。JMM线程安全问题是指在多线程环境下,由于JMM的内存模型规定,可能会出现线程安全问题,例如数据竞争、死锁等。wait()方法会使当前线程进入等待状态,直到其他线程调用notify()或notifyAll()方法唤醒它。notify()方法会随机唤醒一个正在等待的线程,而notifyAll()方法会唤醒所有正在等待的线程。这些方法必须在同步块中调用,以确保线程安全。
2023-03-30 22:52:18 48
原创 并发编程3要素
在使用volatile修饰的变量时,需要注意Happens-Before规则。如果一个线程写入了一个volatile变量,那么所有读取这个变量的线程都将看到这个变量的最新值。在编写多线程程序时,需要仔细考虑Happens-Before规则,并遵循相关规则,以确保程序的正确性。在使用Thread.join()方法时,必须使用Happens-Before规则来确保子线程的结果已经被主线程看到。在使用ExecutorService时,必须使用Happens-Before规则来确保线程池中的任务已经被执行完成。
2023-03-29 22:47:12 165
原创 并发编程的缺点
线程调度的目的是确保多个线程之间的公平竞争,避免出现某个线程长时间占用CPU资源导致其他线程无法执行的情况。线程间通信问题:在多线程编程中,线程之间需要进行通信,包括共享变量、消息队列等,这些通信方式可能会带来一定的开销和复杂度。性能问题:多线程编程需要消耗更多的系统资源,包括CPU、内存等,同时线程的调度也会带来一定的开销,可能会降低程序的性能。可能会导致死锁:在多线程编程中,如果线程之间的同步不当,可能会导致死锁问题,这会导致程序停止响应。
2023-03-29 22:05:35 127
原创 mysql事务
了解事务隔离机制(读未提交->读提交->重复读->序列化),我们在用mybatis测试隔离机制时,注意需要将mybatis的一级与二级缓存去掉,确保每次都是读库。更新过程中会阻塞当前读(select加读、写锁,就是当前读)更新过程中不会阻塞快照读(正常的select就是快照读)MVCC最大的好处,读不加锁,读写不冲突。
2023-03-19 21:25:13 49
原创 CompletableFuture详解
CompletableFuture的get()方法是阻塞的,我们一般建议使用future.get(3, TimeUnit.SECONDS)。并且一般建议使用自定义线程池。但是如果线程池拒绝策略是DiscardPolicy或者DiscardOldestPolicy,当线程池饱和时,会直接丢弃任务,不会抛弃异常。因此建议,CompletableFuture线程池策略最好使用AbortPolicy,然后耗时的异步线程,做好线程池隔离哈。
2023-02-23 01:38:08 226
原创 maven settings配置文件详细
3、mirrors里指定的是仓库的代理,通过在mirrorOf里指定要代理的仓库(可以直接指定,也可以用一些匹配符来指定),来代理向远程仓库发起的请求,如果repositories里的仓库id被mirrorOf匹配到了,那么maven向这个仓库发的请求,就被mirrors规则代理到其他URL了。配置优先级从高到低:pom.xml> user settings > global settings。5、激活profile配置 activeProfiles,用来激活配置的profile。
2023-02-18 08:22:42 3375 1
原创 springboot自定义starter
将一些可独立于业务代码之外的功能和配置模块封装成一个个starter,SpringBoot会为我们完成自动装配,这样复用的时候只需要将其在pom中引用依赖即可。原理如果我们需要从 application.yaml 或 application.properties 中拿到一些使用者配置的数据,那么我们就需要定义一个properties类。这个properties类主要作用是将 application.yaml 或 application.properties 中的配置信息映射成实体类。@Data。
2023-02-14 13:31:53 146 1
原创 maven版本
如果是正式发布版本,那么在mvn deploy时会自动发布到正式版本库中,而使用正式版本的模块,在不更改版本号的情况下,编译打包时如果本地已经存在该版本的模块则不会主动去镜像服务器上下载。RELEASE版本是一个稳定的版本号,可以认为RELEASE版本是不可变化的,一旦发布,即永远不会变化。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,会覆盖老的快照版本,而在使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
2023-02-14 13:30:53 613 1
原创 springboot自动装配原理
在spring中的配置类源码分析中,分析过@Import导入的类会当成配置类来解析,并且如果这个配置类是实现了DeferredImportSelector接口,就会调用selectImports方法。在springboot中,当我们引入某个依赖,就可以直接使用依赖里面的类进行自动注入,不需要像ssm框架那样在xml文件中配置各种bean,然后进行关联。条件注解,并且使用SpringFactoriesLoader机制去定位加载它们(并非都是如此,还有其他一些Spring固有的加载方式,比如通过。
2023-02-14 10:22:53 167 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人