本周工作计划

1. 操作系统重点知识复习:

  • 1.1 死锁的必要条件(互斥:资源要么被占领,要么可用,占有和等待:已经获得资源的进程可以再次请求新的资源;不可抢占:已经被分配给一个进程的资源不能被强制性占领,只能被占有它的进程显示地释放;环路等待:由两个或两个以上的进程组成一条环路,环路中的每个进程都在等待下一个进程所占有的资源),死锁的检测与恢复(死锁检测算法,类似银行家算法,如何进程的need矩阵小于资源剩余A,则标记该进程,并将该进程已分配的资源加入到A中,重复判断,最后没有被标记的进程都是死锁进程,恢复方法:抢占,回滚,杀死进程),死锁预防(破坏死锁的四个条件:互斥,占有和等待,不可抢占,环路等待),死锁避免(判断是否为安全状态:银行家算法判断,如果进程的需求矩阵need小于资源剩余矩阵A,则将进程加入安全队列,并且将该进程已分配的资源加到A中, 否则系统将会发生死锁,状态是安全的的;最后如果所有进程是否都加入了安全队列,则为安全状态;若判断为安全状态则可以进入,否则需要阻塞某个进程)

  • 1.2 进程和线程的概念,进程的状态(创建,就绪,运行,终止,阻塞),进程线程的区别(资源,调度切换,系统开销,通信),进程调度算法(FCFS,SJF,RR,优先级调度),进程之间的通信(管道pipe 半双工 父与子进程之间,;命名管道;消息队列;信号量;共享存储,需要信号量同步,最快的一种IPC;套接字,不同机器间的进程),进程同步(信号量pv操作,管程,用信号量实现生产者消费者和读者写者问题)

  • 1.3 内存超载时的两种方法(交换(全部放入内存)和虚拟内存(部分放入内存)),虚拟内存的特点(需要时加载和换入换出),分页(页号,页表,页框号,缺页中断)和分段(段号,页号,页表,页框号,段错误和缺页中断),缺页中断时的页面置换算法(FIFO先进先出,LRU最近最少使用),分页和分段的区别(地址空间:一维和二维,大小:页大小固定相同,段大小可以动态改变,目的:分页是为了实现虚拟化,获得更大的地址空间,分段是实现地各段地址空间独立,有助于共享和保护)

  • 1.4 计算机网络的五层协议(应用层(特定的应用程序)、传输层(进程-通过端口绑定)、网络层(主机)、数据链路(同一链路)、物理层),OSI七层协议(会话(建立、管理、终止会话)和表示层(数据压缩解压和加密解密等)),TCP/IP四层协议(将物理层和数据链路层合并为网络接口层),数据链路层(MAC地址(唯一标识网络适配器即网卡,6字节48位,交换机,CRC循环冗余校验),网络层(IP分组的首部格式,IP地址分类(4字节32位,网络号和主机号,子网掩码借用主机号的位来划分子网),ARP(将IP地址解析为MAC地址),路由器(路由选择和分组转发)),传输层(为主机中的进程提供数据传输服务,通过端口来绑定进程,TCP面向连接,数据可靠性,有序接收,提供完整性服务,但报文中不记录数据长度;UDP无连接,提供及时性服务,并且报文中有记录长度),UDP(首部8个字节,源端口、目的端口、长度、校验和),TCP(首部一般为20字节,源端口,目的端口,数据偏移,序号seq,确认号ack,SYN同步, ACK确认, FIN释放连接, 窗口(接收方告知发送方接收方接受窗口的大小,以控制发送窗口的大小,进而影响发送速度,在流量控制和拥塞控制时使用)),TCP三次连接和四次挥手(三次连接的过程和双方状态变化(SYN seq,SYN ACK seq ack,ACK seq ack; 状态:closed,syn_send,establish;listen ,syn_rev,eatablish),为什么是三次(两次的话,如果第二次握手丢失,会使服务器对同一客户端保持多个连接,造成资源浪费),四次挥手的过程和状态(FIN seq ,ACK seq ack,FIN ACK seq ack,ACK seq ack;状态:FIN_WAIT1,FIN_WAIT2,TIME_WAIT(2MSL最大报文生存时间),closed;close_wait,last_ack,closed ),最后TIME_WAIT 2MSL的原因(有两个原因,一个是保证最后一次的确认报文到达B,防止最后一次报文发生丢失时,B发起超时重传, 二是 让本次连接所产生的报文都从网络中消失,使下一次新的连接不会出现旧的连接请求);TCP滑动窗口(发送方和接收方都有一个缓存窗口,发送方左边的字节都是已经发送并且已经收到确认,让窗口滑动,直到左边最后一个字节不是已经发送且收到确认的状态,接受窗口左边全是已经接收并且发送确认的字节,接收窗口只会对有序接收的最后一个字节发送确认,接收方收到确认后则知道这个字节之前的字节都已经被接收),TCP流量控制(接收方通过报文首部中的窗口字段来控制发送窗口的大小,进而影响发送方的发送速度,使接收方来得及接收),TCP拥塞控制(降低整个网络的拥塞程度,慢开始(1,每轮成倍)与拥塞避免(大于门限,每轮加1,发生超时,门限降为当前速度的一半,重新开始慢开始),快重传(接收方收到三次重复的确认,则知道下一个字节丢失,则立即重传下一个字节)与快恢复(此时门限降为一半,拥塞窗口即发送速度设置为门限值,直接进入拥塞避免),慢开始和快恢复的区别在于拥塞窗口的设定值不同,慢开始初始发送速度为1,快恢复的初始发送速度为调整后的门限值,直接进入拥塞避免阶段)

  • 1.5 bean的生命周期(bean的初始化,维护使用和销毁等10个步骤,每个步骤干了啥,啥作用),IOC的理解(控制反转,指的是将对象的创建,维护,销毁等生命周期的控制权交给IOC容器管理。DI是一种IOC的实现,通过反射技术method.invoke实现对象的属性依赖注入),Spring AOP(Aspect注解和xml配置,需要自定义pointcut****切点设置前后增强方法before,around,after,after-return/throw)和拦截器execution来指定代理的方法。底层原理是Java的动态代理,Java代理有三种方式,1.静态代理(实现相同的接口或继承相同的父类),2.接口动态代理(被代理类实现接口interface,传入被代理类的接口interfaces和在invoke方法中做增强和反射调用被代理类的方法method.invoke的增强类Invocationhandler,Proxy.newProxyInstance生成代理类,适合给实现了接口的类做动态代理,动态生成代理类),3.Cglib子类代理(传入被代理类的类对象class和增强类MethodInterceptor(和Invocationhandler在invoke做增强类似),使用Cglib工具类Enhancer设置被代理类为父类(被代理类的calss),设置增强类为回调函数(MethodInterceptor),最后用create方法生成一个子类代理类,被代理类是该代理类的父类,适合给没有实现接口的类做动态代理,动态生成一个代理类,即子类代理))

  • 1.6 多态及其实现机制(继承父类或者实现接口方法重写动态绑定,修改方法区类的方法表中父类方法的入口指针)
    位图Bitmap和布隆过滤器Boom Filter
    缓存更新的三种策略 (cache aside,read/write through,write behind), 分布式的CAP理论**,BASE理论**,数据一致性(强、弱、最终一致性)
    分布式锁实现的三种方法目的是实现多个客户端节点对同一资源的互斥操作(互斥,可重入,避免死锁,高可用)
    数据库的乐观锁(版本号+时间戳,时间戳解决CAS的ABA问题,更新前先select一次版本号)/悲观锁实现(行级的排它锁)
    Redis的setNx,依赖redis的原子性操作,set key value nx px,(setNx(),expire()) 存在操作返回false,不存在执行设置指操作,并设置key的过期时间(防止客户端崩溃死锁)
    zookeeper,依赖临时顺序节点
    每有一个客户端连接,则新建一个临时顺序节点,若是编号最小的节点可以获取锁,
    若不是则监听等待前一个临时节点,相当于一个等待队列。
    当客户端显示地删除临时顺序节点时或经过心跳检测机制发现客户端已经断开连接的时候,自动删除节点
    Redis和zookeeper优缺点:
    Redis优点在于set和del操作性能高(单线程),但是实现复杂且客户端需要自旋等待锁,获取锁的效率比较低
    zookeeper优点在于有封装好的框架和有锁的等待队列,提升抢锁的效率,缺点添加节点和删除节点的性能较低,且只能由master删除。

  • 1.7 内存置换页算法,FIFO,LRU,实现LRU算法(LinkedList双端队列,get获取和put更新时移到队头,put添加时也到队头,size超过容量删除队尾的元素);

  • 1.8 Redis集群的主从复制:全量复制增量复制主从复制(全量复制)=同步SYNC(BGSAVE RDB,缓冲区写命令)+命令传播(发送执行的写命令,也叫增量同步),当断线后重新复制时,旧版使用SYNC进行全量复制(BGSAVE RDB,缓冲区写命令),效率低(RDB的生成,传输,载入耗费大),新版使用PSYNC进行增量同步发送断线期间的写命令),效率高。

  • 1.9 消息队列,基本模式点对点,发布订阅),使用场景异步处理,流量削峰,应用解耦),使用redis实现消息队列(list双端队列,Lpush,Rpop),常见的消息队列有: ActiveMQ,RabbitMQ,RocketMQ(阿里,java),Kafka

  • 1.10 Spring 各个模块的功能:十个主要模块
    Core:Spring框架的核心工具类,其他组件都要使用到这个包的类
    Beans:负责Bean的装配,包含访问配置文件,创建和管理Bean以及进行IOC和DI依赖注入操作相关的类
    Context:上下文模块,继承Beans的特性,为Spring核心提供大量扩展,主要有ApplicationContext接口
    Expression:Spring表达式语言模块,提供对表达式的支持
    AOP:提供一个面向切面编程的实现,可以自定义方法拦截器execution和切点pointcut, 将逻辑代码分开,降低耦合性。
    MVC:提供Web的MVC模式的实现
    Transactions:支持编程式事务和声明式事务两种事物的管理
    ORM**:为持久层框架提供一个交互层**,如mybatis,hibernate
    JDBC:提供一个JDBC抽象层Spring对JDBC数据访问的封装。
    Test:支持使用JUnit对Spring组件进行单元测试(用到的JUnit测试类:SpringJUnit4ClassRunner.Class

  • 1.11 Spring事务:主要有编程式事务声明式事务两种类型,底层通过AOP实现,在方法前后进行拦截,方法开始前创建一个事务,方法结束后进行提交或回滚。编程式事务通过TransationTemplate实现手动事务管理,声明事务有两种一种是@Transational注解方式,一种是xml配置,在AspectJ在中定义切点pointcut和execution
    事务的隔离级别五种,默认、RU,RC,RR,Serialable
    事务的传播行为七种required(必须运行在事务中,已经有了则加入,没有则新建一个自己的),support(不需要事务,如果有则加入),required_new(必须在它自己的事务中运行,没有则新建自己的事务,当前已有则新建一个自己的,挂起之前的事务),nested嵌套事务(必须运行在事务中,没有则新建,已有当前事务则在嵌套事务中运行,新建一个内层事务SavePoint,外层回滚会引起内层回滚,内层回滚不会引起外层回滚内层回滚到SavePoint

  • 1.12 jdk8的新特性: 七个新特性
    Lambda表达式;
    接口Interface扩展普通方法:接口可以有非抽象普通方法(方法可以有方法体),通过Defualt关键字实现;
    Stream API: 新增java.util.Stream包,支持函数式编程;
    DateTime API: 加强对日期和时间的处理;
    Optional类:新增Optional类,解决空指针异常;
    新的编译工具: 新的类依赖分析工具;
    JavaScript引擎:可以在JVM上运行JavaScript程序;

  • 1.13 线程池的四种类型及其构造参数(核心线程数,线程总数,空闲时间,任务阻塞队列,线程工厂,拒绝策略)
    任务阻塞队列有三种:有界队列(ArrayBlockingQueue)和无解队列(LinkedBlockingQueue),直接提交队列(SynchronizedQueue,提交后只有被取出才能继续添加)
    拒绝策略有四种:1 丢弃任务,抛出异常 ;2 丢弃任务,不抛出异常;3 不丢弃任务,删除最早进入等待队列的任务,再尝试执行任务;4 不丢弃任务,由调用execute方法的主线程执行该任务

  • 1.14 mysql的sql调优:创建索引create index xx_index on table(colume_list),查看表的索引 show index from table; 查看sql语句的执行时间show profiles,查看sql语句使用了哪些索引 explain sql语句,具体参数有type(all为全表扫描,不为all则使用到了索引),possible_keys可能用到的索引,key为本条sql语句使用了的索引,key_len为索引长度,rows扫描的行数(explain: type, key , key_len, rows, possible_keys

  • 1.15 文件查找命令find和grep: find用于根据文件的属性进行查找,如文件名,文件大小,文件修改时间,文件访问时间,文件用户组,grep用户根据文件的内容进行查找,对文件的每一行按照给定的模式pattern进行匹配查找。
    find: find 文件夹路径 -name( 查找的属性参数依据,-size,-empty,-atime,-mtime) "文件名的正则表达式 "
    find ./ -name httpd.conf 查找当前文件夹下文件名为 httpd.conf的文件
    find /home/peng/dir -name httpd.conf 查找指定文件夹下文件名为 httpd.conf的文件
    find ./ -name “http*” 查找当前文件夹下文件名以http开头的文件
    find ./ -name “*conf” 查找当前文件夹下文件名以conf结尾的文件
    grep: grep “pattern” 文件 -n(有每行模糊子串匹配和单词相同匹配-w两种匹配模式,也可以查询指定的文件夹-r,-n指定行号)
    grep “test” httpd.conf -n 查找 httpd.conf 文件中存在test这个字符串的行
    grep “test” httpd.conf https.conf -n 查找 httpd.conf 和 https.conf两个文件中存在test这个字符串的行
    grep “test” -r ~/dir -n 查询指定文件夹下dir的所有文件存在test这个字符串的行
    grep -w “test1” httpd.conf -n 查询httpd.conf文件中含有单词test1的行,-w单词完全匹配, 不再是默认的模糊匹配
    Linux常用命令:
    ls,cd ,mkdir,vim,cat,more,touch,find按属性查找文件,grep按内容按行查找文件
    ps,netstat -anp |grep 8080,lsof -i:8080,kill -9 pid,
    top(进程编号pid,创建者user,进程优先级PR,进程状态state,虚拟内存,物理内存,共享内存,CPU和内存使用率),free内存,df磁盘,iftop网络

  • 1.16 Redis作消息队列,可以使用双端队列List实现,LPUSH和RPOP执行进队和出队操作,也可以使用阻塞式的出队操作BRPOP(当队列中没有消息时一直阻塞连接,直到有消息返回),阻塞式的出队操作可以减少等待轮询时间,节约系统资源。相比较于RabbitMQ,RocketMQ,ActiveMQ,Kafka等消息队列,Redis作为消息队列存在以下安全问题:一是可能内存会不够,二是没有保证可靠消费没有对于消息消费成功的确认机制当消息消费失败时,消息体可能丢失,而RabbitMQ等消息队列具有消息消费的确认机制当消息者消费失败时会自动使消息体返回原队列。

  • 1.3 今天必须完成的任务:AOP, 其它的Spring知识,Select IO epoll(用户态,内核态,重点!!!);

  • 1.1 进程线程,进程的状态,中断;

  • 1.2 内存置换页算法,实现LRU算法;

  • 1.3 Select IO epoll(用户态,内核态,重点!!!);

2. 计算机网络重点知识复习:

  • 2.1 TCP的滑动窗口,拥塞控制和流量控制;
  • 2.2 http,https;

3. spring知识点:

  • 3.1 bean的生命周期;

  • 3.2 IOC的实现原理;

  • 3.3 AOP的实现原理;

  • ## 4. socket知识点

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值