自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 正则表达式的基本用法

正则表达式什么是正则表达式?正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式的应用?其实正则表达式的作用就是用来匹配字符串,所以其实他的应用也就是匹配字符串,比如可以获取字符串中的特定元素,判断字符串是否包含特定元素,判断字符串是否符合我们要求的格式等。实际的例子就像是我们邮箱格式验证等等。正则表达式的好处?正则表达式的好处

2021-05-05 16:28:35 2460

转载 经典问题:为啥要三次握手和四次挥手

背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。IP协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程。而端到端的通信才应该是应用进程之间的通信。 UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出...

2021-04-15 11:13:03 149

转载 缓存一致性协议(MESI)

缓存一致性协议(MESI)在目前主流的计算机中,cpu执行计算的主要流程如图所示:数据加载的流程如下:1.将程序和数据从硬盘加载到内存中2.将程序和数据从内存加载到缓存中(目前多三级缓存,数据加载顺序:L3->L2->L1)3.CPU将缓存中的数据加载到寄存器中,并进行运算4.CPU会将数据刷新回缓存,并在一定的时间周期之后刷新回内存缓存一致性协议发展背景现在的CPU基本都是多核CPU,服务器更是提供了多CPU的支持,而每个核心也都有自己独立的缓存,当多个核心同时操作多个线程对

2021-04-13 20:03:06 193

原创 tomcat分析之container以及子容器的初始化流程

关于这一篇内容是非常多的,其中大部分都是涉及源码的剖析。由于其中所涉及到太多的细节,所以很多实现细节未能有详细的展开,不过对于其中的执行流程分析的还是相对完整的。由于作者的水平有限,如果在这些流程中有缺漏,或者有分析错误之处,请告知作者。containercontainer的结构container是一个接口,所有子容器都继承这个接口。并且container这个接口继承了Lifecycle接口,所以container,以及它的子容器 也具有生命周期。container有一个默认的实现类,Conta

2021-04-13 11:49:56 383

原创 tomcat分析之connector的执行

connectorConnector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。Engine是conntainer的子类,Container就是Servlet的容器,Container处理完后会把结果返回给Connector,最后Connector使用socket将处理结果返回给客户端,整个请求处理完毕。Connector的底层是使用socket进行连接

2021-04-12 15:29:06 266

原创 tomcat分析之Lifecycle以及LifecycleBase

Lifecycle在之前tomcat的分析中,我们通常会提到一个init(),和start(),以及initInternal()和startInternal()。至于其中的调用过程在前文只是简单提到过,没有详细讲过,通过这一篇,可以详细的了解关于tomcat生命周期的定义,以及其中方法的调用* start()* -----------------------------* | |* | init()

2021-04-11 15:27:54 549

原创 tomcat分析之Service

本来是准备一天一更,大致表述完tomcat的。但是,最近一直在准备考试,也就没有继续更新。今天就聊一聊tomcat中的service。Service可以说是tomcat的比较重要的部分。原因就是其中包含了两个组件,Container和Connector。Container是一个容器,负责处理请求的。Connector是负责接受请求,并且将请求提交给Container。(关于Connector和Container的执行流程,在后续的文章也会详细展开)一,关于Service的初始化时期关于service

2021-04-10 16:39:48 1123

原创 tomcat分析之server

分析Server的步骤在讲解catlina的时候其中说过Server.init()。但是在Server中其实是没有定义init(),这个方法其实是在他的接口中才实现的。所以

2021-04-07 19:55:56 229 1

原创 tomcat分析---catalina

根据上篇的分析,其实tomcat启动流程中,在catalina主要是执行了三个方法。setAwait(true);load();start();注:分析的源码为tomcat8.5版本关于setAwait()方法public void setAwait(boolean b) { await = b; }就是令一个标识变成 true;catalina.load()源码如下public void load() { if (loaded) {

2021-04-05 16:54:43 239 1

原创 tomcat启动的入口---Bootstrap,源码分析

上一篇说到,我们启动tomcat实质就是定位到Bootstrap中的main方法。这一篇我们来详细分析一下Bootstrap的作用吧看一波Bootstrap.main()源码 /** * Main method and entry point when starting Tomcat via the provided * scripts. * * @param args Command line arguments to be processed */

2021-04-05 15:23:44 369

原创 tomcat的启动流程

在上一篇中,我们是自己配置启动的路径。通过手动启动。那么,再实际的操作中,我们通常用的都是core版本来使用的,里面是没有上篇我们配置的那个路径的,那么是如何启动的呢。1,通过bin路径startup.bat(linux环境下是startup.sh)的文件来启动的。2,查看startup.batsetlocalrem Guess CATALINA_HOME if not definedset "CURRENT_DIR=%cd%"if not "%CATALINA_HOME%" == ""

2021-04-05 10:08:18 2666

原创 阅读tomcat源码的准备工作

最近一直在看tomcat的源码,说实话看的是眼花缭乱。自己记了很多笔记,但是感觉一次上传篇幅太大。于是准备根据每一小部分来陆续上传。在一篇先讲讲阅读tomcat的准备工作吧。首先,你要准备一个看代码的工具,idea或者vs code 都行。博主用的是idea。然后就是准备一个tomcat,我看的是tomcat8.5的版本。附上官网连接https://tomcat.apache.org/download-80.cgi然后选择src版本下载。(更容易看代码)然后就可以开始阅读源码了。-------

2021-04-05 08:47:02 132 1

转载 DNS协议详解

DNS协议DNS解析流程过程详解:https://cloud.tencent.com/developer/news/324975第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP第三步:向本地域名解析服务系统发起域名解析的请求第四步:向根域名解析服务器发起域名解析请求第五步:根域名服务器返回gTLD域名解析服务器地址第六步:向gTLD服务器发起解析请求第七步:gTLD服务器接收请求并返回Name Server

2021-04-03 21:10:04 124

原创 常用的linux命令

进入目录 ,打印目录,查看当前路径,创建文件,删除文件夹,删除文件,复制文件,移动文件/重命名,查看文件内容,查看文件最后的内容,分页查看内容,编辑文件,编辑文件的操作,查看文件中的关键词,查找文件,压缩tar文件,gzip操作,解压zip操作,查看命令作用,查看当前用户名,查看系统,查看磁盘使用情况,查看运行进程,查看cpu运行情况(扩展),查看空闲的内存区域,1, cd 命令:进入目录cd / # 进入根目录cd a #进入当前目录下的a目录cd ..

2021-04-02 22:44:42 71

原创 jdk1.8默认的垃圾收集器

查看一波电脑中的java版本>>java -versionjava version "1.8.0_91"Java(TM) SE Runtime Environment (build 1.8.0_91-b15)Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)可以看到版本是java1.8版本>>java -XX:+PrintCommandLineFlags -version-XX:Initi

2021-03-30 21:14:20 3388 1

转载 深入理解破坏双亲委派模型之jdbc

JDBC之所以要破坏双亲委派模式是因为,JDBC的核心在rt.jar中由启动类加载器加载,而其实现则在各厂商实现的的jar包中,根据类加载机制,若A类调用B类,则B类由A类的加载器加载,也就是说启动类加载器要加载jar包下的类,我们都知道这是不可能的,启动类加载器负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,那么JDBC是如何加载这些Driver实现类的?通过Thread.currentThread().getContextClassLoader()得到线程上下文加载器来加

2021-03-21 22:53:48 221

转载 基于redis的单点登录解决方案

单点登录有两种模型,一种是共同父域下的单点登录(例如域名都是 xx.a.com),还有就是完全跨域下的单点登录(例如域名是xx.a.com,xx.b.com),本文我们讲一下完全跨域下的单点登录该怎么实现。基于安全考虑,想通过cookie来实现这个功能是不太可能的了(也许有其他黑科技可以实现,这里不做讨论)。这里介绍的方案是参考shiro框架的跨域session共享方案来实现的。我们知道浏览器访问系统的时候会生成一个session,那么每次请求如何知道是来自同一个浏览器呢?是因为浏览器为每个域存储了一个可

2021-03-18 21:52:42 323

转载 什么是单点登录?单点登录的解决方案

什么是单点登录?在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便。但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于运营人员来说,很不方便。于是,就想到是不是可以在一个系统登录,其他系统就不用登录了呢?这就是单点登录要解决的问题。单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统

2021-03-18 21:50:54 1345

转载 计算机网络

1、计算机网络1.1 OSI与TCP/IP各层的结构与功能,都有哪些协议?1.1.1 应用层应用层(application-layer)的任务是 通过应用进程间的交互来完成特定网络应用应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如 域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议 等等我们把应用层交互的数据单元称为报文HTTP协议:超文本传输协议是互联网上应用最为广

2021-03-15 22:17:54 134

原创 jvm之垃圾收集算法

感觉好像直接从书上简单整理上载会被csdn挂掉,可是jvm又没有啥代码敲得(脑壳疼)。接下来关于理论复习的博客,我可能就大致表述一下需要注意的点。不会在详细的表述了,需要的同学可以根据我的整理的点,去书上看(jvm复习1中有对应的书籍,可以自己去看一看),进行一个有针对性的复习。找到一个表述的很不错的一篇博客https://xie.infoq.cn/article/9d4830f6c0c1e2df0753f9858刚刚找的,写的非常详细,图画的还好看。额,开始怀疑我写这一篇的意义。一,前言垃圾回

2021-03-11 22:56:48 74

原创 jvm之对象

这里是对jvm中对象的创建过程,内存分布,内存定位的一个简单描述。都是根据书中的信息整理出来的。一,对象的创建过程1,查看类是否被加载当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那 必须先执行相应的类加载过程。2,分配空间分配空间的两种方式(1)指针碰撞假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一 边,空闲的内存被放在另一边,中间放着一个指针

2021-03-11 21:32:42 85

原创 jvm之内存布局

这里强烈推荐看一下我jvm复习1中的知识框架,关于内存布局这块,我觉得我梳理的流程还是不错的了。不过作为学习的话,光有框架是肯定不够的,我们需要将架子里面的内容填充完善。我来简单讲讲内存区域吧,强烈推荐看书运行时的内存区域程序计数器程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的 字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器 的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处 理、线程恢复等基础功能都需要

2021-03-10 22:53:34 58

原创 jvm复习的简单知识框架

分享一波我的关于jvm的学习思维导图吧其实这个框架不是完全的jvm中的知识,我只是截取其中一部分来做一个知识框架。分享一波资料吧,链接:百度网盘,提取码:a1b1这是java虚拟机的书籍,毫无疑问,通过书籍和目录的方式学习是最好的。注:我以上的知识框架并不一定是按照目录来实现的,毕竟目录可能有一定的不连贯性(也就是先简单概括,后系统分析),所以我进行整理时候,关于一个点可能会一直衍生下去。所以会有一点冲突。并且由于是我个人的一个知识框架,有的点可能会被我忽略,这个框架仅作一个知识梳理会更好..

2021-03-10 22:23:59 115

原创 java基础之反射

反射作为java基础中比较难的一个部分,理解起来比其他的部分会稍微难以一些。不过反射是很多框架的灵魂,其重要性不言而喻。不过时间问题。虽然总结了一些点。不过并不算详细,为了避免误导。这里有关于反射的一篇很好的博客可以去瞧瞧链接,我也不多描述,这里稍微总结一下,一些比较重要的点。可以根据这些点去看关于反射的博客,思路会更加清晰一些。关于获得class对象的三种方式获得class对象的成员变量获得class对象的成员方法获得class对象的构造方法暴力反射可以看出其实上述的操作都是关于clas

2021-03-10 00:12:10 45

原创 java基础之内部类

内部类是一个定义在另一个类中的类。那为什么要使用内部类呢?其主要原因有以下三点1.内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据2.内部类可以对统一包中的其他数据隐藏起来,增强面向对象的封装性3.当想定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷借助于内部类可以实现类似于多继承的作用 public class Person { //人在出生的时候选择性别 private String[] sex = {"男性","女性"}; cla

2021-03-09 23:51:21 112

原创 java基础之接口

接口关键词:interface,implements多继承:一个类可以继承多个接口 注:但是java是单继承的每个实现类必须实现接口的所有方法接口中不能有实例域和静态方法不能实例化接口可以声明接口的变量接口可以有常量接口的方法默认被声明为public ,接口的域被自动设置为public static final且不能设置为其他类型在一个类同时继承一个父类和实现一个接口,发生冲突时,类优先克隆浅拷贝:对每个域进行拷贝,包括相同子对象的引用。导致克隆对象和员对象会公用子对象的应用深拷

2021-03-08 22:46:36 44

原创 java基础复习5之继承

继承注:java中继承只能单继承但是接口是可以extends多个接口的、类、子类、超类定义子类的关键词时extends利用extends继承的一般叫做子类,被继承的一般称为父类或者(超类)object类是所有类的父类覆盖方法但出现父类方法不适用于子类方法时,我们可以通过重写方法来达到我们的目的覆盖方法是可能出现调用父类私有变量的情况,原则上private修饰的变量是不能被直接访问的,所以我们可以通过访问器(get方法)来访问,需要注意的一点是,我们应当调用的是父类的访问器,而不是当前

2021-03-08 20:10:10 69

原创 java基础复习4之类

java构造器重载有些类有多个构造器,可以定义对象的初始状态,但是需要注意的是,方法签名(也就是方法参数的数量和类型)需要不同。初始化通过构造器我们可以直接将值赋给实例域但构造器方法参数和实例域命名相同时,可以用this指代对于未在构造器当中初始化的域,对于数值型默认设置为0,布尔型默认为false未有初始化的对象变量将设置为null无参构造器定义类时未声明任何构造器时,将会一个默认的无参构造器当只声明有参构造器时,默认的无参构造器将无法使用,需要自行定义可

2021-03-08 20:06:34 40

原创 java算法排序

好久以前整理的一些排序,现在发上来。只有一些代码,没有做思路解析,给大家复习看看,部分排序也用了迭代和递归来实现。对于算法类,我强烈推荐先了解思路,在自己敲,然后不懂在看别人的代码。这里有一篇我认为不错的博客,对排序算法流程不是很了解的同学可以去看看https://www.cnblogs.com/itsharehome/p/11058010.html交换public staic void swap(int[] arr,int i,int min){ int temp=arr[i]; a

2021-03-07 10:52:18 32

原创 java基础复习3之面向对象

一,四大特征封装性继承性多态性抽象性注:如果说三个特征一般指的是前三个。四个特征,大家需要详细的了解,毕竟是面向对象的基础。这里不做赘述。二,六个原则这六个原则其实我是从网上了解过来的。可以说是设计面向对象代码的原则吧这里贴个链接,lhttps://blog.csdn.net/sinat_26342009/article/details/46419873有兴趣的同学可以去看看。内容很详细三,关于面向对象的思想和面向过程的思想区别面向过程这个名词,相信学过c语言的同学估计都知道,c语言

2021-03-06 22:53:39 56

原创 java基础复习2之字符串

由于是复习的方式来过一遍字符串。这里不会详细的介绍String类型。只是大概聊一聊,我认为比较重要的知识点。至于详细的用法,我推荐去书上看一看,配合着代码敲敲,至于书籍(《java核心卷1》)的链接,我以及在我的java基础复习1有百度网盘的。需要的同学自行去获取。一,String是不可变的相信很多人都知道String是不可变的,但是对原因不了解。那么为什么这么说呢。首先看一段代码 private final char value[];可以看出String的对象一旦定义由于final修饰,它

2021-03-06 22:37:15 55

原创 java基础复习1之八大基本类型及其包装类型,128陷阱

0,前言前段时间开始准备春招,复习一些知识点,时间也不算太短,记录了一些笔记什么的,接下来会陆陆续续整理发上来,不过也不会很快,毕竟笔记记的不是很规范,得稍微整理整理,内容也会简略很多,尽量一天至少一篇吧,内容还是很多的,所以发的不会很快,接下来还会发些jvm,并发,计网等整理知识点。嘻嘻嘻。先发个我做的关于java语法复习的思维导图吧,相信做的还是比较完善的。如有缺陷,欢迎指出。这个是我做流程图的一个网址,点击这个链接注册可以为我扩容,欢迎点击,蟹蟹。https://www.processon.c

2021-03-05 23:33:06 103 2

原创 二叉树的遍历(前序,中序,后序,层次)

遍历顺序先序遍历顺序:根节点–>左子树–>右子树中序遍历顺序:左子树–>根节点–>右子树后序遍历顺序:左子树–>右子树–>根节点层次遍历顺序:按照层次遍历图示#mermaid-svg-GvKizsQ4hEMEJc73 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-

2020-12-23 18:12:52 77

原创 java基础之static

static是作为java语法中重要的一个关键字存在的。1,static修饰变量static用来在类中用来修饰变量,其修饰的变量属于类变量,不属于实例变量。类变量,在方法区加载类时候,以及在静态常量池中声明完毕。使用该变量可以直接使用类名.变量使用。2,static修饰方法static可以用来修饰方法,和静态变量一样都是在类加载时声明完成。staitc修饰的静态方法,是不能调用关于实例的变量以及方法,例如关于this的一系列操作,以及非静态变量,非静态方法。3,static代码块使用方法,在

2020-09-02 13:53:19 62

原创 git入门级别命令行

ssh-keygen -t rsa 生成公钥私钥直接提交git clone 远程仓库下载到本地仓库git add . ----将所有的文件都提交的暂存区git commit -m"注释" -------将暂存区的文件提交到本地仓库git pull --------将远程仓库的文件下拉到工作区,以减少提交冲突git push ----将本地仓库的文件提交到 远程仓库利用分支提交git checkout 分支名 :切换分支git checkout -b 分支名:新建分支并切换假设在dev

2020-08-30 08:49:24 42

转载 java之构造器,以及this

在java中利用类来定义对象时,必然需要调用构造器来进行初始化。构造器的形式是public +类名(参数){}1,构造器的作用是在定义对象时候,对内部定义好的那些属性进行初始化。2,每个构造器都有一个默认的无参构造器3,使用构造器不需要对所有的属性进行初始化,因为在调用完构造器之后,即便是没有手动初始化,也会自动对定义的属性赋值4,如果只定义一个有参的构造器,那么默认的无参构造器就无法使用也就是无法使用new 类名();来定义对象5,可以定义多个构造器,使用方法重载的方式定义6,可以在

2020-08-30 08:46:49 197

原创 java基础之数据类型、变量、运算符

八大基本数据类型整型:byte short int long浮点型:float double字符型:char布尔值:boolean整数类型:整型在计算机的存储方式:第一位为符号位,其余为数值为计算器利用补码来表示一个整型1,正数 原码,补码,反码一致2,负数 符号位不变 ,反码和原码按位取反,补码在反码基础上加1(一字节为八个比特位)byte 1字节 -2^7 到 2^7-1short 2字节 -2^15 到2^15-1int 4字节 -2^31 到2^31-

2020-08-15 15:35:54 115

原创 利用云服务器(Centos)和tomcat搭建简易web网站

利用云服务器(Centos)和tomcat搭建web网站文章目录1 为云服务器添加Java jdk 如果已经安装好java jdk请忽略第1条 1,安装jdk 在命令行输入:yum install java-1.8.0-openjdk* -y 开始下载jdk 2,检查jdk 在命令行输入:java -version ![java 环境](https://img-blog.csdnimg.cn/20200724074921649.png) 可以查看jdk是否安装成功2 上传tomcat

2020-07-25 11:53:26 306 1

空空如也

空空如也

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

TA关注的人

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