- 博客(20)
- 收藏
- 关注
原创 面试题: 说说ArrayList的默认长度?扩容机制?
默认长度: 0(网上很多八股文说是10,其实这样说是不对的,下面我会详细说明)。扩容机制: 新的数组长度 = 原数组长度 + (原数组长度>>1 ), 也就是原数组的1.5倍。
2022-10-28 11:09:31
1743
原创 缓存穿透,缓存雪崩,缓存击穿问题以及解决方案
1.缓存穿透问题一般情况下,前端发request请求数据的流程是这样的。前端携带key发送请求,请求数据。服务收到请求,先去cache层里查,然后有两种情况。2.1 缓存命中,取出数据。2.2 缓存未命中,去storage储存层拿数据,然后存入cache中拿到数据,响应给客户端一般情况下,这种解决方案是可行的,但是,如果查找的是一个储存层也没有的数据,这样缓存层就永远都没有数据,请求就全都会去查找我们的数据库。假设有人利用这个漏洞,恶意攻击我们的服务器,发送大量的携带着无效key的请求,
2021-02-03 18:19:32
303
2
原创 基于SpringBoot自定义第三方starter
经过上篇文章了解了spring自动配置的原理后,我们可以自定义第三方starter,在pom文件中引入依赖就自动注入到IOC容器中.主要分为以下几步:1.创建自动配置工程与起步工程,2.在自动配置工程中创建配置类与要注入的类package com.hy.config;import com.hy.data.User;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import o
2021-01-26 23:37:01
381
原创 springboot自动配置原理
1.在spring-boot中,只要我们引入了相关的启动类,就会自动注入到spring的ioc容器中,那么它是怎么实现的呢?首先,先讲讲@Condition这个注解,Conditional 是在spring4.0 增加的条件注解,当你注册bean时,可以对这个bean添加一定的自定义条件,当满足这个条件时,注册这个bean,否则不注册。在springboot的配置类中,使用了这个注解,下面我照着源码讲。springboot整合了很多类的配置,下面我讲讲其中的redis的自动配置原理,打开这个配置
2021-01-25 16:08:28
135
原创 简单实现自定义IOC(控制反转)
IOC(inversion of control)的中文解释是“控制反转”,对象的使用者不是创建者. 作用是将对象的创建 反转给spring框架来创建和管理。控制反转怎么去理解呢。 其实它反转的是什么呢,是对象的创建工作。 举个例子:平常我们在servlet或者service里面创建对象,都是使用new 的方式来直接创建对象,现在有了spring之后,我们就再也不new对象了,而是把对象创建的工作交给spring容器去维护。我们只需要问spring容器要对象即可。IOC 的作用:削减计算机程序的耦合(解
2021-01-23 19:35:31
302
2
原创 线程状态以及线程状态的切换
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,有几种状态呢?在API中Java.lang.Thread.State这个枚举中给出了六种线程状态: /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread.
2021-01-17 17:10:51
69
原创 springmvc自定义异常处理
自定义异常类目的: 统一的管理异常, 方便统一管理错误提示语业务异常:自定异常:业务异常,程序来抛出public class BusinessException extends RuntimeException{ // 提示信息 public BusinessException(String message){ super(message); }}系统异常自定异常:系统异常public class SysException extends Runtim
2021-01-16 16:25:28
121
原创 Freemarker页面静态化技术
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。页面静态化技术:页面静态化其实就是将原来的动态网页(例如通过ajax请求动态获取数据库中的数据并展示的网页)改为通过静态化技术生成的静态网页,这样用户在访问网页时,服务器直接给用户响应静态html页面,没有了动态查询数据库的过程。什么时候用:当某些页面需要经常被访问,但
2021-01-13 16:57:31
135
原创 Freemarker指令
assign指令assign指令用于在页面上定义一个变量(1)定义简单类型<#assign linkman="张先生">联系人:${linkman}(2)定义对象类型<#assign info={"mobile":"13812345678",'address':'深圳'} >电话:${info.mobile} 地址:${info.address}<html><head> <meta charset="utf-8"> &l
2021-01-13 16:55:24
122
原创 spring整合定时任务组件Quartz
Quartz是Job scheduling(任务调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务,每个定时任务可以单独指定执行的时间,例如每隔1小时执行一次、每个月第一天上午10点执行一次、每个月最后一天下午5点执行一次等。什么:是一个做后台任务调度的开源框架作用:定时后台任务开发什么时候用:需要后定时/重复执行任务时可以使用下面是总体步骤:引入maven依赖创建一个任务类,做任务的方
2021-01-11 17:20:21
307
原创 子类如何获得的父类的私有成员变量?
首先先讲讲Java中继承的成员访问特点:1.构造方法不能被继承2.继承后私有成员的访问规则:父类的“私有成员”可以被子类继承,但子类不能直接访问。当通过“子类”访问非私有成员时,先在子类中找,如果找到就使用子类的,找不到就继续去“父类”中找。还是上代码来讲把:class Father{ private String name="hello";}class Children extends Father{ }public class Test { publi
2021-01-11 16:22:57
5892
原创 防止利用暴力反射破坏单例模式
单例模式的实现是将构造私有化,然后内部维护一个对象,但是还是可以通过暴力反射创建多个实例,代码如下:我以上篇文章讲的静态内部类方式实现单例模式为例:代码:package com.hy.practice;import sun.security.jca.GetInstance;/** * @author HY * @ClassName UserService * @Description 静态内部类 * @DateTime 2020/12/27 10:45 * Version 1.0
2021-01-10 17:30:30
715
2
原创 什么是单例模式以及单例模式的几种实现
1. 饿汉式单例设计模式饿汉单例设计模式就是使用类的时候已经将对象创建完毕,不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故被称为“饿汉模式”。代码实现:package com.hy.practice;/** * @author HY * @ClassName UserService1 * @Description 饿汉式 * @DateTime 2020/12/27 10:54 * Version 1.0 */public class UserService1 {
2021-01-09 17:22:40
851
2
原创 应用架构的“进化“过程
1.主流的互联网技术特点分布式 、高并发、集群、负载均衡、高可用(故障转移)。分布式:一件事情拆开来做。集群:一件事情大家一起做。负载均衡:将请求平均分配到不同的服务器中,达到均衡的目的。这里强调两点:高并发:同一时刻,处理同一件事情的处理能力(解决方案:分布式、集群、负载均衡)高可用:系统都是可用的。实现故障转移2.架构演变的过程2.1单一应用架构(all in one)当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访
2021-01-05 16:35:30
123
原创 Curator的三种cache使用模板
原生的ZooKeeper Wacher是一次性的:一个Wacher一旦触发就会被移出,如果你想要反复使用Wacher,就要在Wacher被移除后重新注册,使用起来很麻烦,Curator在这方面做了优化,Curator引入了Cache的概念用来实现对ZooKeeper服务器端进行事件监听。Cache是Curator对事件监听的包装,其对事件的监听可以近似看做是一个本地缓存视图和远程ZooKeeper视图的对比过程。而且Curator会自动的再次监听,我们就不需要自己手动的重复监听了。Curator中的cac
2021-01-04 15:16:49
1455
原创 servlet映射路径是 “/ ”时 为什么会放行jsp请求?
servlet映射路径是 “/ ”时 为什么会放行jsp请求?tomcat服务器默认自带了两个servlet,配置文件在tomcat的安装目录下的config文件夹下的web.xml。如图:一个是DefaultServlet另一个是JspServlet映射路径是:而tomcat处理请求的时候会根据请求中的url匹配servlet的映射路径,而且映射路径匹配规则是由精确到模糊。例如:请求的url是localhost:8080/xxx.jsp,那么就会交给JspServlet处理。再例如
2020-12-29 20:01:59
395
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人