自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 【无标题】

SpringMvc的运行流程SpringMvc的运行流程_wei小白的博客-CSDN博客SpringBoot和SpringFramwork的关系SpringBoot和SpringFramwork的关系_wei小白的博客-CSDN博客

2022-05-29 19:20:23 73

原创 SpringBoot和SpringFramwork的关系

1.SpringFramworkSpring通常指的是Spring Framework。通常Java开发就是面向对象开发、面向抽象接口开发。而软件项目大多都是“堆积木”,随着版本迭代会越来越大,这造成了个很大的问题就是对象的管理。刚好Spring的控制反转,依赖注入,切面编程的特性对这些类生命周期的管理,组件模块化,基础层和业务分离解耦提供了很大的便利。就像粘合剂一样把各种功能的库“粘”到一起,让它们协同工作。除了上图中的一些功能特性外,Spring Framework另外有个很少被提及的特点,

2022-05-29 19:12:51 3541

原创 SpringMvc的运行流程

用户发送请求至前端控制器DispatcherServlet; DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle; 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生 成)一并返回给DispatcherServlet; DispatcherServlet 调用 HandlerAdapter处理器适配器; HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);...

2022-05-29 18:48:46 169

原创 【无标题】

ForkJoinPool的理解:ForkJoinPool的理解_wei小白的博客-CSDN博客 CompletableFuture的理解:https://blog.csdn.net/weixin_59714026/article/details/124786599

2022-05-15 19:44:23 95

原创 CompletableFuture的理解

从JDK8开始,在Concurrent包中提供了一个强大的异步编程工具CompletableFuture。在JDK8之前,异步编程可以通过线程池和Future来实现,但功能还不够强大。实例代码:import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;public class CompletableFutureDemo { public st...

2022-05-15 19:40:55 148

原创 ForkJoinPool的理解

ForkJoinPool是JDK7提供的一种“分治算法”的多线程并行计算框架。Fork意为分叉,Join意为合并,一分一合,相互配合,形成分治算法。此外,也可以将ForkJoinPool看作一个单机版的Map/Reduce,多个线程并行计算。相比于ThreadPoolExecutor,ForkJoinPool可以更好地实现计算的负载均衡,提高资源利用率。假设有5个任务,在ThreadPoolExecutor中有五个线程并行执行,其中一个任务的计算量很大...

2022-05-15 19:26:26 1922

原创 手写快速排序

import java.util.Arrays;/** * 快速排序:双边循环法 */public class QuickSort { public static void quickSort(int[] arr, int startIndex, int endIndex){ // 递归结束条件:startIndex大于或等于endIndex时 if (startIndex >= en.

2022-05-08 19:14:21 107

原创 【无标题】

1.Synchronized和ReentrantLock的区别Synchronized和ReentrantLock的区别_wei小白的博客-CSDN博客2.Synchronized底层如何实现?锁升级过程Synchronized底层如何实现?锁升级过程?_wei小白的博客-CSDN博客3.线程池有哪几种?分别什么特点线程池有几种?分别有什么特点_wei小白的博客-CSDN博客4.手写快速排序?多线程快速排序?...

2022-05-08 18:52:16 229

原创 线程池有几种?分别有什么特点

Java通过Executors(jdk1.5并发包)提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行。 newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程

2022-05-08 18:48:36 1367

原创 Synchronized底层如何实现?锁升级过程?

Synchronized底层实现原理Synchronized的语义底层是通过一个monitor(监视器锁)的对象来完成每个对象有一个监视器锁(monitor)。每个Synchronized修饰过的代码当它的monitor被占用时就会处于锁定状态并且尝试获取monitor的所有权,过程:如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者 如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1 如果其他线程

2022-05-08 18:13:44 430

原创 Synchronized和ReentrantLock的区别

synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是两者的本质区别。由于ReentrantLock是类,所以提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量。synchronized早期的实现比较低效,对比ReentrantLock,大多数场景性能都相差较大,但是在Java 6中对synchronized进行了非常多的改进。相同点:两者都是可重入锁可重入锁的概念:自己可以再...

2022-05-08 17:49:37 682

原创 【无标题】

Java内存模型Java内存模型_wei小白的博客-CSDN博客ConcurrentHashMap的put源码分析ConcurrentHashMap的put源码分析_wei小白的博客-CSDN博客

2022-04-23 19:01:32 314

原创 ConcurrentHashMap的put源码分析

JDK1.7首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。在JDK1.7中,ConcurrentHashMap采用Segment + HashEntry的方式进行实现,结构如下:一个 ConcurrentHashMap 里包含一个 Segment 数组。Segment 的结构和HashMap类似,是一种数组和链表结构,一个 Segment 包含一个 HashEntry 数组,...

2022-04-23 18:59:30 86

原创 Java内存模型

内存模型产生背景由于内存与cpu的缓存运算速度有几个数量级的差距,所以如果将运算数据加载到cpu的缓存中运算提高运算速度,然后结束后再从缓存同步回内存之中。可是这样带来了一个问题 缓存一致性。每个处理器核心都有自己的高速缓存,处理变量时会拷贝一份主存中的变量到各自核心的高速缓存中。当各自核心处理任务时。将会导致各自的缓存数据不一致。为此,要制定一些协议,各个核心在读写时要根据协议进行操作,来维护缓存的一致性cpu乱序执行问题​ cpu为了提高运算效率,会对代码进行乱序执行,然后对乱序执行的结

2022-04-23 18:44:59 312

原创 【无标题】

1.有效括号class Solution { public boolean isValid(String s) { Map<Character,Character> map = new HashMap<>(); map.put('{','}'); map.put('(',')'); map.put('[',']'); if(s.length() > 0 && !map.

2022-04-17 18:18:32 78

原创 【无标题】

1.算法题* 两数之和class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0;i<nums.length-1;i++) { for(int j=i+1;j<nums.length;j++) { if(nums[i] + nums[j] == target) { return

2022-04-10 17:44:52 244

原创 创建一个对象的详细过程(JVM相关)

JVM创建对象是主要有5个步骤1.类加载检查每当使用new操作符创建一个对象时,类加载器都会从常量池中寻找该对象的符号引用,如果找到,则根据该引用查询该类是否已被加载,否则进行接下来的类加载操作,在此过程中,类所需内存大小也被确定下来2.分配内存JVM根据在类加载检查中确定的内存大小,在堆中为类开辟一段空间,分配的方式有指针碰撞、空闲列表两种方式,若JVM的垃圾回收器(GC)使用了标记-整理的算法,即有值的内存往左侧移动,使得内存规整,则采用指针碰撞分配。若G...

2022-04-10 17:23:44 1334

原创 判断链表中是否有环

判断链表是否有环public class Solution { public boolean hasCycle(ListNode head) { Set<ListNode> set = new HashSet(); while(head != null) { if(!set.add(head)) { return true; } head = he

2022-04-10 17:11:00 353

原创 两数&三数之和

两数之和class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0;i<nums.length-1;i++) { for(int j=i+1;j<nums.length;j++) { if(nums[i] + nums[j] == target) { return new int[.

2022-04-10 17:04:56 71

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除