自定义博客皮肤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)
  • 收藏
  • 关注

原创 关于Spring Boot与Vue时间类型的传递设置

@JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date empBirthday;@DateTimeFormat(pattern = “yyyy-MM-dd”)将前端传回的“yyyy-MM-dd”格式的字符串变为时间类型@JsonFormat(pattern = “yyyy-MM-dd”)将后台传入的时间类型的数据在前端页面中,以“yyyy-MM-dd”格式的字符串进行显示.

2021-03-22 10:55:07 550 1

原创 SpringCloud Gateway启动报错Parameter 0 of method loadBalancerWebClientBuilderBeanPostProcessor in

报错内容为Parameter 0 of method loadBalancerWebClientBuilderBeanPostProcessor in org.springframework.cloud.client.loadbalancer.reactive.LoadBalancerBeanPostProcessorAutoConfiguration required a bean of type ‘org.springframework.cloud.client.loadbalancer.reactiv

2021-03-11 19:17:38 4641 9

原创 线程池的工作原理

首先, 当有一个新的任务加入到线程池的任务队列中时, 线程池会先判断当前线程数是否小于核心线程数, 如果小于, 这线程池会创建一个新的线程​ 如果当前线程数大于或等于核心线程数, 则会将这个新的任务加入到阻塞队列中​ 这时如果任务的不断加入导致阻塞队列满了, 则线程池又会创建一个新的临时线程, 处理阻塞队列中的任务​ 如果处理完阻塞队列中的任务, 临时线程等待的时间超过空闲线程的存活时间, 线程池就会销毁临时线程​ 如果新的任务进来, 创建的临时线程加上核心线程数达到最大线程数, 而这时阻塞队列又是

2020-11-08 19:34:09 174

原创 关于数据库的事物

事务的特性原子性: 事务是最小的单位, 不可以在分割一致性: 一个事务中的SQL语句, 必须全部成功或者全部失败隔离型: 两个事务具有隔离型持久性: 事物一旦结束(commit, rollback), 不可在返回事物隔离级别读未提交: 一个事物读到了另一个事物中还未提交的数据, 事物可能会回滚, 如果事物回滚, 则读到了没有提交的数据, 也就是脏读读提交(oracle的默认隔离级别): 不允许读取未提交的数据, 只允许读取已提交的数据, 解决了脏读的问题可重复读(mysql的默认隔离

2020-11-08 18:54:35 140

原创 常见的负载均衡策略

1、轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。2、权重 weight: 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。3、ip绑定: 如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。4、fair(第三方插件)按后端服务器的响应时间来分配请求,响应时间短的优先分配。5、url_hash(第三方插件)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后

2020-11-08 18:52:14 1858

原创 关于RabbitMQ的工作模式

首先了解RabbitMQ的一些名词Broker: 简单来说就是消息队列服务器实体Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列Queue: 消息队列载体,每个消息都会被投入到一个或多个队列Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来Routing Key: 路由关键字,exchange根据这个关键字进行消息投递VHost: vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的

2020-11-08 18:50:23 142

原创 IDEA报错Process finished with exit code -1073741819 (0xC0000005)

最无语的情况, 金山词霸, 有人说是开启了自动划译功能, 个人没有深究是哪个原因, 在下建议直接卸载, 省的有那么多幺蛾子

2020-10-22 23:53:38 379

原创 UDP与TCP

TCP: 一种面向连接的, 可靠的基于字节流的传输层协议特点: 点对点通信, 可靠性高, 但是占用系统资源多, 效率低UDP: 一种无连接的传输层协议, 面向事务的简单不可靠信息传递服务特点: 传输不可靠, 可能丢失, 但是可以广播发送, 且开销小TCP的发送端在将报文发送给接收端时, 接收端需要发送确认包给发送端, 如果发送端没有接收到确认包, 或者接收端根本就没有接收到报文, 则发送端会超时重发一个新的报文给接收端虽然UDP开销小, 但使用UDP并不是为了提高吞吐量, 而是为了解决延迟问题,

2020-10-21 23:53:16 241

原创 jvm结构

java堆中的区域:新生代: Eden区, 用于存放新创建的对象,​ from区, 用于存放经历过一次及以上垃圾回收, 但年龄没有达到老年代的对象,​ to区, 用于存放复制Eden区中需要存活的对象, 如果放不下, 则会放入老年代中老年代: 用于存放新生代中年龄达到要求的对象元空间: metaspace也就是之前的永久代, 用来存放虚拟机加载后的类信息, 常量池, 静态变量, 即时编译后的代码java虚拟机栈: 用于存放java方法执行时的局部变量本地方法栈: 与java虚拟机栈类.

2020-10-13 11:03:14 108

原创 GC算法

判定方法:引用计数: 存储对特定对象的所有引用数, 回收引用计数为0的对象, 缺点是无法解决循环计数的问题(A 引用 B,B 引用 A)引用链法: 通过一组 GC ROOT的对象作为起始点, 一个对象与GC ROOT没有引用链相连, 则说明对象可回收可以作为GC ROOT的对象: java虚拟机栈中引用的对象, 本地方法栈中引用的对象, 方法区中静态属性引用的变量, 方法区中常量引用的变量回收方法:复制: 用于新生代, 将Eden区和from区中幸存的对象年龄加1, 如果年龄达到老年代要求, 则直

2020-10-12 14:09:43 362

原创 Spring IOC

IOC与DI: 在传统开发模式中, java对象(调用者)调用另一个对象(被依赖对象), 通常会使用"new"和工厂模式来获取被依赖对象, 调用者需要主动去获取被依赖对象的实例, 而在spring模式下, 调用者无需主动获取实例, 只需要被动的等待spring来为调用者注入被依赖对象即可, 这种从主动获取到被动接受的过程, 就被称为IOC(控制反转); 对于spring来说, 就是通过spring容器将被依赖对象注入给调用者, 这就被称为DI(依赖注入), IOC与DI只是同一种行为的不同名称而已...

2020-10-12 14:08:13 93

原创 SpringMvc执行流程

1)客户端发送请求到 DispatcherServlet2)DispatcherServlet 查询 handlerMapping 找到处理请求的 Controller3)Controller 调用业务逻辑后,返回 ModelAndView4)DispatcherServlet 查询 ModelAndView,找到指定视图5)视图将结果返回到客户端4、SpringMVC 流程?答:1)用户发送请求至前端控制器 DispatcherServlet。2)DispatcherServlet 收到.

2020-10-12 14:07:41 115

原创 缓存穿透、缓存击穿、缓存雪崩及其解决方案

缓存穿透:指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将 导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。解决方案:1.查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短;2.布 隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据 会被这个 bitmap 拦截掉,从而避免了对 DB 的查询。缓存击穿:对于设置了过期时间的 key,缓存在某个时间点过期的时候,恰好这时间点对 这个 Key 有大量的并发请求过来,

2020-10-08 16:37:20 92

原创 java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id “null“

springboot整合spring Security, 产生错误加上下面的配置代码就行@Configurationpublic class MyPasswordEncoder implements PasswordEncoder { @Override public String encode(CharSequence charSequence) { return charSequence.toString(); } @Override pu

2020-10-07 23:41:38 110

原创 创建线程池

newFixedThreadPool:使用LinkedBlockingQueue实现,定长线程池。public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS,

2020-10-07 15:22:34 78

原创 集合类线程不安全问题

(1)使用Vector(ArrayList所有方法加synchronized,太重)。(2)使用Collections.synchronizedList()转换成线程安全类。Collection<Object> objects = Collections.synchronizedList(new ArrayList<>());Set<String> stringSet = Collections.synchronizedSet(new HashSet<Stri

2020-10-07 15:18:24 71

原创 java中的各种锁

公平锁: 是指多个线程获取锁时, 按照申请锁的顺序来获取锁非公平锁: 多个线程获取锁时并不是按照顺序来获取, 有可能后申请的线程会直接尝试获取锁, 这一定程度上会优化性能, 但可能会造成优先级翻转和饥饿现象可重入锁: 外层函数获得锁后, 内层函数仍能获取锁; 也就是说同一个线程在外层函数获取锁的时候, 进入内层函数会自动获取锁自旋锁: 尝试获取锁失败的线程不会立即进入阻塞, 而是会采用循环的方式不对尝试获取锁, 好处是减少了上下文切换的消耗, 缺点是循环会消耗cpu读写锁: 允许多个线程同时读一个资

2020-10-07 15:16:43 79

原创 map的遍历方式

(1) keySet()遍历for (String key : map.keySet()) {System.out.println(key + " :" + map.get(key));}(2)entrySet()遍历 for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey() + " :" + entry.getValue()); }(

2020-10-07 15:14:54 333

原创 docker容器

#docker容器#docker容器让服务开机自启动命令docker update --restart=always

2020-10-06 14:45:07 64

空空如也

空空如也

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

TA关注的人

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