首页
精选文章IO模型查看全文IO是计算机术语,是Input(输入)和Output(输出)的简称。IO分为磁盘IO和网络IO,磁盘IO是指应用程序对磁盘数据进行读写的操作,网络IO是指应用程序对网络数据进行读写的操作。 IO操作一般和读操作,写操作关联。读操作是应用程序将数据从IO设备(磁盘或者网络)读取出来可以用于业务操作,写操作一般是应用程序将程序处理的结果写到IO设备(磁盘或者网络)。 一般的操作系统,例如Linux下,应用程序不能直接和IO设备交互,所以读写操作要经过系统调用调用内核的IO能力,内核再与IO设备进行交互。 因为IO设备一般读写速度都较低,为了提高读写的效率,一般都会采用读写缓冲区的方式,将数据提前缓冲做批量的读写操作。对于磁盘来说,Linux内核提供了统一的缓冲区能力,在进行读的时候会先从系统缓冲区中读取数据,当数据在缓冲区不存在的时候在进行实际的读取,读取之后会先放在系统缓冲区。 写入磁盘的时候,一般也会先写入磁盘缓冲区,之后批量进行磁盘的写入,写缓冲不仅仅可以提高写入的效率,还减少了磁盘的寻道时间。但是在断电情况下,可能会丢失部分数据。 同理,在网络IO的时候,内核也提供了Socket缓冲区作为数据的读写缓冲,但是因为网络IO不是设备级别,而是链接级别的,所以每个socket都会有自己的读缓冲区和写缓冲区。 综上,读操作需要2次数据拷贝,分别是将数据从用户空间拷贝到内核空间,从内核空间拷贝到IO设备。同理写操作也需要2次数据拷贝,将数据从IO设备拷贝到内核空间,再从内核空间拷贝到用户空间。 IO模型是指在进行IO操作的时候的线程模型以及读写模式,一般可以分为几种,BIO,NIO以及AIO。 BIO BIO是指阻塞IO…程序查看全文程序有多个层次的概念,比如开发人员依据编程语言的语法实现的可以执行特定的功能的代码叫程序,代码通过编译之后运行物理设备上的进程也叫程序。软件就是运行在一定硬件之上的程序,它可以完成预先设计好的指令。比如我们常用的微信、淘宝、视频播放器、浏览器都是软件,这些软件一般执行在我们熟悉的手机、电脑等硬件之上,除了这些常见的硬件平台之外,还有一些其他平台也可以运行软件,例如现在的摄像头、游戏机等。 程序在生命周期的不同阶段有不同的表现形式。在软件工作人员开发完成之后,一般而言,程序是可以阅读的符合一定语法规范的文本,这时候的程序是静态的,但是当程序在一定硬件上启动之后,程序根据外部输入或者自动执行特定的功能,此时的程序是动态的。 静态的程序一般采用C、C++、PHP、Python、Golang等语言编写。其中有一些语言是静态语言,静态语言是指其程序有固定的内存布局,通过编译和链接程序的地址空间都是明确的。动态语言是程序在运行的时候才能决定程序的内存布局。 因为静态语言的特性,静态语言在编写的时候,所有的变量需要有明确的类型,而且除了强制转换之外,类型不能发生变化,而动态语言可以在程序运行的时候才给变量赋值,所以动态语言不需要提前制定类型。 解释执行 解释执行需要解释器程序来运行程序,解释器执行程序分为下列过程: 词法分析:扫描器(Scanner)将源代码分割成一系列的记号(Token),词法分析的工具有lex。 语法分析:语法分析器将记号(Token)生成语法树(Syntax Tree),yacc是常用的语法分析工具。 语义分析:分析语法树的语义,进行类型的匹配、转换、标识等。 解释执行:解释型语言一般都有虚拟机来执行特定格式的字节码…回溯法查看全文回溯法是一种选优搜索法,在回溯过程中按选优条件向前搜索或者试探,以达到目标结果。但当探索到某一步时,发现之前的选择路径不能达成目标或者不是最优的方案,就沿着已经选择的路径进行回退重新选择,这种按照一定规则试探,并且试探失败就回退到一定状态重新试探的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。回溯法解决的典型问题一般分为三类,分别是子集问题,组合问题,以及排列问题。 解决一个回溯问题,实际上就是一个决策树的遍历过程。一般情况下分为三步: 确定试探路径,也就是之前试探中的选择集合。 确定当前的选择条件,当前可以进行选择的选择列表。 结束条件是值到达决策树底层,可以结束本次回溯的条件。 回溯法流程的通用模版可以抽象如下: 回溯(路径, 选择列表){ 如果到达终止条件: 将该路径加入结果列表; 循环选择列表: #将该选择添加到选择路径 路径.添加(选择) 回溯(路径, 选择列表) # 撤销选择 路径.删除(选择) } 子集问题 给定一个数组,返回它所有的子集。如nums=[1, 2, 3] 返回的是[[],[1],[1,2],[1,2,3],[1,3],[2],[2,3],[3]]。 集合中有有三个数组,每次从集合中可能选择的有4个值,分别是1、2、3和空。 返回4个可选值集合所有的子集,试探路径最长为4。 所以当路径长度为4时,则将该路径存入结果集中。 |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库
精选内容 |