编译原理
编译原理 课程主要内容是设计和实现编译器 第一章:引论 基本概念 [广义·课本原文]编译器是一个程序,读入某种语言(源语言)编写的程序并将其翻译成一个与之等价的另一种语言(目标语言)编写的程序。作为这个翻译过程的一个重要部分,编译器能够将用于报告被编译的源程序中出现的错误。 但根本任务、关键任务是程序翻译。 [狭义]把人类更容易理解和使用的高级语言转化为计算机能“理解”和运行的机器语言(或者较为接近的汇编语言)。 翻译程序(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. 增强学习的研究建立在经典物理学的范畴上,也就是没有量子计算也没有相对论。这个世界的时间是可以分割成一个一个时间片的,并 ...
支付宝沙箱使用之路
支付宝沙箱使用之路 可以参考的网站 https://open.alipay.com/develop/sandbox/app https://opendocs.alipay.com/common/02kkv7 https://opendocs.alipay.com/common/02kipl https://opendocs.alipay.com/open/204/106450 https://open.alipay.com/api/detail?code=I1080300001000041313#api-detail-content https://zhuanlan.zhihu.com/p/425893989 预处理 自定义密钥 https://opendocs.alipay.com/common/02kipl 公钥模式默认不启用,点击上面的链接获取密钥生成的exe生成密钥 应用公钥复制给网页对应窗口,会获取到支付宝公钥,启用完成。 下载沙箱版app 开发 阿里demo:https://gw.alipayobjects.com/os/bmw-prod/a526522f-3 ...
域模型、DDD、CQRS与12306的设计
域模型、DDD、CQRS与12306的设计 一系列好文摘录与汇总,具体出处参见文末参考连接 前言 不管在架构层面还是编码层面,采用CQRS的都会增加程序的复杂度和代码量,不过,这种复杂性可以在很大程度上被其所带来的“条理性”所抵消,“有条理的多”恰恰是为了简单。 域模型 什么是域模型 域模型(domain model)英文又称为问题域模型(problem space model)。维基百科(Wikipedia)对它的定义是 A conceptual model of all the topics related to a specific problem 。 可以翻译成: “域模型是针对某个特定问题的所有相关方面的抽象模型”。 这个定义有几个要点:第一是“特定问题”, 也即是说域模型是针对性某个问题域而言的, 脱离的这个特定问题,域模型的构建其实不存在一个最优或者是最合理的构建。 第二是抽象, 域模型是一个抽象模型, 不是对某个问题的各个相关方面的一个映射, 也不是解决方案的构建。 关于域模型, 经常会看到大家把逻辑数据模型(logical data model) 或者是物理数据模型( ...
Python爬12306余票
Python爬12306余票 项目地址:https://github.com/ZWN2001/data_spider_12306 数据库课设使用的爬虫 半成品,需要根据todo自己改改 main.py查的是学生票 main2.py查的是成人票 爬虫教程在 here 一些问题的解答 为什么要分成人与学生 如果你进行请求就会发现默认(成人票)只能请求到近几个月的数据。 而学生票则可以请求到更多。 成人与学生爬虫的区别 区别主要在请求的url与使用的cookie上。 url会使用purpose_codes参数进行区分。 cookie上,学生票要比成人票的cookie严格很多,无法直接通过selenium获取,只能手动填写、更新。 成人票使用了selenium的无头浏览器,默认使用了谷歌浏览器。 cookie的结构 两种票的cookie都是由两部分组成的,一部分是固定的cookie数据,通过多次相应头的set_Cookie设置的,从浏览器中可以获取,学生票cookie还会对其中的一些属性进行修改,并且会添加加密过的fo属性。 另一部分是请求的行程信息,其中起点与终点的值为站名,站编码的 ...
cpp小抄
来自 https://github.com/mortennobel/cpp-cheatsheet C++ QUICK REFERENCE / C++ CHEATSHEET Based on Phillip M. Duxbury’s C++ Cheatsheet and edited by Morten Nobel-Jørgensen. The cheatsheet focus is both on the language as well as common classes from the standard library. C++11 additions is inspired by ISOCPP.org C++11 Cheatsheet). The goal is to give a concise overview of basic, modern C++ (C++14). The document is hosted on https://github.com/mortennobel/cpp-cheatsheet. Any comments and feedback are ...
Python小抄
来自https://github.com/gto76/python-cheatsheet Comprehensive Python Cheatsheet Contents 1. Collections: List, Dictionary, Set, Tuple, Range, Enumerate, Iterator, Generator. 2. Types: Type, String, Regular_Exp, Format, Numbers, Combinatorics, Datetime. 3. Syntax: Args, Inline, Import, Decorator, Class, Duck_Types, Enum, Exception. 4. System: Exit, Print, Input, Command_Line_Arguments, Open, Path, OS_Commands. 5. Data: JSON, Pickl ...
Git 的奇技淫巧
来自:https://github.com/521xueweihan/git-tips Git 的奇技淫巧:see_no_evil: Git 是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。而 “版本管理工具” 能记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。 下面的内容就是列举了常用的 Git 命令和一些小技巧,可以通过 “页面内查找” 的方式进行快速查询:Ctrl/Command+f。 开卷必读 如果之前未使用过 Git,可以学习 Git 小白教程入门 一定要先测试命令的效果后,再用于工作环境中,以防造成不能弥补的后果!到时候别拿着砍刀来找我 所有的命令都在git version 2.7.4 (Apple Git-66)下测试通过 统一概念: 工作区:改动(增删文件和内容) 暂存区:输入命令:git add 改动的文件名,此次改动就放到了 ‘暂存区’ 本地仓库(简称:本地):输入命令:git commit 此次 ...
正则表达式
正则表达式 前言 这种学得快忘得也快的小玩意真是让人头疼。 通过使用正则表达式,可以: 测试字符串内的模式。 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 替换文本。 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。 基于模式匹配从字符串中提取子字符串。 可以查找文档内或输入域内特定的文本。 正则表达式的使用,可以通过简单的办法来实现强大的功能。下面先给出一个简单的示例: ^ 为匹配输入字符串的开始位置。 [0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。 abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。 我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。 修饰符(标记) 标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。 标记不写在正则表达式里,标记位于表达式之外,格式如下: 1/你的flags 下表列出了正则表达式常用的修饰符: ...
Python爬虫从入门到小黑屋
还是希望能比较系统地回顾一下爬虫的一些知识,不过有一些我也记不清了。 可能对小白不是很友好。 如果看视频可以参考这个。 Python爬虫从入门到小黑屋 概论 爬虫的矛与盾 robots.txt协议: 君子协议。规定了网站中哪些数据可以被爬取哪些数据不可以被爬取。 Request与第一个爬虫 1pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests 1234567891011121314import requestsif __name__ == '__main__': url = "https://fanyi.baidu.com/sug" s = input("请输入你要翻译的英文单词") dat = { "kw": s } # 发送post请求, 发送的数据必须放在字典中, 通过data参数进行传递 resp = requests.post(url, data=d ...
isdu暑期维护日志
日志 2022.7.4 解决了一系列由于空值引发的问题,其中: 一个比较奇怪的问题 方法返回值并没有什么问题,但data['data']可能原本就是null导致的报错,通常发生在获取不到课表数据的情况下。 同样可能出现这种情况: 原因是 arr可能为null 除此之外解决了几个使用null调用isEmpty或者length()造成的NoSuchMethodError 2022.7.7 解决对于20级以后的一些必修课不计入绩点的问题。 根据绩点的计算策略,我们只需要更改课程属性即可。 api.dart中添加获取用户年级的方法,直接从键值对存储hive中获取登录时存储的学号值,取学号的前四位就是用户的年级。 获取成绩时直接在原有的遍历中加一个方法处理一下即可。 处理的方法如下,不同年级按不同规定进行处理 本学期成绩的获取也是从全部成绩中获取到的,所以只需要改完上面的代码即可。 2022.7.10 IDE的一个bug:修改代码后重新build不会将修改的代码进行应用。热重载后会应用部分修改的代码但再次热重载后又会变回原样。 flutter3.0.4版本,flutter cle ...