2023数据库课设经验分享
2023数据库课设经验分享 我的数据库课设与我的一些看法 首先,我的选题是火车票售票系统,所以我的讲解很多会以此为例,我的老师是李晖老师,不同老师风格有有所不同,所以如果你有验收等等方面的问题,最好咨询一下对应老师带过的学长学姐。 其次,我依然觉得数据库课设是一次非常重要的锻炼个人实际开发能力的机会,如果你觉得自己毕业后大概率做开发工作(前端、后端等等),那么数据库课设是一次非常好的锻炼自己能力的机会(当然,对于软工来讲,你也可以选择做算法岗、运维,产品等等)。 此外,针对软院培养方案来讲,你的数据库课设在后续课程中大概率会被多次复用。以我个人为例,我的数据库课设在暑假结束验收完后拿了A,大三上软件工程实验我们复用了一次数据库课设(当时用的是我队友的,问就是我懒),大三下项目管理也会用到(不过当时我直接拿i山大举例了),如果你选了刘士军老师的服务开发这门课,那么还会用到一次(这次用的是我的,队友保研线边缘挣扎,我没啥保研希望比较闲,直接把整个实验全包了,最后拿了个99,可能跟我的课设更偏向后端有关)。所以有个成熟、完整而熟悉的项目对你后续课程帮助还挺大的。 最后,我个人对数据库课设的总 ...
删除gitignore修改前提交的大文件
删除gitignore修改前提交的大文件 How 当发现忘记将一个300M的文件加入了git而无法提交到github的时候,你只能通过gitignore补救,但由于已经被版本控制记录过,所以就算你在gitignore里加入了规则也无法push。 所以需要将版本控制中涉及的这个文件删掉,这个错误我已经犯过好多次了,毕竟并不是很容易注意到,在这里记录解决方案。 首先,在git仓库路径下 12345git rm -r --cache .git add .git commit -m ".gitignore now work" 但是这些还不够。 如果是要删掉指定文件 1git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 【文件路径】' --prune-empty --tag-name-filter cat -- --all 要删掉记录的文件的路径:src/main/resources/config/application-test.yml 则代码为: 1g ...
记一次博客公式渲染排查
记一次博客公式渲染排查 Hexo博客公式非常容易踩的两个坑:一个是公式美元符号与公式之间存在空格,里另一个是不符合KaTeX语法。 而且这两个问题在Typora下是完全看不出来的。 我的数据库博客就有很多这样的问题,相当长的一段时间里没有解决。今天抽空搞定了,写点心得。 空格问题 这个其实非常好解决,比如 $ \forall a \in A $ 我们只需要将 “$ ” 和 " $"直接进行替换就行(注意带上空格)。同时这种问题在博客中特征是非常明显的,通过浏览器搜索美元符号就能排查。 KateX渲染问题 这个要麻烦一些,因为并没有明显特征,只能遍历博客检查。 由于我通常喜欢用LaTeX写,但Hexo渲染实际上用的是KaTeX,但Typora里也看不出来KateX下有没有问题 我遇到的暂时是这两个情况 与或非:∧,∨,¬\wedge ,\vee,\lnot∧,∨,¬,\wedge ,\vee,\lnot与\and ,\or, \not,后者就会出现渲染问题 \overset,这个我也没太细究怎么解决,直接放图片了事 Hexo公式对括号嵌套的问题 1234567 ...
A-star路径规划
A star路径规划 简介 静态环境下,A*算法通常有较好的性能。静态环境指的是在路径规划过程中,环境的状态不会发生变化,例如在一个没有移动障碍物的地图中规划路径。在这种情况下,路径规划算法只需要考虑地图的固定障碍物和起点终点的位置,不需要考虑环境状态的变化。 动态环境指的是在路径规划过程中,环境的状态会随着时间而发生变化,例如在一个有移动障碍物的环境中规划路径。在这种情况下,路径规划算法需要不断地感知环境的变化,并及时更新路径规划结果,以适应环境状态的变化。这种情况下,需要使用更加复杂的路径规划算法,例如蚁群算法等,来适应环境的动态变化。 经典算法 广度优先搜索 为了更好的理解 A*算法,我们首先从广度优先(Breadth First)算法讲起。广度优先搜索以广度做为优先级进行搜索,从起点开始,首先遍历起点周围邻近的点,然后再遍历已经遍历过的点邻近的点,逐步的向外扩散,直到找到终点。这种算法就像洪水(Flood fill)一样向外扩张,算法的过程如下图所示: 在上面这幅动态图中,算法遍历了图中所有的点,这通常没有必要。对于有明确终点的问题来说,一旦到达终点便可以提前终止算法,下面这 ...
PID算法
PID算法 所谓的PID,指的是proportion,integration,differentiation,比例,积分,微分。 PID的基本思路是根据偏差量的大小,运用比例P、积分I、微分D计算出一个控制量 uuu,将这个控制量输入被控制的系统,系统接收到该输入量后会输出一个相应的输出量,PID控制器再检测该输出量,并再计算偏差,然后再循环以上过程。 u(t)=Kp(e(t)+1Ti∫0te(t)dt+Tdde(t)dt)u(t)=K_p \Bigg( e(t)+\dfrac{1}{T_i}\int^t_0e(t)dt+T_d\dfrac{de(t)}{dt}\Bigg) u(t)=Kp(e(t)+Ti1∫0te(t)dt+Tddtde(t)) KpK_pKp —— 控制器的比例系数; TiT_iTi —— 积分时间常数; TdT_dTd —— 微分时间常数; u(t)u(t)u(t) —— PID控制器的输出信号; e(t)e(t)e(t) —— 给定值r(t)r(t)r(t)与测量值之差。 公式可简化为: 对于离散值: u(t)=Kp∗e(t)+Ki∗∑n ...
服务开发
服务开发 Chapter-1:绪论 什么是服务 定义为在一个应用软件内部的一种方法、过程、或通讯。 旨在满足某些业务需求的应用程序的操作。 区别于系统的,服务一个或者一组相对较小且独立的功能单元, 用户可以感知最小功能集。 优势 服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决 服务每个模块都可以使用不同的开发技术,开发模式更灵活 服务强调结构上的“松耦合”,而在功能上则可以整合为一个统一的整体,可以实现有效的拆分应用,实现敏捷开发和部署 API帮助开发者 快速的应用开发与部署 多通道集成 敏捷的服务组合 内部和外部服务的市场 Web技术方案:从RPC到REST web的基石 URI:地址 HTTP:传输 HyperText:表达(除了HTML外,也可以是带有超链接的XML或 JSON) MIME:扩展 本意为多目的Internet邮件扩展,最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。 当它被HTTP协议支持之后,它的意义就更为显著了。它使得H ...
SDU选课黑白名单
SDU选课黑白名单 记一下我的选课黑白名单,纯个人感受,这里只是我选过的限选。不在名单中的课我可能也没选,仅供参考 白名单 Linux(限选,大一下) 很不错的基础课,对我此后的开发历程有很大帮助,虽然老师讲的挺催眠,但如果你有毅力强迫自己学会Linux的话可以不选,但别太自信。 C++(限选) 算法、数据结构等课都有很浓的cpp风格,所以不多bb 众智科学(限选 鹿sir的课一如既往的不错。众智的思想也深刻地影响了我此后的思维方式,让我用更“计算机”的思维看待世界。反正讲课内容跟老师都是好评 传统文学修养(选修 中心线下课,赵焕祯老师,讲的真的超级好! 信息检索与利用(选修 实用技能还能作为选修学分,图书馆开的课,挺好的。 黑名单 人机交互(大三上限选 图形学(大三下限选 任何名字里带数学、原理的限选课 一看就是理论课,然鹅这种一般都很考验自己的自学能力。 此外,偏理科性的课都会很考验自学能力。毕竟据说教学对老师晋升并无裨益,所以很多老师对教学并没有那么上心,并且,课堂更多的作用在于激发灵感、指引方向,不要指望在课堂上学到所有东西。 在大三下我选了机器学习后我更确认了这一点。 此 ...
Butterfly一图流踩坑
Butterfly一图流踩坑 网上参考了非常多的教程,基本的一图流还是很简单的,但是会发现主页头图(index-img)跟页脚一直有一个阴影遮罩,最后也是魔改去掉了。 首先,Hexo\themes\butterfly\source\css文件夹下新建css文件,如transpancy.css,在主题配置文件_config.yml(或者_config_butterfly.yml)中的inject中添加,例如: 1234inject: head: - '<link rel="stylesheet" href="/css/transpancy.css">' bottom: 文件内容如下: 1234567891011121314151617181920212223242526272829303132333435363738394041/* 头图透明 */#page-header:before{ background-color: transparent!important;}/* 头图透明 ...
网页解除复制粘贴限制的一些小技巧
网页解除复制粘贴限制的一些小技巧 这个小技巧我很早就在用,最近一次偶然又发现了这种小套路。拿来说一说。 解除粘贴限制 F12进入浏览器开发者控制台,找到对应输入框的事件监听器,在监听的事件中很容易找到针对paste的限制: 直接移除掉就可以。 而且由于很多组件或者脚本都是复用的,所以移除一次之后就基本上可以永久粘贴(不刷新或者重新进入网页的前提下) 解除复制限制 这个其实跟上面同理,你会找到针对copy的监听。 不过这大可不必,因为你打开控制台后多半就能从网页源码中直接找到你想粘贴的文字。 但这样也比较麻烦,我比较喜欢谷歌浏览器的一个插件:simplyAllowCopy: 你可以直接在应用商店找到并安装,使用。
机器学习实验
机器学习实验 贝叶斯分类器在鸢尾花数据集的实现 最简单的,我们选用朴素贝叶斯分类来实现。这部分原理与公式我在课程笔记中有提到。 笔记地址 知识回顾 基本知识:贝叶斯定理 首先,贝叶斯定理: P(c ∣ x)=P(x ∣ c)P(c)P(x)P(c\ |\ \mathbf{x}) = \frac{P(\mathbf{x}\ |\ c) P(c)}{P(\mathbf{x})} P(c ∣ x)=P(x)P(x ∣ c)P(c) 在贝叶斯定理中,每个概率都有约定俗成的名称: P(c ∣ x)P(c\ |\ \mathbf{x})P(c ∣ x) 是类标记 ccc 相对于样本 x\mathbf{x}x 的条件概率,也由于得自 x\mathbf{x}x 的取值而被称作 ccc 的后验概率。 P(x ∣ c)P(\mathbf{x}\ |\ c)P(x ∣ c) 是样本 x\mathbf{x}x 相对于类标记 ccc 的类条件概率(class-conditional probability),或称为似然(likelihood),也由于得自 ccc 的取值而被称作 x\mathbf{x}x 的 ...
机器学习-代价敏感学习
代价敏感学习 Background 传统学习中,我们的目标通常是错误率最低,这默认了不同错误分类的代价是一样的,但实际上很多情况下把positive判断为negative跟把把negative判断为positive的代价是不一样的。也就是说: 如果在学习时考虑错误分类的代价,那么我们就可以称之为是代价敏感学习。我们最终的目标也变成最小化总代价。 对于 K分类问题,我们有类似于如下的 K×KK\times KK×K 代价矩阵,C(i,j)C(i,j)C(i,j) 指的是将一个实际上属于 jjj 的样本分类为 iii 所带来的代价。 [C(1,1)C(1,2)...C(1,K)C(2,1)C(2,2)...C(2,K)⋮⋮⋱⋮C(K,1)C(K,2)...C(K,K)]\left[ \begin{matrix} C(1, 1) & C(1, 2) & ...&C(1, K) \\ C(2, 1) & C(2, 2) & ...&C(2, K) \\ \vdots & \vdots & \ddots & \vdots ...
机器学习-特征选择和特征抽取
特征选择和特征抽取 特征选择和降维(特征提取)有着些许的相似点,这两者达到的效果是一样的,就是试图去减少特征数据集中的属性 (或者称为特征) 的数目;但是两者所采用的方式方法却不同:降维的方法主要是通过属性间的关系,如组合不同的属性得到新的属性,这样就改变了原来的特征空间;而特征选择的方法是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。 特征抽取(Feature Extraction):Creatting a subset of new features by combinations of the exsiting features. 也就是说,特征抽取后的新特征是原来特征的一个映射。 特征选择(Feature Selection):choosing a subset of all the features(the ones more informative)。也就是说,特征选择后的特征是原来特征的一个子集。 特征选择 我们希望获取尽可能小的特征子集,不显著降低分类精度、不影响分类分布以及特征子集应具有稳定、适应性强等特点。 为什么要做特征选择 在机 ...
机器学习-半监督学习
半监督学习 推荐 https://www.huaxiaozhuan.com/统计学习/chapters/12_semi_supervised.html ,太强了,太强了 啥是半监督学习(Semi-supervised Learning) 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能,就是半监督学习,现实生活中,我们很容易收集无标签数据,但有标签数据并不容易收集,所以我们需要一种模型,以少量标签数据作为参照,利用大量无标签数据进行训练,得到一个更高效的学习器。 也可以这样理解,半监督学习就是监督学习和无监督学习的折中版,而监督学习的核心就是回归,无监督学习的核心是分类,半监督学习一般的目标是找到一个函数迎合(也就是回归任务),然后用分类任务的信息去优化回归函数。 给定有标记样本集合 Dl={(x⃗1,y1),(x⃗2,y2),⋯ ,(x⃗l,yl)}\mathbb D_l=\{(\mathbf{\vec x}_1,y_1),(\mathbf{\vec x}_2,y_2),\cdots,(\mathbf{\vec x}_l,y_l)\}Dl={(x1,y1), ...
机器学习-聚类
聚类 在无监督学习(unsupervised learning)中,训练样本的标记信息是未知的,学习的目的是揭示数据的内在性质及规律,为进一步的数据分析提供基础。这类学习任务中研究最多,应用最广的是聚类(clustering)。 这一章的内容大致如下: 聚类任务:聚类过程是怎样的?聚类有什么用途?聚类的两个基本问题是什么? 性能度量:聚类的目标是什么?聚类性能度量的两大类指什么?各包含哪些度量指标? 距离计算:距离度量需要满足哪些基本性质?怎样度量有序属性?怎样度量无序属性?相似度度量和距离度量有什么区别? 原型聚类:什么是原型聚类?k均值算法是怎样的?学习向量量化算法是怎样的?高斯混合聚类是怎样的? 密度聚类:什么是密度聚类?DBSCAN算法是怎样的? 层次聚类:什么是层次聚类?AGNES算法是怎样的? 聚类任务 聚类(clustering) 定义 聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个簇(cluster)。通常来说每个簇可能对应一些特征,比方说音乐可以聚类成古典音乐、摇滚乐、流行乐等等。但聚类过程仅产生簇结构,簇对应的概 ...
机器学习-集成学习
集成学习 传统机器学习算法 (例如:决策树,人工神经网络,支持向量机,朴素贝叶斯等) 的目标都是寻找一个最优分类器尽可能的将训练数据分开。集成学习 (Ensemble Learning) 算法的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个臭皮匠,赛过诸葛亮。 Thomas G. Dietterich 指出了集成算法在统计,计算和表示上的有效原因: 统计上的原因 一个学习算法可以理解为在一个假设空间 H\mathcal HH 中选找到一个最好的假设。但是,当训练样本的数据量小到不够用来精确的学习到目标假设时,学习算法可以找到很多满足训练样本的分类器。所以,学习算法选择任何一个分类器都会面临一定错误分类的风险,因此将多个假设集成起来可以降低选择错误分类器的风险。 计算上的原因 很多学习算法在进行最优化搜索时很有可能陷入局部最优的错误中,因此对于学习算法而言很难得到一个全局最优的假设。事实上人工神经网络和决策树已经被证实为是一 个NP 问题。集成算法可以从多个起始点进行局部搜索,从而分散陷入局部最优的风险。 ...
机器学习-多标签学习
多标签学习 主要摘自http://palm.seu.edu.cn/zhangml/files/mla11-mll.pdf,部分参考https://link.springer.com/referenceworkentry/10.1007/978-1-4899-7687-1_910 推荐一篇知乎文章,也还不错,可惜我看到的时候笔记已经写完了。 Structure of Learning System 问题定义 X=Rd\mathcal{X} = \mathbb{R}^{d}X=Rd 表示 ddd 维的输入空间,Y={y1,y2,…,yq}\mathcal{Y} =\{ y_{1},y_{2},\ldots,y_{q}\}Y={y1,y2,…,yq} 表示带有 qqq 个可能标签的标签空间。 训练集 D={(xi,Yi)∣1≤i≤m}\mathcal{D} =\{ (\boldsymbol{x}_{i},Y _{i})\mid 1 \leq i \leq m\}D={(xi,Yi)∣1≤i≤m} ,mmm 表示训练集的大小,有时候会省略。 任务就是要学习一个多标签分类器 h:X↦ ...
机器学习-强化学习
强化学习 强化学习的主要任务就是通过在环境中不断地尝试,根据尝试获得的反馈信息调整策略,最终生成一个较好的策略π,机器根据这个策略便能知道在什么状态下应该执行什么动作。 我觉得比较重要的几个观点: RL is learning from trial and error interaction with the world. RL is training by rewards and punishments. 增强学习的研究建立在经典物理学的范畴上,也就是没有量子计算也没有相对论。这个世界的时间是可以分割成一个一个时间片的,并且有完全的先后顺序,因此可以形成这样的状态,动作和反馈系列。这些数据样本是进行增强学习的基础。 另一个很重要的假设就是 「上帝不掷筛子!」 在增强学习的世界,我们相信如果输入是确定的,那么输出也一定是确定的。试想一下,有一个机械臂在练习掷筛子,以掷出 6 点作为目标。但是如果无论机械臂如何调整其关节的角度及扭矩,掷出的点数永远是随机的,那么无论如何也不可能通过算法使机械臂达成目标。因此,增强学习算法要有用,就是相信在增强学习中每一次参数的调整都会对世界造成确定性的 ...
机器学习-神经网络
神经网络 在机器学习中,神经网络(neural networks)一般是指“神经网络学习”。所谓神经网络,目前用得最广泛的一个定义是“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的反应”。它是一种黑箱模型,解释性较差,但效果很好。目前已有一些工作尝试改善神经网络的可解释性。 这一章的内容大致如下: 神经元模型:什么是神经元模型?它的构造是怎样的?激活函数是什么?如何组建神经网络? 感知机与多层网络:感知机的构造是怎样的?感知机不能解决什么问题?多层网络是怎样的?多层前馈神经网络有什么特点? 误差逆传播算法:BP算法如何调整参数?有什么值得注意的地方?标准BP算法和累积BP算法有什么区别?如何设置隐层神经元的个数?如何处理BP神经网络的过拟合问题? 全局最小与局部极小:什么是全局最小?什么是局部极小?如何跳出局部极小? 其他常见神经网络:有哪些常见的神经网络?它们各自有什么特点?什么是竞争型学习?可塑性、稳定性、增量学习、在线学习各指什么?(没讲) 深度学习:深度学习是如何提升模型容量的?如何训练深度神经网络?怎么理解深度学 ...