自定义博客皮肤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)
  • 收藏
  • 关注

原创 操作系统的存储器管理

文章目录一 多层结构存储器二 存储器的分配方式1. 连续分配存储管理2. 对换技术3. 分页存储管理(重点)4. 分段存储管理5. 段页式存储管理(重点)三 虚拟存储器一 多层结构存储器计算机运行时,几乎每条指令都要设计存储器的访问,因此存储器的速度必须要能和处理机运行速度相匹配,不然就会影响处理机的运行,并且存储器的容量要足够大,还得便宜,目前肯定是无法满足,所以现代操作系统几乎都采用多层结...

2019-12-31 17:10:25 933

原创 优先级位图算法

文章目录算法的由来优先级位图算法算法的由来我是在学习嵌入式操作系统这门课知道优先级位图算法的,可能描述的啰嗦,将就着看吧!这个算法用来对操作系统的任务进行调度。在μC/OS-II中是这样的,每一个任务都有一个优先级,但是每一个优先级只能有一个任务,那么如何让具有最高优先级的任务先执行。系统中每一个任务都有一个任务控制快TCB,可以将就绪的TCB放进就绪队列,然后处理器执行的时候从就绪队列中选择...

2019-12-26 20:26:46 2120

原创 Linux下C对进程的操作

文章目录获取当前进程的ID 和父进程ID进程的创建进程间的通信我将通过代码的方式说明一些进程的基本操作获取当前进程的ID 和父进程ID#include<stdio.h> #include<unistd.h> //包...

2019-12-24 16:54:32 672 2

原创 读《深入理解Java虚拟机》有感

对于一个学习Java并且不只想会增删改查的程序员来说,《深入理解Java虚拟机》就是一本圣书,一本必读的书。为什么我会这样说?首先,Java虚拟机是何等的重要,它是整个Java运行的基石,学习Java底层机制必须对它深刻的了解,但是国内这类的书籍是非常缺乏的,写的这么好的更加少。其次,这本书的内容涵盖的相对广泛且深入。从线程模型角度看待Java内存区域,详解字节码指令重排序、类加载、执行引擎、线程...

2019-12-18 20:23:52 451

原创 二叉树的非递归遍历和递归遍历

文章目录前言前序遍历递归非递归中序遍历递归非递归后序遍历递归非递归层序遍历前言二叉树的遍历有前序遍历、中序遍历、后续遍历、层序遍历。然后我们分别实现一下各种遍历的递归与非递归的方式,树节点定义如下:class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(...

2019-12-17 20:55:34 1039 4

原创 验证二叉搜索树(leetcode 98)

文章目录题目解析解法一解法二题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:示例 2:解析做这个题的时候,我的第一想法就是说验证左节点小于根,右节点大于根不就行了。但是这种想法是错的,比如下图的这种情况:很明显...

2019-12-17 11:06:01 290

原创 有序链表转换二叉搜索树

文章目录题目解析解法一解法一代码解法二解法二代码解法三解法三代码插件题目给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度...

2019-12-13 13:30:01 517

原创 分隔链表

文章目录题目解析拓展题目给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5解析这个题是链表分组的中等难度题,其实没...

2019-12-12 14:54:58 183 1

原创 K 个一组翻转链表(leetcode24,25)题解

题目25,24:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3-&...

2019-12-11 20:36:47 270

原创 合并K个排序链表

问题:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6题解:做这个题的时候,我们肯定做过合并两个排序链表噻,代码下面贴出来了的。这个题其实就是变向的做合并2个排序链表,只是看你...

2019-12-11 13:33:55 150

原创 删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?leetcode这道链表删除节点题中等难度,这个题挺好解的,两种解法:对链表进行两...

2019-12-11 12:41:30 138

转载 Linux下的shell编程详解

本文摘要本文主要从以下8 个方面介绍Linux下的shell编程:一、Shell 编程概述 二、Shell 关键字 三、Shell 变量 四、Shell 运算 五、Shell 语句 六、Shell 函数 七、Shell 调试 八、Shell 易错点一、Shell 编程概述shell编程是 Linux 下的一门脚本语言——Shell 脚本。这个脚本语言可以帮助我们简化很多...

2019-12-07 16:31:49 413

原创 一文看懂TCP/IP中的相关知识

前言学习到的东西如果能以自己的方式讲述出来,那就是真的理解了。记得没有学习计算机网络相关知识之前,对于这个模块的东西一片混沌,什么私有Ip,公网IP,路由器、交换机,MAC地址换七八糟的弄得我头大,后来经过系统的学习终于整明白了,写个博客分享一下吧!IP基础知识什么是IP?IP地址(英语:Internet Protocol)是一种在Internet上的给主机编址的方式,也称为网际协议地址。...

2019-12-04 22:05:30 729 1

原创 静态库与动态库混合链接

准备在linux下,终端完成c/c++的编译运行,如果使用到静态库与动态库,那么如何链接?这里以一个例子来完成讲述。假如当前位于test目录,且有a.h、a.c、b.h、 b.c,以及调用a、b中方法的main.c。每个文件的内容如下//a.c文件内容如下#include<stdio.h>void a(){printf("The first file a\n");}...

2019-12-02 21:44:22 1982 1

原创 Linux的常用命令

前言相信各位对Linux下各种命令一头雾水,一会yum,rpm,一会又dpkg,apt的,还有各种个样的文件操作,用户操作,包括我自己刚开始接触这些的时候,比如下载个什么软件都是按照教程操作,自己都不明白敲的命令是什么。所有经过一段时间的学习,将这些东西记录下来给需要的伙伴。一 软件安装相关Linux 有rpm、deb两种安装包,分别属于两个常用体系Centos(使用rpm)、Ubun...

2019-11-28 22:47:01 318 1

原创 gdb命令的使用

gdb的作用:启动程序,指定任意可以影响程序的参数 让程序在指定条件下暂停 测试程序停止时发生事情 改变程序内部变量,改正错误继续运行gdb的使用:gdb + 可执行文件 gdb + 可执行文件 + core gdb + 进程名 + 进程ID调试命令:break 设置断点: break function 设定到指定的函数 break linenum 设定到行号 ...

2019-11-28 11:10:48 177 2

原创 gcc/g++参数以及使用

c文件的执行c源文件到可执行一共需要经历4个阶段。使用gcc编译程序要经过预处理、编译、汇编、链接。预处理编译器主要加载头文件、条件编译、宏替换,使用:gcc -E main.c > main.i,编译编译过程中,编译器主要做语法检查和词法分析,没有问题之后将会翻译成汇编代码或者中间代码:gcc -S main.i -o main.s汇编汇编阶段将main....

2019-11-28 11:09:05 307

原创 Linux下的文件信息

Linux下一切皆文件,对文件信息的了解是非常重要的,如下代码所示的文件信息:lldrwxr-xr-x 6 root root 4096 0ct 20 2017 apt-rw-r--r-- 1 root root 211 0ct 20 2017 hosts 第一段第一个字母代表文件的类型 -:普通文件 d:目录文件 b:块特殊文件...

2019-11-26 20:59:41 122

原创 JVM中对象的内存布局

创建对象java程序中,创建对象的方式有很多,出了new之外,还可以通过反射机制、Object.clone、反序列化、Unsafe.allocateInstance等,当我们需要创建一个对象时,需要通过常量池定位类的符号引用,然后判断是否执行过类加载,类加载执行通过后,JVM就会为对象分配内存空间,空间的大小在在类加载完成时就已经确定。对象空间的分配策略决于垃圾收集器的算法实现,对于空间规...

2019-11-26 11:50:27 204 1

原创 队列同步器(AQS)理论与源码解析

前言AQS是AbstractQueuedSynchronizer的简称,提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,如图所示:在并发包中AQS有着非常重要的地位,本文就来深扒AQS的实现机制。正文同步器使用在这里以ReentrantLock为例,同步器的主要使用方式是继承并实现抽象方法管理同步状态,可以看下源码:同步器提供了三个用来管理同步状态的方法,分...

2019-11-23 16:08:22 299

原创 Synchronized的原理与锁优化

前言并发变成中,synchronized一直都是元老级角色,它一直被称为重量级锁,在1.6中对synchronized进行各种优化过后才改善了它的性能消耗。为了降低synchronized的性能消耗引入了偏向锁,轻量级锁,以及JVM底层对锁存储结构的更改。synchronized的使用java中一切皆对象,每一个对象都可以作为锁,这是synchronized实现的基础,一般都隐氏的指定...

2019-11-23 16:07:49 161

原创 锁的内存语义

本文将结合源码分析锁的底层实现机制,对于基本的使用不介绍锁的内存语义众所周知,锁可以让临界区互斥执行。在这里将介绍锁的另一个功能:锁的内存语义锁是java中并发编程中非常重要的同步机制,锁除了临界区的互斥执行,还可以完成线程间的通信,如下代码class MonitorExample{ int a = 0; public synchronized...

2019-11-23 16:07:14 126

原创 java垃圾回收机制

对象的内存布局 新建对象的方式:new 反射机制 Object.clone 反序列化 Unsafe.allocateInstance,Object.clone和反序列化都是复制已有的数据初始化新建对象的实例字段,Unsafe.allocateInstance方法没有初始化实例字段,new和反射机制通过调用构造器初始化字段 调用构造器时将优先调用父类构造器直到Object,所以new...

2019-11-23 16:03:07 142 1

原创 JVM内存区域

前言java并发是基于JMM支撑的,为了更好的理解并发的相关知识,我又从头整理了下JVM的相关知识,所以在分析的过程中我想结合线程的角度。运行时数据区Java虚拟机运行时数据区(图片来自网络):方法区:线程共享,执行java源代码时,首先将java编译成class文件加载到Java虚拟机中,类的元数据会被存放于方法区,类的Class对象存放在堆中,实际运行时,线程执行方法区中的代码...

2019-11-23 16:00:22 97

原创 volatile的实现原理

volatilevolatile和synchronized关键字在并发编程中扮演着非常重要的角色,volatile可以说是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性(一个线程修改某个变量的值,对于另一个线程是可见的)。volatile的特性volatile禁止指令的重排序 重排序:指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段 源...

2019-11-23 15:59:45 127

原创 JVM解释方法的执行

前言class文件被加载到内存中,JVM如何执行类方法?下面我们来看一下方法的人生。重写与重载重写与重载对与我们并不陌生,java作为面向对象的语言,有封装、继承、多态三大特性,而重写是多态的一个体现,而重载是参数不同的同名方法。重载但是对于JVM并没有重载这个概念,在源代码编译时就已经指定了实际的方法,那么指定的具体过程是怎么样的呢?编译器根据传入参数的声明类型(注意与实际类型...

2019-11-23 15:57:22 206

原创 查看jdk动态代理类的内容

如果要看动态代理请转移阵地:https://blog.csdn.net/qq_41861259/article/details/103096437如果要看动态代理请转移阵地:https://blog.csdn.net/qq_41861259/article/details/103049293在看jdk动态代理源码的时候就一直想看到生成的代理类是什么样子的,所以我就查了一些方法,在这里分享给也有...

2019-11-23 15:47:38 499

原创 jdk中的动态代理源码分析

前言图片来自https://www.cnblogs.com/maohuidong/p/7992894.html代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对这个对象的访问。为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同...

2019-11-23 15:33:10 151

原创 java反射机制源码分析

前言我们先对前几天的学习进行总结,前几天我们主要结合源码学习了java中的集合,重点分析了HashMap散列桶的实现,还让大伙儿去看红黑树。今天就来学习java反射相关的东西,反射可是java一个很重要的高级特性,很多框架都是基于反射实现的,提高对反射相关机制的了解也有利于我们将来造轮子。接下来我们结合源码以及java虚拟机来分析反射。定义JAVA反射机制是在运行状态中,对于任意一个实...

2019-11-13 22:36:22 375 2

原创 虚拟机中的类加载机制

前言虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类加载步骤class文件通过类加载器加入到内存区域,类加载的过程是很复杂的,类的生命周期总共包括如下阶段加载:在加载阶段,JVM通过类的权限定名获取字节流,然后将字节流展示的静态存储结构转化为方法区的运行时数据结构,然后在堆中...

2019-11-13 15:41:14 119

原创 java集合

前面集合的重要性不言而喻,我们在日常的开发中总离不开他们,面试中也是重点,但是我们这里只分析非并发包中的集合。概述HashMap,TreeMap都有红黑树实现的,如果小伙伴对红黑树有兴趣,请移步:https://blog.csdn.net/qq_41861259/article/details/103008703,我们都知道面试时,容器源码是非常重要的问点,所以我打算利用这次机...

2019-11-12 10:04:26 129

原创 红黑树

前面终于,经过几天的钻研红黑树的相关只是后,我对红黑树有了基本的掌握。有句话说的是“如果能把学到的东西对别人也能讲明白,那就是真的学会了”。因此,为了能和大家一起学习,为了知识的巩固,我想把学到的知识完整的讲述一遍。最后希望通过这个分享能help some people(including myself)。正文什么是红黑树?红黑树是一种含有红黑结点并能自平衡的二叉查找树。《数据结构与算...

2019-11-11 15:55:32 119

原创 leetcode51

n皇后问题研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例:输入: 4输出: [[".Q..", // 解法 1 "...Q",...

2019-10-29 22:26:16 280 1

原创 进程状态

进程定义:在多到程序环境中,程序并发执行,失去封闭性、具有间断行、运行结果不可再现行,为了让程序能狗并发的执行引入了进程的概念为了让每个程序(包含数据)能够单独的运行,OS为他们分配了进程控制快(PCB),因此程序段、数据段、PCB构成了进程的实体简称进程状态:进程的各个状态和转化图:管理OS中对于每个资源和进程都设置了数据结构--> 资源信息表或进程信息表,包括资...

2019-10-28 16:18:20 274

原创 Reactor多线程模型

之前讲了Reactor单线程模型的优缺点以及实现,接下来看看Reactor模型的优化和改进这里有两步改进,先贴出第一次改进的图(借用),这两张图是一个意思,提出一个线程来接收请求以及读写,然后由线程池来处理具体的业务,具体的代码就不贴的,下面贴出最终优化的代码,这个部分相对简单,只需要一个selector负责注册接收,然后交给Worker Thread执行就行了进一步的改进就是,用...

2019-10-08 18:56:42 231

原创 Reactor单线程模型

看这篇博客建议先看下netty(一)中的几种网络IO模型Netty是典型的Reactor模型结构,Reactor模式也叫反应器模式,大多数IO相关组件如Netty、Redis在使用的IO模式。接下来我们看下原始多线程IO模型实现,以及单线程Reactor模型的优缺点以及实现最原始的多线程IO模型,服务器用一个while循环,不断监听端口是否有新的Socket连接,当有连接时处理对应的...

2019-10-08 17:24:00 561

原创 IO的几种模型

五种网络IO模型对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理阻塞IO(同步) 非阻塞IO(同步IO) IO复用(同步IO)I/O是指网络I/O,多路指多个TCP连接(即socket或者channel),复用...

2019-10-08 15:04:36 201

原创 Java虚拟机常用参数

前言再笔试以及日常的开发工作中,我们多少会用到一些问题,而解决问题的根本就是寻找问题的根源,在这里我将日常使用的性能监测工具以及虚拟机用到的调优参数罗列出来,希望对大家有所帮助。性能监控常用工具javap:将class文件返汇编为我们可读格式的工具,默认打印所有非私有的字段和方法,-p 私有的也打印 - v打印所有信息,如果只是查看字节码-c,Code ToolsASM Visual...

2019-10-07 22:38:25 133

空空如也

空空如也

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

TA关注的人

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