- 博客(41)
- 收藏
- 关注
原创 2. 变量及作用域
程序块{}内部作用域可定义域外同名变量,在该快里就隐藏了就外部变量。访问和内部作用域的变量同名的全局变量,要用全局作用域限定。即用即定义,且可用表达式初始化。for循环可以定义局部变量。...
2022-07-15 11:12:47
245
原创 1. 头文件-注释-命名空间-标准输入输出流
为了防止命名冲突(出现同名),C++引入命名空间,(namespace),通过运算符限定某个名字属于哪个命名空间。C++头文件不必是.h结尾,例如C中的math.h,stdio.h在C++中被命名为cmath,cstdio。cin>>输入流与cout...
2022-07-15 11:01:59
436
原创 BGP防环机制
在涉及到网络协议时,环路一直是需解决的问题,一旦发生环路,将影响甚大,前辈们也为BGP设定了较为完善的防环机制。BGP的防环机制主要分为两种情况,AS间与AS内。AS间防环AS间防环的主要措施是记录经过的路径,也就是AS_PATH属性,一旦经过的router在AS_PATH则说明存在环路。AS内防环AS防环主要是通过一种称之为水平分割的方式,这种方式在那篇RIP防环机制的文章里已详述,这里简述方式,即IBGP peer不向IGBP peer发布从EBGP peer那里学来的路由,这样可以避免内部的环
2022-02-28 15:02:51
7693
原创 Linux下新建用户的默认配置
在新建用户时,仅需要user add newuser再指定密码就可以创建一个一般用户,如果并未给newuser指定任何信息,那么默认配置是从哪里来的呢?在/etc/default/useradd文件中。[root@localhost ~]# cat /etc/default/useradd# useradd defaults fileGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skelCREATE_MAIL_S
2022-01-06 17:25:23
1570
原创 centos8使用nginx部署VUE项目
安装nginx,这边采取较为就方便的rpm安装,安装完成后执行nginx -V,如果能看到版本则成功。rpm -ivh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.20.2-1.el8.ngx.x86_64.rpmsystemctl enable nginx.servicesystemctl start nginx.service安装完成后,我们将vue项目进行build。npm run build打包完成后,目录下.
2021-12-25 20:38:52
1414
原创 element的container布局铺满
element的container布局默认不铺满全屏,需要在类中添加属性。<template> <el-container class="el-container"> <el-header>Header</el-header> <el-container> <el-aside style="width: 200px">Aside</el-aside> <el
2021-12-23 09:01:31
2419
原创 django默认生成文件详解
上一章我们已经安装好了Django环境,本章将对Django框架自动生成的文件进行说明。这是成功创建后,项目文件夹的样子,接下来将着重介绍我们需要的部分。web_project(母目录)这是之前创建文件夹时取的名字,你也可以根据自己的需要自定义项目名。templates如果不使用VUE的情况下,这个目录下将存放前端的模板文件。venv这个目录是虚拟环境的相关文件。什么是虚拟文件呢?我们在实际开发中,本地可能会存在多个项目,各个项目所使用的Python版本,库的版本等可能会各不相同,存在冲突
2021-12-20 18:44:53
996
原创 Linux的负载平均值(load)详解
什么是负载平均值 两个关键词,其一是“负载”,即task(进程或线程,对应用户空间的treads)运行所需的系统资源(包括CPU、内存等),另一个是“平均”,某一段时间的平均值,Linux默认为1、5和15分钟的值。
2021-12-17 18:09:39
2561
原创 Centos8安装Postgresql
了解了下这个新兴的开源数据库,Postgresql,性能非常强劲,官网直接就说postgresql是世界最强的开源关系型数据库(国外么有广告法啊),实测了一下,的确比mysql性能高非常多。本文为centos8安装Postgresql的教程。下载源并安装dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpmdnf module l
2021-12-14 17:18:24
1235
原创 SQL查询语句执行顺序
FROM 和 JOINsFROM 或 JOINs第一个执行,确认查询数据的范围,如果涉及其它表则首先执行JOIN进行连接,生成临时表来进行下面的过程。WHERE从第一步的范围中按要求进行数据筛选。GROUP BY如果使用了 GROUP BY 分组,则会对之前的数据进行分组,统计等,其他数据则会在分组后丢弃.HAVING如果使用了 GROUP BY 分组, HAVING 会对分组后的结果继续进行筛选。SELECT以上步骤执行后便可以得到结果,SELECT对结果进行筛选或计..
2021-12-11 18:13:27
252
原创 SQL联合查询详解
在查询时,一个实体的数据往往存在于不同表中,需要将表连接起来,联合查询便是在此场景下使用。在开始联接前,先来讲讲表与表之间联接的条件。每个表中都会有标识一条数据的唯一字段,整个表中不会重复(可以想像一下身份证),称为主键(如果表中存在多个,可以设置)。借助主键与另一张表中具有相同数据的键值进行联接,从而实现联合查询。概念理论可能一脸懵,所以接下来会结合语句而谈。内联保留两个表都有的部分。select * from tableAjoin tableB on tableA.key = tableB
2021-12-10 22:21:55
9527
原创 I/O模型详解
网络IO:本质是socket读取,利用套接字(IP地址+端口号),将数据发到socket文件(自建),通过socket发送到远程主机,并且使用socket接受数据。每次IO都要经过两个阶段:将数据从磁盘文件先加载至内核内存空间(缓冲区),等待数据准备完成,时间较长。将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短。同步/异步关注的是消息通信机制● 同步:synchronous,调用者等待被调用者返回信息,才能继续执行(调用者主动问)。● 异步:asynchronous,被调用者通
2021-12-09 15:38:05
2526
原创 如何修改内核的拥塞控制算法
本文系统版本:[root@localhost ~]# cat /proc/versionLinux version 4.18.0-348.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-3) (GCC)) #1 SMP Tue Oct 19 15:14:17 UTC 2021下载链接:http://mirrors.aliyun.com/centos/8.5.2111/
2021-12-08 19:29:24
1205
原创 如何快速学习新技术
作为一名技术从业者,尤其身处计算机行业,发展突飞猛进,新概念、新技术层出不穷,需要持续学习,紧跟技术潮流,而拥有一套合适的学习方式,可以更加轻松,更省精力,这也是所谓的技术人员的“道法术”中的“术”,本文就将绕此而谈。为什么没有技术是无缘凭空出现,其出现必是为了解决业务中的某些问题,...
2021-12-06 14:49:41
801
原创 HTTPS、HTTP2详解
我们几乎每天都在网上冲浪,接收或发出大量的数据,而这些是怎样被表示并发送接收的的呢?今天就来聊聊处在TCP/IP模型应用层的HTTP协议。中文名:超文本传输协议,是万维网的基础。服务器与用户通过这个协议完成了数据点到点的传输,Restful API也是基于它而定的一种架构标准。接下来直接进入正题,从http1.1版本开讲。1.1的版本虽然已诞生许久,但依然经久不衰。其特点简而言之就是基于TCP连接,以请求-应答的方式进行交互,明文的方式进行传输,处理是无状态的。它的缺点也非常明显,其一,以明文的方
2021-12-05 22:41:51
3195
原创 RIP的防环机制详解
如何避免环路一直是网络中一个较为重要的话题,RIP协议作为一个历史悠久的协议,虽然已被淘汰,实际应用中鲜有见闻,但其有些思想,例如其防环机制,依然具有活力,被后来的协议所应用。水平分割这种方式的规制为不向原始路由更新的方向再次发送路由更新信息,即单向更新,单向反馈。定义最大值作为距离矢量协议的一员,RIP以跳数来作为度量值,RIP路由的最大生存跳数为15跳。当这个报文在网络中的传输跳数大于15时,则认定其不可到达,直接丢弃。这种方式在一定程度上解决了环路问题,但在达到最大值之前,网络中依然存
2021-12-04 18:39:14
3570
原创 DNS何时使用TCP或UDP
在上一篇文章DNS详解中提到DNS会用到TCP与UDP两种传输协议,本篇会详细说明为何如此。TCP与UDP的特点在详细了解原因之前,先来回顾下两者的优势与区别。TCP:优势:具有较为可靠的确认重传机制来保障数据传输,自身不限制报文大小; 劣势:需多次握手挥手,复杂的拥塞控制与流量控制,头部需20个字节,总体上延迟和开销较高。UDP:优势:仅需8字节头部,没有复杂的机制,总体上延迟与开销较低; 劣势:缺少保障数据传输的机制,不够可靠。DNS使用场景...
2021-12-03 16:59:15
459
原创 DNS详解
记住某台设备的IP地址是相当困难的,尤其是在较为复杂的网络中。因此专门设计了一种字符形式的主机命名机制,方便记忆。而在IP地址与主机名之间需要有一种转换机制和查询机制,提供这种机制的系统就是域名系统DNS(Domain Name)。全球IPV4根服务器有13台,1个主根在美国,其余12台均为辅根,9台在美国,英国1台,瑞典1台,日本1台。由中国主导,联合国际互联网WIDE机构展开雪人计划,于2016年在全球16个国家完成25台IPV6的服务器架设。中国部署了1台主根和3台辅根。DNS会同时占用T
2021-12-01 08:11:15
2050
1
原创 TCP握手挥手详解
本文系统版本:[root@localhost ~]# cat /proc/versionLinux version 4.18.0-348.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-3) (GCC)) #1 SMP Tue Oct 19 15:14:17 UTC 2021下载链接:http://mirrors.aliyun.com/centos/8.5.211
2021-11-20 00:16:31
1708
原创 递归与迭代详解
递归是个很神奇的思想,与迭代不同的地方在于,迭代通过原来的变量推出新值,接着以新值为初始值继续递推,直到满足条件,而递归则是A循环调用本身。举个简单的例子,计算1到n的和: 迭代实现: def a(n): sum = 0 for i in range(1, n + 1): sum += i return sum 每次都以sum的新值为基础,以sum+=i这个式子递推,直到实现功能。 递归实现: def b(n)
2021-09-17 16:46:12
821
原创 设计模式简介
设计模式是软件设计中常见问题的典型解决方案,由前辈们精简优化而来的优秀思想,是程序员的基本功之一。 23个常见的设计模式可以分为三种:创建模式:提供创建对象的机制,增加已有代码的灵活性与可复用性。结构模式:如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。行为模式:负责对象间的高效沟通和职责委派。分类详情:创建型模式(5): 工厂方法:父类中提供一个创建对象的方法,允许子类决定实例化对象的类型。 抽象工厂:无需指定具体类创建相关对象。 生成器:可分步骤创建复杂对象。该
2021-09-14 22:17:10
110
原创 Linux运行级别
Linux系统的7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆运行级别2:多用户状态(没有NFS)运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式运行级别4:系统未使用,保留运行级别5:X11控制台,登陆后进入图形GUI模式运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动...
2021-09-11 21:22:42
119
原创 常见排序解析
本文将着重介绍直接插入排序,直接选择排序,冒泡排序,归并排序与快排排序,以下实现皆为升序。直接插入排序特点:稳定,时间复杂度:O(n^2)。def insertion_sort(a): for i in range(1, len(a)): while a[i] < a[i-1]: a[i], a[i - 1] = a[i - 1], a[i] i -= 1 return a排序过程:第一个数一定有序,从第二
2021-09-05 16:30:20
94
原创 ICMP协议
TCP/IP功能较为简单,缺少了很多功能,ICMP协议便是其中的一块补充,为IP增添了通知差错信息与控制信息的功能。报头类型(8位)| 编码(8位)校验和(16位)选项数据常见类型与编码类型 编码 描述0 0 Echo Reply3 0 网络不可达3 1 主机不可达3 2 协议不可达3 3 端口不可达5 0 重定向8 0 Echo Request这只是ICMP类型与编码的一部分,具体可以看RFC792,以及其它相关ICMP拓展。具体应用:pingping命令是ICMP
2021-09-05 16:22:38
434
原创 Linux启动流程
载入BIOS的硬件信息与自我检测,找到第一个可开机设备;读取并执行第一个开机设备中MBR的boot Loader;执行Boot loader主程序主程序载入配置文件(包括文件系统定义与主要配置文件grub.cfg)根据boot loader载入Kernel,kernel会开始侦测硬件并载入驱动;在这一步Kernel(核心文件为/boot/vmlinuz)接管开机流程,以自己的功能重新侦测一边硬件,不一定使用BIOS侦测到的。之后挂载虚拟文件系统(/boot/initramfs),加载开..
2021-09-05 16:19:33
97
原创 InnoDB的锁
当遇到对临界资源进行并发访问的时候,一方面要最大化的性能,另一方面还要保障数据的一致性,而锁机制可以很好的达成这样的效果。本文主要介绍InnoDB中的锁。InnoDB中锁按照粒度来分可分为行级锁与表级锁。行级锁通过索引上的索引项实现,其中包含共享锁与排他锁:共享锁(S):允许事务读一行数据。排他锁(X):允许事务delete或update一行数据S与S兼容,其它情况都不兼容。在使用索引进行检索时,InnoDB会加上S锁,这一点可能会引起大量的锁冲突,需要注意。表级锁包含意向共享锁和意向排他
2021-09-05 16:03:29
135
原创 Mysql主主配置及原理
常见的Mysql高可用策略,Master配上Slave(可多个),Slave与Master的数据进行同步,当Master宕机时可以顶上去。原理:从节点开两个线程,I/O线程负责读取主节点中的二进制日志到本机的relay日志,SQL线程负责数据重放。有很多主从复制的方法,SBR(基于SQL语句复制)、RBR(基于行复制)、MBR(混合模式(默认使用SBR))以及现在Mysql版本的GITDs(基于事务复制)。SBR优势在于记录了所有语句,日志较小且方便日后审计。但弊端也较多,有些语句无法被正确地复
2021-09-05 15:59:04
357
原创 生成树协议(STP)
在体量较大的网络中,线路往往错综复杂,物理上存在大量环路,会引发大量问题,STP协议便是在二层进行逻辑上防环。生成树协议(STP)中,交换设备被称之为桥,优先级最高的被选为根桥,根据拓扑计算实现逻辑上阻塞冗余链路,消除环路,同时这样也有个好处,当某条活跃链路发生故障时,可以激活冗余链路,恢复网络连通性,具有一定的HA。BPDU生成树协议所用的信息段,被封装在以太网数据帧中,根据场景可分为配置BPDU与TCN BPDU。 配置BPDU用于生成树计算和维护拓扑,后文提到的BPDU除非特殊说明皆为配置
2021-09-05 15:45:23
526
原创 算法与数据结构入门
算法与数据结构是程序员的内功之一,要想写出高质量高性能代码,优秀的算法基础是不可或缺的。这个系列将以python实现,探讨一些常用的算法与数据结构。首先何为算法,将解决问题的方法共性进行的高度抽象,从思想的层面而言,便是道。数据结构则是在数组或链表的基础上附加特定的属性方法以获得性能的提升与所占空间的优化。为了量化程序的执行效率与存储空间的额外使用情况,引入了时间复杂度与空间复杂度。时间复杂度是对代码执行效率的量化指标,即程序的执行次数,当程序的执行次数会由于某个变量变化时,我们以以变化函数来表示其复
2021-09-05 15:36:23
108
原创 递归-循环往复,伺机而出
递归是个很神奇的思想,与迭代不同的地方在于,迭代通过原来的变量推出新值,接着以新值为初始值继续递推,直到满足条件,而递归则是A循环调用本身。举个简单的例子,计算1到n的和:迭代实现:def a(n): sum = 0 for i in range(1, n + 1): sum += i return sum每次都以sum的新值为基础,以sum+=i这个式子递推,直到实现功能。递归实现:def b(n): if n == 1:
2021-09-05 15:24:43
170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人