- 博客(124)
- 收藏
- 关注
原创 ES作为向量库研究
相比专门的向量库,ES作为向量库有它自己的优点,比如可以方便的使用全文检索及混合检索。当然,性能和数据规模方面可能有所不如,不过,对于中等规模的应用,倒不是太大的问题。
2025-11-21 15:19:02
341
原创 kotlin常用语法点理解
就是?,表明变量可能为null。?及相关的elvis运算符(?:)的引入相比java是一大进步,可避免大量的NPE问题。
2025-11-04 16:29:56
1011
原创 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
原创 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
原创 apache连接池机制讨论
server一般会配置keep-alive超时时间,过了这个时间还没新请求到来,则关闭连接。那么一个连接是如何判定不新鲜(stale)的呢?fillInputBuffer方法会尝试从socket里读取字节,返回值为读取的字节数,若返回-1,说明连接已关闭。顺带说一下,实测发现,。
2025-03-27 15:48:04
760
原创 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
原创 spring RestTemplate使用说明
rest-template是spring对httpclient的逻辑封装,它底层还是基于httpclient,所以一些配置其实跟httpclient是强相关的。
2024-12-17 15:13:54
521
原创 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
原创 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
原创 用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关注的人
RSS订阅