自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ES作为向量库研究

相比专门的向量库,ES作为向量库有它自己的优点,比如可以方便的使用全文检索及混合检索。当然,性能和数据规模方面可能有所不如,不过,对于中等规模的应用,倒不是太大的问题。

2025-11-21 15:19:02 341

原创 kotlin常用语法点理解

就是?,表明变量可能为null。?及相关的elvis运算符(?:)的引入相比java是一大进步,可避免大量的NPE问题。

2025-11-04 16:29:56 1011

原创 本地AI助手搭建

重试个一两次就能成功下载。

2025-10-21 15:45:16 907

原创 pyenv安装及使用

pyenv支持在系统里并存多个python版本。

2025-10-16 17:20:03 224

原创 javalang包的源码简析

javalang是一个解析java8语法的python三方库,采用的是自顶向下的解析方法,提前看1~2个字符+回溯。tree.py 放ast的各种Node结构parser.py 解析java8语法的核心类。

2025-09-30 17:00:07 210

原创 java21语法特性讨论

原以为record的出现是为了简化data class的写法。但实际用下来,发现并不能将jdk8时代的data class直接改成record。主要原因是:record是不可变的,它没有默认无参构造函数(可以手动重载)、也没有setter(语法层面不允许)。但,很多三方库其实是要用无参构造+setter来做data class的反序列化的,这会造成运行期问题。另,record是会为我们自动生成equals、hashCode和toString方法的,用javap -v反编译class文件就能看到。

2025-09-24 12:01:09 250

原创 一些常用的激活函数及绘图

sigmoid和tanh的缺点是梯度饱和(梯度易消失)。relu则改进了这一点(正半区梯度为1),且很容易计算。leaky_relu和gelu则解决了relu负半区梯度消失的问题,它俩在负半区仍有微小梯度,确保训练可进行下去。gelu还解决了relu算法在原点处的硬转折,使得梯度更平滑,反向传播噪声更小,训练更稳定。

2025-09-10 16:55:31 322

原创 逻辑回归分类器

对于多分类,L一般是softmax函数,p为一向量,向量长度为多分类的类别数,向量元素之和为1。我们取出p中最大的元素,其对应的类别就是多分类的结果。由于逻辑回归是线性回归的结果套了一个归一化层(logistic或softmax),所以逻辑回归只能用于分类,线性回归则用于预测。对于二分类,L一般是logistic函数(即sigmoid函数),p是标量数值,其值域是(0,1)。式中,x是自变量,y是因变量。决定因变量是0还是1,从而达到分类的效果。二分类下,y则是标量数值。

2025-09-02 17:12:20 150

原创 graalvm初探

graalvm是普通JDK的增强版,支持AOT特性,可将jar包转成本地可执行文件,提升启动时间,减少内存占用。同时还支持多语言融合编程,支持python/ruby/js等语言。

2025-08-07 16:46:05 456

原创 IDEA插件开发心得

可参考:下面是执行上述过程中记录的一些问题。

2025-08-01 09:37:40 1185

原创 pyinstaller使用心得

之前一直用的py2exe,到了python3.8不好用了,遂改为使用pyinstaller。使用下来,发现还是很好用的。有两种模式:单文件和文件夹模式。windows下临时文件夹以_MEI打头,形如C:\Users\${user}\AppData\Local\Temp\_MEI1393882。文件夹模式会生成一个文件夹,里面有exe+internal目录,internal目录里是exe所依赖的文件。前者使用和发布更简单,一个exe搞定。

2025-07-30 11:20:14 525

原创 java/mysql/ES下的日期类型分析

mysql的TIMESTAMP类型内部存的是unix时间戳,可认为是一个32位的整型,它记录了1970.1.1以来的秒数。因为存储长度4字节的限制,所以有2038年限制。DATETIME类型内部存的是long型,记录了1000.1.1以来的秒数,因为有8个字节,所以能支持到9999年。TIMESTAMP是时区相关的,它把客户端输入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,又转化为客户端当前时区返回。DATETIME则是时区无关的,不做任何改变,原样输入和输出。

2025-05-30 16:21:42 580

原创 spring注解旁路问题讨论

另外,@Aspect切面只能处理public、protected、package访问权限的成员函数,像private、static成员函数均无法拦截,所以,private或static成员函数上的注解是没有意义的。加了这两个注解后的函数,要使得注解生效,需用自注入的self方式调用,否则调用的还是原始的逻辑,而非切面动态编织(weave)后的逻辑。@FuncTrace是用@Aspect做的打印函数进出日志的注解。在需要self调用的场合使用了this调用,就会导致注解旁路。

2025-05-23 14:06:14 191

原创 如何构造connection reset错误

connection reset错误由RST信号引发,在开发环境上要构造client端的RST异常关闭,目前找到2种方法:1、强杀server端进程,这时server端底层的TCP协议栈会发RST信号给client。可以装一个wireshark观察到此情况。2、设置server端监听socket的SO_LINGER选项为true和0(这个选项默认是false),强制server端关闭连接时不发FIN而是发RST信号。

2025-05-13 12:40:32 503

原创 typescript开发心得

用await,或者有些库提供了sync方法。

2025-04-11 17:06:42 447

原创 apache连接池机制讨论

server一般会配置keep-alive超时时间,过了这个时间还没新请求到来,则关闭连接。那么一个连接是如何判定不新鲜(stale)的呢?fillInputBuffer方法会尝试从socket里读取字节,返回值为读取的字节数,若返回-1,说明连接已关闭。顺带说一下,实测发现,。

2025-03-27 15:48:04 760

原创 代码质量保障措施

关注团队代码质量的一些经验,记录一下:

2025-03-20 10:23:12 166

原创 torch使用心得

训练周期(epoch)下有多个训练步骤(step)。

2025-02-17 19:50:59 822

原创 H2模拟mysql的存储过程

实践中还会遇到mysql的存储过程需要模拟的情况,可用H2的ALIAS来实现。

2025-02-08 16:45:18 292

原创 mysql DDL可重入讨论

mysql的bug:当执行 MySQL online DDL 时,期间如有其他并发的 DML 对相同的表进行增量修改,比如 update、insert、insert into …on duplicate key、replace into 等,且增量修改的数据违背唯一约束,那么 DDL 最后都会执行失败,报错主键冲突。这里的“增量修改的数据违背唯一约束”,从实践来看即使insert into on duplicate执行成功,依然有可能触发DDL报错,并非一定要DML执行失败。

2025-01-27 15:13:14 506

原创 文本分类问题讨论

其accuracy也达到了90%,但对于故障集则全部预测错误,其precise、recall、f1-score都是0,非常差的指标,即使accuracy高达90%也不能掩盖分类器的失败。降采样就是去掉部分正样本,使得正负样本均衡,但如果负样本的绝对数量很小,会导致降采样后的总样本数变得很小,造成“欠拟合”,算法的分类效果会大大下降。升采样就是人造一批负样本,把正负样本比例升上去,一旦正负样本均衡了,分类效果就会变好,但由于有“伪造”的数据,不排除过拟合的可能。recall则是从实际结果来看的。

2025-01-02 19:42:12 619

原创 文本向量化技术

可见,词t在文档里出现的越少,idf值越大,该词的影响力就越大。+1主要是确保那些在所有文档里出现的词(显然,此时df(d, t)=N,所以log [ N / df(d, t) ] = 0)不会完全被忽略。也可使用tf-idf方法完成文本向量化,该方法是在词袋法的基础上考虑了idf,即“逆向文档频率”,削弱了那些在多个文档中频繁出现的词的影响(这些词往往不那么重要,因为它们无法区分文档)。这样的向量,向量元素是某个单词在文档里出现的次数。d为文档,idf(d, t)为逆文档频率。t为词,tf(t)为词频;

2024-12-30 16:52:01 579

原创 rust与python互通

rust侧与python互通的三个库:pyo3pythonizeserde。

2024-12-20 10:20:09 639

原创 spring RestTemplate使用说明

rest-template是spring对httpclient的逻辑封装,它底层还是基于httpclient,所以一些配置其实跟httpclient是强相关的。

2024-12-17 15:13:54 521

原创 python和C数据互转

得到一个c_int。再调用c_int.value属性得到python int。

2024-11-05 20:12:58 332 1

原创 llvm开发心得

entry:注意后面2个indice=0的参数,第一个0表示,getelementptr从[2 x i8]*里取得第一个也是唯一一个元素(索引为0),其类型是[2 x i8],第二个0表示再取这个char array的第一个元素的地址,相当于C里的&arr[0],返回的自然是i8*。可见,getelementptr是很强大的,它可以取得一个嵌套结构里的任意成员。使用IR构建DSL的过程,就像用汇编开发程序的过程。

2024-10-14 11:40:36 286

原创 python AST机制讨论

我们这里1+2是一个表达式,故使用eval模式解析。解析出的AST树可以传入compile函数,该函数不带标记时,默认编译为python code object,最后用eval执行python code object得到结果。python2里有个compiler.ast模块,用于分析、构建python ast。这个模块在python3里移除了,其能力分散到compile()函数+ast模块里。最近在python3下考虑把其它语言转成python字节码执行,为此,研究了python3的AST机制。

2024-09-16 10:26:34 357

原创 如何制作ubuntu启动U盘

当尝试在大于32GB的存储设备上使用FAT32格式化时,会遇到“卷大小太大”的错误。但过程很艰辛,遇到很多问题,特别记录一下。

2024-09-15 15:02:20 1336

原创 ubuntu使用心得

入手了一台新机,装了ubuntu,总的说来,现在的linux桌面基本可用,虽然距windows的易用性还有一定距离。顺便记录一下使用心得。

2024-09-15 11:27:38 1380

原创 PyQT开发总结

用PyQT开发了一个界面小程序,记录一下。

2024-09-10 19:11:48 963

原创 PBE加密算法说明

上述代码里的salt + str2byte(password)就是准密钥,经过SHA256安全散列算法生成kek,这里我们为简单起见,只做了一次散列,实际是可以做多次的。kek我们不用存,因为它可以通过salt+口令计算生成,但msg_key我们要加密后存储,这里我们将salt和msg_key放到了一个单独的secret.bin文件里,这个secret.bin文件也要保护起来(通过权限或口令)。但对于攻击者而言,他是要用大量的候选key进行尝试的,再叠加多次散列算法执行,那就是一个很大的负担。

2024-09-07 16:56:55 611

原创 AES加密算法说明

首先,我们得了解AES加密算法的一些基本概念。AES是一种对称加密算法,所谓对称,是说它的加密、解密过程使用相同的密钥。还有非对称加密算法,例如RSA,加密解密使用的是公私钥对。AES同时是一种分组加密算法,分组的长度一般是16字节(128bit)。分组是什么意思呢?假设我有一段很长的明文T,我没法用AES加密整个T,只能将T分成若干16byte的明文组,接着对这些明文组逐个进行加密,得到一堆密文组,把密文组组合起来,才是最终的密文。

2024-09-06 19:47:57 1024

原创 rust语法细节讨论

入门中文教程链接:https://kaisery.github.io/trpl-zh-cn/ch02-00-guessing-game-tutorial.html字节是u8,一个字节;字符是unicode编码,占4个字节。字符串的字节序列用as_bytes()返回,字符序列用chars()返回。字符串的len()返回的是字节数,而非字符数。字符数用s.chars().count()来获得。用+可以,但推荐使用format!宏。例如:常量常量在编译时被求值,它们的值会在使用的地方被内联。常量初始化时不能调

2024-08-26 14:38:17 1270 4

原创 py2exe打包

要用到py2exe打包python程序,记录一下。

2024-08-10 15:03:40 376

原创 sublime text插件开发

手工开发了一些ST的py插件,记录过程中遇到的一些问题。

2024-08-07 12:08:38 467

原创 用python做DDL的静态分析

顺带说一个小窍门,就是DDLParser有一个silent=True选项,默认是关闭的,跳过语法错。但如果发现有的DDL解析不出来,可以临时打开该选项,看看究竟是哪一处语法不支持,非常快捷。最近在用python做DDL SQL的分析,用的是simple_ddl_parser1.5.1。遇到了一些问题,记录一下。这种情况需要我们对DDL做一些预处理,才能获得表结构的信息。会被输出为我们需要的t_testtbl。

2024-07-06 17:03:49 463

原创 关于Spring Cacheable注解的讨论

Cacheable注解中,value或cacheNames表示缓存名,key表示缓存里的主键名,unless表示某些条件下不存缓存,condition表示只在某些条件下才存缓存(即unless的否定条件)。这里要特别注意:key属性使用的是SpEL表示,而非普通字符串。表示key名为key1,SpEL里字符串必须用单引号括起来。如果不使用SpEL指定key,,生成规则是:AppID+subAppID+@Cacheable.value+入参字符串。

2024-06-11 12:07:06 670 1

原创 SpEL讨论

SpEL是spring框架提供的表达式语言(expression language),用作spring框架或注解的一些配置。因为近期在做代码分析,需用PLY对SpEL做语法解析,所以着重研究了一下SpEL的语法。记录一下,以便查阅。

2024-05-29 11:45:37 356

原创 PLY使用心得

越靠前的,算符优先级越低,同一层的算符优先级相同。当优先级相同的算符连续出现时,就要看是左结合还是右结合(代码里left和right所表示的含义),比如+和-是左结合,那么a + b - c执行顺序是(a+b)-c;再比如赋值是右结合,那么a=b=c的执行顺序是a=(b=c)会导致将关键字and和or也解析为ID,这不是我们想要的行为。最近在利用python做语法解析,使用了PLY,就是pyton里的lex+yacc。

2024-05-21 15:38:17 416

原创 spring bean的注册讨论

注册spring bean的方法总结在类上加@Component、@Service、@Named等注解。在类上加@Configuration注解,类成员方法上加@Bean。在spring.factories里配置EnableAutoConfiguration对应的类,在类方法上定义@Bean。应该算是@Configuration+@Bean的特化处理吧。EnableAutoConfiguration能根据应用程序的依赖和类路径自动配置所需的bean 。在BeanFactoryPostProcess

2024-05-16 16:47:00 208

空空如也

空空如也

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

TA关注的人

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