自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 docker gogs启动以及同步迁移数据

选择登录,还是用原来的账号登录成功,可以发现原来的用户还在,而且登录进去原来的仓库还在,git操作也正常。对应容器中的路径为/data/gogs/conf/app.ini(因为两个容器的访问路径不一样)设置数据库,我选的是SQLite,修改访问URL,注册用户,登录进入,创建一个仓库作为测试。注意在启动前要修改配置文件中的EXTERNAL_URL。

2022-12-24 22:20:50 863 1

原创 go协程练习题

当10个文件都生成了,让10个sort协程从10文件中读取1000个数据,并完成排序,重新写入到10个结果文件。开10个协程writeDataToFile,每个协程随机生成1000个数据,存放到10文件中。

2022-12-18 22:46:12 227

原创 mybatis-plus动态排序

最终会拼接到sql语句的orderby中,后台处理query参数用的是mybatis-plus的LambdaQueryWrapper,问题来了,如何通过"name"这个字符串生成get方法对应的方法引用,也就是User::getName这种。本来想过用QueryWrapper直接传字符串进去,但是前端字段一般都是驼峰的,需要转成下划线形式的,否则会报错。而且其他查询条件也要跟着动,所以就放弃了这种方案。看源码eq这种方法需要的是SFunction,网上关于这方面的资料好难找。

2022-12-14 22:42:54 2806 2

原创 JSONObject与Map互相转换

阿里的fastjson库,看了一下很多方案都是先进行序列化成json字符串,然后再解析,会有性能的问题,其实JSONObject这个类本身就实现了Map接口。

2022-11-16 11:16:07 13635

原创 JDBC和SPI

Class.forName做了什么我们在用JDBC的时候,总是会写一句Class.forName("com.mysql.cj.jdbc.Driver");这里以mysql驱动为例,其他驱动都类似。这一步会使用类加载器加载对应的驱动,并执行com.mysql.cj.jdbc.Driver的静态代码块。进入com.mysql.cj.jdbc.Driver静态代码块中完成了驱动的注册,也就是new了一个自身的实例,并注册到DriverManager中DriverManager.registerDr

2021-12-31 20:15:26 532

原创 PyQt QScrollArea垂直滚动条自动滚到底端

最近在做一个类似QQ的局域网消息传输软件,当发送消息或者接收到消息时,滚动条应该自动滚动到最下方。刚开始想的是在发送或接收消息并创建提示信息后,执行如下代码self.scrollBar.setValue(self.scrollBar.maximum())这样做发现滚动条是可以向下动,但是不会到最下方,也就是说会有一点点空隙。bebug发现原因是增加滚动区域高度后,maximum方法获取的值还是原本的值,也就是还没有来得及更新。解决方案:设置一个标志位self.scrollButtonFlag

2021-12-10 13:32:49 2342 1

原创 Vue动态切换背景图

最近在改写一个网站,抽离公共组件的时候,发现一个nav组件图标是用background-image显示的。把基本的框架抽离出去,具体菜单项用插槽,然后图片需要用props传参。写了一个小案例。父组件Home.vue<template> <div class="home"> <button @click="changeBackground">切换图片背景</button> <br> <br> &l

2021-09-11 15:00:28 3008

原创 迅雷导出ed2k到eMule链接无效处理

迅雷导出ed2k到eMule链接无效处理最近用迅雷下载一些资源,看着像是下不动了,然后复制ed2k链接,准备导入到eMule中试试。然而eMule不识别,链接无效。复制到迅雷却可以,看了一下导出的链接格式。正常的格式是ed2k://|file|文件名称|文件大小|文件hash|/注意看分隔符是|再看迅雷导出的链接ed2k://%7Cfile%7C文件名称%7C文件大小%7C文件hash%7C/也就是说所有用到|的地方都被转义成了%7C查找替换一下再复制到eMule,果然可以了。...

2021-09-06 13:09:14 4793

原创 PyQt QPushButton点击切换状态

按钮可以有多个状态,点击切换或者代码修改状态可以改变图标,而且鼠标经过显示当前状态图标的hover状态图标,鼠标移走恢复normal状态。刚开始使用setIcon实现切换的,但是这个方法老是不刷新,所以改用重绘的方式实现。如果需要实现点击按钮切换图标,只需要连接clicked信号,然后调用setState()方法。通过代码修改也是一样调用setState()。state()方法可以访问当前的状态值。from PyQt5.QtCore import *from PyQt5.QtGui import *

2021-06-21 22:34:42 2918 1

原创 PyQt自定义VideoWidget

功能类似QVideoWidget,支持向左/向右旋转,水平/垂直翻转画面,始终保持原始长宽比不变。支持上浮透明控件(这个QVideoWidget实现不了)。VideoSurface.pyfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtMultimedia import *"""视频接口"""class VideoSurface(QAbstractVideoSurface): showImageSignal

2021-06-18 23:52:19 989

原创 PyQt实现自定义提示框(带三角形)

PopupWidget.pyfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class PopupWidget(QWidget): """ direction 方向 0上 1下 2左 3右 triangleOffset 小三角起始位置,默认为widget中间位置 triangleWidth 小三角宽度,默认10 triangleHeight 小三角

2021-06-10 20:06:01 937 2

原创 PyQt 实现滑动按钮

按钮有两种状态,点击按钮,切换状态,同时中间的圆有个移动的动画。形状是圆角矩形,也就是圆角外面是不会响应单击事件的。这个功能还是用setMask(QBitmap)实现的,我试过了如果用QpainterPath绘制,然后转多边形,转QRegion,然后setMask,这样操作锯齿特别明显。而且我做的这个控件是固定大小的,如果要可调节大小的话,就不适用了。SliderButton.pyimport sysfrom PyQt5.QtCore import *from PyQt5.QtGui impor

2021-06-08 11:44:07 2328 2

原创 PyQt重写QMediaPlayer和QMediaPlaylist

在做一个本地视频播放器,做到删除播放列表的时候发现Qt自带的QMediaPlaylist有个bug。用removeMedia()进行删除操作。如果播放列表中某一项正在播放,删除这个项之后的任意项都没问题。但是如果删除这一项之前的某一项,当前索引会发生变化,然后正在播放的内容会停止。C++代码运行出来也是一样的。没找到解决方案,所以只能重写了。时间仓促,只实现了一些常用的方法。比如说上一个,下一个,设置模式,添加移除媒体等等。MyPlaylist.pyfrom typing import It

2021-05-27 23:57:46 1251

原创 JSON.parse方法实现

JSONReader.js/** * 将json字符串转为token */class JSONReader { constructor(str) { this.str = str; this.pos = 0; this.tokens = []; this.scan(); } scan() { while(this.pos < this.str.length) { le

2021-02-11 08:09:36 1204

原创 JSON.stringify方法实现

JSONFormat.js/** * 将对象转为json字符串 */class JSONFormat { /** * 构造器 * @param obj 目标对象 * @param replacer {function|Array} * @param space {string|number}间隔符 */ constructor(obj,replacer,space) { this.target = obj;

2021-02-11 08:04:07 358 2

原创 HTML词法分析

读取html字符串,转为tokens数组。scanner.js/** * 扫描器类 */class Scanner { /** * 构造器 * @param str html字符串 */ constructor(str) { this.str = str; this.pos = 0; this.tokens = []; this.scan(); } /** *

2021-01-22 20:50:16 270

原创 wxPython hosts文件编辑器

import wxclass MyFrame(wx.Frame): def __init__(self,hostsPath): wx.Frame.__init__(self,None,-1,title='host文件修改GUI',size=(540,600)) self.panel = wx.Panel(self) self.hostsPath = hostsPath self.loadHostContent() s

2021-01-02 13:55:06 101 1

原创 手写jquery.cookie插件

/** * 设置cookie * @param name * @param value * @param config expires:(Number|Date)有效期;设置一个整数时,单位是天;也可以设置一个日期对象作为Cookie的过期日期; path:(String)创建该Cookie的页面路径; domain:(String)创建该Cookie的页面域名; secure:(Boolean)如果设为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS; */f

2020-12-31 21:41:49 134 1

原创 js 打印输出格式类封装

/** * 字体样式 */class Style {}Style.DEFAULT = 0;Style.HIGHLIGHT = 1;Style.NOTBOLD = 22;Style.UNDERLINE = 4;Style.NOTUNDERLINE = 24;Style.BLINK = 5;Style.NOTBLINK = 25;Style.ANTIDISPLAY = 7Style.NOTANTIDISPLAY = 27;/** * 颜色类枚举,因为前景色和背景色相同颜色差值1

2020-12-25 22:25:49 210

原创 java 打印输出格式类封装

控制台可以输出多种字体样式,前景色和背景色,与语言无关。package com.shy;/** * 字体样式 */enum Style { DEFAULT(0),HIGHLIGHT(1),NOTBOLD(22),UNDERLINE(4),NOTUNDERLINE(24), BLINK(5),NOTBLINK(25),ANTIDISPLAY(7),NOTANTIDISPLAY(27); private int value; Style(int value) {

2020-12-20 10:52:55 204 3

原创 python pdf转markdown

wxPython in action,比较系统地介绍了wxPython的使用。一直用的是中文翻译的版本,有时想运行里面的demo,复制出来很费劲,所以写了一个自动化的脚本,将文本转为了markdown格式。读取pdf文件,将每一页转为json文件。import pdfplumberimport jsonpath = r'wxpython in action.pdf''''字典组成的列表,按照某一个属性归类,也就是返回一个二维数组'''def groupByKey(arr,key = 'y0'

2020-12-15 21:52:20 1871

原创 Node监听文件改变重启服务

如果监听的文件发生变化,会自动重启服务。启动入口index.jsconst {fork} = require('child_process');const fs = require('fs');let childPid = { pid: null, isAlive: true};/** * 启动子进程 */function startServerProcess() { //启动子进程并监听子进程发来的消息 let childProcess = fork

2020-11-30 22:53:41 578

原创 根据json配置文件生成restful风格的后台接口服务

今天看到json-parser,正好想复习一下node的知识,做了个实现。用到的包就两个,express和body-parser。package.json{ "name": "json-server2", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1"

2020-11-28 23:08:00 342

原创 关键字提示编辑器二

做了一些改进。当前行无内容时,隐藏提示框。存在的问题,如果某一行的文字过多,则会自动换行,但是这种换行只是在视觉上的,html代码中没有体现。所以可能会导致高度计算不够。效果:index.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>div提示框跟随光标移动</title> <link rel=

2020-11-24 22:06:28 127

原创 关键字提示编辑器一之可编辑div获取光标位置

没有考虑浏览器兼容性,暂时只考虑了Chrome。效果在div中输入的时候,底下的蓝色部分(span)跟随光标变化而变化,而且内容为光标前的所有文本。红色的部分是一个|,用来模拟光标。所以只要获得|的相对像素位置,以及div的位置,就可以计算出光标的绝对像素位置。还有个前提是蓝色部分的样式要和div文字的样式相同。div获取光标位置比较复杂,如果是textarea和input框,内部是纯文本,比较好处理。div中输入的时候,第一行输入的内容是div的第一个文本元素。换行之后,每一行都会自动被一个d

2020-11-22 23:19:06 1811

原创 Springboot跨域过滤器

package com.shy.filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;import java.util.M

2020-11-15 21:28:25 105 1

原创 代码高亮编辑器封装成vue组件

相比于上一篇文章,关键字列表完善了一下,支持多行注释,js面向过程改为面向对象,去掉jQuery依赖,封装为vue组件。效果图:App.vue<template> <div> <code-high-light :width="800" :height="400" class="code-hl"/> </div></template><script> import CodeHighLi

2020-11-15 11:34:13 287 1

原创 jQuery实现代码高亮编辑器

我在写一个网页版navicat,其中的一个小插曲。只是一种思路,肯定会有不完善的地方,我最近正在完善。目前词法分析只针对Mysql。用jquery是因为方便,后期会去掉。除了jquery以外没有任何第三方插件。有个codemirror插件,没有细细地研究过。因为后期想封装成vue组件,所以codemirror这种感觉有点老了。原理:h5 div有contenteditable属性,为true时div可以编辑。如果只有一个div开启编辑模式,同时触发事件去处理输入内容,并回显到这个div上,光标会自动回到

2020-11-14 20:05:01 685

原创 JS比较两个对象数组的差异

后台传过来一个对象数组,vue渲染到页面中,然后修改了这个对象数组,可能是增删改了其中的某些对象。但是不是操作一下就发到后台去保存,而是只是前端页面在发生变化,最后点击提交按钮的时候才把变化过的数据传到后台去更新。而且后台更新的时候,不是把这整个数组替换成新的,而是改动里面的一部分。所以最后一步发送到后台的时候,前端就需要比较新的对象数组相比于原来的对象数组做了什么操作。然后把这些操作发送到后台。以下是比较的算法,刚开始我是把list1和list2都遍历了一遍,觉得效率低就改为了下面的。/** *

2020-11-09 17:43:57 13008 3

原创 定时任务同步文件修改(热部署功能尝试)

手写的嵌入式服务器想增加热部署功能,主要是一些静态文件。所以做了这个尝试。原理是用定时任务每隔一段时间查看文件修改日期,和上一次进行比较,如果不相同,则同步文件到目标地址。MonitorTask.javapackage com.shy.code;import java.io.File;import java.util.HashMap;import java.util.Map;import java.util.TimerTask;/** * 定时任务类 */public class

2020-10-02 00:27:09 202

原创 手写服务器之文件上传

之前写的服务器完善了一下,新增文件上传的功能。这个记录的是一次尝试的首先是主方法,和以前一样,启动一个ServetSocket,每接收到一个客户端就开启一条线程。package com.shy.myCat;import com.shy.myCat.thread.ClientThread;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * 主入口类 * */public

2020-09-19 23:45:42 174

原创 手写jdbcTemplate

以前也封装过一些DBUtil,但是封装得没有jdbcTemplate彻底,试着实现了一些常用的功能。主要是回调函数的应用,以及模板方法设计模式。主类package com.shy.core;import com.shy.defaultImpls.DefaultPreparedStatementCreator;import com.shy.defaultImpls.DefaultPreparedStatementSetter;import com.shy.exceptions.DataAcces

2020-09-13 11:03:40 341

原创 一次SQL优化的尝试

今天解决一个线上的问题,模糊查询卡死,速度特别慢。通过一系列排查发现sql语句大概长这样(伪代码)。select * from a where a.bm_id in (123,456,789,.......)/*省略号表示多个字符串*/and a.bm_mc like '%测试%'order by xxx;where in 里面的内容是通过另一条sql查出来的,当时的结果是一个List,然后在代码中拼接逗号,再塞到in的括号里面去。如果结果比较少的情况下还好,有的情况下in里面拼接了700多

2020-08-25 20:49:51 122

原创 Mybatis日志输出sql语句参数填充

Mybatis日志输出sql语句是带?的,要拎出来查询的话不太方便。所以写了这个,自动替换所有的?为实际的参数。package com.shy;import lombok.Data;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;@Datapublic class SqlLog { private Strin

2020-07-22 21:15:27 1946

原创 Oracle SQL INSERT语句转存储过程

Oracle的CLOB或者是BLOB类型的字段,如果直接插入字符串,而且字符串的长度大于4000的话,总是会报错。网上找了有一种可行的方案是创建存储过程,定义变量去替换原来的字符串。但是只适合单条的情况,比如说我有一堆sql文件,但是因为这个原因执行不了,手敲的话根本就不可能完成。所以利用Druid的SqlParser API完成了这个脚本,可以自动完成转换。package com.shy;import com.alibaba.druid.sql.ast.SQLExpr;import com.a

2020-06-26 18:09:19 303

原创 Java中的枚举

枚举类,是一个可以提供有限个数的实例的类模板。它有点类似单例模式,如果说实例个数为1的话,就等同于单例模式。我们在学习这个的时候,一般是先学习enum关键字的写法,再去学习自定义枚举类。我觉得应该先去学习自定义枚举类,因为enum关键字只是一种简化的写法,这样更容易弄清一个东西实质。枚举在具体的项目中还是挺多的,可以用来表示一些常量,维护修改都比较方便,而且可以见名知意。先来看一个自定义的枚举类。public class MyEnum { //提供两个实例 public final st

2020-05-19 22:27:20 91

原创 简单的JSP编译器

把jsp文件编译成一个Servlet,没有用到正则。也没有用到第三方包。不支持EL和JSTL,功能比较简单。index.jsp<%@ page import="java.text.SimpleDateFormat" %><%@ page import="java.util.Date" %><%@ page contentType="text/html;char...

2020-04-28 11:46:19 1171

原创 C语言实现四种数组排序方法

插入法排序(升序)#include<stdio.h>void main(){ int i,a[10],temp,pos; printf("为数组元素赋值:\n"); for(i=0;i<10;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } for(i=1;i<10;i++) { tem...

2020-04-28 11:37:39 19500 2

原创 C语言模拟面向对象语言

面向对象是一种思想,并没有规定死怎么去实现。这里我用C语言这种面向过程的语言来模拟了一下。暂时解决了封装,方法的重载,继承和多态还没实现。#include <stdio.h>#include <stdlib.h>struct Student{ int num;//声明类成员属性 char* name; int sex; void (*...

2020-04-28 11:33:28 304

原创 手写一些C语言编译器自带的头文件

一写C语言编译器自带的头文件,也就是一些库函数的实现。为了防止和编译器自带的冲突,采用下划线开头下划线结尾。_ctype_.h//// Created by ngoyat on 2020/1/25.//int _isalpha_(int ch){ if(ch >= 65 && ch <= 90){ return 1; }els...

2020-04-28 11:28:52 375

空空如也

空空如也

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

TA关注的人

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