自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 问答 (1)
  • 收藏
  • 关注

原创 Vue2学习笔记

vue2的从零到一的学习笔记。

2023-07-24 13:27:14 211

原创 CSS动画

要求元素状态有变化,如hover。

2023-04-20 15:39:11 482 1

原创 CSS效果属性

x轴偏移,y轴偏移,模糊像素,扩展像素,rgb(x,x,x,透明度)inset x轴 y轴 模糊 扩展 rgb 内阴影。

2023-04-18 10:37:00 353

原创 第九章-DOM与CSS

文档中每个元素节点都有一个属性style。style属性包含着元素样式,查询这个属性将返回一个对象而不是一个简单的字符串。样式都存放在这个style对象的属性里。通过style属性获取样式有很大的局限性,只有把CSS style属性插入到标记里,才可以用DOM style属性去查询那些信息。但是我们用DOM设置的样式,就可以用DOM再把它们检索出来。永远是一个字符串。style 属性的值必须放在引号里,单引号或双引号都可以。

2023-04-03 14:30:52 400

原创 CSS布局

还有一种是都用div来模仿表格,通过给属性赋值来达到表格的效果,

2023-03-30 22:31:29 153

原创 CSS基础

解析方式:从右往左解析,加快匹配速度。

2023-03-29 20:34:36 274

原创 2-HTML

【代码】2-HTML。

2023-03-28 19:14:43 492

原创 第七章 动态创建标记

即使把document.write语句挪到外部函数,也还是需要在标记的body部分使用script标签才能调用那个函数。我们把这个函数保存到外部JS文件中,为了调用这个函数,必须在标记里插入script标签:

2023-03-20 21:09:16 208

原创 第五章 最佳实践

JS用window对象的open()方法来创建新的浏览器窗口。第一个参数:要打开网页的url。第二个参数:窗口的新名字,可以通过这个名字与新窗口通信。第三个参数:是一个字符串,内容是新窗口的属性,尺寸…伪协议真协议如http,伪协议则是一种非标准化的协议

2023-03-15 17:20:13 251

原创 第四章 案例研究

再给某个元素添加事件之后,事件被触发,执行相应的JS代码。被调用的JS代码可以返回一个值,这个值将会被传递给到事件处理函数。如上代码:这个链接被点击时,如果那段JS代码返回的值是true,onclick事件处理程序就认为“这个链接被点击了”;反之如果返回的是false,onclick事件处理函数就认为这个链接没有被点击“。

2023-03-14 21:29:57 165

原创 第三章 DOM

DOM编程艺术

2023-03-14 18:09:04 176

原创 计算机组成原理12——冒险和预测

冒险和预测流水线的设计,会带来性能的提升,也会带来相应的冒险。冒险有三种:结构冒险、数据冒险、控制冒险。结构冒险如上图在第一条指令执行到访存的时候,第四条指令执行取指操作。而访存和取指,都要进行内存数据的读取,但是内存只有一个地址译码器作为地址输入,所以没办法同时执行第一条指令的访存和第四条指令的取指操作。内存的访问速度比CPU慢的多,所以现代CPU不会直接读取主内存。它会从主内存把指令和数据加载到高速缓存中,所以后序的访问就都是访问高速缓存。可以通过这一点来解决结构冒险。解决方法:直

2022-03-27 15:56:17 2491 3

原创 考研笔记-数据结构-线性表

线性表的定义是具有相同特性元素数据元素的一个有限序列。序列中元素的个数叫做线性表的长度。用n表示,n>=0。线性表的存储结构顺序表,随机访问特性,占用连续的存储空间。链表,不支持随机访问,动态随机分配存储空间。链表的分类注意事项单链表删除结点,必须要知道这个结点的前驱结点才可删除。单链表插入结点,只需要知道此结点的地址即可。元素逆置,可以用单链表的头插法。也可以用递归函数逆置。寻找一个数组中出现次数最多的数,循环遍历数组,将遇到的第一个元素存入c,记NUM为1。继续向后遍

2022-03-05 22:34:06 303

原创 计算机组成原理11——流水线

面向流水线设计单指令周期处理器一条指令的执行,是由 “取得指令——指令译码——执行指令” 。执行这个过程,至少需要花费一个时钟周期。这样,我们一个时钟周期可以执行一条指令,这种设计思路的处理器,就叫做单指令周期处理器。不同指令的执行时间不同,但是我们要让所有指令都在一个时钟周期内完成,所以只能把时钟周期和执行时间最长的指令设置成一样。现代处理器流水线设计我们知道指令的执行过程是“取指令-译码-执行”。其实这三步骤也可以再细分。取指令的时候,需要一个译码器把数据从内存里取出来,写入到寄存器。在

2022-02-27 23:24:11 529

原创 计算机组成原理10——建立数据通路

建立数据通路指令周期(Instruction Cycle)计算机执行一条指令的过程,可以分解为一下这样及步骤。取得指令(Fetch),也就是从PC寄存器里找到对应的指令地址,根据指令地址从内存中把具体的指令加载到指令寄存器中,然后把PC寄存器自增。指令译码(Decode),也就是根据指令寄存器里面的指令,解析成要进行什么样的操作。具体要操作哪些寄存器,数据或者内存地址。指令执行(Execute),对应具体的指令,进行算术逻辑操作、数据跳转或者直接的地址跳转。重复以上三步骤。“Fetch-D

2022-02-26 15:58:46 1777

原创 计算机组成原理09——浮点数和定点数

定点数和浮点数定点数我们用4个比特来表示09的整数,那么32比特就可以表示8个这样的整数。然后我们把最右边的2个09的整数当成小数部分,把左边的6个09的整数,当成整数部分。这样32比特就可表示0999999.99的1亿个实数了。浮点数32比特表示单精度的浮点数就是float或者float32类型。64比特表示双精度的浮点数就是double或者float64类型。单精度32比特可以分成三部分。第一部分符号位s,用来表示正负数。在浮点数里,所有的浮点数都是有符号的。第二部分指数位e,8比特可以

2022-02-25 10:12:23 605

原创 计算机组成原理08——动态链接

动态链接之前讲程序的链接,是把对应的不同文件内的代码段合并到一起,最后成为可执行文件。这样同样功能代码只要写一次,如果多个程序都要用,我们就可以复制多份来供多个程序合并。这样的话,同样功能的代码就需要再装载一边,再占一遍内存空间。链接可以分为动、静不同的程序里,同样功能的代码,不需要各占一份内存空间。这种新的链接方法叫做动态链接,相应的合并代码段的方法就是静态链接。不同于静态链接,动态链接在程序运行时重定位。动态链接过程,链接的不是目标文件代码,而是加载到内存中的共享库。在Windows下是.dl

2022-02-22 18:25:26 424

原创 计算机组成原理07——程序装载

程序装载程序装载难处要想装载器解析ELF或者PE格式的可执行文件,把对应的指令和数据加载到内存。装载器需要满足两个要求。第一,可执行程序加载后占用的内存空间应该是连续的。第二,我们需要同时加载很多个程序,并且不能让程序自己规定在内存中加载的位置。如何解决难处?我们可以在内存中,找到一段连续的内存空间,然后分配给装载的程序,把这段连续的内存空间地址和整个程序指令里指定的内存地址做一个映射。我们把指令里用到的内存地址叫做虚拟内存地址,实际在内存硬件里面的空间地址叫做物理内存地址。我们维护一个虚拟

2022-02-22 10:17:22 352

原创 计算机组成原理06——程序的链接

ELF和静态链接编译、链接和装载:拆解程序执行“C语言代码——汇编代码——机器码”这个过程在计算机上是又两部分组成的。第一部分由编译、汇编、链接三个阶段组成。链接器——把多个目标文件以及调用的各种函数库链接起来。三个阶段完成后,我们生成了可执行文件。(编译生成的是目标文件)第二部分通过装载器把可执行文件装载到内存中,CPU从内存中读取指令和数据,来开始真正执行程序。ELF格式和链接:理解链接过程程序最终通过装载器变成指令和数据。在Linux下,可执行文件和目标文件所使用的是ELF(Execu

2022-02-21 18:50:34 386

原创 计算机组成原理05——函数调用

函数调用需要程序栈的原因程序中函数要相互调用,如何能保证函数A在调用函数B,B函数执行完后返回到A中继续执行剩下的代码?我们的解决方法是:在内存中开辟一段空间,用栈这个后进先出的数据结构,在程序调用函数之前,我们都把调用返回后的地址压栈。函数执行完后,就把压入的地址出栈,自然而然就能继续执行剩下的代码了。实际的程序中,压栈的不只有函数调用完成后的返回地址。在函数A调用B的时候,需要传输一些参数,这些参数在数据寄存器不够用的时候也会被压入栈中。整个函数A所占用的所有的内存空间,就是函数A的栈帧。同时栈

2022-02-21 17:56:58 389

原创 计算机组成原理04——指令跳转

指令跳转CPU如何执行指令粗糙的讲,CPU其实就是由很多功能不同的寄存器构成的。PC寄存器它用来存放下一条需要执行的计算机指令的内存地址。指令寄存器存放当前正在执行的指令。条件码寄存器里面一个个标记位,存放CPU进行算术或者逻辑运算的结果。还有我们通常根据存放的内容来取名的寄存器。比如整数寄存器、浮点数寄存器、地址寄存器,还有既能存放数据又能存放地址的通用寄存器。在程序执行的时候,CPU会根据PC寄存器里的地址,从内存里把需要执行的指令读取到指令寄存器,然后开始顺序读取下一条指令。程序的执行

2022-02-18 17:03:17 1105

原创 计算机组成原理03——计算机指令

计算机指令CPU就是一个执行各种计算机指令的机器。计算机指令,就好比CPU能够听懂的语言,我们也可以把它叫做机器语言。不同的CPU能听懂的语言不一样。比如我们的个人电脑用的是Intel的CPU,苹果手机用的是ARM的CPU。这两者能听懂的指令就不一样。CPU能够支持的语言就是计算机指令集(Instruction Set)。现代代码如何变成机器码首先我们的代码要编译(Compile)成汇编代码(ASM,Assembly Language)。汇编代码再用汇编器(Assembler)翻译成机器码(Ma

2022-02-18 10:54:39 2261 1

原创 计算机组成原理02——谈谈性能

性能是什么?我们有两个指标来衡量计算机的性能第一个是响应时间也叫执行时间,可以理解为让计算机 “跑得多快”第二个是吞吐率也叫带宽,可以理解为计算机 “搬得更多”计算机计时单位:CPU时钟我们先来看一个公式:​ 程序的CPU执行时间 = CPU时钟周期数(CPU Cycles) * 时钟周期时间(Clock Cycle)时钟周期时间从哪来?CPU都有一个主频,这个主频就是CPU每秒可以执行的简单指令的数量。例如:一个CPU主频是2.8GHz,那么CPU在1秒时间内,可以执行的简单指令的数量是2.

2022-02-18 09:16:59 433

原创 计算机组成原理01——冯·诺伊曼体系结构

组装电脑 冯诺伊曼

2022-02-17 18:58:23 243

原创 操作系统——笔记day9

Linux的自旋锁和信号量Linux的原子变量linux的一个原子类型变量atomic_ttypedef struct{ int counter;}atomic_t;//常用的32位的原子变量类型#ifdef CONFIG_64BITtypedef struct{ s64 counter;}atomic64_t;//64位的原子变量类型#endif上述原子变量类型不能用普通的代码去读写加减,而是要用Linux专门提供的接口函数去操作//原子读取变量中的值static_always

2022-02-07 10:52:02 276

原创 操作系统——笔记day8

并发中,解决数据同步的方法方法一:原子操作把a++变成原子操作,要么不执行,要么一口气执行完实现原子操作无法依赖编译器,需要我们自己动手,x86有很多原子指令,我们只需要直接应用这些指令,用汇编代码写出对应的原子操作函数就可,而现代C语言已经支持嵌入汇编代码,所以在C函数中可以按照特定的方式嵌入汇编代码,实现原子操作//定义一个原子类型typedef struct s_ATOMIC{ volatile s32_t a_count;}atomic_t;//原子读static inlin

2022-02-05 15:17:49 103

原创 操作系统——笔记day7

Cache程序放在哪程序局部性原理:CPU大多数时间在执行相同的指令或者与此相邻的指令内存动态随机存储器,DRAM,根据电容存储电荷的多少来代表0和1与CPU数据吞吐量天差地别,内存是决定系统整体性能的瓶颈Cache可以通过一块小而快的存储器,放在CPU和内存之间,利用程序局部性原理,来缓解CPU和内存之间的性能问题,即Cache,高速缓存Cache中存放了内存中一部分数据,CPU在访问内存时要先访问Cache,如果Cache中有需要的数据就直接从Cache中拿,没有就从内存中读取数据,并同时

2022-02-05 09:59:22 365

原创 操作系统——day6

程序中的地址如何转化引入虚拟地址的原因如果一台计算机内存中只运行一个程序A,而且程序A的地址在链接时就可以确定,CPU实模式运行,每次运行程序都要装入那个确定的地址现在又放一道程序B,A和B各自运行一秒钟,就会产生一些问题1.如何保证A、B没有内存地址的冲突2.如何保证A、B不会互相读写各自的内存空间3.如何解决内存容量问题4.考虑扩展后的复杂情况解决方案:让所有程序都各自享有一个从0开始到最大地址的空间,这个地址空间是独立的,该程序私有的,其他程序看不到也不能访问该地址空间,这个地址空间和

2022-01-30 18:30:26 681

原创 操作系统——day5

CPU工作模式cpu工作模式有实模式、保护模式、长模式实模式又称地址模式,运行真实的指令,执行指令的真实功能,发往内存的地址是真实的实模式寄存器CPU是根据指令完成相应的功能,例如ADD,AX,CX这条指令,就是完成加法操作,AX,CX是这条指令的操作数,操作数可以是,寄存器、内存地址、常数通用寄存器:里面可以存放数据、地址参与运算程序指针寄存器(IP):始终指向下一条指令的地址栈指针寄存器(SP):始终指向当前运行的栈顶段寄存器(CS、DS、ES、SS):存放一个内存段的基地址CPU标

2022-01-30 11:43:16 1916

原创 操作系统——day4

Linux全景图Linux内核Linux的基本思想:一切都是文件,每个文件都有确定的用途,包括用户数据、命令、配置参数、硬件设备。支持多用户,各个用户对于自己的文件有自己特殊的权利,保证各个用户之间相互不影响,Linux可以使多个程序同时并独立地运行五大重要组件:系统、进程、内存、储存、网络,每个组件分成了许多模块模块之间的通信,主要是函数调用Darwin-XNU内核Darwin使用了微内核和相应的固件来支持不同的处理器平台,并提供操作系统原始的基础服务它由两套内核组成,Mach层与BSD层,

2022-01-28 23:07:36 1395

原创 操作系统——笔记day3

内核结构与设计内核中有什么内核是计算机资源的管理者,通过这些资源来看看内核应该有什么资源可以分为硬件资源和软件资源硬件资源:总线,负责连接各种其他设备,是其他设备工作的基础CPU,负责执行程序和处理数据运算内存,负责存储运行时的代码和数据硬盘,负责长久存储用户文件数据网卡,负责显示工作网卡,负责计算机之间的通信各种I/O设备,如显示器,打印机,键盘,鼠标等软件资源:计算机中各种形式的数据,如各种文件、软件程序综上内核组成的逻辑应该有:1.管理CPU,由于CPU是执行程序的,

2022-01-27 22:07:47 1736

原创 操作系统——笔记day2

HelloOSPC机的引导流程PC机加电 -> PC机 BIOS 固件 -> 加载可引导设备中的GRUB -> GRUB引导 -> 加载硬盘分区中的 Hello OS 文件Hello OS 引导汇编代码PC机上电后的第一条指令就是BIOS固件中的,它负责检测和初始化CPU、内存和主板平台,然后加载引导设备(硬盘)中的第一个扇区数据,到0x7c00地址开始的内存空间执行指令,在我们这里就是GRUB引导程序MBT_HDR_FLAGS EQU 0x00010003 ;1M

2022-01-26 20:51:30 622

原创 操作系统——笔记day1

程序编译过程gcc HelloWorld.c -E -o HelloWorld.i 预处理:加入头文件,替换宏gcc HelloWorld.c -s -c HelloWorld.s 编译:包含预处理,将C程序转换成汇编程序gcc HelloWorld.c -c HelloWorld.o 汇编:包含预处理和编译,将汇编程序转换成可链接的二进制程序gcc HelloWorld.c -o HelloWorld 链接:包含以上所有操作,将可链接的二进制程序和其它别的库链接在一起,形成可执行程序的文件程序

2022-01-25 20:28:45 191

原创 04.04. 检查平衡性

解题思路:要判断是不是平衡二叉树,要对每个子数进行比较,可以使用后序遍历,每到一个结点就判断左右子树的深度差是否满足平衡二叉树的要求/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solutio.

2021-10-12 21:03:59 57

原创 2的幂(递归,JAVA)

解题思路:1.明确这个函数是干什么的,它是判断输入是否是2的幂,然后返回一个true或者false的函数2.寻找递归终止条件,当 n == 1 的时候,返回的是true,当 n ==0 的时候 ,返回的false3.寻找“等价”关系式: 函数最终返回的真假 = 递归后返回的真假class Solution { public boolean isPowerOfTwo(int n) { if(n == 1){ return true; .

2021-09-11 18:08:02 438

原创 移除链表元素(递归,JAVA)

解题思路:1.该函数返回的是一个链表2.递归终止条件,当结点为null时返回null3.寻找“等价”关系式,最终链表 == (跳过val的)多个链表相加/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } *.

2021-09-11 10:12:54 188

原创 合并两个有序链表(递归,java)

解题思路:1.首先明确递归函数是干什么的,在这里它是返回一个链表2.递归终止条件,当一条链表遇到空的时候,说明这条链表已经比较完,此时,返回另一条链表剩余的结点即可3.寻找“等量”关系式,l1.next = mergeTwoLists(l1.next,l2); 和l2.next = mergeTwoLists(l1,l2.next);其实就是:最终的链表 = 好多个mergeTwoLists()加起来/** * Definition for singly-linked list. * publ.

2021-09-10 16:54:03 268

原创 反转单链表(递归,JAVA)

Eg:链表:1->2->3->4 经过反转后 4->3->2->1递归实现public class FanZhuanList { public static void main(String[] args) { Node first = new Node(); Node second = new Node(); Node third = new Node(); Node forth = new Node(); first.data = 1

2021-09-06 18:36:27 253

原创 2021-07-01

CF32ACF32B

2021-07-01 17:42:09 37

原创 CF32B Borze

题目描述:三进制数字符号在Berland很受欢迎。如果用borze编码表示电报的三进制数。数字 0,1,2分别被作为 . -. --你需要为borze编码解码。解题思路:可以用循环来判断编码方式,首先判断是 ’ . ’ 还是 ’ - ‘ 如果是’ - '接着再判断是 ’ . ’ 还是 ’ - ’ 就可以判断是哪三种编码方式#include <stdio.h>int main(void){ char arry[210]; int i = 0;

2021-07-01 17:40:35 195

空空如也

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

TA关注的人

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