学习
文章平均质量分 87
千裡
无
展开
-
socket 踩坑日记
none原创 2022-09-04 17:45:45 · 512 阅读 · 1 评论 -
中缀表达式转后缀表达式(逆波兰式)并且计算结果
原理省去,给出了思路和代码。思路:(1)中缀表达式转后缀表达式设一个运算符栈,用来临时存放操作符,一个队列,用来存放生成的后缀表达式。从左向右扫描中缀表达式,如果遇到操作数num:直接添加num到后缀表达式队列中。如果遇到的是运算符op1:如果该运算符op1比栈顶运算符优先级高,则把该操作符op1入栈。否则把栈顶的运算符弹出加入到后缀表达式队列中,直到当前栈顶的元素优先级小于op1......原创 2019-09-06 17:24:58 · 770 阅读 · 0 评论 -
《6.S081: Operating System Engineering》Lab util: Unix utilities
之前学习6.828没坚持下去,最近突然发现2020fall的更新了,并且还有学习视频了,参考资料貌似更详细了感觉对学习十分友好。又重新燃起了学习的兴趣。于是开始重新启动6.S081的学习。课程Schedule课程相关资料基本都在这个网站上了。...原创 2021-01-02 16:21:30 · 264 阅读 · 0 评论 -
《Go语言圣经》阅读笔记
《Go语言圣经》电子书《The Go Programming Language》源码目录第一章 入门Hello, World命令行参数第二章 程序结构第三章 基础数据类型第一章 入门Hello, WorldGo语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响Go代码的正确解析。函数的左括号{必须和func函数声明在同一行上,且位于末尾,不能独占一行。而在表达式x + y中,可在+后换行,不能在+前原创 2020-12-28 11:16:04 · 181 阅读 · 0 评论 -
《Distributed Systems》(6.824)LAB4B(Sharded Key/Value Service)
LAB4的系统架构图如下,在前面的Lab4A中,已经实现了LAB4B,原创 2020-12-01 11:54:41 · 603 阅读 · 0 评论 -
《Distributed Systems》(6.824)LAB4A(Sharded Key/Value Service)
任务描述在之前的lab中我们已经实现了kv存储系统,但是所有的put/get请求都打在leader上,leader的负载很大,因此在Lab4在此基础上进行改进,根据实验任务描述,通过一个master进行集群的配置,一个集群负责一部分碎片任务即shards,可以通过客户端管理master的配置信息,同时master的配置即表示了各个集群该完成什么样的任务,这样,比如对于kv存储系统固定的键的put和get操作都由不同的集群控制,同时客户端在拿到master中关于访问根据数据的hash,数据应该找哪个集群的配原创 2020-11-29 19:12:05 · 306 阅读 · 0 评论 -
《Distributed Systems》(6.824)LAB3B(Fault-tolerant Key/Value Service)
LAB3B的任务是实现一个快照,但是相对之前难度在于代码量非常大,逻辑处理起来较为复杂,需要处理server层和raft层的交互,以及raft层与raft层之间的交互。client的代码较之前的lab无需改变。流程梳理需要在raft层的log大于给定maxraftstate的时,server层的kv系统进行快照,raft根据应用层的快照再压缩raft层的日志,并且将snapshot和log写入持久化层。而在leader向follower发送心跳包时,根据rf.nextIndex[]和rf.lastInc原创 2020-11-29 14:32:18 · 405 阅读 · 0 评论 -
《Distributed Systems》(6.824)LAB3A(Fault-tolerant Key/Value Service)
流程MIT 6.824: Distributed Systems- 实现Raft Lab3A原创 2020-11-26 21:28:10 · 469 阅读 · 0 评论 -
The Missing Semester of Your CS Education
课程首页1/13: Course overview + the shell介绍了一些shell方面的简单指令和概念,比如data、ls、cd、which、pwd、<、>、>>、echo、mv、curl、man等,如果了解linux c编程,这些应该都懂的。列出一些我平时没有注意到的细节和指令。关于文件和目录的rwx权限,进入文件夹需要x权限,以及删除文件时对当前目录需要有写权限等。空格分割参数,如果想要参数包含空格,则使用""或\,比如mkdir hello\ world原创 2020-11-24 22:06:25 · 432 阅读 · 0 评论 -
《Distributed Systems》(6.824)LAB2(raft)
写在前面本次lab2有三部分,分别是lab2A(leader选举),lab2B(记录日志),lab2C(可持续化),其中最难的点在于lab2C的Figure 8 (unreliable)样例。本次实验我是写了10天左右,尽管LAB分成了3部分,但是实际上可能由于考虑不全面通过了当前的样例在后面被测出来之后就要修改之前的代码。因此不要觉得过了样例就肯定没问题了。我写的代码可以在后面给出的我的GITHUB地址去看,**本篇博客就列出我踩过的坑,不分析我写的代码了。**因为我打算参考GITHUB上高st原创 2020-11-21 15:24:12 · 872 阅读 · 0 评论 -
《Distributed Systems》(6.824)LAB1(mapreduce)
目录开始之前lab开始之前6.824是mit开的一门分布式系统的课程,任课教师是课程视频B课程首页go文档lab原创 2020-11-12 13:42:49 · 730 阅读 · 2 评论 -
《Intro to Computer Systems》(csapp)LAB7(proxylab)
网络编程与web服务器与并发《csapp》11章和12章。对锁的理解。lab首先需要阅读本次lab的writeup以及《CSAPP》的网络编程和并发两章,本次lab给我们提供了一个《CSAPP》 上实现的一个tiny(一个web服务器),我们需要做的是写一个代理服务器,用来接受请求,并且将请求发送给tiny启动的服务器。在PART 2和PART 3中添加线程并发访问以及缓存,来完善我们写的代理服务器。实验完成以后可以直接将代理服务器应用到浏览器上。实现主要参考了七 PROXY LAB问题可能由于环原创 2020-11-06 17:58:38 · 1461 阅读 · 6 评论 -
《Intro to Computer Systems》(csapp)LAB6(malloclab)
目录动态内存分配lab动态内存分配lab本次实验参考了《CSAPP》原创 2020-10-31 13:58:49 · 309 阅读 · 0 评论 -
《Intro to Computer Systems》(csapp)LAB5(shlab)
异常控制流了解基本的LinuxC编程,除了《csapp》的第八章以外,也推荐看看《Linux/Unix编程实践教程》以及《Unix环境高级编程》。LAB本次LAB难度不是很大,但是需要多查阅手册,以及注意细节。在《Linux/Unix编程实践教程》里也简单实现过一个shell。本次lab根据给测试样例一点一点完善shell。test1当标准输入流关闭时退出终端。分析这里简单分析一下已经提供的代码框架。执行我们写的shell时,根据参数进行对应的操作,比如-v、-h、-p参数。默认关闭原创 2020-10-30 12:28:37 · 309 阅读 · 0 评论 -
《Intro to Computer Systems》(csapp)LAB4(CacheLab)
有2s组,每组有E行,每一行是一个缓存块,每一行包括1个有效位,t个标记位。有2b字节存数据以及有效位和标记位(标记位用来和给定地址的标记位对比,判断给定地址在不在该行中,如果在则命中)。参数是判断高速缓存是否存在对应地址的数据的操作为:参数S和B将m位地址分为了三段,首先通过S找到对应的组,再该组的行中找到标记位t与查询地址的标记为t相等的行,然后再该行包含的块中查找偏移地址位B的位置。即缓存命中。直接映射高速缓存在理解了组、行、标记、偏移地址概念后,直接映射就是每组只有一行,因此当两个原创 2020-10-28 18:05:35 · 378 阅读 · 4 评论 -
《Intro to Computer Systems》(csapp)LAB3(Attack Lab)
话说,试了一下retq弹栈64位,明明pushq压入64位,却只能pushq $0x4017ec,不能pushq $0x4017ec001200目录运行时栈结构缓存区溢出对抗缓冲区溢出的方法栈随机化栈破坏检测(金丝雀值)LAB3Part I: Code Injection AttacksLevel.11Level.12我的错解正解分析Level.13Part II: Return-Oriented Programminglevel.21Level.23运行时栈结构缓存区溢出比如不安全的gets()原创 2020-10-25 22:50:07 · 421 阅读 · 0 评论 -
《Intro to Computer Systems》(csapp)LAB2(Bomb lab)
目录编译系统常用寄存器操作数格式数据传送指令gcc 和 gdbgdb常用指令lab1编译系统对于源代码hello.c。gcc -Og -S hello.c,则生成hello.s汇编程序。gcc -Og -c hello.c,则生成生成hello.o可重定位文件。gcc -Og hello.c,则生成可执行文件a.out.可以使用objdump -d a.out对.o文件或.out文件进行反汇编。常用寄存器操作数格式数据传送指令gcc 和 gdbgdb常用指令layout原创 2020-10-24 21:53:38 · 260 阅读 · 0 评论 -
《Intro to Computer Systems》(15-213)LAB1(Data lab)
课程首页目录lab1lab1原创 2020-10-23 11:54:14 · 183 阅读 · 0 评论 -
【计算机网络】Stanford CS144(原实验相关内容已删)
该课程主要的作业是自己使用c++实现一个tcp,能够加深对计网的理解。记录解决lab的过程。环境搭建开始时,我使用的是ubuntu16.04,apt下载的gcc版本较低,中间make编译时发现gcc要求8+(lab0的pdf也明确说明),装了半天没成功于是又装了一个ubuntu20.04。之后参考课程网站lab0的pdf,在git上clone项目即可开始实验。LAB0Networking by handFetch a web page使用telnet 发送http(命令中http换成80也是可以原创 2020-10-22 10:27:50 · 4024 阅读 · 19 评论 -
gcc和gdb的使用以及实战(bomblab)
@[toc]目录gcc简介GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。gcc 与 g++ 分别是 gnu 的 c & c++ 编译器。(gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。)编译过程以一个输出"hello world"的代码为例,编译的过程中分为如下4步(下图来自《csapp》):预处理,原创 2020-08-27 01:35:28 · 1442 阅读 · 0 评论 -
跳跃表(Skip lists)(算法导论第12课笔记)
目录简介结构搜索复杂度分析插入删除性质代码实现简介跳跃表支持插入、删除、搜索。是个动态(插删)搜索数据结构。同时每个操作复杂度都是对数级别的。“是个随机化的、简单的数据结构。”“几乎可以保证每一步操作都是logN的可能性为(1-1/n^α),n可以取很大。因此极小概率超过logN”其他动态搜索数据结构:树堆(treaps)、红黑树(red-black trees)、B树(B-trees)。结构如果只是一个双向链表,则操作的复杂度是O(n)。下图分别是wiki和课程里两种跳表数据结构的示意原创 2020-08-22 19:07:50 · 354 阅读 · 0 评论 -
IO多路复用中的select,poll和epoll
文章目录IO多路复用bitmapselect文件描述符select指令实现IO多路复用pollepoll参考IO多路复用IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。bitmapbitmap使用bit来存一些不同的数字,如存1~9中的1,3,5,6,则bitmap只需要10位置,对应1,3,5,6位为1,即[1,0,1,原创 2020-08-16 20:20:27 · 309 阅读 · 1 评论 -
SpringMVC学习(三)编码问题与JSON
目录设置过滤器测试设置过滤器在web.xml中添加过滤器 <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <par原创 2020-08-03 17:02:35 · 117 阅读 · 0 评论 -
SpringMVC学习(二)
目录使用注解修改第一个mvc程序修改springmvc-servlet程序controller使用注解修改第一个mvc程序修改springmvc-servlet程序<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"原创 2020-08-02 20:46:40 · 115 阅读 · 0 评论 -
SpringMVC学习(一)
目录回顾Servlet导入依赖包添加Servlet类处理请求在web.xml中注册Servlet在WEB-INF中创建跳转视图回顾Servlet导入依赖包父项目导入依赖<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</原创 2020-08-01 21:09:48 · 115 阅读 · 0 评论 -
Spring学习(四)整合Mybatis
整合MyBatis依赖pom.xmljunitmybatismysqlspring相关aop织入mybatis-spring(对mybatis和spring版本有要求,参考官方文档)配置静态资源过滤器<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://myba原创 2020-08-01 16:36:39 · 113 阅读 · 0 评论 -
Spring学习(三)
目录AOPAOP在Spring中的作用使用Spring实现Aop(XML实现)log包(方法一用到)service包diy包自定义切面(方法二用到)applicationContext.xmlTest使用注解实现AOP创建注解切面修改配置文件总结AOPAOP(Aspect Oriented Programming)面向切面编程。AOP在Spring中的作用提供声明式事务;允许用户自定义切面横切关注点:跨越应用程序多个模块的方法或功能。即与业务逻辑无关的,但是我们需要关注的部分,就是横切关注点原创 2020-08-01 02:29:48 · 93 阅读 · 0 评论 -
Spring学习(二)
Bean的自动装配自动装配是Spring满足bean依赖的一种方式,Spring会在上下文(Context)中自动寻找,并自动给bean装配属性三种方式在XML中显式配置在JAVA中显式配置隐式的自动装配Bean(重要)在xml中设置进行自动装配(略去)使用注解实现自动装配导入约束context配置注解的支持<context:annotation-config/>在pojo中添加注解@Autowired,可以在属性上使用,也可以在set方法上使用注意:首先byNa原创 2020-07-31 13:55:55 · 68 阅读 · 0 评论 -
java复习总结脑图
java入门并发jvm计算机网络操作系统MySqlMyBatis原创 2020-07-30 21:26:14 · 257 阅读 · 0 评论 -
Spring学习(一)
目录Spring简介Spring配置依赖注入代码pojo配置文件xml测试类Spring简介文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#spring-coreSpring是一个免费开源的框架(容器)轻量级非入侵式的框架控制翻转(IOC)、面向切面编程(AOP)对框架整合的支持理解:对象交给spring管理Spring配置依赖注入方式一:构造器注入方式二:原创 2020-07-30 21:21:15 · 101 阅读 · 0 评论 -
MyBatis学习(四)
目录缓存一级缓存代码(核心配置、bean、dao、utils、TEST)运行结果二级缓存缓存存在内存中的临时数据,将用户经常查询的数据放在缓存中,用户就不用从磁盘去查询,提高了查询效率一级缓存一级缓存(默认打开),在sqlSession从创建到close之间有效官方文档:select会缓存,增删改会刷新缓存验证:开启日志,在一次sqlsession中查询两次记录,并且比较。再两次查询中间修改一次数据,再查询。代码(核心配置、bean、dao、utils、TEST)mybatis-co原创 2020-07-29 22:25:10 · 86 阅读 · 0 评论 -
MyBatis学习(三)
目录一对多和多对一处理数据库设计核心配置文件多对一处理bean文件(省略get,set,constuctor,tostring函数)dao接口解决方式一对多处理bean文件(省略get,set,constuctor,tostring函数)dao接口解决方式总结一对多和多对一处理数据库设计CREATE TABLE `mybatis`.`teacher` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL DEFAULT NULL原创 2020-07-29 00:32:56 · 88 阅读 · 0 评论 -
Mybatis学习(二)
目录作用域(Scope)和生命周期SqlSessionFactoryBuilderSqlSessionFactorySqlSession属性名和字段名不一致问题日志的使用使用STDOUT_LOGGING使用LOG4J自定义输出作用域(Scope)和生命周期错误的使用会导致非常严重的并发问题SqlSessionFactoryBuilder一旦创建SqlSessionFactory,就不在需要最佳作用域:局部变量SqlSessionFactory类似数据库连接池,没有任何理由丢弃它或重新创原创 2020-07-28 20:20:01 · 83 阅读 · 0 评论 -
Java反射
反射能够分析类能力的程序称为反射(reflective)。反射机制的功能极其强大,反射机制可以用来:(1)在运行时分析类的能力。 (2)在运行时查看对象, 例如, 编写一个 toString方法供所有类使用。 (3)实现通用的数组操作代码。 •利用 Method 对象, 这个对象很像中的函数指针。...原创 2020-07-04 17:53:26 · 1946 阅读 · 0 评论 -
查缺补漏(二)Java基本知识
访问修饰符private:仅对本类可见。无修饰符(默认):对本包可见。protect:对本包以及所有子类可见。public:对所有类可见。修饰符\可见域类内部本包子类外部包private√无修饰符√√protect√√√public√√√√...原创 2020-07-04 12:15:26 · 116 阅读 · 0 评论 -
shell各种引号以及实现依次移动文件的简单脚本
单引号原创 2020-06-23 19:41:26 · 313 阅读 · 0 评论 -
Java集合的使用
import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.ListIterator;public class LinkedListTest {public static void main(String[] args) {LinkedList nums = new LinkedList<>();//一种可以在任何位置进行高效地插人和删除操作的有序序列nu原创 2020-06-05 21:44:39 · 142 阅读 · 0 评论 -
字节码角度分析++i和i++
通过示例从字节码的角度研究++i和i++底层发生的事情这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markd原创 2020-06-02 20:53:05 · 257 阅读 · 0 评论 -
Java字符串(String)总结
目录String(字符串)获得子串拼接不可变字符串检测相等空串与Null串常用方法可变字符串常用方法:String(字符串)Java 没有内置的字符串类型, 而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。每个用双引号括起来的字符串都是 String类的一个实例:String e = “”; // an empty stringString greeting = “Hello”;获得子串String greeting = "hello";String s = g原创 2020-05-23 19:09:47 · 102 阅读 · 0 评论 -
《TCP/IP详解卷一:协议》阅读笔记(三)
目录第6章 ICMP:Internet控制报文协议引言ICMP报文的类型第7章 Ping程序Ping程序IP记录路由选项与IP时间戳选项第8章 Traceroute程序Traceroute程序的操作第6章 ICMP:Internet控制报文协议引言ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被I P层或更高层协议(TCP或UDP)使用。一...原创 2020-04-17 16:30:54 · 174 阅读 · 0 评论