OS课设
大水老师,老师人超级好,97 OS课设 环境配置 老师给了安装教程PPT,并不麻烦。 在apt install前,确认你的虚拟机网络可用。 关于虚拟机的网络配置,我参考了https://zhuanlan.zhihu.com/p/130984945,整个教程我也复制整理了一遍放在文末。 Linux下使用CLion进行Debug 首先打开项目:将以下两个Makefile进行Associte With File Type,定义为GNU MakeFile文件,记得定义第一行匹配模式。完成后: MakeFile.common中会报错,将如下冒号替换成空格: 然后打开具体的lab文件夹,会发现有报错,在Seetings中找到MakeFile,删掉Build target的all,选OK即可。 对于Configurations: 然后就可以打断点用debug模式运行了。 Lab1:Road Map Through Nachos 1234567891011121314151617181920212223242526272829303132333435363738394041424344 ...
Dart-Mixin是什么
Dart-Mixin是什么 Mixin 是一种在多个类层次结构中重用代码的方法。mixin是面向对象程序设计语言中的类,其他类可以访问mixin类的方法、变量而不必成为其子类。Mixin的作用就是在多个类层次结构中重用类的代码,在类中混入其他功能,来增强代码的复用能力。可以使用with关键字将多个mixins放入同一个类中,而且dart对这个数量没有作任何限制。 举例 123456789101112131415161718192021mixin TestMixin { void test() { print('test'); } int testInt = 1; void test2();}class Test with TestMixin { @override test2() { print('test2'); }}void main() { Test().test(); // test print(T ...
KalmanFilters-theory-and-demo
卡尔曼滤波:理论与实践 定义与应用场景 卡尔曼滤波(Kalman filter)是一种高效的自回归滤波器,它能在存在诸多不确定性情况的组合信息中估计动态系统的状态。对于这个滤波器,我们几乎可以下这么一个定论:只要是存在不确定信息的动态系统,卡尔曼滤波就可以对系统下一步要做什么做出有根据的推测。即便有噪声信息干扰,卡尔曼滤波通常也能很好的弄清楚究竟发生了什么,找出现象间不易察觉的相关性。因此卡尔曼滤波非常适合不断变化的系统,它的优点还有内存占用较小(只需保留前一个状态)、速度快,是实时问题和嵌入式系统的理想选择。 样例下的卡尔曼滤波推导 举个栗子:你造了一个可以在树林里四处溜达的小机器人,为了让它实现导航,机器人需要知道自己所处的位置。 也就是说,机器人有一个包含位置信息和速度信息的状态 x⃗k\vec x_kxk:x⃗k=(p⃗,v⃗)\vec x_k=(\vec p,\vec v)xk=(p,v) ,其中p代表位置,v代表速度,或者更通俗的,可以是任意描述系统状态的两个向量(当然也可以是多个) 我们的小机器人装有GPS传感器,定位精度10米。虽然一般来说这点精度够用了,但我们 ...
众智实验
众智实验 当年的众智实验 不知道从哪里翻出来的报告与源码 原本报告是md写的,不知道扔哪去了 lab1 lab2 lab3 lab4 lab5 合集
图解TCP/IP拾遗
图解TCP/IP拾遗 书中一些重点知识的摘抄与一些个人理解。 第一章 内容不多,1.7以前的都可以略读吧。 1.7传输方式分类 面向有连接与无连接,课上会讲。 电路交换与分组交换 课上也讲 电路交换:建立连接 -> 通话 -> 释放连接;在通话的全部时间内,通话的双方始终占用端到端的通信资源; 报文交换:整个报文先传送到相邻节点,全部存储下来后查找转发表,转发到下一个节点; 分组交换:把一个报文划分为几个数据段后,在其前面加上一些由必要控制信息组成的“首部(存有目的地址、源地址以及控制信息)”后,就形成了“分组”发送给路由器,路由器将这些分组数据缓存到自己的缓冲区,再转发给目标计算机。 分组交换的优点: 分组交换的问题: 分组在各路由器存储转发时需要排队,会引起一定的“时延”; 无法保证通信时端到端所需的带宽; 分组必须携带的控制信息可能成为一定的开销。 1.8地址 地址的唯一性,很好理解,我们必须通过一个地址唯一确定一个通信主体。 层次性主要解决的是性能问题,毕竟MAC地址有48位,一点一点查,就算有缓存也会导致性能不高,MAC地址与IP地址都有唯一性 ...
CSharp从入门到入门
CSharp从入门到入门 开发环境:VSCode,需要先装NET的SDK,不装的话打开一个cs文件也会提醒你装。 win64下载: https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-6.0.401-windows-x64-installer?journey=vs-code 你的SDK会安装在这里:C:\Program Files\dotnet\sdk c#与java相似之处可能会很简略。 项目创建 我们创建一个控制台应用,可以参考 https://learn.microsoft.com/zh-cn/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-6-0。 首先打开你的项目文件夹,控制台输入dotnet new console --framework net6.0,回车。 然后将 Program.cs 的内容替换为你的代码,比如hello world: 12345678910using System;namespace HelloWorl ...
FLutter性能优化
FLutter性能优化 准备 以 profile 模式启动应用,如果是混合 Flutter 应用,在 Flutter SDK的flutter/packages/flutter_tools/gradle/flutter.gradle 的 buildModeFor 方法中将 debug 模式改为 profile即可。 当然,如非必要,不太建议使用第二种方式 位置如图: Run > Flutter Run main.dart in Profile Mode 与调试代码可以在调试模式下检测 Bug 不同,性能问题需要在发布模式下使用真机进行检测。这是因为,相比发布模式而言,调试模式增加了很多额外的检查(比如断言),这些检查可能会耗费很多资源,而更重要的是,调试模式使用 JIT 模式运行应用,代码执行效率较低。这就使得调试模式运行的应用,无法真实反映出它的性能问题。 而另一方面,模拟器使用的指令集为 x86,而真机使用的指令集是 ARM。这两种方式的二进制代码执行行为完全不同,因此,模拟器与真机的性能差异较大,例如,针对一些 x86 指令集擅长的操作,模拟器会比真机快,而另一些操作 ...
安卓Jetpack从两眼一抹黑到两眼一黑
安卓Jetpack从两眼一抹黑到两眼一黑 写的太烂,慢慢改只能 依赖 123456789101112131415161718192021222324252627282930313233343536dependencies { def lifecycle_version = "2.6.0-alpha01" def arch_version = "2.1.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // ViewModel utilities for Compose implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version" // LiveData implementation "androidx ...
Linux-mindMap-for-sduer-first-term
Linux-mindMap-for-sduer-first-term 大一的时候的Linux笔记,从不知道什么地方翻出来的。 后期没再改,仅代表我大一的入门水平 01基础命令.pdf 02文件系统.pdf 03权限控制.pdf 04进程.pdf 05vi.pdf 06shell.pdf 07shell编程.pdf
编译原理
编译原理 课程主要内容是设计和实现编译器 第一章:引论 基本概念 [广义·课本原文]编译器是一个程序,读入某种语言(源语言)编写的程序并将其翻译成一个与之等价的另一种语言(目标语言)编写的程序。作为这个翻译过程的一个重要部分,编译器能够将用于报告被编译的源程序中出现的错误。 但根本任务、关键任务是程序翻译。 [狭义]把人类更容易理解和使用的高级语言转化为计算机能“理解”和运行的机器语言(或者较为接近的汇编语言)。 翻译程序(Translator):把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序 编译程序(Compiler):把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。 运行编译程序的计算机:宿主机 运行目标程序的计算机;目标机 根据用途和侧重,编译程序可分为: 诊断编译程序(Diagnostic Compiler) 优化编译程序(Optimizing Compiler) 交叉编译程序(Cross Compiler):编译程序产生不同于其宿主机的目标代码 可变目标编译程序( ...
计算机网络
计算机网络 第一章 概述 概念 A computer network is a collect of autonomous computers interconnected by a single technology. 计算机网络是自主(自治)的计算机通过通信技术(通信线路与通信设备)互联起来的集合体 三网: 电信网络:向用户提供电话、电报及传真等服务; 有线电视网络:向用户传送电视节目; 计算机网络:使用户能够在计算机之间传递数据。 应用 例如,一个对等网络: 分类 关于计算机网络,没有一种被普遍接受的分类方法,但是有两个维度非常重要:传输技术和网络尺度。 按照传输技术 从广义上讲,目前普遍使用的传输技术有两种,分别是广播式链路和点到点链路。 点到点(point-to-point)链路将一对单独的机器连接起来。在一个由点到点链路组成的网络中,为了从源端到达接收方,短消息必须首先访问一个或多个中间机器,这种短消息在某些情况下称为数据包或包(packet)。通常在网络中有可能存在多条不同长度的路由,因此,找到一条好的路由对点-点网络非常重要。点-点传输只有一个发送方和一个接收方 ...
CAS指令与MESI缓存一致性协议
CAS指令与MESI缓存一致性协议 锁机制存在的问题 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。 volatile是不错的机制,它是通过汇编语言中的LOCK指令实现的,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。 独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。 而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁的缺点是不能解决脏读的问题。乐观锁用到的机制就是CAS,Compare and Swap。 什么是CAS CAS的全称为Compare And Swap,直译就是比较交换。是一条CPU的原子指令,其作 ...
github学生包申请for-SDUers
github学生包申请for-SDUers 如果在校外建议连上学校VPN,比如aTrust 在官网登录并且选择学生 给你的账号添加学校邮箱并进行验证(如果没添加过),并选择学校为山东大学 去山大官网找可信凭证 ,或山东大学信息服务网站如图位置 申请一个在读证明,会给你发到邮箱里 然后github会让你拍照(调用电脑摄像头) 然后很快你的学校邮箱就会收到回复,基本是秒批,如图 参考 https://zhuanlan.zhihu.com/p/104574959
kotlin从Java到入门
kotlin从Java到入门 主要是基于大二学生的java水平,一些java中的(或者很相似的)基本都省略了,一些冷门的也是。 现在这里仅仅是我对官网教程的粗摘以及很少的笔记,后续如果继续学习会进一步增补。 谁再说kt像java我一定给他一jio 不过该有的都有 可以在 Kotlin 中调用 Android 或其他 Java 语言库的 API 。Kotlin 与 Java 语言具有互操作性。此设计让 Kotlin 代码可以透明地调用 Java 语言方法;对于 Kotlin 独有的功能,可采用注释轻松向 Java 代码公开。 对于未使用任何 Kotlin 特有语义的 Kotlin 文件,Java 代码可以直接引用,无需添加任何注释。两相结合,就可以同时使用 Java 代码和 Kotlin 代码。 可以在同一个项目中同时使用 Java 文件和 Kotlin 文件。可以根据自己的喜好或多或少采用 Kotlin 语言进行开发。java和kotlin可以同时存在,可以混编开发。 Tips: 我的IDEA有点小问题,我不确定是否只有我会出现这种情况。 我的kt代码的main()都无法直接运行 ...
数据库课设的技术细节
数据库课设的技术细节 前端项目地址:https://github.com/ZWN2001/TrainClientFlutter 后端项目地址:https://github.com/ZWN2001/TrainServerSpringboot (包括数据库数据构造器代码) 爬虫项目地址:https://github.com/ZWN2001/data_spider_12306 技术栈 后端:springboot+redis+mybatis+druid+rabbit MQ,CQRS 前端:flutter+Hive 总体架构选型 我觉得首先我们要对这个题目有一些基本的认识,这是一个查操作极其频繁、写逻辑极其繁琐的系统,我们的架构导向就是更加高效地完成查操作,同时实现高内聚低耦合的更高维护性的写逻辑。 数据源 数据源来自12306官网,通过爬虫爬取了12306官网中热门城市的排列组合之间的所有车次以及这些车次的原子区间,共4376车次,60615个原子区间,基于这些数据进行了座位管理表、原子票价表、原子票务票的数据构造,统一随机生成了10天的服务量,共生成了座位管理表1050204行数 ...
我的客制化键盘KeyChron Q3
我的客制化键盘KeyChron Q3 前言:一堆为什么 Q:为啥要选KeyChron Q3呢? A:个人而言吧,也是选了好久。当初最开始是看黑爵AC067的,毕竟三模嘛,也不贵,很香,但是感觉改装空间不大,可玩性一般,所以最后将目光集中在了大家评价比较好的KeyChron的Q系列,我个人不是很喜欢按键太多的长键盘,对旋钮也不太感冒,所以最后选了Q3的普通版,价格也比较合适,700就可以入手。 开箱 开箱感觉还不错,包装很精致,没有太多好说的。就是一个无轴无键帽的套件。 改造 基本结构是这样的 改造过程参考了https://www.bilibili.com/video/BV1g54y1f7z2?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click 内胆 改造选用的材料: 改造大纲: tips: 轴下垫要压在卫星轴下面,需要把卫星轴先拆下来,夹心棉放在卫星轴上面就行。 POM定位板有点坑,长度略长导致中间会翘起来,使得轴的针脚插不进PCB,细总直接给退款了。 定位板定位螺丝长度不 ...
jjwt-0.9.1造成的token签发时base64编码错误问题
jjwt-0.9.1造成的token签发时base64编码错误问题 异常栈如下: 一般来说都是java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter,都会有at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26) ~[jjwt-0.9.1.jar:0.9.1]这一行。 1234567891011java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java. ...
暑期机器学习引论
暑期机器学习引论 介绍 How to Define A Learning Problem: What to learn 通俗来讲,我们希望通过计算机学习算法以及给定的 x,f(x)x,f(x)x,f(x) 对找出 准确或近似的 fff 函数。 Whether it has learned Apparent error rate显然是不可以的,这就好比抄答案,没有意义。 True error rate 是最客观的。 Reinforcement Learning 强化学习的主要任务就是通过在环境中不断地尝试,根据尝试获得的反馈信息调整策略,最终生成一个较好的策略π,机器根据这个策略便能知道在什么状态下应该执行什么动作。 我觉得比较重要的几个观点: RL is learning from trial and error interaction with the world. RL is training by rewards and punishments. 增强学习的研究建立在经典物理学的范畴上,也就是没有量子计算也没有相对论。这个世界的时间是可以分割成一个一个时间片的,并 ...