自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 scala下DSL的设计与开发

我们考虑scala下的DSL实现,scala有一些特性可方便的支持内部DSL开发:函数curry化、隐式转换、对象方法调用无需点号和圆括号。 假设有下面的DSL: + 支持int、string、bool类型的字面量 + 支持in、not in操作,判断是否在一个tuple中,例如:”baba” in (“baba”, 1, 2) + 支持and、or操作符 + 字面量支持size方法 我

2017-08-18 20:59:18 3483

原创 apache连接池机制讨论

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

2025-03-27 15:48:04 621

原创 代码质量保障措施

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

2025-03-20 10:23:12 97

原创 torch使用心得

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

2025-02-17 19:50:59 776

原创 H2模拟mysql的存储过程

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

2025-02-08 16:45:18 228

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

原创 文本分类问题讨论

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

2025-01-02 19:42:12 465

原创 文本向量化技术

可见,词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 417

原创 rust与python互通

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

2024-12-20 10:20:09 518

原创 spring RestTemplate使用说明

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

2024-12-17 15:13:54 262

原创 python和C数据互转

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

2024-11-05 20:12:58 272 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 204

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

原创 如何制作ubuntu启动U盘

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

2024-09-15 15:02:20 911

原创 ubuntu使用心得

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

2024-09-15 11:27:38 1301

原创 PyQT开发总结

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

2024-09-10 19:11:48 907

原创 PBE加密算法说明

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

2024-09-07 16:56:55 435

原创 AES加密算法说明

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

2024-09-06 19:47:57 864

原创 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 1122 4

原创 py2exe打包

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

2024-08-10 15:03:40 318

原创 sublime text插件开发

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

2024-08-07 12:08:38 393

原创 用python做DDL的静态分析

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

2024-07-06 17:03:49 379

原创 关于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 569 1

原创 SpEL讨论

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

2024-05-29 11:45:37 280

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

原创 spring bean的注册讨论

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

2024-05-16 16:47:00 174

原创 对rust语言的一些理解

近来在研究rust语言,作为老牌的C++程序员及拥有近10年经验的java程序员,觉得有必要通过语言间的对比来加深对rust的理解。

2024-05-13 17:24:50 1091

原创 用python做java语言的静态分析

我们可以把javalang解析出的语法树进行再加工,生成我们需要的元信息,再结合校验规则,做一些常见编码问题的分析。最近在对java语言做静态分析,发现javalang这个好用的python包。这就是lint类工具的一般性原理。

2024-03-08 17:13:54 660

原创 python深度讨论

我们一般用python的unittest写单元测试。

2024-03-01 14:52:58 491

原创 正则表达式的一些高级用法

不允许出现某个单词,使用?!(?!Pattern).\.matches表示.matches之前的不能是Pattern非贪婪匹配,在匹配项后加?matches\((.*?)\)这里在.*后加问号,表示尽可能少的匹配。防范redos攻击,可使用Cyber-Redos-Terminator检查开发使用的正则表达式

2024-02-20 16:49:43 1635

原创 java语言深度讨论

我们会看到,try-with-resource依然会翻译为try-finally,在finally里面,是要明确判断构造对象parser是否为null,不为null,才会调用其close方法的。一旦构造器抛异常,parser肯定是null,所以其close不会调用。所以,如果构造器里涉及某些资源创建(例如文件),同时可能抛异常,就要在构造器里做好异常下的资源清理,而不能指望close方法自动完成。逻辑上很好理解,你对象都没成功创建,我为啥要调close啊。这样的处理逻辑跟C++也是一样的。

2024-01-29 11:53:43 429

原创 swagger标签说明

指定了x-ref-external的数据结构里的properties只是起到一个方便阅读的作用,并不会根据properties真的生成属性。

2024-01-16 16:09:53 561

原创 lombok注解说明

@Data是包含了@EqualsAndHashCode和@ToString的@EqualsAndHashCode默认是不比较父类的属性的,如需比较,设置callSuper=true

2024-01-16 11:39:30 406

原创 springboot下rest接口抛异常的定制处理

主要是定制ExceptionMapper,作为jaxrs框架的provider,即可将rest接口实现里抛的异常截住,并转化为Response发送给前台。

2023-12-08 15:25:52 603

原创 mysql使用进阶----索引原理

mysql索引使用B+树。详细原理可参考。

2023-11-02 15:58:54 179

原创 mysql使用进阶----查询计划

解释一下type、possible_keys 和key等几个字段的含义。

2023-11-02 14:24:04 150

原创 xss漏洞及排查

它直接返回前端输入的名字。界面会弹出domain域的对话框。上述攻击是后端将前端的输入未做任何处理,直接返回到web界面上造成,称之为反射型xss。还有一种存储型xss,后端对前端输入未做处理,存到数据库中。后续每个用户来访问页面,数据库的数据都会加载到界面上,从而形成xss攻击。这两种xss,客观上形成了一种动态页面或非法链接,造成浏览器解释非法脚本。

2023-10-11 10:48:53 283

原创 跨域问题讨论

。也就是说,一旦允许跨域,意味着允许恶意网站随意攻击可信网站,带来安全风险。这里面有一个前提:用户必须先登录可信站点A才行(登录cookie会保存在客户本地)。SOP:same-origin policy,同源策略现代浏览器默认遵循同源策略,即网站A的请求不能去访问网站B。但,、、所以,即使在浏览器支持SOP的情况下,前例中的恶意网站仍可以构造例如img src这样的恶意代码,绕过浏览器的SOP规则,访问正常网站A。不受SOP限制的资源清单:脚本文件 js图片资源样式资源cssiframe展示其他的

2023-09-28 10:55:36 319

原创 预防Dos攻击

Dos----拒绝服务攻击,一般是构造特殊的输入,使得后台的处理耗时远超正常水平,随着请求越来越多,后台服务越发疲于奔命,最后因资源耗尽,无法再接受新的请求,最终造成拒绝服务的效果。对于后者,往往是在post请求里,可以做一个filter来处理所有的incoming request。对于前者,做一个公共函数检查pageSize的大小,确定合理的范围即可。分页查询时传一个很大的pageSize;入参是一个很大的集合。

2023-09-11 16:29:28 576

原创 android开发心得

因E2E开发和架构设计需要,对android要有基本的开发能力,结合项目,有一些总结,记录之。

2023-09-01 10:40:08 243

空空如也

空空如也

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

TA关注的人

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