自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (7)
  • 收藏
  • 关注

转载 彻底弄懂HTTP缓存机制及原理

前言Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能。 但是对于很多前端同学来说,仅仅只是知道浏览器会对请求的静态文件进行缓存,但是为什么被缓存,缓存是怎样生效的,却并不是很清楚。 在此,我会尝试用简单明了的文字,像大家系统的介绍HTTP缓存机制,期望对各位正确的理解前端

2017-08-11 10:53:32 223

原创 netty入门篇

先说好,这里所说的入门篇,并不是教你们如何入门,而是在我研读部分源码后,写了一个基本的demo,实现了客户端和服务端的交互,在放出我写的源码之前,写简单介绍下netty中的一些核心概念和核心类。NIO模型NIO是相对于BIO的一个概念,BIO是阻塞IO,不管进行accept、connect、read、write操作都可能导致阻塞。NIO就是大家常说的非阻塞模型,但是我感觉还是采用多路复用的思想...

2019-12-07 21:51:18 78

原创 用代码和图告诉你VisualVM中的线程的几种状态

VisualVM是压测过程中经常用到的一个工具,但是在分析过程中对其中的几种状态了解的不太清楚,通过查阅资源和代码中测试,基本搞懂了这些状态的区别。状态说明:Running处于这种状态的线程对于操作系统而言,要么是正在占用CPU时间片运行的线程,要么是已经就绪的线程,只要有CPU时间片分配到,就可以直接运行,对应Java中Runnable状态。Sleeping处于睡眠状态的线程...

2019-11-30 17:15:46 568

原创 ConcurrentHashMap思维导图(1.8版本)

思维导图核心操作put主要步骤:1、判断key或者value是否为null,是的话抛出异常;2、计算key的hashcode;3、判断容器table是否为null,或者长度为0,是的话进行初始化工作;4、定位key所在的位置,如果此位置没有元素的话,通过cas方式插入元素,直到成功;5、如果有元素的话,判断此时是否在扩容,如果是的话,帮助一起扩容(多个线程一起搞,这个过程挺复杂的...

2019-11-24 12:19:07 131

原创 谈谈HashMap结构那些事~(1.8版本)

1.8版本之前的HashMap结构也没仔细看过,趁着有时间把1.8版本HashMap结构梳理了一遍。下面就是几个总结。HashMap底层就是借助于数组+链表+红黑树实现的。其中红黑树是1.8中引入的,引入的目的就是防止数组中单个节点的链表过长,导致查询速度慢,通过借助于红黑树(自平衡二叉树)良好的查询速度,提升查询性能。/** * The table, initialized on...

2019-11-20 23:56:00 77

原创 DBCP2的核心参数配置

1、核心的包<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>${commons.pool.version}</version></depende...

2019-11-11 18:24:02 314

原创 mybatis中的主要设计模式应用

mybatis中包含很多中设计模式,主要包括:建造者模式、工厂模式、单例模式、模板方法模式、组合模式、代理模式、适配器模式、装饰器模式、迭代器模式。Builder模式对象的构建过程过于复杂,可以使用建造者模式,将对象的创建过程和表示过程相分离。MapperAnnotationBuilderMapper的注解构建者。当在配置文件中直接定义下面的语句时,就需要通过这个构建器进行注解解...

2019-11-06 00:51:14 98

原创 常用排序算法

基本概念介绍稳定排序对于待排序的数据,如果有元素a和b相等,如果排序前a在b的前面,在排序后a还是在b的前面,则称之为稳定排序。非稳定排序对于待排序的数据,如果有元素a和b相等,如果排序前a在b的前面,在排序后a可能出现在b的后面,则称之为非稳定排序。内排序待排文件的数据都是在内存储器中进行的。外排序如果数据很大,内存无法直接加载完成的数据,排序过程需要借助于内外存数据的交换来完...

2019-10-27 21:37:08 50

原创 spring的初始化过程

spring是什么?为什么需要spring?spring是一个容器框架,bean的创建和管理都交给spring来管理。spring中几个核心概念。IOC(Inversion of Control):控制反转传统的代码中对象之间的耦合性太强,通过将对象交于spring容器管理,由容器来控制程序之前的依赖关系。其还有一个名字:DI(依赖注入),即如果对象之间存在依赖关系,又spring容器...

2019-10-25 18:49:43 74

原创 BST、AVL、B-、B+、红黑树的基本定义和结构

BST即二叉搜索树基本定义:对于任意一个节点,若有左子树,则左子树的所有节点都小于当前节点;若有右节点,则所有右节点都大于当前节点,即满足递归定义。AVL即平衡二叉搜索树基本定义:二叉搜索树(BST)的性质,平衡二叉搜索树也满足;对于任意一个节点,若其左子树的树高为HL,其右子树的树高为HR,则||HL-HR|| < 2B-树基本定义:(M阶B-树)对于节...

2019-10-24 22:13:09 103

原创 二十三种设计模式-访问者模式

访问者模式(Visitor)在现实世界中,访问者又叫做拜访者。客人到主人家做客,客人就是一个拜访者。对主人来说,你来与不来,我都在那里。什么是访问者模式访问者是一种行为型模式,主要是对象自身的结构和对象的具体行为相分离,通过一个对象维护对象自身的结构(这个结构不能是易变的,否则这种模式就没太大的意义了),通过另一个对象(就是我们说的访问者)维护施加在对象结构上的行为。通过将对象的结构和行为...

2019-10-18 11:42:58 37

原创 SynchronousQueue数据结构基本介绍

SynchronousQueue特点是阻塞队列BlockingQueue的一种实现,也就是方法具有BlokingQueue的基本性质;和ArrayBlockingQueue区别在于,ArrayBlockingQueue内部会有一个数组用于存放元素,相当于一个缓存区;而对于SynchronousQueue,内部没有这样的数据结构用于存放数据。对于具体的一个线程A,想要插入数据,必...

2019-10-17 18:47:17 140

原创 二十三种设计模式-桥梁模式

主要的作用将抽象与实现解耦,可以让抽象和实现独立的变化。关键角色(1)Abstraction:抽象角色,这个角色提供的接口是面向调用方的,其中会保持一个对实现化对象的引用,其中的真正实现就是由Implementor的实现类来提供的,Implementor就相当于一个桥梁,将抽象角色和具体的实现关联了起来,使用组合的方式,而不是继承的方式。(2)RefinedAbstraction:修正...

2019-10-14 23:54:32 51

原创 你希望你接手的系统具有哪些优点?

对于一个已经生存很久的公司来说,你会发现它的很多系统已经发展了很久很久,当你初次接手维护很久的系统时,第一步就是先了解这个系统的作用,然后研究内部的代码逻辑。二丫今年刚研究生毕业,作为一名计算机系统的妹子,也在和毕业生大军竞争一个工作,幸运的是,一个互联网大公司录取了她。今天是第一天,提前过来实习。leader:“你好,欢迎加入本公司,你刚来,就先看看代码吧,来,我给你加几个source权...

2019-10-13 22:45:11 39

原创 详解IP、TCP报文头部及报文封装过程

TCP报文字段介绍:1、源端口(16bit):一个端口所属一个进程,可以通过源端口定位到具体的进程;2、目的端口(16bit):通过目的端口和Ip报文的目的ip地址可以唯一定位到一个进程;3、序号(32bit):当前发送数据的其实需要,每一个字节都和一个序号对应,通过需要可以保证数据的有序性;4、确认序号(32bit):只有哦ACK为1时确认需要才有效,表示期望下一次希望收到的数据的起...

2019-10-13 11:39:26 3814

原创 tomcat容器架构及请求和相应过程

基本容器结构如下:请求和响应架构:核心类介绍:1、 tomcat的启动入口:Bootstrap这个类是tomcat启动的入口类,看看main函数:public static void main(String args[]) { synchronized (daemonLock) { if (daemon == null) { ...

2019-10-12 21:39:16 40

原创 CyclicBarrier实现原理

引言在写一个知识点之前,总是想说点废话。进程、线程之类的是操作系统级别上的概念,在此概念基础上使我们能够充分压榨CPU的处理能力,实现了并发和并行。但是呢,一涉及多线程的问题,总是有点不可控的感觉,对于线程的调度,很大程度上受操作系统调度算法的控制,而操作系统也开发了一些核心的api,可以让我们在用户的应用层面控制线程。像CyclicBarrier就让我们在一定程度上,控制了多个线程的逻辑流,...

2019-10-08 23:31:48 54

原创 理解Semaphore的实现原理

简介相当于是一个计数信号量,用于控制共享资源的访问,比如实例化时可以用N表示访问共享资源的计数器。每访问一次,都会将访问的剩余次数进行减一。也是通过AQS来实现此功能的。实现原理(1)借助于AQS来实现,实例化时传入一个许可证的次数,将此值设置为state。public Semaphore(int permits) { sync = new NonfairSync(perm...

2019-10-08 20:50:12 169

原创 CountDownLatch详解

简介通过这个类可以控制线程的执行顺序,比如有三个线程A、B、C,我需要在A、B两个线程执行完某个步骤之后再执行线程C的某些步骤,则可以通过CountDownLatch这个类进行控制,实现原理也是通过AQS来实现的。大家可以看看CountDownLatch这个类的源码,在源码的注释中给了一个很好的例子,后面我也会给出我本地测试的一个例子。实现原理核心的内部类Sync继承了Abstra...

2019-10-08 00:02:51 50

原创 Mysql系列:Sql语句执行过程和事务

前言        如果一个后端开发人员经常要与mysql打交道的话,那么写Sql语句在所难免,如果不了解一个Sql的执行过程,那可能会写出一个很烂的Sql语句,导致慢查询,严重影响服务器的性能。        对于Mqsql中的事务,...

2019-10-06 14:04:34 413

原创 Java内存模型:深入理解java内存模型和先行发生原则

在讲解java的内存模型之前,咱们先看看物理机上的内存模型。硬件的缓存结构正如上面所看到的,每一个处理器都会有自己独自的缓存,而且可能会有一层缓存时多个处理器是共享的,最底层一层的缓存连接着主存,相当于是主存的部分缓存数据。Java的内存模型上面的图虽然画的简陋了点,但也基本表明线程、工作内存、主内存的交互情况。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变...

2019-10-04 23:29:37 57

原创 java虚拟机:一篇让你了解垃圾收集策略和垃圾收集核心知识

什么是垃圾收集?在我们所看到的很多讲解JVM书籍知识的文章中,总会看到如下一句话:java和C++之间有一堵由内存动态分配和垃圾收集技术围成的“高墙”,墙外的人想进来,墙里的人想出去。感觉这句话挺有意思的,使用C++的程序员在管理内存方便有着至高无上的权利,内存的分配和释放都是由程序员直接控制的,如果分配了内存,但是忘记释放了,就会很容易出现内存溢出的问题,C++程序员饱受其折磨。而使用Jav...

2019-10-04 13:00:28 55

原创 java虚拟机:详解jvm的内存布局和内存溢出异常

运行时数据区域主要包括如下几部分:堆(Heap)在这个多线程的架构体系中,咱们知道有的区域是线程私有的,而有的区域是线程共享的。对于堆区,就是线程共享的,不管是堆还是栈,底层都是一个物理机的主存而已,在此基础上,JVM进行了逻辑分块,有了堆、栈的概念,比如JVM认为物理地址0x0000~0x2321为堆区,他就是堆区了。堆是用来干什么的呢?java是面向对象的语言,所以用new创建一个对象...

2019-10-03 21:35:24 62

原创 BlockingQueue之ArrayBlockingQueue实现原理

BlockingQueue之ArrayBlockingQueueArrayBlockingQueue是一个基于数组实现的有界限的阻塞队列,队列中的元素也是先进先出。在说ArrayBlockingQueue之前,先来看看其接口BlockingQueue,接口中提供了一些比较有意思的方法,当我们调用其中的方法时,会表现出一下四种行为之一:直接抛出一个异常(Throws Exception)返...

2019-10-02 17:25:26 121

原创 ThreadPoolExecutor线程池实现原理

ThreadPoolExecutor线程池实现原理线程池在工作中用到很多,也清楚其中的一些参数的配置,但是呢,总是对怎么标识空闲线程、活动线程不太清楚。空闲线程具体是怎么回收的?我之前一直在想一个线程的run方法执行完之后这个线程不就会被销毁了吗?怎么实现重复利用的呢?带着这些疑问,看了看底层的源码。先来看看ThreadPollExecutor的继承结构Executor接口中就一个ex...

2019-10-02 11:55:52 55

原创 二十三种设计模式-适配器模式

解决的问题拿例子来说吧。1、我要把我电脑中的各种重要的小电影拷贝的一个U盘上去,免得电脑的固态硬盘坏了导致资源丢失了,但是呢,我的mac的接口是type-C的,而U盘用的是USB接口,导致U盘无法插入mac中去。这时候我就在网上买了一个转接口,其中一头是type-C接口,一头支持USB接口插入,这样就可以将U盘和mac联系起来了。其中有三个重要的对象:目标对象(可以接入mac中的U盘)、源对象...

2019-10-01 16:39:35 40

原创 ReentrantLock原理介绍和源码解析

ReentrantLock原理介绍和源码解析AQS讲解ReentrantLock之前还是得先说AQS,AQS全称AbstractQueuedSynchronizer。正如源码的文档所说,这是依赖于FIFO队列提供的一种实现阻塞队列和相关联同步器(信号量、事件等等)的一种框架。像我们平常用的ReentrantLock、Semaphore、CountDownLatch、ThreadPoolExec...

2019-09-29 19:41:58 60

原创 IO模型

I/O模型两个关键词:内核空间和用户空间;io操作时,比如网络IO读,首先数据会先到达内核空间,然后在内核态将内核空间的数据copy到用户空间。如果写数据时,也是通常将用户空间的数据copy到内核空间,然后在将内核空间的数据发送出去。但目前有很多IO优化技术,比如:direct io、mmap、sendfile等。1、阻塞I/O模型发出一个请求,直到数据返回,一直处于等待状态,不做...

2019-09-19 16:51:58 38

原创 mybatis:mybatis-config.xml解析

Mybatis配置文件解析基本元素:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"&g...

2019-09-17 21:03:58 60

原创 计算机系统的学习-笔记1

计算机系统漫游1、并发和并行并发:指一个同时具有多个活动的系统并行:指的是用并发来使一个系统运行的更快。2、计算机三个层次实现并发和并行(1)线程级并发(2)指令级并行通过借助于流水线(pipelining)技术,将执行一个指令所需要的活动划分为不同的步骤,将处理器的硬件组织成一系列的阶段,每一个阶段执行一个步骤,这些阶段可以并性地操作。(3)单指令、多数据并行允许一条指令产生多...

2019-09-15 23:31:37 42

原创 spring aop的实现代码

跟踪spring aop的实现aop核心概念介绍什么是切面编程在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面编程。Aspect(切面)什么是切面呢?切面这个词感觉还是挺抽象的,咱们可能知道点构成线,线构成面的数据话术。但是在编程语言中如何体现这个面呢?我的理解是“在程序中切面是由切入点和在切入点的表现的行为构成”。给个在spring中定义切面的例子如下...

2019-09-14 19:45:39 349

原创 二十三种设计模式-原型模式

原型模式原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原型模式的用意。这种形式涉及到三个角色:客户(Client)角色:客户类提出创建对象的请求。抽象原型(Prototype)角色:这是一个抽象角色,通常由一个Java接口或Java抽象类实现。此角色给出所有的具体原型类所需的接口。具体原...

2019-09-14 15:45:22 34

原创 算法-最短路径(动态规划法)

问题描述猛兽侠中精灵鼠在利剑飞船的追逐下逃到一个n*n的建筑群中,精灵鼠从(0,0)的位置进入建筑群,建筑群的出口位置为(n-1,n-1),建筑群的每个位置都有阻碍,每个位置上都会相当于给了精灵鼠一个固定值减速,因为精灵鼠正在逃命所以不能回头只能向前或者向下逃跑,现在问精灵鼠最少在减速多少的情况下逃出迷宫?输入描述第一行迷宫的大小: n >=2 & n <= 10000;...

2019-09-10 22:28:42 1832

原创 算法-最高得分(动态规划)

题目描述小明同学在参加一场考试,考试时间2个小时。试卷上一共有n道题目,小明要在规定时间内,完成一定数量的题目。 考试中不限制试题作答顺序,对于 i 第道题目,小明有三种不同的策略可以选择: (1)直接跳过这道题目,不花费时间,本题得0分。(2)只做一部分题目,花费pi分钟的时间,本题可以得到ai分。 (3)做完整个题目,花费qi分钟的时间,本题可以得到bi分。小明想知道,他最多能得到...

2019-09-04 00:23:34 551

原创 java线程知识

线程核心:锁对于共享资源,在多线程的环境中,是会存在竞争情况的,由于竞争的存在,导致在使用共享资源的情况,会出现意想不到的情况。如果共享资源仅仅是可读的,不管多少线程来操作,也不会出现线程安全的情况。但如果在使用共享资源的时候,会改变共享资源的状态,那么基本会出现线程安全的问题。锁是什么呢?既然资源存在竞争,那么当一个线程在占用了资源后,想办法告知其他想使用其资源的线程当前资源正在占用中,让其...

2019-09-02 22:32:22 48

原创 java泛型-super和exends

什么是泛型泛型的本质是参数化类型,也就是所操作的数据类型被指定为一个参数(既然是参数,那么就是可变的,数据类型可变的。)。在java中,没有泛型出现之前,通过定义类型是Object来实现参数的“任意化”。使用Object实现任意化的缺点是需要强制类型转换,而且错误需要在运行期才能发现。而使用泛型的好处是在编译时的时候检查类型安全,并且所有的强制类型转化都是自动和隐式的,极大提高代码的利用率。泛...

2019-08-31 18:13:51 117

原创 springboot解决跨域问题

springboot解决跨域问题基本概念:1、同源策略:是指协议、域名、端口都要相同,只要有一个不相同,就是跨域。注:跨域限制访问是浏览器的限制2、CORS:跨域资源共享,这是一种机制,允许web服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。注:很赞的一篇介绍CORS的文章https://developer.mozilla.org/zh-CN/docs/Web/HTTP/...

2019-08-29 23:20:28 91

原创 tomcat源码阅读笔记-启动过程和请求处理过程

本文是之前第一次粗略阅读tomcat源码的一些笔记内容,涉及的东西比较散和广,之后有时间写一些tomcat的细节内容,比如组件声明周期的细节,详细分析各个组件的构建过程等。配置文件基本结构<Server> <Service> <!-- 此元素可以有一个或者多个 --> <Connector> <!-- 此元素可以有多个 --...

2019-08-28 22:53:43 83

原创 算法-最长公共子串

问题描述给定两个字符串,请编写代码,输出最长公共子串(Longest Common Substring),是指两个字符串中的最长的公共子串,要求子串一定是连续。输入描述文本格式,2个非空字符串(字母数字组成),2个字符串以","英文逗号分割,字符串长度均小于等于100。输出描述整形,为匹配到的最长子串长度分析:一涉及到字符串,可以有各种变种的问题,像这种最长公共子串、最长公共子序列就是...

2019-08-27 23:44:25 147

原创 算法-特征提取

题目描述小明是一名算法工程师,同时也是一名铲屎官。某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。一个猫咪特征是一个两维的vector<x, y>。如果x_1=x_2 and y_1=y_2,那么这俩是同一个特征。因此,如果喵咪特征连续一致,可以认为喵咪在运动。也就是说,如果特征<a, b>在持续帧里出现...

2019-08-26 23:41:10 101

java编程思想中文版(第四版)

think in java的中文版,排版比较好,pdf中详细介绍了java中的一些核心技术。

2017-05-29

LIBSVM支持向量机

这是学习SVM的一个很好的工具包,其中包括用多种语言所写的SVM源码,使用起来十分方便

2015-12-23

用于电脑磁盘分区的软件

电脑的C盘初始分区通常比较小,用了一段时间之后会发现C盘容量几乎快用尽,导致电脑反应会变慢,通过磁盘分区,增加C盘的容量,改善电脑的性能

2015-11-14

超限学习机的一些学习资料

通过这些资料学习,可以了解最新的一种ELM算法,这种算法在今后有很大的应用前景,非常不错

2015-11-14

J2EE实例教程,能够了解基本的内容

J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。

2015-07-08

微软雅黑字体

通常电脑上不带有微软雅黑字体,在服务端开发时,若用到此种字体,将导致设计验证码不能显示出来

2015-05-04

tomcat的配置

通过本篇文献,基本可以实现tomcat的配置,对tomcat有一个基本的了解

2015-04-09

空空如也

空空如也

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

TA关注的人 TA的粉丝

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