- 博客(64)
- 收藏
- 关注
原创 2021-06-21策略模式和状态模式
https://www.runoob.com/w3cnote/state-vs-strategy.html
2021-06-21 10:30:54
201
原创 redis的雪崩 击穿 穿透以及解决方案
雪崩:众多缓存数据同一时间到期导致大量请求同时达到数据库,致使数据库超负荷。解决方案:1.数据对时间不敏感:到期时间加一个随机值2.数据必须在某一时刻到期:客户端请求的时候加个延迟。击穿:某一个非常热的值到期后有非常多的请求同一时间打到了数据库,致使数据库超负荷。解决方案:1.一个线程访问redis没有获取到key对应的数据时,再次访问redis,通过setnx获取锁,获取到的可以去数据库拿数据,没获取到睡眠一段时间再次从redis里面拿。问题:如果拿到锁的线程崩溃了怎么办?2.锁加个到期时
2021-04-20 17:09:04
357
原创 spring 容器启动 生命周期 自动装配
spring容器启动:首先生成一个beanfactory,一个beandefinitionreader,一个pathscanner,然后主要生成两个对象,一个configurationClasspostprocessor和一个AutowiredAnnotationBeanPostProcessor,前者是一个beanfactory后置处理器,可以修改beanDefinition的内容,主要用来读取用import Configuration componentScan等注解标记的类,然后读取其中的bean,
2021-04-04 10:51:42
234
原创 bean是怎么注册到容器中的
https://www.bilibili.com/video/BV1Lt4y167vk?from=search&seid=5963347516824050068首先用inputstream读取xml文件,现在是各种有规则的字符串,将他转换成document文件,document里面有各种父子标签,每个父子标签通过不同handler去解析,解析完成后就变成了beanDefinition,将他注册到ioc容器中,主要干了两件事,第一件把名字注册进去,第二件弄了个hashmap,可以通过名字找到be.
2021-04-03 11:40:06
187
原创 get和post区别
请求缓存:GET 会被缓存,而post不会保留浏览器历史记录:GET可以,而POST不能用处:get常用于取回数据,post用于提交数据安全性:post比get安全请求参数:querystring 是url的一部分get、post都可以带上。 get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制...
2021-03-31 19:48:10
99
原创 一次mysql查询
客户端与服务器建立tcp连接客户端向服务器发送查询请求先从内存中找找不到用优化器找出最佳查找方案有索引:把索引存入内存,然后用索引访问数据如果数据在内存中直接读,没有要把磁盘的数据放入内存没索引:硬读把数据处理一下,排个序之类的然后返回数据...
2021-03-30 09:27:29
85
原创 为什么线程切换比进程切换要小
https://blog.csdn.net/weixin_30908103/article/details/96375745
2021-03-30 09:03:17
507
原创 进程上下文包括什么
进程上下文包括三个,用户及上下文,寄存器上下文和系统级上下文用户级上下文:指令,数据,共享内存、用户栈寄存器上下文:程序计数器,通用寄存器,控制寄存器,状态字寄存器,栈指针(用来指向用户栈或者内存栈)系统级上下文:pcb,主存管理信息(页表&段表)、核心栈...
2021-03-29 22:43:31
3427
原创 今天没学完的东西给,记录一下
https://blog.csdn.net/javachengzi/article/details/113527189?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161699401716780274181553%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161699401716780274181553&biz_id=0.
2021-03-29 22:11:57
202
原创 死锁的解决方案
造成死锁有四个方面:资源互斥,不可剥夺,保持并请求,循环等待预防死锁的方法:资源共享,可剥夺,一次性全部申请,顺序资源分配法避免死锁的方法:银行家算法按照一定的序列分配资源,则每个进程都能够顺利完成,这叫做安全序列,只要能够找到一个安全序列那么系统就是安全状态,银行家算法的核心就是分配资源之前首先判断分配完之后能否找到一条安全序列银行家算法步骤:检查此次申请是否超过了之前声明的最大需求数检查此时系统剩余的可用资源是否还能满足这次请求试探着分配如果找不到一条安全序列则退回死锁解除:资源剥夺
2021-03-29 20:03:40
228
原创 进程调度算法 作业调度
进程调度算法1.先来先服务2.最短优先3.剩余最短优先4.高响应比5.时间片轮转6.多级反馈队列7.优先级作业调度算法1.先来先服务2.最短优先3.高响应比优先4.优先级作业调度和进程调度的区别作业调度又称为高级调度,频度较低。其主要工作是将位于外存后备队列中的某个(或某几个)作业调入内存,排在就绪队列上。注意了,这个时候仅仅是将作业调入内存,并为作业创建进程、分配资源,此时进程处于就绪态,并没有执行。进程调度其主要任务是从就绪队列中选取一个(或几个)进程,并分配处理机的过程
2021-03-29 17:03:49
226
原创 java三大特性 继承 封装 多态
多态 对于同一个父类的不同子类,调用相同的方法实现的作用不一样。封装 隐藏具体细节,只显示接口。继承:子类继承父类的特征和行为。
2021-03-24 21:48:14
86
原创 myisam索引和innodb索引的区别
myisam索引数据区存放的是真实数据的地址,且主键索引和辅助索引在结构上没有区别innodb索引数据区存放的就是真实数据,主键索引数据区存放真实数据,辅助索引在数据区存放地址。
2021-03-23 14:11:25
124
原创 为什么说tcp是可靠的传输
1.会进行报文校验,如果出错,丢弃等待重传2.有缓存区,可以存放抵达顺序不一致的报文然后进行排序3.当接收方接收到一个报文时它会发一个希望接收下一个报文的序号。这样发送方就知道哪个数据包出问题了,进行重传。4.如果上面接收方发送的报文丢失了,那么发送方就会多次发送相同报文,这时接收方会进行丢弃。慢开始发送方的窗口大小根据网络大小来定,最开始是1,一旦确认没问题就翻一倍,直到到达threshold,然后每次加一。拥塞避免如果发现拥塞了 那么threshold变为窗口大小的一半,窗口大小变为1,继
2021-03-23 10:10:16
224
原创 事务的传播机制,隔离级别,容器启动过程
https://blog.csdn.net/qq_34436819/article/details/100730717?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161637638416780357295378%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161637638416780357295378&biz_id=0&
2021-03-22 09:31:03
104
原创 bean的生命周期
Spring启动,查找并加载需要被Spring管理的bean,进行Bean的实例化Bean实例化后对将Bean的引入和值注入到Bean的属性中**“属性注入”**如果Bean实现了BeanNameAware接口的话,Spring将Bean的Id传递给setBeanName()方法如果Bean实现了BeanFactoryAware接口的话,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入如果Bean实现了ApplicationContextAware接口的话
2021-03-21 15:46:48
118
原创 如果你来设计一个ioc容器你会怎么做
首先我得给用户一个入口给用户调用,比如applicationcontextapplicationcontext初试化:首先生成一个beanfactory用来生成bean对象然后我需要去找什么样的类需要我来代理,所以要生成一个beanclasspathdefinitionscanner去扫描指定的包接下来我需要知道需要我代理的对象的属性,比如是单例还是多例,是否懒加载,用什么beanfactory生成等,所以要生成一个AnnotatedBeanDefinitionReader一般入口调用applic
2021-03-21 14:02:50
212
原创 aop
spring的aop分为两种,一种是apsectj的静态代理,简单来说就是在编译的时候就把需要实现功能的代码织入原代码中另一种是静态代理,静态代理又分为两类,一种是cglib这种,通过继承父类来实现一些功能,所以被代理的类不能是final修饰的另一种是jdk动态代理,jdk动态代理是面向接口的,首先我们写一个需要代理的接口interface,然后写一个这个接口的具体实现类interfaceimp。接下来写一个实现了invocationhandler的类,这个类实现了一个invoke方法,运用反射机制实现
2021-03-21 10:26:09
66
原创 动态代理
jdk动态代理是面向接口的代理,首先我们要写一个接口,里面放着需要代理的方法,然后写一个具体的实现类,这个实现类就是需要代理的具体对象,接下来要写一个public class InvocationHandlerImpl implements InvocationHandle,这个类实现了invocationhandle接口,首先我们要传一个具体的代理对象进去,然后实现了invocationhandler这个接口的都要实现一个invoke方法,在这个方法里,我们需要实现被代理对象的具体方法,然后可以在之前和之
2021-03-21 10:06:19
117
原创 控制反转和依赖注入
控制反转:控制权:控制创建新对象反转:原来由程序创建,现在由ioc容器创建,程序只需要告诉ioc它需要什么,容器就会把相应的对象生成好给他。注入依赖:谁注入谁:ioc容器注入程序的某个对象谁依赖谁:程序的某个对象依赖ioc容器为什么需要依赖:程序需要ioc容器为他提供它所需要的资源,比如对象,资源,常量...
2021-03-20 15:44:10
81
原创 堆排序
public static void heapSort(int[]nums) { int len=nums.length; for(int i=len/2;i>=0;i--) { sort(nums,i,len); } for(int i=len-1;i>0;i--) { swap(nums,0,i); sort(n.
2021-03-18 21:52:00
59
原创 http请求的过程

2021-03-16 06:25:41
174
转载 虚假唤醒
https://javaedge.blog.csdn.net/article/details/105670870?ops_request_misc=&request_id=&biz_id=102&utm_term=%E8%99%9A%E5%81%87%E5%94%A4%E9%86%92%20java&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-3-105670870.
2021-02-23 22:44:20
89
转载 notify作用
https://blog.csdn.net/djzhao/article/details/79410229?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161409126416780269881858%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161409126416780269881858&biz_id=0&ut
2021-02-23 22:42:24
356
原创 jvm加载图,这张真清晰,抄来用用
https://blog.csdn.net/peng_zhanxuan/article/details/104329875?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%9E%84%E9%80%A0%E6%96%B9%E6%B3%95%E5%9C%A8%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E8%A2%AB%E8%B0%83%E7%94%A8%20jvm&utm_medium=di
2021-02-22 10:27:36
287
原创 jvm调参命令
第一个打印所有生效的参数的值以及可以看到XX设置参数的所有命令第三个可以看到生产环境的GC类型。然而我居然看不到,可恶!这个是各个gc型号的搭配情况现在主流的是serial+serial old 和parallel scavenge +parallel old放一下本视频的链接,以防找不到bilibili.com/video/BV1UX4y1P7CA?from=search&seid=12612088870268722736...
2021-02-20 15:54:28
169
原创 内存分页是多大
https://blog.csdn.net/zw521cx/article/details/105093223?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161378686416780269894819%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161378686416780269894819&biz_id=0&
2021-02-20 10:22:41
646
原创 多线程学习(1)--基础概念
线程和进程的区别线程是cpu调度的基本单位,进程是cpu分配资源的基本单位,一个进程可以有多个线程,线程依附于进程存在。进程之间相互独立,但一个进程下的线程共享该进程的资源,这些资源对其他进程不可见。cpu核心数和线程数的关系给定一个时间点,cpu的核心数>=线程数使用超线程技术后,一个核心可以同时运行两个线程,所以cpu的核心数>=线程数*2*cpu时间片时间片即cpu分配给每个线程的时间(通常为10~100ms数量级),每个线程(时间片是直接分配给线程的,而不是先分配给进程然后
2021-01-12 11:03:09
158
原创 java内存初探(二)
呃,昨天吃完饭血液大多涌向了胃部,然后我的脑子闹脾气了:明明晚上还要我干活,结果不给我充足的血液怎么行呢?所以它罢工了,那我也没有办法,只能今天再写这一篇了哈哈哈。很巧妙的掩饰了自己昨天的懒惰之后,我们话不多说,继续继续。昨天说到classloader将字节码文件加载到jvm的时候有三个阶段,分别是装载、连接和初始化三个过程。下面我就来分别聊聊这三个阶段(昨天抄的博客和今天抄的内容居然冲突了,可恶,我还得再去看看哪个是对的)1.装载装载的主要过程是先将.class的信息读取到内存中来,首先通过类的全
2021-01-11 16:22:41
101
原创 leetcode1202 交换字符串中的元素 最近这么多并查集的题目,就这题还有点意思
public class Solution { public static String smallestStringWithSwaps(String s, List<List<Integer>> pairs) { int length=s.length(); int[]parent=new int[length]; for(int i=0;i<length;i++) { pare
2021-01-11 12:37:46
113
原创 java内存初探(一)
讲道理,这个java虚拟机我感觉自己学的超级差劲,但是呢,面试又重点考察这个,所以手写一次加深印象吧。一、区域划分主要划分为堆(包括方法区),栈,本地方法栈,程序计数器二、java程序的具体执行过程我们写出来的程序文件后缀都是.java,比如我论文的项目后缀就全都是.java,具体的名称叫做java源码文件。源码文件是无法被java虚拟机识别的,所以必须要用java compiler(java编译器)编译成字节码文件(.class),这.class实际上是二进制的数据,但是为什么叫字节码文件呢?我
2021-01-10 16:44:39
780
原创 leetcode123 买股票最佳时机3 击败了百分之五的人然而我一点都不想看官方题解哈哈哈,就这样吧
public class Solution { public static int maxProfit(int[] prices) { int length=prices.length; if(length==0)return 0; //dp[][][1]是持有股票时j //dp[][][0]是不持有股票时 //dp[][j][]是第几次交易 int dp[][][]=new int[length][3
2021-01-09 10:51:16
112
原创 Artifact tomcat:war exploded: Waiting for server connection to start artifact deployment.系统找不到指定的路径
log如下D:\tomcat\apache-tomcat-8.5.58\bin\catalina.bat run[2021-01-08 11:18:06,401] Artifact tomcat:war exploded: Waiting for server connection to start artifact deployment...系统找不到指定的路径。Using CATALINA_BASE: "C:\Users\86151\.IntelliJIdea2018.2\system\to
2021-01-08 11:20:25
7665
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人