- 博客(25)
- 收藏
- 关注
原创 Go轻量级表达式执行引擎
注:与go语言中用法不同或者增加的都予以注明三元操作符:?(与其他语言中用法一致, eg:逻辑表达式?表达式1 : 表达式2)(注意表达式1与表达式2的执行结果类型可以不同)二元操作符:逻辑操作符:||&&比较操作符:==!<=>=in(可以类比sql中的in, 用法例子: 1 in [1, 2, 3],其将返回true)运算操作符:**(幂)位运算操作符:(按位异或,注意在引擎中其不能作为按位取反, 按位取反为)、&^<<>>一元操作符:++--
2023-03-16 18:52:32
921
原创 Go robfig/cron/v3 简析
entries [ ] * Entry // 一个Entry即一个定时任务 chain Chain // 装饰原始Job的装饰器数组 stop chan struct {
2022-10-01 16:54:01
2145
原创 Go官方限流器time/rate分析
这里只讨论常见的限流算法大致上可以分为两类算法:计数器算法、生产者消费者算法计数器算法:固定窗口算法:即将整个时间线按固定大小分割成段,每段只允许指定请求数量通过,其是最简单的算法,实现起来也很简单。缺点如下流量分布不均匀,比如一段为1s,在前0.5秒可能已经用完了所有的请求指标,后0.5秒不允许任何请求通过跨窗口大量请求通过:本质上还是流量分布不均匀导致,即我们选取跨时间段的一个虚拟时间段,这个时间段上可能允许通过阈值1~2倍的流量。
2022-09-20 16:00:29
588
原创 Go编译器源代码:词法分析
本文阅读需要有编译原理词法分析的知识,还需要对Go有一定了解,读懂一般的Go代码一、词法分析 只是概括一下词法分析相关知识,可能概括已经很长了,但是系统了解不是半篇博客就能够完成的,编译原理还是需要系统学习。1....
2022-04-07 11:15:14
1053
原创 在windows上编译自举后的Go源码安装Go
最近想着趁着毕业前深入研究一下Go源码,当然最好是另编译一次Go来练习。不然会干扰到正常Go程序的编译使用。首先,Go现在的版本早已经自举,自举即用Go来完成了Go的编译器的编写,所以现在编译最新的Go1.17需要已经安装好了一个Go编译器,这里就不赘述如何不从源码安装Go程序了。本文编译的Go源码为1.17首先,到github上下载go的源码并解压(go github),我们此时可以修改Go源码,拿fmt.Println函数来举例:Println函数在src\fmt\print.go中。这里添加一行
2022-03-15 18:07:13
627
原创 Mysql+JDBC实现一个非常简单的部门管理
题目来自某节点的视频。github链接:代码首先数据库中有2个表,部门表(dept.frm),用户信息表(user.frm)部门表结构如下图:含三个字段deptno(部门编号),dname(部门名称)loc,(部门地址)。主键字段为deptno用户信息表结构如下:包含uname(用户名称)、upassword(用户密码)小系统的结构如下图,包含4个模块:test中为程序入口dao即数据库访问对象,类中封装的是增删改查操作,减少重复代码util即工具,封装的是JDBC所需资源的创建与销毁
2020-07-28 20:19:06
532
原创 求表达式偏导(输出的是表达式)(Perl实现)
这是学校perl课程结束时的大作业。开始思考前,我上网搜寻了下,发现网上相应资料几乎没有,大多数都是求表达式某个点的导数值。而作业要求是求一个表达式的偏导式子,即输出也要是式子。没办法,只能自己思考了(最终版本代码在最后(带注释,可直接跳跃看最终版代码,代码600行,建议复制到编辑器中观看))开始阅读前建议点击下面链接观看3.5, 3.6, 3.7, 9.5, 9.6。因为写的很简单,不了解下数据结构的知识可能看不懂B站数据结构视频最开始思路对于表达式求导,第一个目标是先做出来加减乘除的。由
2020-07-14 21:51:45
1202
3
原创 单源最短路径(Dijkstra算法)(Java)
单源最短路径中的Dijkstra算法属于贪心算法,它的图中不允许出现权重为负值的边。算法时间复杂度与所用的优先队列的实现有关。算法与图的深度优先遍历与最小生成树的Prim算法相似,尤其与Prim相似。详细介绍可看《算法导论》第24章,下面的链接是别人的介绍与C代码别人的介绍与C代码Java代码如下import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedList;import java.util.Lis
2020-06-28 11:39:55
908
原创 最小生成树(Kruskal、Prim)(Java)
无向图用的是《算法导论》书上的,Kruskal、Prim算法都是贪心的,Kruskal算法时间复杂度为O(ElgV),Prim算法时间复杂度取决于最小优先队列。我用的是Java中的优先队列,使用时要注意,当优先队列改变时(删除等)才会刷新排序,应该是源码中删除等操作的代码中实现了重新排列。两个算法的代码如下:import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.L
2020-06-20 17:55:56
338
原创 图的广度与深度优先遍历(BFS,DFS)(Java)
BFS基本就是按《算法导论伪代码实现》,DFS为通过栈实现,代码如下:import java.awt.Color;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Queue;import java.util.Stack;public class BFSandDFStest { public static int
2020-06-19 19:11:50
249
原创 Needleman-Wunsch(可视化多个最优结果)(perl)
上次发了个Needleman-Wunsch算法,只打印了一个结果,这次随便写了个很长很长的if,else(自己都看不下去),也没时间优化了,代码如下:#!/usr/bin/perl -wuse strict; use autodie;#对于程序的说明:这个程序采用的是生信的Needleman-Wunsch 算法,起源较早,算是最早的序列比对算法了 #Needleman-Wunsch 算法简介:首先创建一个二维的得分矩阵,行和列相等,都比序列长度大一,还要有一个数据结构储存打分表,即2种相同
2020-06-02 23:12:32
497
原创 实现序列全局对比(Needleman-Wunsch )(perl)
这篇博客我写了简单和中等难度两个比对方法1.简单的动态规划,得出基因的最短编辑距离简介在注释中,代码如下:#!/usr/bin/perl -wuse strict;use autodie;#这个程序就是一个简单的动态规划,它只能算出最短的编辑距离,理论上与Needleman-Wunsch 算法相似#不同的是,这个dp矩阵存的是最短编辑距离,而Needleman-Wunsch 算法的dp矩阵存的是得分情况#这题的思想是,dp矩阵第一行与第一列都是代表某一条序列对上一条空序列,所以距离逐渐加一
2020-05-29 18:28:45
2199
原创 二叉搜索树(Java)
下面的程序实现了一个二叉搜索树,每个结点的key为一个学生对象,BST类中实现的方法有:求数的高度,求树中最大最小值,中序遍历(有序),求某个结点的前驱与后继,插入结点。这些方法的时间复杂度大多是O(h)的,遍历为O(n)。public class BSTMethodTest { public static void main(String[] args) { TreeNode lilei=new TreeNode(new Student(1001,"Lilei","math")); T
2020-05-28 19:52:55
193
原创 实现双向链表(Java)
双向列表易增删,不易检索,代码如下:public class MyLinkedListTest { public static void main(String[] args) { MyLinkedlist l=new MyLinkedlist(); l.inSert(1); l.inSert(2); l.delete(2); l.delete(2); }}class Node{ Node prev; Node next; int key; pub
2020-05-27 09:59:44
164
原创 实现队列,并用两个队列实现栈(Java)
代码如下,在用两个队列实现栈时进栈时间复杂度一般为O(n),出栈时间复杂度为O(1),大家也可自行改成进栈O(1)出栈O(n)来练手import java.util.LinkedList;import java.util.Queue;public class MyQueueAndMystackByQueneTest { public static void main(String[] args) { MyQueue q=new MyQueue(2); try { q.enqueue(
2020-05-26 14:51:30
228
原创 实现栈(Java)
实现了栈的push和pop方法,代码如下:package trf;public class MyStackTest { public static void main(String[] args) { MyStack mystack=new MyStack(10); try {//主函数最好别抛出了,要捕捉异常 mystack.push(3);//这里几行自己可以随便测试一下 int x=mystack.pop(); System.out.println(x); }
2020-05-20 09:39:46
141
原创 计数与基数排序(Java实现)
这2个排序的时间复杂度都为O(n),但是他们的使用都是有限制的,代码如下:import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class CountingAndRadixSortTest { public static void main(String[] args) { int[] a=new int[10]; for(int i=0;i<a.length;i++)
2020-05-19 14:48:20
196
原创 实现最小堆并进行堆排序(Java)
用java实现最小堆,并且实现以下2个题目:实现堆排序实现保留数据流中最大的5个数代码如下:package trf;import java.util.Arrays;public class MinHeapTest { public static void main(String[] args) { System.out.println("第一题排序"); double[] a=new double[] {9.1,1.2,2.5,6,8,3}; MinHeap mh1=ne
2020-05-18 11:35:49
1054
原创 快速排序(Java)
快速排序的特点是:递归,原地排序,时间复杂度平均为O(nlgn)代码如下:public class QuickSortTest { public static void main(String[] args) { double[] A=new double[10]; for(int i=0;i<A.length;i++) A[i]=(int)(Math.random()*100);//为了结果看起来简洁点,这里就强转成int quickSort(A,0,A.leng
2020-05-17 21:58:27
194
原创 Perl的一些初级练习题
Perl形势不太好,我是必修课要学的,大家可以去学习Python,不过Perl处理文本还是很可以的。有错误欢迎私信我1.读入一个文件,将序列变成一行输出#!/usr/bin/perl -wuse strict;use 5.026;open IN,"<$ARGV[0]",or die $!;open OUT,">out.txt",or die $!;while(<IN>){ chomp; print OUT $_;}print OUT "\n";close
2020-05-15 23:25:14
3294
原创 归并排序(Java实现)
Java实现归并排序归并排序一般是我们所学的第一个递归思想的排序,它的时间复杂度为O(nlgn),非原地排序,代码如下:public class MergeSortTest { public static void main(String[] args) { double[] a=new double[10]; for(int i=0;i<a.length;i++) ...
2020-05-07 18:04:59
229
原创 插入排序(Java实现)
Java实现快速排序最近在学数据结构,教材是黑皮书算法导论,小白的我准备把自己的课后作业记录下来,代码如下:public class InsertionTest { public static void main(String[] args) { double[] a=new double[10]; for(int i=0;i<a.length;i++) a[i]=...
2020-05-05 23:11:24
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人