Java
文章平均质量分 51
wangjinb
这个作者很懒,什么都没留下…
展开
-
23种设计模式(单例模式)
单例模式多种写法饿汉式顾名思义 饿汉式 不管你有没有调用获取实例的方法 该实例对象依然会被创建,浪费内存空间。饿汉式又有多种写法1、 最常见的写法好处就是用法简单很常见缺点浪费内存空间。public class SingletonTest01 { public static void main(String[] args) { //测试 SingleTon singleTon = SingleTon.getInstance(); Singl原创 2021-07-04 13:41:04 · 146 阅读 · 0 评论 -
mybatis的执行流程
mybatis执行流程1、读取MyBatis的核心配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接、属性、类型别名、类型处理器、插件、环境配置、映射器(mapper.xml)等信息,这个过程中有一个比较重要的部分就是映射文件其实是配在这里的;这个核心配置文件最终会被封装成一个Configuration对象2、加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,映射文件是在mybatis-config.xml中加载;可以加载多个转载 2020-11-15 11:53:42 · 806 阅读 · 0 评论 -
Mybatis的执行流程以及各部分面试题
mybatis转载 2020-11-13 20:57:35 · 203 阅读 · 0 评论 -
可能是最漂亮的Spring事务管理详解
spring事务转载 2020-11-13 09:02:15 · 126 阅读 · 0 评论 -
HashMap的底层实现原理
HashMap的底层实现原理转载 2020-10-13 11:00:26 · 71 阅读 · 0 评论 -
ArrayList 、LinkedList 、Vector 的区别?
ArrayList :作为 List接口的主要实现类 ,动态数组,线程不安全的,但是查询的效率高,底层使用Object [ ] elementDataLinkedList:对于平凡插入 , 删除数据效率较高 底层使用的是双向链表的结构存储Vector :作为 List接口的古老实现类 ,线程是安全的 效率低 ,底层使用Object [ ]elementData( )存储更多的详情看这里...原创 2020-10-07 16:07:02 · 54 阅读 · 0 评论 -
ArrayList源码分析
ArrayList 是我们经常用到的,在jdk1.7中 和 1.8 些许不同jdk1.7情况下ArrayList list = new ArrayList();底层创建了长度为10 的Object[ ] 数组elementData, 当list . add(123) 时 其实是 elementData [0] = new Integer(123);…list.add(11); 如果此次的添加 导致底层的elementData 的数组容量不足时,则会扩容,默认情况下,扩容为原来容量的1.5倍 ,同原创 2020-10-07 15:59:43 · 52 阅读 · 0 评论 -
线程池的拒绝策略,是什么?内置的有哪些特点?
拒绝策略:等待队列已经排满了,再也塞不下新任务了同时,线程池中的max线程也达到了,无法继续为新任务服务。这个是时候我们就需要拒绝策略机制合理的处理这个问题。四种内置的拒绝策略一、AbortPolicy(默认):直接抛出RejectedExecutionException异常阻止系统的正常运行二、CallerRunsPolicy :”调用者运行“ 一种调节机制,该策略既不会抛弃任务也不会抛出异常,而是将某些任务回退到调用者,从而降低新任务的流量三、DiscardOldesPolicy原创 2020-10-04 19:34:34 · 170 阅读 · 0 评论 -
线程池为什么不用Executors创建?或者说,Executors中JDK已经给你提供了为什么不用?
阿里巴巴 开发手册原创 2020-10-04 19:25:30 · 318 阅读 · 0 评论 -
java线程池的运行原理
七大参数介绍点这里1、在创建了线程池后,开始等待请求。2、当调用execute()方法添加一个请求任务时,线程池会做出如下判断:2.1如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个任务;2.2如果正在运行的线程数量大于或等于corePoolSize,那么将这个任务放入队列;2.3如果这个时候队列满了且正在运行的线程数量还小于maximumPoolSize,那么还是要创建非核心线程立刻运行这个任务;2.4如果队列满了且正在运行的线程数量大于原创 2020-10-03 21:02:10 · 146 阅读 · 0 评论 -
ThreadPoolExecutor 线程池的七大参数
源码 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> wo原创 2020-10-03 09:58:41 · 205 阅读 · 0 评论 -
BlokingQueue的实现类ArrayBlockingQueue的api,详解
顾名思义阻塞队列在多线程领域:所谓阻塞,在某些情况下,会挂起(阻塞),一旦满足条件被挂起的线程又会被自动唤醒为什么需要BlockingQueue好处是我们不用关心什么时候需要阻塞线程,什么时候需要被唤醒,因为这一切被BlockingQueue包办介绍:ArrayBlockingQueue:有数组结构构成的有界阻塞队列解析:抛出异常:当阻塞队列满时,再往里面add 插入元素会抛出异常当阻塞队列空时,再往里面remove移除元素会抛出NoSuchElementException特殊原创 2020-10-02 21:29:57 · 404 阅读 · 0 评论 -
ArrayList多线程环境下不安全,该如何解决问题呢???
ArrayList 线程不安全在多线程得环境下,线程会争抢资源,导致java.util.ConcurrentModificationException 并发修改异常解决方法:Vector将ArrayList 替换成为Vector原理:*将指定的元素插入到此Vector的指定位置。将当前在该位置的元素(如果有的话)和任何后继元素右移(将其索引加一)源码: /** * Inserts the specified element at the specified position in原创 2020-09-27 11:39:28 · 320 阅读 · 0 评论 -
Java多线程——线程八锁案例分析
Java多线程——线程八锁案例分析多线程的八个案例通过分析代码,推测打印结果,并运行代码进行验证。1)两个线程调用同一个对象的两个同步方法代码如下:public class Demo { public static void main(String[] args) { Number number = new Number(); new Thread(new Runnable() { @Override pub转载 2020-09-26 23:49:32 · 94 阅读 · 0 评论 -
SimpleDateFormat,有时候上传图片时使用日期作为文件命名,很容易造成图片文件明明存在却有时候访问不到,这是因为SimpleDateFormat 是不同步的
代码实例:public static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd");源码:解决方法:加锁:private final Object mLock = new Object(); synchronized (mLock){ //这里可以将使用到了SimpleDateFormat对象的代码放在这里 format = simpleDateFormat.form原创 2020-08-16 21:08:40 · 122 阅读 · 0 评论 -
idea中构建的web项目感觉没问题部署到tomcat后就是访问不到404
先查看静态资源是否都完整的输出了如果输出不完整需要添加依赖,解决maven静态资源过滤的问题就好。 <!--资源导出--> <build> <resources> <resource> <directory>src/main/java</directory> <includes>原创 2020-08-06 14:35:33 · 554 阅读 · 0 评论 -
如何解决hashset在多线程下不安全?
## 两种反射 推荐使用第二种 效率较高 Set<String> set = Collections.synchronizedSet(new HashSet<>()); Set<String> set = new CopyOnWriteArraySet<>();//写入时复制package unsafe;import java.util.Collections;import java.util.HashSet;import java.原创 2020-07-29 12:16:00 · 867 阅读 · 0 评论 -
如何解决并发下ArrayLIst在并发下不安全的问题?
有三种解决方法 建议使用第三种1、List list = new Verctor<>();1、List list = Collections.synchronizedList(new ArrayList<>());1、List list = new CopyOnWriteArrayList<>();CopyOnWrite 写入时复制 COW 是计算机程序设计的一种优化策略多个线程调用list 读取的时候 固定的写入覆盖,在写入时避免覆盖造成数据问题Co原创 2020-07-29 11:59:44 · 284 阅读 · 0 评论 -
Synchronized和lock锁的区别
第一、Synchronized 是内置的java关键字、Lock是一个java类第二Synchronized 无法判断锁的状态,而Lock可以判断锁的状态第三、Synchronized 会自动释放锁,而lock需要手动 释放锁第四、Synchronized 如果线程1获得锁,阻塞了,线程二会一直等待, 而lock锁不一定会等待下去(tryLock)第五、Synchronized 可重入锁,不可以中断、非公平;Lock 可重入锁、可以判断锁、非公平(可以自己设置);第六、Synchron原创 2020-07-27 10:19:49 · 268 阅读 · 0 评论 -
sentinel持久化规则到nacos
环境配置pom.xml添加依赖 <!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId>原创 2020-07-24 13:45:41 · 1712 阅读 · 1 评论 -
sentinel服务降级
服务降级一共有三种服务降级的方式RT触发时机【注意】当1s内持续5个请求且平均响应时间大于阈值,触发降级当时间窗口期限过了之后关闭降级平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的原创 2020-07-23 11:46:07 · 808 阅读 · 0 评论 -
nacos作为配置中心怎么实现,其实就很优雅
nacos作为配置中心非常的简洁,支持各种格式,动态刷新,就不需要将公共配置写在每一个微服务上了具体操作新建工程改pom <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</a原创 2020-07-22 18:03:33 · 719 阅读 · 0 评论 -
nacos作为服务注册中心,实现服务调用,负载均衡(轮询)的具体操作
新建两个服务提供者(测试)导pom两个服务提供者都要导入<dependencies> <!--alibaba--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifac原创 2020-07-22 17:44:29 · 3632 阅读 · 6 评论 -
java动态代理,难以理解,可以直接将其当成动态代理的工具类使用
动态代理工具类!package test3;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxInvocationHandler implements InvocationHandler{ //被代理的接口 private Object target; //使用set方法生成代理接口 p原创 2020-07-19 21:43:27 · 234 阅读 · 0 评论 -
负载均衡,手写轮询算法,轮询其实就是请求次数%服务总数,然后根据余数,取出服务来提供服务
负载均衡,轮询算法面向接口编程:有接口必有实现:测试:附上代码接口:package com.wwjj.springcloud.lb;import org.springframework.cloud.client.ServiceInstance;import java.util.List;public interface LoadBalancer{ ServiceInstance instance(List<ServiceInstance> instance原创 2020-07-13 17:36:24 · 284 阅读 · 0 评论