自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 Go轻量级表达式执行引擎

注:与go语言中用法不同或者增加的都予以注明三元操作符:?(与其他语言中用法一致, eg:逻辑表达式?表达式1 : 表达式2)(注意表达式1与表达式2的执行结果类型可以不同)二元操作符:逻辑操作符:||&&比较操作符:==!<=>=in(可以类比sql中的in, 用法例子: 1 in [1, 2, 3],其将返回true)运算操作符:**(幂)位运算操作符:(按位异或,注意在引擎中其不能作为按位取反, 按位取反为)、&^<<>>一元操作符:++--

2023-03-16 18:52:32 731

原创 Go robfig/cron/v3 简析

entries [ ] * Entry // 一个Entry即一个定时任务 chain Chain // 装饰原始Job的装饰器数组 stop chan struct {

2022-10-01 16:54:01 2004

原创 为什么补码能用于计算?为什么带符号位数字也可用补码计算?

本文大多是借鉴网上资料加笔者个人的理解, 如有错误, 欢迎联系指正。

2022-09-23 11:44:06 633

原创 Go官方限流器time/rate分析

这里只讨论常见的限流算法大致上可以分为两类算法:计数器算法、生产者消费者算法计数器算法:固定窗口算法:即将整个时间线按固定大小分割成段,每段只允许指定请求数量通过,其是最简单的算法,实现起来也很简单。缺点如下流量分布不均匀,比如一段为1s,在前0.5秒可能已经用完了所有的请求指标,后0.5秒不允许任何请求通过跨窗口大量请求通过:本质上还是流量分布不均匀导致,即我们选取跨时间段的一个虚拟时间段,这个时间段上可能允许通过阈值1~2倍的流量。

2022-09-20 16:00:29 539

原创 Go编译器源代码:语法分析

Go语法分析源码阅读

2022-04-19 11:39:29 271

原创 Go编译器源代码:词法分析

  本文阅读需要有编译原理词法分析的知识,还需要对Go有一定了解,读懂一般的Go代码一、词法分析  只是概括一下词法分析相关知识,可能概括已经很长了,但是系统了解不是半篇博客就能够完成的,编译原理还是需要系统学习。1....

2022-04-07 11:15:14 1006

原创 了解Go第一步:Go与Plan 9汇编语言

本文快速阅读需要一定的汇编、Go、编译原理基础1. Go与Plan9

2022-03-17 16:25:31 4645 2

原创 在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 603

原创 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 501

原创 求表达式偏导(输出的是表达式)(Perl实现)

这是学校perl课程结束时的大作业。开始思考前,我上网搜寻了下,发现网上相应资料几乎没有,大多数都是求表达式某个点的导数值。而作业要求是求一个表达式的偏导式子,即输出也要是式子。没办法,只能自己思考了(最终版本代码在最后(带注释,可直接跳跃看最终版代码,代码600行,建议复制到编辑器中观看))开始阅读前建议点击下面链接观看3.5, 3.6, 3.7, 9.5, 9.6。因为写的很简单,不了解下数据结构的知识可能看不懂B站数据结构视频最开始思路对于表达式求导,第一个目标是先做出来加减乘除的。由

2020-07-14 21:51:45 1116 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 860

原创 最小生成树(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 322

原创 图的广度与深度优先遍历(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 239

原创 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 472

原创 实现序列全局对比(Needleman-Wunsch )(perl)

这篇博客我写了简单和中等难度两个比对方法1.简单的动态规划,得出基因的最短编辑距离简介在注释中,代码如下:#!/usr/bin/perl -wuse strict;use autodie;#这个程序就是一个简单的动态规划,它只能算出最短的编辑距离,理论上与Needleman-Wunsch 算法相似#不同的是,这个dp矩阵存的是最短编辑距离,而Needleman-Wunsch 算法的dp矩阵存的是得分情况#这题的思想是,dp矩阵第一行与第一列都是代表某一条序列对上一条空序列,所以距离逐渐加一

2020-05-29 18:28:45 2061

原创 二叉搜索树(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 162

原创 实现双向链表(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 153

原创 实现队列,并用两个队列实现栈(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 220

原创 实现栈(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 131

原创 计数与基数排序(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 178

原创 实现最小堆并进行堆排序(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 1023

原创 快速排序(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 183

原创 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 3147

原创 归并排序(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 217

原创 插入排序(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 147

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除