自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 Python装饰器工具类

实现了一个装饰器工具类,在保留原函数完整的类型提示的情况下方便地对各种类型的方法进行装饰。用来实现切面编程

2024-10-23 20:36:28 138

原创 带过期的lru缓存【python】

装饰器实现的带过期功能的缓存

2022-11-19 15:09:08 561 1

原创 简易HTTP 隧道技术

代理,隧道

2022-06-20 22:19:25 770

原创 几道数论和其他题的题解

P3601 签到题题目背景我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数。这题作为签到题,给出l和r,要求 求出下面式子结果∑i=lrqiandao(x) mod 666623333\sum_{i=l}^r qiandao(x)\ mod \ 666623333i=l∑r​qiandao(x) mod 666623333输入格式一行两个整数,l、r。输出格式一行一个整数表示答案。说明/提示对于30%的数据,l

2022-05-07 19:54:58 464

原创 P4447 分组

题目描述小可可的学校信息组总共有n 个队员,每个人都有一个实力值a[i]。现在,一年一度的编程大赛就要到了,小可可的学校获得了若干个参赛名额,教练决定把学校信息组的nnn 个队员分成若干个小组去参加这场比赛。但是每个队员都不会愿意与实力跟自己过于悬殊的队员组队,于是要求分成的每个小组的队员实力值连续,同时,一个队不需要两个实力相同的选手。举个例子:[1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1, 2, 3, 4, 5][1,2,3,4,5][1,2,3,4,

2022-04-20 12:53:07 623

原创 shell 【bash】脚本模块化实践

起因众所周知bash是个相当自由的语言,一个函数echo字符串直接就给你运行了,如果时网络上那分分钟就给你注入了。不过还好,没人用bash写网络应用。最近搭建openvpn,自己写了个脚本,但是bug不断。于是想分几个模块写,于是去网上找bash如何导入其他脚本。结果发现bash导入其他脚本非常简单粗暴。所有脚本的变量函数都混在一起,感觉非常不爽。于是就自己写了个导入逻辑。遇到的问题期间试过好几种方法都效果不好。最开是想到的是用 export ,主脚本当作库脚本的子shell。这样就可以屏蔽库脚本的

2022-03-11 21:27:37 764

原创 VLAN 虚拟局域网 搭建

建立虚拟局域网环境 vmware12第一台centos 7虚拟机作路由器,另外两台作两个局域网里的机器。网络设置如下,Vmnet8和NAT模式和互联网连接用于和外界通信,地址为192.168.8.0/24 ,Vmnet1,Vmnet2分别作两个局域网的网卡,子网地址分别为192.168.1.0/24 ,192.168.2.0/24创建三个虚拟机,LAN1带网卡VMnet1,LAN2带网卡VMnet2。route虚拟机带网卡VMnet1、VMnet2、VMnet8。LAN1 初始情况LAN

2022-03-07 12:58:33 3039

原创 vscode javascript 提示增强

方法一 [JSDoc]/** * * @param {Number} a * @param {Number} b * @returns */function add(a, b) { return a + b;}/**@type {string}*/var b;b.split(',')JSDoc 手册方法2 @types对于第三方库的代码,我们不可能手动标注类型。一般来说可以只需要下载对应库的类型的定义,vscode就自动有提示了。以jquery 库为例yarn

2022-02-20 18:28:45 3511

原创 nvmw删除不完全导致的bug

今天用cmd运行命令一直找不到node,设置环境变量怎么设都没用,最后想放弃了,结果浏览用户目录下的时候看到发现个cmd_auto_run.cmd文件,第一反应谁给我安了个病毒?打开一看好家伙,里面代码是重置环境变量的。导致我怎么改环境变量也没用。解决方法就是把cmd_auto_run.cmd里的代码清空。或者win+R输入regedit三处注册表\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor的AutoRun属性...

2022-02-19 14:24:59 602 1

原创 remix-ide 环境搭建

remix-idedocker run -d -p 8881:80 remixproject/remix-ide:OktoOK这里不用latest版的原因是最新版把 Deploy & run transactions 插件禁用了.如果觉得旧用下面命令可以自己查需要的版本curl https://registry.hub.docker.com/v1/repositories/remixproject/remix-ide/tags | python3 -m json.tool | more

2022-02-11 17:05:42 776

原创 区块链学习三

目前,作为客户端验证区块链的主要方法有两种:全节点和 SPV 客户端。全节点第一个也是最安全的模型是比通过下载和验证从创世块一直到最近发现的块的块来确保块链的有效性。要欺骗客户端,攻击者需要提供一个完整的替代区块链历史,该历史比当前的“真实”链难度更大,并且计算成本很高,因为大部分好的节点会去计算真实的链。根据定义,大多数累积性工作证明是“真实”链。 由于在链末端生成新块所需的计算难度,在 6 次确认后欺骗全节点的能力变得非常昂贵。 这种形式的验证对女巫攻击具有很强的抵抗力——只需要一个诚实的 节点

2022-01-26 21:07:02 11058

原创 区块链学习笔记及总结【二】

区块链总述区块链是比特币的核心技术,在比特币系统里用来记录有序且带有时间戳的交易记录。主要用于防止(double spend)双花攻击和篡改以前的交易记录。这里需要注意是防止篡改,不是防止更改。实际上区块链某些情况还鼓励更改,比如不合法的区块写入的时候。由于只承认最长合法链,对于那些没有在最长合法链的区块来说,他们就是被修改了。总的来说,区块链是一个不需要外力的自稳定系统(在大部分算力在好人手里的情况下)。整个区块体现的是绝大部分参与者的意志。当然这绝大部分的标准在不同系统设计里就有不同的标准了,在比

2022-01-20 23:49:56 14178

原创 区块链学习【一】

定义区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块。它即是下一代的价值互联网,也是世界上最慢的数据库。区块链想解决的问题区块链主要想解决的是去中心化的信任问题。在中心化系统中,大家都可以信任一个信誉良好的大公司或政府,通过他们来确保交易的合法性。在区块链中则是基于大部分人都是好人这个假设来设计的。这些占大多数的好人就充当了原来的中心机构为区块链网

2022-01-08 23:14:43 12457 1

原创 快速排序简洁写法

代码int partition(vector<int> &a, int s, int e) { for (int i = s; i <= e;) { while (a[e] < a[i]) i++; swap(a[s++], a[i++]); } return s - 1;}void quick_sort(vector<int> &a, int s, int e) { if (s < e) { int m

2022-01-01 14:14:50 452 1

原创 依概率不放回随机抽样算法

起因前段时间帮同学写了下ER网络和BA网络。其中BA网络要根据度占整个图的度的比例作为概率。于是就写了个按概率随机抽数的函数pick。思路当时想法很简单。就是把数轴分成几块,再随机抽点。比如数组[1,2,3],就生成区间[1,6]的随机整数。若随机数为5就认为选中第三个数。问题上面方法抽一个数很有效,但如果是抽n个数性能就下降的很厉害。越抽到后面重复的概率越大。我刚开始用洗牌算法,抽到第i个数,就和位置i的数字交换,再对后面数字依概率取数。这样虽然解决了重复取数的问题,但是效率仍然不高。

2021-12-22 16:18:47 1515

原创 删数问题【贪心】

给定n位整数d,去掉k(k<n)个数字后剩下的数字按原次序排列组成一个新的正整数。求最小正整数。贪心法一般有两种思路。思路1一种是 缩小问题规模。比如说本题就可以把原题改为给定n位整数d,去掉1个数字后剩下的数字按原次序排列组成一个新的正整数。求最小正整数。进一步说,可以转化成找一个数x,无论删除x前的数还是x后的数结果都比删除x结果差。下面分类讨论删除的数在x前设删除的数为 a如图只要对任意a, 满足a≤ba \leq ba≤b就行了。换句话说,x前为非递减序列的末尾

2021-12-18 15:18:32 1543

原创 golang 函数式小工具

golang 函数式小工具

2021-12-07 17:42:14 381

原创 WSL2 【ubuntu20.04】+ Mysql8.0.27远程登陆

获取windows和wsl局域网ip在wsl 里运行如下脚本可以获得。#!/bin/shwsladdr=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}')winaddr=$(cat /etc/resolv.conf|grep nameserver|awk '{print $2}')echo 'windows ip:'$winaddrecho 'ubuntu ip:'$wsladdr安装mysqlsudo apt-get install

2021-12-04 21:02:01 1345

原创 Python3 柯里化装饰器【@currying】

起因网上大多数都是通过functools.partial或硬编码的方式实现柯里化。硬编码缺点就不说了。functools.partial缺点是如果要柯里化需要调用partial包装一下。如果是改原有项目工作量会有点大。而且partial包装后的函数并不能在参数填满时返回代理函数的返回值。代码我这里用python装饰器可以无缝地把一个函数 柯里化def currying(func, n=None): """柯里化""" n = n or func.__code__.co_ar

2021-11-26 18:55:07 402

原创 简易扫码登录

起因因为老师强制要求扫码登录。应室友请求,特此水文。思路电脑登录时,会生成一个全局唯一的id。并且把id信息存到二维码中。服务器也会把id和javax.websocket.Session存到map里。当手机扫码时会跳转到一个特殊的网页。该网页自动把id和用户信息一并发到服务器。服务器根据id找到javax.websocket.Session。通过javax.websocket.Session向电脑端的浏览器发送用户信息并放行。当然这里也可以不用websocket。websocket的好处是双工通信

2021-11-02 19:52:20 239 1

原创 leetcode 335. 路径交叉 题解及证明

原题 335. 路径交叉给你一个整数数组 distance 。 从 X-Y 平面上的点 (0,0) 开始,先向北移动 distance[0] 米,然后向西移动distance[1] 米,向南移动 distance[2] 米,向东移动 distance[3]米,持续移动。也就是说,每次移动后你的方位会发生逆时针变化。 判断你所经过的路径是否相交。如果相交,返回 true ;否则,返回 false。输入:distance = [2,1,1,2]输出:true分析分析一下题目,如果每条边都

2021-10-30 15:15:19 3377

原创 原生c语言实现模板函数

普通的堆排序#include <stdio.h>void swap(int *a, int *b) { int t = *a; *a = *b; *b = t;}void adjust_heap(int *heap, int s, int e) { for (int n;; s = n) { if ((n = 2 * s + 1) + 1 < e && heap[n + 1] < heap[n]) n++; if (n >

2021-10-25 22:22:01 487

原创 VScode go语言环境

本文以CentOS 实验安装go#!/usr/bin/env bashcd /tmp && wget https://studygolang.com/dl/golang/go1.15.linux-amd64.tar.gztar -C /usr/local -xzf go1.15.linux-amd64.tar.gzecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc如果你不用ide的话,下面的步骤其实都不用

2021-10-17 13:25:01 64

原创 VsCode 搭建远程linux内核开发环境

环境ssh ,g++/gcc , gdb ,makevscode远程连接服务器安装Remote ssh连接服务器选第一个,感觉没啥关系右下角Open ConfigHostName 填ip然后就像打开本地文件一样打开服务器里的文件搭建c/c++ 环境安装c/c++ 插件搭建普通c/c++开发环境经典hello,World#include<stdio.h>int main(){ printf("%s","Hello,World\n");

2021-10-14 17:38:28 1346

原创 halo 开源项目源码学习

目的看开源项目的目的无非就两个,看别人的代码组织结构。看别人的用到得到技术,还有就是看别人踩过的坑。感受就我看halo项目的感觉而言。感觉就是注释几乎就没有用。我看似乎这个项目国人挺多的怎么一句中文注释也没有?你英文旁边加个中文也好。好多百度翻译出来的意思也是连蒙带猜。注释基本就是类名的完整版。反正我感受最大的就是注释最重要的是要写明为什么需要这个类有什么作用。最好还有以写上可能什么时候调用。有些方法感觉根本调试不到。虽然我之前注释也没做到。但我以后会这样要求自己。另外一个和我之前写的项目相比一个

2021-10-10 23:04:02 2192

原创 jshell 兼容linux【运行java脚本】

问题原链接像如下脚本是无法运行的原因是java不支持#作注解#!/usr/bin/env jshell -sSystem.out.println("Hello World")/exit虽然也不是完全无法运行,但是报错很扎眼。原链接里改成java注释的方法并不能很好解决问题我通过改一下解释程序让jshell也可以用#注释#!/bin/bashtmp=`mktemp`cat $1 | sed 's/^[[:space:]]*#.*$//' > $tmpecho '/exit' &g

2021-09-20 12:44:24 200

原创 vscode快速渲染uml,助力源码阅读。

vscode快速渲染uml目的为什么要用VSCOde 生成 uml 类图。用idea不香吗?idea生成一个类的uml类图还是很不错的。但是当时生成整个项目或则某个包下的uml就不方便了。也有可能是我不知道方便的办法。安装插件具体安装方式百度 vscode plantumlbash 过滤出类windows 下可以用git自带的bash。或则用wslfind . -name '*.java' | xargs cat | \awk -vRS='{' 'match($0,/public\s+((c

2021-09-11 15:56:50 3922

原创 Vscode配置 Scala和sbt配置

安装插件全家桶简单粗暴。如果你不想安这么多你就把带java和scala的安了就行了配置通俗易懂的配置maven-local是本地仓库路径加 file://剩下的就是镜像了[repositories] local maven-local: file:///home/lifuquan/.m2/repository nexus: http://maven.aliyun.com/nexus/content/groups/public/ typesafe: http://repo.typ

2021-08-28 13:23:20 3664 1

原创 Java8 stream新定义运算

动机java的Stream在批量处理数据方面很强大。但是在面对类似json等每部分都有不同语义的数据时就力不心了。正因为不像列表或集合,json数据常常每部分有不同语义,所以要交由不同模块来处理。而最常用的map方法。只允许我们嵌入一个映射函数。当然,你可以在map函数里用if else 选择函数,但这就耦合了。(其实用groupingBy再entrySet().stream()也不错,但是就不能惰性求值了)于是我写了个Function实现类select。根据select注入模块。模块只要做好自己的工作就

2021-08-23 21:38:57 153

原创 Java8 Stream reduce 归约的并发注意事项。combiner.apply(u, accumulator.apply(identity, t))理解

reduce概念下面解释是抄别人的。和haskell等语言里的概念很像好的命名是自解释的 reduce的方法取得就是其中归纳的含义 java8 流相关的操作中,我们把它理解“累加器”,之所以加引号是因为他并不仅仅是加法 他的运算可以是一个Lambda 表达式 所以更准确的说 reduce 是一个迭代运算器Stream包的文档中其实已经说的很明白了 但是就是因为不是很理解所以看的云里雾里 其中说到:一个reduce操作(也称为折叠)接受一系列的输入元素,并通过重复应用操作将它们组合成一个简单的结果

2021-08-22 22:24:26 513 2

原创 【21届软件创新实验室暑假集训】java后端赛道大作业

设计思路总体设计自定义框架dataflow上学期学了软件工程。提了一下面向数据流的设计。我就想写一个小框架。把设计好的数据流,可以无缝地转换为java代码。并且高可扩展,天然地支持逐步细化。本来受到AOP的影响。节点我都想加个切点作用的节点。结果我发现这样写很啰嗦,无穷无尽的感觉。最后我放弃了这种方案,改用子图的方式。我觉的这可以最大程度上满足需求的变化。一般来说最高层的图最抽象。需求变化基本不会影响它。最底层的function就像组成这世界的基本元素也不怎么会变。变化的最多的是中间层,也是最一团乱麻

2021-08-21 19:32:20 439 3

原创 VsCode写SpringBoot项目, Java language server 卡在68%??

下载springboot插件搜索 Spring Boot Extension Pack下载新建springBoot项目微软很贴心在欢迎页里加了教程。大家可以自己看问题有时候Java language server 会卡在68%??导致项目都运行不了。在设置里搜索spring.initializr.serviceUrl换成阿里镜像。"spring.initializr.serviceUrl": "https://start.aliyun.com"阿里镜像不知道为啥,没有AOP的依赖。如果要用A

2021-08-04 19:57:37 1193

原创 写着玩的处理框架

前言上学期学了软件工程。提了一下面向数据流的设计。我就想写一个小框架。把设计好的数据流,可以无缝地转换为java代码。并且高可扩展,天然地支持逐步细化。本来受到AOP的影响。节点我都想加个切点作用的节点。结果我发现这样写很啰嗦,无穷无尽的感觉。最后我放弃了这种方案,改用子图的方式。我觉的这可以最大程度上满足需求的变化。一般来说最高层的图最抽象。需求变化基本不会影响它。最底层的function就像组成这世界的基本元素也不怎么会变。变化的最多的是中间层,也是最一团乱麻的,如果有个类管理代码块之间的联系那岂不是

2021-08-04 14:02:18 69

原创 tar增量备份linux

tar -g 可以实现增量备份,但是如果第一次比第二次备份时少了一些文件那解压恢复时就会有问题。被删除了的文件还会存在。于是我写了一些脚本用于管理和恢复时删除这些不该存在的文件。目录结构├── backup│ ├── backup@2021-07-30_16-08-43.tar.gz│ ├── backup@2021-08-03_12-50-23.tar.gz│ ├── .backup-snapshot│ ├── .date│ ├── e2021-07-30_16-08-

2021-08-03 13:46:52 529

原创 Deep Copy

import java.lang.reflect.*;import java.util.*;public class DeepCopy { @SuppressWarnings("unchecked") public static <T> T copy(T b) { try { if (b instanceof String || b instanceof Character || b instanceof Number || b i

2021-08-02 14:31:09 94

原创 # bash 的 try catch

最近写了下shell. 深感if else 繁琐。参考了下csdn某位博主。结果代码没用。于是我自己写了个模板。等我写博文时翻到他引用的stackoverflow链接时才发现。他少了&& 。 :)我的模板:( :) || { case $? in *) perror $? ;; esac}stackoverflow模板set -e { # try command1 && #s

2021-08-01 18:21:45 529

原创 B-Tree

元操作split 操作#mermaid-svg-kZyz2rdXkVpbahOD .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-kZyz2rdXkVpbahOD .label text{fill:#333}#mermaid-svg-kZyz2rdXkVpbahOD .node rect,#mermaid

2021-07-30 14:37:36 72

原创 merger红黑树

package cn.lyf;public class rbt { Node root; class State { boolean bal; Node cur; public State(Node cur, boolean bal) { this.bal = bal; this.cur = cur; } } public void ins(int k)

2021-07-23 15:52:13 132

原创 Java仿haskell

Functor函子package cn.lyf.fx;import java.util.*;import java.util.function.*;//集成了Either函子public class Functor { private Object value; protected Functor(Object val) { value = val; } /////// Pointed///////////产生个函子 public s

2021-07-22 16:59:32 138

原创 手写红黑树

手写红黑树前言之前也写了一些数据结构但都写完就丢。没记录下来。感觉有点可惜,所以这次想记录一下。本次这个红黑树删除采用的不是传统的和叶子节点交换。而是通过合并两个子树来删除。我借鉴一篇haskell的红黑树。不知道是不是我没仔细看,感觉那篇红黑树实现起来有些漏洞。我上一篇博文也有点。虽然修补一下也没问题。但改来改去就是让人不爽。最后我放弃了blance高度必须减一的性质。思路就清晰多了。代码AVLpackage cn.lyf.tree;public class AVL<T extends

2021-07-22 15:33:56 241

scala-sbt-helloworld.zip

vscode 新建helloworld模板

2021-08-28

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

TA关注的人

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