
开发相关技术
文章平均质量分 84
lzrrrrr
死宅,dota2爱好者
展开
-
[操作系统的故事] 2.进程管理的故事
进程管理的故事这次我们来将一个关于进程管理的故事。。。什么是进程管理操作系统是替我们管理硬件的软件,所以与其说是进程管理,倒不如说是CPU管理来的贴切。为什么要对CPU进行管理呢?1.屏蔽CPU进行编程, 市面上的cpu那么多,我们每次换一块cpu执行就要更改我们的代码,很不方便。2.对cpu的管理复杂且不安全, 我们希望能直接调用一个接口而不去管其中的细节。所以,我们需要操作系统提供一个安全且可靠的机制来帮我们执行我们的程序。一个简单的版本:直接执行作为一个最简单且直接的思路,我原创 2021-06-08 22:33:52 · 249 阅读 · 1 评论 -
[操作系统的故事] 1. 内存管理的故事
操作系统复习(一)内存管理的故事这是一个关于操作系统内存管理的故事内存管理是什么故事从我们需要运行一个程序开始说起。。。我们知道,我们写完编译后的程序是保存在磁盘中的,那么CPU怎样才能访问到我们的程序并执行呢?由于CPU只能访问到内存空间,所以我们需要将磁盘中的程序拷贝到内存,然后将该程序中每一条指令的物理地址交给CPU,CPU才能不断地取址执行。这就是操作系统的内存管理。并且引出了两个问题:我们的进程在物理内存中是怎样存在的CPU以怎样的方式来得到物理地址第一个版本:直接使用物理原创 2021-06-08 22:32:57 · 317 阅读 · 1 评论 -
node学习(二)常见模块使用
node学习(二)常见模块使用上一章我们了解到,node的web服务使用起来较为繁琐,这就需要外部的模块进行一部分的封装,简化我们的代码1. express 处理请求安装该模块npm install express --save我们来看官网的介绍:Fast, unopinionated, minimalist web framework for node. // 快速,无偏见,最低限度的node网络框架。const express = require('express')cons原创 2021-05-13 17:38:21 · 166 阅读 · 0 评论 -
node学习(一)基本使用
node学习(一)node的基本使用Node是一个基于Chrome V8引擎的运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台。1. 原理初探学一个框架时,弄清楚其原理是十分重要的,因为是初学,所以这里只给出了node的大体结构,深入探究将在最后几章给出。1.1 node架构:可以看到,除了node自己提供的标准库之外,node的底层操作主要由以下模块支持:Node bindings: 将调用的java方法传递到c++层面执行,执行完毕后回调原创 2021-05-13 17:37:03 · 2086 阅读 · 1 评论 -
rabbitMQ学习(二)高级特性与集群
rabbitMQ学习(二)高级特性与集群我们学习中间件的时候,入门往往是简单的(会用API就行了),但要做到对MQ的高可用与高性能,我们还得了解一下他的一些高级特性。rabbitMQ的高级特性保证MQ的可靠性学习过了TCP协议的同学都知道,TCP协议通过了确认机制、重传机制等等保证了数据传输的可靠性。招式是一样的,rabbitMQ也提供了差不多的机制来保证我们生产者的消息被消费者接收并正常使用。我们先来回顾一下rabbitMQ消息的发送流程(先考虑最简单的版本):可以看到我们的发送主要有三个原创 2021-05-13 17:21:24 · 170 阅读 · 1 评论 -
# rabbitMQ学习(一)入门使用
rabbitMQ学习(一)前言为什么要学习rabbitMQ?别问,必学。MQ是什么,有什么优势?“消息队列”是在消息的传输过程中保存消息的容器。 --百度百科简单来说,消息队列即在两个系统中用于消息传递的一个中间件,一般有三个角色消息中间件发送方(生产者)接收方(消费者)相比于让两个系统之间进行互相调用,使用MQ有如下优势:解耦 两个系统不会直接依赖,而是与消息中间件进行通信提速 发送方只需要将消息放入队列中即可返回,不用等待接收方的处理消峰 让接收方不会被动承担原创 2021-05-13 17:19:57 · 192 阅读 · 0 评论 -
netty学习(二)Netty线程模型与核心组件
netty学习(二)Netty线程模型与核心组件1.I/O线程模型1.1 传统阻塞IO模型传统阻塞IO模型就是每一个请求都需要一个线程来进行处理,这个处理包括两方面:连接的处理业务的处理有如下问题:当请求过多时,创建的线程也会过多,那么线程的切换也会很频繁,上下文处理造成资源浪费操作系统能处理的线程是有限制的,当线程达到限制后,新的请求就会被阻塞单个线程大部分时间都是阻塞的,因为此请求并没有数据可以读写,造成了资源浪费1.2 Reactor模型针对传统IO模型的问题:rea原创 2021-04-22 00:42:34 · 187 阅读 · 0 评论 -
netty学习(一)java原生IO
netty学习(一)JAVA中的IO方式1. 为什么要学习netty?别问,必学2. BIO、NIO、AIO这里再复习一下java中的三种IO模型,要将java中的IO模型,首先离不开操作系统中的IO模型2.1. 操作系统中的IO模型一次IO的过程包括两部分: 1. 内核空间接收到外来数据 2. 将内核空间的数据拷贝到用户空间供应用使用由此诞生了操作系统中的5种IO模型同步并阻塞在该模型下,每一个线程在调用读取函数之后就一直进入阻塞,直到读取到数据同步非阻塞与上面不同,每一个线原创 2021-04-22 00:40:00 · 171 阅读 · 0 评论 -
后端开发技能学习(十)redis学习(下篇)
文章目录后端开发技能学习(十)redis学习(下篇)哨兵基本概念实现原理三个定时任务领导者选举故障转移集群数据分布理论数据库的分库分表切分方式缓存中的常见问题过期淘汰策略穿透优化无底洞优化雪崩优化热点key重建优化bigkey优化热点key优化后端开发技能学习(十)redis学习(下篇)哨兵基本概念在上一章节中,我们学习到了redis的主从模式,在这种模式下,redis能接收高并发的读操作,但这种模式同样也会产生一定的问题。主节点如何产生,发生故障怎么办?从节点发生故障,其他节点如何得知和恢复原创 2021-04-05 16:24:56 · 111 阅读 · 0 评论 -
mysql进阶笔记 InnoDB (一)InnoDB存储引擎
文章目录mysql进阶笔记 InnoDB (一)InnoDB存储引擎InnoDB体系架构后台线程内存Checkpoint技术Master Thread工作方式InnoDB关键特性插入缓冲(Insert Buffer)两次写(Double Write)自适应哈希索引(Adaptive Hash Index)异步IO(Async IO)刷新邻接页(Flush Neighbor Page)mysql进阶笔记 InnoDB (一)InnoDB存储引擎InnoDB体系架构1.内存池:维护进程/线程访问的数据结原创 2021-01-12 10:55:56 · 284 阅读 · 1 评论 -
Java进阶(二)并发(上篇)
文章目录Java进阶(二)并发(上篇)并发设计原理基本概念并发中的问题并发设计模式Thread和Runnable管理大量线程:执行器Executor使用返回值控制任务调度共享受限资源synchronized关键字lock对象原子性与易变性Java进阶(二)并发(上篇)并发设计原理基本概念1.并发与并行并发:在单个处理器上采用单核执行多个任务。并行:同一时间在不同计算机、处理器或者处理器核心上同时运行多个任务。2.同步同步:一种协调两个或更多任务以获得预期结果的机制同步机制:信号量、监视器原创 2020-12-30 14:13:23 · 141 阅读 · 0 评论 -
后端开发技能学习(十)redis学习(中篇)
文章目录后端开发技能学习(十)redis学习(中篇)客户端Java客户端jedispython客户端redis-py持久化RDBAOF问题定位与优化多实例部署复制配置原理阻塞发现阻塞内因外因后端开发技能学习(十)redis学习(中篇)客户端redis中的客户端与服务端通信采用的RESP协议,该协议基于TCP协议,协议格式如下:发送命令格式:*<参数数量> CRLF$<参数1的字节数量> CRLF<参数1> CRLF...$<参数N的字节数量>原创 2020-12-17 22:04:18 · 480 阅读 · 0 评论 -
后端开发技能学习(九)redis学习(上篇)
文章目录后端开发技能学习(九)redis学习(上篇)安装与使用入门基础命令数据类型后端开发技能学习(九)redis学习(上篇)安装与使用入门基础命令先来点基础命令SELECT n # 选择字典(默认有16个字典) n代表字典序号默认字典为0号KEYS * # 通过通配符来匹配并显示键值TYPE key # 查看键值的数据类型SET key value # 新建键对值DEL key # 删除键对值GET key # 获得值EXISTS key # 判断键是否存在数据类型1.字符串原创 2020-12-15 21:40:38 · 559 阅读 · 0 评论 -
后端开发技能学习(七)sql命令学习(中篇)
文章目录后端开发技能学习(七)sql命令学习(中篇)1.创建计算字段1.1 拼接字段1.2 使用别名1.3 执行算数运算2. 数据处理函数文本处理函数日期和时间处理函数后端开发技能学习(七)sql命令学习(中篇)1.创建计算字段一般来说,存储在表中的数据不是应用程序所需要的,而在客户机上对这些数据进行转换的效率远远不如在数据库中的处理。1.1 拼接字段拼接: 将值联结到一起构成单个值使用Concat()函数可以拼接两个列:栗子:SELECT Concat(vend_name,'(',vend原创 2020-10-08 21:43:30 · 137 阅读 · 1 评论 -
后端开发技能学习(六)sql命令学习(上篇)
文章目录后端开发技能学习(六)sql命令学习(上篇)数据库基础检索排序检索过滤where子句过滤组合过滤通配符过滤后端开发技能学习(六)sql命令学习(上篇)数据库基础数据库:保存有组织的数据的容器表:某种特定类型数据的结构化清单列:表中的一个字段。所有表都是由一个或多个列组成的行:表中的一条记录主键:一列(或一组列),其值能够唯一区分表中的每个行,主键需满足:1.任意两行都不具有相同的主键值 2.每个行都必须具有一个主键值(不能为null)sql:结构化查询语言,用来与数据库通信检索要原创 2020-10-02 09:49:47 · 140 阅读 · 0 评论 -
后端开发技能学习(五)java垃圾回收机制
文章目录后端开发技能学习(五)java垃圾回收机制垃圾的定义引用计数法可达性分析算法java内存区域垃圾怎么回收标记-清除算法复制算法标记整理算法内存模型与回收策略后端开发技能学习(五)java垃圾回收机制垃圾的定义本章介绍怎样判别一个对象是否是垃圾。引用计数法引用计数法通过在对象头中分配一个空间来保存该对象被引用的次数。若该对象被其它对象引用,则引用计数+1;若删除该对象的引用,则引用计数-1;当引用计数为0时,就会回收该对象。缺点:当有两个对象相互引用时将导致引用计数永不为0。可达性原创 2020-09-14 22:30:58 · 153 阅读 · 0 评论 -
后端开发技能学习(三) shell常用命令
文章目录后端开发技能学习(三) shell常用命令查找findgrep正则表达式常见用法压缩磁盘权限进程其他后端开发技能学习(三) shell常用命令查找findfind用于对文件进行查找格式:find pathname -options [-print -exec -ok …]参数:pathname:目录options:选项-print:输出匹配结果-exec:对匹配的文件进行操作-ok:同上,不过会给出提示option含义-name按文件名查找-per原创 2020-09-07 10:02:36 · 277 阅读 · 0 评论 -
后端开发技能学习(二) shell基础学习
文章目录后端开发技能学习(二) shell基础学习环境搭建语法变量的定义与使用运算控制容器方法文件文件读取目录的读取文件写入sed流编辑模块输入和菜单后端开发技能学习(二) shell基础学习环境搭建1.linux下可以直接执行shell2.windows下需要安装虚拟服务软件,如果你看了上一篇博文(https://editor.youkuaiyun.com/md/?articleId=108312144),那么你可以直接用gitbash来执行shell话不多说,先来写个hello world:$ vi t原创 2020-09-03 12:57:21 · 242 阅读 · 0 评论 -
后端开发技能学习(一) Git命令汇总
文章目录后端开发技能学习(一) Git命令汇总创建版本库版本穿梭版本回退工作区与版本库修改与删除远程仓库设置仓库添加远程库分支管理创建与合并分支标签管理自定义Git后端开发技能学习(一) Git命令汇总创建版本库$ mkdir learngit # 创建仓库目录$ cd learngit$ pwd # 显示当前目录/Users/michael/learngit$ git init # 仓库初始化Initialized empty Git repository in /Users/mic原创 2020-08-31 21:51:09 · 347 阅读 · 1 评论