自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

写后端的小学生

永不懈怠

  • 博客(320)
  • 收藏
  • 关注

原创 操作系统(总结)

概述操作系统基本特征并发与并行并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令;并行需要硬件支持,如多流水线或者多处理器;操作系统通过引入进程和线程,使得程序能够并发运行;共享共享是指系统中的资源可以被多个并发进程共同使用;有两种共享方式:互斥共享和同时共享;互斥共享的资源称为临界资源,例如打印机等,在同一时间只允许一个进程访问,需...

2018-08-13 08:48:32 1578

原创 数据库系统原理

事务事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚;ACID1. 原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚;回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可;2. 一致性(Consistency)...

2018-08-13 08:48:25 3362

原创 8.Java容器-Set详解

       本文主要讲Set的三个子类:       HashSet:底层数据结构是哈希表(是一个元素为链表的数组) + 红黑树;       TreeSet集合:1.底层数据结构是红黑树(是一个自平衡的二叉树);2.保证元素的排序方式;       LinkedHashSet集合:底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成;HashSet       1.实现Set接口;  ...

2018-05-29 11:00:33 1902

原创 6.Java容器-TreeMap

概述      1.非同步;      2.TreeMap实现了NavigableMap接口,而NavigableMap接口继承着SortedMap接口,所以TreeMap是有序的;      3.TreeMap底层是红黑树,它方法的时间复杂度都不会太高:log(n);    4.TreeMap的构造器可以接受一个Comparator参数用以决定key的顺序,如果没有指定,那么尝试将key强转为C...

2018-05-28 20:39:52 1236

原创 5.Java容器-LinkedHashMap

LinkedHashMap概述       LinkedHashMap是HashMap的子类,内部使用双向链表进行顺序的维护,内部类Entry为HashMap的Node的子类;       底层是散列表和双向链表,插入的顺序是有序的(底层链表致使有序),和HashMap一样,允许key和value为null,初始容量和装载因子对LinkedHashMap的性能影响很大;也是非同步的,也可以调用Co...

2018-05-28 17:09:43 1264

原创 10.Java永久代去哪了

      在Java虚拟机中,类包含了其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表;      在过去(当自定义类加载器使用地不是很普遍的时候),类几乎是静态的,并且很少被卸载和回收;因此类可以被看做是“永久的”;另外由于类作为JVM实现的一部分,它们不由程序来创建,因此它们也被认为是“非堆”的内存;      在JDK...

2018-05-16 17:04:10 1902

原创 7.Java容器-ConcurrentHashMap

前言线程不安全的HashMap           在多线程环境下,HashMap的put操作可能会引起死循环,导致CPU利用率接近100%;         因为多线程可能会导致HashMap的Entry链表在扩容的时候,形成环形数据结构,这样,Entry的next节点永远不为空,获取Entry的时候就会产生死循环;效率低下的HashTable和Collections.synchronizedM...

2018-05-15 14:52:22 1204

原创 7.Spring MVC处理请求的过程

       本文将分析Spring MVC是如何处理请求的;       首先,分析HttpServletBean,FrameworkServlet和DispatcherServlet这三个Servlet的处理过程;       这样大家就可以明白从Servlet容器将请求交给Spring MVC一直到DispatcherServlet具体处理请求之前都做了什么;       最后再重点分析Sp...

2018-05-13 21:58:45 3522

原创 4.Java容器-HashMap详解

HashMap概述        HashMap是基于哈希表和Map接口实现的;不保证有序;与HashTable最大的区别在于,非线程安全和允许null作为key和value;      如果需要同步的HashMap,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap        在JDK1.6中,Ha...

2018-04-19 10:49:25 2983 1

原创 6.Java内存模型(JMM)-指令重排

       在执行程序时,为了提高性能,处理器和编译器常常会对指令进行重排序;当然不能随意重排序,指令重排需要满足以下两个条件:       1.在单线程环境下不能改变程序运行的结果;       2.存在数据依赖关系的不允许重排序;       其实这两点可以归结于一点:happens-before规定的顺序不能改变,其他的JMM允许任意的排序;      从硬件架构上来说,指令重排序是指CP...

2018-04-18 15:27:00 1464

原创 3.Java容器-Map详解

Map与Collection的区别       1.Collection被称为集合,Map被称为映射;       2.Map存储的元素是键-值对,键是唯一的,值可以重复;       3.Collection存储的元素是单独出现的;Set不可重复,List可以重复;       4.Map里面的所有的操作都是针对键的,而不是针对值;Map常用的方法散列表       Set也是基于Map来实现的...

2018-04-17 15:30:59 1349

原创 2.Java容器-List详解

       本文主要介绍List的三个子类:ArrayList,LinkedList和Vector;ArrayList详解       ArrayList的底层实现就是一个数组,但有扩容的概念,能够实现动态地增长;ArrayList的属性 private static final long serialVersionUID = 8683452581122892189L; /**...

2018-04-15 23:00:08 1324

原创 1.Java容器-概述

       容器主要有两种:Collection和Map;       Collection又分为Set,List和Queue;Collection系列数组与Collection(集合)的区别长度       数组的长度是固定的;       集合的长度可变;元素的数据类型       数组只能存储同一种数据类型, 一个集合可以存储不同类型的数据;      数组可以存储基本数据类型,也可以存储...

2018-04-15 16:23:27 1260

原创 6.内存回收的具体实现-垃圾收集器

       上图展示了7种用于不同分代的垃圾收集器;       如果两个收集器之间存在连线,这说明它们可以搭配使用;             虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器;Serial收集器       具有两个特点:       1.只会使用一个线程去完成垃圾回收工作;       2.在进行垃圾回收的时候,必须暂停其他所有的工作线程,直至它收集结束;Stop...

2018-04-01 18:50:03 1021

原创 2.Java堆对象分配,布局和访问的全过程

对象的创建       这里说的对象指的是普通Java对象,不包括数据和Class对象等。       类加载过程:虚拟机遇到new指令,首先去检查new指令的参数是否能在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否已被加载,解析和初始化过。如果没有,那么先执行相应的类加载过程。       堆内存分配:在类加载检查通过后,要创建的对象所需的内存大小已经确定了,虚拟机将一块确定大小...

2018-03-31 14:51:08 1272

原创 1.JVM优化-JVM运行时数据区域

       内存动态分配和垃圾收集技术是JVM的关键技术运行时数据区域       Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。每个区域都有各自的用途,以及各自的创建和销毁时间。有些区域随着虚拟机进程的启动而建立,有些区域则依赖于用户线程的启动和结束而建立和销毁。程序计数器(Program Counter Register)      程序计数器是一块较...

2018-03-27 23:29:58 945 1

原创 1.详解Servlet

前言       Servlet就是Server+Applet的缩写,表示一个服务器应用。Servlet就是一个代码规范,我们按照这个规范写的程序就能在服务器上运行。Servlet接口public interface Servlet { //在容器启动的时候被调用,仅调用一次 //当load-on-startup设置为负数或不设置的时候,会在Servlet第一次调用时才会被调用,仅...

2018-03-13 22:53:54 2158 2

原创 18.进程-有名管道

有名管道打破了无名管道的限制,进化出了一个实实在在的 FIFO 类型的文件。这意味着即使没有亲缘关系的进程也可以互相通信了。所以,只要不同的进程打开 FIFO 文件,往此文件读写数据,就可以达到通信的目的;不过 FIFO 文件与我们最开始讲的本地文件通信还是有着本质的区别,它长着普通文件的脑袋,却有着无名管道的基因;FIFO文件的特性文件属性前面标注的文件类型是 p,代表管道文件大小是 0fifo...

2018-07-07 19:07:32 494

原创 17.进程-无名管道

无名管道适合有亲缘关系的进程(通常是父子进程)间通信了;实际上,你或多或少的都用过管道这种通信方式,比如你在使用的 linux 命令中的管道连接符 |;什么是管道之前提到过的,使用本地文件进行进程间通信的方式,那么就可以把管道理解成位于进程的内核空间的“文件”;给文件加引号,是因为它和文件确实很像,因为它也有描述符。但是它确实又不是普通的本地文件,而是一种抽象的存在;当进程使用 pipe 函数,就...

2018-07-07 18:48:58 324

原创 16.进程-进程间通信概述

进程间通信,也就是大家常说的 IPC(Inter Process Communication),指的是不同的进程间进行交流,本质上就是进程之间发送和接收数据;本质上,信号也是属于进程间通信的一种,但信号能传递的信息量实在是太少太少了;不同进程间的进程空间是独立的。对于Linux 来说,进程的 0-3GB 空间是互不相干的,3GB-4GB 是内核空间,属于所有进程间共享地带;进程空间的独立性,以及内...

2018-07-07 16:47:05 538

原创 15.进程-孤儿进程与僵尸进程

正常情况下,子进程是通过父进程创建的,子进程再创建新的进程;子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束;当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态;孤儿进程:父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程;孤儿进程将被init进程(进程号为1)所收养,并由ini...

2018-07-07 15:11:42 209

原创 14.进程-fork函数与文件共享

提个问题:如果进程在fork之前打开了一些文件,那么 fork 完之后,这些文件的描述符是共享的,还是不共享的?父进程和子进程的空间是隔离的,所以,打开的文件也应该是不共享的吧?答案是NO;假设现在是Linux32位系统,进程空间有4G的大小;这4G空间并不是完全隔离的;实际上进程空间被分割为用户空间和内核空间。对于32 位 Linux 来说,从 0-3GB 的空间是用户空间,从 3GB - 4G...

2018-07-07 13:44:00 265

原创 31.IP协议和IP数据报的接收

IP协议是 TCP/IP 协议族中最核心的协议,TCP、UDP、ICMP 等众多协议都需要依赖它而工作;IP首部

2018-07-01 23:21:35 282

原创 13.进程-fork函数的原理和进程空间

进程空间这里说的进程空间,指的是进程虚拟地址空间;每个进程都有自己的4GB 虚拟地址空间,这里指的是32位系统下的进程;每个进程的进程虚拟地址空间是相互隔离的,互不影响;...

2018-06-29 22:44:04 310

原创 12.进程-进程的产生(fork函数)

上篇文章中的a.out进程实际上是由终端 bash 进程创造出来的;那 bash 进程的父进程又是谁呢?如果你不断追溯下去,你就会发现,最终的那个进程就是 pid 为1 的 init 进程,而 init 进程,又是由一个 pid 为 0 的进程通过系统调用 fork 生成的,它也是第一个由 fork 函数创造出来的进程;fork 是用户创建进程的唯一方法(万事都有特例,现阶段可忽略);fork函数...

2018-06-29 22:27:17 373

原创 28.TCP协议-保活定时器

保活定时器

2018-06-25 22:37:35 517

原创 27.TCP协议-糊涂窗口综合症

糊涂窗口综合症

2018-06-25 22:37:15 678

原创 26.TCP协议-持续定时器

持续定时器

2018-06-25 22:36:56 613

原创 25.TCP协议-超时与重传

超时与重传

2018-06-25 22:36:14 794

原创 24.TCP协议-快重传与快恢复

快重传与快恢复

2018-06-25 22:35:54 1017

原创 23.TCP协议-两个拥塞控制算法:慢启动和拥塞避免

慢启动与拥塞避免

2018-06-25 22:35:30 3454

原创 22.TCP协议-观察慢启动的发包过程(拥塞控制算法)

慢启动——观察

2018-06-25 22:34:43 685

原创 21.TCP协议-拥塞控制概述

概述在学习拥塞控制前,我们假设:接收方总是有足够大的缓存空间,接收方的接收窗口大小总是很大——这意味着接收方对数据来者不拒。在基于这样的理想条件上,如果发送方发送的数据接收方没有收到,那么大抵上可以判断为网络出现了拥网络拥塞是怎么来的图1 某个小型局域网 图 1 所示的是一个典型的小型局域网,SW 表示交换机,R 表示路由器。基于第 1 节中所述的假设,如果 PC1 给主机 PC3 发送 TCP ...

2018-06-25 22:34:07 624

原创 111.二叉树的最小深度(Minimum Depth of Binary Tree)

题目描述给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度  2.解题思路...

2018-06-19 22:29:04 541

原创 19.TCP协议-PSH标志

PSH标志

2018-06-14 20:54:04 973

原创 18.TCP协议-滑动窗口(抓包分析)

滑动窗口(抓包分析)

2018-06-14 20:53:36 1177

原创 17.TCP协议-滑动窗口(基础)

滑动窗口(基础)

2018-06-14 20:53:06 753

原创 16.TCP协议-Nagle算法

Nagle) 

2018-06-14 20:52:06 739

原创 15.TCP协议-迟到的ACK-Linux

迟到的ACK-Linux

2018-06-14 20:51:21 782

原创 14.TCP协议-迟到的ACK-Windows

迟到的ACK-Windows

2018-06-14 20:50:40 1464

空空如也

空空如也

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

TA关注的人

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