![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 70
慢慢编程
分享编程路上的技巧和心得,慢慢和你共同进步。
展开
-
解决没有主清单属性
需要添加大包配置 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.5原创 2021-08-02 13:37:43 · 307 阅读 · 0 评论 -
耗时三天,终于弄清 spring bean 的生命周期
背景spring 使用了 IOC(控制反转)模型,让对象存储在 spring 容器中,每当我们要使用对象时,就可以通过依赖注入的方式从容器中获取 bean 对象。由于 bean 对象是交给容器来管理,故有了生命周期的概念。这个生命周期不仅有容器的生命周期,还有 bean 对象的生命周期。spring 的容器spring 的容器有 BeanFactory(bean 工厂)和 ApplicationContext (应用上下文)两个容器。区别:beanfactory 只提供了基础的 bean 存储原创 2021-05-09 16:14:29 · 147 阅读 · 0 评论 -
Springboot 实现微信登录
微信登录OAuth21. OAuth2 提出的背景照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源。2. OAuth2 解决方案:按照一定规则生成字符串,字符串包含用户信息。OAuth2 的误解:OAuth 并没有支持 HTTP 以外的协议。OAuth 并不是一个认证协议。OAuth 并没有定义授权处理机制。OAuth 并没有定义 token 格式。OAuth2 并没有定义加密方式。OAuth2 并不是单个协议。OAuth2 仅是授权框架,仅用于授权代理。原创 2021-03-29 23:09:11 · 268 阅读 · 0 评论 -
springboot 操作 Excel
如果通过 Java 读取 Excel?如何写入 Excel?本篇将介绍一个操作 Excel 的适用工具包 – 阿里的 EasyExcel。1. 搭建 maven 环境2. 导入依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.7</version></原创 2021-03-29 23:02:42 · 550 阅读 · 0 评论 -
如何理解线程池
池化技术程序运行的本质是占用系统的资源。在多线程的环境下,每次创建和释放线程都十分的消耗资源。如果我们使用一个容器来管理线程,让线程空闲时不释放,而是放到容器里,需要使用到线程时不用去创建,而是从容器中拿去,这样就大大减少了资源的消耗。这就是池化技术的概念。池化技术应用非常广泛,常见的还有:jdbc 连接池,内存池,对象池,常量池……池化技术的好处:降低资源的消耗提高响应的速度(没有创建和销毁过程)方便管理。(线程复用,控制最大并发数,管理线程使用)池化技术的容器池化技术的容器一般都选原创 2021-03-29 22:40:07 · 125 阅读 · 0 评论 -
常用的并发工具类
在 JDK1.5 后,推出了几个并发的工具类,位于 JUC(java.util.concurrent)包下。CountDownLatchCountDownLatch 类是使一个线程等待其他线程各自执行完毕后再执行。类似于现实中某个活动需要等到全部人齐了才可以开始。实现原理:基于 AQS 的共享模式。从ReentrantLock的实现看AQS的原理及应用这个类是一个同步计数器,主要用于线程间的控制。当 CountDownLatch 的 count 计数 > 0 时,本线程的 awa原创 2021-03-23 23:17:34 · 258 阅读 · 0 评论 -
Happens-before 规则
指令重排程序进行编译阶段都会对代码进行优化(即进行重排)来提高运行效率。指令重排会在不该变单线程程序予以的前提下,重新安排语句的指向顺序。例如 singletion = new Singletion(); 这句话的执行顺序为:分配内存初始化对象指向内存空间但在指令重排后可能为:分配内存对象指向内存空间初始化在并发情况下,指令重排会导致一个线程还没初始化或部分初始化就被另一个线程拿到,这是得到的值为空或错误。所以在并发执行的情况下,指令重排会发生二义性,即按照不同的执行逻辑,会得原创 2021-03-22 23:01:42 · 296 阅读 · 0 评论 -
Java 的锁机制
Java 的锁Java 中的锁有三类,一种是关键字 Synchronized,一种是对象 lock,还有一种 volatile 关键字。Synchronized 用于代码块或方法中,他能是一段代码处于同步执行。lock 跟 synchronized 类似,但需要自行加锁和释放锁。必须要手动释放锁,不然会造成死锁。lock 比 synchronized 更有优势,因为他比 synchronized 多了嗅探锁定,多路分支通知,判断锁的状态等功能。嗅探锁定:lock 可以使用 tryLock()原创 2021-03-21 17:02:03 · 343 阅读 · 0 评论 -
师兄:说说你理解的 Token
前言在学 Javaweb 的时候,我们就一直被强调 javaweb 中有四大作用域:pageContext域,request域,session域和 application域。pageContext域里的变量只能在当前页面使用。request域中对象的有效范围是当前的请求范围。session域中对象的有效范围是当前的会话范围。application域中对象的有效范围是整个应用活跃的方位。了解基本概念后,综上我们可以得出若要进行网络通信,我们一般都要使用到 request 和 session。由原创 2021-01-14 20:12:07 · 476 阅读 · 1 评论 -
使用 SpringMVC 搭建 REST 风格请求及解决出现的问题
REST 概述REST (Representational State Transfer)即表述性状态传递。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。在三种主流的 web 服务实现方案中,因为 REST 模式的 web 服务于复杂的 SOAP 和 XML-RPC 对比来讲明显的更加简洁。资源(Resources):网络的一个实体,或者说是网络上的一个具体信息。它可以是一段文本,一张图片,一首歌曲,一种服务,总之就是一个具体的存在。可以用一个 URI 执行它,每种资源原创 2020-11-17 15:33:58 · 233 阅读 · 0 评论 -
说说 Spring-AOP 的实现
概述OOP 和 AOP 的比较OOP:面向对象编程,允许开发者定义纵向的关系,但并不适用于定义横向的关系,导致了大量代码的重复,不利于各个模块的重用。AOP:面向切面编程,作为面向对象的一种补充,用于将那些于业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块名为“切面”。这种模式减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性,可用于权限认证,日志,事务处理等。AOP 的底层实现AOP 实现的关键在于代理模式,AOP 主要分为静态代理原创 2020-11-08 17:20:12 · 231 阅读 · 0 评论 -
SpringMVC执行流程(与代码映照)
概述SpringMVC 是一种轻量级的,基于 MVC 的 web 层应用框架。偏前端而不是基于业务逻辑层。是 Spring 框架的一个后续产品。特点有清晰的角色划分:中央调度器(DispatcherServlet):作为前端控制器,整个流程的控制中心,控制其它组件执行,同一调度。处理器映射器(HandlerMapping):负责根据用户请求的 url 找到 Handler 处理器(Handler 是执行一个特定功能的函数)。处理器适配器(HandlerAdapter):执行处理器。视图解析器原创 2020-11-07 18:55:23 · 164 阅读 · 0 评论 -
理解红黑树
红黑树介绍红黑树是二叉排序树的一种,二叉排序树即:左节点 < 根节点 < 有节点。二叉排序树有利于查找,但当一颗二叉排序树按照大小顺序插入生成时,即每次插入的数据都比原树的所有数据大,则此时整棵都没有左节点,只有有节点,类似于链表。这时的查找效率变成了 O(n)。为了能保证二叉树的查询效率,我们引进了平衡二叉树。平衡二叉树的特点是左右结点相差的高度做多为一。 这时的二叉树查找效率为 log2 (n)。但每次插入数据时,二叉树都要进行一系列的操作,使整棵树达到平衡,效率极为低下,所以我们有引原创 2020-09-03 23:19:19 · 343 阅读 · 0 评论 -
Java 字符串详解
Java 字符串jiava 字符串分为三种类型:String,StringBuffer, StringBuilder。接下来我们来看看这三者的区别。String 类1. 创建 String 对象的两种方式:String 初始时默认为空字符序列。方式一:String str1 = new String("abc");方式二:String str2 = "abc";方式一先在堆内存中创建字符串常量 “abc”,然后再新创建 String 对象,对象里的内容为字符串常量 “abc” 的地址。原创 2020-08-26 17:37:08 · 242 阅读 · 0 评论 -
ArrayList 竟然比 LinkedList 省空间!!!
ArrayList 和 LinkedList 空间大小我们可以从两个方面进行对比:每个单元所占空间大小整体所占空间大小1. 每个单元所占空间大小众所周知,ArrayList 的数据底层是数组,而 LinkedList 的数据底层是双向链表。数组每个单元只有一个元素值,无其他,而双向链表每个单元除了元素值还有两个结点存储上一和下一单元。所以 ArrayList 比 LinkedList 省空间。2. 整体所占空间大小ArrayList:从源码可知,arrayList 初始时的数组容量为 0,原创 2020-08-24 23:46:07 · 342 阅读 · 0 评论 -
java集合详解
1. java 集合集合就是一个容器,可以容纳其他类型的数据。集合之间不能存储基本数据类型,也不能之间存储 java 对象,集合当中存在的是内存地址。list.add(100); // 自动装箱 (Integer)集合也是一个对象,也有内存地址。在 java 中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素,等于将数据放到了不同的数据结构当中。(使用不同的集合等同于使用不同的数据结构)java 集合分为两大类(都是接口):Collection,Map 接口。2. C原创 2020-07-24 10:28:51 · 275 阅读 · 0 评论