![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 74
一杯星巴克的生活
人生如程序,不是选择就是循环。
展开
-
【无标题】
线程池多线程任务线程池配置类自定义线程工厂(根据需要重新)并行线程任务对象具体任务task(可以定义多个)并行线程处理抽象类多线程任务处理执行任务线程池配置类@Slf4j@Configurationpublic class ExecutorServiceConfig { //IO密集型任务 : 一般为2*CPU核心数 private Integer corePoolSize = 3; private Integer maximumPoolSize = 5; priva原创 2021-12-21 15:00:02 · 294 阅读 · 0 评论 -
必会的排序算法及代码实现
插入排序(增量策略):算法复杂度为O(n^2)插入排序的核心在于,它把一个无序数列看成两个数列,假如第一个元素构成了第一个数列,那么余下的元素构成了第二个数列,很显然,第一个数列是有序的,那么我们把第二个数列的第一个元素拿出来从右向左依次和第一个数列的数比较,遇到比自己大的就交换,比自己小的就插入到第一个数列,使它依然构成一个有序数列,直到第二个数列中的所有元素全部插入到第一个数列,这时候就排好序了。lst=[5,7,1,3,6,2,4]def insertSort(arr): for原创 2021-07-22 14:15:14 · 189 阅读 · 0 评论 -
Spring事件机制
spring事件机制原创 2021-03-12 23:22:08 · 91 阅读 · 0 评论 -
彻底理解深拷贝和浅拷贝
在 Java 中,除了基本数据类型(元类型)之外,还存在 类的实例对象 这个引用数据类型。而一般使用 【= 】号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于引用数据类型而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。而浅拷贝和深拷贝就是在这个基础之上做的区分:浅拷贝:拷贝基本数据类型,直接复制一份给新对象,而对于引用数据类型,只是进行了引用的传递,即只复制对象的引用给新对象。两个引用仍然指向同一个对象,在内存中占用同一块内存。则认为是浅拷原创 2021-03-12 12:04:07 · 171 阅读 · 0 评论 -
谈一谈Synchronized底层原理
Synchronized底层原理sync锁的是什么?它是怎么就把对象给锁上了?是不是也应该有个变量来控制呢?上锁就是改变对象的对象头java对象头是实现synchronized的锁对象的基础,synchronized使用的锁对象是存储在Java对象头里的。那么问题来了。对象头又是什么鬼?什么是对象头?这就要知道java的对象布局,换句话说就是java对象由什么组成。在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。1、对象头 ------(大小固定)2、实例数据原创 2021-03-07 17:06:07 · 243 阅读 · 0 评论 -
SpringMVC处理请求的执行流程
先记住几个概念:前端控制器 DipatcherServlet处理器映射器 HandlerMapping处理器执执行链 HandlerExecutionChain处理器适配器 HandlerAdapter视图解析器 ViewResolver执行流程:1、客户端请求到前端控制器(DispatcherServlet)前端控制器是整个请求响应的控制中心,组件的调用由它统一调度。2、前端控制器调用处理器映射器(HandlerMapping)从而获知,该请求该由哪个Controller来处理(并未调原创 2021-03-05 18:57:44 · 250 阅读 · 0 评论 -
ConcurrentHashMap经典面试-灵魂拷问
你问到了ConcurrentHashMap,我偏要ConcurrentHashMap和HashTable一起跟你讲,还要用最骚气的方式告诉你。正文一个婀娜多姿,穿着衬衣的小姐姐,拿着一个精致的小笔记本,径直走过来坐在我的面前。就在我口水要都要流出来的时候,小姐姐的话语打断了我的YY。喂小鬼,你养我啊! 呸呸呸,说错了,上次的HashMap回答得不错,最后因为天色太晚了面试草草收场,这次可得好好安排你。诶,面试官上次是在抱歉,因为公司双十二要值班,实在是没办法,不过这次不会了,我推掉了所有的事情准转载 2021-03-04 18:07:00 · 434 阅读 · 1 评论 -
Condition.await()、LockSupport.park()、Object.wait()、Thread.sleep()之间的区别
Thread.sleep()和Object.wait()的区别首先,我们先来看看Thread.sleep()和Object.wait()的区别,这是一个烂大街的题目了,大家应该都能说上来两点。(1)Thread.sleep()不会释放占有的锁,Object.wait()会释放占有的锁;(2)Thread.sleep()必须传入时间,Object.wait()可传可不传,不传表示一直阻塞下去;(3)Thread.sleep()到时间了会自动唤醒,然后继续执行;(4)Object.wait()不带时间转载 2021-02-25 21:09:43 · 775 阅读 · 0 评论 -
Java之JVM
JVMJava语言可能不是最强大的语言,但是JVM一定是最强大的虚拟机。文章目录JVM一、JVM概述什么是JVM?JVM的生命周期JVM发展历程二、类加载子系统类加载子系统的作用类加载子系统功能细分加载过程一、加载加载过程二、链接(验证、准备、解析)加载过程三、初始化阶段(执行类构造器方法 clinit() 的过程)类加载器的分类ClassLoader的常用方法及获取方法双亲委派机制(先委托父类去加载,父类不加载,再自己去尝试加载)双亲委派机制工作原理双亲委派机制的优势三、运行时数据区运行时数据区划分原创 2021-01-07 10:09:42 · 775 阅读 · 0 评论 -
Java集合
集合集合概念对象的容器,实现了对对象常用的操作,类似数组功能。集合和数组的区别:数组长度固定,集合长度不固定数组可以存储基本数据类型和引用类型,集合不能直接存储基本数据类型另外集合也不能直接存储java对象(换句话按说,集合只能存储引用类型)。位置都在 java.util包里。java中集合分为两大类一类是单个方式存储元素,这一类集合中超级父接口:java.util.Collection一类是以键值对的方式存储元素,这一类集合中超级父接口:java.util.MapCollecti原创 2021-01-07 00:25:45 · 123 阅读 · 0 评论 -
spring事务传播机制及失效场景
spring 事务传播机制&失效场景spring事务传播机制spring七中事务传播机制REQUIRED (默认)(TransactionDefinition.PROPAGATION_REQUIRED)支持当前事务,如果有事务就加入到当前事务,没有则会创建一个新的事务。SUPPORTS (TransactionDefinition.PROPAGATION_SUPPORTS)支持当前事务,如果有事务就加入到当前事务,如果没有事务的话,以非事务的方式执行。MAND原创 2021-01-07 00:14:47 · 1486 阅读 · 0 评论 -
Java多线程之JUC
JUC文章目录JUC1、什么是JUC?1.1、进程和线程1.2、并发&并行1.3、wait和sleep的区别2、锁(*重点)2.1、synchronized和Lock的区别2.2、生产者&消费者问题2.3、那么锁是什么?如何判断锁的是谁?(8锁现象)3、集合类不安全4、Callable接口5、常用的辅助类(必会)5.1、CountDownLatch(减法计数器)5.2、CyclicBarrier(加法计数器)5.3、semaphore(信号量)6、读写锁(共享锁,排他锁)7、阻塞队列7.1原创 2021-01-07 00:12:42 · 735 阅读 · 1 评论 -
Java多线程
什么是进程?什么是线程?它们之间有什么关系?进程是一个应用程序。进程是系统进行资源分配和调度的一个独立单位,最小的资源管理单位。线程是一个进程中的执行单元/执行场景。线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,最小的 CPU 执行单元。一个进程可以启动多个线程。进程与进程之间内存独立不共享。线程与线程之间可能就会存在资源共享,在java中是堆内存和方法区内存共享,栈内存不共享,栈内存独立,一个线程一个栈。假设启动10个线程,会有10个栈空间,每个栈原创 2021-01-06 23:49:27 · 118 阅读 · 0 评论 -
判断字符串是否为空的一个小细节
判断字符串为空时,一定要考虑预防空指针异常判断字符串为空的方法str == null;"".equals(str);str.length <= 0;str.isEmpty();Object.nonNull(str)说明:1、null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。2、"" 表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。3、null不是对象,"" 是对象,所以null没有分配空间,"" 分配了空间。例如:Stri原创 2020-12-28 13:25:27 · 487 阅读 · 1 评论 -
Spring Boot整合Shiro实现认证与授权
Shrio中的Subject对象调用login()后发生了什么?执行该方法时,会自动执行我们定义的UserRealm里doGetAuthenticationInfo方法认证逻辑代码!为什么?通过查看源码 它底层最终会调用到DefaultWebSecurityManager的login()方法,而DefaultWebSecurityManager关联了Realm类且该方法内使用了AuthenticationInfo对象作为参数传给了。故会执行Realm里的认证逻辑。我们自定义了一个Realm类(User原创 2020-12-10 17:29:58 · 352 阅读 · 0 评论 -
@RequestBody和@RequestParam的区别与用法
https://blog.csdn.net/justry_deng/article/details/80972817原创 2020-12-10 13:04:56 · 7339 阅读 · 0 评论 -
Java实现栈
Java基于数组实现栈:/** * Java基于数组实现栈 */public class MyStack<T> { //定义一个数组 private Object[] stack; //模拟栈针 private int needle; //初始化栈 MyStack(){ stack = new Object[10];//初始化容量是10 } //取栈顶元素 public T peek(){原创 2020-11-25 13:36:10 · 94 阅读 · 0 评论 -
Spring梳理与总结
Spring文章目录SpringDay1: 框架概述和基于XML的IOC配置1.Spring概述1.1、什么是Spring?1.2、Spring的两大核心(面试常问)1.3、Spring的发展历程和优势1.4、Spring体系结构2、程序的耦合及解耦2.1、曾经案例中问题2.2、工厂模式解耦3、IOC概念和spring中的IoC3.1、spring中基于XML的IOC环境搭建3.2、IOC中bean标签和管理对象的细节Day1: 框架概述和基于XML的IOC配置1.Spring概述1.1、什么是Sp原创 2020-11-24 18:47:53 · 325 阅读 · 0 评论 -
Mybatis中 #{} 和 ${}的区别
Mybatis中 #{} 和 ${}的区别动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。经常碰到这样的面试题目:#{}和${}的区别是什么?网上的答案是:#{}是预编译处理,$ {}就是简单的字符串替换。mybatis在处理#{}时,会将sql中的#{}替换为 ? 号,调用PreparedStatement的s原创 2020-10-09 10:34:04 · 171 阅读 · 1 评论 -
给定两个日期 计算两个日期间的工作日天数。
题目:给定两个日期,计算两个日期间的工作日天数。示例:输入:2020,9,25,2020,9,28输出:2import java.text.SimpleDateFormat;import java.util.Calendar;public class Solution { public int getDutyDays(int y1,int m1,int d1,int y2,int m2,int d2) { String strStartDate = St原创 2020-10-08 21:38:05 · 532 阅读 · 0 评论 -
深入理解Java多线程volatile关键字
volatile关键字虽然从字面上理解起来比较简单,但是要想用好,不非一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。目录一、内存模型的相关概念二、并发编程中的三个概念1、原子性2、可见性3、有序性三级目录三、JAVA内存模型四、深入剖析volatile关键字五、volatile的使用场景一、内存模型的相关概念转载 2020-08-13 11:29:55 · 193 阅读 · 0 评论 -
字符流和字节路之间的桥梁
Java I/O操作字节流字符流//读取流的操作BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));//写入流的操作PrintWriter pw = new PrintWriter(new BufferedWriter(newOutputStreamWriter(socket.getOutputStream(),"UTF-8")));原创 2020-07-16 23:13:45 · 122 阅读 · 0 评论 -
JAVA中 Scanner 的 hasNext()方法使用中常遇到的问题
当我们在使用 Scanner 的 hasNext()方法时常会遇到回车后,无法终止输入状态的情况。原创 2019-11-19 23:02:03 · 3262 阅读 · 0 评论 -
JAVA数据类型转换
@TOCJAVA数据类型转换JAVA数据类型转换查看数据数据类型类名.class()对象名/变量名.getClass().getName()变量名 instanceof 类型 返回是boolean型。如:int i ;if(i instanceof int){//判断为true System.out.println("true")}System.out.println(i.g...原创 2019-11-19 16:57:33 · 150 阅读 · 0 评论